klassenlose Methoden vs. Membermethoden



  • DStefan schrieb:

    Falls eine Funktion intuitiv zur Schnittstelle der Klasse gehört und falls nicht, wie beispielsweise bei manchen Operatoren, andere Gründe dagegen sprechen, würde ich sich auch im public Interface der Klasse deklarieren. Die Vorgehensweise, das Interface sehr klein zu halten und Funktionalität der Klasse in Form globaler Funktionen zu implementieren, wie es die Evangelisten fordern, ist mE Unsinn und erschwert nur das Verständnis der Klasse.

    DStefan schrieb:

    Für eine friend-Funktion (oder -Klasse) sind alle Instanzvariablen und alle Methoden quasi public. Das führt die Idee der Kapselung ad absurdum, und Kapselung ist in meinen Augen ein sehr hohes Gut.

    Soso. Kapselung ist dir also sehr wichtig, aber viele Funktionen, die direkt in der Klasse Zugriff haben, sind ja wahnsinnig viel besser als der böse friend -Hack.

    DStefan schrieb:

    Ich weiß, die Evangelisten sehen das (teilweise?) anders. Bloß überzeugen mich halt deren Argumente nicht.

    Bevor du andere als Evangelisten bezeichnest, solltest du dir vielleicht selbst eine etwas solidere Argumentation zulegen.



  • Nexus schrieb:

    DStefan schrieb:

    Falls eine Funktion intuitiv zur Schnittstelle der Klasse gehört und falls nicht, wie beispielsweise bei manchen Operatoren, andere Gründe dagegen sprechen, würde ich sich auch im public Interface der Klasse deklarieren. Die Vorgehensweise, das Interface sehr klein zu halten und Funktionalität der Klasse in Form globaler Funktionen zu implementieren, wie es die Evangelisten fordern, ist mE Unsinn und erschwert nur das Verständnis der Klasse.

    DStefan schrieb:

    Das führt die Idee der Kapselung ad absurdum, und Kapselung ist in meinen Augen ein sehr hohes Gut.

    Soso. Kapselung ist dir also sehr wichtig, aber viele Funktionen, die direkt in der Klasse Zugriff haben, sind ja wahnsinnig viel besser als der böse friend -Hack.

    Bevor du andere als Evangelisten bezeichnest, solltest du vielleicht eine etwas solidere Argumentation vertreten.

    Die Beiträge der meisten Evangelisten stehen in meinem Regal oder liegen auf meiner Platte. Daran magst du ersehen, dass diese Bezeichnung nicht abwertend gemeint ist. Ich beschäftige mich damit, ich denke darüber nach, ich betrachte die Auswirkungen und ich komme zu einem Ergebnis - vielleicht auch nur zu einem vorläufigen. Dieses Ergebnis schreibe ich hier nieder und kennzeichne es deutlich als meine Meinung.

    Was stört dich also? Dass ich Meinungen von Leuten hinterfrage, die allgemein (auch von mir!) für C++-Koryphäen gehalten werden? Dass ich zu einer anderen Meinung komme? Oder dass ich diese Meinung hier vertrete?

    Im Übrigen argumentierst du gar nicht, sondern polemisierst nur. Das bringt doch niemanden weiter.....

    Stefan.



  • DStefan schrieb:

    Was stört dich also? Dass ich Meinungen von Leuten hinterfrage, die allgemein (auch von mir!) für C++-Koryphäen gehalten werden? Dass ich zu einer anderen Meinung komme? Oder dass ich diese Meinung hier vertrete?

    Nein, mich stört nur, dass du andere Leute aus Gründen als Evangelisten bezeichnest (du kannst sicher nachvollziehen, dass das abwertend rüberkommt), während du jene Gründe an anderen Orten selbst missachtest.

    DStefan schrieb:

    Im Übrigen argumentierst du gar nicht, sondern polemisierst nur. Das bringt doch niemanden weiter.....

    Das stimmt nicht. Aus meinem ersten Satz ist herauszulesen, was ich deiner Argumentation entgegenzusetzen habe: Dass sie widersprüchlich ist.

    Aber um es ausdrücklich zu sagen: So sehr dir die Kapselung am Herzen liegt, solltest du bedenken, dass sie sehr wohl auch darunter leidet, wenn zu viele public -Funktionen in der Klasse vorkommen. Bezüglich Kapselung sind öffentliche Memberfunktionen nämlich nicht besser als friend -Funktionen, weil sie die gleichen Zugriffsrechte - möglicherweise ungerechtfertigt - besitzen. Deshalb ist dein einziges Argument gegen friend bisher, dass es unnötig ist; für Memberfunktionen im Gegensatz zu freien Nicht- friend -Funktionen hast du gar keine Begründung geliefert, sondern nur behauptet, dass sie weder für Anwender noch Implementierer Gewinn bringen und das Interface schwerer verständlich machen. Dabei sollte gerade die dir so wichtige Kapselung das Gegenteil aufzeigen.



  • @Nexus: Danke, dass du so antwortest. Wusste ich doch, dass man mit dir ernsthaft diskutieren kann 😉

    Auf das eigentliche Thema kann ich dir aus Zeitgründen jetzt nicht antworten. Ich hole das heute Nacht oder spätestens morgen nach.

    Zu den Evangelisten: Vielleicht habe ich hier allzu sehr den angelsächsischen Sprachgebrauch (oder Sprachgefühl?) übernommen. Mir scheint, dass dort, wenn man im technischen Zusammenhang von "evangelist" spricht keineswegs Herabsetzung sondern eher Hochachtung mitschwingt. So habe ich das Wort verstanden. Vielleicht mit einer kleinen Prise Allwissenheit im Nachgeschmack 😉

    Zu friends, wie gesagt, später.....

    Stefan.



  • Weil friends alles mit einer Klasse dürfen. Für eine friend-Funktion (oder -Klasse) sind alle Instanzvariablen und alle Methoden quasi public. Das führt die Idee der Kapselung ad absurdum, und Kapselung ist in meinen Augen ein sehr hohes Gut.

    No! If they're used properly, they enhance encapsulation.

    http://www.parashift.com/c++-faq-lite/friends.html

    Kapselung

    http://www.parashift.com/c++-faq-lite/classes-and-objects.html#faq-7.6 und 7.7



  • Evangelisten sind Boten, Verkünder und dergleichen. Da ist doch nix negatives dran.



  • Tyrdal schrieb:

    Evangelisten sind Boten, Verkünder und dergleichen. Da ist doch nix negatives dran.

    Doch, klar. Evangelisten sind gewöhnlich religiös und damit intolerant, antiwissenschaftlich, dogmatisch und menschenverachtend. Als Technology Evangelist sind sie Marketingfuzzies, die Mist als neue Technologie verkaufen wollen, auch das ist als Beleidigung gut geeignet. Damit wirft man jemandem vor, daß er von der Technik keine Ahnung hat, und nur heftig dran glaubt und verkaufen will. Evangelisten sind aktive Marktschreier, wobei das Schreien der notwendige Bestandteil ist und die Sachkenntnis nicht so notwendig und oft sogar hinderlich. Die Leute, die Ahnung haben, sind die Gurus, oder?



  • Es war so klar, dass Volkard so was schreibt 😃



  • DStefan schrieb:

    @Nexus: Danke, dass du so antwortest. Wusste ich doch, dass man mit dir ernsthaft diskutieren kann 😉

    Danke. Tut mir leid, wenn der erste Post etwas unsachlich rüberkam, ich wollte dich eigentlich zum Nachdenken anregen.

    Was die Evangelisten betrifft, habe ich an etwas Ähnliches wie volkard gedacht, wenn auch nicht so extrem. Ich kann mich auch nicht an Kontexte erinnern, in denen das Wort positiv verwendet wurde... Zusammen mit deiner Beschreibung habe ich das wohl falsch aufgefasst.



  • volkard schrieb:

    Tyrdal schrieb:

    Evangelisten sind Boten, Verkünder und dergleichen. Da ist doch nix negatives dran.

    Doch, klar. Evangelisten sind gewöhnlich religiös und damit intolerant, antiwissenschaftlich, dogmatisch und menschenverachtend. Als Technology Evangelist sind sie Marketingfuzzies, die Mist als neue Technologie verkaufen wollen, auch das ist als Beleidigung gut geeignet. Damit wirft man jemandem vor, daß er von der Technik keine Ahnung hat, und nur heftig dran glaubt und verkaufen will. Evangelisten sind aktive Marktschreier, wobei das Schreien der notwendige Bestandteil ist und die Sachkenntnis nicht so notwendig und oft sogar hinderlich. Die Leute, die Ahnung haben, sind die Gurus, oder?

    Einfach Top! 👍


Anmelden zum Antworten