Hierarchie można tworzyć na dwa sposoby – dziedziczenie i skład. Ideą dziedziczenia jest tworzenie nowych klas jako wyspecjalizowanych wersji starych. Klasy specjalistyczne są podklasami, a bardziej ogólne to nadklasy. Ten typ relacji jest często nazywany relacją typu is-a, ponieważ podklasa jest typem nadklasy. Na przykład lew jest typem zwierzęcia, więc zwierzę byłoby nadklasą, a lew podklasą. Inny typ relacji jest znany jako relacja ma-a. To znaczy, że jedna klasa ma instancje innej klasy. Na przykład samochód ma koła. Nie powiedzielibyśmy, że koła są rodzajem samochodu, więc nie ma tam dziedziczenia, ale powiedzielibyśmy, że są częścią samochodu, co implikuje skład. Są przypadki, w których nie jest tak jasne, czy relacja powinna być modelowana z dziedziczeniem, czy z kompozycją, i w takich przypadkach powinieneś zdecydować się na kontynuację kompozycji. Ogólnie rzecz biorąc, ludzie zgadzają się, że kompozycja jest znacznie bardziej elastycznym sposobem projektowania systemu i że dziedziczenie powinno być używane tylko wtedy, gdy trzeba modelować specjalizację klasy. Zwróć uwagę, że kiedy projektujesz swoje systemy z kompozycją zamiast dziedziczenia, obiekty przyjmują różne role i stają się bardziej podobne do narzędzi. To dobrze, ponieważ można je łatwo połączyć ze sobą i w razie potrzeby wymienić, a także zwykle uzyskuje się większą liczbę mniejszych klas. Teraz, gdy rozumiesz podstawowe idee programowania zorientowanego obiektowo, możesz zdać sobie sprawę z mocy, jaką daje połączenie tych pomysłów. Jeśli masz system, który obejmuje zachowanie i tylko publicznie oferuje to, co jest potrzebne innym do prawidłowego działania, który może dynamicznie odpowiadać na abstrakcyjne pomysły za pomocą poprawnych i konkretnych działań oraz umożliwia interakcję hierarchii koncepcji z innymi hierarchiami pojęć, możesz być spokojny że możesz sobie poradzić ze złożonością. W kolejnych akapitach wyjaśnimy kilka bardziej przyziemnych koncepcji, które są podstawowymi elementami składowymi większości systemów zorientowanych obiektowo i które musisz zrozumieć, aby móc postępować zgodnie z kodem rozwiniemy się na przykład.