Co to jest hierarchia klas?

Hierarchia klas, zwana także taksonomią klas, to grupa powiązanych ze sobą klas, które są połączone poprzez dziedziczenie, aby robić podobne rzeczy. Szczyt hierarchii może być pojedynczą klasą bazową, z której pochodzą wszystkie inne klasy poniżej, lub hierarchia może mieć wiele klas bazowych, których funkcje łączą się później w co najmniej jednej klasie pochodnej. Relacje między klasami można zilustrować jako drzewa, a każde mniejsze drzewo w dużej taksonomii można również uznać za hierarchię.

Nie wszystkie hierarchie klas mogą mieć wiele korzeni, a struktura każdej hierarchii klas zależy w dużej mierze od języka, w którym jest napisana. C++ umożliwia wielokrotne dziedziczenie, więc złożone hierarchie mogą być budowane z wieloma korzeniami i wieloma drzewami, które łączą się ze sobą. Z drugiej strony Java® jest ograniczona do pojedynczego dziedziczenia, więc jej relacje klasowe są zwykle prostsze, zbudowane jako stosunkowo samodzielne drzewa z jednym korzeniem. Dziedziczenie interfejsów może zwiększyć złożoność hierarchii klas w Javie®, ale interfejsy prawie nigdy nie są wywoływane w tak złożonej strukturze, że przypominałoby to łączenie ze sobą drzew.

Składniki hierarchii klas mogą różnić się rodzajem i funkcją, o ile zasady języka są zawsze przestrzegane w odniesieniu do dziedziczenia. Klasy w hierarchii mogą być publiczne, chronione, abstrakcyjne, konkretne lub wirtualne. Można również używać interfejsów, funkcji globalnych i znajomych. W zależności od języka komputerowego niektóre z tych typów mogą być lepiej dziedziczone niż inne. Ogólnie rzecz biorąc, hierarchie są bardzo elastyczne i mogą być używane na wiele sposobów do wielu celów.

Nie ma sztywnych reguł dotyczących hierarchizacji poszczególnych typów klas. Każda klasa może być dowolnym z wymienionych powyżej typów. Ogólnie rzecz biorąc, ostatnie klasy w hierarchii, które nie mają poniżej klas pochodnych, powinny być publiczne i konkretne. Ponieważ jednak mogą również istnieć czysto abstrakcyjne hierarchie klas, jest to tylko praktyczna zasada.

Chociaż hierarchia klas może być użytecznym narzędziem do organizowania kodu i enkapsulacji funkcjonalności, może się zdarzyć, że zbyt głębokie zagłębienie się w hierarchię może faktycznie zmylić kod, zamiast wyjaśniać go i ułatwiać utrzymanie. Budowanie solidnych relacji między wieloma klasami wymaga pewnej dozy przewidywania; chociaż początkowo może być łatwiej rozbić kod na wiele małych kawałków, później te małe kawałki mogą stać się trudniejsze w obsłudze. Po prawidłowym zbudowaniu hierarchia klas pomaga zarówno programistom, jak i użytkownikom w określaniu sposobu działania klas. Jeśli jest zbudowany bez konserwacji i przejrzystości, wiele poziomów dziedziczenia może być mylących, aby spojrzeć wstecz i zrozumieć.