Dziedziczenie - wykładniczy rozrost klas

Odpowiedz Nowy wątek
2019-08-13 06:30
0

Hej,
Mam daną klasę A, która zawiera puste metody (ma definicje ale są puste):

claas A
{
public:
  virtual void test1() {}
  virtual void test2() {}
};

Oraz klasę B, która dziedziczy po A i nadpisuje metodę test1:

class B : public A
{
public:
  void test1() override {...}
};

I teraz mam kolejną klasę, która napisuję metodę test2. Klasy C i B nie wykluczają się. Taka klasa C powinna rozszerzyć zatem klasę A ale i B. Mamy już 4 kombinacje. Dojdzie kolejną klasa, będzie 9 kombinacji.
Liczba plików rośnie wykładniczo.

Jakiś pomysł jak to zrobić dynamicznie? Myślałem nad szablonem ale definicja klas koniecznie musi znajdować się w odosobnionym pliku .cpp oraz muszę mieć decyzje, które klasy mogą rozszerzać podrzędne.

edytowany 1x, ostatnio: Focusx, 2019-08-13 06:33

Pozostało 580 znaków

2019-08-13 17:57
0
nalik napisał(a):

PS. Wygląda to na złe zrozumienie programowania obiektowego i nadużywania dziedziczenia.

Jak ja sobie określam, "pierwsza fala OOP" była zdominowana przez dziedziczenie ) - to ta sama gdzie rzeczownik to obiekt, a czasownik to metoda, myślenie przez interfejs niemal nie istniejące.
Potem (czasy wzorców itd) czasowniki "można było" już odwzorować w klasach, dziedziczenia znacznie mniej itd... ja to sam dla siebie nazywam
"drugą falą"*.

W starych tutorach, książkach, na konserwatywnych uczelniach jeszcze trwa "pierwsza fala"

*) Jak ktoś zna(ł) frameworki graficzne Turbo Vision, OWL, MFC to tam WSZYSTKO dziedziczy z pnia a ilość pięter dochodzi do kilkunastu

Pozostało 580 znaków

2019-08-13 18:24
0

*) Jak ktoś zna(ł) frameworki graficzne Turbo Vision, OWL, MFC to tam WSZYSTKO dziedziczy z pnia a ilość pięter dochodzi do kilkunastu

Chyba w każdym UI toolkicie jest głęboka hierarchia. Przykłady w (chyba) WPF:

  • System.Windows.Controls.Ribbon / RibbonButton: Object -> DispatcherObject -> DependencyObject -> Visual -> UIElement -> FrameworkElement -> Control -> ContentControl -> ButtonBase -> Button -> RibbonButton
  • System.Windows.Controls / DataGrid: Object -> DispatcherObject -> DependencyObject -> Visual -> UIElement -> FrameworkElement -> Control -> ItemsControl -> Selector -> MultiSelector -> DataGrid

Prawdopodobnie takie głębokie hierarchie dziedziczenia w UI toolkitach są inspiracją do powielania ich w modelach biznesowych.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit, 2019-08-13 18:26

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0