Einführung in die objektorientierte Programmierung mit Java Fachbereich Informatik FH 10. April 2006 1
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
Inhalt Grundbegriffe der OOP Basiskonzepte weiterführende Konzepte Java ohne BlueJ / Java in der Schule 3
Inhalt - Grundbegriffe der OOP Objekte Klassen Methoden Einstieg mit BlueJ - Basiskonzepte - weiterführende Konzepte - Java ohne BlueJ / Java in der Schule 4
Objektorientierte Programmierung Kernthemen: Objekte und Klassen Beziehungen zwischen Objekten und Klassen 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
Objekt 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
Klasse dient der Kategorisierung von Objekten 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
Methode beschreibt die Reaktion eines Objektes auf eine Nachricht dient der Kommunikation mit anderen Objekten (auch anderer Klassen) regelt den Zugriff auf die Attribute eines Objektes Methoden mit Rückgabewert werden auch als Anfrage bezeichnet ( gib mir den Wert... ) Methoden ohne Rückgabewert werden auch als Auftrag bezeichnet ( erledige das... ) 8
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
Beispiel: Sportfest1 Die Teilnehmer eines Sportfestes sollen als Objekte modelliert werden. Teilnehmer sind gekennzeichnet durch Name Geburtsjahr Startnummer erreichte Punkte in den einzelnen Wettbewerben Mögliche Aktionen sollen sein Punkte für eine Disziplin eintragen Gesamtsumme der erreichten Punkte berechnen 10
Beispiel 1 als Klassendiagramm String int int int[ ] Teilnehmer name geburtsjahr startnummer punkte void punkteeintragen (int wettbewerbsnummer, int erreichtepunktzahl) int summe ( ) 11
Beispiel 1 als Java-Code Datei mit irgendeinem Editor (hier: BlueJ) erstellen und unter Teilnehmer.java speichern. 12
Beispiel 1 in BlueJ Das BlueJ-Fenster zeigt alle Klassen, die zu einem Projekt gehören und (später) ihre Abhängigkeiten. 13
Erzeugung von Objekten mit BlueJ Ein Rechts-Mausklick auf das Klassensymbol öffnet ein Fenster, in dem der Operator new ausgewählt werden kann. 14
Erzeugung von Objekten mit BlueJ Hier wurden zwei Objekte mit den Variablen -namen anna bzw. otto erzeugt. 15
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
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
Beispiel nach dem Eintragen von Punkten für den 1. und den 3. Wettbewerb 18
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. Die Länge wird als eigene "Variable" eingetragen. Die einzelnen Feldelemente werden von 0 an nummeriert. Letzte Nummer ist also immer (Feldlänge - 1). 19
Aufruf der Methode summe (für das Objekt otto) 20
Übung 0 Starten Sie auf dem PC die Entwicklungsumgebung BlueJ. Öffnen Sie das Projekt Sportfest1. Erzeugen Sie zwei Objekte anna und otto. Geben Sie für Objekt anna Punkte ein und lassen Sie die Summe berechnen. Schauen Sie sich (mit dem Editor) den Quellcode der Klasse an. 21
Inhalt - Grundbegriffe der OOP - Basiskonzepte Klassendefinition Erzeugung von Objekten Methoden Konstruktoren Zugriff auf Attribute - weiterführende Konzepte - Java ohne BlueJ / Java in der Schule 22
Klassendefinition public class Klassenname { // Definition der Attribute // Definition der Methoden } 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
Definition der Attribute Die Definiton von Attributen sieht wie eine Variablendeklaration aus: Es wird der Datentyp des Attributs angegeben, dann der Name. Die Definition wird mit einem Semikolon abgeschlossen. Der Attributname ist frei wählbar. Als Typ kommen die elementaren Datentypen (int, double, char, boolean,...) in Frage, aber auch selbstdefinierte Klassen oder arrays (Felder). 24
Definition der Methoden Rückgabetyp methodenname (Parameterliste){ // Definition lokaler Variablen // Anweisungen } Eine Methodendefinition sieht wie eine Funktionsoder Prozedurdefinition aus: Im Methodenkopf werden der Name der Methode, eine Liste der Eingabeparameter (in runden Klammern) und der Datentyp des Rückgabewertes angegeben. Im Methodenrumpf (eingeschlossen von geschweiften Klammern) werden lokale Variablen definiert und Anweisungen gegeben. 25
Methodenkopf Die Parameterliste ist eine Aufzählung von formalen Parametern mit ihren Typen. Die Parameterliste kann auch leer sein (, die runden Klammern müssen dann trotzdem geschrieben werden)! Die Parameter können elementare Typen, Klassen oder arrays als Typ haben. Der Rückgabetyp kann ein einfacher Datentyp oder eine Klasse sein oder leer (void) sein. 26
Methodenrumpf Lokale Variablen werden (wie Attribute einer Klasse) durch Angabe des Typs und des Namens definiert. Als Typen sind alle elementaren Typen, Klassen und arrays möglich. Anweisungen sind Wertzuweisungen oder Methodenaufrufe oder durch Sequenz, Verzweigung oder Schleifen aus solchen zusammengesetzt. 27
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
Methodenaufruf Mittels Methoden werden Nachrichten an Objekte versandt. Das Objekt muss als Empfänger der Nachricht beim Aufruf genannt werden (instanziierter Aufruf). Konsequenz: (Instanzen-)Methoden können erst aufgerufen werden, nachdem ein Objekt der Klasse erzeugt wurde! Für jeden formalen Parameter wird ein aktueller Wert (vom passenden Typ) übergeben. 29
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
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
Wie kann ich Attribute mit Werten belegen? durch Methoden beim Erzeugen des Objektes durch direkte Wertzuweisung 32
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
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
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
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
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
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
Belegen von Attributwerten bei der Erzeugung des Objektes Bei der Erzeugung eines Objektes mit dem new- Operator wird eine spezielle Methode, der sog. Konstruktor aufgerufen. Wenn der Programmierer keinen Konstruktor angegeben hat, wird automatisch ein Standard- Konstruktor angelegt. Durch explizite Angabe eines Konstruktors können wir Einfluß darauf nehmen, was bei der Erzeugung eines Objektes geschieht. 39
Konstruktor public Klassenname(Parameterliste){ // Anweisungen } 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
Standardkonstruktor public Klassenname(){ // keine Anweisungen } Wird vom Programmierer kein Konstruktor angegeben, so wird von Java der Standardkonstruktor verwendet. Er enthält keine Eingabeparameter und keine Anweisungen. 41
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. Der Name und das Geburtsjahr des Teilnehmers/der Teilnehmerin sollen als Parameter übergeben werden. Die Startnummer soll den default-wert 1 erhalten. public Teilnehmer(String teilnehmername, int gebjahr){ name = teilnehmername; geburtsjahr = gebjahr; startnummer = 1; } 42
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
Beispiel 2: Nach Aufruf des Konstruktors 44
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: nicht innerhalb einer Methode des eigenen Objektes sondern aus Methoden anderer Objekte oder Klassen heraus 45
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
Kapselung guter Programmierstil: Zugriff von außen auf Attribute durch Setzen von Zugriffsrechten verhindern dadurch Zugriff nur durch Methoden möglich Beispiele hierfür später. 47
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
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
Ü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
Übung 1 (Bank1) Wir wollen (Bank-)Konten modellieren: Ein Konto hat einen Besitzer, eine Nummer und einen Saldo. 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. Fügen Sie Methoden ein, um Geld auf ein anderes Konto zu überweisen oder von einem anderen Konto einzuziehen. 51
Inhalt - Grundbegriffe der OOP - Basiskonzepte - weiterführende Konzepte Klassenvariable Klassenmethoden Umgang mit mehreren Klassen Vererbung - JAVA ohne BlueJ / Java in der Schule 52
Klassenvariable 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
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
Klassenvariable existieren nur einmal! anzahlteilnehmer 0 otto name geburtsjahr startnummer 0 0 punkte 0 0 0 0 0 0 anna name geburtsjahr startnummer 0 0 punkte 0 0 0 0 0 0 55
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
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
Klassenmethoden 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
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
Sportfest3 (final version) 60
Übung 2 (Bank2) Erweitern Sie die Klasse Konto so, dass nun bei Eröffnung eines neuen Kontos automatisch die nächste freie Kontonummer vergeben wird. Sehen Sie eine Möglichkeit vor, den Gesamt- Umsatz der Bank zu ermitteln. (Wir berechnen den Umsatz als Summe aller Kontostände.) 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
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 Beschreibung (String) maximale Teilnehmerzahl (int) Anzahl der angemeldeten Teilnehmer (int) Liste der angemeldeten Teilnehmer (array) Außerdem werden Methoden angeboten, um einen Teilnehmer in die Teilnehmerliste einzutragen zu überprüfen, ob es noch freie Plätze gibt 62
Beispiel Sportfest4: Wettbewerb 63
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: Teilnehmer können sich für Wettbewerbe anmelden (Aufruf einer Methode der Klasse Wettbewerb) für jeden Teilnehmer soll vermerkt werden, für welchen Wettbewerb er angemeldet ist (array mit Basistyp Wettbewerb) 64
Datenblatt der Klasse Teilnehmer: Es wird ein Feld gemeldet vom Typ Wettbewerb als Attribut eingefügt. name geburtsjahr Anna 1992 startnummer gemeldet punkte Laufen Springen 65
Beispiel Sportfest4: Teilnehmer Wir müssen ein Attribut anzahlgemeldet einfügen, das mitzählt, für wieviele Wettbewerbe ein Teilnehmer angemeldet ist. 66
Beispiel Sportfest4 in BlueJ: Die gegenseitige Abhängigkeit der Klassen wird durch Pfeile angezeigt. 67
Teilnehmer melden sich zu Wettbewerben an Eine Methode, die es einem Teilnehmer ermöglicht, sich zu einem Wettbewerb anzumelden, muss prüfen, ob der Teilnehmer sich nicht schon für die maximale Anzahl an Wettbewerben angemeldet hat, prüfen, ob im gewünschten Wettbewerb noch Startplätze frei sind, den Wettbewerb im array gemeldet eintragen, den Teilnehmer in die Starterliste des Wettbewerbs aufnehmen. 68
Beispiel Sportfest4: Die Methode anmelden der Klasse teilnehmer 69
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
Beispiel Sportfest4: Die Methode punkteeintragen der Klasse teilnehmer 71
Übung 3 (Bank3) Definieren Sie eine Klasse Person, die Namen und Geburtsjahr von Personen darstellen soll. Die Klasse Konto soll nun ein neues Attribut kontofuehrer vom Typ Person erhalten, das das Attribut name ersetzt. 72
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
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
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
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
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
Beispiel Sportfest5 BlueJ zeigt die Vererbungsstruktur durch Pfeile im Klassendiagramm. 78
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
Keine Mehrfachvererbung in Java! Oberklasse 1 Oberklasse 2 Unterklasse Es ist nicht möglich, dass eine Klasse von mehreren Oberklassen erbt! 80
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
Polymorphie ist die gleichzeitige Existenz verschiedener Methoden mit gleichem Namen und gleicher Parameterstruktur in verschiedenen Klassen. Allein durch die Klassenzugehörigkeit des Objektes wird entschieden, welche der Methoden ausgeführt wird (dynamisches Binden, dynamische Polymorphie). Dadurch kann die gleiche Nachricht (derselbe Methodenaufruf) an verschiedene Objekte unterschiedliche Wirkung haben. 82
Mit dem Schlüsselwort super, (gefolgt von einem Punkt,) kann bewusst auf Attribute oder Methoden der Oberklasse zugegriffen werden. 83
Erinnerung Unter Überladen von Methoden haben wir die gleichzeitige Existenz verschiedener Methoden mit gleichem Namen und unterschiedlicher Parameterstruktur innerhalb einer Klasse verstanden. Hier entscheidet die Struktur der Aktual- Parameter beim Aufruf darüber, welche Methode ausgeführt wird (statische Bindung, statische Polymorphie). 84
Beispiel: Sportfest6 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. Wir implementieren eine Methode einsatzwaehlen(wettbewerb w), mit der einem Schiedsrichter ein Wettbewerb zugeteilt wird. Wir fügen in der Klasse Wettbewerb ein Attribut wettkampfleiter vom Typ Schiedsrichter ein, das durch die Methode einsatzwaehlen entsprechend belegt wird. 85
Beispiel: Sportfest6 86
Übung 4 (Sportfest6) Schauen Sie sich den Quellcode der Klassen von Sportfest6 an. Erzeugen Sie mit BlueJ die Wettbewerbe Kirschkernweitspucken, Eierlaufen, Fingerhakeln und Tauziehen. Am Fingerhakeln sollen höchstens zwei Starter teilnehmen können. Erzeugen Sie die Teilnehmer Anna, Otto, Emma und Ulli und den Schiedsrichter Willi. 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
Inhalt - Grundbegriffe der OOP - Basiskonzepte - weiterführende Konzepte - JAVA ohne BlueJ / Java in der Schule ausführbare Klassen main-methode Ein- und Ausgabe Java in der Schule? 88
Java ohne BlueJ Definition der verwendeten Klassen wie in BlueJ (möglicherwiese mehrere, jede in einer eigenen Datei abgelegt) Definition einer ausführbaren Klasse mit einer speziellen Methode namens main Übersetzen der Klassen Starten des Programms 89
ausführbare Klassen In jedem Java-Programm muss es in genau einer Klasse eine statische (Klassen-)Methode mit Namen main geben. Kopf der main-methode: public static void main(string[] args) Diese Methode kann aufgerufen werden, ohne dass irgendein Objekt zuvor erzeugt wurde. Innerhalb dieser Methode können Objekte erzeugt und Methoden aufgerufen werden. 90
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
Testklasse für Beispiel Sportfest7 92
Übersetzen und Starten eines Java-Programms Klassen werden übersetzt, indem (in einem DOS- Fenster oder über die Kommandozeile RUN...) der Java-Compiler javac aufgerufen wird: javac Klassenname.java Java-Programme werden gestartet, indem das Kommando java Klassenname gegeben wird. Bei diesem Kommando wird in der angegeben Klasse nach der main-methode gesucht und diese ausgeführt. 93
Übersetzen und Starten unseres Test-Programms 94
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
Eingabe Die Eingabe von Daten während des Programmablaufs ist in Java sehr umständlich und für Anfänger nicht zu empfehlen. 96
"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
Beispiel Mittelwert.java 98
Java in der Schule? 99
Anforderungen an Programmieranfänger Programmierung sprachunabhängig problemlösend Programmentwurf "mit Papier und Bleistift", umgangssprachlich... Sprache Syntax der Sprache Datentypen Strukturen (if, Schleifen,...) Funktionen, Parameter, Aufrufe... Umgebung Editor, Compiler,... Programmstart in Kommandozeile Handhaben der integrierten Entwicklungsumgebung... 100
Programmiermodell imperativ objektorientiert Pascal C... Java Smalltalk... integrierte Umgebung? jdk BlueJ Eclipse... 101
imperative vs. objektorientierte Paradigmen: imperativ objektorientiert einfache Datentypen Strukturen (if, Schleifen,...) komplexe Algorithmen zusammengesetzte Datentypen (record) Unterprogramme Pointer, Referenzen... Klassen Methoden Objekte einfache Datentypen Strukturen (if, Schleifen,...) komplexe Datenabhängigkeiten... 102
Literatur Objektorientierte Programmierung mit Java. Eine praxisnahe Einführung mit BlueJ. von David J. Barnes, Michael Kölling das BlueJ-Buch Grundlage für diesen Kurs als Lehrbuch geeignet Java von Stefan Middendorf, Reiner Singer, Jörn Heid das Java-Buch reines Nachschlagewerk nicht als Lehrbuch geeignet 103
Literatur Programmieren spielend gelernt. Mit dem Java- Hamster-Modell. von Dietrich Boles "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 2. Teil des "Hamster"-Buchs nicht ohne 1. Teil veratändlich objektorientierte Programmierung eingeschränktes Java als Lehrbuch geeignet? 104
Literatur Java als erste Programmiersprache. Vom Einsteiger zum Profi. m. CD-ROM von Cornelia Heinisch, Frank Müller, Joachim Goll von unseren Dozenten häufig empfohlen etwas trocken und langweilig Objektorientierte Programmierung in Java. Eine leicht verständliche Einführung. von Otto Rauh beginnt imperativ kommt schnell zu objektorientierten Konzepten als Lehrbuch geeignet 105
Literatur Grundkurs Programmieren in Java 1. Der Einstieg in Programmierung und Objektorientierung. von Dietmar Ratz, Jens Scheffler, Detlef Seese von unseren Dozenten empfohlen Lehrbuch mit vielen Beispielen und Übungen nicht als Nachschlagewerk geeignet Guido Krüger Handbuch der Java-Programmierung bei Studierenden beliebt auch online und kostenlos verfügbar unter http://www.addison-wesley.de/service/krueger/javabuch.htm 106
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