On Tuesday 08 July 2003 21:13, Friedrich Hagedorn wrote:
Dumme Frage: Worin zeichnet sich denn _echte_ OOP aus? Also was ist richtige OOP und was falsche? Gibt es nicht auch in vielen Programmieraufgaben einen "sanften" Übergang von funktionaler zu OO Programmierung?
Theorie: *Encapsulation ich verpacke Daten (Eigenschaften) und Funktionen (Methoden) in eine Struktur (Objekt), es gibt nur noch Objekte. Die Beschreibung eines Objektes nennt man Klasse (da es nur Objekte gibt sind Klassen folgerichtig auch Objekte und haben selbst eine Klasse(*)).
*Information Hiding Ich brauche nicht zu wissen, wie ein Objekt intern funktioniert, solange ich weiss wie ich es benutze.
*Polymorphism Die Funktion einer Methode passt sich dynamisch den Objekten an mit denen sie aufgerufen wird (jedenfalls solange der Programmierer das vorgesehen hat).
*Inheritance Ich kann eine Klasse erweitern, indem ich davon ableite.
(*) Solange man keinen Java oder Smalltalk Compiler bauen will sollte man vermeiden darüber nachzudenken.
Verstöße von Java: *Encapsulation: Es gibt den Sonderfall "static void main(String[])". Klassen sind Objekte zweiter Klasse, ich kann sie nicht ohne weiteres Ad-Hoc ändern. Es gibt Basistypen, die keine Objekte sind (int, bool).
*Information Hiding: ich kann Daten public machen.
*Polymorphism: Methoden verlangen den Typ der Argumente zur Compilezeit.
*Inheritance: Basistypen - man kann nicht von int ableiten.
Übertrieben: wenn man die Philosophie von OO konsequent weiterführt dürfte es keine "flachen" Strukturen mehr geben. Also müssten Dateien immer als persistente Objekte und Sockets als Remote Calls dargestellt werden. Wenn man sich einige Einschränkungen auferlegt und an einigen Stellen ein Auge zudrückt geht das auch mit Java (serialisation und RMI).
Sehr realistisch ist es aber nicht.
Konrad