Was ist objektorientiere Programmierung?



  • 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.



  • Hi,

    ich versuchs mal nem Vergleich aus dem waren Leben.
    Ne Mutter von vielen kleinen Kindern muß jedes einzeln waschen. Das enstpricht prozeduraler Programmierung.
    Ne Mutter von gößeren Kindern hat ihnen die Fähigkeit sich selbst zu waschen beigebracht und braucht nur noch zu jedem zu sagen "wasch dich"!. Das entspricht objektorientierter Programmierung.
    Im Medizinischen Bereich stellt man dagegen Regeln auf, was als sauber zu gelten hat und das das zu realisieren ist. Das entspricht dann der logischen Programmierung (z.B. in Prolog).

    Gruß Mümmel



  • asc schrieb:

    (Weil für mich auch Datenkapselung zu OO gehört, und die sehe ich in C nicht gegeben)

    wieso soll das nicht gegeben sein?



  • supertux schrieb:

    asc schrieb:

    (Weil für mich auch Datenkapselung zu OO gehört, und die sehe ich in C nicht gegeben)

    wieso soll das nicht gegeben sein?

    asc ist c++ programmierer, ihm fehlen private, public, protected usw.
    🙂



  • Weil für mich auch Datenkapselung zu OO gehört, und die sehe ich in C nicht gegeben

    Kannst du's ohne Widerspruch denken?
    Ist C turing-vollständig?
    Wenn ja auf beides, dann kann man's in C machen.



  • 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.

    Diese Hypothese ist nicht belegbar.
    Wenn ich vorher überleg, dann spielt es ekien ROlle ob ich rein funktional oder objekt orientiert prgrammiere oder wie auch immer



  • bgdnoy schrieb:

    Ist C turing-vollständig?

    hat das was mit datenkapselung tu tun, oder hab' nur ich den witz nicht verstanden?
    🙂



  • dfgdfgd schrieb:

    Wenn ich vorher überleg, dann spielt es ekien ROlle ob ich rein funktional oder objekt orientiert prgrammiere oder wie auch immer

    richtig.

    Allerdings gilt: Bei geschickter Definition der Datenstrukturen/Klassen eines Projektes werden die Algorithmen oft fast wie von selbst ersichtlich.

    Und genau diesen Mechanismus unterstützt die OO Methodik. OOP schont die Programmierer-eigenen Resourcen hinsichtlich Kurzzeitgedächtnis, IQ [und Kaffee 😃 ]


Anmelden zum Antworten