10 objektorientētas programmÄ“Å”anas principi, kas jāzina katram izstrādātājam

10 objektorientētas programmÄ“Å”anas principi, kas jāzina katram izstrādātājam

Diezgan bieži sastopu izstrādātājus, kuri nav dzirdējuÅ”i par SOLID principiem (mēs par tiem Å”eit ir runāts sÄ«kāk.. - Tulk.) vai objektorientētā programmÄ“Å”ana (OOP), vai dzirdēta, bet praksē tās neizmanto. Å ajā rakstā ir aprakstÄ«tas OOP principu priekÅ”rocÄ«bas, kas palÄ«dz izstrādātājam ikdienas darbā. Daži no tiem ir labi zināmi, citi ne tik ļoti, tāpēc raksts noderēs gan iesācējiem, gan jau pieredzējuÅ”iem programmētājiem.

Atgādinām: visiem "Habr" lasītājiem - atlaide 10 000 rubļu, reģistrējoties jebkurā Skillbox kursā, izmantojot "Habr" reklāmas kodu.

Skillbox iesaka: IzglītojoŔs tieŔsaistes kurss "Java izstrādātājs".

DRY (neatkārtojiet sevi)

Diezgan vienkārÅ”s princips, kura bÅ«tÄ«ba ir skaidra no nosaukuma: "Neatkārtojiet sevi." Programmētājam tas nozÄ«mē nepiecieÅ”amÄ«bu izvairÄ«ties no koda dublÄ“Å”anās, kā arÄ« spēju darbā izmantot abstrakciju.

Ja kodā ir divas atkārtotas sadaļas, tās jāapvieno vienā metodē. Ja kodētā vērtība tiek izmantota vairāk nekā vienu reizi, ir vērts to pārveidot par publisku konstanti.

Tas ir nepiecieÅ”ams, lai vienkārÅ”otu kodu un atvieglotu tā uzturÄ“Å”anu, kas ir galvenais OOP uzdevums. Nevajadzētu arÄ« ļaunprātÄ«gi izmantot arodbiedrÄ«bu, jo viens un tas pats kods neizturēs pārbaudi gan ar OrderId, gan ar SSN.

Mainīt iekapsulāciju

Lielākās daļas uzņēmumu programmatÅ«ras produkti pastāvÄ«gi attÄ«stās. Tas nozÄ«mē, ka kods ir jāmaina, tas ir jāuztur. JÅ«s varat atvieglot savu dzÄ«vi ar iekapsulÄ“Å”anu. Tas ļaus efektÄ«vāk pārbaudÄ«t un uzturēt esoÅ”o kodu bāzi. Å eit ir viens piemērs.

Ja rakstāt Java, tad pēc noklusējuma metodēm un mainÄ«gajiem pieŔķirt privātu.

Atvērtības / tuvuma princips

Å o principu var viegli atcerēties, izlasot Ŕādu paziņojumu: "ProgrammatÅ«ras entÄ«tijām (klasēm, moduļiem, funkcijām utt.) jābÅ«t atvērtām paplaÅ”ināŔanai, bet aizvērtām modifikācijām." Praksē tas nozÄ«mē, ka viņi var ļaut mainÄ«t savu uzvedÄ«bu, nemainot avota kodu.

Princips ir svarÄ«gs, ja avota koda izmaiņām ir nepiecieÅ”amas pārskatÄ«Å”anas, vienÄ«bu testÄ“Å”ana un citas procedÅ«ras. Kods, kas pakļaujas atvērt/aizvērts principam, pagarinot nemainās, tāpēc ar to ir daudz mazāk problēmu.

Å eit ir koda piemērs, kas pārkāpj Å”o principu.

10 objektorientētas programmÄ“Å”anas principi, kas jāzina katram izstrādātājam

Ja tajā kaut kas jāmaina, tas prasīs daudz laika, jo būs jāmaina visas koda daļas, kurām ir saistība ar vēlamo fragmentu.

Starp citu, atvērtība-aizvērtība ir viens no SOLID principiem.

Vienas atbildības princips (SRP)

Vēl viens princips no SOLID komplekta. Tajā teikts, ka "ir tikai viens iemesls, kas noved pie klases maiņas". Klasei ir tikai viens uzdevums. Tam var bÅ«t vairākas metodes, taču katra no tām tiek izmantota tikai kopÄ«gas problēmas risināŔanai. Visām metodēm un Ä«paŔībām vajadzētu kalpot tikai tam.

10 objektorientētas programmÄ“Å”anas principi, kas jāzina katram izstrādātājam

Å Ä« principa vērtÄ«ba ir tāda, ka tas atslābina saikni starp vienu programmatÅ«ras daļu un kodu. Klasei pievienojot vairāk nekā vienu funkcionalitāti, tiek ieviesta saistÄ«ba starp abām funkcijām. Tādējādi, ja mainÄ«sit vienu no tiem, pastāv liela iespēja sabojāt otro, kas ir saistÄ«ts ar pirmo. Un tas nozÄ«mē palielināt testÄ“Å”anas ciklus, lai iepriekÅ” noteiktu visas problēmas.

Atkarības inversijas princips (DIP)

10 objektorientētas programmÄ“Å”anas principi, kas jāzina katram izstrādātājam

IepriekÅ” minētais ir koda piemērs, kurā AppManager ir atkarÄ«gs no EventLogWriter, kas savukārt ir cieÅ”i saistÄ«ts ar AppManager. Ja jums ir nepiecieÅ”ams cits veids, kā parādÄ«t paziņojumu, neatkarÄ«gi no tā, vai tas ir paÅ”piegāde, SMS vai e-pasts, jums ir jāmaina AppManager klase.

Problēmu var atrisināt ar DIP. Tāpēc AppManager vietā mēs pieprasām EventLogWriter, kas tiks ievadīts, izmantojot sistēmu.

DIP ļauj viegli nomainÄ«t atseviŔķus moduļus ar citiem, mainot atkarÄ«bas moduli. Tas dod iespēju mainÄ«t vienu moduli, neietekmējot pārējos.

Sastāvs mantojuma vietā

10 objektorientētas programmÄ“Å”anas principi, kas jāzina katram izstrādātājamDivi galvenie veidi, kā atkārtoti izmantot kodu, ir mantoÅ”ana un sastāvs, katram no tiem ir savas priekÅ”rocÄ«bas un trÅ«kumi. Parasti priekÅ”roka tiek dota otrajam, jo ā€‹ā€‹tas ir elastÄ«gāks.

Sastāvs sniedz iespēju mainÄ«t klases uzvedÄ«bu izpildes laikā, iestatot tās rekvizÄ«tus. ÄŖstenojot saskarnes, tiek izmantots polimorfisms, kas nodroÅ”ina elastÄ«gāku realizāciju.

Pat "Efektīvā Java" DžoŔua Blohs iesaka dot priekŔroku kompozīcijai, nevis mantoŔanai.

Barbaras Liskovas aizstāŔanas princips (LSP)

Vēl viens princips no SOLID rÄ«ku komplekta. Tajā teikts, ka apakÅ”tipiem ir jābÅ«t aizstājamiem supertipam. Tas ir, metodēm un funkcijām, kas darbojas ar virsklasi, jāspēj bez problēmām strādāt ar tās apakÅ”klasēm.

LSP ir saistÄ«ta gan ar vienotas atbildÄ«bas principu, gan ar atbildÄ«bas dalÄ«Å”anas principu. Ja klase nodroÅ”ina vairāk funkcionalitātes nekā apakÅ”klase, tad pēdējā neatbalstÄ«s kādu funkcionalitāti, pārkāpjot Å”o principu.

Šeit ir koda daļa, kas ir pretrunā ar LSP.

10 objektorientētas programmÄ“Å”anas principi, kas jāzina katram izstrādātājam

Laukuma (taisnstÅ«ra r) metode aprēķina taisnstÅ«ra laukumu. Programma avarēs pēc Square izpildes, jo kvadrāts Å”eit nav taisnstÅ«ris. Saskaņā ar LSP principu funkcijām, kas izmanto atsauces uz bāzes klasēm, ir jāspēj izmantot atvasinātu klaÅ”u objektus bez papildu instrukcijām.

Å o principu, kas ir specifiska apakÅ”tipa definÄ«cija, ierosināja Barbara Liskov 1987. gada konferences galvenajā ziņojumā ar nosaukumu "Datu abstrakcija un hierarhija" ā€” no tā izriet arÄ« tā nosaukums.

Interfeisa atdalīŔanas princips (ISP)

Vēl viens SOLID princips. Viņaprāt, interfeisu, kas netiek izmantots, nevajadzētu ieviest. Å Ä« principa ievēroÅ”ana palÄ«dz sistēmai saglabāt elastÄ«bu un reakcionējamu, veicot izmaiņas darba loÄ£ikā.

Visbiežāk Ŕī situācija rodas, ja saskarnē ir vairākas funkcijas vienlaikus, un klientam ir nepiecieÅ”ama tikai viena no tām.

Tā kā interfeisa rakstÄ«Å”ana ir sarežģīts uzdevums, pēc darba pabeigÅ”anas to mainÄ«t, neko nesalaužot, bÅ«s problēma.

ISP principa priekÅ”rocÄ«ba Java ir tāda, ka vispirms ir jārealizē visas metodes, un tikai tad tās var izmantot klasēs. Tāpēc princips ļauj samazināt metožu skaitu.

10 objektorientētas programmÄ“Å”anas principi, kas jāzina katram izstrādātājam

ProgrammēŔana saskarnei, nevis ievieŔanai

Å eit viss ir skaidrs no nosaukuma. Piemērojot Å”o principu, tiek izveidots elastÄ«gs kods, kas var darboties ar jebkuru jaunu interfeisa ievieÅ”anu.

MainÄ«gajiem, atgrieÅ”anās veidiem vai metodes argumenta veidam ir jāizmanto saskarnes tips. Piemērs ir SuperClass, nevis apakÅ”klases izmantoÅ”ana.

Tas ir:

Saraksta numuri= getNumbers();

Bet ne:

ArrayList numuri = getNumbers();

Šeit ir praktiska iepriekŔ teiktā īstenoŔana.

10 objektorientētas programmÄ“Å”anas principi, kas jāzina katram izstrādātājam

DeleģēŔanas princips

IzplatÄ«ts piemērs ir Java metodes equals () un hashCode (). Ja ir jāsalÄ«dzina divi objekti, Ŕī darbÄ«ba tiek deleģēta atbilstoÅ”ajai klasei, nevis klienta klasei.

Principa priekÅ”rocÄ«ba ir tāda, ka nav koda dublÄ“Å”anās un ir salÄ«dzinoÅ”i viegli mainÄ«t uzvedÄ«bu. Tas attiecas arÄ« uz pasākumu deleģēŔanu.

10 objektorientētas programmÄ“Å”anas principi, kas jāzina katram izstrādātājam

Visi Å”ie principi ļauj rakstÄ«t elastÄ«gāku, skaistāku un uzticamāku kodu ar augstu kohēziju un zemu savienojumu. Protams, teorija ir laba, taču, lai izstrādātājs patieŔām sāktu izmantot iegÅ«tās zināŔanas, ir nepiecieÅ”ama prakse. Nākamais solis pēc OOP principu apgÅ«Å”anas var bÅ«t dizaina modeļu izpēte izplatÄ«tu programmatÅ«ras izstrādes problēmu risināŔanai.

Skillbox iesaka:

Avots: www.habr.com

Pievieno komentāru