I teraz moje pytanie brzmi - czy tego typu projekt wyczerpie wymagania projektowe
- hermetyzacja, dziedziczenie, polimorfizm, przeciążenie operatorów?
Kubeł zimnej wody: twoja uczelnia zrobiła cię w balona, dając tak idiotyczne wytyczne, a wykładowca zachował się bardzo nierozsądnie dając ci takie zadanie.
hermetyzacja, dziedziczenie, polimorfizm, przeciążenie operatorów
- to są narzędzia, których się nie powinno używać na siłę (jak ci kazano).
Dawanie wytycznych projektu typu masz tutaj hermetyzację, dziedziczenie, polimorfizm, przeciążanie operatorów i musisz użyć wszystkiego, żeby tylko użyć to totalny bezsens. Trochę jak masz w kuchni sól, cukier, dżem, mięso, marchewkę, makaron, czekoladę, wódkę i chipsy i zrób zupę używając wszystkich składników. A potem tysiące studentów opuszcza mury uczelni i zaczyna pisać komercyjnie strasznie przeinżynierowany kod, bo tak się nauczyli na uczelni (niestety ludziom przez lata zostają te chore nawyki).
dla osoby uczącej się dopiero obiektówki
paradygmat obiektowy polega raczej na zrozumieniu zależności między obiektami, i na tym, w jaki sposób się komunikują ze sobą. Wcale nie musi oznaczać to robienia aplikacji z nawrzucanym byle jak dziedziczeniem, hermetyzacją, polimorfizmem. Jeśli tego cię uczą na uczelni, to twoja uczelnia jest bardzo słaba i tracisz tylko czas.
Jakbym ja był wykładowcą, to raczej uczyłbym tego jak zrobić, żeby obiekty się ładnie komponowały ze sobą, ładnie komunikowały itp. Komunikacja między obiektami jest ważniejsza od samych klas.
możliwość wyszukiwania zwierząt według ich "systematyki" - ssaki, które potem by się dzieliły na drapieżne, gryzonie i tak dalej, płazy, gady...
...
Ogólnie wiadomo o co chodzi ;) A także oczywiście możliwość wyszukiwania według konkretnej nazwy gatunku.
umieszczanie takich hierarchii w kodzie jako hierarchię klas spowoduje to, że potem ciężko będzie się do nich dostać, czy wyszukać coś w trakcie trwania programu (chyba, że C++ dysponuje jakimiś zaawansowanymi metodami refleksji, ale tego nie wiem). Jak dla mnie lepiej byłoby stworzyć nowe pole w klasie Animal, które oznacza rodzaj zwierzęcia i potem przy tworzeniu dowolnego zwierzaka ustawiać w konstruktorze (tak, że np. type będzie się równało 'cat'). Wtedy łatwiej będziesz mógł to wyszukać dynamicznie. Hierarchię też możesz zrobić dynamicznie, nie za pomocą archaicznych konstrukcji dziedziczenia, ale przechowując gdzieś w jakiejś liście dane o każdym rodzaju zwierzęcia i odnośnik do rodzaju nadrzędnego (w sumie to jest problem, o którym prościej się myśli w kategoriach tabel w bazach danych niż za pomocą tworzenia hierarchii klas... )