8.1 కుళ్ళిపోవడమే సర్వస్వం
స్పష్టత కోసం, "ఆబ్జెక్ట్-ఓరియెంటెడ్ సిస్టమ్స్ డికప్లింగ్" అనే మంచి కథనం నుండి ఒక చిత్రం, చర్చించబడే ప్రధాన అంశాలను వివరిస్తుంది.
అప్లికేషన్ ఆర్కిటెక్చర్ని డిజైన్ చేయడం చాలా సులభం అని మీరు ఇప్పటికీ అనుకుంటున్నారా?
8.2 ఇంటర్ఫేస్లు, అమలు దాచడం
సిస్టమ్ యొక్క కలపడాన్ని తగ్గించడానికి ప్రధాన సూత్రాలు OOP యొక్క సూత్రాలు మరియు వాటి వెనుక ఉన్న ఎన్క్యాప్సులేషన్ + అబ్స్ట్రాక్షన్ + పాలిమార్ఫిజం సూత్రం.
అందుకే:
- మాడ్యూల్స్ ఒకదానికొకటి "బ్లాక్ బాక్స్లు"గా ఉండాలి (ఎన్క్యాప్సులేషన్) . దీని అర్థం ఒక మాడ్యూల్ మరొక మాడ్యూల్లోకి "ఎక్కి" ఉండకూడదు మరియు దాని అంతర్గత నిర్మాణం గురించి ఏదైనా తెలుసుకోవాలి. ఒక సబ్సిస్టమ్లోని వస్తువులు మరొక సబ్సిస్టమ్లోని వస్తువులను నేరుగా యాక్సెస్ చేయకూడదు.
- మాడ్యూల్లు/సబ్సిస్టమ్లు ఇంటర్ఫేస్ల ద్వారా మాత్రమే పరస్పరం సంకర్షణ చెందాలి (అంటే, అమలు వివరాలపై ఆధారపడని సంగ్రహణలు ). దీని ప్రకారం, ప్రతి మాడ్యూల్ ఇతర మాడ్యూల్లతో పరస్పర చర్య చేయడానికి బాగా నిర్వచించబడిన ఇంటర్ఫేస్ లేదా ఇంటర్ఫేస్లను కలిగి ఉండాలి.
"బ్లాక్ బాక్స్" (ఎన్క్యాప్సులేషన్) సూత్రం ప్రతి ఉపవ్యవస్థ యొక్క నిర్మాణాన్ని ఇతర ఉపవ్యవస్థల నుండి స్వతంత్రంగా పరిగణించడానికి అనుమతిస్తుంది. మాడ్యూల్, ఇది "బ్లాక్ బాక్స్", సాపేక్షంగా స్వేచ్ఛగా మార్చబడుతుంది. వివిధ మాడ్యూల్స్ (లేదా మాడ్యూల్ మరియు పర్యావరణం) జంక్షన్ వద్ద మాత్రమే సమస్యలు తలెత్తుతాయి.
మరియు ఈ పరస్పర చర్యను అత్యంత సాధారణ (నైరూప్య) రూపంలో, అంటే ఇంటర్ఫేస్ రూపంలో వివరించాలి. ఈ సందర్భంలో, ఇంటర్ఫేస్ ఒప్పందానికి అనుగుణంగా ఉండే ఏదైనా అమలుతో కోడ్ అదే పని చేస్తుంది. పాలిమార్ఫిజం అని పిలువబడే ఏకీకృత ఇంటర్ఫేస్ ద్వారా వివిధ అమలులతో (మాడ్యూల్స్ లేదా ఆబ్జెక్ట్లు) పని చేసే ఈ సామర్ధ్యం ఇది.
అందుకే సర్వ్లెట్ ఒక ఇంటర్ఫేస్ : వెబ్ కంటైనర్కు సర్వ్లెట్ల గురించి ఏమీ తెలియదు, ఎందుకంటే ఇవి సర్వ్లెట్ ఇంటర్ఫేస్ను అమలు చేసే కొన్ని వస్తువులు మరియు అంతే. సర్వ్లెట్లకు కంటైనర్ నిర్మాణం గురించి కొంచెం తెలుసు. సర్వ్లెట్ ఇంటర్ఫేస్ అనేది జావా వెబ్ అప్లికేషన్లను ప్రపంచాన్ని ఆక్రమించేలా చేయడానికి అవసరమైన కాంట్రాక్ట్, ఆ స్టాండర్డ్, కనీస ఇంటరాక్షన్.
పాలిమార్ఫిజం అనేది కొన్నిసార్లు పొరపాటుగా విశ్వసించబడినట్లుగా, పద్ధతులను పూర్తిగా అధిగమించదు, కానీ అన్నింటిలో మొదటిది, ఒకే ఇంటర్ఫేస్ లేదా “ఒక ఇంటర్ఫేస్, అనేక అమలులు” ఉన్న మాడ్యూల్స్ / వస్తువుల పరస్పర మార్పిడి. పాలిమార్ఫిజమ్ని అమలు చేయడానికి, వారసత్వ యంత్రాంగం అస్సలు అవసరం లేదు. ఇది అర్థం చేసుకోవడం ముఖ్యం ఎందుకంటే సాధారణంగా వారసత్వం సాధ్యమైనప్పుడల్లా నివారించబడాలి .
ఇంటర్ఫేస్లు మరియు పాలిమార్ఫిజమ్కి ధన్యవాదాలు , ఇది ఇప్పటికే వ్రాసిన (ఓపెన్-క్లోజ్డ్ ప్రిన్సిపల్) ను మార్చకుండా కోడ్ను సవరించే మరియు పొడిగించే సామర్థ్యం ఖచ్చితంగా ఉంది.
మాడ్యూల్ల పరస్పర చర్య ప్రత్యేకంగా ఇంటర్ఫేస్ల రూపంలో వివరించబడినంత వరకు మరియు నిర్దిష్ట అమలులతో ముడిపడి ఉండనంత వరకు, సిస్టమ్ కోసం ఖచ్చితంగా “నొప్పి లేకుండా” ఒక మాడ్యూల్ను అదే ఇంటర్ఫేస్ని అమలు చేసే ఇతర వాటితో భర్తీ చేసే అవకాశం మీకు ఉంది, అలాగే కొత్తదాన్ని జోడించి తద్వారా కార్యాచరణను విస్తరించండి.
ఇది LEGO కన్స్ట్రక్టర్లో లాగా ఉంటుంది - ఇంటర్ఫేస్ పరస్పర చర్యను ప్రామాణికం చేస్తుంది మరియు తగిన కనెక్టర్తో ఏదైనా మాడ్యూల్ని కనెక్ట్ చేయగల ఒక రకమైన కనెక్టర్గా పనిచేస్తుంది.
మేము ఒక మాడ్యూల్ లేదా భాగాన్ని మరొక దానితో ఒకే కనెక్టర్లతో (అదే ఇంటర్ఫేస్తో) భర్తీ చేయగలము, అలాగే మనకు నచ్చినన్ని కొత్త భాగాలను జోడించగలము (అదే సమయంలో, ఇప్పటికే ఉన్నవి) డిజైనర్ యొక్క వశ్యత నిర్ధారిస్తుంది. భాగాలు ఏ విధంగానూ మార్చబడవు లేదా మార్చబడవు).
ఇంటర్ఫేస్లు ప్రతి ఉపవ్యవస్థను మొత్తంగా పరిగణించి, దాని అంతర్గత నిర్మాణాన్ని విస్మరిస్తూ సరళమైన వ్యవస్థను నిర్మించడానికి మిమ్మల్ని అనుమతిస్తాయి. వారు మాడ్యూల్స్ పరస్పరం పరస్పరం మరియు అదే సమయంలో ఒకదానికొకటి అంతర్గత నిర్మాణం గురించి ఏమీ తెలియదు, తద్వారా కనిష్ట జ్ఞానం యొక్క సూత్రాన్ని పూర్తిగా అమలు చేస్తారు, ఇది వదులుగా కలపడం యొక్క ఆధారం.
ఇంటర్ఫేస్లు మరింత సాధారణ/అబ్స్ట్రాక్ట్గా నిర్వచించబడతాయి మరియు అవి పరస్పర చర్యపై తక్కువ పరిమితులను విధించాయి, సిస్టమ్ మరింత సరళమైనది. ఇక్కడ నుండి, SOLID సూత్రాలలో మరొకటి వాస్తవానికి అనుసరిస్తుంది - ఇంటర్ఫేస్ విభజన సూత్రం , ఇది “మందపాటి ఇంటర్ఫేస్లను” వ్యతిరేకిస్తుంది.
పెద్ద, స్థూలమైన ఇంటర్ఫేస్లు చిన్నవి, మరింత నిర్దిష్టమైనవిగా విభజించబడాలని, తద్వారా చిన్న ఇంటర్ఫేస్ల (మాడ్యూల్స్పై ఆధారపడి) క్లయింట్లకు వారు పని చేయాల్సిన పద్ధతుల గురించి మాత్రమే తెలుసునని ఆయన చెప్పారు.
ఈ సూత్రం క్రింది విధంగా రూపొందించబడింది: "క్లయింట్లు వారు ఉపయోగించని పద్ధతులపై (పద్ధతుల గురించి తెలుసుకోవాలి) ఆధారపడకూడదు" లేదా "ఒక సార్వత్రిక ఒకటి కంటే అనేక ప్రత్యేక ఇంటర్ఫేస్లు ఉత్తమమైనవి".
మాడ్యూల్స్ యొక్క పరస్పర చర్య మరియు డిపెండెన్సీలు వాటి అంతర్గత నిర్మాణం మరియు నిర్మాణం గురించి జ్ఞానాన్ని ఉపయోగించకుండా ఇంటర్ఫేస్ల సహాయంతో, అంటే సంగ్రహణల సహాయంతో మాత్రమే వివరించబడినప్పుడు మాత్రమే బలహీనమైన కనెక్టివిటీ అందించబడుతుంది మరియు వాస్తవానికి, ఎన్క్యాప్సులేషన్ ఈ విధంగా అమలు చేయబడుతుంది. అదనంగా, విభిన్న అమలులను జోడించడం మరియు ఉపయోగించడం ద్వారా సిస్టమ్ యొక్క ప్రవర్తనను విస్తరించే / మార్చగల సామర్థ్యం మాకు ఉంది, అంటే పాలిమార్ఫిజం కారణంగా. అవును, మేము మళ్లీ OOPకి వచ్చాము - ఎన్క్యాప్సులేషన్, అబ్స్ట్రాక్షన్, పాలిమార్ఫిజం.
8.3 ముఖభాగం: మాడ్యూల్ ఇంటర్ఫేస్
ఇక్కడ ఒక అనుభవజ్ఞుడైన ప్రోగ్రామర్ అడుగుతాడు: డిజైన్ అనేది సంబంధిత ఇంటర్ఫేస్లను అమలు చేసే వస్తువుల స్థాయిలో కాకుండా, మాడ్యూల్స్ స్థాయిలో ఉంటే, అప్పుడు మాడ్యూల్ ఇంటర్ఫేస్ యొక్క అమలు ఏమిటి?
సమాధానం: డిజైన్ నమూనాల భాషలో మాట్లాడటం, అప్పుడు ఒక ప్రత్యేక వస్తువు మాడ్యూల్ ఇంటర్ఫేస్ అమలుకు బాధ్యత వహిస్తుంది - ముఖభాగం . మీరు గేట్వే ప్రత్యయం (ఉదాహరణకు, MobileApiGateway) కలిగి ఉన్న ఆబ్జెక్ట్పై పద్ధతులను కాల్ చేస్తుంటే, అది చాలావరకు ముఖభాగం.
ముఖభాగం అనేది ఒక నిర్దిష్ట ఉపవ్యవస్థతో పనిచేయడానికి, దాని అంతర్గత నిర్మాణాన్ని మరియు దాని వెనుక ఉన్న నిజమైన సంక్లిష్టతను దాచడానికి అధిక-స్థాయి కార్యకలాపాలను సేకరించే ఇంటర్ఫేస్ వస్తువు . ఉపవ్యవస్థ అమలులో మార్పుల నుండి రక్షణను అందిస్తుంది. సింగిల్ ఎంట్రీ పాయింట్గా పనిచేస్తుంది - "మీరు ముఖభాగాన్ని తన్నాడు, మరియు అతనికి అవసరమైన వాటిని పొందడానికి ఈ ఉపవ్యవస్థలో ఎవరు తన్నాలి అని అతనికి తెలుసు."
మీరు మాడ్యూల్లను రూపకల్పన చేసేటప్పుడు ఇంటర్ఫేస్ల భావనను ఉపయోగించడానికి మరియు తద్వారా వాటిని విడదీయడానికి మిమ్మల్ని అనుమతించే అత్యంత ముఖ్యమైన డిజైన్ నమూనాలలో ఒకదానికి ఇప్పుడే పరిచయం చేయబడ్డారు - "ముఖభాగం".
అదనంగా, "ముఖభాగం" సాధారణ వస్తువులతో అదే విధంగా మాడ్యూళ్ళతో పనిచేయడం సాధ్యం చేస్తుంది మరియు మాడ్యూల్స్ రూపకల్పన చేసేటప్పుడు తరగతుల రూపకల్పనలో ఉపయోగించే అన్ని ఉపయోగకరమైన సూత్రాలు మరియు సాంకేతికతలను వర్తింపజేస్తుంది.
గమనిక : చాలా మంది ప్రోగ్రామర్లు తరగతులను (వస్తువులను) రూపకల్పన చేసేటప్పుడు ఇంటర్ఫేస్ల యొక్క ప్రాముఖ్యతను అర్థం చేసుకున్నప్పటికీ, మాడ్యూల్ స్థాయిలో కూడా ఇంటర్ఫేస్లను ఉపయోగించాలనే ఆలోచనను చాలామంది కనుగొన్నట్లు అనిపిస్తుంది.
GO TO FULL VERSION