Oczywiście, że tak, po prostu zastanawiam się, czy racjonalne jest projektowanie w taki sposób.
Robię klona Breakouta i pracuję nad klasą. Chciałem zastosować dziedziczenie, mimo że nie muszę, zastosować to, czego się nauczyłem w C ++. Myślałem o projektowaniu klas i wymyśliłem coś takiego:
GameObject -> klasa podstawowa (składa się z elementów danych, takich jak przesunięcia xiy oraz wektor
SDL_Surface * MovableObject: GameObject -> klasa abstrakcyjna + klasa pochodna GameObject (jedna metoda void move () = 0;)
NonMovableObject: GameObject -> pusta klasa ... żadnych metod ani elementów danych innych niż konstruktor i destruktor (przynajmniej na razie?).
Później planowałem wyprowadzić klasę z NonMovableObject, na przykład Tileset: NonMovableObject. Zastanawiałem się tylko, czy często używane są „puste” klasy abstrakcyjne, czy tylko puste klasy ... Zauważyłem, że w ten sposób po prostu tworzę klasę NonMovableObject tylko ze względu na kategoryzację.
Wiem, że zastanawiam się nad zrobieniem klonu, ale mniej skupiam się na grze, a bardziej na używaniu dziedziczenia i projektowaniu jakiegoś frameworka.
źródło
MovableObject
nieNonMovableObject
mogą się po sobie dziedziczyć, obie mają swoją lokalizację; jako takie, oba powinny być zużywalne przez kod, który np. chce skierować cel potwora w stronę obiektu bez względu na to, czy obiekt ten może się poruszać, czy nie.Ma aplikacje w C # jak wspomniane ammoQ, ale w C ++ jedyna aplikacja byłaby, gdybyś chciał mieć listę wskaźników NonMovableObject.
Ale wyobrażam sobie, że niszczycie obiekty za pomocą wskaźnika NonMoveableObject, w którym to przypadku potrzebowalibyście wirtualnych destruktorów i nie byłby to już pusta klasa. :)
źródło
Jedną z sytuacji, w których możesz to zobaczyć, jest sytuacja, w której silnie powiązana kolekcja zawiera inne typy heterogeniczne. Nie mówię, że to świetny pomysł, może wskazywać na słabą abstrakcję lub zły projekt, ale się zdarza. Jak wspomniałeś, jest to sposób kategoryzacji rzeczy i może być użyteczny i całkowicie poprawny.
Np. Chcesz, aby kolekcja zawierała koty i psy. W swoim projekcie decydujesz, że mają ze sobą wiele wspólnego, więc masz podstawową klasę Mamal i używaj tego typu w swojej kolekcji (np. Lista). Wszystko dobrze. Następnie decydujesz, że chcesz dodać kilka żab do swojej kolekcji, ale nie są to ssaki, więc jednym ze sposobów może być uczynienie z nich podklasy zwierząt, ale może nie możesz myśleć o tym, ile żab i mamali wspólne, więc zwierzę pozostaje puste. Następnie wpisujesz swoją kolekcję za pomocą Animal zamiast Mamal i wszystko jest w porządku.
W prawdziwym życiu stwierdzam, że nawet jeśli wcześniej lub później utworzę pustą klasę podstawową, znajdzie się w niej jakaś funkcjonalność, ale na pewno są czasy, kiedy istnieją.
źródło