Vad är klasshierarki?

En klasshierarki, även kallad klasstaxonomi, är en grupp relaterade klasser som är sammankopplade genom arv för att göra liknande saker. Toppen av hierarkin kan vara en enda basklass från vilken alla andra klasser under den härleds, eller så kan hierarkin ha flera basklasser vars funktioner senare smälter samman i en eller flera härledda klasser. Relationerna mellan klasserna kan illustreras som träd, och varje mindre träd inom den stora taxonomin kan också betraktas som en hierarki.

Alla klasshierarkier kan inte ha flera rötter, och strukturen i varje klasshierarki beror till stor del på språket den är skriven i. C++ tillåter multipelt arv, så komplexa hierarkier kan byggas med flera rötter och flera träd som smälter samman i varandra. Java®, å andra sidan, är begränsad till enstaka arv, så dess klassförhållanden är vanligtvis enklare, byggda som relativt fristående träd med en enda rot. Gränssnittsarv kan lägga till viss komplexitet till en klasshierarki i Java®, men gränssnitt anropas nästan aldrig i ett så komplext ramverk att det skulle vara som att slå samman träd.

Komponenterna i en klasshierarki kan variera i typ och funktion, så länge språkets regler alltid följs med avseende på arv. Klasser i en hierarki kan vara offentliga, skyddade, abstrakta, konkreta eller virtuella. Gränssnitt, globala funktioner och vänner kan också användas. Beroende på datorspråk kan vissa av dessa typer lämpa sig bättre för arv än andra. I allmänhet är hierarkier mycket flexibla och kan användas på många sätt för många ändamål.

Det finns inga hårda regler om var vissa typer av klasser måste placeras i en hierarki. Vilken klass som helst kan tänkas vara någon av de ovan nämnda typerna. I allmänhet bör de sista klasserna i hierarkin som inte har några härledda klasser under sig vara offentliga och konkreta. Eftersom rent abstrakta klasshierarkier också kan existera är detta dock bara en tumregel.

Även om en klasshierarki kan vara ett användbart verktyg för att organisera kod och kapsla in funktionalitet, kan det finnas tillfällen då en fördjupning i en hierarki faktiskt kan förvirra koden, snarare än att förtydliga den och göra den lättare att underhålla. Att bygga en robust relation mellan många klasser kräver en viss framsynthet; medan det initialt kan vara lättare att dela upp kod i många små bitar, kan de små bitarna bli svårare att hantera senare. När den är byggd på rätt sätt hjälper en klasshierarki både utvecklare och användare att avgöra hur klasser fungerar. Om det är byggt utan underhåll och tydlighet i åtanke, kan de många nivåerna av arv vara förvirrande att se tillbaka på och förstå.