objektorientierte Programmierung



Ähnliche Dokumente
Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Repetitorium Informatik (Java)

Tag 7 Repetitorium Informatik (Java)

Klassen mit Instanzmethoden

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Objektorientierte Programmierung und Klassen

Einstieg in die Informatik mit Java

Java-Programmierung mit NetBeans

Implementieren von Klassen

7. Übung Informatik II - Objektorientierte Programmierung

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Klassen als Datenstrukturen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Grundelemente objektorientierter Sprachen (1)

Klassenvariablen, Klassenmethoden

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Einstieg in die Informatik mit Java

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

Einstieg in die Informatik mit Java

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Grundelemente objektorientierter Sprachen (1)

7. Objektorientierung. Informatik II für Verkehrsingenieure

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Einstieg in die Informatik mit Java

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Einführung in die Informatik

Java Einführung Klassendefinitionen

Vererbung, Polymorphie

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Programmierung Nachklausurtutorium

Einstieg in die Informatik mit Java

Begriffe 1 (Wiederholung)

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Grundelemente objektorientierter Sprachen (1)

Programmiertechnik Klassenvariablen & Instantiierung

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Java für Bauingenieure

Klassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode:

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Probeklausur: Programmierung WS04/05

Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

Einführung in die Programmierung mit BlueJ

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Martin Unold INFORMATIK. Geoinformatik und Vermessung

III. Objektorientierte Programmierung. Aufruf einer Methode. Definition einer Methode. Bezug zur aufrufenden Instanz. Instanzen einer Klasse

IT I: Heute. Nachbetrachtung Wissensüberprüfungen. Einführung Vererbung. Roboter in becker.robots. falls Zeit: Scheduling 8.11.

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Javakurs für Anfänger

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Methoden und Wrapperklassen

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Umsetzung einer Klassenkarte in einer Programmiersprache

Programmieren in Java

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

1 Einleitung Generizität Syntax... 2

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

Algorithmen und Programmierung II

Klassen können bekanntlich aus zwei Komponententypen bestehen, nämlich Attributen und Methoden.

Wir wollen in einer Bank die Konten der Kunden modellieren (um sie dann entspr. zu verarbeiten

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Tafelübung 07 Algorithmen und Datenstrukturen

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Programmieren für Wirtschaftswissenschaftler SS 2015

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

Javakurs für Anfänger

Praxis der Programmierung

Erste Schritte in Java

1. Abstrakte Klassen

C++ - Objektorientierte Programmierung Vererbung

Algorithmen und Datenstrukturen 07

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Erste Java-Programme (Java Wiederholung & Vererbung)

Gliederung der Folien

1 Klassen und Objekte

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Einstieg in die Informatik mit Java

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Java Referenzdatentypen genauer betrachtet

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Vererbung. Martin Wirsing. Ziele. Vererbung

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Vorkurs Informatik WiSe 15/16

Algorithmen und Datenstrukturen II

Objektorientierte Programmierung

Transkript:

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