• Keine Ergebnisse gefunden

Einführung in die Informatik –Algorithmen und Datenstrukturen

N/A
N/A
Protected

Academic year: 2022

Aktie "Einführung in die Informatik –Algorithmen und Datenstrukturen"

Copied!
31
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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)

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)

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)

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)

5

Grundpfeiler der objektorientierten Programmierung

/Quelle: RATZ2010 – Seite 188/

(6)

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)

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)

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)

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()

(10)

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

(11)

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

(12)

Klasse Datum

(13)

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)

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)

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)

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)

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)

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)

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)

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

(21)

Klasse Datum

(22)

/**

* 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)

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)

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)

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

(26)

Methoden der Klasse Datum

(27)

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)

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)

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 ( + )

(30)

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

(31)

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

Referenzen

ÄHNLICHE DOKUMENTE

Warum muß hier ein eigener Kopierkonstruktor und eine eigene Wertzuwei- sung programmiert werden. Implementieren Sie einen

Ein Algorithmus ist eine endliche Folge von eindeutigen Anweisungen, mit- tels derer in endlich vielen Schritten aus vorgegebenen spezifizierten Einga- begr¨ oßen

Regular train tickets have time stamping printed up to date, but a platform ticket is printed up to minutes. At that time, the ticket collectors suddenly started purchasing

Erg¨ anzen sie dessen Ausgabe durch die zus¨ atzliche Ausgabe einer War- nung, wenn nach dem Prompt Bitte einen Wochentag eingeben: mehr als ein Wort eingegeben wurde...

(Ein Stack oder Kellerspeicher ist ein linearer Speicher mit Zugriff nach dem FILO — first in last out — Prinzip.) Die Operationen sollen heißen: new, push, pop,

Vergessen Sie bitte nicht, daß in einem sicher- heitskritischen Raum nur berechtigte Personen Eintritt erlangen d¨ urfen und daß die Menge der zutrittsberechtigten Personen

they told the dispatchers that an alarm had been given to a fire station, when in reality the fire station did not receive the alarm, and kept playing cards and wondering why there

• inOrder: ¨ Ahnlich; hier wird ein Baum-Knotenzeiger jedoch h¨ ochstens zweimal auf den Stack gepush’t: Beim ersten pop’en wird sowohl der Baum-Knotenzeiger als auch sein linker