Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Einführung in die objektorientierte Programmierung mit Java Fachbereich Informatik FH Bonn-Rhein-Sieg 10. April 2006 1 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Organisatorisches zum Thementag Ziel: Einstieg in die objektorientierte Programmierung Voraussetzung: Kenntnis einer imperativen Programmiersprache (Pascal o.ä.) Materialien: Folien, Beispielprogramme, Übungen (verwendete Entwicklungsumgebung: BlueJ) Zeitplan: Homepage: http://www.inf.fh-brs.de/Programmieren2006.html 2 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Inhalt z z z z Grundbegriffe der OOP Basiskonzepte weiterführende Konzepte Java ohne BlueJ / Java in der Schule 3 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Inhalt - Grundbegriffe der OOP z Objekte z Klassen z Methoden z Einstieg mit BlueJ - Basiskonzepte - weiterführende Konzepte - Java ohne BlueJ / Java in der Schule 4 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Objektorientierte Programmierung Kernthemen: z Objekte und Klassen z Beziehungen zwischen Objekten und Klassen z Kommunikation (Nachrichtenaustausch) zwischen Objekten Im Vordergrund stehen die Daten, ihre Struktur und ihre Beziehungen zueinander. Weniger im Blickpunkt: die Art der Verarbeitung, das Prozedurale, die Algorithmik. 5 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Objekt z z z ist ein Modell für ein Objekt der realen Welt hat einen Zustand, der durch Attribute beschrieben wird hat ein Verhalten, das durch Methoden beschrieben wird. Attribute beschreiben somit die Eigenschaften eines Objekts. Methoden beschreiben die Reaktion eines Objektes auf Nachrichten. 6 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Klasse z dient der Kategorisierung von Objekten z beschreibt alle Objekte mit gleichartigen Attributen und Methoden. Ein Objekt ist ein einzelnes Exemplar (eine „Instanz“) einer Klasse. Eine Klasse ist eine Art „Bauplan“ für Objekte. 7 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Methode z beschreibt die Reaktion eines Objektes auf eine Nachricht z dient der Kommunikation mit anderen Objekten (auch anderer Klassen) z regelt den Zugriff auf die Attribute eines Objektes z Methoden mit Rückgabewert werden auch als „Anfrage“ bezeichnet („gib mir den Wert ...“) z Methoden ohne Rückgabewert werden auch als „Auftrag“ bezeichnet („erledige das ...“) 8 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Vergleich zu Pascal Häufig wird die (stark hinkende ) Analogie zu imperativen Konstrukten gesehen: Klasse <-> Datentyp (z.B. record) Objekt <-> Variable (von diesem Typ) Methode <-> Prozedur/Funktion (Operation auf dem Datentyp) 9 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel: Sportfest1 Die Teilnehmer eines Sportfestes sollen als Objekte modelliert werden. Teilnehmer sind gekennzeichnet durch z Name z Geburtsjahr z Startnummer z erreichte Punkte in den einzelnen Wettbewerben Mögliche Aktionen sollen sein z Punkte für eine Disziplin eintragen z Gesamtsumme der erreichten Punkte berechnen 10 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel 1 als Klassendiagramm Teilnehmer String int int int[ ] name geburtsjahr startnummer punkte void punkteEintragen (int wettbewerbsNummer, int erreichtePunktzahl) int summe ( ) 11 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel 1 als Java-Code Datei mit irgendeinem Editor (hier: BlueJ) erstellen und unter Teilnehmer.java speichern. 12 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel 1 in BlueJ Das BlueJ-Fenster zeigt alle Klassen, die zu einem Projekt gehören und (später) ihre Abhängigkeiten. 13 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Erzeugung von Objekten mit BlueJ Ein Rechts-Mausklick auf das Klassensymbol öffnet ein Fenster, in dem der Operator new ausgewählt werden kann. 14 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Erzeugung von Objekten mit BlueJ Hier wurden zwei Objekte mit den „Variablen“-namen anna bzw. otto erzeugt. 15 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Zustand eines Objektes Rechtsklick auf ein Objekt öffnet ein Fenster, in dem u.a. der BlueJ-Inspektor aufgerufen werden kann. Er zeigt den Zustand des Objektes, also die aktuelle Belegung der Attributvariablen. Wir sehen: alle Attribute sind mit der „0“ des jeweiligen Datentyps vorbelegt. 16 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Methodenaufruf in BlueJ In demselben Fenster (geöffnet durch Rechtsklick auf das Objektsymbol) können auch die Methoden aufgerufen werden, die für das Objekt definiert sind. Wir tragen für die erste Disziplin die Punktzahl 12 ein: 17 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel nach dem Eintragen von Punkten für den 1. und den 3. Wettbewerb 18 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Zwischenbemerkung: Arrays in Java Wir haben für das Array zur Darstellung der Punkte die Länge 6 vereinbart. Im BlueJ-Inspector sehen wir, wie ein Array realisiert wird. z Die Länge wird als eigene "Variable" eingetragen. z Die einzelnen Feldelemente werden von 0 an nummeriert. z Letzte Nummer ist also immer (Feldlänge - 1). 19 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Aufruf der Methode summe (für das Objekt otto) 20 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Übung 0 z Starten Sie auf dem PC die Entwicklungsumgebung BlueJ. z Öffnen Sie das Projekt Sportfest1. z Erzeugen Sie zwei Objekte anna und otto. z Geben Sie für Objekt anna Punkte ein und lassen Sie die Summe berechnen. z Schauen Sie sich (mit dem Editor) den Quellcode der Klasse an. 21 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Inhalt - Grundbegriffe der OOP - Basiskonzepte z Klassendefinition z Erzeugung von Objekten z Methoden z Konstruktoren z Zugriff auf Attribute - weiterführende Konzepte - Java ohne BlueJ / Java in der Schule 22 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Klassendefinition public class Klassenname { // Definition der Attribute // Definition der Methoden } z z z z Das Schlüsselwort class leitet die Definition einer Klasse ein. Das Schlüsselwort public regelt Zugriffsrechte. Der Klassenname ist frei wählbar. Innerhalb der geschweiften Klammern werden Attribute und Methoden (in beliebiger Reihenfolge) definiert. 23 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Definition der Attribute Die Definiton von Attributen sieht wie eine Variablendeklaration aus: z Es wird der Datentyp des Attributs angegeben, dann der Name. z Die Definition wird mit einem Semikolon abgeschlossen. z Der Attributname ist frei wählbar. z Als Typ kommen die elementaren Datentypen (int, double, char, boolean, ...) in Frage, aber auch selbstdefinierte Klassen oder arrays (Felder). 24 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Definition der Methoden Rückgabetyp methodenName (Parameterliste){ // Definition lokaler Variablen // Anweisungen } Eine Methodendefinition sieht wie eine Funktionsoder Prozedurdefinition aus: z Im Methodenkopf werden der Name der Methode, eine Liste der Eingabeparameter (in runden Klammern) und der Datentyp des Rückgabewertes angegeben. z Im Methodenrumpf (eingeschlossen von geschweiften Klammern) werden lokale Variablen definiert und Anweisungen gegeben. 25 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Methodenkopf z Die Parameterliste ist eine Aufzählung von formalen Parametern mit ihren Typen. z Die Parameterliste kann auch leer sein (, die runden Klammern müssen dann trotzdem geschrieben werden)! z Die Parameter können elementare Typen, Klassen oder arrays als Typ haben. z Der Rückgabetyp kann ein einfacher Datentyp oder eine Klasse sein oder leer (void) sein. 26 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Methodenrumpf z Lokale Variablen werden (wie Attribute einer Klasse) durch Angabe des Typs und des Namens definiert. z Als Typen sind alle elementaren Typen, Klassen und arrays möglich. z Anweisungen sind Wertzuweisungen oder Methodenaufrufe oder durch Sequenz, Verzweigung oder Schleifen aus solchen zusammengesetzt. 27 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Erzeugung von Objekten Die Klasse steht uns wie ein abstrakter Datentyp zur Verfügung. Wir können nun beliebig viele Objekte (Instanzen) dieser Klasse erzeugen. Dies geschieht mit dem new-Operator. Beispiel: Teilnehmer anna = new Teilnehmer(); oder Teilnehmer otto; otto = new Teilnehmer(); 28 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Methodenaufruf z Mittels Methoden werden Nachrichten an Objekte versandt. Das Objekt muss als Empfänger der Nachricht beim Aufruf genannt werden (instanziierter Aufruf). z Konsequenz: (Instanzen-)Methoden können erst aufgerufen werden, nachdem ein Objekt der Klasse erzeugt wurde! z Für jeden formalen Parameter wird ein aktueller Wert (vom passenden Typ) übergeben. 29 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel Methodenaufruf Teilnehmer otto = new Teilnehmer(); otto.punkteEintragen(1, 12); /* belegt die erste Komponente des Feldes punkte (von Objekt otto) mit dem Wert 12. */ 30 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Noch einmal: Zustand eines Objektes Wir sehen: alle Attribute sind mit der „0“ des jeweiligen Datentyps vorbelegt. Die Belegung des arrays punkte können wir durch die Methode punkteEintragen ändern. Wie können wir die Attribute name, geburtsjahr und startnummer mit sinnvollen Werten belegen? 31 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Wie kann ich Attribute mit Werten belegen? z durch Methoden z beim Erzeugen des Objektes z durch direkte Wertzuweisung 32 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Belegung von Attributwerten durch Methoden Ein Beispiel hierfür kennen wir schon: die Methode punkteEintragen(int nr, int n). Wir können solche Methoden auch für die Attribute name, geburtsjahr und startnummer schreiben: 33 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel: Sportfest2 Wir erweitern die Klasse Teilnehmer um drei Methoden : public void nameAendern (String neuerName){ name = neuerName; } public void gebjAendern (int neuesGebj){ geburtsjahr = neuesGebj; } public void startnummerAendern (int neueNummer){ startnummer = neueNummer; } 34 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel: Sportfest2 Damit sind jetzt folgende Aufrufe möglich: Teilnehmer anna = new Teilnehmer(); anna.nameAendern("Anna Anders"); anna.gebjAendern(1992); anna.startnummerAendern(1); Bemerkung: Werte von Strings müssen immer (auch bei der Eingabe über das BlueJ-Fenster) in "Gänsefüßchen" eingeschlossen werden. 35 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Noch einmal: Zustand eines Objektes Danach sehen die Attributwerte so aus: Achtung! Durch die Methode nameAendern wird die Belegung des Attributs name geändert. Der Variablenname selber (anna) bleibt davon unberührt. 36 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Bemerkung Die Möglichkeit, sich die aktuelle Belegung der Attribute mit Hilfe des Inspectors anzusehen, ist eine BlueJ-Spezialität. Ohne diese Lernumgebung muß man spezielle Methoden zur Ausgabe des Objektzustandes (z.B. auf dem Bildschirm oder dem Drucker) definieren. Dazu stellt Java die Methoden print() bzw. println() aus der Klasse System für das Standardausgabegerät out zur Verfügung. System.out.println(String s); 37 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Für die Klasse Teilnehmer könnte das so aussehen : public void zeigeZustand() { int i; System.out.println(name + ", " + geburtsjahr); System.out.println("Startnummer: " + startnummer); System.out.println("Punktestand: "); for (i = 0; i < punkte.length; i = i+1) System.out.print(" " + punkte[i]); } 38 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Belegen von Attributwerten bei der Erzeugung des Objektes z Bei der Erzeugung eines Objektes mit dem newOperator wird eine spezielle Methode, der sog. Konstruktor aufgerufen. z Wenn der Programmierer keinen Konstruktor angegeben hat, wird automatisch ein StandardKonstruktor angelegt. z Durch explizite Angabe eines Konstruktors können wir Einfluß darauf nehmen, was bei der Erzeugung eines Objektes geschieht. 39 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Konstruktor public Klassenname(Parameterliste){ // Anweisungen } z z z z z Ein Konstruktor ist eine spezielle Methode. Der Name des Konstruktors ist identisch mit dem Klassennamen. Die Angabe des Rückgabetyps entfällt. (Es wird immer ein Objekt der Klasse erzeugt und ein Verweis darauf zurückgegeben.) Im Methodenrumpf können beliebige Anweisungen stehen. Dem Konstruktor können Parameter übergeben werden. 40 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Standardkonstruktor public Klassenname(){ // keine Anweisungen } z z Wird vom Programmierer kein Konstruktor angegeben, so wird von Java der Standardkonstruktor verwendet. Er enthält keine Eingabeparameter und keine Anweisungen. 41 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Konstruktor für die Klasse Teilnehmer Wir wollen erreichen, dass die Werte für die Attribute name, geburtsjahr und startnummer gleich bei der Erzeugung eines Objektes belegt werden. z Der Name und das Geburtsjahr des Teilnehmers/der Teilnehmerin sollen als Parameter übergeben werden. z Die Startnummer soll den default-Wert 1 erhalten. public Teilnehmer(String teilnehmerName, int gebjahr){ name = teilnehmerName; geburtsjahr = gebjahr; startnummer = 1; } 42 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Aufruf eines Konstruktors Der Aufruf eines von uns selbst definierten Konstruktors sieht genauso aus wie ein normaler Methodenaufruf. Durch Rechtsklick auf das Objektsymbol kann man den Konstruktor auswählen und Werte für die Parameter eingeben. 43 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel 2: Nach Aufruf des Konstruktors 44 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Belegen von Attributen durch Wertzuweisung Wertzuweisungen an eine Attributsvariable sehen genauso aus, wie wir sie bisher in Methoden schon verwendet haben. Wir unterscheiden lediglich nach der Stelle, an der die Wertzuweisung ausgeführt wird: z nicht innerhalb einer Methode des „eigenen“ Objektes z sondern aus Methoden „anderer“ Objekte oder Klassen heraus 45 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Zugriff auf Objektattribute „von außen“ Der Zugriff (von außerhalb) auf eine Attributsvariable eines Objektes erfolgt durch Nennung des Objektnamens, gefolgt von einem Punkt und dem Namen der Attributsvariablen. Bsp.: Teilnehmer anna = new Teilnehmer(); anna.geburtsjahr = 1992; System.out.println(anna.name); 46 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Kapselung guter Programmierstil: z Zugriff von außen auf Attribute durch Setzen von Zugriffsrechten verhindern z dadurch Zugriff nur durch Methoden möglich Beispiele hierfür später. 47 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Zugriff auf Objektattribute „von innen“ Innerhalb von Instanzmethoden (das sind Methoden, die wie alle, die wir bisher kennengelernt haben, an ein Objekt gebunden sind,) kann auf Attribute einfach durch Nennung des Variablennamens zugegriffen werden: geburtsjahr = ...; System.out.println(name); 48 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren this Um den Bezug zum Objekt bewußt herzustellen oder um Namenskonflikte mit anderen Größen zu vermeiden, kann auf das „eigene“ Objekt mit dem Schlüsselwort this Bezug genommen werden. Wir hätten in allen unseren Methoden schreiben können: this.geburtsjahr = ...; System.out.println(this.name); „Andere Größen“ können sein: lokale Variablen oder Parameter. 49 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Überladen von Methoden Beim Betrachten des Quelltextes des Beispiels Sportfest2 fällt auf, dass zwei Konstruktoren existieren. Das ist auch für andere Methoden möglich: Methoden können gleich heißen, wenn sie sich in der Parameterstruktur unterscheiden (Anzahl oder Typen der Parameter). Beim Aufruf ist dann durch die Angabe der Parameter klar, welche Variante der Methode ausgeführt wird. 50 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Übung 1 (Bank1) Wir wollen (Bank-)Konten modellieren: z Ein Konto hat einen Besitzer, eine Nummer und einen Saldo. z Man kann Beträge abheben oder einzahlen und sich den Kontostand anzeigen lassen. Definieren Sie eine Klasse Konto mit geeigneten Attributen, Methoden und einem Konstruktor. z Fügen Sie Methoden ein, um Geld auf ein anderes Konto zu überweisen oder von einem anderen Konto einzuziehen. 51 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Inhalt - Grundbegriffe der OOP - Basiskonzepte - weiterführende Konzepte z Klassenvariable z Klassenmethoden z Umgang mit mehreren Klassen z Vererbung - JAVA ohne BlueJ / Java in der Schule 52 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Klassenvariable z z z z stellen Eigenschaften einer Klasse, nicht eines einzelnen Objektes dar existieren nur einmal pro Klasse sind unabhängig von einzelnen Objekten werden definiert, indem bei der Deklaration das Schlüsselwort static vorangestellt wird 53 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel: Sportfest3 Wir wollen „mitzählen“, wieviele Teilnehmer sich angemeldet haben. Dazu fügen wir in der Klassendefinition die Deklaration einer Klassenvariablen anzahlTeilnehmer ein, die wir mit 0 initialisieren. public class Teilnehmer { static int anzahlTeilnehmer = 0; // weiter wie bisher: String name; int geburtsjahr; // ... } 54 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Klassenvariable existieren nur einmal! anzahlTeilnehmer 0 otto name geburtsjahr 0 startnummer 0 punkte anna 0 0 0 0 0 0 0 0 0 0 0 0 name geburtsjahr 0 startnummer 0 punkte 55 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Zugriff auf Klassenvariable Der Zugriff geschieht durch eine Wertzuweisung an die Variable. Eine Instanziierung mit einem Objektbezeichner oder mit this ist für Klassenvariable nicht erforderlich (und syntaktisch falsch)! Bei einem Zugriff aus einer anderen Klasse heraus ist der Klassenname und ein Punkt voranzustellen. Beispiel: Teilnehmer.anzahlTeilnehmer = ... 56 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel: Sportfest3 Zum Mitzählen muss diese Variable bei jedem Erzeugen eines neuen Teilnehmers (also bei jedem Aufruf des Konstruktors) um 1 erhöht werden. Wir können diese Variable auch dazu benutzen, die Startnummern automatisch zu vergeben: public Teilnehmer(String teilnehmerName, int gebjahr){ anzahlTeilnehmer = anzahlTeilnehmer + 1; this.name = teilnehmerName; this.geburtsjahr = gebjahr; this.startnummer = anzahlTeilnehmer; } 57 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Klassenmethoden z z z z z stehen der Klasse als Ganzem zur Verfügung existieren nur einmal pro Klasse sind unabhängig von einzelnen Objekten werden definiert, indem bei der Deklaration das Schlüsselwort static vorangestellt wird können ausgeführt werden, ohne dass ein Objekt der Klasse erzeugt wurde 58 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel: Sportfest3 Wir wünschen uns eine Methode, die den aktuellen Anmeldestand ausgibt. Die Methode benötigt keine Eingabeparameter, liefert keinen Wert zurück und soll zeigeAnmeldestand heißen. public static void zeigeAnmeldestand(){ System.out.println ("Zur Zeit sind " + anzahlTeilnehmer + " Teilnehmer angemeldet."); } 59 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Sportfest3 (final version) 60 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Übung 2 (Bank2) z Erweitern Sie die Klasse Konto so, dass nun bei Eröffnung eines neuen Kontos automatisch die nächste freie Kontonummer vergeben wird. z Sehen Sie eine Möglichkeit vor, den Gesamt„Umsatz“ der Bank zu ermitteln. (Wir berechnen den Umsatz als Summe aller Kontostände.) z Bei der Eröffnung eines Kontos kann ein Dispositionskredit (mit dem default-Wert 0) vereinbart werden. Auszahlungen werden verweigert, wenn der Dispositionskredit überschritten wird. 61 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Umgang mit mehreren Klassen Wir erweitern das Szenario des Sportfests um eine Klasse, die die angebotenen Wettbewerbe modelliert. Ein Objekt der Klasse Wettbewerb verfügt über die Attribute z Beschreibung (String) z maximale Teilnehmerzahl (int) z Anzahl der angemeldeten Teilnehmer (int) z Liste der angemeldeten Teilnehmer (array) Außerdem werden Methoden angeboten, um z einen Teilnehmer in die Teilnehmerliste einzutragen z zu überprüfen, ob es noch freie Plätze gibt 62 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel Sportfest4: Wettbewerb 63 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Korrespondenzen zwischen Klassen Die Klasse Wettbewerb benutzt die Klasse Teilnehmer wie einen Datentyp. Aber auch umgekehrt kann nun die Klasse Teilnehmer auf die Klasse Wettbewerb Bezug nehmen: z Teilnehmer können sich für Wettbewerbe anmelden (Aufruf einer Methode der Klasse Wettbewerb) z für jeden Teilnehmer soll vermerkt werden, für welchen Wettbewerb er angemeldet ist (array mit Basistyp Wettbewerb) 64 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren „Datenblatt“ der Klasse Teilnehmer: Es wird ein Feld gemeldet vom Typ Wettbewerb als Attribut eingefügt. name Anna geburtsjahr 1992 startnummer gemeldet Laufen Springen punkte 65 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel Sportfest4: Teilnehmer Wir müssen ein Attribut anzahlGemeldet einfügen, das mitzählt, für wieviele Wettbewerbe ein Teilnehmer angemeldet ist. 66 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel Sportfest4 in BlueJ: Die gegenseitige Abhängigkeit der Klassen wird durch Pfeile angezeigt. 67 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Teilnehmer melden sich zu Wettbewerben an Eine Methode, die es einem Teilnehmer ermöglicht, sich zu einem Wettbewerb anzumelden, muss z prüfen, ob der Teilnehmer sich nicht schon für die maximale Anzahl an Wettbewerben angemeldet hat, z prüfen, ob im gewünschten Wettbewerb noch Startplätze frei sind, z den Wettbewerb im array gemeldet eintragen, z den Teilnehmer in die Starterliste des Wettbewerbs aufnehmen. 68 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel Sportfest4: Die Methode anmelden der Klasse teilnehmer 69 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Für Teilnehmer werden Punkte eingetragen An die Methode punkteEintragen soll nun nicht mehr die Nummer des Wettbewerbs, sondern eine Referenz auf den Wettbewerb selbst übergeben werden. Um die richtige Position im array punkte zu finden, muss der übergebene Parameter mit den Einträgen im array gemeldet verglichen werden. 70 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel Sportfest4: Die Methode punkteEintragen der Klasse teilnehmer 71 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Übung 3 (Bank3) z Definieren Sie eine Klasse Person, die Namen und Geburtsjahr von Personen darstellen soll. z Die Klasse Konto soll nun ein neues Attribut kontofuehrer vom Typ Person erhalten, das das Attribut name ersetzt. 72 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Modularität Uns fällt auf: Die Klasse Person enthält Attribute und Methoden, die wir auch in der Klasse Teilnehmer definiert hatten. Wünschenswert: "Doppelte" Definitionen vermeiden und Klassen aus anderen Projekten für das aktuelle Projekt nutzbar machen. Eine der Stärken der OOP: Wiederverwendbarkeit von Klassen durch modularen Aufbau! 73 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Spezialisierung und Generalisierung Die Klasse Teilnehmer kann als Spezialisierung der Klasse Person angesehen werden. Mathematisch betrachtet ist die Menge Teilnehmer eine Teilmenge von Person. Person Teilnehmer 74 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Vererbung Java stellt für diese Situation das Konzept der Vererbung zur Verfügung. Damit können Klassen als Unterklassen anderer Klassen definiert werden. Objekte der Unterklasse erben alle Attribute und Methoden der Oberklasse und können zusätzlich über weitere Attribute und Methoden verfügen. public class Unterklasse extends Oberklasse { // zusätzliche Attribute und Methoden } 75 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel: Sportfest5 Wir fügen die Klasse Person in das Projekt Sportfest ein und leiten die Klasse Teilnehmer von der Klasse Person ab: public class Teilnehmer extends Person { // zusätzliche Attribute und Methoden } 76 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Objekte einer Unterklasse erzeugen Im Konstruktor einer Unterklasse darf der Konstruktor der Oberklasse aufgerufen werden (als erste Anweisung). Der Aufruf erfolgt mit super(Parameter); 77 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel Sportfest5 BlueJ zeigt die Vererbungsstruktur durch Pfeile im Klassendiagramm. 78 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Vererbungshierarchie Es ist möglich, dass von einer Klasse mehrere Unterklassen abgeleitet werden. Es ist auch möglich, dass über mehrere Stufen vererbt wird. Oberklasse Unterklasse1 Unterklasse2 Unterunterklasse 79 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Keine Mehrfachvererbung in Java! Oberklasse 1 Oberklasse 2 Unterklasse Es ist nicht möglich, dass eine Klasse von mehreren Oberklassen erbt! 80 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Die Attribute oder Methoden der Oberklasse stehen zur Verfügung, als seien es eigene Attribute. Teilnehmer anna = new Teilnehmer("Anne", 1992); // Erzeugen eines Objektes der Klasse Teilnehmer anna.nameAendern("Anna"); // Aufruf einer Methode der Oberklasse Person (In BlueJ über den Menupunkt inherited from <Oberklasse> ) 81 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Polymorphie z ist die gleichzeitige Existenz verschiedener Methoden mit gleichem Namen und gleicher Parameterstruktur in verschiedenen Klassen. z Allein durch die Klassenzugehörigkeit des Objektes wird entschieden, welche der Methoden ausgeführt wird (dynamisches Binden, dynamische Polymorphie). z Dadurch kann die gleiche Nachricht (derselbe Methodenaufruf) an verschiedene Objekte unterschiedliche Wirkung haben. 82 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Mit dem Schlüsselwort super, (gefolgt von einem Punkt,) kann bewusst auf Attribute oder Methoden der Oberklasse zugegriffen werden. 83 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Erinnerung z Unter Überladen von Methoden haben wir die gleichzeitige Existenz verschiedener Methoden mit gleichem Namen und unterschiedlicher Parameterstruktur innerhalb einer Klasse verstanden. z Hier entscheidet die Struktur der AktualParameter beim Aufruf darüber, welche Methode ausgeführt wird (statische Bindung, statische Polymorphie). 84 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel: Sportfest6 z Wir definieren eine Klasse Schiedsrichter, die von der Klasse Person abgeleitet wird und zusätzlich zu Name und Geburtsjahr ein Attribut vom Typ Wettbewerb erhalten soll. z Wir implementieren eine Methode einsatzWaehlen(Wettbewerb w), mit der einem Schiedsrichter ein Wettbewerb zugeteilt wird. z Wir fügen in der Klasse Wettbewerb ein Attribut wettkampfleiter vom Typ Schiedsrichter ein, das durch die Methode einsatzWaehlen entsprechend belegt wird. 85 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel: Sportfest6 86 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Übung 4 (Sportfest6) z Schauen Sie sich den Quellcode der Klassen von Sportfest6 an. z Erzeugen Sie mit BlueJ die Wettbewerbe Kirschkernweitspucken, Eierlaufen, Fingerhakeln und Tauziehen. Am Fingerhakeln sollen höchstens zwei Starter teilnehmen können. z Erzeugen Sie die Teilnehmer Anna, Otto, Emma und Ulli und den Schiedsrichter Willi. z Anna möchte sich für alle 4 Wettbewerbe anmelden, Otto für Fingerhakeln und Tauziehen, Emma für Tauziehen und Eierlaufen und Ulli für Fingerhakeln und Kirschkernweitspucken. 87 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Inhalt - Grundbegriffe der OOP - Basiskonzepte - weiterführende Konzepte - JAVA ohne BlueJ / Java in der Schule z ausführbare Klassen z main-Methode z Ein- und Ausgabe z Java in der Schule ? 88 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Java ohne BlueJ z Definition der verwendeten Klassen – wie in BlueJ (möglicherwiese mehrere, jede in einer eigenen Datei abgelegt) z Definition einer „ausführbaren“ Klasse mit einer speziellen Methode namens main z Übersetzen der Klassen z Starten des Programms 89 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren ausführbare Klassen z In jedem Java-Programm muss es in genau einer Klasse eine statische (Klassen-)Methode mit Namen main geben. z Kopf der main-Methode: public static void main(String[] args) z Diese Methode kann aufgerufen werden, ohne dass irgendein Objekt zuvor erzeugt wurde. z Innerhalb dieser Methode können Objekte erzeugt und Methoden aufgerufen werden. 90 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel: Sportfest7 Wir definieren die Klassen Person, Wettbewerb, Teilnehmer, Schiedsrichter wörtlich genauso wie in Sportfest6. Zusätzlich implementieren wir eine Klasse Test,die nun die Aufgaben übernimmt, die uns BlueJ durch den rechten Mausklick auf Klassen- oder Objektsymbole abgenommen hat: 91 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Testklasse für Beispiel Sportfest7 92 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Übersetzen und Starten eines Java-Programms Klassen werden übersetzt, indem (in einem DOSFenster oder über die Kommandozeile RUN...) der Java-Compiler javac aufgerufen wird: javac Klassenname.java z Java-Programme werden gestartet, indem das Kommando java Klassenname z gegeben wird. Bei diesem Kommando wird in der angegeben Klasse nach der main-Methode gesucht und diese ausgeführt. 93 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Übersetzen und Starten unseres Test-Programms 94 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Ausgabe Ohne den BlueJ-Inspector ist man auf die Ausgabe von Ergebnissen bzw. die Ansicht von Objekten via System.out.println() angewiesen. In unserem Beispiel: 95 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Eingabe Die Eingabe von Daten während des Programmablaufs ist in Java sehr umständlich und für Anfänger nicht zu empfehlen. 96 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren "Imperative" Programmierung mit Java Man kann "imperative" Programme (z.B. aus Pascal) nach Java übertragen, indem nur eine ausführbare Klasse (mit der main-Methode) definiert wird und dort nur statische (Klassen-)variablen und statische (Klassen-)methoden benutzt werden. 97 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Beispiel Mittelwert.java 98 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Java in der Schule ? 99 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Anforderungen an Programmieranfänger Syntax der Sprache sprachunabhängig z z problemlösend z Datentypen z Programmentwurf "mit Papier und Bleistift", umgangssprachlich z Strukturen (if, Schleifen, ...) z Funktionen, Parameter, Aufrufe z ... z z ... Umgebung Sprache Programmierung z Editor, Compiler, ... z Programmstart in Kommandozeile z Handhaben der integrierten Entwicklungsumgebung z ... 100 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Programmiermodell imperativ Pascal C ... integrierte Umgebung? objektorientiert Java Smalltalk jdk BlueJ ... Eclipse ... 101 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren imperative vs. objektorientierte Paradigmen: imperativ einfache Datentypen z Klassen Strukturen (if, Schleifen, ...) z Methoden komplexe Algorithmen z Objekte zusammengesetzte Datentypen (record) z einfache Datentypen z Strukturen (if, Schleifen, ...) z komplexe Datenabhängigkeiten z ... z z objektorientiert z z z z Unterprogramme Pointer, Referenzen z ... 102 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Literatur Objektorientierte Programmierung mit Java. Eine praxisnahe Einführung mit BlueJ. von David J. Barnes, Michael Kölling z z z das BlueJ-Buch Grundlage für diesen Kurs als Lehrbuch geeignet Java von Stefan Middendorf, Reiner Singer, Jörn Heid z z z das Java-Buch reines Nachschlagewerk nicht als Lehrbuch geeignet 103 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Literatur Programmieren spielend gelernt. Mit dem JavaHamster-Modell. von Dietrich Boles z z z z z "Hamster"-Buch spezielle Lernumgebung imperative Programmierung eingeschränktes Java als Lehrbuch geeignet Objektorientierte Programmierung spielend gelernt mit dem Java-Hamster-Modell. von Dietrich Boles, Cornelia Boles z z z z z 2. Teil des "Hamster"-Buchs nicht ohne 1. Teil veratändlich objektorientierte Programmierung eingeschränktes Java als Lehrbuch geeignet ? 104 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Literatur Java als erste Programmiersprache. Vom Einsteiger zum Profi. m. CD-ROM von Cornelia Heinisch, Frank Müller, Joachim Goll z z von unseren Dozenten häufig empfohlen etwas trocken und langweilig Objektorientierte Programmierung in Java. Eine leicht verständliche Einführung. von Otto Rauh z z z beginnt imperativ kommt schnell zu objektorientierten Konzepten als Lehrbuch geeignet 105 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Literatur Grundkurs Programmieren in Java 1. Der Einstieg in Programmierung und Objektorientierung. von Dietmar Ratz, Jens Scheffler, Detlef Seese z z z von unseren Dozenten empfohlen Lehrbuch mit vielen Beispielen und Übungen nicht als Nachschlagewerk geeignet Guido Krüger Handbuch der Java-Programmierung z z bei Studierenden beliebt auch online und kostenlos verfügbar unter http://www.addison-wesley.de/service/Krueger/javabuch.htm 106 Fachhochschule Bonn-Rhein-Sieg Thementag Programmieren Links http://java.sun.com/ die Startseite von SUN http://java.sun.com/j2se/1.5.0/docs/ Java-Standard-Dokumentation von SUN http://java.sun.com/docs/books/tutorial/ online-Tutorial von SUN (in englischer Sprache) 107