objektorientierte Programmierung

Werbung
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
Herunterladen