26
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit nicht-sequentiellen Strukturen Umgang mit Strukturen aus heterogenen Typen In JAVA gelöst durch Klassen und Objekte

PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

Embed Size (px)

Citation preview

Page 1: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/1Stefan Dissmann

Ausblick

Es fehlen noch:

• Möglichkeiten zum Strukturieren größerer Programme

• Umgang mit variabler Zahl von Elementen• Umgang mit nicht-sequentiellen Strukturen• Umgang mit Strukturen aus heterogenen Typen

In JAVA gelöst durch

Klassen und Objekte

Page 2: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/2Stefan Dissmann

Erkenntnisse

Prinzipien bei der Gestaltung von abgeschlossenen Einheiten:

• Kapselung• Jede Einheit hat Grenzen.

• Lokalität• Funktionen und Daten der Einheit sind zusammengefasst.

• konzeptionelle Vollständigkeit• Jede Einheit kann ihre Aufgaben erledigen.

• Geheimhaltung von „Interna“• Jede Einheit verbirgt Daten und Handlungsumsetzung.

• Autonomie• Jede Einheit entscheidet selbstständig.

Page 3: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/3Stefan Dissmann

Klassen und Objekte

Objekt ist abgeschlossene Einheit im JAVA-Programm

Klasse istKonstruktionsbeschreibung für Objekte

Folgerungen:• Klasse wird benötigt, um Objekt zu erzeugen.• Aus einer Klasse können viele Objekte erzeugt werden.

Page 4: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/4Stefan Dissmann

Beispiel – Klasse Studierende

Folgende Daten von jedem Studierenden sollen verwaltet werden:

• Vorname Text• Name Text• Matrikelnummer Zahl• Studiengang Text• Semesterzahl Zahl

Page 5: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/5Stefan Dissmann

Klasse

public class Studierende {

private String name, vorname, studiengang;

private int matNr, semester;

}

Page 6: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/6Stefan Dissmann

Klasse

public class Studierende {

private String name, vorname, studiengang;

private int matNr, semester;

}

neu

Geheimnisprinzip Attribut

Page 7: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/7Stefan Dissmann

Attribut

private String name, vorname, studiengang;

Attribut• ist „Variable “ auf Ebene einer Klasse• steht in der ganzen Klasse zur Verfügung• wird ähnlich vereinbart wie eine Variable in Methode• hat eine Angabe zu Zugriffsrecht (hier: private)

private• verbirgt Attribut innerhalb eines Objektes,• so dass kein Zugriff von Objekten anderer Klassen aus möglich

ist.• Objekte der Klasse Studierende sind völlig abgeschottet!

Page 8: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/8Stefan Dissmann

Methode

Lösung:

• Hinzufügen von Methoden, die auf Attribute zugreifen.• Methoden müssen von außen zugreifbar sein.

Analogie:Tasten des Fernsehers oder Videorekorders

Page 9: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/9Stefan Dissmann

Klasse

public class Studierende {

private String name, vorname, studiengang;

private int matNr, semester;

public void setzeName(String n) {

name = n;

}

public String gibName() {

return name;

}

}

Page 10: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/10Stefan Dissmann

Klasse

public void setzeName(String n) {

name = n;

}

public String gibName() {

return name;

}

• Methoden nutzen Attribut name lesend und schreibend.• Vereinbarung der Methoden ohne static.• Implementierung der Methoden wie bekannt.

Page 11: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/11Stefan Dissmann

Nutzung von Klassen

Offene Fragen:

Wie werden Objekte erzeugt?Wie werden Objekte genutzt?Wie werden Methoden angesprochen?

Page 12: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/12Stefan Dissmann

Nutzung von Klassen

public class TestStud {

public static void main(String[] args) {

Studierende stud;

}

}

• Vereinbart nur eine Referenz, die auf Objekte der Klasse Studierende verweisen kann.

• Dadurch ist noch kein Objekt erzeugt.

Page 13: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/13Stefan Dissmann

Nutzung von Klassen

public class TestStud {

public static void main(String[] args) {

Studierende stud;

stud = new Studierende(); }

}

• Es wird ein neues Objekt der Klasse Studierende erzeugt.• Die Referenz stud verweist auf diese Objekt.•() ist notwendig!

Page 14: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/14Stefan Dissmann

Nutzung von Klassen

public class TestStud {

public static void main(String[] args) {

Studierende stud;

stud = new Studierende(); stud.setzeName("Musterfrau");

}

}

•setzeName des Objekts, auf das stud verweist, wird aufgerufen!

•"Musterfrau" wird als Parameter übergeben.• Folge:

Das Attribut name des Objekts wird auf "Musterfrau" gesetzt.

Page 15: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/15Stefan Dissmann

Nutzung von Klassen

public class TestStud {

public static void main(String[] args) {

Studierende stud;

stud = new Studierende(); stud.setzeName("Musterfrau");

}

}

• Zugriff über .-Notation•x.y heißt (in JAVA) immer:

Nimm das Objekt, auf das x verweist,und von diesem Objekt (die Methode) y.

Page 16: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/16Stefan Dissmann

Nutzung von Klassen

public class TestStud {

public static void main(String[] args) {

Studierende stud;

stud = new Studierende(); stud.setzeName("Musterfrau"); System.out.println("Name:

"+stud.gibName());

}

}

•gibName des Objekts, auf das stud verweist, wird aufgerufen!

•gibName liefert den Wert des Attributs name!

Page 17: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/17Stefan Dissmann

Referenzen auf Klassen

Studierende stud1, stud2;

stud1 = new Studierende();

stud1.setzeName("Schmidt");

stud2 = stud1;

stud2.setzeName("Müller");

stud1.zeigeName();

stud2.zeigeName();

Page 18: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/18Stefan Dissmann

Referenzen auf Klassen

Studierende stud1, stud2;

stud1 = new Studierende();

stud1.setzeName("Schmidt");

stud2 = stud1;

stud2.setzeName("Müller");

stud1.zeigeName();

stud2.zeigeName();

stud1 stud2

Page 19: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/19Stefan Dissmann

Referenzen auf Klassen

Studierende stud1, stud2;

stud1 = new Studierende();

stud1.setzeName("Schmidt");

stud2 = stud1;

stud2.setzeName("Müller");

stud1.zeigeName();

stud2.zeigeName();

stud1 stud2

Studierende

name:

Page 20: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/20Stefan Dissmann

Referenzen auf Klassen

Studierende stud1, stud2;

stud1 = new Studierende();

stud1.setzeName("Schmidt");

stud2 = stud1;

stud2.setzeName("Müller");

stud1.zeigeName();

stud2.zeigeName();

stud1 stud2

Studierende

name:"Schmidt"

Page 21: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/21Stefan Dissmann

Referenzen auf Klassen

Studierende stud1, stud2;

stud1 = new Studierende();

stud1.setzeName("Schmidt");

stud2 = stud1;

stud2.setzeName("Müller");

stud1.zeigeName();

stud2.zeigeName();

stud1 stud2

Studierende

name:"Schmidt"

Page 22: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/22Stefan Dissmann

Referenzen auf Klassen

Studierende stud1, stud2;

stud1 = new Studierende();

stud1.setzeName("Schmidt");

stud2 = stud1;

stud2.setzeName("Müller");

stud1.zeigeName();

stud2.zeigeName();

stud1 stud2

Studierende

name:„Müller"

Page 23: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/23Stefan Dissmann

Referenzen auf Klassen

Studierende stud1, stud2;

stud1 = new Studierende();

stud1.setzeName("Schmidt");

stud2 = stud1;

stud2.setzeName("Müller");

stud1.zeigeName();

stud2.zeigeName();

stud1 stud2

Studierende

name:„Müller"

Page 24: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/24Stefan Dissmann

Referenzen auf Klassen

Studierende stud1, stud2;

stud1 = new Studierende();

stud1.setzeName("Schmidt");

stud2 = stud1;

stud2.setzeName("Müller");

stud1.zeigeName();

stud2.zeigeName();

stud1 stud2

Studierende

name:„Müller"

Page 25: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/25Stefan Dissmann

Attribute – Zuweisung durch expliziten Konstruktor

public Studierende (String n, String vn, String sg) {

name = n;

}

Expliziter Konstruktor ist spezielle Methode:• Name = Name der Klasse• keine Angabe eines Rückgabetyps, kein return• zurückgegeben wird immer ein Objekt der Klasse• Aufruf mit new• Rumpf wird nach Initialisierung ausgeführt • Rumpf kann Programmkonstrukte enthalten

Page 26: PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit

PKJ 2005/26Stefan Dissmann

Lebensdauer von Objekten

Objekt wird durch Aufruf eines Konstruktors erzeugt!

Wann und wie wird ein Objekt vernichtet?Im Prinzip gar nicht; Objekte existieren immer

weiter!