• Keine Ergebnisse gefunden

A nw endungsbei spi el m it A rr ayLi st ( fal sch! )

N/A
N/A
Protected

Academic year: 2021

Aktie "A nw endungsbei spi el m it A rr ayLi st ( fal sch! )"

Copied!
26
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Softwaretechnologie, © Prof. Uwe Aßmann Technische Universit Dresden, Fakultät Informatik1

"Der Aufrufer programmiert gegen die Schnittstelle, er befindet sich sozusagen im luftleeren Raum." Siedersleben/Denert, Wie baut man Informationssysteme, Informatik-Spektrum, August 2000

Teil II) Objektorientierte Implementierung 11) P rogr am m ier en gegen S chni ttst el len

Prof. U. Aßmann, Softwaretechnologie2

O bj ekt or ient ier te Im pl em ent ier ung m it Java- D at enst rukt ur en 10 V er fe in er n vo n A sso zi at io ne n m it de m Ja va -2 C ol le ct io n Fr am ew or k 11 P ro gr am m ie re n ge ge n S ch ni tt st el le n A usw ah l vo n D at en st ru kt ur en P er si st en te D at en ha ltu ng

(2)

Prof. U. Aßmann, Softwaretechnologie

S ch ni tts tel len und Im pl em ent ie ru nge n im C ol lect ion- Fr am ew or k

<<interface>> Collection <<interface>> Map <<interface>> SortedSet<<interface>> SortedMap LinkedList

ArrayList HashSet TreeSet

HashMap TreeMap

<<interface>> Set<<interface>> List

Vererbung (extends) Implementierung (implements) <<interface>> Queue PriorityQueue Vector Stack Prof. U. Aßmann, Softwaretechnologie

import java.util.ArrayList; ... class Bestellung {

private String kunde; private ArrayList liste; private int anzahl = 0; public Bestellung(String kunde) { this.kunde = kunde; this.liste = new ArrayList(); }

public void neuePosition (Bestellposition b) { liste.add(b); }

public void loeschePosition (int pos) { liste.remove(pos); } ...

Typ anp assun gen m it S chn itt st el len : G eor dnet e Li st en m it A rr ayLi st ( 1)

(3)

Prof. U. Aßmann, Softwaretechnologie5

A nw endungsbei spi el m it A rr ayLi st ( fal sch! )

... public void sonderpreis (int pos, int preis) { liste.get(pos).einzelpreis(preis); } ...

C om pi le rm el du ng : „

Method einzelpreis(int) not found in class java.lang.Object.“

liste.get(pos).einzelpreis(preis); ? ArrayList

definiert auf

Bestellposition Object

Spezialisierung von Object auf Bestellposition? Prof. U. Aßmann, Softwaretechnologie6

Typanpassungen auf E lem ent typen

Bestellung – kunde: String – anzahl: int liste

java.util.ArrayList add(Object o) get(pos: int): Object ...

1Object* Bestell- position

* Typanpassung (cast): •Operationen der Oberklasse passen immer auch auf Objekte der Unterklasse •Operationen der Unterklasse auf Objekte einer Oberklasse anzuwenden, erfordert explizite Typanpassung (dynamic cast): ( Typ ) Objekt hier: (Bestellposition)liste.get(pos)

Zusicherung: Alle von einem Bestellung-Objekt über die liste-Assoziation erreichbaren Objekte sind aus der Klasse Bestellposition.

(4)

Prof. U. Aßmann, Softwaretechnologie

A nw endungsbei spi el m it A rr ayLi st ( 2)

public void sonderpreis (int pos, int preis) {

((Bestellposition)liste.get(pos)).einzelpreis(preis); }

public int auftragssumme() { int s = 0; for(int i=0; i<liste.size(); i++) s +=

((Bestellposition)liste.get(i)).positionspreis();

return s; }

public void print () { System.out.println("Bestellung fuer Kunde "+kunde); for(int i=0; i<liste.size(); i++) System.out.println(liste.get(i)); System.out.println("Auftragssumme: "+auftragssumme()); System.out.println(); } } Online: Bestellung1.java Prof. U. Aßmann, Softwaretechnologie

G eor dnet e C ol lect ions II - java. ut il. Li nkedLi st ( A uszug) public class LinkedList implements List { public boolean add (Object o); public boolean remove (Object o); public void clear(); public boolean isEmpty(); public boolean contains (Object o); public int size(); public Object get (int index); public Object set (int index, Object element) public Object remove (int index); public int indexOf (Object o); public void addFirst (Object o); public void addLast (Object o); ... }

Online: Bestellung3.javaAnwendungsbeispiel mit LinkedList:

(5)

Softwaretechnologie, © Prof. Uwe Aßmann, Prof. Heinrich Hussmann9

11 .1 Polymorphe Containe r durch Schnittstellen

Prof. U. Aßmann, Softwaretechnologie10

P ro gr am m ie re n g eg en S ch nittste lle n -- P olym or ph e Co nta in er

class Bestellung { private String kunde; private List liste; ... // Konstruktor sh. nächste Folien public void neuePosition (Bestellposition b) { liste.add(b); } public void loeschePosition (int pos) { liste.remove(pos); } public void sonderpreis (int pos, int preis) { ((Bestellposition)liste.get(pos)).einzelpreis(preis); } List ist ein Interface,

keine Klasse !

!

(6)

Prof. U. Aßmann, Softwaretechnologie

•ArrayList: class Bestellung { private String kunde; private List liste; public Bestellung(String kunde) { this.kunde = kunde; this.liste = new ArrayList(); } ... •LinkedList

:

class Bestellung { private String kunde; private List liste; public Bestellung(String kunde) { this.kunde = kunde; this.liste = new LinkedList(); } ...

P ol ym or phe C ont ai ner : W echsel der D at enst rukt ur

List ist ein Interface,

keine Klasse !

!

Code muß bei Wechsel der

Datenstruktur nur an einer Stelle (Konstruktor) geändert werden !

Prof. U. Aßmann, Softwaretechnologie

S tandar dal gor ithm en in der A lgo rit hm enkl asse java. ut il. C ol lect ions

Algorithmenklassen

e nt ha lte n A lg or ith m en , d ie a uf e in e r Fa m ili e vo n an de re n K la sse n ar be ite n

Hier: java.util.Collections enthält Algorithmen auf beliebigen Klassen, die das Collection- bzw. List-Interface implementieren Bei manchen Operationen ist Ordnung auf Elementen vorausgesetzt. Achtung: Statische Operationen! public class Collections { public static Object max (Collection coll); public static Object min (Collection coll); public static int binarySearch(List list, Object key); public static void reverse (List list); public static void sort (List list) ... }

(7)

Prof. U. Aßmann, Softwaretechnologie13

P rädi kat -S chni ttst el len (. ..abl e S chni ttst el len)

Prädikat-Schnittstellen

d rü cke n be st im m te E ig en sch af t e in er K la sse au s. S ie w er de n of t m it de m S uf fix “a bl e” b en an nt :

Iterable Clonable Serializable

B e isp ie l: ge o rd ne te S ta nd ar dd a te nt yp en ( z. B . S tr in g o de r L ist ) im pl em en tie re n di e P rä di ka tsch ni tt st el le

Comparable:

public interface Comparable { public int compareTo (Object o); }

R esu lta t ist kl ei ne r/ gl ei ch /g rö ße r 0: ge na u da nn w en n "t hi s" kl ei ne r/ gl ei ch /g rö ße r al s O bj ekt o

Softwaretechnologie, © Prof. Uwe Aßmann Technische Universit Dresden, Fakultät Informatik14

11.2 Entwurfs mus ter Iterator

(8)

Prof. U. Aßmann, Softwaretechnologie

E nt w ur fsm ust er It er at or (I m pl em ent ier ungsm ust er )

N am e:

Iterator

(a uch : S tr ea m , C ur so r, E nu m er at io n)

P ro b le m : S eq ue n tie lle s, p ol ym o rp he s D ur ch la uf en d e r E le m en te e in es st ru kt ur ie re n O bj ekt s od er e in er C ol le ct io n.

Aufzählen der in einem “Behälter” befindlichen Elemente durch Herausziehen (pull) Keine Aussage über die Reihenfolge!

Lö su ng :

elements(): Iterator

Container Element

next() hasNext()

Iterator ConcreteIterator

{abstract} <<create>>

pull.. * Prof. U. Aßmann, Softwaretechnologie

Iter at or -B ei spi el in der JD K ( A rr ayLi st )

1 Bestellung – kunde: String – anzahl: intliste Object

java.util.ArrayList add(o: Object) get(pos: int): Object iterator(): Iterator ... *

<<create>>

<<interface>> java.util.Iterator hasNext() next() Concrete IteratorAggregate Element

Iterator Klassenname nicht bekannt, weil privat (z.B. ArrayListIterator)

(9)

Prof. U. Aßmann, Softwaretechnologie17

Iter at or -I m pl em ent ier ungsm ust er

V er w en du ng sb ei sp ie l:

List list; .. Iterator i = list.

iterator(); while (i.hasNext()) { doSomeThing(i.next()); }

List list; .. Iterator i = list.

iterator(); while (i.hasNext()) { doSomeThing(i.next()); } Prof. U. Aßmann, Softwaretechnologie18

A nw endungsbei spi el m it Iter at or en

import java.util.Iterator; ... class Bestellung { private String kunde; private ArrayList liste; ... public int auftragssumme() { Iterator i = liste.iterator(); int s = 0; while (i.hasNext()) s += ((Bestellposition)i.next()).positionspreis(); return s; } ... } Online: Bestellung2.java

(10)

Softwaretechnologie, © Prof. Uwe Aßmann, Prof. Heinrich Hussmann19

11.3 Auswahl von Implementierungen von Datenstrukturen

Prof. U. Aßmann, Softwaretechnologie

W ei ter e Im pl em ent ier ungen in der C ol lect ion- H ier ar chi e

<<interface>> Collection <<interface>> Set <<interface>> SortedSet

<<interface>> List<<interface>> Map <<interface>> SortedMap LinkedList

ArrayList TreeSet

HashSet TreeMap

HashMap

Vererbung (extends) Implementierung (implements) VectorHashtable

(11)

Prof. U. Aßmann, Softwaretechnologie21

W el ch e Li st en- Im pl em ent ier un g so ll m an w ähl en?

In ne re S ch le ife n bi ld e n di e „ he iße n P un kt e“ ( h ot sp o ts) e in es P ro gr am m s

Optimierung von inneren Schleifen durch Auswahl von Implementierungen mit geeignetem Zugriffsprofil

G em esse ne r re la tive r A uf w an d fü r O pe ra tio ne n au f L ist en : (a us E cke l, Th in ki ng in Ja va , 2n d ed ., 2 00 0)

Stärken von ArrayList: wahlfreier Zugriff Stärken von LinkedList: Iteration, Einfügen und Entfernen irgendwo in der Liste Vector generell die langsamste Lösung

Typ Le se n It er at io n E in fü ge n E nt fe rn en ar ra y 14 30 38 50 -- -- A rr ayL ist 30 70 12 20 0 50 0 46 85 0 Li nke dL ist 16 32 0 91 10 11 0 60 V ect or 48 90 16 25 0 55 0 46 85 0

Prof. U. Aßmann, Softwaretechnologie22

C ol lect ion Fr am ew or k (Ü ber bl ick) (M engen ohne M ehr fachei nt rag)

<<interface>> Collection <<interface>> Set <<interface>> SortedSet

<<interface>> List<<interface>> Map <<interface>> SortedMap LinkedList

ArrayList TreeSet

HashSet TreeMap

HashMap

Vererbung (extends) Implementierung (implements)

(12)

Prof. U. Aßmann, Softwaretechnologie

U ngeor dnet e M engen: java. ut il. S et ( A uszug)

// Query methods + Object get(int index); // Zustandsveränderer + boolean add (Object o);

<<interface>> Set

// Query methods + boolean isEmpty(); + boolean contains(Object o); + boolean equals(Object o); + int hashCode(); + Iterator iterator(); // Repräsentations-Trans- // formierer + Object[] toArray(); // Zustandsveränderer + boolean add (Object o); + boolean remove (Object o); + void clear();

<<interface>> Collection Prof. U. Aßmann, Softwaretechnologie

A nw endungsbei spi el für S et

Artikel – name: String – preis: int + preis(): int

Warengruppe – name: String – lagerplatz: String

*

1

+ add (a: Artikel) + anzahl(): int

(13)

Prof. U. Aßmann, Softwaretechnologie25

java. ut il. H ashS et ( A uszug)

(Anmerkung: Erläuterung von Hashfunktionen folgt etwas später !)

// Query methods + Object get(int index); // Zustandsveränderer + boolean add (Object o);

<<interface>> Set// Query methods + boolean isEmpty(); + boolean contains(Object o); + boolean equals(Object o); + int hashCode(); + Iterator iterator(); // Repräsentations-Trans- // formierer + Object[] toArray(); // Zustandsveränderer + boolean add (Object o); + boolean remove (Object o); + void clear();

<<interface>> Collection // Konstruktor # HashSet(int initialCapacity, float loadFactor); + Object get(int index); + int hashCode() // Zustandsveränderer + boolean add (Object o);

<<interface>> HashSet Prof. U. Aßmann, Softwaretechnologie26

A nw endungsbei spi el m it H ashS et class Warengruppe { private String name; private String lagerplatz; private

Set

inhalt;

public Warengruppe (String name, String lagerplatz) {

this.name = name; this.lagerplatz = lagerplatz; this.inhalt =

new HashSet()

; }

public void add (Artikel a) { inhalt.add(a); }

public int anzahl() { return inhalt.size(); }

public String toString() { String s = "Warengruppe "+name+"\n"; Iterator it = inhalt.iterator(); while (it.hasNext()) { s += " "+(Artikel)it.next(); }; } }

Online: Warengruppe0.java

(14)

Prof. U. Aßmann, Softwaretechnologie

W ann si nd O bj ekt e gl ei ch? (1)

V er gl ei ch m it O pe ra tio n == :

Referenzgleichheit, d.h. physische Identität der Objekte Typischer Fehler: Stringvergleich mit "==" (ist nicht korrekt, geht aber meistens gut!)

V er gl ei ch m it o.equals()

: deklariert in java.lang.Object überdefiniert in vielen Bibliotheksklassen z.B. java.lang.String für selbstdefinierte Klassen Standardbedeutung Referenzgleichheit bei Bedarf selbst überdefinieren ! (Ggf. fürkompatible Definition der Operation o.hashCode() aus java.lang.Object sorgen) Online: Warengruppe1.java Prof. U. Aßmann, Softwaretechnologie

W ann si nd O bj ekt e gl ei ch? (2) R ef er enzgl ei chhei t public static void main (String[] args) { Warengruppe w1 = new Warengruppe("Moebel","L1"); w1.add(new Artikel("Tisch",200)); w1.add(new Artikel("Stuhl",100)); w1.add(new Artikel("Schrank",300)); w1.add(new Artikel("Tisch",200)); System.out.println(w1); } S yst em au sg ab e be im B en ut ze n de r S ta nd ar d- G le ich he it:

Warengruppe Moebel Tisch(200) Tisch(200) Schrank(300) Stuhl(100) Online: Warengruppe0.java

(15)

Prof. U. Aßmann, Softwaretechnologie29

W ann si nd O bj ekt e gl ei ch? (3) R ef er enzgl ei chhei t

public static void main (String[] args) {

Artikel tisch = new Artikel("Tisch",200); Artikel stuhl = new Artikel("Stuhl",100); Artikel schrank = new Artikel("Schrank",300);

Warengruppe w2 = new Warengruppe("Moebel","L2"); w2.add(tisch); w2.add(stuhl); w2.add(schrank); w2.add(

tisch

); System.out.println(w1); } S yst em au sg ab e:

Warengruppe Moebel Schrank(300) Tisch(200) Stuhl(100) Es wurde zweifach dasselbe Tisch-Objekt übergeben ! (Gleiches Verhalten bei Strukturgleichheit, s. Warengruppe1.java) Prof. U. Aßmann, Softwaretechnologie30

java. ut il. S or tedS et ( A uszug)

// Query methods + Object get(int index); // Zustandsveränderer + boolean add (Object o);

<<interface>> Set// Query methods + boolean isEmpty(); + boolean contains(Object o); + boolean equals(Object o); + int hashCode(); + Iterator iterator(); // Repräsentations-Trans- // formierer + Object[] toArray(); // Zustandsveränderer + boolean add (Object o); + boolean remove (Object o); + void clear();

<<interface>> Collection + Object first(); + Object last()

<<interface>> SortedSet

(16)

Prof. U. Aßmann, Softwaretechnologie

java. ut il. T reeS et

ja va .u ti l. T re e S e t im p le m e n ti e rt e in g e o rd n e te M e n g e m it H ilf e e in e s B a u m e s u n d b e n ö ti g t z u m S o rt ie re n d e s se n d ie S c h n it ts te lle

Comparable

M o d ifi k a ti o n d e r K la s se W a re n g ru p p e :

A be r S yst em re akt io n:

Exception in thread "main" java.lang.ClassCastException: Artikel at java.util.TreeMap.compare(TreeMap.java, Compiled Code) in

ja va .u til .T re eS et : public class TreeSet …

implements SortedSet

{ … }

class Warengruppe { private Set inhalt;

public Warengruppe (…) {

this.inhalt = new TreeSet(); } … } Prof. U. Aßmann, Softwaretechnologie

class Artikel implements Comparable {

...

public int compareTo (Object o) { return name.compareTo(((Artikel)o).name); } }

A nw endungsbei spi el m it T reeS et

A rt ike l m uss zu sä tzl ich vo n S ch ni tt st el le

Comparable

e rb en

M od ifi ka tio n de r K la sse „ A rt ike l“: S yst em au sg ab e:

Warengruppe Moebel Schrank(300) Stuhl(100) Tisch(200) Online: Warengruppe3.java

(17)

Prof. U. Aßmann, Softwaretechnologie33

H ashS et oder T reeS et ?

G em esse ne r re la tive r A uf w an d fü r O pe ra tio ne n au f M en ge n: (a us E cke l, Th in ki ng in Ja va , 2n d ed ., 2 00 0)

S tä rke n vo n H ash S et :

in allen Fällen schneller !

S tä rke n vo n T re eS et :

erlaubt Operationen für sortierte Mengen

Typ E in fü ge n E nt ha lte n It er at io n H ash S et 36 ,1 4 10 6, 5 39 ,3 9 T re eS et 15 0, 6 17 7, 4 40 ,0 4

Prof. U. Aßmann, Softwaretechnologie34

C ol lect ion Fr am ew or k (Ü ber bl ick) (M aps)

<<interface>> Collection <<interface>> Set <<interface>> SortedSet

<<interface>> List<<interface>> Map <<interface>> SortedMap LinkedList

ArrayList TreeSet

HashSet TreeMap

HashMap

Vererbung (extends) Implementierung (implements)

(18)

Prof. U. Aßmann, Softwaretechnologie

java. ut il. M ap (A uszug)

<<interface>> HashMap

// Anfragen (query methods) + int size(); + boolean isEmpty(); + boolean containsKey(Object key); + boolean containsValue(Object value); + Objectget (Objectkey); + int hashCode(); + Iterator iterator(); + Set keySet(); + Set values(); // Zustandsveränderer + void clear(); + Objectput (Objectkey, Objectvalue); + boolean remove (Object o);

<<interface>> Map

E in e M ap ist e in „ as so zi at ive r S p ei ch er “ (a sso ci at ive a rr a y) , d er O bj ekt e al s

Werte

( va lu e) u nt er

Schlüsseln

( ke y) zu gr ei fb ar m ach t

Ein Schlüssel liefert einen Wert (Funktion). Map liefert funktionale Abhängigkeit zwischen Schlüssel und Wert Prof. U. Aßmann, Softwaretechnologie

A nw endungsbei spi el

Artikel – name: String – preis: int + preis(): intKatalog – name: String 1

+ put (code: String, a: Artikel) + get (code: String): Artikel + anzahl(): int code: String *

HashMap ist eine sehr günstige Umsetzung für

qualifizierte Assoziationen:

Der Qualifikator bildet den Schlüssel; die Zielobjeke den W

ert Hier: •Schlüssel: code:String •Wert: a:Artikel

(19)

Prof. U. Aßmann, Softwaretechnologie37

A nw endungsbei spi el m it H ashM ap class Katalog { private String name; private

Map

inhalt;

public Katalog (String name) { this.name = name; this.inhalt = new

HashMap

(); }

public void put (String code, Artikel a) { inhalt.put(code,a); }

public int anzahl() { return inhalt.size(); }

public Artikel get (String code) { return (Artikel)inhalt.get(code); } ...

}

Online: Katalog.java Prof. U. Aßmann, Softwaretechnologie38

Test pr ogr am m für A nw en dun gsbe isp iel : S pei cher ung der W ar en m it S chl üssel n

public static void main (String[] args) { Artikel tisch = new Artikel("Tisch",200); Artikel stuhl = new Artikel("Stuhl",100); Artikel schrank = new Artikel("Schrank",300); Artikel regal = new Artikel("Regal",200); Katalog k = new Katalog("Katalog1"); k.put("M01",tisch); k.put("M02",stuhl); k.put("M03",schrank); System.out.println(k); k.put("M03",regal); System.out.println(k); }

Katalog Katalog1 M03 -> Schrank(300) M02 -> Stuhl(100) M01 -> Tisch(200) Katalog Katalog1 M03 -> Regal(200) M02 -> Stuhl(100) M01 -> Tisch(200)

S yst em au sg ab e:

put(...) überschreibt vorhandenen Eintrag (Ergebnis = vorhandener Eintrag). Ordnung auf den Schlüsseln: SortedMap (Implementierung z.B.TreeMap).

(20)

Prof. U. Aßmann, Softwaretechnologie

value: Object

P rinzi p der H asht abel le

Effekt von hashtab.put(key,value) key.hashCode()

Object hashCode(): int key: Object value: Object

0 capacity

hashtab

Typ isch er w ei se w ird d er S ch lü sse l ( ke y) t ra nsf or m ie rt :

Das Objekt liefert seinen Hashwert mit der Hash-Funktion hashCode() Mit dem Hashwert wird in eine Hashtabelle eingestochen, d.h. der Hashwert wird auf einen Zahlenbereich modulo der Kapazität der Hashtabelle abgebildet, d.h., der Hashwert wird auf die Hashtabelle “normiert” Prof. U. Aßmann, Softwaretechnologie

value?: Object

K ol lisi on bei m E inst echen

0 capacity

key1: Object value1: Object key2: Object value2: Object

key1.hashCode() = key2.hashCode()

Verfahren zur Kollisionsauflösung: – Überlauflisten – Überlauf in der Hashtabelle

D ie H ash fu nkt io n ist

mehrdeutig (nicht injektiv): Bei nicht eindeutigen Schlüsseln, oder auch durch die Normierung, werden Einträge doppelt “adressiert” (Kollision)

(21)

Prof. U. Aßmann, Softwaretechnologie41

V or gehensw ei se bei m D at enst rukt ur -E nt w ur f Id e n ti fi k a ti o n d e r A n fo rd e ru n g e n a n d ie D a te n s tr u k tu r: F u n k ti o n a lit ä t, h ä u fi g b e n u tz te O p e ra ti o n e n A b st ra k ti o n a u f d ie w e se n tl ic h e n E ig e n sc h a ft e n S u c h e n a c h v o rg e fe rt ig te n L ö su n g e n (N u tz u n g d e r C o lle c ti o n -B ib lio th e k) G g f. E xp e ri m e n te ( e x p e ri m e n te lle P ro to ty p e n ) A n p a ssu n g a n v o rg e fe rt ig te L ö su n g E n tw ick lu n g e in e r n e u a rt ig e n L ö s u n g

Prof. U. Aßmann, Softwaretechnologie42

S uche nach vo rgef er tigt en Lösu nge n (C ol lect ion- K lassen der B ibl iot hek) E in fü g e n e in e s E le m e n ts E n tf e rn e n e in e s E le m e n ts A u fz ä h le n a lle r E le m e n te "i s t e n th a lt e n "- A b fr a g e d y n a m isc h e rw e it e rb a r

Collection Einfügen eines Werts für einen Schlüssel Entfernen eines Schlüssel/Wert-Paars Abfrage eines Werts für einen Schlüssel "ist enthalten"-Abfrage für Schlüssel dynamisch erweiterbar

Map Einfügereihenfolge relevant? List Abfrage an i-ter Position Ersetzen an i-ter Position Entfernen an i-ter Position

janein Set kleinstes/größtes Element Elemente "über"/"unter" x

SortedSet

Sortierung relevant?

Sortierung der Schlüssel relevant?

SortedMap

(22)

Prof. U. Aßmann, Softwaretechnologie

B ei spi el : R eal isi er ung von A ssozi at ionen

AB* assoc AnforderungRealisierung

1 ) A s so zi a ti o n a n le g e n 2 ) A s so zi a ti o n e n tf e rn e n 3 ) D u rc h la u fe n a lle r b e st e h e n d e n A s so zi a ti o n e n zu B -O b je k te n 4 ) M a n ch m a l: A b fr a g e , o b A s so zi a ti o n zu e in e m B -O b je k t b e st e h t 5 ) K e in e O b e rg re n z e d e r M u lt ip liz it ä t g e g e b e n

D a te n st ru k tu r im A -O b je kt f ü r B -R e fe re n ze n 1 ) E in fü g e n ( o h n e R e ih e n fo lg e ) 2 ) E n tf e rn e n ( o h n e R e ih e n fo lg e ) 3 ) A u fz ä h le n a lle r E le m e n te 4 ) "i s t e n th a lt e n "- A b fr a g e 5 ) M a xi m a la n z a h l d e r E le m e n te u n b e ka n n t; d y n a m is ch e rw e it e rb a r

Set Prof. U. Aßmann, Softwaretechnologie

R eal isi er un g von u ng eo rdn et e n A ssoz iat ion en m it S et

ABassoc*

class A {

private Set assoc; ... public void addAssoc (B b) { assoc.add(b); } public boolean testAssoc (B b) { return assoc.contains(b); }

public A { ... assoc = new HashSet(); }

(23)

Prof. U. Aßmann, Softwaretechnologie45

B ei spi el : R aum ver w al tung static Besprechungsraum freienRaumSuchen (int groesse, Hour beginn, int dauer)

S u ch e un te r vo rh a nd en en R äu m en n ach R a um m it m in d est en s de r K ap azi tä t

groesse,

ab er m ög lich st kl ei n.

Datenstruktur für vorhandene Räume in Klasse Raumverwaltung »SortedSet (Elemente: Besprechungsraum)

Ü be rp rü fu ng e in es R au m es, o b er f ür d ie Ze it ab

beginn

f ür d ie Lä ng e

dauer

b er ei ts be le gt ist .

Operation in Klasse Besprechungsraum: boolean frei (Hour beginn, int dauer) Datenstruktur in Klasse Besprechungsraum für Zeiten (Stunden): »Set (Elemente: Hour)

Zu sa tza nf or de ru n g (V ar ia n te ): Ü be rp rü fu n g, w el ch er a nd e re T er m in ei ne b est im m te S tu nd e be le gt .

Datenstruktur in Klasse Besprechungsraum: »Map (Schlüssel: Hour, Wert: Teambesprechung) Prof. U. Aßmann, Softwaretechnologie46

R aum ver w al tung: Fr ei en R aum suchen

class Raumverwaltung { // Vorhandene Raeume, aufsteigend nach Größe sortiert // statisches Klassenattribut und -methode private static SortedSet vorhandeneRaeume = new TreeSet(); // Suche freien Raum aufsteigend nach Größe static Besprechungsraum freienRaumSuchen (int groesse, Hour beginn, int dauer) {

Besprechungsraum r = null; boolean gefunden = false; Iterator it = vorhandeneRaeume.iterator(); while (! gefunden && it.hasNext()) { r = (Besprechungsraum)it.next(); if (r.grossGenug(groesse)&& r.frei(beginn,dauer)) gefunden = true; }; if (gefunden) return r; else return null; } ... }

(24)

Softwaretechnologie, © Prof. Uwe Aßmann, Prof. Heinrich Hussmann47

11.4 Persistente Datenhaltung

Art is long, and Time is fleeting. H. W. Longfellow Prof. U. Aßmann, Softwaretechnologie

Tem por är e und per si st ent e D at en

D at en si nd

temporär, wenn sie mit Beendigung des Programms verloren gehen, das sie verwaltet; persistent, wenn sie über die Beendigung des verwaltenden Programms hinaus erhalten bleiben.

O bj e kt o rie nt ie rt e P ro g ra m m e b en öt ig e n M ec ha ni sm en zu r R ea lisi er un g de r

Persistenz von Objekten

.

M ög lich ke ite n zu r R ea lisi er un g vo n O bj ekt -P er si st en z:

Einsatz eines Datenbank-Systems Objektorientiertes Datenbank-System Relationales Datenbank-System Java: Java Data Base Connectivity (JDBC) Zugriffsschicht auf Datenhaltung Java: Java Data Objects (JDO) Speicherung von Objektstrukturen in Dateien Objekt-Serialisierung (Object Serialization)

(25)

Prof. U. Aßmann, Softwaretechnologie49

O bj ekt -S er ial isi er ung in Java

D ie K la sse n java.io.ObjectOutputStream un d java.io.ObjectInputStream st el le n M e th od e n b er e it, u m e in G ef le ch t vo n O bj ekt en li ne ar d ar zu st el le n (zu

serialisieren

) bzw . a us di ese r D ar st el lu ng zu r eko nst ru ie re n.

E in e K la sse , d ie S er ia lisi er un g zu la sse n w ill , m uß di e

(leere!)

S ch ni ttst el le java.io.Serializable im pl em en tie re n.

class ObjectOutputStream {

public ObjectOutputStream (OutputStream out) throws IOException; public void writeObject (Object obj) throws IOException; }

Prof. U. Aßmann, Softwaretechnologie50

O bj ekt -S er ial isi er ung: A bspei cher n

import java.io.*; class XClass implements Serializable { private int x; public XClass (int x) { this.x = x; } } ... XClass xobj; ... FileOutputStream fs = new FileOutputStream("Xfile.dat"); ObjectOutputStream os = new ObjectOutputStream(fs); os.writeObject(xobj); ...

(26)

Prof. U. Aßmann, Softwaretechnologie51

O bj ekt -S er ial isi er ung: E inl esen

import java.io.*; class XClass implements Serializable { private int x; public XClass (int x) { this.x = x; } } ... XClass xobj; ... FileInputStream fs = new FileInputStream("Xfile.dat"); ObjectInputStream os = new ObjectInputStream(fs); xobj = (XClass) os.readObject(); Prof. U. Aßmann, Softwaretechnologie52

The E nd

D ie se F ol ie n si n d ei n e üb e ra rb e ite te V e rsi on d e r V o rl esu n gsf o lie n zu r V o rle su ng S o ftw ar et ech no lo gi e vo n © P ro f. H . H ussm an n, 2 00 2. use d by pe rm issi on .

Referenzen

ÄHNLICHE DOKUMENTE

The boundary between science centers and museums blurs and science centers increasingly employ historic artifacts to demonstrate that science and technology have a past and are

The manner of Fitch’s factual investigation and the scope of the third-party verification it obtains will vary depending on the nature of the rated security and its issuer,

Even if in most policy fields actors from the European level and from other member states do not play important roles, an important form of Europeanisation of public communication

The combination of efficient vehicle supply and extensive operating areas should make it possible to increase the ratio of cars per relocator from 6 up to 30 cars, the number of

Women, on the other hand, have been seen to take care of the household (domus) and were therefore more likely to be in the private sphere 6. According to this understanding,

Schnittstelle java.util.Collection (Auszug) public interface Collection { // Anfragen (Queries) public boolean isEmpty(); public boolean contains (Object o); public

public interface Collection { // Anfragen (Queries) public boolean isEmpty();. public boolean contains

public class LinkedList implements List { public boolean add (Object o);.. public boolean remove