OOP: soll man jetzt alles in ne Klasse packen oder watt?



  • Zeus schrieb:

    Das ist mal Argumentation der unterste Schublade.

    Niveauanpassung? 🙄



  • Ja genau das erste was ich gerlernt habe ist HTML, das zweite JS....

    Ja scheint so, denn OOP hast du erst oberflächlich verstanden.

    Das ist mal Argumentation der unterste Schublade.

    Ich persönlich finde es unterste Schublade auf den Großteil der Argumente gar nicht erst einzugehen und trotzdem entsprechend rechthaberisch aufzutreten. 🙄



  • Lol erinnerst du dich wie die Diskussion angefangen hat:
    Das ist keine Allgemeingültige Definition von OOP gibst, folglich hat auch jeder recht 😉



  • Zeus schrieb:

    Lol erinnerst du dich wie die Diskussion angefangen hat:
    Das ist keine Allgemeingültige Definition von OOP gibst, folglich hat auch jeder recht 😉

    Das mit der allgemeingültigen Definition mag zwar stimmen, aber OOP ist zumindestens so detailliert definiert, dass man zwischen Information Hiding und Kapselung unterscheiden können sollte. Insofern mag jeder Recht haben, nur du bestimmt nicht.

    Außerdem sind wir ja beim Thema geblieben, denn immerhin wurde gezeigt, dass OOP nicht zwangsweise heißt alles in eine Klasse zu packen.



  • Zeus schrieb:

    Das ist keine Allgemeingültige Definition von OOP gibst, folglich hat auch jeder recht 😉

    Was ist keine Allgemeingültige Definition von OOP?

    Hier hast du eine Allgemeingültige Definition:

    Das Grundprinzip der Objektorientierten Programmierung ist es Daten in Objekte zusammenzufassen, die untereinander Nachrichten austauschen.



  • rüdiger schrieb:

    Hier hast du eine Allgemeingültige Definition:

    Das Grundprinzip der Objektorientierten Programmierung ist es Daten in Objekte zusammenzufassen, die untereinander Nachrichten austauschen.

    Daten und Funktionen. Sicherlich kann man mit C oder auch Pascal oder so objektorientiert programmieren. Aber diese Sprachen unterstützen die Objektorientierung noch lange nicht, auch wenn man in Pascal ein record oder sowas hat, in dem man Daten zusammenfassen kann.



  • Gregor schrieb:

    Daten und Funktionen. Sicherlich kann man mit C oder auch Pascal oder so objektorientiert programmieren. Aber diese Sprachen unterstützen die Objektorientierung noch lange nicht, auch wenn man in Pascal ein record oder sowas hat, in dem man Daten zusammenfassen kann.

    kommt darauf was du meinst...
    meinst du mit "unterstuetzen" das anbieten von konzepten zur einfacheren erstellen von OO code?

    wenn ja, dann stimmen wir hier ueberein. OO in C ist umstaendlich. Mehr unterstuetzung waere sehr wuenschenswert.

    Wenn du aber meinst dass man deswegen nicht richtig OO programmieren kann, dann frage ich dich warum. welches konzept das essentiell fuer OOP dass ich in C nicht habe.



  • Shade Of Mine schrieb:

    Gregor schrieb:

    Daten und Funktionen. Sicherlich kann man mit C oder auch Pascal oder so objektorientiert programmieren. Aber diese Sprachen unterstützen die Objektorientierung noch lange nicht, auch wenn man in Pascal ein record oder sowas hat, in dem man Daten zusammenfassen kann.

    kommt darauf was du meinst...
    meinst du mit "unterstuetzen" das anbieten von konzepten zur einfacheren erstellen von OO code?

    wenn ja, dann stimmen wir hier ueberein. OO in C ist umstaendlich. Mehr unterstuetzung waere sehr wuenschenswert.

    Genau das meine ich. Wenn es nur auf das Zusammenfassen von Daten ankommen würde, hätten die genannten Sprachen adäquate Sprachmittel, um OOP von Haus aus zu unterstützen. Ich habe nicht gesagt, dass es nicht geht.



  • Shade Of Mine schrieb:

    OO in C ist umstaendlich. Mehr unterstuetzung waere sehr wuenschenswert.

    Nö, warum? Dafür hast Du doch C++. Man muss doch nicht unbedingt in allen Sprachen objektorientiert programmieren. Unterschiedliche Sprachen -> unterschiedliche Anwendungsgebiete. Wenn man ein Anwendungsgebiet hat, in dem sich OOP anbietet, wird man auch eine Sprache wählen, die OOP unterstützt. Wenn man krampfhaft mit einer Sprache objektorientiert programmieren will, die das nicht adäquat unterstützt, dann scheint man im 1. Semester im Studium nicht richtig aufgepasst zu haben. Prolog eignet sich zum Beispiel wunderbar für deklarative Programmierung, ist aber für die OOP denkbar ungeeignet. 😉



  • Shade Of Mine schrieb:

    OO in C ist umstaendlich. Mehr unterstuetzung waere sehr wuenschenswert.

    eher nicht. dafür gibt's ja c++ ...



  • Weil man normalerweise in C auch objektorientiert programmiert...





  • Die Tabelle ist hinsichtlich Java nicht mehr aktuell (siehe Generische Prog. und Metaklassen).



  • byto schrieb:

    Die Tabelle ist hinsichtlich Java nicht mehr aktuell (siehe Generische Prog. und Metaklassen).

    1. Java ist momentan kein bischen generischer als es auch schon vor Java 5 war. Die momentane Generizität basiert darauf, dass alle Objekte von Object abgeleitet sind. Die Generics bringen diesbezüglich nur statische Typsicherheit ins Spiel, aber kein Gewinn an Generizität. Insofern ist der Name dieses Sprachmittels irgendwie irreführend.

    2. Was sollen Metaklassen sein? Bei Java 5 gibt es jetzt Metadaten in Form von Annotations. Aber ist das damit gemeint?



  • In der Programmiersprache Java gibt es eine Klasse Class, die zwar wichtige Eigenschaften einer Metaklasse hat, sie kann beispielsweise Objekte anderer Klassen erzeugen, jedoch können hiervon keine spezielleren Metaklassen abgeleitet werden.

    Hört sich wie Reflexion an.



  • Gregor schrieb:

    1. Java ist momentan kein bischen generischer als es auch schon vor Java 5 war. Die momentane Generizität basiert darauf, dass alle Objekte von Object abgeleitet sind. Die Generics bringen diesbezüglich nur statische Typsicherheit ins Spiel, aber kein Gewinn an Generizität. Insofern ist der Name dieses Sprachmittels irgendwie irreführend.

    Was genau ist Dein Kritikpunkt an den Java Generics? Ich verstehe nicht so genau, worauf Du hinaus willst. Spielst Du darauf an, dass die Information über die Generizität zur Laufzeit nicht mehr vorhanden ist und daher keine echte Typsicherheit gewährleistet?

    2. Was sollen Metaklassen sein? Bei Java 5 gibt es jetzt Metadaten in Form von Annotations. Aber ist das damit gemeint?

    Ich habe dabei tatsächlich an Metadaten gedacht, also Annotations in Java 5. Aber dank Wiki weiss ich nun, was mit Metaklassen gemeint ist, sehe nur nicht so wirklich, warum dass ein Kriterium für tolle Objektorientiertheit sein soll. Was habe ich davon, wenn ich eigene Metaklassen ableiten kann? Der Code wird (für Außenstehende) unverständlich und schwer zu warten. Naja, vielleicht bin ich da einfach subjektiv voreingenommen. 😉



  • byto schrieb:

    Gregor schrieb:

    1. Java ist momentan kein bischen generischer als es auch schon vor Java 5 war. Die momentane Generizität basiert darauf, dass alle Objekte von Object abgeleitet sind. Die Generics bringen diesbezüglich nur statische Typsicherheit ins Spiel, aber kein Gewinn an Generizität. Insofern ist der Name dieses Sprachmittels irgendwie irreführend.

    Was genau ist Dein Kritikpunkt an den Java Generics? Ich verstehe nicht so genau, worauf Du hinaus willst. Spielst Du darauf an, dass die Information über die Generizität zur Laufzeit nicht mehr vorhanden ist und daher keine echte Typsicherheit gewährleistet?

    Das es nichts mit den Templates von C++, also generischer programmierung, zu tun hat?



  • asdfghjklm schrieb:

    byto schrieb:

    Gregor schrieb:

    1. Java ist momentan kein bischen generischer als es auch schon vor Java 5 war. Die momentane Generizität basiert darauf, dass alle Objekte von Object abgeleitet sind. Die Generics bringen diesbezüglich nur statische Typsicherheit ins Spiel, aber kein Gewinn an Generizität. Insofern ist der Name dieses Sprachmittels irgendwie irreführend.

    Was genau ist Dein Kritikpunkt an den Java Generics? Ich verstehe nicht so genau, worauf Du hinaus willst. Spielst Du darauf an, dass die Information über die Generizität zur Laufzeit nicht mehr vorhanden ist und daher keine echte Typsicherheit gewährleistet?

    Das es nichts mit den Templates von C++, also generischer programmierung, zu tun hat?

    Und wo steht geschrieben, dass Generics == (C++) Templates? Wiki sagt über Generics folgendes:

    Bei Programmiersprachen gibt es prinzipiell zwei Ansätze, generische Typen zu unterstützen. Der eine ist es, dass GenerischerTyp<T> für alle Ts den selben Code verwendet und über dynamische Bindung von Methoden spezifische Eigenschaften von T nutzt. Ein anderer Weg, den u.a. C++ geht, ist die Anwendung von Templates. Dabei wird der Typparameter zur Compilierzeit direkt mit dem konkreten Typ ersetzt.

    Bei .Net geht Microsoft einen Mittelweg, um die Vorteile beider Methoden zu kombinieren: Für alle Referenztypen als Typparameter benutzt die generische Klasse den gleichen Native Code, da die interne Repräsentation (eine simple Referenz) von allen Referenztypen gleich ist. Bei der Benutzung von Werttypen als Typparameter wird für jeden Werttyp zur Laufzeit bei der erstmaligen Benutzung ein eigener Native Code Pfad erstellt.

    http://de.wikipedia.org/wiki/Generics



  • byto schrieb:

    asdfghjklm schrieb:

    byto schrieb:

    Gregor schrieb:

    1. Java ist momentan kein bischen generischer als es auch schon vor Java 5 war. Die momentane Generizität basiert darauf, dass alle Objekte von Object abgeleitet sind. Die Generics bringen diesbezüglich nur statische Typsicherheit ins Spiel, aber kein Gewinn an Generizität. Insofern ist der Name dieses Sprachmittels irgendwie irreführend.

    Was genau ist Dein Kritikpunkt an den Java Generics? Ich verstehe nicht so genau, worauf Du hinaus willst. Spielst Du darauf an, dass die Information über die Generizität zur Laufzeit nicht mehr vorhanden ist und daher keine echte Typsicherheit gewährleistet?

    Das es nichts mit den Templates von C++, also generischer programmierung, zu tun hat?

    Und wo steht geschrieben, dass Generics == (C++) Templates? Wiki sagt über Generics folgendes:

    Bei Programmiersprachen gibt es prinzipiell zwei Ansätze, generische Typen zu unterstützen. Der eine ist es, dass GenerischerTyp<T> für alle Ts den selben Code verwendet und über dynamische Bindung von Methoden spezifische Eigenschaften von T nutzt. Ein anderer Weg, den u.a. C++ geht, ist die Anwendung von Templates. Dabei wird der Typparameter zur Compilierzeit direkt mit dem konkreten Typ ersetzt.

    Bei .Net geht Microsoft einen Mittelweg, um die Vorteile beider Methoden zu kombinieren: Für alle Referenztypen als Typparameter benutzt die generische Klasse den gleichen Native Code, da die interne Repräsentation (eine simple Referenz) von allen Referenztypen gleich ist. Bei der Benutzung von Werttypen als Typparameter wird für jeden Werttyp zur Laufzeit bei der erstmaligen Benutzung ein eigener Native Code Pfad erstellt.

    http://de.wikipedia.org/wiki/Generics

    Hi.

    Was da in der Wikipedia steht, ist einfach falsch. Generics bringen einem in Java keine Generizität. Was jetzt mit den Generics an Generizität möglich ist, war auch vorher schon möglich. Oder erklär mir mal, wie Du jetzt mit den Generics, im Vergleich zur Pre-Generics-Zeit, einen generischeren Algorithmus (oder eine generischere Datenstruktur) schreiben willst.



  • Statische Typsicherheit durch Generics bietet dir aber auch den Vorteil, dass du wesentlich mehr Code wiederverwenden kannst. Wenn man ansonsten eine statisch typsichere Collection wollte, musste man sich die von Grund auf selbst schreiben, bzw. durfte bestehende Collections höchstens adaptieren. Mittlerweile kann man sich die Basisklasse durch den richtigen Typparemeter noch ein wenig "zurechtbiegen" und auf Vererbung zurückgreifen.


Anmelden zum Antworten