Kapitel 1 Grundlagen der Objektorientierung Seite 1/8 1 Grundlagen der Objektorientierung Dieses Kapitel stellt eine solide, pragmatische Einführung in die fundamentalen Konzepte der Objektorientierung dar. Es werden die Begriffe Klasse, Objekt und Methode wiederholt. Obwohl ein erster Blick auf den Quelltext geworfen wird, wird an dieser Stelle noch dieses Kapitel nicht auf Details der Java- Programmierung eingegangen. Da dieses Kapitel auch eine Einführung in die Entwicklungsumgebung BlueJ darstellt, ist der Text mit vielen Bildern begleiten. Dies ermöglicht eine schnelle Orientierung. 1.1 Objekt, Klasse Wenn wir ein Programm entwickeln, dann erstellen wir immer ein Modell eines Ausschnitts der realen Welt. Dieser Ausschnitt setzt sich aus Objekten zusammen, die im Anwendungsbereich vorkommen. Diese Objekte müssen im zu erstellenden Computermodell geeignet repräsentiert werden. Diskussion: Unser Gymnasium Programm zur Stundenplanerstellung Programm zur Verwaltung der Schülerdaten Programm zur Verwaltung der Lernmittelfreien Bücherei Objekte können klassifiziert bzw. kategorisiert werden. Eine Klasse beschreibt also alle Objekte einer Kategorie. Diskussion: Klasse und Objekt Welche Objekte gibt es an unserer Schule? Welche Klassen? Ist der Begriff Auto eine Klasse oder ein Objekt? 1.2 Objekte erzeugen Öffne nach dem Starten der Entwicklungsumgebung BlueJ das Projekt Figuren.
Kapitel 1 Grundlagen der Objektorientierung Seite 2/8 Abbildung 1.1: Projekt Figuren in BlueJ Die Klassen dieses Projekts heißen Kreis, Quadrat, Dreieck und Leinwand. Erzeuge ein Objekt mit dem Namen kreis1, indem du mit der rechten Maustaste auf die Klasse Kreis klickst und im Kontextmenü new Kreis() wählst. Das Objekt kreis1 erscheint als rotes Symbol in der Objektleiste. Hinweis: Sollte die Symbole der Klassen gestreift sein, musst du zuerst den Button Compile drücken. Abbildung 1.2: Objekt kreis1 Übung 1.1 Erzeuge zwei weitere Kreisobjekte. Erzeuge dann ein Quadratobjekt. Beachte: Von einer Klasse können beliebig viele Objekte erzeugt werden. Anschaulich kannst du dir eine Klasse als Bauanleitung denken. Die Objekte werden beim Erzeugen nach dieser Anleitung gebaut.
Kapitel 1 Grundlagen der Objektorientierung Seite 3/8 1.3 Attribute und Attributwerte Alle Objekte einer Klasse haben die gleichen Attribute, jedoch nicht zwingend die gleichen Attributwerte. In BlueJ lassen sich Attribute und Attributwerte mit Hilfe des Objektinspektors anzeigen. Du kannst ihn durch einen Mausklick mit der rechten Taste und dem Kontextmenüpunkt inspect öffnen. Abbildung 1.3: Objektinspektor zeigt den Zustand des Objekts kreis1 Übung 1.2 Untersuche die Attributwerte der beiden Kreise und des Quadrats, die du erzeugt hast. Warum sind die Attributwerte der beiden Kreise gleich? Worin unterschieden sich die beiden Kreise dennoch? Hinweis: Alle momentanen Attributwerte eines Objekts nennt man auch Zustand eines Objekts. 1.4 Methoden aufrufen Ein Rechts-Klick auf ein Kreis-Objekt erzeugt wiederum ein Kontextmenü mit mehreren Einträgen. Wähle den Eintrag void sichtbarmachen(). Nun erscheint das Objekt kreis1 in einem separaten Fenster. Probiere auch die Einträge nachrechtsbewegen(), nachuntenbewegen(), unsichtbarmachen() und sichtbarmachen() aus. Über das Kontextmenü kannst du dem Objekts eine Botschaft, mit dem Auftrag etwas zu tun, schicken. Die Fähigkeit etwas zu tun nennt man Methoden. Übung 1.3: Was geschieht, wenn du die Methode nachuntenbewegen() zweimal aufrufst? Oder dreimal? Was passiert, wenn du unsichtbarmachen() zweimal aufrufst?
Kapitel 1 Grundlagen der Objektorientierung Seite 4/8 1.5 Parameter und Datentypen Rufe nun die Methode horizontalbewegen() auf. Es erscheint ein Dialog, der dich um eine Eingabe auffordert. Übung 1.4: Untersuche die Methoden vertikalbewegen(), langsambewegen() und groesseaendern(). Finde heraus, wie man den Kreis um 70 Einheiten (Bildschirmpunkte) nach links(!!) bewegt. Die zusätzlichen Werte, die manche Methoden benötigen, werden Parameter genannt. Diese legt der Programmierer beim erstellen der Methode fest, genauso wie mögliche Ausgabewerte. Abbildung 1.4: Methodenaufruf Du kennst dies bereits bei Funktionen aus dem Mathematikunterricht. Beispielsweise heißt bei der Funktion quadrat(x) der (Eingabe-)Parameter x. Abbildung 1.4: Ein- und Ausgabewerte bei Funktionen bzw. Methoden Manche Methoden haben keinen Ausgabewert. In diesem Fall wird vor dem Methodennamen void 1 notiert. Übung 1.5: Welche Eingabewerte haben die Methoden farbeaendern(...) und groesseaendern()? Wie nennt man den Eingabewert bei Methoden? 1 engl.: leer, Fehlstelle, Lücke
Kapitel 1 Grundlagen der Objektorientierung Seite 5/8 Ein Datentyp gibt an, welche Art von Information übergeben werden kann. Zum Beispiel bezeichnet der Typ int ganze Zahlen. Vergleiche wieder mit dem Beispiel aus der Mathematik oben: Der Eingabewert x ist vom Datentyp R (reelle Zahlen) + Der Ausgabewert y ist vom Datentyp R 0 (positive reelle Zahlen mit Null) Im Dialogfenster der Methode horizontalbewegen() erscheint die Zeile void horizontalbewegen(int entfernung) Die Bedeutung der einzelnen Teile kannst du der Abbildung 1.5. entnehmen void horizontalbewegen(int entfernung) Datentyp Ausgabewert Methodenname(Datentyp_Eingabewert Parameterbezeichner) Abbildung 1.5: Festlegung der Datentypen bei Methoden Hinweis: Wenn du später selbst Methoden schreibst, musst du dir vorher genau überlegen, welche Datentypen die Parameter und der Ausgabewert haben müssen. Deshalb mache dich schon jetzt mit der Schreibweise vertraut! Die Methode farbeaendern() hat einen Parameter vom Typ String. Übung 1.4 Ruf die Methode farbeaendern() eines deiner Kreis-Objekte auf und übergib den Parameter rot (mit Anführungszeichen). Übung 1.5: Was passiert, wenn du eine Farbe angibst, die nicht unterstützt wird? Übung 1.6: Rufe die Methode farbeaendern() auf und gib eine Farbe ohne Anführungszeichen an. Was passiert? Warum?
Kapitel 1 Grundlagen der Objektorientierung Seite 6/8 Übung 1.7 (Ergänzung zu 1.3 Attribute und Attributwerte) Falls noch nicht geschehen, mache die drei Kreise und das Quadrat sichtbar und öffne für zwei Kreise den Objektinspektor Abbildung 1.6: Attributwerte verschiedener Objekte der gleichen Klasse Erinnere dich an Übung 1.2. Dort hatten beide Kreise die gleichen Attributwerte. Vergleiche jetzt. Ändere über Methodenaufrufe zwei Attributwerte. Vergleiche die Änderungen im Objektinspektor mit den Änderungen im Fenster rechts oben. In der Gegenüberstellung der beiden Objektinspektoren wird nochmals deutlich, dass jedes Objekt der gleichen Klasse die gleichen Attribute hat, jedoch unterschiedliche Attributwerte haben kann. Ein Klassendiagramm Kreis und 2 Objektdiagramme Kreis1 und Kreis 2 Abbildung 1.7: Klassen- und Objektdiagramm
Kapitel 1 Grundlagen der Objektorientierung Seite 7/8 Übung 1.8: Vergleiche mit Hilfe des Objektinspektors die Attribute eines Objekts der Klasse Kreis mit denen eines Objekts der Klasse Quadrat! Übung 1.9: Erzeuge ein Bild ähnlich wie die unten gezeigte Abbildung 1.6. Abbildung 1.4: Darstellung in Übung 1.9 1.6 Objektinteraktionen Übung 1.10: Öffne das Projekt Zeichnung. Erzeuge eine Instanz der Klasse Zeichnung und rufe die Methode zeichne() auf. Probiere auch die beiden anderen Methoden. Übung 1.11: Wie zeichnet deiner Meinung nach die Klasse Zeichnung diese Zeichnung? Wir haben in diesem Projekt eine zusätzliche Klasse Zeichnung. Diese Klasse ist so programmiert, dass sie automatisch das tut, was du in Übung 1.9 manuell getan hast. Wir erzeugen also eine Instanz dieser Klasse Zeichnung, und diese erzeugt nun zwei Quadrat-Instanzen, eine Dreieck-Instanz und eine Kreis-Instanz. Anschließend werden die Methoden jeweils dieser Instanzen aufgerufen, so dass die Zeichnung wie oben ausschaut. Entscheidend ist hier: Objekte können andere Objekte erzeugen und die Methoden dieser weiteren Objekte aufrufen. Man sagt auch, die Objekte können miteinander kommunizieren, indem sie gegenseitig ihre Methoden aufrufen.
Kapitel 1 Grundlagen der Objektorientierung Seite 8/8 1.7 Quelltext Übung 1.12 Aktiviere das Kontextmenü der Klasse Zeichnung und wähle den Eintrag Bearbeiten (Open Editor). Übung 1.13: Finde im Quelltext der Klasse Zeichnung den Abschnitt, der das eigentliche Zeichnen ausführt. Ändere ihn so, dass die Sonne blau statt gelb ist. Hinweis: Beim Methodenaufruf ist es wichtig zu sagen, an welches Objekt die Botschaft gehen soll. Deshalb hat ein Methodenaufruf immer die Form Objektname.methodenname(Parameter) Übung 1.14: Ändere das Programm derart, dass eine 2. Sonne hinzugefügt wird. Übung 1.15 Füge der Version von Zeichnung mit nur einer Sonne einen Sonnenuntergang hinzu. Hierzu soll die Sonne langsam untergehen, rot werden und dann verschwinden. Tipp: Beachte es gibt schon fertige Methoden für eine langsame Bewegung! Übung 1.16: Für den Sonnenuntergang soll eine eigene Methode sonnenuntergang() definiert werden. Hinweis: Im Gegensatz zum Methodenaufruf ist bei ihrer Definition kein Objektname vorangestellt. 2 Dagegen sind hier die Datentypen des Ausgabewertes und der Parameter anzugeben. (siehe 1.5.) 2 Der Objektname würde hier auch keinen Sinn machen, da die Definition innerhalb der Klasse erfolgt, die Grundlage für den Bau der Objekte sind.