Vad är klasshierarki?
En klasshierarki, även kallad klasstaxonomi, är en grupp relaterade klasser som är anslutna genom arv för att göra liknande saker. Övre delen av hierarkin kan vara en enda basklass från vilken alla andra klasser under den härleds, eller hierarkin kan ha flera basklasser vars funktionaliteter smälter samman senare i en eller flera härledda klasser. Förhållandena mellan klasserna kan illustreras som träd, och varje mindre träd inom den stora taxonomin kan också betraktas som en hierarki.
Inte alla klasshierarkier kan ha flera rötter, och strukturen för alla klasshierarkier beror till stor del på språket det är skrivet i. C ++ tillåter flera arv, så komplexa hierarkier kan byggas med flera rötter och flera träd som smälter in i varandra. Java® är å andra sidan 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änssnittarv kan lägga till en viss komplexitet till en klasshierarki i Java®, men gränssnitt påkallas nästan aldrig i en så komplex ram 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åna sig bättre till arv än andra. Generellt sett ä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 för var specifika klasser måste placeras i en hierarki. Varje klass kan tänkas vara någon av ovan nämnda typer. I allmänhet bör de sista klasserna i hierarkin som inte har härledda klasser under sig vara offentliga och konkreta. Eftersom rent abstrakta klasshierarkier också kan existera, är detta emellertid 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å att fördjuva för djupt in i en hierarki faktiskt kan förväxla koden, snarare än att klargöra den och göra det lättare att underhålla. Att bygga ett robust förhållande mellan många klasser kräver en viss mängd framsyn; medan det till en början kan vara lättare att dela kod i många små bitar, kan dessa små bitar bli svårare att hantera senare. När den byggs korrekt hjälper en klasshierarki både utvecklare och användare att bestämma hur klasser fungerar. Om det byggs utan underhåll och tydlighet i åtanke, kan de många arvnivåerna vara förvirrande att se tillbaka på och förstå.