Kapitel 8 ABSTRAKTE DATENTYPEN Algrithmen & Datenstrukturen Prf. Dr. Wlfgang Schramm
Übersicht 1 1. Einführung 2. Algrithmen 3. EigenschaCen vn Prgrammiersprachen 4. Algrithmenparadigmen 5. Suchen & SrJeren 6. Hashing 7. Kmplexität vn Algrithmen 8. Abstrakte Datentypen (ADT) 9. Listen 10. Bäume 11. Graphen
Lernziele des Kapitels 2 2 Sie lernen die Bedeutung vn Datentypen? Sie können nachvllziehen, wzu man ADT braucht. Sie verstehen wie man ADT definiert. Sie können selbst ADT definieren. Sie können ADT in Java implemenjeren.
Inhalt 3 Datentypen MJvaJn EigenschaCen Was sind abstrakte Datentypen Beschreibung vn ADT ImplemenJerung vn ADT in Java
Datentypen in Java 5 Einfach Blean true, false Integer - 3, 9, 4, 2345, Integer.MAX_VALUE, Lng integer Shrt integer Byte Duble 2.45, 0.123, 0.11E- 04 Flat Character 'a', '8', '&',, 65, 66,
Datentypen in Java 6 Strings "abc", "", "Ab&", Arrays int [4] Vectr u.a.
Datentyp Integer 1/3 7 Werte, Datenbereich: 1, 2, - 54, OperaJnen auf Integer +, -, *, /, ==, >, <, Regeln Punkt- vr- Strich AssziaJv- /KmmutaJv- /DistribuJvgesetz TransiJvität
Datentyp Integer 2/3 8 ImplemenJerung (Auswahl) Interne Darstellung n Binär 100101001 n 1. Zeichen Vrzeichen AddiJn n Halbaddierer MulJplikaJn mit 2 n shic nach links 0101 * 2 à 1010
Datentyp Integer 3/3 9 Integer Für den Prgrammentwickler Werte OperaJnen wichtig Regeln ImplemenJerungsdetails unwichtig
10 Werte, Datenbereich: Zahlen Menge vn Zahlen 0, 1, 2, {}, {1, 3, 5}, OperaJnen auf der Menge Datentyp Menge 1/2 erzeugen, einfügen, wegnehmen, schauen- b- leer, Regeln Eine leere Menge erzeugt à Menge ist leer.? Eine Zahl wird in Menge eingefügt à Menge ist nicht leer. Menge ist leer, eine Zahl wird eingefügt, diese Zahl wird weggenmmen à Menge leer.
Datentyp Menge 2/2 11 ImplemenJerung?
WichJg bei Datentypen 12 ist, was sie tun (= Schnizstelle) nicht, wie sie es tun (= ImplemenJerung) Abstrakte Datentypen w Abstraktin l ADT abstrahieren vn Implementierung. l Wird in der Infrmatik häufig verwendet: ð Bit abstrahiert vn physikalischen Zuständen. ð CPU abstrahiert vn einer Menge vn Bits und deren Zustandsänderungen. ð Java Virtual Machine abstrahiert vn knkreter CPU.
ADT - DefiniJn 1/3 13 Datentyp Die in einer Prgrammiersprache vrhandenen n Grundtypen, wie int, blean, real, char,, und n Strukturierungsmethden, wie array, struct, und die darauf definierten OperaJnen wie + (AddiJn, StringknkatenaJn), *, sqrt, [] (SelekJn), Anmerkung: Datentypen hängen vn der Prgrammiersprache ab. Es gibt heute ein Verständnis über übliche Datentypen: n ganze Zahlen, Fließkmmazahlen, Zeichen, Zeichenkezen. n Gruppierung gleicharjger und verschiedener Datentypen.
DefiniJn 2/3 14 ADT (abstrakter Datentyp) Ein Datentyp, d.h. n eine Menge vn Werten und n OperaLnen auf diesen Werten, n der nur über eine SchniMstelle zugänglich ist, swie n Regeln über die Wirkung der OperaJnen auf den Werten. ImplemenLerung (eines ADT) Ein Prgramm, das den Datentyp realisiert. Anmerkung Zur ImplemenJerung eines ADT werden typischerweise Datenstrukturen aus vrhandenen Datentypen gebildet, z.b. int A [] = new int[10]; int length = 0;
DefiniJn 3/3 15 Signatur Eine Liste mit n dem Namen, n der Typen der Eingabewerte, und n des Rückgabewertes einer FunkJn.
16 Punkte im kartesischen Krdinatensystem Typen Imprte FunkJnen Punkte I R neu, Wahrheitswerte X-Wert I R I R Punkt Punkt Beispiel 1/3 I R Regeln Y-Wert ist-ursprung Abstand-vn verschiebe Punkt I R Punkt Wahrheitswert Punkt Punkt I R Punkt I R I R Punkt
17 Liste vn Zeichen Typen Imprte FunkJnen Liste Character, Integer, Blean empty addfirst remvefirst getfirst isempty length clne Beispiel 2/3 Liste Liste Character Liste Liste Liste Liste Character Liste Blean Liste Integer Liste Liste Regeln isempty(empty) = true getfirst(addfirst(l, a)) = a isempty(remvefirst(addfirst(empty, e))) = true length(addfirst(l, e)) = length(l)+1
Beispiel 3/3 18 Menge vn Zeichen Typen Imprte FunkJnen Regeln Set Character, Integer, Blean emptyset add remve isempty card cntains clne Set Set Character Set Set Character Set Set Blean Set Integer Set Character Blean Set Set
NtaJn 1/2 19 <ADT> ::= <Name> Types <List f Types>. FuncJns <List f FuncJns>. Axims <Ruleset>.. <Name> ::= <String>. <List f Types> ::= <Type> <List f Types>, <Type>. <Type> ::= <String>. <List f FuncJns> ::= <FuncJn> <List f FuncJns>, <FuncJn>. <FuncJn> ::= <Signature>.
NtaJn 2/2 20 <Ruleset> ::= <Thery> <List f Axims>. <List f Axims > ::= < Axim > <List f Axims >, < Axim>. < Axim> ::= <blean Expressin>. <Thery> ::= <Text>. Gemeint ist eine mathematische Therie, z.b. die Mengenlehre; diese besteht auch aus Aximen, Gesetzen, etc. Im Rahmen der ADT wird dies einfach als Text ntiert Ausdruck, der wahr zurückliefert (Blesche Ausdrücke können wahr der falsch zurückliefern, Axime sind spezielle Ausdrücke, die immer wahr zurückliefern
Beispiel POINT (erster Versuch) 21 POINT Type POINT w Functins l create REAL, REAL à POINT l get_x POINT à REAL l get_y POINT à REAL l is-rigin POINT à BOOL l distance POINT, POINT à REAL etc. w Axims l get_x (create (x, y)) = x l get_y (create (x, y)) = y w Imprts l REAL, BOOL l is-rigin (create (x, y)) = true x = 0 y = 0 etc.
ADT: Types/Imprts 22 Im ADT verwendete Typen Types neue Typen Liste, Punkt (C nur einer) Imprts Basistypen Blean, Integer OC: Elemenzyp Character, Adresse (à ADT)
ADT: FuncJns 23 Im ADT definierte FunkJnen Angabe der DefiniJns- und Wertebereiche NtaJn «Name»: «DefiniJnsbereich» «Wertebereich» DefiniJnsbereich mit einem Typ «Type» DefiniJnsbereich mit mehreren Typen «Type1» «Type2» Wertebereich ist ein Typ «Type» append: Liste Integer Liste
ADT: Axims 24 Beschreibt die Wirkung der FunkJnen des ADT NtaJn (Natürliche Sprache) MathemaJsch add (M, i) = M {i} Set Algrithmisch isempty (add (M, i)) == false Set cntains (add (M, i), i) == true Set
Beispiel POINT 1/2 25 POINT Type POINT Imprts REAL, BOOL, STRING FuncJns create REAL, REAL à POINT get_x POINT à REAL get_y POINT à REAL get_r POINT à REAL get_theta POINT à REAL
Beispiel POINT 2/2 26 is- rigin POINT à BOOL translate POINT, REAL, REAL à POINT distance POINT, POINT à REAL tstring POINT à STRING Axims get_x (create (x, y)) = x get_y (create (x, y)) = y is- rigin (create (x, y)) = true x = 0 y = 0 translate (create (x, y), a, b) = create (x+a, y+b) distance (create (x, y), create (z, w) ) = sqrt ((x - z) 2 + (y - w) 2 ) etc.
Beispiel POINT ImplemenJerung 1/2 27 implementaln mdule Pint exprt type Pint; exprt funcln create, get_x, get_y, etc. begin type Pint = struct begin real x // x- Wert real y // y- Wert end struct;
Beispiel POINT ImplemenJerung 2/2 28 funcln Pint create (real x, y) begin Pint p = new Pint; p.x = x; p.y = y; return p; end funcln funcln real get_x (Pint p) begin return p.x end end mdule
Beispiel SET 1/2 32 SET Type SET FuncJns EmptySet à SET add SET INTEGER à SET delete SET INTEGER à SET cntains INTEGER à BOOL is- empty SET à BOOL
Beispiel SET 2/2 33 Axims isempty (create ()) == true isempty (add (M, c)) == false add (add (M, c), c) == add (M, c)
ADT in Java 1/2 34 ADT = Gekapselt Schnizstelle verbrgene ImplemenJerung = Objekt Gekapselt public private ADT als Objekt (Signaturen der public Methden/ public Daten) realisiert
ADT in Java 2/2 35 Mit Java wird ein ADT implemenjert Typen und FunkJnen müssen angebten werden; Imprte müssen verwendet werden; à für Benutzer nutz- (und damit sicht- )bar Axime müssen eingehalten werden à für Benutzer erfahrbar
Beispiel POINT 1/7 36 POINT Type POINT w Imprts l REAL, BOOL ADT Ein-/Ausgabe Klassenname einer Funktin public class Pint {... public duble f (...) {... } } JAVA
Beispiel POINT 2/7 37 POINT FuncJns - create REAL, REAL à POINT ADT Knstruktr (implizit vm Typ Pint) public class Pint {... public Pint (duble x, duble y) {... } } JAVA
Beispiel POINT 3/7 38 POINT FuncJns get_x POINT à REAL ADT? public class Pint {... public duble get_x () {... } } JAVA
Beispiel POINT 4/7 39 POINT FuncJns get_x POINT à REAL ADT Instanz vn Pint public class Pint {... public duble get_x () {... } } JAVA
Beispiel POINT 5/7 40 POINT FuncJns translate POINT, REAL, REAL à POINT ADT public class Pint {... vid translate ( duble dx, duble dy) {... } } JAVA
Beispiel POINT 6/7 41 POINT FuncJns translate POINT, REAL, REAL à POINT ADT public class Pint {... Pint translate ( duble dx, duble dy) {... } } JAVA
Beispiel POINT 7/7 42 POINT Axims get_x (create (x, y)) = x get_y (create (x, y)) = y is- rigin (create (x, y)) = true x = 0 y = 0 ADT Keine Axime.ä. Angabe der Funktin über Kmmentar (z.b. javadc) /** * get_x () liefert X-Wert * JAVA
ADT in Java 1/6 44 ADT JAVA Typen Klassenname Imprte nicht vrhanden einfach verwenden FunkJnen - öffentliche Knstruktren - Signaturen der öffentlichen Klassenmethden Axime nicht vrhanden nur Kmmentar
ADT in Java 2/6 45 ADT JAVA Signatur Signatur Angabe aller Typen Angabe aller Typen AUSSER dem Typ der Instanz ADT JAVA
ADT in Java 3/6 46 JAVA interfaces beschreiben in JAVA Schnizstellen Bsp. interface ListInterface { public vid addfirst (int value); public int getfirst (); } Ist ein Interface ein ADT? n Types J n Imprts L n FuncJns K public Methden jedch fehlt der Knstruktr n Axims L
ADT in Java 4/6 47 LIST Type LIST, E, BOOL Elementtyp (Platzhalter) ADT public class List <E> {... } JAVA
ADT in Java 5/6 48 public class List <E> { private ListElem <E> head; public List () { head = null; } public vid addfirst (E val) { head = new ListElem <E> (val, head); }...
ADT in Java 6/6 49... public E getfirst () { if (head!= null) { return head.value } else { return null } } public blean isempty () { return head == null }...
Zusammenfassung 50 Abstrakte Datentypen sind vn zentraler Bedeutung für die Realisierung kmplexer Strukturen. Ein ADT n Hat eine Menge vn Werten. n Hat OperaJnen auf diesen Werten. n Ist nur über eine Schnizstelle zugänglich. n Ist gekapselt. n Definiert seine OperaJnen über eine Schnizstelle. n Hat eine verbrgene ImplemenJerung. Das Knzept der ADT lässt sich durch bjektrienjerte Prgrammiersprachen direkt umsetzen.