Mafunzo

MANGO ni nini kanuni 5 za programu inayolenga vitu

MANGO ni kifupi, ikimaanisha kanuni tano za muundo wa vitu (OOD au OOP). Hizi ni miongozo ambayo watengenezaji wanaweza kutumia kuunda programu ambayo ni rahisi kusimamia, kudumisha na kupanua. Kuelewa dhana hizi kukufanya uwe msanidi programu bora na kukusaidia epuka shida za usimamizi wa programu Inamaanisha nini kuwa programu nzuri?

Mtu yeyote aliye na uzoefu katika programu ya majaji anahukumu nambari ya programu iliyoandikwa na wengine, kwa kutumia vigezo vya hukumu kulingana na njia yao ya kazi.

Katika kipindi cha taaluma yangu ya kitaaluma, nimewajua watengenezaji wengi, na nimeona maelfu ya mistari ya nambari na wakati ninahitaji kutathmini ustadi wa msanidi programu mimi huangalia mambo mawili:

  • Unyenyekevu katika kusoma nambari;
  • Je! Nambari yao inaweza kufanya kazi na kubadilika kwa muda.

Kwa bahati nzuri, kuna misingi au kanuni ambazo hufanya iwe rahisi kuwa bora katika kuweka alama.

kifupi SOLID inasimama:
S: kanuni ya jukumu moja
O: kanuni iliyofungwa wazi
L: Kanuni ya badala ya Liskov
I: Kanuni ya utengano wa kiolesura
D: Kanuni ya Ubadilishaji wa Utegemezi

Wacha tuanze kwa kutafakari kanuni ya MANGO ya kwanza, ambayo ni

Kanuni ya Uwajibikaji Moja

Darasa (au moduli) inapaswa kuwa na sababu moja tu ya kubadilika, kubadilika.

Dhana yenyewe ni rahisi sana, lakini kufikia unyenyekevu huu njia ya utekelezaji inaweza kuwa ngumu sana. Darasa linapaswa kuwa na sababu moja tu ya kubadilika.

Lakini kwanini? 

Kwa nini ni muhimu sana kuwa na sababu moja tu ya kubadilika?

Kwa mfano, ikiwa kuna sababu mbili tofauti za kubadilika, inawezekana kwamba timu mbili tofauti zinaweza kufanya kazi kwa nambari moja kwa sababu mbili tofauti. Kila mmoja atalazimika kutekeleza suluhisho lake mwenyewe, ambalo kwa hali ya lugha iliyokusanywa (kama C ++, C # au Java), inaweza kusababisha moduli ambazo haziendani na timu zingine au sehemu zingine za programu.

Mfano mwingine, ikiwa unatumia lugha iliyotafsirika, italazimika kujaribu tena darasa moja au moduli kwa sababu tofauti. Hii inamaanisha kazi zaidi, wakati na juhudi za kudhibiti ubora.

Kutambua kipengee kimoja darasa au moduli inapaswa kuwa ngumu zaidi kuliko kutazama tu orodha ya kufanya majaribio. 

Lakini wacha tujaribu kufikiria kutoka kwa maoni ya chini ya kiufundi, ambayo ni, wacha tujaribu kuchambua mtumiaji wa darasa letu au moduli, ndiye atakayetumia. Jambo la msingi ambalo tunapaswa kukumbuka kila wakati, ni ukweli kwamba watumiaji wa programu au mfumo tunaoendeleza ambao hutumika na moduli fulani ndio wataomba marekebisho yake. Wale waliohudumiwa watauliza kubadilisha darasa au moduli. 

Mifano kadhaa ya moduli na matumizi yake:

  • Moduli ya matengenezo: mtumiaji anaundwa na wasimamizi wa hifadhidata na wasanifu wa programu.
  • Moduli ya kuripoti: mtumiaji ana wafanyikazi wa ofisi, wahasibu na uzalishaji.
  • Moduli ya hesabu ya malipo kwa mfumo wa usimamizi wa mishahara: watumiaji wanaweza kujumuisha mawakili, mameneja na wahasibu.
  • Nakala ya utafutaji wa maandishi ya mfumo wa usimamizi wa maktaba: watumiaji wanaweza kuwakilishwa na mkutubi au na wageni na wateja wa maktaba yenyewe.

Kwa hivyo ikiwa hatua ya kwanza ni kutafuta watendaji au muigizaji ambaye ana jukumu la mwingiliana na moduli, kuhusisha watu na majukumu yote inaweza kuwa ngumu. Katika kampuni ndogo, mtu mmoja anaweza kucheza majukumu anuwai wakati katika kampuni kubwa kunaweza kuwa na watu wengi ambao wana jukumu moja. 

Inaonekana ni busara zaidi kutambua majukumu, badala ya watu au watumiaji.

Kwa hivyo:

  • matumizi ya mfumo wa programu defiinaelezea sababu za mabadiliko;
  • jukumu ni familia ya kazi ambayo inakidhi mahitaji ya muigizaji fulani, ambayo ni ya mtumiaji wa mfumo;
  • watendaji, mtumiaji anakuwa chanzo cha mabadiliko kwa familia ya utendaji ambayo inapaswa kukidhi hitaji la mtumiaji;
  • mabadiliko ya mahitaji ya mtumiaji, inaongoza mabadiliko ya utendaji;

Wacha tuone mifano kadhaa

Tuseme tuna darasa la Kitabu ambalo linajumuisha dhana ya kitabu na utendaji wake.

Kitabu cha darasa {

    kazi GetTitle () {

        kurudi "Kitabu Kizuri";

    }

    kazi GetAuthor () {

        kurudi "Alessandro Baricco";

    }

    fanya kazi ukurasa unaofuata () {

        // ukurasa unaofuata

    }

    kazi printCurrentPage () {

        echo "yaliyomo kwenye ukurasa wa sasa";

    }

}

Hili ni darasa la kawaida sana. Tunayo kitabu, na darasa linaweza kutupa kichwa, wanaweza kutupa mwandishi, na wanaweza kuendelea. Mwishowe, inaweza pia kuchapisha ukurasa wa sasa kwenye skrini. 

Walakini, kuna shida ndogo. 

Kufikiria juu ya watendaji wanaohusika katika usimamizi wa kitu hicho cha Kitabu, wanaweza kuwa nani? 

Tunaweza kufikiria kwa urahisi wahusika wawili tofauti hapa: Usimamizi wa vitabu (kama maktaba) Na Utaratibu wa uwasilishaji wa data

Kwa hivyo tuna watendaji wawili tofauti ambao wanaingiliana na darasa.

Kwa kifupi darasa hili hufanya mchanganyiko kati ya:

  • mantiki ya biashara na 
  • uwasilishaji 

hii inaweza kuwa shida kwa sababu inakiuka kanuni moja ya dhima (SRP). 

Tunawezaje kubadilisha, tunawezaje kuboresha nambari hii kuheshimu kanuni ya uwajibikaji mmoja?

Angalia nambari ifuatayo:

Kitabu cha darasa {

    kazi GetTitle () {

        kurudi "Oceano Mare";

    }

    kazi GetAuthor () {

        kurudi "Alessandro Baricco";

    }

    ukurasa wa kazi () {

        // ukurasa unaofuata

    }

    kazi GetCurrentPage () {

        echo "yaliyomo kwenye ukurasa wa sasa";

    }

}

Kichapishaji kiolesura {

    kaziPrintaPage ($ ukurasa);

Jarida la uvumbuzi
Usikose habari muhimu zaidi kuhusu uvumbuzi. Jisajili ili kuzipokea kwa barua pepe.

}

darasa StampaLibro kutekeleza Printer {

    kaziPrintaPages ($ ukurasa) {

        echo ukurasa wa $;

    }

}

 

darasa HtmlPrinter hutumia Printa {

    kaziPrintaPages ($ ukurasa) {

        mwangwi ' '. $ ukurasa. ' ';

    }

}

Mfano huu rahisi sana unaonyesha jinsi ya kutenganisha uwasilishaji kutoka kwa mantiki ya biashara, na kwa kufuata SRP inatoa faida kubwa katika kubadilika kwa mradi wetu.

Wacha tuangalie mfano mwingine:

Mfano sawa na ule hapo juu ni wakati kitu kinaweza kujiokoa na kujipatia yenyewe kutoka kwa uwasilishaji.

Kitabu cha darasa {

    kazi GetTitle () {

        kurudi "Oceano Mare";

    }

    kazi GetAuthor () {

        kurudi "Alessandro Baricco";

    }

    ukurasa wa kazi () {

        // ukurasa unaofuata

    }

    kazi GetCurrentPage () {

        kurudi "yaliyomo kwenye ukurasa wa sasa";

    }

    kazi kuokoa () {

        $ filename = '/ nyaraka /'. $ hii-> kupataTitolo (). '-'. $ hii-> getAuthor ();

        file_put_contents ($ filename, serialize ($ hii));

    }

}

Kama hapo awali, hapa pia tunaweza kutambua watendaji tofauti kama Usimamizi wa vitabu (kama maktaba) Na Uvumilivu. Wakati wowote tunataka kubadilisha njia tunayokwenda kutoka ukurasa kwenda ukurasa, tunahitaji kubadilisha darasa hili. Tunaweza kuwa na sababu kadhaa za mabadiliko.

Kitabu cha darasa {

    kazi GetTitle () {

        kurudi "Oceano Mare";

    }

    kazi GetAuthor () {

        kurudi "Alessandro Baricco";

    }

    ukurasa wa kazi () {

        // ukurasa unaofuata

    }

    kazi GetCurrentPage () {

        kurudi "yaliyomo kwenye ukurasa wa sasa";

    }

}

darasa rahisiFilePersistence {

    kazi kuokoa (Kitabu $ kitabu) {

        $ filename = '/ nyaraka /'. $ kitabu-> GetTitle (). '-'. $ kitabu-> getAuthor ();

        file_put_contents ($ filename, serialize ($ book));

    }

}

Kuhamisha shughuli ya kuendelea kwa darasa lingine kutatenganisha majukumu wazi na tutakuwa huru kubadilishana njia za kuendelea bila kuathiri darasa letu la Vitabu. Kwa mfano, kutekeleza darasa la DatabasePersistence itakuwa jambo dogo, na mantiki yetu ya biashara iliyojengwa karibu na shughuli za kitabu haitabadilika.

Endelea kwa kusoma kanuni ya pili Fungua / Ilifungwa ->

Ercole Palmeri

Jarida la uvumbuzi
Usikose habari muhimu zaidi kuhusu uvumbuzi. Jisajili ili kuzipokea kwa barua pepe.

Makala ya hivi karibuni

Faida za Kurasa za Kuchorea kwa Watoto - ulimwengu wa uchawi kwa kila kizazi

Kukuza ujuzi mzuri wa magari kupitia kupaka rangi huwatayarisha watoto kwa ujuzi changamano zaidi kama vile kuandika. Kupaka rangi...

2 Mei 2024

Wakati Ujao Upo Hapa: Jinsi Sekta ya Usafirishaji Inavyofanya Mapinduzi katika Uchumi wa Kimataifa

Sekta ya majini ni nguvu ya kweli ya kiuchumi duniani, ambayo imepitia kwenye soko la bilioni 150 ...

1 Mei 2024

Wachapishaji na OpenAI hutia saini mikataba ya kudhibiti mtiririko wa taarifa zinazochakatwa na Intelligence Artificial Intelligence

Jumatatu iliyopita, Financial Times ilitangaza makubaliano na OpenAI. FT inatoa leseni kwa uandishi wake wa habari wa kiwango cha kimataifa…

Aprili 30 2024

Malipo ya Mtandaoni: Hivi Ndivyo Huduma za Utiririshaji Hukufanya Ulipe Milele

Mamilioni ya watu hulipia huduma za utiririshaji, kulipa ada za usajili za kila mwezi. Ni maoni ya kawaida kwamba wewe…

Aprili 29 2024