View
105
Download
3
Category
Preview:
Citation preview
PKJ 2005/1Stefan Dissmann
Rückblick auf 2005
Was zuletzt in 2005 vorgestellt wurde:
• Klassen mit • Attributen,• Methoden und• Konstruktoren
• Referenzen auf Klassen
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);}
}
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
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
PKJ 2005/5Stefan Dissmann
Konstruktoren, Methoden
In einer Klasse möglich:
• mehrere Konstruktoren mitunterschiedlichen Parameterlisten
• mehrere Methoden mitgleichem Namen und unterschiedlichen Parameterlisten
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
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
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
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
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.
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
PKJ 2005/12Stefan Dissmann
Idee der Verkettung
17
1. für jedes Element ein Objekt anlegen
PKJ 2005/13Stefan Dissmann
Idee der Verkettung
17 9
1. für jedes Element ein Objekt anlegen
2. Objekt kennt weiteres Objekt
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 …
PKJ 2005/15Stefan Dissmann
Technische Umsetzung: Element
1. Problem:Klasse für einzelnes Element der Liste entwickeln
PKJ 2005/16Stefan Dissmann
Technische Umsetzung: Element
1. Problem:Klasse für einzelnes Element der Liste entwickeln
public class IntElement {
}
PKJ 2005/17Stefan Dissmann
Technische Umsetzung: Element
1. Problem:Klasse für einzelnes Element der Liste entwickeln
public class IntElement {
private int wert;
}
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;
}
PKJ 2005/19Stefan Dissmann
Technische Umsetzung: Element
Und Konstruktor und Methoden ergänzen:
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;
}
}
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;
}
}
PKJ 2005/22Stefan Dissmann
Technische Umsetzung: Element
Und weitere Methoden:
public class IntElement {
…
public IntElement gibNachfolger() {
return nachfolger;
}
public int gibWert() {
return wert;
}
}
PKJ 2005/23Stefan Dissmann
Technische Umsetzung: Liste
2. Problem:Klasse für Liste von ganzen Zahlen entwickeln
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() {…};
}
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() {…};
}
PKJ 2005/26Stefan Dissmann
Implementierung: Liste
… und implementieren:
public IntListe() {
anfang = ende = null;
}
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;
}
}
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
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
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
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
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
…
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
…
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
…
PKJ 2005/35Stefan Dissmann
Implementierung: Liste
public int gibErstes() {
if (anfang != null)
return anfang.gibWert();
else
return 0;
}
PKJ 2005/36Stefan Dissmann
Implementierung: Liste
public boolean leer() {
return anfang == null;
}
PKJ 2005/37Stefan Dissmann
Implementierung: Liste
public void löscheErstes() {
if (anfang != ende) {
anfang = anfang.gibNachfolger();
} else {
anfang = ende = null;
}
}
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();
}
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!
Recommended