Objekt Orientierte Programmierung
(Weiterleitung von OOP)
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Üblicherweise verbindet man ObjektOrientierteProgrammierung mit folgenden Eigenschaften von Programmiersprachen, die, wenn sie diese Eigenschaften direkt unterstützen, objektorientierte Programmiersprachen (OOPL) genannt werden:
Diese Liste ist aber auf keinen Fall eine erschöpfende Auflistung dessen, was von verschiedenen Quellen als Grundvoraussetzung für objektorientierte Programmierung aufgefasst wird. Von Automatischer Speicherverwaltung bis Zustandsänderung per Feature-Aufruf ist die Liste der Bedingungen, die eine richtige OOPL erfüllen muss, beliebig erweiterbar.
Der Begriff "objektorientiert" geht wahrscheinlich auf Alan Kay zurück, zumindest gibt es dazu eine nette Anekdote ( WardsWiki:HeInventedTheTerm).
Quellen
- Object-oriented Software Construction, Bertrand Meyer, 2nd ed., 1997, ISBN 0136291554
- Object-oriented Programming in Common Lisp Sonya E. Keene, 1989, Symbolics Inc., ISBN 0-201-17589-4
- ...
Siehe
Newsgruppen:
Linksamlungen:
Kursunterlagen:
Konferenzen:
Kritik:
- Voll von Strohmann-Argumenten - bei Benutzung von Delegation statt Vererbung muss ich genauso alle Komponenten verstehen. Das Beispiel ist ein Beispiel schlechter Namensgebung, das bei jedem Paradigma zu Problemen führen würde. -- IljaPreuß
- Vererbung bricht aber im Gegensatz zur Delegation die Kapselung auf. Vererbung bringt wenn sie mehrfach auftritt, einige Probleme mit sich (z.B. wenn WiederholteVererbung? auftritt). -- MarkusLude?
- Implementierungs-Vererbung stellt eine stärkere Kopplung dar, als Delegation - das ist richtig. Falsch angewendet führt sie zu Problemen, gezielt angewendet löst sie andere - das ist hier nicht anders als bei anderen Techniken.
- Kopplung ist notwendig in allen Systemen - das Ziel kann es nicht sein, Kopplung vollkommen zu verhindern, sonder nur, diese zu managen. OOP fügt der strukturierten Programmierung einfach ein paar zusätzliche Optionen hinzu, Kopplung zu managen.
- Es ist auch nicht richtig, dass das Erstellen von Vererbungshierarchien das wesentliche Merkmal von OOP ist. Das mag so erscheinen, wenn man sich die bekannten statisch typisierten Sprachen anschaut. Wenn man sich dynamisch typisierte Sprachen anschaut, so ist Polymorphie ein wesentlich wichtigeres Element - und diese prinzipiell orthogonal zu Vererbung.
- Hm? Ganz im Gegenteil! Insbesondere in C++ empfehlen die Gurus keine Vererbungshierarchien, sondern in aller Regel simple Objekte mit nicht-virtuellen Methoden, Komposition und Delegation sowie generische Algorithmen. Virtuelle Methoden braucht man zuweilen, dann empfiehlt sich eine sehr flache Hierarchie, meist nur abstrakte Basisklasse und konkrete Implementierungen davon. GUI-Toolkits scheinen die einzige Ausnahme zu sein. Dagegen wird in Smalltalk, Python, Java (JavaIstDynamischGetypt?) ständig vererbt.
- Obwohl Oleg alles nach Lehrbuch macht (und der Mann weiß was er tut, in mindestens vier Programmiersprachen und drei Paradigmen), ist am Ende Code, der eigentlich noch funktionieren sollte, kaputt. Das Zusammensetzen zweier korrekter OO-Programme führt überraschend zu einem inkorrekten Gesamtprogramm, OOP ist nicht kompositional. Komposition und parametrische Polymorphie scheinen da weniger Probleme aufzuwerfen, was Olegs Artikel am Ende andeutet.
Für mich ist Identität eine zentrale Eigenschaft. Objekte besitzen eine Identität, die sie von anderen Objekten unterscheidbar macht.
Wichtige Begriffe: Polymorphie, Klassen, Objekte, Prototypen, Methoden, Nachrichten, Vererbung, Delegation, Superklasse, Metaklasse, Hierarchie.
Die erste objekt-orientierte Programmiersprache war die SpracheSimula.
Ein einfaches Polymophie-Beispiel (Shape, Rectangle, Circle), in vielen OO und prozeduralen und anderen Programmiersprachen realisiert:
Zur Definition von OO: es gibt keine. (Komischerweise dient der unscharfe Begriff trotzdem als Verkaufsargument...) "So wie Simula" oder "So wie Smalltalk" sind noch am vernünftigsten, aber Java, C++ und CLOS sind soooo weit von den beiden Klassikern entfernt, dass sich niemand auf so eine Definition festlegen würde (besonders niemand mit einer emotionalen Bindung an eine der letzteren Sprachen). Hier ( http://www.paulgraham.com/reesoo.html) gibt's einen Artikel von Jonathan Rees, der die möglichen Definitionen genauer ansieht, freilich ohne sich auf eine festlegen zu können. (Wie denn auch?) Die beste Zusammenfassung ist wohl dieser Absatz:
- Because OO is a moving target, OO zealots will choose some subset of this menu by whim and then use it to try to convince you that you are a loser.
KategorieOop KategorieProgrammierSprachenKonzepte
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 10. September 2005 12:07 (diff))