10 objektorienteeritud programmeerimise pÔhimÔtet, millest iga arendaja peaks teadma

10 objektorienteeritud programmeerimise pÔhimÔtet, millest iga arendaja peaks teadma

Ma sageli kohtan arendajaid, kes ei ole kuulnud SOLIDi pĂ”himĂ”tetest (me rÀÀkisime neist siin pĂ”hjalikult. — Toim.) vĂ”i objektorienteeritud programmeerimisest (OOP), vĂ”i on kuulnud, kuid ei kasuta neid praktikas. Selles artiklis kĂ€sitletakse OOP pĂ”himĂ”tete eeliseid, mis aitavad arendajal tema igapĂ€evases töös. MĂ”ned neist on hĂ€sti tuntud, teised mitte nii vĂ€ga, seega on artikkel kasulik nii algajatele kui ka kogenenud programmeerijatele.

Tuletame meelde: kĂ”ikidele "Habbra" lugejatele — 10 000 rubla allahindlus, kui registreerite end Skillboxi kursusele promokoodiga "Habr".

Skillbox soovitab: Haridusalane veebikursus Java arendaja.

DRY (Ära Korda End)

Suhteliselt lihtne pĂ”himĂ”te, mille olemus on selge juba nimest: "Ära korda end". Programmeerija jaoks tĂ€hendab see vajadust vĂ€ltida dubleeritud koodi ja vĂ”imalust kasutada töös abstraktsioone.

Kui koodis on kaks korduvat osa, tuleks need liita ĂŒheks meetodiks. Kui kindel vÀÀrtus on kasutusel rohkem kui ĂŒks kord, tasub see muundada avalikuks konstantsiks.

See on vajalik, et lihtsustada koodi ja teha selle hooldamine kergemaks, mis on OOP pÔhiline eesmÀrk. Liialdamine liitmisega ei ole ka soovitatav, kuna sama kood ei saa samaaegselt toimida nii OrderId kui ka SSN-iga.

Muutuste kapseldamine

Enamiku ettevĂ”tete tarkvaraproduktid arenevad pidevalt. See tĂ€hendab, et koodi tuleb muuta, seda peab hooldama. Oma elu lihtsustamiseks saab kasutada kapseldamist. See vĂ”imaldab tĂ”husamalt testida ja hooldada olemasolevat koodibaasi. Siin on ĂŒks nĂ€ide.

Kui kirjutate Java keeles, siis mÀÀrake privaatsetele meetoditele ja muutujatele vaikimisi private.

Avatuse/suletuse pÔhimÔte

Seda pĂ”himĂ”tet on lihtne meeles pidada, lugedes jĂ€rgmist vĂ€idet: "Tarkvarased ĂŒksused (klassid, moodulid, funktsioonid jne) peaksid olema avatud laiendamiseks, kuid suletud muutmiseks". Praktikas tĂ€hendab see, et nad vĂ”ivad vĂ”imaldada oma kĂ€itumise muutmist ilma algkoodi muutmiseta.

PĂ”himĂ”te on oluline, kui algkodi muutmine nĂ”uab selle ĂŒlevaatamist, moodulitestimist ja muid menetlusi. Kood, mis jĂ€rgib avatuse/suletuse pĂ”himĂ”tet, ei muutu laiendamisel, seega on selle kasutamisel mĂ€rgatavalt vĂ€hem probleeme.

Siin on kood, mis rikub seda pÔhimÔtet.

10 objektorienteeritud programmeerimise pÔhimÔtet, millest iga arendaja peaks teadma

Kui on vaja midagi muuta, vÔtab see palju aega, kuna tuleb muuta kÔiki koodilÔike, mis on seotud vajaliku fragmentiga.

Muide, avatus-sulgumine on ĂŒks SOLID-i pĂ”himĂ”tteid.

Üksikule vastutusele vastav pĂ”himĂ”te (SRP)

Veel ĂŒks pĂ”himĂ”te SOLID-i kogumist. See ĂŒtleb, et "klassil on vaid ĂŒks pĂ”hjus, miks seda muuta". Klass tĂ€idab ainult ĂŒhte ĂŒlesannet. Tal vĂ”ivad olla mitmed meetodid, kuid igaĂŒht kasutatakse ĂŒksnes ĂŒldise ĂŒlesande lahendamiseks. KĂ”ik meetodid ja omadused peavad teenima ainult seda.

10 objektorienteeritud programmeerimise pÔhimÔtet, millest iga arendaja peaks teadma

Selle pĂ”himĂ”tte vÀÀrtus seisneb selles, et see nĂ”rgendab seoseid eraldi tarkvarakomponentide ja koodi vahel. Kui klassis saada rohkem kui ĂŒks funktsionaalsus, tekitab see seose kahe funktsiooni vahel. Nii et kui ĂŒht neist muuta, on suur tĂ”enĂ€osus, et rikkuda teist, mis on esimesele seotud. See tĂ€hendab testimistsĂŒklite arvu suurenemist, et tuvastada kĂ”ik probleemid eelnevalt.

SÔltuvuste pööramise pÔhimÔte (DIP)

10 objektorienteeritud programmeerimise pÔhimÔtet, millest iga arendaja peaks teadma

Ülaltoodud koodinĂ€ide, kus AppManager sĂ”ltub EventLogWriter'ist, mis on omakorda tihedalt seotud AppManageriga. Kui on vaja teist viisi teavitamiseks, olgu see siis push, SMS vĂ”i e-mail, tuleb muuta klassi AppManager.

Probleemi saab lahendada DIP abil. Seega, selle asemel, et kĂŒsida AppManagerilt, kĂŒsime EventLogWriter'ilt, mis viiakse ellu raamistikuga.

DIP vĂ”imaldab hĂ”lpsasti asendada ĂŒksikuid mooduleid teistega, muutes sĂ”ltuvuse moodulit. See vĂ”imaldab muuta ĂŒhte moodulit, mĂ”jutamata teisi.

Koostamine, mitte pÀrimine

10 objektorienteeritud programmeerimise pÔhimÔtet, millest iga arendaja peaks teadmaPeamised viisid koodi taaskasutamiseks on pÀrimine ja koostamine, kummalgi on oma eelised ja puudused. Tavaliselt eelistatakse teist, kuna see on paindlikum.

Koostamine vĂ”imaldab klassi kĂ€itumist muuta kĂ€itamise ajal, seadistades selle omadusi. Interfaiside rakendamisel kasutatakse polĂŒmorfismi, mis annab paindlikuma rakenduse.

Isegi Joshua Bloch "Effective Java"-s soovitab eelistada koostamist mitte pÀrimist.

Barbara Liskovi asenduspÔhimÔte (LSP)

Veel ĂŒks SOLID tööriistade pĂ”himĂ”te. See ĂŒtleb, et alamtĂŒĂŒbid peavad olema asendatavad supertĂŒĂŒbiga. See tĂ€hendab, et meetodid ja funktsioonid, mis töötavad superklassiga, peavad saama probleemideta töötada ka selle alams klassidega.

LSP on seotud nii ĂŒhe vastutuse pĂ”himĂ”tte kui ka vastutuse jagamise pĂ”himĂ”ttega. Kui klass pakub rohkem funktsionaalsust kui alams klass, siis viimane ei toeta mĂ”ningaid funktsioone, rikkudes sellega seda pĂ”himĂ”tet.

Siin on koodilÔik, mis rikub LSP-d.

10 objektorienteeritud programmeerimise pÔhimÔtet, millest iga arendaja peaks teadma

Meetod area(Rectangle r) arvutab nelinurga pindala. Programm ebaÔnnestub pÀrast Square'i tÀitmist, kuna Square ei ole siin nelinurk. Vastavalt LSP pÔhimÔttele peavad funktsioonid, mis kasutavad pÔhiklassi viiteid, olema vÔimelised kasutama ka tuletatud klasside objekte ilma lisainstruktsioonideta.

See pĂ”himĂ”te, mis on alamtĂŒĂŒbi spetsiifiline mÀÀratlemine, pakkus vĂ€lja Barbara Liskov 1987. aastal konverentsil, kus tema peaettekanne oli 'Andmete abstraktsioon ja hierarhia' — seetĂ”ttu see nime saanud.

Liidese jagamise pÔhimÔte (ISP)

JĂ€lle ĂŒks SOLID pĂ”himĂ”te. Selle kohaselt ei tohi liidest, mida ei kasutata, rakendada. Selle pĂ”himĂ”tte jĂ€rgimine aitab sĂŒsteemil jÀÀda paindlikuks ja reguleeritavaks, kui muudetakse tööloogikat.

Seda olukorda esineb kĂ”ige sagedamini, kui liides sisaldab mitut funktsionaalsust, kusjuures kliendile on vajalik ainult ĂŒks neist.

Kuna liidese kirjutamine on keeruline ĂŒlesanne, on pĂ€rast töö lĂ”petamist sellele muutmine, rikkumata midagi, probleem.

ISP pÔhimÔtte eelis Java-s on see, et esmalt peate rakendama kÔik meetodid ja alles siis saavad neid kasutada klassid. SeetÔttu annab pÔhimÔte vÔimaluse vÀhendada meetodite arvu.

10 objektorienteeritud programmeerimise pÔhimÔtet, millest iga arendaja peaks teadma

Programmeerimine liidese, mitte rakenduse jÀrgi

Siit on kÔik arusaadav nime jÀrgi. Selle pÔhimÔtte rakendamine toob kaasa paindliku koodi loomise, mis suudab töötada igasuguste uute liidese rakendustega.

Tuleb kasutada liidese tĂŒĂŒpi muutujaid, tagastatavaid tĂŒĂŒpe vĂ”i meetodi argumentide tĂŒĂŒpe. NĂ€ide — kasutamine SuperClass'i asemel SubClass'i.

Kusjuures:

List numbers= getNumbers();

Ja mitte:

ArrayList numbers = getNumbers();

Siin on praktiline rakendus sellest, millest eelnevalt rÀÀgiti.

10 objektorienteeritud programmeerimise pÔhimÔtet, millest iga arendaja peaks teadma

Delegatsiooni pÔhimÔte

Levinud nÀide on meetodid equals() ja hashCode() Java-s. Kui tuleb vÔrrelda kaht objekti, delegeeritakse see toiming vastavale klassile, mitte kliendile.

PĂ”himĂ”tte eelisteks on koodi dubleerimise vĂ€ltimine ja suhteliselt lihtne kĂ€itumise muutmine. Samuti on see rakendatav sĂŒndmuste delegeerimiseks.

10 objektorienteeritud programmeerimise pÔhimÔtet, millest iga arendaja peaks teadma

KÔik need pÔhimÔtted vÔimaldavad kirjutada paindlikumat, ilusamat ja usaldusvÀÀrsemat koodi, millel on kÔrge seos ja madal sidusus. Loomulikult on teooria tore, kuid et arendaja hakkaks tÔeliselt kasutama omandatud teadmisi, on vajalik praktika. JÀrgmine samm pÀrast OOP pÔhimÔtete omandamist vÔib olla tarkvaraarenduse levinud probleemide lahendamiseks mÔeldud disainimustrite uurimine.

Skillbox soovitab:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster