Liigu peamise sisu juurde

Sissejuhatus SOLID'isse

Sissejuhatus

Senimaani oleme käsitlenud nelja objektorienteeritud programeerimise põhiprintsiipi, milleks on: kapseldamine, pärilikkus, polümorfism ja abstraktsioon. Need märksõnad ei tohiks võõrad olla - need on tööriistad, mida kasutatakse objektorienteeritud koodi kirjutamisel. Tööriistadega kaasnevad tavaliselt ka juhised ja soovitused nende õigeks kasutamiseks. Seda rolli täidabki mõiste SOLID.

SOLID on viiest disainiprintsiibist koosnev kogum, mis aitab kirjutada objektorienteeritud koodi nii, et see oleks arusaadav, laiendatav ja hooldatav. Iga printsiip käsitleb konkreetset viisi, kuidas klasside disain kipub koodibaasi suurenedes valesti minema.

Need printsiibid ei ole otseselt reeglid, vaid tähelepanekud selle kohta, mis teeb objektorienteeritud koodi praktikas hästi toimivaks. Enamik nende aluseks olevatest ideedest peaksid juba tuttavad olema. Need printsiibid annavad nendele ideedele konkreetsed nimed ja selgemad määratlused.

Viis printsiipi

Nagu eelnevalt mainitud koosneb SOLID viiest printsiibist, milleks on:

TähtPrintsiipKokkuvõttev lause
SSingle ResponsibilityA class should have only one reason to change.
OOpen/ClosedA class should be open for extension, but closed for modification.
LLiskov SubstitutionA subclass must be substitutable for its parent without breaking correctness.
IInterface SegregationA class should not be forced to implement methods it does not use.
DDependency InversionDepend on abstractions, not on concrete implementations.

Kuidas SOLID seostud OOP printsiipidega

Iga printsiip seostub otseselt objektorienteeritud programmeerimise mõistetega, mida sa juba tunned:

  • SRP tugineb kapseldamisele - hästi kapseldatud klass, mis haldab oma andmeid ja käitumist, kipub omama ühte selget vastutust.
  • OCP tugineb polümorfismile ja liidestele - abstraktsioonide kaudu disainimine võimaldab lisada uut käitumist ilma olemasolevat koodi muutmata.
  • LSP täpsustab pärilikkust - see määratleb täpselt, milline näeb välja korrektne IS-A suhe käitusajal, mitte ainult kompilaatori tasemel.
  • ISP täpsustab liideste disaini - liidesed peaksid kirjeldama fokusseeritud ja sidusaid võimekusi, mitte omavahel seostumatute meetodite loetelu.
  • DIP formaliseerib abstraktsiooni - kõrgtaseme loogika peaks sõltuma abstraktsioonidest, et konkreetseid teostusi saaks muuta ilma kogu süsteemi mõjutamata.

Päritolu

Need printsiibid said suures osas formaliseeritud Robert C. Martini ja Barbara Liskovi poolt. Open/Closed printsiip pärineb Bertrand Meyeri 1988. aasta teosest "Object-oriented Software Construction". Liskov Substitution printsiipi tutvustav Barbara Liskov oma 1987. aasta ettekandes "Data Abstraction and Hierarchy" ning formaliseeris selle ära oma 1994. aasta teadusartiklis "A behavioral notion of subtyping" koos Jeannette Wingiga. Robert C. Martin kogus need kõik kokku, nimetas need võtted ära ja tegi need suures mastaabis populaarseks koos teiste SOLID'isse kuuluvate printsiipidega oma 2002. aasta raamatus "Agile Software Development, Principles, Patterns and Practices".

Printsiibid, mitte reeglid

Tähtis on meeles pidada et SOLID on kogumik printsiipidest, mitte reeglitest! Printsiip suunab disainivalikuid, reegel nõuab järgimist. Väike skript, mille eluiga on väike ei pea SOLID'i põhimõtteid rangelt järgima. Tootmiskeskkonna koodibaas, mis aja jooksul kasvab, vahetab omanikke ja laieneb ettearvamatutes suundades, võidab oluliselt sellest, kui kood järgib neid printsiipe.

Eesmärk ei ole nii-öelda nimekirjas kõikidele kastikestele linnukesed sisse saada. Eesmärk on kirjutada koodi, millest on lihtne aru saada, mida on kerge testida ja muuta. SOLID pakub sõnavara nende omaduste kirjeldamiseks ning vaatenurka, mille abil märgata disainiotsuseid, mis võivad hiljem probleeme tekitada.