1. సాధారణ బేస్ క్లాస్
ఈ రోజు మనం ఆసక్తికరమైన అంశాల స్మోర్గాస్బోర్డ్ను ఆనందిస్తాము. చెస్ ముక్కలను సూచించే అన్ని తరగతులను సరళీకృతం చేయడానికి మేము బేస్ క్లాస్ను ప్రవేశపెట్టినప్పుడు గుర్తుందా ? నేను ఆశిస్తున్నాను 🙂ChessItem
draw()
ఇప్పుడు ప్రతి భాగానికి స్క్రీన్పై డ్రాయింగ్ చేసే పద్ధతి ఉందని ఊహించుకోండి . మీరు పద్ధతిని పిలుస్తారు draw()
మరియు ముక్క దాని ప్రస్తుత కోఆర్డినేట్ల వద్ద ఆకర్షిస్తుంది. ఈ పద్ధతిని బేస్ క్లాస్కి తరలించడం సౌకర్యంగా ఉంటుంది.
పద్ధతి draw()
ChessItem బేస్ క్లాస్లో ఉన్నట్లయితే, మేము దానిని పీస్ క్లాస్లలో భర్తీ చేయవచ్చు మరియు ఇలా సొగసైన కోడ్ను వ్రాయవచ్చు:
class ChessBoard
{
public void drawAllChessItems()
{
// Add the pieces to the list
ArrayList<ChessItem> items = new ArrayList<ChessItem>();
items.add(new King());
items.add(new Queen());
items.add(new Bishop());
// Draw them regardless of their type
for(ChessItem item: items)
{
item.draw();
}
}
}
బేస్ క్లాస్ను పరిచయం చేయడం ద్వారా ChessItem
, మేము కోడ్ను చాలా సరళీకృతం చేయగలిగాము: ప్రతి తరగతి యొక్క పద్ధతులను విడిగా పిలవవలసిన అవసరం లేదు, మేము అన్ని వస్తువులను ఒకే సేకరణలో సులభంగా నిల్వ చేయవచ్చు.
draw()
కానీ ఇక్కడ ఒక ఆసక్తికరమైన ప్రశ్న ఉంది: క్లాస్లో నేరుగా డిక్లేర్ చేయబడిన పద్ధతి ChessItem
స్క్రీన్పై డ్రా ఏమిటి ? అన్ని తరువాత, చదరంగంలో అలాంటి ముక్క లేదు, కాబట్టి డ్రా ఏమీ లేదు.
అది ఖచ్చితంగా సరైనది. ఇంకేముంది, ChessItem
నేరుగా వస్తువులను సృష్టించడంలో అర్ధమే లేదు. ఇది చదరంగం ముక్క కాదు, కానీ కేవలం ఒక సంగ్రహణ - మా సౌలభ్యం కోసం మేము సృష్టించిన తరగతి. OOP లో సంగ్రహణ ఈ విధంగా పనిచేస్తుంది : మేము ముఖ్యమైన డేటా మరియు పద్ధతులను (అన్ని ముక్కల ద్వారా పంచుకున్నవి) బేస్ క్లాస్కి తరలిస్తాము మరియు వాటి తేడాలను వేరు వేరు డిసెండెంట్ క్లాస్లలో ఉంచుతాము.
2. వియుక్త తరగతులు
అటువంటి పరిస్థితుల కోసం, జావా ప్రత్యేక తరగతిని కలిగి ఉంది: వియుక్త తరగతి . ప్రోగ్రామర్లు సారూప్య తరగతులతో పని చేయడాన్ని సులభతరం చేయడానికి మరియు వాటిలో నకిలీ కోడ్ మొత్తాన్ని తగ్గించడానికి అవి రూపొందించబడ్డాయి.
వియుక్త తరగతుల గురించి తెలుసుకోవలసిన మూడు విషయాలు ఇక్కడ ఉన్నాయి.
అమలు లేని పద్ధతి
ఒక వియుక్త తరగతి అమలు లేకుండా ఒక పద్ధతి ప్రకటనను కలిగి ఉంటుంది. ఇది పద్ధతిని వియుక్తంగా చేస్తుంది. మెథడ్ బాడీ కేవలం సెమికోలన్తో భర్తీ చేయబడుతుంది. మరియు పద్ధతి పేరు ముందు, మేము కీవర్డ్ వ్రాస్తాము abstract
. ఉదాహరణ:
public abstract class ChessItem
{
public int x, y; // Coordinates
private int value; // The piece's value
public int getValue() // Ordinary method that returns value field
{
return value;
}
public abstract void draw(); // Abstract method. The implementation is missing.
}
వియుక్త తరగతి
అమలు లేకుండా ప్రతి పద్ధతి వియుక్త కీవర్డ్తో గుర్తించబడింది. తరగతికి ఒక వియుక్త పద్ధతి ఉంటే, తరగతి కీవర్డ్తో కూడా గుర్తించబడుతుంది abstract
.
వస్తువుల సృష్టిని నిషేధించడం
మీరు వియుక్త తరగతి వస్తువులను సృష్టించలేరు . అటువంటి కోడ్ కంపైల్ చేయదు.
కోడ్ | వివరణ |
---|---|
|
ఈ కోడ్ కంపైల్ చేయదు : |
|
కానీ మీరు దీన్ని చేయవచ్చు |
వియుక్త తరగతిని వారసత్వంగా పొందడం
మీ తరగతి ఒక వియుక్త తరగతిని వారసత్వంగా పొందినట్లయితే, మీరు వారసత్వంగా వచ్చిన అన్ని వియుక్త పద్ధతులను భర్తీ చేయాలి, అంటే మీరు వాటి కోసం అమలును వ్రాయాలి. లేకపోతే, మీ తరగతి కూడా వియుక్తంగా ప్రకటించవలసి ఉంటుంది.
ఒక తరగతిలో అమలు చేయని ఒక పద్ధతిని నేరుగా ప్రకటించినట్లయితే లేదా మాతృ తరగతి నుండి వారసత్వంగా పొందినట్లయితే, ఆ తరగతి వియుక్తంగా పరిగణించబడుతుంది.
మరి ఇదంతా ఎందుకు అవసరం? వియుక్త తరగతులు ఎందుకు అవసరం? దానికి బదులు మామూలు వాటిని వాడటం కుదరదు కదా? మరియు నైరూప్య పద్ధతులకు బదులుగా, మేము కేవలం రెండు ఖాళీ కర్లీ బ్రాకెట్లను మెథడ్ బాడీగా వ్రాయలేమా?
మేము చేయగలము. కానీ ఈ పరిమితులు మాడిఫైయర్కు సమానంగా ఉంటాయి private
. ఇతర ప్రోగ్రామర్లు డేటాను నేరుగా యాక్సెస్ చేయకుండా ఉద్దేశపూర్వకంగా నిరోధించడానికి మరియు వారి తరగతులను వ్రాసేటప్పుడు మా పబ్లిక్ పద్ధతులను మాత్రమే ఉపయోగించమని వారిని బలవంతం చేయడానికి మేము ప్రైవేట్ కీవర్డ్ని ఉపయోగిస్తాము.
ఇది వియుక్త తరగతులతో సమానంగా ఉంటుంది. ఒక వియుక్త తరగతి రచయిత తరగతి యొక్క వస్తువులు సృష్టించబడాలని కోరుకోరు. బదులుగా, రచయిత నైరూప్య పద్ధతులను నైరూప్య తరగతి నుండి వారసత్వంగా పొందాలని మరియు ఆ తర్వాత భర్తీ చేయాలని ఆశించారు.
ఈ విధానం యొక్క ప్రయోజనం పెద్ద ప్రాజెక్టులలో తక్షణమే స్పష్టంగా కనిపిస్తుంది. మీకు ఎక్కువ తరగతులు ఉంటే, మీరు వారి పాత్రలను మరింత స్పష్టంగా వివరించాలి. మీరు సమీప భవిష్యత్తులో ఈ విధానం యొక్క ప్రయోజనాన్ని చూస్తారు. ప్రతి విషయం దీని ద్వారానే సాగుతుంది.
GO TO FULL VERSION