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 +, -­‐, *, /, ==, >, <, Regeln ¤  Punkt-­‐vor-­‐Strich ¤  AssoziaJv-­‐/KommutaJv-­‐/DistribuJvgesetz ¤  TransiJvität Datentyp Integer 2/3 8 ¨ 
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 Datentyp Integer 3/3 9 o 
Integer ¤ 
Werte ¤ 
OperaJonen ¤ 
Regeln ¤ 
ImplemenJerungsdetails Für den
Programmentwickler
…
…wichtig
…unwichtig
Datentyp Menge 1/2 10 o 
o 
o 
Werte, Datenbereich: ¤  Zahlen
Menge von Zahlen ¤  0, 1, 2, … {}, {1, 3, 5}, … OperaJonen auf der Menge ¤  erzeugen, einfügen, wegnehmen, schauen-­‐ob-­‐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 weggenommen
à Menge leer.
?
11 o 
Datentyp Menge 2/2 ImplemenJerung
?
WichJg bei Datentypen… 12 o 
…ist, was sie tun
nicht, wie sie es tun (= Schnizstelle) (= ImplemenJerung) Abstrakte Datentypen
w  Abstraktion
l 
l 
ADT abstrahieren von Implementierung.
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.
ADT -­‐ DefiniJon 1/3 13 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. DefiniJon 2/3 14 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; DefiniJon 3/3 15 o 
Signatur Eine Liste mit n  dem Namen, n  der Typen der Eingabewerte, und n  des Rückgabewertes einer FunkJon. Beispiel 1/3 16 o 
Punkte im kartesischen Koordinatensystem ¤  Typen Punkte
¤  Importe IR , Wahrheitswerte
¤  FunkJonen neu
IR × IR → Punkt
¤ 
Regeln
X-Wert
Punkt → IR
Y-Wert
Punkt → IR
ist-Ursprung
Punkt → Wahrheitswert
Abstand-von
Punkt × Punkt → IR
verschiebe
Punkt × IR ×IR → Punkt
Beispiel 2/3 17 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
Beispiel 3/3 18 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
NotaJon 1/2 19 <ADT>
::=
<Name>
::=
<List of Types> ::=
<Type>
::=
<List of FuncJons> ::=
<FuncJon>
::=
<Name> Types FuncJons
Axioms
<List of Types>”.” <List of FuncJons>”.” <Ruleset>”.”. <String>. <Type>| <List of Types>”,”<Type>. <String>. <FuncJon>| <List of FuncJons>”,”<FuncJon>. <Signature>. NotaJon 2/2 20 <Ruleset>
::=
<List of Axioms > ::=
< Axiom>
::=
<Theory>
::=
<Theory>|<List of Axioms>. < Axiom >| <List of Axioms >”,”< Axiom>. <boolean Expression>. <Text>. 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
<E>
{
JAVA
ADT in Java 5/6 48 public class List <E> {
private ListElem <E> head;
public List () {
head = null;
}
public void 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 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.