Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Vortrag Objektorientierung

Version vom 2. Oktober 2004, 18:17 Uhr von Martin Häcker (Diskussion) (notitzen eingefügt)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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:

0. Alles ist ein Objekt - Unterschied zu anderen Paradigmen: Funktional: Es gibt keine Seiteneffekte Assembler: Alles sind Daten Logisch: Alles sind Regeln... 1. Kapselung, Daten durch Operationen versteckt 1.1 Modularisierung, Implementierung ändern 1.2 klare Schnittstellen/Verträge nach außen 2. 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