Pattern / Architektur Frage

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ich stimme matiik zu:

    Vererbung ist ein großartiges Werkzeug, um Funktionalität zu implementieren. Sie erspart jede Menge doppelten Code.

    Für die Definition einer API passt das dann häufig auch, aber eben manchmal nicht. Und dann auf Teufel komm heraus totzuabstrahieren, um bloß ein -doSomethingIDoNotKnowButDoItRightNow: zu haben, ist eben einfach sinnentleert. Könnte übrigens auch eine Methode von Graphic-Context, File-Wrapper oder einer Collection sein, so bedeutungsschwanger ist das.

    Die API fürs Drucken hängt nicht davon ab, was ein Drucker ist, sondern davon was Drucken ist. Die API fürs Faxen hängt nicht davon ab, was ein Fax ist, sondern davon, was Faxen ist. Und wie mattik ganz richtig sagt, gibt es damit auch keine Probleme mit einem Faxdruckerscanner. Das ist wesentlich eleganter als bei Pattern, die bei der API stark auf die Vererbung setzen und dann irgendwann Mehrfachvererbung für notwendig erachten. Igitt.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Ja, das sehe ich auch so. Das Ganze hier ist natürlich auch immer ein Gestochere im Nebel, weil der wahre Anwendungsfall vollkommen unklar ist. Daten und eine Druckerklasse, dessen Objekte dann auf einmal ein PDF ausdrucken sollen, ist jedenfalls sehr schwammig. Wenn das Druckerobjekt zur Modellschicht gehört, ist es auch nur ein Hilfsmittel zum Drucken, denn die Arbeit bleibt mal wieder am armen Controller hängen.
    „Meine Komplikation hatte eine Komplikation.“
  • zerm schrieb:

    Eigentlich stinkt das in C++ genauso wie anderswo.

    Nicht ganz: In C++ kann ich meines Wissens zur Laufzeit ein Objekt nicht danach fragen, ob es eine Methode mit einer bestimmten Signatur besitzt. Ich kann es allenfalls nach seiner Klasse fragen oder eben jenen dynamic_cast anwenden. In dynamischen Sprachen wie beispielsweise Objective-C oder Python kann man durch entsprechende Tests optionale Methoden umsetzen. In C++ lässt sich das nicht und in Java nur mit einigem Aufwand umsetzen.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Nicht ganz: In C++ kann ich meines Wissens zur Laufzeit ein Objekt nicht danach fragen, ob es eine Methode mit einer bestimmten Signatur besitzt. Ich kann es allenfalls nach seiner Klasse fragen oder eben jenen dynamic_cast anwenden.

    Ja. Du kannst nicht fragen, sondern nur (dynamic_cast) umwandeln probieren. Macht man trotzdem nicht, bzw. selten (siehe Clang), weil man das kaum braucht und häufig auf schlechtes Design hinweist :)
    C++
  • Bei C++ kommt das wahrscheinlich auch daher, dass der Programmierer wesentlich mehr Entscheidungen bereits zur Übersetzungszeit trifft. Deswegen werden in C++ auch viele Probleme über Templates gelöst.

    Die Existenzabfrage von Methoden ist hingegen in Objective-C ein durchaus übliches Mittel, was auch gerne und viel Verwendung findet (z. B. für die Delegation). Man kann es sicherlich damit auch übertreiben, aber ich finde es zunächst einmal sehr praktisch und in der Regel auch elegant.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Bei C++ kommt das wahrscheinlich auch daher, dass der Programmierer wesentlich mehr Entscheidungen bereits zur Übersetzungszeit trifft. Deswegen werden in C++ auch viele Probleme über Templates gelöst.

    Die Existenzabfrage von Methoden ist hingegen in Objective-C ein durchaus übliches Mittel, was auch gerne und viel Verwendung findet (z. B. für die Delegation). Man kann es sicherlich damit auch übertreiben, aber ich finde es zunächst einmal sehr praktisch und in der Regel auch elegant.

    Genau. Ich hatte nur das Gefühl, Marcos Aussage würde vermitteln, dass man in C++ andauernd dynamic_cast macht - was aber in der Praxis relativ selten ist (wenn man von "ordentlichem" Code spricht..)
    C++