Kapitel 8 ABSTRAKTE DATENTYPEN. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm

Kapitel  8   ABSTRAKTE   DATENTYPEN     Algorithmen  &  Datenstrukturen   Prof.  Dr.  Wolfgang  Schramm   Übersicht   1   1.  Einführung   2.  Al...
Author: Elvira Heidrich
96 downloads 0 Views 2MB Size
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.  

Suggest Documents