వ్యతిరేక నమూనాలకు పరిచయం

వ్యతిరేక నమూనాలు నమూనాలకు ఖచ్చితమైన వ్యతిరేకం. డిజైన్ నమూనాలు మంచి ప్రోగ్రామింగ్ అభ్యాసాలకు ఉదాహరణలు అని గుర్తుంచుకోండి, అంటే కొన్ని సమస్యలను పరిష్కరించడానికి నమూనాలు. కానీ వ్యతిరేక నమూనాలు వాటి పూర్తి వ్యతిరేకం, అంటే వివిధ సమస్యలను పరిష్కరించేటప్పుడు చేసే తప్పుల నమూనాలు.

మంచి ప్రోగ్రామింగ్ ప్రాక్టీస్‌లో భాగం ఖచ్చితంగా యాంటీ-ప్యాటర్న్‌లను నివారించడం. ఇది అంత అపారమయిన సైద్ధాంతిక చెత్త అని అనుకోకండి - ఇవి దాదాపు ప్రతి డెవలపర్ ఎదుర్కొనే నిర్దిష్ట సమస్యలు. ఎవరు తెలుసు, అతను ఆయుధాలు!

ప్రారంభకులలో సాధారణమైన కొన్ని వ్యతిరేక నమూనాలను చూద్దాం:

  • మేజిక్ సంఖ్యలు మరియు తీగలు
  • దేవుని తరగతి
  • అకాల ఆప్టిమైజేషన్
  • సైకిల్ యొక్క ఆవిష్కరణ
  • ఏకచక్రం యొక్క ఆవిష్కరణ

మేజిక్ సంఖ్యలు మరియు తీగలు

మ్యాజిక్ నంబర్ అనేది ఏదైనా (చాలా తరచుగా డేటా గుర్తింపు) కోసం కోడ్‌లో ఉపయోగించే స్థిరాంకం, సంబంధిత వ్యాఖ్య లేకుండా దాని సంఖ్యకు అర్థం ఉండదు. సంఖ్యలు ఖచ్చితంగా సెమాంటిక్స్ కలిగి ఉండవు.

మీ ప్రాజెక్ట్ కోడ్‌లో సంఖ్యలు కనిపించడం ప్రారంభించినప్పుడు, దాని అర్థం స్పష్టంగా లేదు, ఇది చాలా చెడ్డది. అటువంటి కోడ్ యొక్క రచయిత కాని ప్రోగ్రామర్ అది ఎలా పని చేస్తుందో వివరించడంలో కష్టంగా ఉంటుంది. కాలక్రమేణా, మ్యాజిక్ సంఖ్యలతో కోడ్ యొక్క రచయిత కూడా దానిని వివరించలేరు.

సంఖ్యలు కోడ్‌ను అర్థం చేసుకోవడం మరియు రీఫ్యాక్టరింగ్ చేయడం కష్టతరం చేస్తాయి. ఈ లోపానికి ప్రధాన కారణాలు అభివృద్ధిలో తొందరపాటు మరియు ప్రోగ్రామింగ్ అభ్యాసం లేకపోవడం. అభివృద్ధిని ప్రారంభించడానికి ముందు సంఖ్యా స్థిరాంకాల వినియోగాన్ని నిర్దేశించడం ద్వారా ఈ వ్యతిరేక నమూనాను మొగ్గలో తుడిచివేయాలి.

ఈ సమస్యను పరిష్కరించడానికి, మీరు సంఖ్యా స్థిరాంకం యొక్క ప్రయోజనాన్ని వివరించే వేరియబుల్‌ను సృష్టించాలి మరియు దానికి కావలసిన విలువను కేటాయించాలి.

దేవుని తరగతి

దైవిక వస్తువు అనేది వ్యతిరేక నమూనా, ఇది OOP డెవలపర్‌లలో చాలా సాధారణం. అటువంటి వస్తువు చాలా విధులను తీసుకుంటుంది మరియు / లేదా దాదాపు మొత్తం డేటాను నిల్వ చేస్తుంది. ఫలితంగా, మేము పోర్టబుల్ కాని కోడ్‌ని కలిగి ఉన్నాము, అంతేకాకుండా, అర్థం చేసుకోవడం కష్టం.

అదనంగా, అటువంటి కోడ్ నిర్వహించడం చాలా కష్టం, మొత్తం సిస్టమ్ దాదాపుగా దానిపై ఆధారపడి ఉంటుంది. ఈ లోపానికి కారణాలు: డెవలపర్ అసమర్థత, ఒక డెవలపర్ పనిలో ఎక్కువ భాగాన్ని తీసుకోవడం (ముఖ్యంగా పని మొత్తం డెవలపర్ యొక్క అనుభవ స్థాయిని మించి ఉన్నప్పుడు).

విభిన్న డెవలపర్‌లు వ్యవహరించగల ఉప కార్యాలుగా విధులను విభజించడం ద్వారా ఈ విధానాన్ని ఎదుర్కోవడం అవసరం.

అకాల ఆప్టిమైజేషన్

ప్రీమెచ్యూర్ ఆప్టిమైజేషన్ అనేది ప్రోగ్రామర్ ఎక్కడ మరియు ఎలా చేయాలనే దాని గురించి సమాచారం తీసుకోవడానికి అవసరమైన మొత్తం సమాచారాన్ని కలిగి ఉండటానికి ముందు నిర్వహించబడే ఆప్టిమైజేషన్.

ఆచరణలో, ఎక్కడ అడ్డంకి ఏర్పడుతుందో అంచనా వేయడం కష్టం. అనుభావిక ఫలితాలను పొందే ముందు ఆప్టిమైజ్ చేసే ప్రయత్నాలు కోడ్ సంక్లిష్టత మరియు లోపాల రూపానికి దారి తీస్తుంది, కానీ ఎటువంటి ప్రయోజనాలను తీసుకురాదు.

ఎలా నివారించాలి? ముందుగా, బాగా తెలిసిన మరియు నిరూపితమైన అల్గారిథమ్‌లు మరియు సాధనాలను ఉపయోగించి శుభ్రంగా, చదవగలిగే, పని చేసే కోడ్‌ను వ్రాయండి. అవసరమైతే, అడ్డంకులను కనుగొనడానికి ప్రొఫైలింగ్ సాధనాలను ఉపయోగించండి. అంచనాలు మరియు ఊహలపై కాకుండా కొలతలపై ఆధారపడండి.

ఉదాహరణలు మరియు లక్షణాలు

ప్రొఫైల్ చేయడానికి ముందు కాషింగ్. గణితశాస్త్రపరంగా సరైన అల్గారిథమ్‌లకు బదులుగా సంక్లిష్టమైన మరియు నిరూపించబడని హ్యూరిస్టిక్‌లను ఉపయోగించడం. లోడ్‌లో తప్పుగా ప్రవర్తించే కొత్త, పరీక్షించని ఫ్రేమ్‌వర్క్‌ల ఎంపిక.

కష్టం ఏమిటి

ఆప్టిమైజేషన్ అకాలమని గుర్తించడం సులభం కాదు. ముందుగానే పెరుగుదల కోసం గదిని వదిలివేయడం ముఖ్యం. మీరు సులభంగా ఆప్టిమైజ్ చేయడానికి మరియు ఎదగడానికి మిమ్మల్ని అనుమతించే పరిష్కారాలు మరియు ప్లాట్‌ఫారమ్‌లను ఎంచుకోవాలి. అలాగే కొన్నిసార్లు అకాల ఆప్టిమైజేషన్ చెడు కోడ్‌కు సాకుగా ఉపయోగించబడుతుంది. ఉదాహరణకు, వారు O(n2) అల్గారిథమ్‌ని తీసుకుంటారు, ఎందుకంటే అల్గోరిథం O(n) మరింత కష్టంగా ఉంటుంది.

సైకిల్ యొక్క ఆవిష్కరణ

ఈ యాంటీ-ప్యాటర్న్ యొక్క అర్థం ఏమిటంటే, ప్రోగ్రామర్ ఇప్పటికే ఉన్న పరిష్కారాలు మరియు తరచుగా చాలా విజయవంతమైన సమస్యకు తన స్వంత పరిష్కారాన్ని అభివృద్ధి చేస్తాడు.

డెవలపర్ తనను తాను తెలివిగా భావిస్తాడు, కాబట్టి అతను తన పూర్వీకుల అనుభవం ఉన్నప్పటికీ, ప్రతి పనికి తన స్వంత పరిష్కారంతో ముందుకు రావడానికి ప్రయత్నిస్తాడు. చాలా తరచుగా, ఇది సమయం కోల్పోవడానికి మరియు ప్రోగ్రామర్ యొక్క సామర్థ్యంలో తగ్గుదలకు మాత్రమే దారితీస్తుంది. అన్నింటికంటే, పరిష్కారం కనుగొనబడినట్లయితే, ఉపశీర్షికగా ఉంటుంది.

వాస్తవానికి, మీరు స్వతంత్ర పరిష్కారం యొక్క అవకాశాన్ని పూర్తిగా విస్మరించలేరు, ఎందుకంటే ఇది ప్రత్యక్ష మార్గంలో కాపీ-పేస్ట్ ప్రోగ్రామింగ్‌కు దారి తీస్తుంది. డెవలపర్ తన ముందు కనిపించే టాస్క్‌లను సమర్ధవంతంగా పరిష్కరించడానికి, రెడీమేడ్ సొల్యూషన్స్‌ని ఉపయోగించి లేదా తన స్వంతంగా కనిపెట్టడానికి నావిగేట్ చేయాలి.

చాలా తరచుగా, ఈ వ్యతిరేక నమూనాకు కారణం సాధారణ సమయం లేకపోవడం. మరియు సమయం డబ్బు.

స్క్వేర్ వీల్ సైకిల్ ఆవిష్కరణ

ఈ యాంటీ-నమూనా కేవలం చక్రాన్ని తిరిగి ఆవిష్కరించడానికి చాలా దగ్గరి సంబంధం కలిగి ఉంటుంది - మెరుగైన పరిష్కారం ఉన్నప్పుడు మీ స్వంత చెడు పరిష్కారాన్ని సృష్టించడం.

ఈ వ్యతిరేక నమూనాకు రెండు రెట్లు ఎక్కువ సమయం పడుతుంది: మొదట, మీ స్వంత పరిష్కారాన్ని కనిపెట్టడం మరియు అమలు చేయడం, ఆపై దాన్ని రీఫ్యాక్టరింగ్ చేయడం లేదా భర్తీ చేయడం కోసం సమయాన్ని వెచ్చిస్తారు.

ప్రోగ్రామర్ నిర్దిష్ట శ్రేణుల పనుల కోసం వివిధ పరిష్కారాల ఉనికి గురించి తెలుసుకోవాలి , వాటి ప్రయోజనాలు మరియు అప్రయోజనాల ద్వారా మార్గనిర్దేశం చేయాలి.

ప్రోగ్రామర్‌గా మీరు ఎదుర్కొనే అన్ని సమస్యలను రెండు భాగాలుగా విభజించవచ్చు:

  • తెలివైన వ్యక్తులు 30 సంవత్సరాల క్రితం ఈ సమస్యను పరిష్కరించారు
  • తెలివైన వ్యక్తులు 50 సంవత్సరాల క్రితం ఈ సమస్యను పరిష్కరించారు

మీరు పుట్టకముందే చాలా ప్రోగ్రామింగ్ సమస్యలు విజయవంతంగా పరిష్కరించబడ్డాయి . ఏదైనా కనిపెట్టాల్సిన అవసరం లేదు - ఇతర వ్యక్తుల అనుభవాన్ని అధ్యయనం చేయండి (ఇదే పుస్తకాలు వ్రాయబడ్డాయి).

2022లో, మేము ఈ క్రింది పుట్టినరోజులను జరుపుకోవచ్చు:

  • ప్రోగ్రామింగ్ భాషలు
    • సి భాషకు 50 సంవత్సరాలు (1972)
    • జావా భాషకు 27 సంవత్సరాలు (1995)
    • పైథాన్‌కి 31 సంవత్సరాలు (1991)
  • కనెక్షన్
    • ఇంటర్నెట్‌కి 39 ఏళ్లు (1983)
    • మొబైల్ ఫోన్‌కి 49 సంవత్సరాలు (1973)
    • మొదటి SMS 30 సంవత్సరాల క్రితం పంపబడింది (1992)
  • నమూనాలు
    • MVC నమూనా 44 సంవత్సరాలు (1978)
    • SQL 48 సంవత్సరాల క్రితం కనుగొనబడింది (1974)
    • జావా బీన్స్ 26 సంవత్సరాల క్రితం కనుగొనబడింది (1996)
  • గ్రంథాలయాలు
    • హైబర్నేట్ 21 సంవత్సరాల క్రితం (2001) కనుగొనబడింది
    • వసంతం 20 సంవత్సరాల క్రితం కనుగొనబడింది (2002)
    • టామ్‌క్యాట్ 23 సంవత్సరాల క్రితం విడుదలైంది (1999)
  • OS
    • Unix 51 సంవత్సరాల క్రితం విడుదలైంది (1971)
    • విండోస్ 37 సంవత్సరాల క్రితం వెలుగు చూసింది (1985)
    • Mac OS 21 సంవత్సరాల క్రితం విడుదలైంది (2001)

మరియు ఈ విషయాలన్నీ కేవలం కనుగొనబడలేదు, ఆ సమయంలో చాలా సాధారణమైన మరియు సంబంధిత సమస్యలకు పరిష్కారాలుగా అభివృద్ధి చేయబడ్డాయి.