Kapitel 8
ABSTRAKTE DATENTYPEN
Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm
Übersicht 1
1. Einführung 2. Algorithmen 3. EigenschaCen von Programmiersprachen 4. Algorithmenparadigmen 5. Suchen & SorJeren 6. Hashing 7. Komplexität von Algorithmen 8. Abstrakte Datentypen (ADT) 9. Listen 10. Bäume 11. Graphen
Lernziele des Kapitels 2 2
¨
¨
¨
¨
¨
Sie lernen die Bedeutung von Datentypen? Sie können nachvollziehen, wozu man ADT braucht. Sie verstehen wie man ADT definiert. Sie können selbst ADT definieren. Sie können ADT in Java implemenJeren.
Inhalt 3
o
Datentypen ¤ ¤
MoJvaJon EigenschaCen
o
Was sind abstrakte Datentypen Beschreibung von ADT
o
ImplemenJerung von ADT in Java
o
Datentypen in Java 5
o
Einfach ¤ ¤
¤ ¤ ¤ ¤ ¤ ¤
Boolean Integer Long integer Short integer Byte Double Float Character
true, false -‐3, 9, 4, 2345, Integer.MAX_VALUE, …
2.45, 0.123, 0.11E-‐04 'a', '8', '&', …, 65, 66,
Datentypen in Java 6
o
Strings Arrays
o
Vector u.a.
o
"abc", "", "Ab&", … int [4]
Datentyp Integer 1/3 7 o
o
o
Werte, Datenbereich: 1, 2, -‐54, … OperaJonen auf Integer +, -‐, *, /, ==, >, ::= ::=
|. < Axiom >| ”,”< Axiom>. . .
Gemeint ist eine mathematische Theorie, z.B. die Mengenlehre; diese besteht auch aus Axiomen, Gesetzen, etc. Im Rahmen der ADT wird dies einfach als Text notiert
Ausdruck, der wahr zurückliefert (Boolesche Ausdrücke können wahr oder falsch zurückliefern, Axiome sind spezielle Ausdrücke, die immer wahr zurückliefern
Beispiel POINT (erster Versuch) 21
POINT o Type ¤ POINT
w Imports l REAL,
BOOL
w Functions l create
REAL, REAL à POINT l get_x POINT à REAL l get_y POINT à REAL l is-origin POINT à BOOL l distance POINT, POINT à REAL w Axioms l get_x (create (x, y)) = x l get_y (create (x, y)) = y l is-origin (create (x, y)) = true ⇔ x = 0 ∧ y = 0
etc.
etc.
ADT: Types/Imports 22 o o
o
Im ADT verwendete Typen Types ¤ „neue“ Typen (oC nur einer) Imports ¤ Basistypen ¤ OC: Elemenzyp
Liste, Punkt
Boolean, Integer Character, Adresse (à ADT)
ADT: FuncJons 23 o o
Im ADT definierte FunkJonen Angabe der DefiniJons-‐ und Wertebereiche ¤ NotaJon «Name»: «DefiniJonsbereich» → «Wertebereich» ¤ DefiniJonsbereich mit einem Typ «Type» ¤ DefiniJonsbereich mit mehreren Typen «Type1» × «Type2» … ¤ Wertebereich ist ein Typ «Type» append: Liste × Integer → Liste
ADT: Axioms 24 o o
Beschreibt die Wirkung der FunkJonen des ADT NotaJon ¤ (Natürliche Sprache) ¤ MathemaJsch • add (M, i) = M ∪ {i} ¤ Algorithmisch • isempty (add (M, i)) == false • contains (add (M, i), i) == true
Set Set Set
Beispiel POINT 1/2 25
POINT o Type ¤ POINT o Imports ¤ REAL, BOOL, STRING o
FuncJons ¤ create ¤ get_x ¤ get_y ¤ get_r ¤ get_theta
REAL, REAL POINT POINT POINT POINT
à à à à à
POINT REAL REAL REAL REAL
Beispiel POINT 2/2 26
is-‐origin POINT à BOOL ¤ translate POINT, REAL, REAL à POINT ¤ distance POINT, POINT à REAL ¤ toString POINT à STRING Axioms ¤ get_x (create (x, y)) = x ¤ get_y (create (x, y)) = y ¤ is-‐origin (create (x, y)) = true ⇔ x = 0 ∧ y = 0 ¤ translate (create (x, y), a, b) = create (x+a, y+b) 2 2 ¤ distance (create (x, y), create (z, w) ) = sqrt ((x -‐ z) + (y -‐ w) ) ¤ etc. ¤
o
Beispiel POINT ImplemenJerung 1/2 27
implementaLon module Point export type Point; export funcLon create, get_x, get_y, etc.
begin type Point = struct begin real x // x-‐Wert real y // y-‐Wert end struct; …
Beispiel POINT ImplemenJerung 2/2 28
funcLon Point create (real x, y) begin Point p = new Point; p.x = x; p.y = y; return p; end funcLon funcLon real get_x (Point p) begin return p.x end … end module
Beispiel SET 1/2 32
SET o
o
Type ¤ SET FuncJons ¤ EmptySet ¤ add ¤ delete ¤ contains ¤ is-‐empty
SET × INTEGER SET × INTEGER INTEGER SET
à à à à à
SET SET SET BOOL BOOL
Beispiel SET 2/2 33 o
Axioms ¤ isempty (create ()) == true ¤ isempty (add (M, c)) == false ¤ add (add (M, c), c) == add (M, c) ¤ …
ADT in Java 1/2 34
o
o
ADT = ¤ Gekapselt ¤ Schnizstelle ¤ verborgene ImplemenJerung = Objekt ¤ Gekapselt ¤ public ¤ private
ADT als Objekt (Signaturen der public Methoden/ public Daten) realisiert
ADT in Java 2/2 35
o o
o
Mit Java wird ein ADT implemenJert Typen und FunkJonen müssen angeboten werden; Importe müssen verwendet werden; à für Benutzer nutz-‐ (und damit sicht-‐)bar Axiome müssen eingehalten werden à für Benutzer erfahrbar
Beispiel POINT 1/7 36
POINT o
Type ¤ POINT
w Imports l
Ein-/Ausgabe einer Funktion
REAL,
ADT
BOOL
Klassenname
public class Point { ... public double f (...) { ... } }
JAVA
Beispiel POINT 2/7 37
POINT o
FuncJons -‐ create REAL, REAL
à POINT
ADT
Konstruktor (implizit vom Typ Point)
public class Point { ... public Point (double x, double y) { ... } }
JAVA
Beispiel POINT 3/7 38
POINT o
FuncJons ¤ get_x
POINT
à REAL
ADT
?
public class Point { ... public double get_x ... } }
() { JAVA
Beispiel POINT 4/7 39
POINT o
FuncJons ¤ get_x
POINT
à REAL
ADT
Instanz von Point
public class Point { ... public double get_x ... } }
() { JAVA
Beispiel POINT 5/7 40
POINT o FuncJons ¤ translate
POINT, REAL, REAL
public class Point { ... void translate ( double dx, double dy) { ... } }
à POINT
ADT
JAVA
Beispiel POINT 6/7 41
POINT o FuncJons ¤ translate
POINT, REAL, REAL à POINT
public class Point { ... Point translate ( double dx, double dy) { ... } }
ADT
JAVA
Beispiel POINT 7/7 42
POINT o
Axioms ¤ get_x (create (x, y)) = x ¤ get_y (create (x, y)) = y ¤ is-‐origin (create (x, y)) = true ⇔ x = 0 ∧ y = 0
ADT
Keine Axiome o.ä. Angabe der Funktion über Kommentar (z.B. javadoc)
/** * get_x () – liefert X-Wert *
JAVA
ADT in Java 1/6 44
ADT
JAVA
o
Typen
Klassenname
o
Importe
nicht vorhanden – einfach verwenden
o
FunkJonen
-‐ öffentliche Konstruktoren -‐ Signaturen der öffentlichen Klassenmethoden
o
Axiome
nicht vorhanden – nur Kommentar
ADT in Java 2/6 45
o
ADT
JAVA
Signatur Angabe aller Typen
Signatur Angabe aller Typen AUSSER dem Typ der Instanz
ADT
JAVA
ADT in Java 3/6 46 o
JAVA interfaces ¤ beschreiben in JAVA Schnizstellen ¤ Bsp. interface ListInterface { public void addFirst (int value); public int getFirst (); } ¤ Ist ein Interface ein ADT? n Types J n Imports L n FuncJons K „public“ Methoden …jedoch „fehlt“ der Konstruktor n Axioms L
ADT in Java 4/6 47
LIST o
Elementtyp (Platzhalter)
Type ¤ LIST, E, BOOL
public class ... }
List
ADT
{ JAVA
ADT in Java 5/6 48
public class List { private ListElem head; public List () { head = null; } public void addFirst (E val) { head = new ListElem (val, head); } ...
ADT in Java 6/6 49
... public E getFirst () { if (head != null) { return head.value } else { return null } } public boolean isEmpty () { return head == null } ...
Zusammenfassung 50
o
o
Abstrakte Datentypen sind von zentraler Bedeutung für die Realisierung komplexer Strukturen. Ein ADT n Hat eine Menge von Werten. n Hat OperaJonen auf diesen Werten. n Ist nur über eine Schnizstelle zugänglich. n Ist gekapselt. n Definiert seine OperaJonen über eine Schnizstelle. n Hat eine verborgene ImplemenJerung.
o
Das Konzept der ADT lässt sich durch objektorienJerte Programmiersprachen direkt umsetzen.