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
- Principles Of Object Oriented Design (Cunningham & Cunningham)
- Single Responsibility Principle (Cunningham & Cunningham)
- Open Closed Principle (Cunningham & Cunningham)
- Liskov Substitution Principle (Cunningham & Cunningham)
- Interface Segregation Principle (Cunningham & Cunningham)
- Dependency Inversion Principle (Cunningham & Cunningham)