Was ist objektorientiere Programmierung?



  • ... c-plusplus.net ... 🙄



  • _matze schrieb:

    Google, Wikipedia, ... 🙄

    Nun, die Erfahrung hier (im Forum) zeigt, dass die Fragen vom OP nicht einfach mit google und wikipedia beantwortbar sind, da es doch recht unterschiedliche "Definitionen" von OOP gibt, und vielmehr noch "was eine Sprache zur OOP-Sprache macht". Ich erwarte eine mehrseitige Diskussion 😉



  • _matze schrieb:
    Google, Wikipedia, ... 🙄

    Nun, die Erfahrung hier (im Forum) zeigt, dass die Fragen vom OP nicht einfach mit google und wikipedia beantwortbar sind, da es doch recht unterschiedliche "Definitionen" von OOP gibt, und vielmehr noch "was eine Sprache zur OOP-Sprache macht". Ich erwarte eine mehrseitige Diskussion 😉

    👍

    Ich glaube ihr stimmt mir zu, wenn keiner mehr eine Diskussion in diesem Thema zustande bringt, oder? Ich meine, Trolle schrecken hab.



  • Standard Definition:
    Objekt Orientierte Programmierung ist, wenn man sich beim Programmieren and Objekten orientiert.

    Und da man in jeder Sprache OO programmieren kann, ist die Frage was eine OO-Sprache ist. idR ist damit eine Sprache gemeint die OOP speziell unterstuetzt: zB in dem sie Klassen, Prototypen, Messages, etc. anbietet.

    Generell ist OOP aber eine Denkweise und daher prinzipiell mit allen Sprachen realisierbar.



  • Shade Of Mine schrieb:

    Standard Definition:
    Objekt Orientierte Programmierung ist, wenn man sich beim Programmieren and Objekten orientiert.

    Was zum Einrahmen.



  • Verstehe ich es richtig?
    In C würde man sagen:
    Gehe zu der tür
    öffne die tür
    gehe durch die tür
    schieße die tür.

    in C++
    würde man sagen:
    Die tür ist ein Objekt mit der fähigkeit sich zu öffnen und schließen
    Die Person ist ein Objekt mit der fähigkeit sich zu bewegen.

    Ganz im ernst. OOP ist doch quatsch? Bevor ich mir überhaupt wieder wachgerufen habe was ich da tue hab ich mein c prog schon fertig.



  • richtigverstande? schrieb:

    Verstehe ich es richtig?
    In C würde man sagen:
    Gehe zu der tür
    öffne die tür
    gehe durch die tür
    schieße die tür.

    in C++
    würde man sagen:
    Die tür ist ein Objekt mit der fähigkeit sich zu öffnen und schließen
    Die Person ist ein Objekt mit der fähigkeit sich zu bewegen.

    Ganz im ernst. OOP ist doch quatsch? Bevor ich mir überhaupt wieder wachgerufen habe was ich da tue hab ich mein c prog schon fertig.

    Du hast es erfasst. Mehr musst du über oop nicht wissen.

    Im endeffet programmierst du in C auch objektorientiert und das ohne klassen.

    Is doch scheissegal ob du sagst:
    objekt.geh_sterben();

    oder

    geh_sterben(&objekt);

    Wobei beim letzteren das objekt irgend ne datenstruktur wäre.



  • Exakt! Daher habe ich den Sinn hinter der OOP geschichte nicht verstanden!



  • sdfsdfsdf schrieb:

    geh_sterben(&objekt);

    Wobei beim letzteren das objekt irgend ne datenstruktur wäre.

    nicht einmal zwangsläufig eine Datenstruktur. z.b: Dateideskriptoren. Diese sind in der Regel ein int. Und sie sind ebenso Objekte.



  • exakt! schrieb:

    Exakt! Daher habe ich den Sinn hinter der OOP geschichte nicht verstanden!

    Wieso? Nur weil du auch in Sprachen OOP programmieren kannst, die dies nicht durch bestimmte Sprachmittel unterstützen, hast du die OOP nicht verstanden?



  • Gibt doch genug Literatur zum Thema OOP.

    Mein Tipp: Einfach mal eins davon lesen. Und danach vielleicht mal einen Blick in die Sourcen eines wirklich großen Projekts werfen, das objektorientiert programmiert ist.
    Vielleicht ist danach ja der Tellerrand etwas näher gerückt. 🤡



  • Shade Of Mine schrieb:

    Standard Definition:
    Objekt Orientierte Programmierung ist, wenn man sich beim Programmieren and Objekten orientiert.

    Grandios 😃



  • byto schrieb:

    Und danach vielleicht mal einen Blick in die Sourcen eines wirklich großen Projekts werfen, das objektorientiert programmiert ist.

    Kannst du eins empfehlen? Vielleicht was kleines bis mittelgroßes, nicht gleich Eclipse oder sowas.



  • RobinMo schrieb:

    Was macht objektorientiere Programmierung aus

    man nähert sich der Frage am besten, indem man sich fragt, wozu OOP überhaupt gut ist?

    Eine Antwort (unter mehreren möglichen) ist: um den Programmierer vor seiner eigenen Schusseligkeit und Kurzsichtigkeit zu bewahren.

    Ein Softwaredesigner mit IQ 170 könnte wohl nahezu jedes hochkomplexe Programmierproblem auch ohne OOP lösen, und zwar so, daß das Ergebnis dennoch durchschaubar, offen und leicht erweiterbar ist.

    Der Durchschnittsprogrammierer hat - sorry, wenn ich jetzt einigen auf die Füße trete - nicht immer IQ 170 und es fehlt ihm daher oft an planerischem Weitblick und Kurzzeitgedächtnisleistung, um so viele Details gleichzeitig im Kopf parat zu haben, wie nötig sind, um hochkomplexe Programmprobleme ohne die Sicherheit der OOP-Datenkapselung und OOP-Schnittstellendefinitionen zu lösen.

    OOP zwingt den Programmierer früh zu mehr Sorgfalt und mehr Denkarbeit im Voraus (Klassendefinitionen, Schnittstellen usw...) und hindert ihn daran, einige grobe Fehler zu machen (Zugriff auf private members usw.).

    Dies wiederum ermöglicht es, größere Programmsysteme zu überblicken als es ohne OOP möglich wäre, denn die Funktionalität ist in überschaubaren Einheiten (Klassen) eingeteilt und mit klaren Zugriffsregeln versehen - der Programmierer muß dann weniger viele Dinge gleichzeitig im Kurzzeitgedächtnis halten, denn das nach außen hin unwichtige versteckt sich ja in den privates einer Klasse, das spart Kurzzeitgedächtnisleistung und IQ, vermindert Streß und reduziert Fehlerquellen.

    Abgesehen davon ist ein weiterer Kern der OOP die Datenzentriertheit: in der OOP bestimmen die Daten, was mit ihnen gemacht werden darf.



  • supertux schrieb:

    sdfsdfsdf schrieb:

    geh_sterben(&objekt);

    Wobei beim letzteren das objekt irgend ne datenstruktur wäre.

    nicht einmal zwangsläufig eine Datenstruktur. z.b: Dateideskriptoren. Diese sind in der Regel ein int. Und sie sind ebenso Objekte.

    Das nenne ich Kapselung 🤡



  • u_ser-l schrieb:

    Eine Antwort (unter mehreren möglichen) ist: um den Programmierer vor seiner eigenen Schusseligkeit und Kurzsichtigkeit zu bewahren.

    Äh... Nein. Schlechter OO-Code ist keinen deut besser als schlecter XY-Code.

    @sdfsdfsdf:
    wenn ich file.open() sage, ist es für dich OOP und wenn ich fopen(file) sage, nicht. stimmts?



  • Shade Of Mine schrieb:

    Äh... Nein. Schlechter OO-Code ist keinen deut besser als schlecter XY-Code.

    Wer redet hier von schlechtem OO-Code ? OO zwingt den Programmierer, mehr *vorher* nachzudenken, das Ergebnis ist typischerweise besser wartbarer Code als ohne OO.



  • u_ser-l schrieb:

    Wer redet hier von schlechtem OO-Code ? OO zwingt den Programmierer, mehr *vorher* nachzudenken, das Ergebnis ist typischerweise besser wartbarer Code als ohne OO.

    Warum muss ich bei OO mehr vorher nachdenken?



  • u_ser-l schrieb:

    Shade Of Mine schrieb:

    Äh... Nein. Schlechter OO-Code ist keinen deut besser als schlecter XY-Code.

    Wer redet hier von schlechtem OO-Code ? OO zwingt den Programmierer, mehr *vorher* nachzudenken, das Ergebnis ist typischerweise besser wartbarer Code als ohne OO.

    Auch wenn ich dir vom Grundsatz recht gebe, das OO-Code häufig die Wartbarkeit erhöht, heißt dies noch nicht lange das alle OO-Programmierer vorher über das nachdenken, was sie umsetzen (Und damit ist OO-Code eben nicht immer Wartbarer).

    Der "OO"-Code meines ehemaligen Programmierchefs halte ich für einen der am schlechtest wartbaren Dinge. Das hat aber nichts mit OO, sondern mit der Umsetzung zu tun (Und dort liegt immer die größte Fehlerquelle vor dem Rechner).

    Ich bin zwar kein Vertreter von dem in C kann man OO Programmieren (Weil für mich auch Datenkapselung zu OO gehört, und die sehe ich in C nicht gegeben), aber ebenso sehe ich in dem reinen Begriff OO die Lösung aller Probleme. Viele sagen OO nehmen dieses Wort aber eher als Marketingbegriff.

    cu André



  • Bashar schrieb:

    byto schrieb:

    Und danach vielleicht mal einen Blick in die Sourcen eines wirklich großen Projekts werfen, das objektorientiert programmiert ist.

    Kannst du eins empfehlen? Vielleicht was kleines bis mittelgroßes, nicht gleich Eclipse oder sowas.

    Jo, guck Dir z.B. mal das Spring Framework an (gibts für Java, .NET):
    http://www.springsource.org/download

    Ist zwar eine recht große API, aber da es verschiedene Aspekte behandelt, kannst Du Dir gut einen kleinen rauspicken und die Sourcen dazu einsehen. Das Framework ist IMO nicht nur perfekt dokumentiert, sondern ist auch ein Paradebeispiel für OOP.


Anmelden zum Antworten