Einführung in die Informatik – Algorithmen und Datenstrukturen
Thema 11 – Grundlagen der objektorientierten Programmierung mit Java
Aufzeichnungen und Veröffentlichungen der Vorlesung sind aus urheberrechtlichen Gründen unzulässig!
2
Objektorientierte Softwareentwicklung
„Jedes Objekt wird durch seine Attribute mit den aktuellen Attributwerten beschrieben.
Alle Objekte derselben Klasse verfügen über dieselben
Attribute und Methoden. Sie unterscheiden sich höchsten durch verschiedene Werte ihrer Attribute.
Eine Klasse ist ein Konstruktionsplan für Objekte!“
Quelle: Informatik 3 – Lehrwerk für Gymnasien, Ernst Klett Verlag, Stuttgart, 2008, S. 14
3
Objektkarten
„Objektkarten setzen sich also aus Attributen und Methoden zusammen, wobei jedes Attribut zu einem bestimmten
Zeitpunkt einen
bestimmten Wert hat. “
Quelle: Informatik 3 – Lehrwerk für Gymnasien, Ernst Klett Verlag, Stuttgart, 2008, S. 13 Katrin_M : STUDENT
vname = „Katrin“
name = „Musterfrau“
mnr = 211200 immatrikulieren() zurueckmelden() getname()
getMatrikelnummer()
…
4
Objektkarten Klassendiagramm
Fahrer
+punktePlus(anzahl:int):int +punkteMinus(anzahl:int):int +setName(na:String):void +getPunkte():int
+getName():String
+Fahrer(na:String,fsnum:String, gebd:String)
- fsnr : String - name : String - gebdat : Datum - punkte : int
fahrer1:Fahrer
fsnr = „N240014SS58“
name = „Susi Sorglos“
gebdat = „02.02.1997“
punkte = 0
punktePlus (anzahl) punkteMinus(anzahl) setName(na)
getPunkte()
name = „Max Medium“
gebdat = „12.02.1999“
punkte=2
fahrer2:Fahrer
fsnr = „N240014MM75“
punktePlus (anzahl) punkteMinus(anzahl) setName(na)
getPunkte() getName()
5
Grundpfeiler der objektorientierten Programmierung
/Quelle: RATZ2010 – Seite 188/
6
OOS – Grundlegende Definitionen - Objekt
„Ein Objekt ist allgemein ein Gegenstand des Interesses, insbesondere einer Beobachtung, Untersuchung oder Messung. Objekte können Dinge und Begriffe sein.
In der objektorientierten Softwareentwicklung besitzt ein Objekt bestimmte
Eigenschaften und reagiert mit einem definierten Verhalten auf seine Umgebung.
Außerdem besitzt jedes Objekt eine Identität, die es von allen anderen Objekten unterscheidet.
Die Eigenschaften eines Objektes werden durch dessen Attributwerte ausgedrückt, sein Verhalten durch eine Menge von Methoden.“
/Helmut Balzert; Lehrbuch der Softwaretechnik; Spektrum Verlag, 1996/
7
OOS – Grundlegende Definitionen - Klasse
„Eine Klasse beschreibt eine Sammlung von Objekten mit gleichen Eigenschaften (Attributen), gemeinsamer Funktionalität (Methoden), gemeinsam en Beziehungen zu anderen Objekten und gemeinsamer Semantik.“
/Helmut Balzert; Lehrbuch der Softwaretechnik; Spektrum Verlag, 1996//
8
OOS – Grundlegende Definitionen – Attribut – Methode - Botschaft
„Die Attribute beschreiben die Daten bzw. Eigenschaften einer Klasse. Alle Objekte einer Klasse besitzen dieselben Attribute, jedoch unterschiedliche Attributwerte. Das bedeutet für die Implementation, dass jedes Objekt Speicherplatz für alle seine Attribute erhalten muss.
Eine Methode ist ein Algorithmus, der einem Objekt zugeordnet ist und von diesem abgearbeitet werden kann.
Eine Botschaft ist eine Nachricht, die den Aufruf einer Methode gleichen Namens zur Folge hat.“
/Helmut Balzert; Lehrbuch der Softwaretechnik; Spektrum Verlag, 1996/
9
Objektkarten
fahrer1:Fahrer
fsnr = „N240014SS58“
name = „Susi Sorglos“
gebdat = „02.02.1997“
punkte = 0
punktePlus (anzahl) punkteMinus(anzahl) setName(na)
getPunkte()
name = „Max Medium“
gebdat = „12.02.1999“
punkte=2
fahrer2:Fahrer
fsnr = „N240014MM75“
punktePlus (anzahl) punkteMinus(anzahl) setName(na)
getPunkte() getName()
Fahrer
+punktePlus(anzahl:int):int +punkteMinus(anzahl:int):int +setName(na:String):void +getPunkte():int
+getName():String
+Fahrer(na:String,fsnum:String, gebd:String)
- fsnr : String - name : String - gebdat : Datum - punkte : int
10
Implementierung von Klassen
Modell
public class Fahrer {
// instance variables - replace the example below with your own private String fsnr;
private String name;
private Datum gebdat;
private int punkte;
public Fahrer(String na, String fsnum, String gebd) {
fsnr = fsnum;
name = na;
gebdat = new Datum (gebd);
punkte = 0;
}
public void setName(String na) {
name = na;
}…
Java-Quelltext
Lösungs- idee
Pro- blem
Klassen Objekte Attribute Methoden
(Quell-) Pro- gramm Wissen über
objektorientierte Implementierung
System- analyse
und – beschrei- bung mit
UML Strukturieren des Problems
experimentieren und Ergebnisse interpretieren
Problemlösen durch objektorientiertes
Modellieren
Klasse Datum
13
Implementierung von Klassen
Modell Java-Quelltext
Attribute Instanz-Variablen
Methoden
Operationen Instanz-Methoden
Die Werte der Instanzvariablen sind solange verfügbar, wie das Objekt
existiert. Instanzvariablen sollten den Status „private“ haben – data
hiding.
14
Deklaration von Klassen
Mit dem Schlüsselwort class wird eine neue Klasse deklariert. Dieser können Attribute und Methoden
zugeordnet werden. Die Klasse ist das „Baumuster“ für die abgeleiteten Objekte.
Klassendeklaration:
sichtbarkeit class klassenbezeichner
15
Deklaration von Instanzmethoden
Die Sichtbarkeit für Innstanzmethoden sollte auf „public“ gesetzt werden, wenn diese Methoden von anderen Objekten aufgerufen werden sollen. Instanzmethoden sind an das Objekt gebunden und sind nur verfügbar, wenn ein Objekt vorhanden ist.
Methodendeklaration:
sichtbarkeit rueckgabetyp methodenname ( parameterliste )
methodenrumpf
{ }
16
Verwendung von Instanzmethoden
Instanzmethoden haben das Ziel, Instanzvariablen zu verändern bzw.
auszugeben.
Ein Aufruf ist immer mit einem Objekt verbunden.
Methodenverwendung:
methodenname()
objektname
.
17
Verwendung von Instanzvariablen
Der Zugriff auf Instanzvariablen erfolgt nach der Syntaxregel:
variablenname objektname
.
Innerhalb eines Objektes wird auf die Instanzvariablen durch this.name zugegriffen.
variablenname
this .
Damit kann der Entwickler Instanzvariablen und lokale Variablen mit
dem gleichen Namen verwenden, ohne das Konflikte auftreten.
18
Klassenvariablen
Klassenvariablen existieren unabhängig von Objekten. Sie können zur objektübergreifenden Datenspeicherung
genutzt werden.
Variablendeklaration und Initialisierung von Klassenvariablen
daten- typ gültig-
keits- bereich
bezeichner = ausdruck ;
, static
19
Klassenmethoden
Klassenmethoden werden der entsprechenden Klasse, nicht den erzeugten Objekten zugeordnet. Damit ist der Zugriff auf
Klassenvariablen möglich. Sie werden auch zum Formulieren von Funktionen verwendet, die unabhängig von Objekten sind (z. B.
mathematische Grundfunktionen).
Deklaration von Klassenmethoden
sichtbarkeit rueckgabetyp methodenname
parameterliste
( ) { methodenrumpf }
static
20
Instanzierung und Initialisierung von Objekten
Für die Erzeugung von Objekten (Instanzen) einer Klasse bietet BlueJ verschiedene Möglichkeiten. Die Objekte können direkt in der BlueJ-Entwicklungsumgebung erzeugt
werden. Sollen Objekte zur Laufzeit von anderen Objekten erzeugt werden, so wird dazu der new-Operator verwendet. Objekte können sowohl in Form von Instanzvariablen oder in Form von lokalen Variablen erzeugt werden.
instanzname = new klassenname () ;
klassenname gültigkeits-
bereich instanzname ;
instanz-
name = new klassenname () ;
Alternativ:
klassen- name
Klasse Datum
/**
* Constructor for objects of class Datum
* Uebergabe des Datums als Zeichenkette im Format tt.mm.jjjj
*
*/
public Datum(String datum) {
String ts;
String ms;
String js;
ts = datum.substring(0,2);
ms = datum.substring(3,5);
js = datum.substring(6,10);
this.tag = Integer.parseInt(ts);
this.monat = Integer.parseInt(ms);
this.jahr = Integer.parseInt(js);
}
Klasse Datum - Konstruktor
23
Initialisierung von Objekten
Bei der Initialisierung von Objekten können Parameter übergeben werden und diese werden von dem Konstruktor verarbeitet.
instanz-
name = new klassen- ;
name ( parameter- )
liste
Regeln bei der Arbeit mit Konstruktoren:
1. Konstruktoren haben immer den gleichen Namen wie die Klasse
2. Konstruktoren verfügen über eine Parameterliste, in der die Argumente für die Initialisierung der Objekte übergeben werden können.
3. Sollen keine Initialisierungen bei der Erzeugung des Objektes
ausgeführt werden, so kann der Standardkonstruktor verwendet werden.
Dieser wird verwendet, wenn kein eigener Konstruktor definiert wurde.
24
Initialisierung /(Erzeugung)von Objekten
Bei der Initialisierung von Objekten werden diese im Speicher angelegt und können mit Attributwerten ausgestattet werden.
Wenn new() aufgerufen wird, wird vom System folgendes ausgeführt:
1. Dem Objekt wird Speicherplatz zugewiesen.
2. Der Konstruktor wird aufgerufen.
3. Es wird eine Referenz auf das Objekt zurückgegeben und der Variablen zugewiesen.
Die Variable wird als Referenzvariable bezeichnet.
25
Überladen von Konstruktoren
Entsprechend der Vorgehensweise beim Überladen von Methoden besteht auch die Möglichkeit, Konstruktoren zu überladen. Dazu werden Konstruktoren mit unterschiedlicher Parameteranzahl definiert.
Konstruktoren gleichen Namens werden unterschieden:
• durch die Anzahl der Parameter,
• durch den Typ der Parameter,
• durch die Position der Parameter.
Es erfolgt keine Unterscheidung bezüglich
• der Namen der Parameter
Methoden der Klasse Datum
27
Vererbung
Entsprechend des Grundprinzips der Generalisierung werden gemeinsame Eigenschaften und Attribute zusammengefasst und einer Superklasse
zugeordnet.
Klassendeklaration einer abgeleiteten Klasse:
sichtbar-
keit class klassen-
bezeichner extends
klassen- bezeichner superklasse
Beispiel:
public class Kunde extends Person
Bei der Vererbung ist die Vergabe von Zugriffsrechten zu beachten.
28
Vererbung – abstrakte Klassen
Werden von einer Klasse keine Instanzen abgeleitet, so kann diese Klasse als abstrakte Klasse deklariert werden.
Klassendeklaration einer abstrakten Klasse:
sichtbar-
keit class klassen-
bezeichner
extends
klassen- bezeichner superklasse abstract
29
Zugriffsrechte in Java
Steht vor einer Komponente kein Modifikator, so wird der Komponente das Zugriffsrecht package zugeordnet.
private – zugreifbar in der Klasse ( - )
package – zugreifbar in allen Klassen des Paketes ( ~ ) protected – zugreifbar in allen Subklassen ( # )
public – zugreifbar in allen Klassen ( + )
Kontrollfragen
1. Worin besteht der Unterschied zwischen Instanzvariablen und Klassenvariablen? Wie werden diese in Java deklariert und wie kann auf diese Variablen zugegriffen werden?
2. Was versteht man unter einer Klassenmethode? Welchen Zweck hat diese und wie kann sie verwendet werden?
3. Erläutern Sie die Schritte zur Instanzierung und Initialisierung von Objekten. Welcher Operator wird dabei verwendet? Erzeugen Sie zur Laufzeit ein Objekt fahrzeug1 von der Klasse Fahrzeug.
4. Erläuten Sie die Wirkungsweise des Konstruktors bei der Erzeugung von Objekten. Wie können Parameter an den Konstruktor übergeben werden? Schreiben Sie den Java-
Quelltext für einen Konstruktor der Klasse Fahrzeug, dem als Parameter das Baujahr (ganzzahlig) und der Typ (Zeichenkette) übergeben werden. Die Parameter sind den Instanzvariablen fzbaujahr und fztyp bei der Objekterzeugung zuzuweisen.
5. Erklären Sie den Begriff „Überladen von Methoden“ am Beispiel Konstruktor einer Klasse. Wodurch unterscheiden sich überladene Methoden?
30
Literatur
/BALZERT96/ Balzert, Helmut; Lehrbuch der Softwaretechnik; Spektrum Verlag, 1996
/FORBRIG04/ Forbrig, Peter; Immo O. Kerner, Lehr- und Übungsbuch Softwareentwicklung, Fachbuchverlag Leipzig, 2004 ISBN 3-446-22578-1
/RATZ14/ Ratz, Dietmar; Scheffler, Jens; Seese, Detlef; Wiesenberger, Jan; Grundkurs Programmieren in JAVA (7. Auflage); Carl- Hanser-Verlag, München, Wien; 2014
ISBN 978-3-446-44073-9
31