Mis on klassihierarhia?

Klassihierarhia, mida nimetatakse ka klassi taksonoomiaks, on rühm seotud klasse, mis on pärimise kaudu ühendatud sarnaste asjade tegemiseks. Hierarhia tipp võib olla üks põhiklass, millest on tuletatud kõik teised selle all olevad klassid, või hierarhial võib olla mitu põhiklassi, mille funktsioonid ühinevad hiljem ühes või mitmes tuletatud klassis. Klasside vahelisi seoseid saab illustreerida puudena ning iga väiksemat puud suures taksonoomias võib samuti käsitleda hierarhiana.

Kõigil klassihierarhiatel ei saa olla mitut juurt ja iga klassihierarhia struktuur sõltub suuresti keelest, milles see on kirjutatud. C++ võimaldab mitut pärimist, nii et keerulisi hierarhiaid saab luua mitme juure ja mitme puuga, mis ühinevad üksteisega. Java® seevastu on piiratud ühe pärandusega, seega on selle klassisuhted tavaliselt lihtsamad, ehitatud suhteliselt iseseisvate puudena, millel on üks juur. Liidese pärimine võib Java® klasside hierarhiat mõnevõrra keerulisemaks muuta, kuid liideseid ei kutsuta peaaegu kunagi välja nii keerulises raamistikus, et see oleks nagu puude liitmine.

Klassihierarhia komponendid võivad tüübi ja funktsiooni poolest erineda, kui pärimise osas järgitakse alati keelereegleid. Hierarhia klassid võivad olla avalikud, kaitstud, abstraktsed, konkreetsed või virtuaalsed. Kasutada võib ka liideseid, globaalseid funktsioone ja sõpru. Sõltuvalt arvutikeelest võivad mõned neist tüüpidest paremini pärida kui teised. Üldiselt on hierarhiad väga paindlikud ja neid saab kasutada mitmel otstarbel.

Puuduvad ranged reeglid selle kohta, kuhu teatud tüüpi klassid hierarhiasse paigutada. Iga klass võib olla ükskõik milline ülalmainitud tüüpidest. Üldiselt peaksid hierarhia viimased klassid, mille all ei ole tuletatud klasse, olema avalikud ja konkreetsed. Kuna aga võivad eksisteerida ka puhtalt abstraktsed klassihierarhiad, on see vaid rusikareegel.

Kuigi klassihierarhia võib olla kasulik tööriist koodi korraldamiseks ja funktsioonide kapseldamiseks, võib juhtuda, et liiga sügavale hierarhiasse süvenemine võib koodi hoopis segamini ajada, selle asemel et seda selgitada ja hooldamist lihtsamaks muuta. Tugeva suhte loomine paljude klasside vahel nõuab teatud ettenägelikkust; Kuigi alguses võib olla lihtsam koodi paljudeks väikesteks tükkideks jagada, võib nende väikeste tükkide käsitlemine olla hiljem keerulisem. Kui klassihierarhia on õigesti üles ehitatud, aitab see nii arendajatel kui ka kasutajatel määrata, kuidas klassid töötavad. Kui see on ehitatud ilma hooldust ja selgust silmas pidades, võivad paljud pärimise tasemed tagasi vaadata ja mõista segadust tekitada.