Vortrag Objektorientierung: Unterschied zwischen den Versionen
Zeile 108: | Zeile 108: | ||
ev. auch als Beispiel für Kapselung | ev. auch als Beispiel für Kapselung | ||
− | [[Kategorie:Freitagsrunde]] | + | [[Kategorie: Veranstaltungen der Freitagsrunde]] |
Version vom 26. Januar 2005, 02:51 Uhr
Inhaltsverzeichnis
Was ist Objektorientierung - Einführung
Paradigma Objektorientierung
OO ist eine Art Programme zu Designen. Der Kern von OO ist es Daten hinter einer Schnittstelle/Protokoll zu verstecken - sie zu Kapseln.
Das kann man selbstverständlich in jeder Programmiersprache tun, C, Pascal, Perl, Opal, Java.
Beispiel: Siehe Gnome-Projekt
Objektorientierte Sprachen wie Java machen es nur besonders leicht so zu programmieren - daher heissen sie "Objektorientiert".
Um Objektorientierung zu Verstehen, stellt man sie sich am besten so an das man alles als ein Objekt ansieht: Tafel, Stuhl, Punkt, Kreis, Nummer, Mauszeiger, Bildschirm, Pixmap...
Und jedes dieser Objekte weiß wie es bestimmte Aufgaben zu erledigen hat: Die Tafel putzt sich, der Kreis kennt seinen Radius und Mittelpunkt, der Mauszeiger weiß wo er sich auf dem Bildschirm befindet.
Ein Objekt besteht Daten + Operation, bieten Kapselung, wobei Daten durch Methoden gekapselt werden.
Beispiel: Kreis mit Daten in der Mitte, Operationen als Zugang zu Daten
Vor OO: Beispiel:
Class Point { public int x,y; // private int x,y; }
Kapselung bietet: "Schutz nach außen"
Landkarte, jetzt geht jemand her und ändert den Punkt. Plötzlich steht das Haus an einem ganz anderen Punkt und die Karte ist inkonsistent. Schwierig zu findender Fehler.
Kapselung kann verwendet werden, um Verhalten festzulegen/Vertrag festzulegen
Es gibt z.B. nur die Methoden
public int getX() { return x; } public int getY() { return y; }
Plötzlich kann der Punkt nicht mehr nachträglich geändert werden, auch Schutz vor versehentlichen Programmierfehlern
Kapselung bietet: Schutz nach innen
Eines Tages stellt sich heraus das es besser ist Punkte in Polarkoordinaten zu speichern - Intern kann jetzt die Implementierung geändert werden.
Also:
Class Point { private int r, phi; public int getX() { return r * cos (phi); } public int getY() { return r * sin(phi); } }
Effekt auf andere hat sich nicht geändert. Das ist auch der zentrale Punkt für Wiederbenutzbarkeit. Es gibt klare Schnittstellen und solange die sich nicht ändern, können sich die Details dahinter ändern. Intern sollen möglichst viele Klassen unabhängig voneinander sein.
Im Idealfall sind alle Klassen im System völlig unabhängig. Möchte man eine Funktion hinzufügen, gibt es genau eine Stelle die man ändern muss und alles funktioniert perfekt. Das ist der Traum der OO groß gemacht hat.
Leider nur ein Traum...
Zusammenfassung OO-Paradigma:
- Alles ist ein Objekt
- Unterschied zu anderen Paradigmen:
- Funktional: Es gibt keine Seiteneffekte
- Assembler: Alles sind Daten
- Logisch: Alles sind Regeln...
- Unterschied zu anderen Paradigmen:
- Kapselung, Daten durch Operationen versteckt
- Modularisierung, Implementierung ändern
- klare Schnittstellen/Verträge nach außen
- Wiederbenutzbarkeit
Nicht Verwertetes
Platon: Es gibt die Idee an sich, z.B. Pferd mit einigen idealen Eigenschaften, das perfekte Pferd Dann gibt es die realen Pferde, die man z.B. an Hand von Größe, Farbe und Namen unterscheiden kann, nicht perfekt, mit Fehler behaftet. Trotzdem kann man allgemein vom dem Pferd sprechen.
DRY OAOO
Beispiel: Collection-Klassen, LinkedList
Thorstens Ansatz: Punkt, Dreieck, Quadrat, Draw-Methode
Unterschied mutable, non-mutable ev. auch als Beispiel für Kapselung