Alles in Klassen stecken?



  • Hi,

    ich stelle mir grad die Frage, ob es sinnvoll ist in einer Objektorientierten Programmiersprache alle Funktionen in Klassen zu stecken.
    Sollte eine Klasse nicht eigentlich nur sinnvoll sein, wenn ich mehrere Instanzen davon erstellen will?

    Gruß



  • guckst Du: OOAD

    cheers, Swordfish



  • Eine Funktion wird nicht dadurch Objektorientiert wenn man sie in eine Klasse steckt.

    Beispielsweise:
    in Java hat man Math.sqrt() in C++ std::sqrt()
    Beides ist identisch und Math bzw. std sind lediglich Namensraeume in denen die Funktion liegt.



  • in einer objektorientierten Sprache wird dir nichts anderse übrig bleiben, als alles in Klassen zu tun.
    Man kann dann statics nutzen, oder- was ich persönlich viel lusteriger finde, in singletons packen.

    bevor man erste Aussage zewrreißen will. C++ ist keine objektorientierte Sprache, sondern eher ein hybride..



  • Ich halte es für einen weit verbreiteten Irrtum, daß "alles in Klassen stecken" gleichbedeutend sei mit objektorientiertem Programmieren. Zum einen kann man auch ohne Klassen objectorientiert Programmieren, zum anderen kann man auch mit Klassen rein procedural Programmieren.

    KLassen sind nur ein Werkzeug das OOP vereinfacht, mehr nicht.



  • Ist es denn bei C++ "schöner" alles in Klassen zu stecken? Sollte ich mir das gleich angewöhnen?
    Aktuell habe ich grad ein C++ Projekt, in dem ich vier Programmteile einfach in je einer .cpp Datei habe. Ich könnte daraus jetzt ohne große Probleme Klassen machen, aber sollte ich das?

    Gruß 😉



  • DocJunioR schrieb:

    bevor man erste Aussage zewrreißen will. C++ ist keine objektorientierte Sprache, sondern eher ein hybride..

    objektorientierung ist eine denkweise, keine sprache ist objekt orientiert.

    sprachen bieten features an um die eine oder andere denkweise zu unterstuetzen. wenn wir uns zB java und javascript ansehen - beide Sprachen unterstuetzen mich bei objektorientierten denken, aber der Code der raus kommt ist komplett unterschiedlich.

    aus OO sicht, macht es nicht mehr Sinn eine freie funktion als static in eine Klasse zu packen als sie in einen namespace zu packen oder frei stehen zu lassen. aus oo sicht ist das alles gleichwertig.



  • ja.. aber in java beispielsweise ist es dir nicht wirklich möglich, programmcode außerhalb einer klasse zu halten..
    c widerum enthält auch stilmittel zur strukturierten programmierung..

    muss denn heute jeder meine verbalen unschärfen zerreissen?...



  • Scav schrieb:

    Ist es denn bei C++ "schöner" alles in Klassen zu stecken? Sollte ich mir das gleich angewöhnen?
    Aktuell habe ich grad ein C++ Projekt, in dem ich vier Programmteile einfach in je einer .cpp Datei habe. Ich könnte daraus jetzt ohne große Probleme Klassen machen, aber sollte ich das?

    Gruß 😉

    C++ ist eine tolle Sprache, weil es für viele Sachen Sprachmittel zur Verfügung stellt. Wenn eine Funktion eine Funktion ist, dann ist es in C++ eine Funktion. Ist es ein Objekt, mache ich in C++ eine Instanz einer Klasse draus. Eine Funktion in eine Klasse zu packen, nur weil es geht, macht das Programm nicht besser.



  • Shade of Mine schrieb:

    objektorientierung ist eine denkweise, keine sprache ist objekt orientiert.

    Schön gesagt 😉 Irgendwie hab' ich diese Art von "Diskussion" schon beim Posten meines ersten Beitrags in diesem Thread kommen sehen 😃

    cheers, Swordfish



  • Naja, diese Diskussion hatten wir auch schon länger nicht mehr 😉



  • Ich höre Xin schon schreien 😃



  • tntnet schrieb:

    Eine Funktion in eine Klasse zu packen, nur weil es geht, macht das Programm nicht besser.

    ´

    und schneller auch nicht ^^
    aber es ist einfacher, wenn man es nur mit oop oder nur mit strukturierter programmierung (hat das ne abk.?) zu tun hat..

    Ich muss regelmäßig den Salat anderer Leute aufräumen.. da freut man sich darüber, wenn mal einer nen bisken konsequent ist.



  • http://www.ddj.com/cpp/184401197

    Scott Meyers schrieb:

    I'll start with the punchline: If you're writing a function that can be implemented as either a member or as a non-friend non-member, you should prefer to implement it as a non-member function. That decision increases class encapsulation. When you think encapsulation, you should think non-member functions.

    Surprised? Read on.



  • Jo, da hat er recht. Weniger Funktionen die an die Daten kommen == bessere Kapselung.



  • Wie es schon angesprochen wurde, kann man sich auch in C objektorientierten Code schreiben, weswegen Klassen in C++ in erster Linie nicht erforderlich sind, um objektorientiert programmieren zu können.

    Wie es rüdiger bereits richtig zitiert hat, muss man manchmal sogar Funktionen aus Klassen auslagern, und diese global, besser in einem Namespace definieren, um bestimmten Konflikten aus dem Weg zu gehen. Und das bedeutet dann bei richtiger Modellierung keinesfall nicht-objektorientierten Code, nur weil sich ein paar Funktionen ausserhalb von Klassen befinden.

    Objektorientierung kann man auf verschiedensten Weisen abbilden, völlig unabhängig von Klassen. Diese vereinfachen das ganze nur, und stellen ein paar andere Dinge wie Vererbung etc. bereit.



  • http://www.ddj.com/cpp/184401197 schrieb:

    else if (f needs type conversions
    on its left-most argument)
    {

    Was soll das sein?
    Kann mal einen Beispielcode für f needs type conversions on its left-most argument schreiben?



  • Also als inzwischen auch Java-Programmierer bin ich da eben ein wenig komisch.
    Wenn ich eine Methode habe, bei der es egal ist, ob sie in eine bestimmte Klasse kommt oder nicht, werde ich sie auch nicht unbedingt in diese schreiben. Das heißt aber nicht, dass sie nicht anderswo sinnvoll in einer anderen Klasse aufgehoben sein kann.

    Klassen beschreiben Objekte und sämtliche Methoden, die mit diesen Objekten direkt zu tun haben, also Inhalte auslesen/setzen und streckenweise auswerten gehören dann dazu.

    Ist so ungefähr wie das Problem mit den Löwen.. Die sollten imo zwar keine Methode mitbringen, sich fangen zu lassen, aber brüllen sollten sie schon selber. Das Einfangen wäre bei mir dann eher eine Frage des Käfigs..



  • DocJunioR schrieb:

    tntnet schrieb:

    Eine Funktion in eine Klasse zu packen, nur weil es geht, macht das Programm nicht besser.

    ´

    und schneller auch nicht ^^
    aber es ist einfacher, wenn man es nur mit oop oder nur mit strukturierter programmierung (hat das ne abk.?) zu tun hat..

    Ich muss regelmäßig den Salat anderer Leute aufräumen.. da freut man sich darüber, wenn mal einer nen bisken konsequent ist.

    Mit Schelligkeit hat das gar nichts zu tun. Binär ist das kein Unterschied, ob eine Funktion frei steht oder als statische Member definiert ist.

    Konsequent heißt für mich nicht zwangsweise alles objektorientiert. Auch wenn es wiedersprüchlich klingen mag, kann konsequent durchaus bedeuten, daß ich sowohl Objekte als auch frei stehende Funktionen habe. Die STL hat (mehr oder weniger) konsequent Container als Klassen und die algorithmen als frei stehende Funktionen. Ob das nun Oop ist oder nicht, ist mir so ziemlich egal. Hauptsache es ist gut strukturiert, verständlich und performant.

    Übrigens: zählst Du Oop nicht zur strukturierten Programmierung 😕 ? Dann wäre Oop ja unstrukturiert 😃 .



  • kann man sich auch in C objektorientierten Code schreiben

    Das ist einfach eine Behauptung, die falsch ist.
    Das Gefrickel mit structs ist eine Möglichkeit Klassen nachzumodelieren.
    Objektorientierung umfasst aber eine Menge mehr.


Anmelden zum Antworten