Kanuni 10 za Kuandaa Programu Zinazoelekezwa na Kitu Kila Msanidi Programu Anapaswa Kujua

Kanuni 10 za Kuandaa Programu Zinazoelekezwa na Kitu Kila Msanidi Programu Anapaswa Kujua

Mara nyingi mimi hukutana na wasanidi programu ambao hawajasikia kanuni za MANGO (sisi alizungumza juu yao kwa undani hapa. - Transl.) au programu inayolenga kitu (OOP), au umesikia kuzihusu, lakini usizitumie kwa vitendo. Makala haya yanaelezea manufaa ya kanuni za OOP ambazo humsaidia msanidi programu katika kazi yake ya kila siku. Baadhi yao wanajulikana sana, wengine sio sana, hivyo makala hiyo itakuwa muhimu kwa Kompyuta na waandaaji wa programu wenye ujuzi.

Tunakukumbusha: kwa wasomaji wote wa Habr - punguzo la rubles 10 unapojiandikisha katika kozi yoyote ya Skillbox kwa kutumia msimbo wa ofa wa Habr.

Skillbox inapendekeza: Kozi ya elimu mtandaoni "Msanidi programu wa Java".

KAUSHA (Usijirudie)

Kanuni rahisi, ambayo kiini chake ni wazi kutoka kwa jina: "Usijirudie." Kwa mpangaji programu, hii inamaanisha hitaji la kuzuia msimbo unaorudiwa, na pia fursa ya kutumia uondoaji katika kazi zao.

Ikiwa kuna sehemu mbili za kurudia katika msimbo, zinapaswa kuunganishwa katika njia moja. Ikiwa thamani ya msimbo ngumu inatumiwa zaidi ya mara moja, inafaa kuibadilisha kuwa ya kawaida ya umma.

Hii ni muhimu ili kurahisisha msimbo na iwe rahisi kudumisha, ambayo ni lengo kuu la OOP. Hupaswi kutumia muungano kupita kiasi, kwa kuwa msimbo sawa hautapitisha uthibitishaji kwa OrderId na SSN.

Kujumuisha Mabadiliko

Bidhaa za programu za kampuni nyingi zinaendelea kubadilika. Hii ina maana kwamba mabadiliko yanahitajika kufanywa kwa kanuni, inahitaji kuungwa mkono. Unaweza kurahisisha maisha yako kwa kutumia encapsulation. Hii itakuruhusu kujaribu kwa ufanisi zaidi na kudumisha msingi wako wa msimbo uliopo. Hapa kuna mfano mmoja.

Ikiwa utaandika katika Java, basi toa njia za kibinafsi na anuwai kwa chaguo-msingi.

Kanuni iliyofunguliwa/iliyofungwa

Kanuni hii inaweza kukumbukwa kwa urahisi kwa kusoma taarifa ifuatayo: "Huluki za programu (madarasa, moduli, vitendaji, n.k.) zinapaswa kufunguliwa kwa upanuzi, lakini zifungwe kwa marekebisho." Kwa mazoezi, hii ina maana kwamba wanaweza kuruhusu tabia zao kubadilishwa bila kubadilisha msimbo wa chanzo.

Kanuni ni muhimu wakati mabadiliko kwenye msimbo wa chanzo yanahitaji marekebisho ya msimbo, upimaji wa kitengo, na taratibu zingine. Msimbo unaofuata kanuni iliyo wazi/iliyofungwa haibadiliki inapopanuliwa, kwa hivyo kuna matatizo machache sana nayo.

Hapa kuna mfano wa nambari inayokiuka kanuni hii.

Kanuni 10 za Kuandaa Programu Zinazoelekezwa na Kitu Kila Msanidi Programu Anapaswa Kujua

Ikiwa unahitaji kubadilisha kitu ndani yake, itachukua muda mwingi, kwa kuwa sehemu zote za msimbo ambazo zina uhusiano na kipande kinachohitajika zitabadilishwa.

Kwa njia, uwazi-kufungwa ni moja ya kanuni za MANGO.

Kanuni ya Uwajibikaji Mmoja (SRP)

Kanuni nyingine kutoka kwa seti ya SOLID. Inasema kwamba "kuna sababu moja tu ambayo husababisha mabadiliko katika darasa." Darasa linatatua shida moja tu. Inaweza kuwa na mbinu kadhaa, lakini kila mmoja wao hutumiwa tu kutatua tatizo la kawaida. Njia zote na mali zinapaswa kutumika tu hii.

Kanuni 10 za Kuandaa Programu Zinazoelekezwa na Kitu Kila Msanidi Programu Anapaswa Kujua

Thamani ya kanuni hii ni kwamba inafungua kuunganisha kati ya sehemu ya programu ya mtu binafsi na kanuni. Ukiongeza utendakazi zaidi ya moja kwa darasa, italeta uhusiano kati ya vitendaji viwili. Kwa hivyo, ukibadilisha mmoja wao, kuna nafasi kubwa ya kuharibu ya pili, ambayo inaunganishwa na ya kwanza. Na hii inamaanisha kuongeza mizunguko ya majaribio ili kutambua shida zote mapema.

Kanuni ya Ugeuzaji Utegemezi (DIP)

Kanuni 10 za Kuandaa Programu Zinazoelekezwa na Kitu Kila Msanidi Programu Anapaswa Kujua

Hapo juu ni mfano wa msimbo ambapo AppManager inategemea EventLogWriter, ambayo nayo inaunganishwa kwa karibu na AppManager. Iwapo unahitaji njia tofauti ya kuonyesha arifa, iwe ya kushinikiza, SMS au barua pepe, unahitaji kubadilisha darasa la AppManager.

Tatizo linaweza kutatuliwa kwa kutumia DIP. Kwa hivyo, badala ya AppManager, tunaomba EventLogWriter, ambayo itaingizwa kwa kutumia mfumo.

DIP inafanya uwezekano wa kubadilisha moduli za mtu binafsi kwa urahisi kwa kubadilisha moduli ya utegemezi. Hii inafanya uwezekano wa kubadilisha moduli moja bila kuathiri zingine.

Muundo badala ya urithi

Kanuni 10 za Kuandaa Programu Zinazoelekezwa na Kitu Kila Msanidi Programu Anapaswa KujuaKuna njia mbili kuu za kutumia tena nambari: urithi na muundo, zote mbili zina faida na hasara zao. Kawaida ya pili inapendekezwa kwa sababu ni rahisi zaidi.

Utungaji hukupa uwezo wa kubadilisha tabia ya darasa wakati wa kukimbia kwa kuweka sifa zake. Wakati wa kutekeleza miingiliano, polymorphism hutumiwa, ambayo inatoa utekelezaji rahisi zaidi.

Hata Java Inayofaa na Joshua Bloch inashauri kuchagua muundo badala ya urithi.

Kanuni ya Ubadilishaji ya Barbara Liskov (LSP)

Kanuni nyingine kutoka kwa seti ya zana ya SOLID. Inasema kwamba aina ndogo lazima zibadilishwe na aina kuu. Hiyo ni, njia na kazi zinazofanya kazi na superclass zinapaswa kuwa na uwezo wa kufanya kazi bila matatizo na subclasses yake.

LSP inahusishwa na kanuni ya uwajibikaji mmoja na kanuni ya uwajibikaji wa pamoja. Ikiwa darasa linatoa utendaji zaidi kuliko darasa ndogo, basi la pili halitaunga mkono baadhi ya utendakazi, likikiuka kanuni hii.

Hapa kuna kipande cha nambari inayopingana na LSP.

Kanuni 10 za Kuandaa Programu Zinazoelekezwa na Kitu Kila Msanidi Programu Anapaswa Kujua

Njia ya eneo (Mstatili r) huhesabu eneo la Mstatili. Programu itaanguka baada ya kutekeleza Mraba kwa sababu Mraba sio Mstatili hapa. Kulingana na kanuni ya LSP, chaguo za kukokotoa zinazotumia marejeleo kwa madarasa ya msingi zinapaswa kuwa na uwezo wa kutumia vitu vya madarasa yaliyotolewa bila maagizo ya ziada.

Kanuni hii, ambayo ni ufafanuzi mahususi wa aina ndogo, ilipendekezwa na Barbara Liskov katika mada kuu ya mkutano wa 1987 yenye kichwa "Uondoaji wa Takwimu na Utawala," kwa hivyo jina lake.

Kanuni ya Mgawanyiko wa Kiolesura (ISP)

Kanuni nyingine MANGO. Kulingana na hilo, kiolesura ambacho hakitumiki haipaswi kutekelezwa. Kufuata kanuni hii husaidia mfumo kubaki kunyumbulika na kufaa kwa ajili ya kurekebisha upya mabadiliko yanapofanywa kwa mantiki ya uendeshaji.

Mara nyingi, hali hii hutokea wakati interface ina kazi kadhaa mara moja, na mteja anahitaji moja tu yao.

Kwa kuwa kuandika kiolesura ni kazi ngumu, kuibadilisha baada ya kazi kukamilika bila kuvunja chochote itakuwa changamoto.

Faida ya kanuni ya ISP katika Java ni kwamba mbinu zote lazima zitekelezwe kwanza, na kisha tu zinaweza kutumika na madarasa. Kwa hiyo, kanuni inafanya uwezekano wa kupunguza idadi ya mbinu.

Kanuni 10 za Kuandaa Programu Zinazoelekezwa na Kitu Kila Msanidi Programu Anapaswa Kujua

Kupanga kiolesura, sio utekelezaji

Kila kitu hapa ni wazi kutoka kwa jina. Kutumia kanuni hii husababisha kuundwa kwa msimbo unaoweza kubadilika ambao unaweza kufanya kazi na utekelezaji wowote mpya wa kiolesura.

Unapaswa kutumia aina ya kiolesura kwa vigeu, aina za kurudi, au aina ya hoja ya mbinu. Mfano ni kutumia SuperClass badala ya SubClass.

Hiyo ni:

Orodhesha nambari= getNumbers();

Lakini sio:

Nambari za ArrayList = getNumbers();

Hapa kuna utekelezaji wa vitendo wa kile kilichojadiliwa hapo juu.

Kanuni 10 za Kuandaa Programu Zinazoelekezwa na Kitu Kila Msanidi Programu Anapaswa Kujua

Kanuni ya kukabidhi madaraka

Mfano wa kawaida ni njia za usawa () na hashCode () katika Java. Wakati ni muhimu kulinganisha vitu viwili, hatua hii inakabidhiwa kwa darasa sambamba badala ya mteja mmoja.

Faida ya kanuni ni kwamba hakuna marudio ya nambari na ni rahisi kubadilisha tabia. Pia inatumika kwa uwakilishi wa hafla.

Kanuni 10 za Kuandaa Programu Zinazoelekezwa na Kitu Kila Msanidi Programu Anapaswa Kujua

Kanuni hizi zote zinakuwezesha kuandika kanuni rahisi zaidi, nzuri na ya kuaminika na mshikamano wa juu na kuunganisha chini. Kwa kweli, nadharia ni nzuri, lakini kwa msanidi programu kutumia maarifa yaliyopatikana, mazoezi inahitajika. Mara tu unapofahamu kanuni za OOP, hatua yako inayofuata inaweza kuwa kujifunza muundo wa muundo ili kutatua matatizo ya kawaida ya uundaji wa programu.

Skillbox inapendekeza:

Chanzo: mapenzi.com

Kuongeza maoni