39
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf Klassen

PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

Embed Size (px)

Citation preview

Page 1: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/1Stefan Dissmann

Rückblick auf 2005

Was zuletzt in 2005 vorgestellt wurde:

• Klassen mit • Attributen,• Methoden und• Konstruktoren

• Referenzen auf Klassen

Page 2: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/2Stefan Dissmann

Klasse Studierende

public class Studierende {private String name, vorname, studiengang;private int matNr, semester;private Datum geburt, beginn;

public Studierende (String n) { name = n;}public String gibName() {

return name; }

public void zeigeName() { System.out.println(name);}

}

Page 3: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/3Stefan Dissmann

Referenzen auf Klassen

Studierende stud1, stud2;

stud1 = new Studierende();

stud1.setzeName("Schmidt");

stud2 = stud1;

stud2.setzeName("Müller");

stud1 stud2

Studierende

name:„Müller"

Mehrere Referenzen können auf ein Objekt verweisen

Referenzen können während der Ausführung gesetzt werden

Page 4: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/4Stefan Dissmann

Konstruktoren

public Studierende (String n) {

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 5: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/5Stefan Dissmann

Konstruktoren, Methoden

In einer Klasse möglich:

• mehrere Konstruktoren mitunterschiedlichen Parameterlisten

• mehrere Methoden mitgleichem Namen und unterschiedlichen Parameterlisten

Page 6: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/6Stefan Dissmann

Rückblick - 7.12.2005

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 7: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/7Stefan Dissmann

Rückblick - 7.12.2005

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 8: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/8Stefan Dissmann

Rückblick - 7.12.2005

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 9: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/9Stefan Dissmann

Rückblick - 7.12.2005

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 10: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/10Stefan Dissmann

Verkettete datenstruktur: Liste

Problem:Liste, die eine beliebige Zahl von Elementen verwaltet

• Operationen:Erzeugen, Anfügen, Anfang lesen, Anfang löschen, Leerheitstest

• Zunächst zur Vereinfachung:Jedes Element enthält nur eine ganze Zahl.

Page 11: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/11Stefan Dissmann

Verkettete datenstruktur: Liste

Problem:Liste, die eine beliebige Zahl von Elementen verwaltet

• Operationen:Erzeugen, Anfügen, Anfang lesen, Anfang löschen, Leerheitstest

• Zunächst zur Vereinfachung:Jedes Element enthält nur eine ganze Zahl.

Lösung:Jedes Element kennt nur genau seinen Nachfolger verkettete Datenstruktur

Page 12: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/12Stefan Dissmann

Idee der Verkettung

17

1. für jedes Element ein Objekt anlegen

Page 13: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/13Stefan Dissmann

Idee der Verkettung

17 9

1. für jedes Element ein Objekt anlegen

2. Objekt kennt weiteres Objekt

Page 14: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/14Stefan Dissmann

Idee der Verkettung

17 9 33

1. für jedes Element ein Objekt anlegen

2. Objekt kennt weiteres Objekt

3. und so fort …

Page 15: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/15Stefan Dissmann

Technische Umsetzung: Element

1. Problem:Klasse für einzelnes Element der Liste entwickeln

Page 16: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/16Stefan Dissmann

Technische Umsetzung: Element

1. Problem:Klasse für einzelnes Element der Liste entwickeln

public class IntElement {

}

Page 17: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/17Stefan Dissmann

Technische Umsetzung: Element

1. Problem:Klasse für einzelnes Element der Liste entwickeln

public class IntElement {

private int wert;

}

Page 18: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/18Stefan Dissmann

Technische Umsetzung: Element

1. Problem:Klasse für einzelnes Element der Liste entwickeln

public class IntElement {

private int wert;

private IntElement nachfolger;

}

Page 19: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/19Stefan Dissmann

Technische Umsetzung: Element

Und Konstruktor und Methoden ergänzen:

Page 20: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/20Stefan Dissmann

Technische Umsetzung: Element

Und Konstruktor und Methoden ergänzen:

public class IntElement {

private int wert;

private IntElement nachfolger;

public IntElement(int w) {

wert = w;

nachfolger = null;

}

public void verkette(IntElement n) {

nachfolger = n;

}

}

Page 21: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/21Stefan Dissmann

Technische Umsetzung: Element

Und Konstruktor und Methoden ergänzen:

public class IntElement {

private int wert;

private IntElement nachfolger;

public IntElement(int w) {

wert = w;

nachfolger = null;

}

public void verkette(IntElement n) {

nachfolger = n;

}

}

Page 22: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/22Stefan Dissmann

Technische Umsetzung: Element

Und weitere Methoden:

public class IntElement {

public IntElement gibNachfolger() {

return nachfolger;

}

public int gibWert() {

return wert;

}

}

Page 23: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/23Stefan Dissmann

Technische Umsetzung: Liste

2. Problem:Klasse für Liste von ganzen Zahlen entwickeln

Page 24: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/24Stefan Dissmann

Technische Umsetzung: Liste

2. Problem:Klasse für Liste von ganzen Zahlen entwickeln

public class IntListe {

public IntListe() {…};

public void fügeAn(int w) {…};

public int gibErstes() {…};

public void löscheErstes() {…};

public boolean leer() {…};

}

Page 25: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/25Stefan Dissmann

Technische Umsetzung: Liste

… und Attribute ergänzen:

public class IntListe {

private IntElement anfang, ende;

public IntListe() {…};

public void fügeAn(int w) {…};

public int gibErstes() {…};

public void löscheErstes() {…};

public boolean leer() {…};

}

Page 26: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/26Stefan Dissmann

Implementierung: Liste

… und implementieren:

public IntListe() {

anfang = ende = null;

}

Page 27: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/27Stefan Dissmann

Implementierung: Liste

… und implementieren:

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

}

Page 28: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/28Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

} anfang ende

Page 29: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/29Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

} wert nachfolger

neu

anfang ende

Page 30: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/30Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

} wert nachfolger

neu

null

anfang ende

Page 31: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/31Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

}

null

anfang ende

wert nachfolger

neu

Page 32: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/32Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

}

wert nachfolger

wert nachfolger

anfang ende

wert nachfolger

neu

Page 33: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/33Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

}

wert nachfolger

wert nachfolger

anfang ende

wert nachfolger

neu

Page 34: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/34Stefan Dissmann

Implementierung: Liste

public void fügeAn(int w) {

IntElement neu = new IntElement(w);

if (anfang == null) {

anfang = ende = neu;

} else {

ende.verkette(neu);

ende = neu;

}

}

wert nachfolger

wert nachfolger

anfang ende

wert nachfolger

neu

Page 35: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/35Stefan Dissmann

Implementierung: Liste

public int gibErstes() {

if (anfang != null)

return anfang.gibWert();

else

return 0;

}

Page 36: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/36Stefan Dissmann

Implementierung: Liste

public boolean leer() {

return anfang == null;

}

Page 37: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/37Stefan Dissmann

Implementierung: Liste

public void löscheErstes() {

if (anfang != ende) {

anfang = anfang.gibNachfolger();

} else {

anfang = ende = null;

}

}

Page 38: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/38Stefan Dissmann

Anwendung der Liste

IntListe zahlen = new IntListe();zahlen.fügeAn(19);

zahlen.fügeAn(3);

zahlen.fügeAn(28);

while (!zahlen.leer()) {

System.out.println(zahlen.gibErstes());

zahlen.löscheErstes();

}

Page 39: PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf

PKJ 2005/39Stefan Dissmann

Anwendung der Liste

IntListe zahlen = new IntListe();zahlen.fügeAn(19);

zahlen.fügeAn(3);

zahlen.fügeAn(28);

while (!zahlen.leer()) {

System.out.println(zahlen.gibErstes());

zahlen.löscheErstes();

}

Anmerkung:Bei der Benutzung von IntListe wird IntElement nicht

benötigt!