• Keine Ergebnisse gefunden

ABSTRAKTE  DATENTYPEN

N/A
N/A
Protected

Academic year: 2021

Aktie "ABSTRAKTE  DATENTYPEN"

Copied!
46
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen  &  Datenstrukturen   Prof.  Dr.  Wolfgang  Schramm  

ABSTRAKTE   DATENTYPEN    

Kapitel  8  

(2)

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  

(3)

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

(4)

3  

Inhalt  

o 

Datentypen  

¤  MoJvaJon  

¤  EigenschaCen  

o 

Was  sind  abstrakte  Datentypen  

o 

Beschreibung  von  ADT  

o 

ImplemenJerung  von  ADT  in  Java  

(5)

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)

6  

Datentypen  in  Java  

o 

Strings    "abc",  "",  "Ab&",  …  

o 

Arrays    int  [4]  

o 

Vector  u.a.  

(7)

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)

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)

9  

Für den Programm-

entwickler

Datentyp  Integer  3/3  

o 

Integer

 

¤  Werte  

¤  OperaJonen  

¤  Regeln  

¤  ImplemenJerungsdetails  

…wichtig

…unwichtig

(10)

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)

11  

Datentyp  Menge  2/2  

o 

ImplemenJerung  

?

(12)

12  

WichJg  bei  Datentypen…  

o 

…ist,  was  sie  tun      (=  Schnizstelle)  

nicht,  wie  sie  es  tun      (=  ImplemenJerung)  

Abstrakte Datentypen

w 

Abstraktion

l  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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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  

(29)

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                                

(30)

33  

Beispiel  SET  2/2  

o  Axioms  

¤  isempty  (create  ())  ==  true  

¤  isempty  (add  (M,  c))  ==  false  

¤  add  (add  (M,  c),  c)  ==  add  (M,  c)  

¤  …    

(31)

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

=

=

(32)

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  

(33)

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

(34)

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

(35)

38  

Beispiel  POINT  3/7  

POINT  

o  FuncJons  

¤       get_x  POINT  à        REAL    

   

public class Point { ...

public double get_x () { ...

} }  

?

ADT

JAVA

(36)

39  

Beispiel  POINT  4/7  

POINT  

o  FuncJons  

¤       get_x  POINT  à        REAL    

   

public class Point { ...

public double get_x () { ...

} }  

ADT

JAVA

Instanz von Point

(37)

40  

Beispiel  POINT  5/7  

POINT  

o  FuncJons  

¤  translate  POINT,  REAL,  REAL  à  POINT  

public class Point { ...

void translate (

double dx, double dy) { ...

} }

ADT

JAVA

(38)

41  

Beispiel  POINT  6/7  

POINT  

o  FuncJons  

¤  translate  POINT,  REAL,  REAL  à  POINT  

public class Point { ...

Point translate (

double dx, double dy) { ...

} }

ADT

JAVA

(39)

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

(40)

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  

(41)

45  

ADT  in  Java  2/6  

 ADT  JAVA  

o  Signatur  Signatur    

Angabe  aller  Typen  Angabe  aller  Typen    

 AUSSER  dem  Typ  der  Instanz     ADT

JAVA

(42)

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  

(43)

47  

ADT  in  Java  4/6  

LIST  

o  Type  

¤         LIST,                  E,          BOOL  

public class List <E> { ...

}

Elementtyp (Platzhalter)

ADT

JAVA

(44)

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);

} ...

(45)

49  

ADT  in  Java  6/6  

...

public E getFirst () { if (head != null) { return head.value } else {

return null }

}

public boolean isEmpty () { return head == null

} ...

(46)

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 

Das  Konzept  der  ADT  lässt  sich  durch  objektorienJerte  

Programmiersprachen  direkt  umsetzen.  

Referenzen

ÄHNLICHE DOKUMENTE

Lehrstuhl Theoretische Informatik Markus Lohrey. Grundlagen der Theoretischen Informatik

Gioele Zardini Lineare Algebra I/II PVK FS 2018.. Wahr/Falsch Aufgaben:

Die Menge der n × n- Matrizen, so dass die Summe der Eintr¨ age der ersten Spalte gleich der Summe der Eintr¨ age der ersten Zeile ist, bildet keinen Untervektorraum des Vektorraum

Einer Matrix die Summe ihrer Eintr¨ age zuzuordnen, ist eine lineare

Gioele Zardini Lineare Algebra I/II FS 2017.. Wahr/Falsch Aufgaben:

Das Wort „wahr“und die Vorsilbe (Wahrheit) benutzt man, wenn etwas der Wahrheit entspricht, also richtig und nicht gelogen ist.. Beispiel: Es ist wahr, dass ich gestern

„Da die Impfkapazitäten in Geld- ern auch beim geplanten Zwei- Schicht-Betrieb begrenzt sind, ist es möglich, dass nicht allen Pati- enten aus dem südlichen Kreis- gebiet

Die seitens der Hausärzte und Internisten aus- gewählten Personen mit Vorer- krankungen können mit einem speziellen Link eine Buchung für einen Impftermin in Kalkar oder in