Što je hijerarhija klasa?

Hijerarhija klasa, koja se također naziva i taksonomija klasa, skupina je srodnih klasa koje su povezane nasljeđivanjem da rade slične stvari. Vrh hijerarhije može biti jedna osnovna klasa iz koje su izvedene sve ostale klase ispod nje, ili hijerarhija može imati više osnovnih klasa čije se funkcionalnosti kasnije spajaju u jednu ili više izvedenih klasa. Odnosi između klasa mogu se ilustrirati kao stabla, a svako manje stablo unutar velike taksonomije također se može smatrati hijerarhijom.

Ne mogu sve hijerarhije klasa imati više korijena, a struktura bilo koje hijerarhije klasa uvelike ovisi o jeziku na kojem je napisana. C++ dopušta višestruko nasljeđivanje, tako da se složene hijerarhije mogu izgraditi s više korijena i više stabala koja se spajaju jedno u drugo. Java® je, s druge strane, ograničena na jedno nasljeđivanje, pa su njezini odnosi klasa obično jednostavniji, izgrađeni kao relativno samostalna stabla s jednim korijenom. Nasljeđivanje sučelja može dodati određenu složenost hijerarhiji klasa u Javi®, ali sučelja se gotovo nikada ne pozivaju u tako složenom okviru da bi to bilo kao spajanje stabala zajedno.

Komponente hijerarhije klasa mogu varirati po vrsti i funkciji, sve dok se pravila jezika uvijek poštuju s obzirom na nasljeđivanje. Klase u hijerarhiji mogu biti javne, zaštićene, apstraktne, konkretne ili virtualne. Također se mogu koristiti sučelja, globalne funkcije i prijatelji. Ovisno o jeziku računala, neke od ovih vrsta mogu se bolje nasljeđivati ​​od drugih. Općenito, hijerarhije su vrlo fleksibilne i mogu se koristiti na mnogo načina u mnoge svrhe.

Ne postoje čvrsta pravila o tome gdje se određene vrste klasa moraju smjestiti u hijerarhiju. Svaka klasa može biti bilo koja od gore navedenih vrsta. Općenito, posljednje klase u hijerarhiji koje nemaju izvedene klase ispod sebe trebale bi biti javne i konkretne. Budući da mogu postojati i čisto apstraktne hijerarhije klasa, ovo je samo pravilo.

Iako hijerarhija klasa može biti koristan alat za organiziranje koda i inkapsuliranje funkcionalnosti, može doći do trenutaka u kojima preduboko udubljivanje u hijerarhiju zapravo može zbuniti kod, umjesto da ga razjasni i olakša održavanje. Izgradnja čvrstog odnosa između mnogih klasa zahtijeva određenu dozu predviđanja; dok bi u početku moglo biti lakše razbiti kod na mnogo malih dijelova, kasnije bi s tim malim dijelovima moglo postati teže rukovati. Kada je pravilno izgrađena, hijerarhija klasa pomaže programerima i korisnicima u određivanju načina na koji klase rade. Ako se gradi bez održavanja i jasnoće na umu, mnoge razine nasljeđivanja mogu biti zbunjujuće za osvrtanje i razumijevanje.