Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm
ABSTRAKTE DATENTYPEN
Kapitel 8
1
Übersicht
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
2
Lernziele des Kapitels
¨
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.
2
3
Inhalt
o
Datentypen
¤ MoJvaJon
¤ EigenschaCen
o
Was sind abstrakte Datentypen
o
Beschreibung von ADT
o
ImplemenJerung von ADT in Java
5
Datentypen in Java
o
Einfach
¤ Boolean true, false
¤ Integer -‐3, 9, 4, 2345,
Integer.MAX_VALUE, …
¤ Long integer
¤ Short integer
¤ Byte
¤ Double 2.45, 0.123, 0.11E-‐04
¤ Float
¤ Character 'a', '8', '&', …, 65, 66,
6
Datentypen in Java
o
Strings "abc", "", "Ab&", …
o
Arrays int [4]
o
Vector u.a.
7
Datentyp Integer 1/3
o Werte, Datenbereich:
1, 2, -‐54, …
o OperaJonen auf Integer +, -‐, *, /, ==, >, <,
o Regeln
¤ Punkt-‐vor-‐Strich
¤ AssoziaJv-‐/KommutaJv-‐/DistribuJvgesetz
¤ TransiJvität
8
Datentyp Integer 2/3
¨ ImplemenJerung (Auswahl)
¤ Interne Darstellung
n Binär 100101001
n 1. Zeichen Vorzeichen
¤ AddiJon
n Halbaddierer
¤ MulJplikaJon mit 2
n shiC nach links 0101 * 2 à 1010
9
Für den Programm-
entwickler
…
Datentyp Integer 3/3
o
Integer
¤ Werte
¤ OperaJonen
¤ Regeln
¤ ImplemenJerungsdetails
…wichtig
…unwichtig
10
?
Datentyp Menge 1/2
o Werte, Datenbereich:
¤ Zahlen Menge von Zahlen
¤ 0, 1, 2, … {}, {1, 3, 5}, …
o OperaJonen auf der Menge
¤ erzeugen, einfügen, wegnehmen, schauen-‐ob-‐leer, …
o 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 weggenommen à Menge leer.
11
Datentyp Menge 2/2
o
ImplemenJerung
?
12
WichJg bei Datentypen…
o
…ist, was sie tun (= Schnizstelle)
nicht, wie sie es tun (= ImplemenJerung)
Abstrakte Datentypen
w
Abstraktionl ADT abstrahieren von Implementierung.
l Wird in der Informatik häufig verwendet:
ð „Bit“ abstrahiert von physikalischen Zuständen.
ð CPU abstrahiert von einer Menge von Bits und deren Zustandsänderungen.
ð Java Virtual Machine abstrahiert von konkreter CPU.
13
ADT -‐ DefiniJon 1/3
o
Datentyp
¤ Die in einer Programmiersprache vorhandenen
n Grundtypen, wie int, boolean, real, char, …, und
n Strukturierungsmethoden, wie array, struct, … und die darauf definierten OperaJonen wie
+ (AddiJon, StringkonkatenaJon), *, sqrt, [] (SelekJon), …
Anmerkung:
¤ Datentypen hängen von der Programmiersprache ab.
¤ Es gibt heute ein Verständnis über „übliche“ Datentypen:
n ganze Zahlen, Fließkommazahlen, Zeichen, Zeichenkezen.
n Gruppierung gleicharJger und verschiedener Datentypen.
14
DefiniJon 2/3
o
ADT (abstrakter Datentyp)
¤ Ein Datentyp, d.h.
n eine Menge von Werten und
n OperaLonen auf diesen Werten,
n der nur über eine SchniMstelle zugänglich ist, sowie
n Regeln über die Wirkung der OperaJonen auf den Werten.
o
ImplemenLerung (eines ADT)
¤ Ein Programm, das den Datentyp realisiert.
Anmerkung
¤ Zur ImplemenJerung eines ADT werden typischerweise Datenstrukturen aus vorhandenen Datentypen gebildet, z.B. int A [] = new int[10]; int length = 0;
15
DefiniJon 3/3
o
Signatur
Eine Liste mit
n dem Namen,
n der Typen der Eingabewerte, und
n des Rückgabewertes einer FunkJon.
16
Beispiel 1/3
o Punkte im kartesischen Koordinatensystem
¤ Typen
¤ Importe
¤ FunkJonen
¤ Regeln
R I
Punkte
, Wahrheitswerte neu
X-Wert Y-Wert
ist-Ursprung Abstand-von verschiebe
R I
R I
R I I R
R I R
I I R
× → Punkt Punkt →
Punkt →
Punkt → Wahrheitswert Punkt × Punkt →
Punkt × × → Punkt
17
Beispiel 2/3
o Liste von Zeichen
¤ Typen
¤ Importe
¤ FunkJonen
¤ Regeln
Liste
Character, Integer, Boolean empty
addFirst removeFirst getFirst
isEmpty length clone
→ Liste
Liste × Character → Liste Liste → Liste
Liste → Character Liste → Boolean Liste → Integer Liste → Liste isEmpty(empty) = true
getFirst(addFirst(L, a)) = a
isEmpty(removeFirst(addFirst(empty, e))) = true length(addFirst(L, e)) = length(L)+1
18
Beispiel 3/3
o Menge von Zeichen
¤ Typen
¤ Importe
¤ FunkJonen
¤ Regeln
Set
Character, Integer, Boolean emptySet
add remove isEmpty card
contains clone
→ Set
Set × Character → Set Set × Character → Set Set → Boolean
Set → Integer
Set × Character → Boolean Set → Set
19
NotaJon 1/2
<ADT> ::= <Name>
Types <List of Types>”.”
FuncJons <List of FuncJons>”.”
Axioms <Ruleset>”.”.
<Name> ::= <String>.
<List of Types> ::= <Type>| <List of Types>”,”<Type>.
<Type> ::= <String>.
<List of FuncJons> ::= <FuncJon>|
<List of FuncJons>”,”<FuncJon>.
<FuncJon> ::= <Signature>.
20
NotaJon 2/2
<Ruleset> ::= <Theory>|<List of Axioms>.
<List of Axioms > ::= < Axiom >|
<List of Axioms >”,”< Axiom>.
< Axiom> ::= <boolean Expression>.
<Theory> ::= <Text>.
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
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
21
Beispiel POINT (erster Versuch)
POINT
o
Type
¤
POINT
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.
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 etc.
w Imports
l REAL, BOOL
22
ADT: Types/Imports
o Im ADT verwendete Typen
o Types
¤ „neue“ Typen Liste, Punkt
(oC nur einer)
o Imports
¤ Basistypen Boolean, Integer
¤ OC: Elemenzyp Character, Adresse (à ADT)
23
ADT: FuncJons
o Im ADT definierte FunkJonen
o 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
24
ADT: Axioms
o Beschreibt die Wirkung der FunkJonen des ADT
o NotaJon
¤ (Natürliche Sprache)
¤ MathemaJsch
• add (M, i) = M ∪ {i} Set
¤ Algorithmisch
• isempty (add (M, i)) == false Set
• contains (add (M, i), i) == true Set
25
Beispiel POINT 1/2
POINT
o
Type
¤
POINT
o
Imports
¤
REAL, BOOL, STRING
o
FuncJons
¤
create REAL, REAL à POINT
¤
get_x POINT à REAL
¤
get_y POINT à REAL
¤
get_r POINT à REAL
¤
get_theta POINT à REAL
26
Beispiel POINT 2/2
¤
is-‐origin POINT à BOOL
¤
translate POINT, REAL, REAL à POINT
¤
distance POINT, POINT à REAL
¤
toString POINT à STRING
o
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)
¤
distance (create (x, y), create (z, w) ) = sqrt ((x -‐ z)
2+ (y -‐ w)
2)
¤
etc.
27
Beispiel POINT ImplemenJerung 1/2
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;
…
28
Beispiel POINT ImplemenJerung 2/2
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
32
Beispiel SET 1/2
SET
o Type
¤ SET
o FuncJons
¤ EmptySet à SET
¤ add SET × INTEGER à SET
¤ delete SET × INTEGER à SET
¤ contains INTEGER à BOOL
¤ is-‐empty SET à BOOL
33
Beispiel SET 2/2
o Axioms
¤ isempty (create ()) == true
¤ isempty (add (M, c)) == false
¤ add (add (M, c), c) == add (M, c)
¤ …
34
ADT in Java 1/2
o ADT
¤ Gekapselt
¤ Schnizstelle
¤ verborgene ImplemenJerung
o Objekt
¤ Gekapselt
¤ public
¤ private
ADT als Objekt (Signaturen
der public Methoden/
public Daten) realisiert
=
=
35
ADT in Java 2/2
o
Mit Java wird ein ADT implemenJert
o
Typen und FunkJonen müssen angeboten werden;
Importe müssen verwendet werden;
à für Benutzer nutz-‐ (und damit sicht-‐)bar
o
Axiome müssen eingehalten werden
à für Benutzer erfahrbar
36
Beispiel POINT 1/7
POINT
o Type
¤ POINT
public class Point { ...
public double f (...) { ...
} }
ADT
JAVA
Klassenname
w Imports
l REAL, BOOL
Ein-/Ausgabe einer Funktion
37
Beispiel POINT 2/7
POINT
o FuncJons
-‐ create REAL, REAL à POINT
public class Point { ...
public Point
(double x, double y) { ...
} }
Konstruktor
(implizit vom Typ Point)
ADT
JAVA
38
Beispiel POINT 3/7
POINT
o FuncJons
¤ get_x POINT à REAL
public class Point { ...
public double get_x () { ...
} }
?
ADT
JAVA
39
Beispiel POINT 4/7
POINT
o FuncJons
¤ get_x POINT à REAL
public class Point { ...
public double get_x () { ...
} }
ADT
JAVA
Instanz von Point
40
Beispiel POINT 5/7
POINT
o FuncJons
¤ translate POINT, REAL, REAL à POINT
public class Point { ...
void translate (
double dx, double dy) { ...
} }
ADT
JAVA
41
Beispiel POINT 6/7
POINT
o FuncJons
¤ translate POINT, REAL, REAL à POINT
public class Point { ...
Point translate (
double dx, double dy) { ...
} }
ADT
JAVA
42
Beispiel POINT 7/7
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
/**
* get_x () – liefert X-Wert *
Keine Axiome o.ä.
Angabe der Funktion über Kommentar (z.B. javadoc)
ADT
JAVA
44
ADT in Java 1/6
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
45
ADT in Java 2/6
ADT JAVA
o Signatur Signatur
Angabe aller Typen Angabe aller Typen
AUSSER dem Typ der Instanz ADT
JAVA
46
ADT in Java 3/6
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
47
ADT in Java 4/6
LIST
o Type
¤ LIST, E, BOOL
public class List <E> { ...
}
Elementtyp (Platzhalter)
ADT
JAVA
48
ADT in Java 5/6
public class List <E> {
private ListElem <E> head;
public List () { head = null;
}
public void addFirst (E val) { head = new ListElem <E>
(val, head);
} ...
49
ADT in Java 6/6
...
public E getFirst () { if (head != null) { return head.value } else {
return null }
}
public boolean isEmpty () { return head == null
} ...
50
Zusammenfassung
o
Abstrakte Datentypen sind von zentraler Bedeutung für die Realisierung komplexer Strukturen.
o
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