ProHoster > Blogs > interneta ziÅas > 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.
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.
Å 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.
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.
Å Ä« 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)
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Ä
Divi 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.
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.
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.
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.
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.