Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,

Ähnliche Präsentationen


Präsentation zum Thema: "PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,"—  Präsentation transkript:

1 PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden, Aufträgen, Messwerten usw. aber: jeder Typ benötigt eine neue Implementierung

2 PRJ 2007/2 Stefan Dissmann Motivation Bekannte Lösung: Liste mit Elementen, die Referenzen auf Object beinhalten Probleme: nicht typsicher, d.h. es können Kunden und Aufträge gemischt werden Methoden liefern Referenzen auf Object, die per Type-Cast zugewiesen werden müssen

3 PRJ 2007/3 Stefan Dissmann Generische/Parametrisierte Klassen Bessere Lösung: Klassen, die Typ-Parameter besitzen. Bisher: Parameter übergeben Werte! Jetzt: Spezielle Parameter übergeben Klassen-Namen!

4 PRJ 2007/4 Stefan Dissmann Rückblick public class IntElement { private int wert; private IntElement nachfolger; public IntElement(int w) {wert = w; nachfolger = null;} public void verkette(IntElement n) {nachfolger = n;} public IntElement gibNachfolger() {return nachfolger;} public int gibWert() {return wert;} }

5 PRJ 2007/5 Stefan Dissmann Rückblick public class IntListe { private IntElement anfang, ende; public IntListe() { anfang = ende = null; } public void fügeAn(int w) { IntElement neu = new IntElement(w); if (anfang == null) {anfang = ende = neu; } else {ende.verkette(neu); ende = neu; } } public int gibErstes() { if (anfang != null) return anfang.gibWert(); else return 0; } public void löscheErstes() { if (anfang != ende) { anfang = anfang.gibNachfolger(); } else { anfang = ende = null;} } public boolean leer() {return anfang == null;} }

6 PRJ 2007/6 Stefan Dissmann Beispiel: Generisches Element public class Element { private T wert; private Element nachfolger; public Element(T w){wert = w; nachfolger = null;} public void verkette(Element n){nachfolger = n;} public Element gibNachfolger(){return nachfolger;} public T gibWert() { return wert; } }

7 PRJ 2007/7 Stefan Dissmann Beispiel: Generische Liste public class Liste { private Element anfang, ende; public Liste() { anfang = ende = null; } public void fügeAn(T w) { Element neu = new Element (w); if (anfang == null) {anfang = ende = neu; } else { ende.verkette(neu); ende = neu; } } public T gibErstes() { if (anfang != null) return anfang.gibWert(); else return null; } … }

8 PRJ 2007/8 Stefan Dissmann Beispiel: Anwendung public class TestVonListe { public static void main(String args[]) { Liste zahlen = new Liste (); zahlen.fügeAn( new Integer(19) ); zahlen.fügeAn( new Integer(3) ); zahlen.fügeAn( new Integer(28) ); while (!zahlen.leer()) { System.out.println(zahlen.gibErstes()); zahlen.löscheErstes(); }

9 PRJ 2007/9 Stefan Dissmann Beispiel: Anwendung Die folgende Vereinbarung führt zu der gewünscht Liste, die ganze Zahlen verarbeiten kann: Liste zahlen = new Liste (); Fehlt jedoch das vordere : Liste zahlen = new Liste (); so ist dieses gleichbedeutend mit: Liste zahlen = new Liste (); Diese Initialisierung ist zulässig, aber zahlen präsentiert sich nun nach außen als Liste und nicht als Liste.


Herunterladen ppt "PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,"

Ähnliche Präsentationen


Google-Anzeigen