Philosophie von C++: Objekte so lokal wie möglich zu halten und so spät wie möglich zu definieren



  • Ich bin fuer 'Instantiieren' anstatt 'Definieren'.



  • knivil schrieb:

    Ich bin fuer 'Instantiieren' anstatt 'Definieren'.

    Warum?



  • knivil schrieb:

    Ich bin fuer 'Instantiieren' anstatt 'Definieren'.

    Hö, was der Unterschied?



  • Warum? Um besser den Unterschied zu Klassen aufzuzeigen. Der Unterschied liegt in der Interpretation der beiden Woerter, deswegen mag fuer andere keinen Unterschied geben. Ausserdem gaebe es sonst keinen Dreiklang(?). Hoert selbst: Deklarieren, definieren, instanziieren (schade, faengt nicht mit d an).



  • knivil schrieb:

    Warum? Um besser den Unterschied zu Klassen aufzuzeigen.

    Solche Unterschiede will ich gar nicht machen müssen. Mache ich auch nicht. Wenn "fstream f;" einen fstream instaziiert, dann instanziiert "int i;" auch einen int, oder?

    knivil schrieb:

    Ausserdem gaebe es sonst keinen Dreiklang(?). Hoert selbst: Deklarieren, definieren, instanziieren (schade, faengt nicht mit d an).

    Für zwei Dinge finde ich den Zweiklang passender.



  • Wenn int ein Objekt beschreibt (Klasse), dann instanziiert int i ein Objekt. Fuer mich werden Namen Klassen definiert und Objekte instanziiert. Oder anders: Wenn ich ein Fahrrad definiere, so habe ich noch lange keins, womit ich auch fahren kann, sondern nur eine Beschreibung.



  • knivil schrieb:

    Wenn int ein Objekt beschreibt (Klasse), dann instanziiert int i ein Objekt.

    Ex falso quod libet.

    Wolltest Du ein unsichtbares "Nur dann," andeuten? Das wäre dann falsch. Kleiner Deutschkurs: Sorgfältige Autoren reden von Klasseninstanz oder Instanz einer Klasse. Wenn es im Kontext klar ist, kann man auch mal nur Instanz sagen, und Klasseninstanz meinen. Natürlich gibt es auch Instanzen von templates. Und Instanzen von int und von double. Es gibt auch Instanzen von Programmen.

    Sollte es sinnvoll sein, complex<double> in Sachen Lokalität anders zu behandeln als double? Ich habe Angst vor einer Regel, man solle Klasseninstanzen lokal halten und bei int sich nicht darum kümmern.



  • knivil schrieb:

    Ich bin fuer 'Instantiieren' anstatt 'Definieren'.

    Jetzt wird mir auch klar, warum da kein Quote war.
    Du beziehst das nicht auf irgend ein Posting, sondern wolltest nur mal generell was klarstellen. Hast den Thread nicht gelesen. Und deswegen war das auch so schräg.

    Deine Unterscheidung kann sinnvoll sein bei "Objekt definieren", wenn nicht klar ist, daß wir uns in der C++-Gemeinde bewegen, weil die Leute um Shlaer-Mellor gerne mal "Objekt" sagen und nicht wie C++-Leute "Instanz", sondern komischerweise "Klasse" meinen.
    Dann kann man mit "Objekt instanziieren" in der einen Richtung und mit "Klasse definieren" in der anderen Richtung vor eine Verwechslung schützen. Ist aber auch der falsche Weg, warum nicht "Instanz definieren" und "Klasse definieren"? Das Problem war ja die Doppelbedeutung von "Objekt". Soll man doch auch dort zuschlagen und das böse Wort meiden.
    Ach, geht ja nicht mehr. Manche meinen, "Instanz" würde nur "Klasseninstanz" heißen können. Aber die denken dann auch, man könne einen int nicht instanziieren.

    Und das beste ist, hier haben wir das Problem gar nicht, weil Objekt in C++ nicht Klasse meint.



  • Ich finde 'Definieren' auch schlecht. Auch bei Funktionen finde ich 'Deklarieren' und 'Definieren' verwirrend. Warum hat man es nicht 'Deklaration' und 'Implementierung' genannt?



  • Naja, du definierst doch was die Funktion macht, oder?
    So finde ich das schon besser.. 🤡



  • Ich beziehe mich auf den Threadtitel. Dort geht es um Objekte, nicht um Templates. Es geht auch nicht um int oder ander built-in Datentypen, sondern um Dinge in C++, die einen Konstruktor haben. Warum sollte man sonst deren 'Definition' weitestgehend herauszoegern. Dabei gehoert std::complex<double> auch nicht zur Zielgruppe, da dessen Konstruktor fast trivial ist.



  • Hacker schrieb:

    Naja, du definierst doch was die Funktion macht, oder?
    So finde ich das schon besser.. 🤡

    Man könnte sich sehr viel Mühe geben und "definieren" eher umgangssprachlich benutzen: "Ich definiere, daß es diese Funktion gibt, mit Inhalt werde ich sie später füllen". Aber dann kann ich mit der selben sprachlichen Axt schreiben "Ich implementiere, daß es die Funktion gibt, mit Inhalt werde ich sie später füllen".



  • knivil schrieb:

    Ich beziehe mich auf den Threadtitel. Dort geht es um Objekte, nicht um Templates. Es geht auch nicht um int oder ander built-in Datentypen, sondern um Dinge in C++, die einen Konstruktor haben. Warum sollte man sonst deren 'Definition' weitestgehend herauszoegern. Dabei gehoert std::complex<double> auch nicht zur Zielgruppe, da dessen Konstruktor fast trivial ist.

    Dann gibt es Null Grund, "instanziieren" vor "definieren" zu bevorzugen.



  • Soll ich jetzt anfangen mit Wikipedia zu argumentieren? Fuer die Objekterstellung bevorzuge ich 'Instanziierung' gegenueber 'Definition'. 'Definieren' ist fuer mich fehl am Platz.



  • knivil schrieb:

    Soll ich jetzt anfangen mit Wikipedia zu argumentieren? Fuer die Objekterstellung bevorzuge ich 'Instanziierung' gegenueber 'Definition'. 'Definieren' ist fuer mich fehl am Platz.

    Also auch für "int i;" bevorzugst Du "Instanziierung"?

    Dich stört also "Philosophie von C++: Objekte so lokal wie möglich zu halten und so spät wie möglich zu definieren" und Du willst lieber "Philosophie von C++: Objekte so lokal wie möglich zu halten und so spät wie möglich zu instanziieren"?

    Warum? Was soll an "Objekte definieren" anderes sein als an "Objekte instanmziieren"? Dein ungewöhnliches Wort bringt doch nur Unklarheit rein, weil man meinen könnte, Du würdest mit "instanziieren" nur das Definieren von Klasseninstanzen meinen.



  • volkard schrieb:

    Hacker schrieb:

    Naja, du definierst doch was die Funktion macht, oder?
    So finde ich das schon besser.. 🤡

    Man könnte sich sehr viel Mühe geben und "definieren" eher umgangssprachlich benutzen: "Ich definiere, daß es diese Funktion gibt, mit Inhalt werde ich sie später füllen". Aber dann kann ich mit der selben sprachlichen Axt schreiben "Ich implementiere, daß es die Funktion gibt, mit Inhalt werde ich sie später füllen".

    Visual Assist nennt es auch "Create Implementation".
    http://www.wholetomato.com/products/features/createImplementation.asp



  • @volkard: Ja, mein Verstaendnis von Objekt ist wohl ein anderer. Ich habe nochmal nachgeschlagen: Fuer C++ reicht ein zusammenhaengender Speicherbereich aus, um das Objekt zu nennen.



  • Instanziieren ist doch auch doof, egal ob ich jetzt ein 'Objekt' instanziiere oder
    eine Instanz. Ich erstelle immer Exemplare einer Klasse.


Anmelden zum Antworten