Meinungen zur Implementierung
-
also mit Sicherheit nicht aus der Java Community, denn die erste öffentliche Java Version kam nach GoF
Der Ursprung ist natuerlich nicht in der Java-Welt zu suchen. Es wird dort haeufig und gern angewandt, gerade auch ohne Not.
ich bevorzuge die einfachen Muster den komplexen
Und hier hast du schon verloren, da du in Mustern denkst bzw. das Problem dort hineinpresst. Den gleichen Fehler haben viele mit Objektorientierung und Vererbung gemacht, aber nicht jedes Problem ist ein Objekt und Vererbung selten eine Loesung.
PS: Ja es ist Religion, ich versuche dich vor der Hoelle zu bewahren. Abschliessend:
The Tao Of Programming: Book 4 - Coding schrieb:
Thus spake the master programmer:
``A well-written program is its own heaven; a poorly-written program is its own hell.''
-
brotbernd schrieb:
Ethon schrieb:
In C++ kann man halt recht oft die ganzen "Javastyle"-Designpattern zum Teufel jagen. Würde da immer etwas darüber nachdenken.
Abstract Factory ist eines der GoF Pattern. Das Buch ist 1994 erschienen und da waren die meisten Muster schon bekannt, es war nur eine Katalogisierung. Diese Muster stammen also mit Sicherheit nicht aus der Java Community, denn die erste öffentliche Java Version kam nach GoF
. Es gibt in Java, C++, C# und anderen Sprachen sicherlich einige Anwendungsfälle für eine GoF Abstract Factory. Ich muss allerdings sagen, dass ich das exakte Muster auch nur ein paar wenige Male angewendet habe. Es scheint vielleicht auf den ersten Blick etwas sehr offentsichtliches, praktisches, häufig anzuwendendes zu sein, wirklich sinnvolle Anwendungen begegnen einem aber in der Tat eher selten.
Egal in welcher Sprache, man sollte zunächst immer möglichst einfache Lösungen anstreben. Gedanken über Flexibilität und Erweiterbarkeit kann man sich machen, wenn man sie benötigt. Nicht wenn man vermutet sie zu benötigen.Ich nenne es "Java-Pattern", weil es in Java schön umzusetzen ist und deswegen auch häufig gemacht wird. In Java ist es halt cool mit new und Polymorphie herumzuscheißen, weil es nicht anders geht und keine Performance kostet.
In C++ geht es mir schon gehörig auf den Senkel, überall alles in unique_ptr s zu stopfen (und andauernd moven zu müssen, wenn der Besitz abgegeben wird), weil einfach kein GC da ist, außerdem kostet die ganze Laufzeit-Dynamik viel, die möglicherweise doch "Compilezeit-Dynamik" ersetzbar wäre.
Gängig in C++ ist es halt, alles was zur Compilezeit entscheidbar ist, per Template dynamisch zu machen.
-
Ja,
"Gängig in C++ ist es halt, alles was zur Compilezeit entscheidbar ist, per Template dynamisch zu machen. "
Das finde ich auch ein sehr guter einwand. Wobei das auf die Implementieruing abziehlt. Ich bin auch an einer Lösung mit statischem Polymorphismus interessiert.
Und um ehrlich zu sein wollte ich heut noch eine Implementierung wagen.
-
Ethon schrieb:
...außerdem kostet die ganze Laufzeit-Dynamik viel, die möglicherweise doch "Compilezeit-Dynamik" ersetzbar wäre.
Das kostet beides was. Die Laufzeit-Dynamik kosten dem Anwender (meistens kaum spürbar) Zeit, "Compilezeit-Dynamik" kostet dem, der die Entwicklung bezahlen muss Geld.
Ethon schrieb:
Gängig in C++ ist es halt, alles was zur Compilezeit entscheidbar ist, per Template dynamisch zu machen.
Das ist mit Sicherheit nur in kleineren Projekten oder Projekten mit speziellen Anforderungen gängig. Oder bei Leuten, die Spaß am Kompilieren haben.
-
Ethon schrieb:
Gängig in C++ ist es halt, alles was zur Compilezeit entscheidbar ist, per Template dynamisch zu machen.
Nein, ist es nicht. Zumindest mache ich das nicht. Das zur Laufzeit aufzulösen ist zwar etwas langsamer, aber selbst bei 100 Funktionsaufrufen ist das ziemlich irrelevant. (Auch bei mehr.) Irgendwann fängt es natürlich an sich bemerkbar zu machen, aber das sind dann meistens eh recht kritische Stellen an denen man optimiert.
Ich würde mir zwar wünschen statische Interfaces zu haben, aber bis man das ordentlich benutzen kann, muss man noch auf Concepts + Module warten. Dann geht's aber richtig los.
