Keri sisuni

Disainiprintsiibid

Ainsa vastutuse printsiip

Ainsa vastutuse printsiip (Single Responsibility Principle) ehk SRP ütleb, et iga ülesanne, mis programmil on, peab olema eraldi klassis.

  • Iga ülesanne võiks olla eraldi klassis, sest iga ülesanne on omamoodi telg, millel võib tekkida muutusi.
  • Muutusteks klassis peab olema ainult üks põhjus.
  • Kui muutus ärireeglites põhjustab muutuse klassis, siis muudatus andmebaasis, kasutusliideses, raportis või mõnes muus programmi osas ei tohi kaasa tuua täiendavaid muudatusi sellesse klassi.

Avatud-suletud printsiip

Avatud-suletud printsiip (Open Closed Principle) ehk OCP ütleb, et tarkvaralised elemendid nagu klassid, moodulid, funktsioonid jne. peavad olema avatud täiendustele, kuid suletud muudatustele.

See tähendab seda, et uute funktsionaalsuste lisamisel, me lisame uusi klasse ja pärime olemasolevatest või äärmisel juhul lisame olemasolevatesse klassidesse uusi meetode, kuid juba olemasolevat koodi me ei muuda. Ei muuda seepärast, et siis ei saa tekkida vigu juba töötavasse ja testitud koodi.

Konflikt päris maailmaga

Muudatusi pole praktikas vaja ainult ideaalses maailmas, kus me paraku ei ela, kuid see ei tähenda, et me ei võiks ideaalide suunas liikuda. Ka parima planeerimise ja analüüsimise juures on võimalik tekitada probleeme, mis viivad muudatusteni olemasolevas koodis. Samuti on üheks mõjuriks aeg, mille jooksul asjaolud muutuvad. Aga suunalt on see printsiip õige.

Liskovi asendatavuse printsiip

Liskovi asendatavuse printsiip (Liskov Substitution Principle) ehk LSP ütleb lihtsasse keelde tõlgituna, et päritud klassid peavad olema kasutatavad täpselt samas kohas ja kontekstis kus nende baasklassid ning nad peavad käituma täpselt nendele reeglitele vastavalt, mille seavad nende baasklassid.

Algne definitsioon on palju keerukam ning sellises sõnastuses on seda ka kogenud programmeerijatel pahatihti keerukas mõista. Aga aususe huvides olgu see siiski välja toodud.

Algne definitsioon

What is wanted here is something like the following substitution property: If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T." - BarbaraLiskov, Data Abstraction and Hierarchy, SIGPLAN Notices, 23,5 (May, 1988).

Liidese eraldatavuse printsiip

Liidese eraldatavuse printsiip (Interface Segregation Principle) ehk ISP ütleb, et ühe klassi sõltuvus teisest peab olema realiseeritud minimaalseima võimaliku liidese abil.

Sõltuvuse pööratavuse printsiip

Sõltuvutuse pööratavuse printsiip (Dependency Inversion Principle) ehk DIP ütleb kahte asja:

  • Kõrgema taseme moodulid ei tohi sõltuda alumiste tasemete omadest. Mõlemad peavad sõltuma ainult abstraktsioonidest.
  • Abstraktsioonid ei tohi sõltuda detailidest. Detailid peavad sõltuma abstraktsioonidest.

Viited