ప్రపంచంలో (OOP), చాలా డిజైన్ మార్గదర్శకాలు, నమూనాలు లేదా సూత్రాలు ఉన్నాయి. ఈ సూత్రాలలో ఐదు సాధారణంగా కలిసి ఉంటాయి మరియు వీటిని SOLID అనే ఎక్రోనిం ద్వారా పిలుస్తారు. ఈ ఐదు సూత్రాలలో ప్రతి ఒక్కటి నిర్దిష్టమైనదాన్ని వివరిస్తుండగా, అవి ఒకదానితో ఒకటి అవలంబించడం లేదా మరొకదాన్ని స్వీకరించడానికి దారితీస్తుంది. ఈ వ్యాసంలో మేము జావాలోని SOLID సూత్రాలను అర్థం చేసుకుంటాము.
జావాలో SOLID సూత్రాల చరిత్ర
రాబర్ట్ సి. మార్టిన్ ఐదు ఆబ్జెక్ట్-ఓరియెంటెడ్ డిజైన్ సూత్రాలను ఇచ్చారు, మరియు “S.O.L.I.D” అనే ఎక్రోనిం దీనికి ఉపయోగించబడుతుంది. మీరు S.O.L.I.D యొక్క అన్ని సూత్రాలను కలిపి ఉపయోగించినప్పుడు, సులభంగా నిర్వహించగలిగే సాఫ్ట్వేర్ను అభివృద్ధి చేయడం మీకు సులభం అవుతుంది. S.O.L.I.D ను ఉపయోగించే ఇతర లక్షణాలు:
- ఇది కోడ్ వాసనలను నివారిస్తుంది.
- త్వరగా వక్రీభవన కోడ్.
- అనుకూల లేదా చురుకైన సాఫ్ట్వేర్ అభివృద్ధి చేయవచ్చు.
మీరు మీ కోడింగ్లో S.O.L.I.D సూత్రాన్ని ఉపయోగించినప్పుడు, మీరు సమర్థవంతంగా మరియు ప్రభావవంతంగా ఉండే కోడ్ను రాయడం ప్రారంభిస్తారు.
S.O.L.I.D యొక్క అర్థం ఏమిటి?
ఘన జావా యొక్క ఐదు సూత్రాలను సూచిస్తుంది:
- ఎస్ : ఒకే బాధ్యత సూత్రం
- లేదా : ఓపెన్-క్లోజ్డ్ సూత్రం
- ఎల్ : లిస్కోవ్ ప్రత్యామ్నాయ సూత్రం
- నేను : ఇంటర్ఫేస్ విభజన సూత్రం
- డి : డిపెండెన్సీ విలోమ సూత్రం
ఈ బ్లాగులో, మేము జావా యొక్క ఐదు SOLID సూత్రాలను వివరంగా చర్చిస్తాము.
జావాలో డేటా నిర్మాణాలు మరియు అల్గోరిథంలు
జావాలో ఒకే బాధ్యత సూత్రం
అది ఏమి చెప్తుంది?
రాబర్ట్ సి. మార్టిన్ దీనిని వివరిస్తుంది, ఒక తరగతికి ఒకే ఒక బాధ్యత ఉండాలి.
ఒకే బాధ్యత సూత్రం ప్రకారం, ఒక తరగతి మాత్రమే మార్చబడటానికి ఒకే ఒక కారణం ఉండాలి. ఒక తరగతికి ఒక పని ఉండాలి అని అర్థం. ఈ సూత్రాన్ని తరచుగా ఆత్మాశ్రయ అని పిలుస్తారు.
సూత్రాన్ని ఒక ఉదాహరణతో బాగా అర్థం చేసుకోవచ్చు. కింది ఆపరేషన్లు చేసే తరగతి ఉందని g హించుకోండి.
డేటాబేస్కు కనెక్ట్ చేయబడింది
డేటాబేస్ పట్టికల నుండి కొంత డేటాను చదవండి
చివరగా, దానిని ఫైల్కు రాయండి.
మీరు దృష్టాంతాన్ని ined హించారా? ఇక్కడ తరగతి మార్చడానికి బహుళ కారణాలు ఉన్నాయి మరియు వాటిలో కొన్ని ఫైల్ అవుట్పుట్ యొక్క మార్పు, కొత్త డేటా బేస్ స్వీకరణ. మేము ఒకే సూత్ర బాధ్యత గురించి మాట్లాడుతున్నప్పుడు, తరగతి మారడానికి చాలా కారణాలు ఉన్నాయని మేము చెబుతాము, ఇది ఒకే బాధ్యత సూత్రంలో సరిగ్గా సరిపోదు.
ఉదాహరణకు, ఆటోమొబైల్ క్లాస్ తనను తాను ప్రారంభించగలదు లేదా ఆపివేయగలదు కాని దానిని కడగడం కార్వాష్ తరగతికి చెందినది. మరొక ఉదాహరణలో, పుస్తక తరగతికి దాని స్వంత పేరు మరియు వచనాన్ని నిల్వ చేసే లక్షణాలు ఉన్నాయి. కానీ పుస్తకాన్ని ముద్రించే పని తప్పనిసరిగా బుక్ ప్రింటర్ తరగతికి చెందినది. బుక్ ప్రింటర్ క్లాస్ కన్సోల్ లేదా మరొక మాధ్యమానికి ముద్రించవచ్చు కాని అలాంటి డిపెండెన్సీలు బుక్ క్లాస్ నుండి తొలగించబడతాయి
ఈ సూత్రం ఎందుకు అవసరం?
ఒకే బాధ్యత సూత్రం అనుసరించినప్పుడు, పరీక్ష సులభం. ఒకే బాధ్యతతో, తరగతికి తక్కువ పరీక్ష కేసులు ఉంటాయి. తక్కువ కార్యాచరణ అంటే ఇతర తరగతులకు తక్కువ ఆధారపడటం. చిన్న మరియు బాగా ఉద్దేశించిన తరగతులు శోధించడం సులభం కనుక ఇది మంచి కోడ్ సంస్థకు దారితీస్తుంది.
ఈ సూత్రాన్ని స్పష్టం చేయడానికి ఒక ఉదాహరణ:
వినియోగదారు సెట్టింగులను మార్చగల యూజర్సెట్టింగ్ సేవను అమలు చేయమని మిమ్మల్ని అడిగినట్లు అనుకుందాం, కానీ అంతకు ముందు వినియోగదారు ప్రామాణీకరించబడాలి. దీన్ని అమలు చేయడానికి ఒక మార్గం:
పబ్లిక్ క్లాస్ యూజర్సెట్టింగ్ సర్వీస్ {పబ్లిక్ శూన్యమైన మార్పు ఇమెయిల్ (యూజర్ యూజర్) {if (చెక్ యాక్సెస్ (యూజర్)) {// మార్చడానికి ఎంపికను మంజూరు చేయండి}} పబ్లిక్ బూలియన్ చెక్ యాక్సెస్ (యూజర్ యూజర్) {// వినియోగదారు చెల్లుబాటులో ఉంటే ధృవీకరించండి. }}
మీరు చెక్ యాక్సెస్ కోడ్ను వేరే ప్రదేశంలో తిరిగి ఉపయోగించాలనుకునే వరకు లేదా చెక్ యాక్సెస్ జరుగుతున్న విధానంలో మార్పులు చేయాలనుకునే వరకు అన్నీ బాగున్నాయి. మొత్తం 2 సందర్భాల్లో మీరు ఒకే తరగతిని మార్చడం ముగుస్తుంది మరియు మొదటి సందర్భంలో మీరు యాక్సెస్ కోసం తనిఖీ చేయడానికి యూజర్సెట్టింగ్ సేవను ఉపయోగించాల్సి ఉంటుంది.
దీన్ని సరిదిద్దడానికి ఒక మార్గం యూజర్సెట్టింగ్ సర్వీస్ను యూజర్సెట్టింగ్ సర్వీస్ మరియు సెక్యూరిటీ సర్వీస్గా కుళ్ళిపోవడమే. మరియు చెక్ యాక్సెస్ కోడ్ను సెక్యూరిటీ సర్వీసులోకి తరలించండి.
పబ్లిక్ క్లాస్ యూజర్సెట్టింగ్ సర్వీస్ {పబ్లిక్ శూన్య మార్పు ఇమెయిల్ (యూజర్ యూజర్) {if (సెక్యూరిటీసర్వీస్.చెక్ యాక్సెస్ (యూజర్)) {// మార్చడానికి ఎంపికను మంజూరు చేయండి}}} పబ్లిక్ క్లాస్ సెక్యూరిటీ సర్వీస్ {పబ్లిక్ స్టాటిక్ బూలియన్ చెక్ యాక్సెస్ (యూజర్ యూజర్) {// యాక్సెస్ను తనిఖీ చేయండి. }}
జావాలో క్లోజ్డ్ ప్రిన్సిపల్ తెరవండి
సాఫ్ట్వేర్ భాగాలు పొడిగింపు కోసం తెరిచి ఉండాలి, కానీ మార్పు కోసం మూసివేయబడాలి అని రాబర్ట్ సి. మార్టిన్ దీనిని వివరించాడు.
ఖచ్చితంగా చెప్పాలంటే, ఈ సూత్రం ప్రకారం, ఒక తరగతి వ్రాయబడాలి, అది భవిష్యత్తులో ప్రజలు వచ్చి దానిని మారుస్తుందనే without హ లేకుండా ఒక తరగతి తన పనిని దోషపూరితంగా చేస్తుంది. అందువల్ల, మార్పు కోసం తరగతి మూసివేయబడాలి, కానీ అది పొడిగించే అవకాశాన్ని కలిగి ఉండాలి. తరగతిని విస్తరించే మార్గాలు:
తరగతి నుండి వారసత్వంగా
తరగతి నుండి అవసరమైన ప్రవర్తనలను ఓవర్రైట్ చేయడం
తరగతి యొక్క కొన్ని ప్రవర్తనలను విస్తరించడం
ఓపెన్-క్లోజ్డ్ సూత్రం యొక్క అద్భుతమైన ఉదాహరణ బ్రౌజర్ల సహాయంతో అర్థం చేసుకోవచ్చు. మీ క్రోమ్ బ్రౌజర్లో పొడిగింపులను ఇన్స్టాల్ చేయడం మీకు గుర్తుందా?
క్రోమ్ బ్రౌజర్ యొక్క ప్రాథమిక పని వేర్వేరు సైట్లను సర్ఫ్ చేయడం. మీరు క్రోమ్ బ్రౌజర్ను ఉపయోగించి ఇమెయిల్ వ్రాస్తున్నప్పుడు మీరు వ్యాకరణాన్ని తనిఖీ చేయాలనుకుంటున్నారా? అవును, మీరు వ్యాకరణ పొడిగింపును ఉపయోగించవచ్చు, ఇది కంటెంట్పై వ్యాకరణ తనిఖీని అందిస్తుంది.
బ్రౌజర్ యొక్క కార్యాచరణను పెంచడానికి మీరు విషయాలను జోడించే ఈ విధానం పొడిగింపు. అందువల్ల, బ్రౌజర్ కార్యాచరణకు సరైన ఉదాహరణ, ఇది పొడిగింపు కోసం తెరిచి ఉంది, కానీ మార్పు కోసం మూసివేయబడింది. సరళమైన మాటలలో, మీరు మీ బ్రౌజర్లో ప్లగిన్లను జోడించడం / ఇన్స్టాల్ చేయడం ద్వారా కార్యాచరణను మెరుగుపరచవచ్చు, కానీ క్రొత్తదాన్ని నిర్మించలేరు.
ఈ సూత్రం ఎందుకు అవసరం?
మూడవ పార్టీ లైబ్రరీల ద్వారా తరగతులు మనకు రావచ్చు కాబట్టి OCP ముఖ్యం. ఆ బేస్ క్లాసులు మా ఎక్స్టెన్షన్స్కు మద్దతు ఇస్తాయా అని చింతించకుండా మేము ఆ తరగతులను విస్తరించగలగాలి. కానీ వారసత్వం బేస్ క్లాస్ అమలుపై ఆధారపడే ఉపవర్గాలకు దారితీయవచ్చు. దీనిని నివారించడానికి, ఇంటర్ఫేస్ల వాడకం సిఫార్సు చేయబడింది. ఈ అదనపు సంగ్రహణ వదులుగా కలపడానికి దారితీస్తుంది.
మేము వివిధ ఆకారాల ప్రాంతాలను లెక్కించాల్సిన అవసరం ఉందని చెప్పండి. మేము మా మొదటి ఆకారం దీర్ఘచతురస్రం కోసం ఒక తరగతిని సృష్టించడం ద్వారా ప్రారంభిస్తాముఇది 2 లక్షణాల పొడవును కలిగి ఉంది& వెడల్పు.
పబ్లిక్ క్లాస్ దీర్ఘచతురస్రం {పబ్లిక్ డబుల్ లెంగ్త్ పబ్లిక్ డబుల్ వెడల్పు}
తరువాత ఈ దీర్ఘచతురస్రం యొక్క వైశాల్యాన్ని లెక్కించడానికి మేము ఒక తరగతిని సృష్టిస్తాముఇది ఒక పద్ధతి లెక్కింపు దీర్ఘచతురస్రం అరియాఇది దీర్ఘచతురస్రాన్ని తీసుకుంటుందిఇన్పుట్ పరామితిగా మరియు దాని ప్రాంతాన్ని లెక్కిస్తుంది.
పబ్లిక్ క్లాస్ ఏరియాకాల్క్యులేటర్ {పబ్లిక్ డబుల్ కాలిక్యులేట్ దీర్ఘచతురస్రం ఏరియా (దీర్ఘచతురస్రం దీర్ఘచతురస్రం) {రిటర్న్ దీర్ఘచతురస్రం. పొడవు * దీర్ఘచతురస్రం.విడ్త్}}
ఇంతవరకు అంతా బాగనే ఉంది. ఇప్పుడు మన రెండవ ఆకార వృత్తాన్ని పొందుతాము. కాబట్టి మేము వెంటనే క్రొత్త తరగతి సర్కిల్ని సృష్టిస్తాముఒకే లక్షణ వ్యాసార్థంతో.
పబ్లిక్ క్లాస్ సర్కిల్ {పబ్లిక్ డబుల్ వ్యాసార్థం}
అప్పుడు మేము అరేకాల్క్యులేటర్ను సవరించాముఒక కొత్త పద్ధతి ద్వారా సర్కిల్ లెక్కలను జోడించడానికి తరగతి లెక్కించు సర్కిల్అరియా ()
పబ్లిక్ క్లాస్ ఏరియాకాల్క్యులేటర్ {పబ్లిక్ డబుల్ కాలిక్యులేట్ దీర్ఘచతురస్రం ఏరియా (దీర్ఘచతురస్రం దీర్ఘచతురస్రం) {రిటర్న్ దీర్ఘచతురస్రం.లెంగ్త్ * దీర్ఘచతురస్రం.విడ్త్} పబ్లిక్ డబుల్ కాలిక్యులేట్ సర్కిల్ ఏరియా (సర్కిల్ సర్కిల్) {రిటర్న్ (22/7) * సర్కిల్.రాడియస్ * సర్కిల్.రాడియస్}}
అయితే, పైన మేము మా పరిష్కారాన్ని రూపొందించిన విధానంలో లోపాలు ఉన్నాయని గమనించండి.
మనకు కొత్త ఆకారం పెంటగాన్ ఉందని చెప్పండి. అలాంటప్పుడు, మేము మళ్ళీ ఏరియాకాల్క్యులేటర్ తరగతిని సవరించాము. ఆకారాల రకాలు పెరిగేకొద్దీ ఇది ఏరియాకాల్క్యులేటర్ మారుతూ ఉండటంతో ఇది గందరగోళంగా మారుతుంది మరియు ఈ తరగతి యొక్క వినియోగదారులు ఏరియాకాల్క్యులేటర్ కలిగి ఉన్న వారి లైబ్రరీలను నవీకరించడం కొనసాగించాలి. పర్యవసానంగా, ఏరియాకాల్క్యులేటర్ క్లాస్ నిశ్చయంగా బేస్లైన్ చేయబడదు (ఖరారు చేయబడింది) ప్రతిసారీ కొత్త ఆకారం వచ్చినప్పుడు అది సవరించబడుతుంది. కాబట్టి, మార్పు కోసం ఈ డిజైన్ మూసివేయబడలేదు.
ఏరియాకాల్క్యులేటర్ వారి గణన తర్కాన్ని కొత్త పద్ధతుల్లో జతచేస్తూనే ఉండాలి. మేము నిజంగా ఆకారాల పరిధిని విస్తరించడం లేదు, బదులుగా మనం జోడించిన ప్రతి ఆకృతికి ముక్క-భోజనం (బిట్-బై-బిట్) పరిష్కారం చేస్తున్నాము.
ఓపెన్ / క్లోజ్డ్ సూత్రానికి అనుగుణంగా పై డిజైన్ యొక్క మార్పు:
ఓపెన్ / క్లోజ్డ్ ప్రిన్సిపల్కు కట్టుబడి, పై డిజైన్లోని లోపాలను పరిష్కరించే మరింత సొగసైన డిజైన్ను ఇప్పుడు చూద్దాం. మేము మొదట డిజైన్ను ఎక్స్టెన్సిబుల్గా చేస్తాము. దీని కోసం మనం మొదట బేస్ రకం ఆకారాన్ని నిర్వచించాలి మరియు సర్కిల్ & దీర్ఘచతురస్రం ఆకార ఇంటర్ఫేస్ను అమలు చేయాలి.
పబ్లిక్ ఇంటర్ఫేస్ ఆకారం {పబ్లిక్ డబుల్ కాలిక్యులేట్ ఏరియా ()} పబ్లిక్ క్లాస్ దీర్ఘచతురస్రం ఆకారం {డబుల్ పొడవు డబుల్ వెడల్పు పబ్లిక్ డబుల్ కాలిక్యులేట్ ఏరియా () {తిరిగి పొడవు * వెడల్పు}} పబ్లిక్ క్లాస్ సర్కిల్ ఆకారం {పబ్లిక్ డబుల్ వ్యాసార్థం పబ్లిక్ డబుల్ కాలిక్యులేట్ ఏరియా () {రిటర్న్ (22) / 7) * వ్యాసార్థం * వ్యాసార్థం}}
బేస్ ఇంటర్ఫేస్ ఆకారం ఉంది. అన్ని ఆకారాలు ఇప్పుడు బేస్ ఇంటర్ఫేస్ ఆకారాన్ని అమలు చేస్తాయి. ఆకార ఇంటర్ఫేస్లో ఒక వియుక్త పద్ధతి లెక్కింపు అరియా () ఉంది. సర్కిల్ & దీర్ఘచతురస్రం రెండూ వారి స్వంత లక్షణాలను ఉపయోగించి కాలిక్యులేట్ ఏరియా () పద్ధతిని అధిగమించాయి.
ఆకారాలు ఇప్పుడు ఆకార ఇంటర్ఫేస్లకు ఉదాహరణగా ఉన్నందున మేము కొంత విస్తరణను తీసుకువచ్చాము. ఇది వ్యక్తిగత తరగతులకు బదులుగా ఆకారాన్ని ఉపయోగించడానికి అనుమతిస్తుంది
పైన పేర్కొన్న చివరి పాయింట్ ఈ ఆకారాల వినియోగదారు. మా విషయంలో, వినియోగదారుడు ఏరియాకాల్క్యులేటర్ తరగతి అవుతుంది, ఇది ఇప్పుడు ఇలా ఉంటుంది.
పబ్లిక్ క్లాస్ ఏరియాకాల్క్యులేటర్ {పబ్లిక్ డబుల్ కాలిక్యులేట్ షేప్ ఏరియా (ఆకారం ఆకారం) {రిటర్న్ షేప్
ఈ ఏరియా కాలిక్యులేటర్తరగతి ఇప్పుడు పైన పేర్కొన్న మా డిజైన్ లోపాలను పూర్తిగా తొలగిస్తుంది మరియు ఓపెన్-క్లోజ్డ్ సూత్రానికి కట్టుబడి ఉండే శుభ్రమైన పరిష్కారాన్ని ఇస్తుంది. జావాలోని ఇతర SOLID సూత్రాలతో ముందుకు వెళ్దాం
జావాలో లిస్కోవ్ ప్రత్యామ్నాయ సూత్రం
రాబర్ట్ సి. మార్టిన్ దీనిని వర్ణించారు, ఎందుకంటే ఉత్పన్నమైన రకాలు వాటి మూల రకాలకు పూర్తిగా ప్రత్యామ్నాయంగా ఉండాలి.
లిస్కోవ్ ప్రత్యామ్నాయ సూత్రం q (x) ను ఒక ఆస్తిగా, హిస్తుంది, ఇది T యొక్క రకానికి చెందిన x యొక్క ఎంటిటీల గురించి నిరూపించబడింది. ఇప్పుడు, ఈ సూత్రం ప్రకారం, q (y) ఇప్పుడు S రకం S కి చెందిన వస్తువులకు నిరూపించబడాలి మరియు S నిజానికి T. యొక్క ఉప రకం. మీరు ఇప్పుడు అయోమయంలో ఉన్నారా మరియు లిస్కోవ్ ప్రత్యామ్నాయ సూత్రం వాస్తవానికి అర్థం ఏమిటో తెలియదా? దాని నిర్వచనం కొంచెం క్లిష్టంగా ఉండవచ్చు, కానీ వాస్తవానికి, ఇది చాలా సులభం. ఏకైక విషయం ఏమిటంటే, ప్రతి సబ్క్లాస్ లేదా ఉత్పన్నమైన తరగతి వారి పేరెంట్ లేదా బేస్ క్లాస్కు ప్రత్యామ్నాయంగా ఉండాలి.
ఇది ఒక ప్రత్యేకమైన వస్తువు-ఆధారిత సూత్రం అని మీరు చెప్పగలరు. ఏదైనా సంక్లిష్టత లేకుండా లేదా విషయాలను పేల్చివేయకుండా ఒక నిర్దిష్ట పేరెంట్ రకం పిల్లల రకం ద్వారా సూత్రాన్ని మరింత సరళీకృతం చేయవచ్చు, ఆ తల్లిదండ్రుల కోసం నిలబడగల సామర్థ్యం ఉండాలి. ఈ సూత్రం లిస్కోవ్ ప్రత్యామ్నాయ సూత్రానికి దగ్గరి సంబంధం కలిగి ఉంటుంది.
ఈ సూత్రం ఎందుకు అవసరం?
ఇది వారసత్వాన్ని దుర్వినియోగం చేయకుండా చేస్తుంది. ఇది “is-a” సంబంధానికి అనుగుణంగా మాకు సహాయపడుతుంది. ఉపవర్గాలు బేస్ క్లాస్ నిర్వచించిన ఒప్పందాన్ని తప్పనిసరిగా నెరవేర్చాలని కూడా మేము చెప్పగలం. ఈ కోణంలో, దీనికి సంబంధించినదికాంట్రాక్ట్ ద్వారా డిజైన్దీనిని మొదట బెర్ట్రాండ్ మేయర్ వర్ణించారు. ఉదాహరణకు, ఒక వృత్తం ఒక రకమైన దీర్ఘవృత్తాకారమని చెప్పడం ఉత్సాహం కలిగిస్తుంది, అయితే సర్కిల్లకు రెండు ఫోసిస్ లేదా పెద్ద / చిన్న అక్షాలు లేవు.
చదరపు మరియు దీర్ఘచతురస్ర ఉదాహరణను ఉపయోగించి LSP ప్రముఖంగా వివరించబడింది. మేము స్క్వేర్ మరియు దీర్ఘచతురస్రం మధ్య ISA సంబంధాన్ని if హిస్తే. అందువలన, మేము 'స్క్వేర్ ఒక దీర్ఘచతురస్రం' అని పిలుస్తాము. దిగువ కోడ్ సంబంధాన్ని సూచిస్తుంది.
పబ్లిక్ క్లాస్ దీర్ఘచతురస్రం {ప్రైవేట్ పూర్ణాంక పొడవు ప్రైవేట్ పూర్ణాంక వెడల్పు పబ్లిక్ పూర్ణాంకం getLength () {తిరిగి పొడవు} పబ్లిక్ శూన్య సెట్ పొడవు (పూర్ణాంక పొడవు) {this.length = length} public int getBreadth () {తిరిగి వెడల్పు} public void setBreadth (int width) { this.breadth = వెడల్పు} public int getArea () this దీన్ని తిరిగి ఇవ్వండి. పొడవు * this.breadth}}
స్క్వేర్ కోసం కోడ్ క్రింద ఉంది. స్క్వేర్ దీర్ఘచతురస్రాన్ని విస్తరించిందని గమనించండి.
డబుల్ నుండి పూర్ణాంక జావాకు మార్చండి
పబ్లిక్ క్లాస్ స్క్వేర్ దీర్ఘచతురస్రాన్ని విస్తరించింది {పబ్లిక్ శూన్య సెట్బ్రెడ్త్ (Int వెడల్పు) {super.setBreadth (వెడల్పు) super.setLength (వెడల్పు)} public void setLength (int length) {super.setLength (length) super.setBreadth (length)}}
ఈ సందర్భంలో, స్క్వేర్ మరియు దీర్ఘచతురస్రం మధ్య ఒక ISA సంబంధాన్ని ఏర్పరచడానికి మేము ప్రయత్నిస్తాము, ఈ క్రింది కోడ్లో “స్క్వేర్ ఒక దీర్ఘచతురస్రం” అని పిలవడం స్క్వేర్ యొక్క ఉదాహరణ దాటితే unexpected హించని విధంగా ప్రవర్తించడం ప్రారంభిస్తుంది. “ఏరియా” కోసం తనిఖీ చేయడం మరియు “వెడల్పు” కోసం తనిఖీ చేసే విషయంలో ఒక వాదన లోపం విసిరివేయబడుతుంది, అయినప్పటికీ ఏరియా చెక్ యొక్క వైఫల్యం కారణంగా వాదన లోపం విసిరినందున ప్రోగ్రామ్ ముగుస్తుంది.
పబ్లిక్ క్లాస్ LSPDemo {పబ్లిక్ శూన్య గణన ఏరియా (దీర్ఘచతురస్రం r) {r.setBreadth (2) r.setLength (3) r.getArea () == 6: printError ('area', r) నిశ్చయించు r.getLength () == 3: printError ('length', r) r.getBreadth () == 2: printError ('వెడల్పు', r)} ప్రైవేట్ స్ట్రింగ్ printError (స్ట్రింగ్ ఎర్రర్ ఐడెంటిఫెర్, దీర్ఘచతురస్రం r) {తిరిగి '+ error హించని విలువ' + errorIdentifer + ' ఉదాహరణకు '+ r.getClass (). getName ()} పబ్లిక్ స్టాటిక్ శూన్య ప్రధాన (స్ట్రింగ్ [] అర్గ్స్) {LSPDemo lsp = new LSPDemo () // దీర్ఘచతురస్రం యొక్క ఉదాహరణ lsp.calulateArea (కొత్త దీర్ఘచతురస్రం ()) // స్క్వేర్ యొక్క ఉదాహరణ lsp.calulateArea (కొత్త స్క్వేర్ ()) pass pass
తరగతి లిస్కోవ్ సబ్స్టిట్యూషన్ ప్రిన్సిపల్ (ఎల్ఎస్పి) ను ప్రదర్శిస్తుంది సూత్రం ప్రకారం, మూల తరగతులకు సూచనలను ఉపయోగించే విధులు తెలియకుండానే ఉత్పన్నమైన తరగతి వస్తువులను ఉపయోగించగలగాలి.
అందువల్ల, క్రింద చూపిన ఉదాహరణలో, 'దీర్ఘచతురస్రం' యొక్క సూచనను ఉపయోగించే ఫంక్షన్ కాలిక్యులేట్ ఏరియా స్క్వేర్ వంటి ఉత్పన్నమైన తరగతి వస్తువులను ఉపయోగించగలదు మరియు దీర్ఘచతురస్ర నిర్వచనం ద్వారా ఎదురయ్యే అవసరాన్ని తీర్చగలగాలి. దీర్ఘచతురస్రం యొక్క నిర్వచనం ప్రకారం, కింది డేటా ఇచ్చిన క్రింది వాటిని ఎల్లప్పుడూ నిజం చేయాలి.
- పొడవు ఎల్లప్పుడూ పద్ధతికి ఇన్పుట్గా సెట్ చేయబడిన పొడవుకు సమానంగా ఉండాలి, సెట్ పొడవు
- వెడల్పు ఎల్లప్పుడూ పద్ధతి, సెట్బ్రెడ్కి ఇన్పుట్గా పంపిన వెడల్పుకు సమానంగా ఉండాలి
- ప్రాంతం ఎల్లప్పుడూ పొడవు మరియు వెడల్పు యొక్క ఉత్పత్తికి సమానంగా ఉండాలి
ఒకవేళ, స్క్వేర్ మరియు దీర్ఘచతురస్రం మధ్య ISA సంబంధాన్ని స్థాపించడానికి మేము ప్రయత్నిస్తాము, అంటే “స్క్వేర్ ఒక దీర్ఘచతురస్రం” అని పిలుస్తాము, స్క్వేర్ యొక్క ఉదాహరణ దాటితే పైన ఉన్న కోడ్ unexpected హించని విధంగా ప్రవర్తించడం ప్రారంభిస్తుంది, ప్రాంతం మరియు చెక్ విషయంలో వాదన లోపం విసిరివేయబడుతుంది వెడల్పు కోసం, ఏరియా చెక్ యొక్క వైఫల్యం కారణంగా వాదన లోపం విసిరినందున ప్రోగ్రామ్ ముగుస్తుంది.
స్క్వేర్ తరగతికి సెట్బ్రెడ్ లేదా సెట్లెంగ్త్ వంటి పద్ధతులు అవసరం లేదు. విసిరే లోపాన్ని నివారించడానికి తగిన విధంగా కోడ్ చేయడానికి LSPDemo తరగతి దీర్ఘచతురస్రం (స్క్వేర్ వంటివి) యొక్క ఉత్పన్న తరగతుల వివరాలను తెలుసుకోవాలి. ఇప్పటికే ఉన్న కోడ్లోని మార్పు ఓపెన్-క్లోజ్డ్ సూత్రాన్ని మొదటి స్థానంలో విచ్ఛిన్నం చేస్తుంది.
ఇంటర్ఫేస్ విభజన సూత్రం
ఖాతాదారులు వారు ఉపయోగించని అనవసరమైన పద్ధతులను అమలు చేయమని బలవంతం చేయకూడదని రాబర్ట్ సి. మార్టిన్ దీనిని వివరించాడు.
ప్రకారంఇంటర్ఫేస్ విభజన సూత్రంక్లయింట్, అది ఉపయోగించని ఇంటర్ఫేస్ను అమలు చేయమని ఎప్పుడూ బలవంతం చేయకూడదు లేదా క్లయింట్ వారు ఉపయోగించని ఏ పద్దతిపైనైనా ఆధారపడవలసిన అవసరం లేదు. కాబట్టి ప్రాథమికంగా, మీరు ఇష్టపడే విధంగా ఇంటర్ఫేస్ విభజన సూత్రాలు ఏకశిలా మరియు పెద్ద ఇంటర్ఫేస్కు బదులుగా చిన్నది కాని క్లయింట్ ప్రత్యేకమైన ఇంటర్ఫేస్లు. సంక్షిప్తంగా, క్లయింట్ను ఒక నిర్దిష్ట విషయంపై ఆధారపడమని బలవంతం చేయడం మీకు చెడ్డది, అది వారికి అవసరం లేదు.
ఉదాహరణకు, లాగ్లను వ్రాయడానికి మరియు చదవడానికి ఒకే లాగింగ్ ఇంటర్ఫేస్ డేటాబేస్ కోసం ఉపయోగపడుతుంది కాని కన్సోల్ కోసం కాదు. లాగ్లు చదవడం కన్సోల్ లాగర్కు అర్ధమే లేదు. జావా వ్యాసంలో ఈ SOLID సూత్రాలతో ముందుకు సాగుతోంది.
ఈ సూత్రం ఎందుకు అవసరం?
ఆన్లైన్ కస్టమర్లు, డయల్-ఇన్ లేదా టెలిఫోన్ కస్టమర్లు మరియు వాక్-ఇన్ కస్టమర్ల నుండి ఆర్డర్లను అంగీకరించే పద్ధతులను కలిగి ఉన్న రెస్టారెంట్ ఇంటర్ఫేస్ ఉందని చెప్పండి. ఆన్లైన్ చెల్లింపులను (ఆన్లైన్ కస్టమర్ల కోసం) మరియు వ్యక్తి చెల్లింపులను నిర్వహించడానికి (వాక్-ఇన్ కస్టమర్లకు మరియు టెలిఫోన్ కస్టమర్లకు వారి ఆర్డర్ ఇంట్లో డెలివరీ అయినప్పుడు) నిర్వహించడానికి ఇది పద్ధతులను కలిగి ఉంది.
ఇప్పుడు రెస్టారెంట్ కోసం జావా ఇంటర్ఫేస్ సృష్టించి దానికి రెస్టారెంట్ఇంటర్ఫేస్.జావా అని పేరు పెట్టండి.
పబ్లిక్ ఇంటర్ఫేస్ రెస్టారెంట్ ఇంటర్ఫేస్ {పబ్లిక్ శూన్యత అంగీకారంఆన్లైన్ఆర్డర్ () పబ్లిక్ శూన్యమైన టేక్ఫోన్ ఓర్డర్ () పబ్లిక్ శూన్యమైన పేఆన్లైన్ () పబ్లిక్ శూన్యమైన నడకఇన్కస్టమర్ ఆర్డర్ () పబ్లిక్ శూన్యమైన పేఇన్పర్సన్ ()
ఆన్లైన్ ఇంటర్ఫేస్లో 5 పద్ధతులు నిర్వచించబడ్డాయి, అవి ఆన్లైన్ ఆర్డర్ను అంగీకరించడం, టెలిఫోనిక్ ఆర్డర్ తీసుకోవడం, వాక్-ఇన్ కస్టమర్ నుండి ఆర్డర్లను అంగీకరించడం, ఆన్లైన్ చెల్లింపును అంగీకరించడం మరియు వ్యక్తిగతంగా చెల్లింపును అంగీకరించడం.
ఆన్లైన్ కస్టమర్ల కోసం ఆన్లైన్ ఇంటర్ఫేస్ను ఆన్లైన్ క్లయింట్ క్లయింట్ ఇంప్లా.జావాగా అమలు చేయడం ద్వారా ప్రారంభిద్దాం
పబ్లిక్ క్లాస్ ఆన్లైన్ క్లయింట్ఇంప్ల్ రెస్టారెంట్ ఇంటర్ఫేస్ {పబ్లిక్ శూన్యమైన అంగీకారంఆన్లైన్ఆర్డర్ () online // ఆన్లైన్ ఆర్డర్ను ఉంచడానికి తర్కం} పబ్లిక్ శూన్యమైన టేక్ టెలిఫోన్ఆర్డర్ () {// ఆన్లైన్ ఆర్డర్కు వర్తించదు కొత్త మద్దతు లేని ఆపరేషన్ ఎక్సెప్షన్ ()} పబ్లిక్ శూన్య పేఆన్లైన్ () pay // చెల్లించడానికి లాజిక్ ఆన్లైన్} పబ్లిక్ శూన్య నడకఇన్కస్టమర్ ఆర్డర్ () Online // ఆన్లైన్ ఆర్డర్కు వర్తించదు కొత్త మద్దతు లేని ఆపరేషన్ ఎక్సెప్షన్ ()} పబ్లిక్ శూన్యమైన పేఇన్పర్సన్ () {// ఆన్లైన్ ఆర్డర్కు వర్తించదు కొత్త మద్దతు లేని ఆపరేషన్ఎక్సెప్షన్ ()}}
పై కోడ్ (OnlineClientImpl.java) ఆన్లైన్ ఆర్డర్ల కోసం కాబట్టి, మద్దతు లేని ఆపరేషన్ ఎక్సెప్షన్ను విసిరేయండి.
ఆన్లైన్, టెలిఫోనిక్ మరియు వాక్-ఇన్ క్లయింట్లు వాటిలో ప్రతిదానికి ప్రత్యేకమైన రెస్టారెంట్ ఇంటర్ఫేస్ అమలును ఉపయోగిస్తాయి.
టెలిఫోనిక్ క్లయింట్ మరియు వాక్-ఇన్ క్లయింట్ కోసం అమలు తరగతులకు మద్దతు లేని పద్ధతులు ఉంటాయి.
5 పద్ధతులు రెస్టారెంట్ ఇంటర్ఫేస్లో భాగం కాబట్టి, అమలు తరగతులు వాటిలో 5 ని అమలు చేయాలి.
ప్రతి అమలు తరగతులు మద్దతు లేని ఆపరేషన్ ఎక్సెప్షన్ను విసిరే పద్ధతులు. మీరు స్పష్టంగా చూడగలిగినట్లుగా - అన్ని పద్ధతులను అమలు చేయడం అసమర్థమైనది.
రెస్టారెంట్ ఇంటర్ఫేస్ యొక్క ఏదైనా పద్ధతుల్లో ఏదైనా మార్పు అన్ని అమలు తరగతులకు ప్రచారం చేయబడుతుంది. కోడ్ నిర్వహణ అప్పుడు నిజంగా గజిబిజిగా మారుతుంది మరియు మార్పుల యొక్క రిగ్రెషన్ ప్రభావాలు పెరుగుతూనే ఉంటాయి.
రెస్టారెంట్ ఇంటర్ఫేస్.జావా సింగిల్ రెస్పాన్స్బిలిటీ సూత్రాన్ని విచ్ఛిన్నం చేస్తుంది ఎందుకంటే చెల్లింపుల యొక్క తర్కం అలాగే ఆర్డర్ ప్లేస్మెంట్ కోసం ఒకే ఇంటర్ఫేస్లో సమూహం చేయబడతాయి.
పైన పేర్కొన్న సమస్యలను అధిగమించడానికి, పై రూపకల్పనను రీఫ్యాక్టర్ చేయడానికి మేము ఇంటర్ఫేస్ విభజన సూత్రాన్ని వర్తింపజేస్తాము.
చెల్లింపు మరియు ఆర్డర్ ప్లేస్మెంట్ కార్యాచరణలను రెండు వేర్వేరు లీన్ ఇంటర్ఫేస్లుగా వేరు చేయండి, PaymentInterface.java మరియు OrderInterface.java.
ప్రతి క్లయింట్ పేమెంట్ ఇంటర్ఫేస్ మరియు ఆర్డర్ ఇంటర్ఫేస్లో ప్రతి అమలును ఉపయోగిస్తుంది. ఉదాహరణకు - OnlineClient.java OnlinePaymentImpl మరియు OnlineOrderImpl ను ఉపయోగిస్తుంది.
సింగిల్ రెస్పాన్స్బిలిటీ ప్రిన్సిపల్ ఇప్పుడు చెల్లింపు ఇంటర్ఫేస్ (పేమెంట్ఇంటర్ఫేస్.జావా) మరియు ఆర్డరింగ్ ఇంటర్ఫేస్ (ఆర్డర్ఇంటర్ఫేస్) గా జతచేయబడింది.
ఆర్డర్ లేదా చెల్లింపు ఇంటర్ఫేస్లలో ఏదైనా మార్పు మరొకదాన్ని ప్రభావితం చేయదు. అవి ఇప్పుడు స్వతంత్రంగా ఉన్నాయి. ప్రతి ఇంటర్ఫేస్కు ఇది ఎల్లప్పుడూ ఉపయోగించే పద్ధతులు మాత్రమే ఉన్నందున ఎటువంటి డమ్మీ అమలు చేయవలసిన అవసరం లేదు లేదా మద్దతు లేని ఆపరేషన్ ఎక్సెప్షన్ను విసిరేయాలి.
ISP దరఖాస్తు చేసిన తరువాత
డిపెండెన్సీ విలోమ సూత్రం
రాబర్ట్ సి. మార్టిన్ దీనిని వివరిస్తుంది, ఇది సంగ్రహణలపై ఆధారపడి ఉండదు. దీనికి అనుగుణంగా, ఉన్నత-స్థాయి మాడ్యూల్ ఎప్పుడూ తక్కువ-స్థాయి మాడ్యూల్పై ఆధారపడకూడదు. ఉదాహరణకి
మీరు ఏదైనా కొనడానికి స్థానిక దుకాణానికి వెళతారు మరియు మీ డెబిట్ కార్డును ఉపయోగించడం ద్వారా దాని కోసం చెల్లించాలని మీరు నిర్ణయించుకుంటారు. కాబట్టి, మీరు చెల్లింపు కోసం మీ కార్డును గుమస్తాకి ఇచ్చినప్పుడు, మీరు ఎలాంటి కార్డు ఇచ్చారో తనిఖీ చేయడానికి గుమస్తా బాధపడరు.
మీరు వీసా కార్డు ఇచ్చినప్పటికీ, అతను మీ కార్డును స్వైప్ చేయడానికి వీసా యంత్రాన్ని ఉంచడు. మీరు చెల్లించటానికి కలిగి ఉన్న క్రెడిట్ కార్డ్ లేదా డెబిట్ కార్డ్ రకం వారు దానిని స్వైప్ చేసినా పట్టింపు లేదు. కాబట్టి, ఈ ఉదాహరణలో, మీరు మరియు గుమస్తా ఇద్దరూ క్రెడిట్ కార్డ్ సంగ్రహణపై ఆధారపడి ఉన్నారని మీరు చూడవచ్చు మరియు మీరు కార్డు యొక్క ప్రత్యేకతల గురించి ఆందోళన చెందరు. డిపెండెన్సీ విలోమ సూత్రం ఇదే.
ఈ సూత్రం ఎందుకు అవసరం?
ఇది ప్రోగ్రామర్ హార్డ్కోడ్ డిపెండెన్సీలను తొలగించడానికి అనుమతిస్తుంది, తద్వారా అప్లికేషన్ వదులుగా కపుల్ మరియు విస్తరించదగినదిగా మారుతుంది.
పబ్లిక్ క్లాస్ విద్యార్థి {ప్రైవేట్ చిరునామా చిరునామా పబ్లిక్ స్టూడెంట్ () {చిరునామా = కొత్త చిరునామా ()}}
పై ఉదాహరణలో, విద్యార్థి తరగతికి చిరునామా వస్తువు అవసరం మరియు చిరునామా వస్తువును ప్రారంభించడం మరియు ఉపయోగించడం బాధ్యత. భవిష్యత్తులో అడ్రస్ క్లాస్ మార్చబడితే మనం స్టూడెంట్ క్లాస్లో కూడా మార్పులు చేయాలి. ఇది విద్యార్థి మరియు చిరునామా వస్తువుల మధ్య గట్టి కలయికను చేస్తుంది. డిపెండెన్సీ విలోమ రూపకల్పన నమూనాను ఉపయోగించి మేము ఈ సమస్యను పరిష్కరించగలము. అనగా చిరునామా వస్తువు స్వతంత్రంగా అమలు చేయబడుతుంది మరియు కన్స్ట్రక్టర్-బేస్డ్ లేదా సెట్టర్-బేస్డ్ డిపెండెన్సీ విలోమం ఉపయోగించి విద్యార్థిని తక్షణం చేసినప్పుడు విద్యార్థికి అందించబడుతుంది.
దీనితో, మేము జావాలోని ఈ SOLID సూత్రాల ముగింపుకు వచ్చాము.
చూడండి ప్రపంచవ్యాప్తంగా విస్తరించి ఉన్న 250,000 మందికి పైగా సంతృప్తికరమైన అభ్యాసకుల నెట్వర్క్తో విశ్వసనీయ ఆన్లైన్ లెర్నింగ్ సంస్థ ఎడురేకా చేత. ఎడురేకా యొక్క జావా J2EE మరియు SOA శిక్షణ మరియు ధృవీకరణ కోర్సు జావా డెవలపర్గా ఉండాలనుకునే విద్యార్థులు మరియు నిపుణుల కోసం రూపొందించబడింది. ఈ కోర్సు మీకు జావా ప్రోగ్రామింగ్లోకి రావడానికి మరియు హైబర్నేట్ & స్ప్రింగ్ వంటి వివిధ జావా ఫ్రేమ్వర్క్లతో పాటు కోర్ మరియు అడ్వాన్స్డ్ జావా కాన్సెప్ట్ల కోసం మీకు శిక్షణ ఇవ్వడానికి రూపొందించబడింది.
మాకు ప్రశ్న ఉందా? దయచేసి ఈ “జావాలోని SOLID ప్రిన్సిపల్స్” బ్లాగులోని వ్యాఖ్యల విభాగంలో పేర్కొనండి మరియు మేము వీలైనంత త్వరగా మిమ్మల్ని సంప్రదిస్తాము.
హాష్ పట్టిక మరియు హాష్ మ్యాప్ మధ్య వ్యత్యాసం