22.12.2012 Aufrufe

4 Folien/Blatt - Arbeitsgruppe Theoretische Informatik und IT ...

4 Folien/Blatt - Arbeitsgruppe Theoretische Informatik und IT ...

4 Folien/Blatt - Arbeitsgruppe Theoretische Informatik und IT ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

✬<br />

Wiederholung: Objekte in Java<br />

• werden in Klassen zusammengefasst<br />

→ class Person<br />

• besitzen Eigenschaften <strong>und</strong> Verhalten<br />

→ Attribute <strong>und</strong> Methoden<br />

• verbergen private Informationen<br />

→ public, protected, private<br />

• werden geboren, leben <strong>und</strong> sterben<br />

→ Konstruktoren, Objektreferenzen,<br />

Finalizer<br />

• sind u.U. Spezialfälle allgemeinerer Objekte<br />

→ Angestellter extends Person<br />

• kommunizieren über definierte<br />

Schnittstellen<br />

→ Interface Comparator<br />

heute: Beziehung zu anderen Objekten<br />

✫<br />

✬<br />

• Aggregation<br />

Objekte enthalten andere Objekte<br />

(Gesamtheit-Teil-Beziehung):<br />

✫<br />

Klausur<br />

1<br />

0..m<br />

0..n<br />

Aufgabe<br />

Spezialfall: Komposition<br />

Teilobjekte in genau einer Gesamtheit,<br />

können ohne die Gesamtheit nicht<br />

(sinnvoll) existieren:<br />

Tastatur<br />

1..n<br />

Taste<br />

Beobachtung: Grenze zwischen<br />

Assoziation <strong>und</strong> Aggregation oft fließend.<br />

• Generalisierung/Spezialisierung<br />

Objekte sind Spezialfälle anderer Objekte:<br />

Fahrzeug Auto<br />

3<br />

✩<br />

✪<br />

✩<br />

✪<br />

✬<br />

4 Implementation von<br />

✫<br />

Objektbeziehungen mit<br />

dem Java Collections<br />

Framework<br />

4.1 Objektbeziehungen<br />

• Assoziation<br />

Strukturelle Beziehung zwischen<br />

gleichberechtigten Objekten, Objekte<br />

” kennen“ sich:<br />

✬<br />

Angestellter<br />

0..m<br />

2<br />

0..n<br />

Computer<br />

Wie implementiert man Objektbeziehungen in<br />

Java?<br />

explizite Unterstützung für einfache<br />

Generalisierung/ Spezialisierung:<br />

• class Auto extends Fahrzeug<br />

• interface Paketschalter extends<br />

Postschalter<br />

komplizierter:<br />

• multiple Vererbung<br />

• Assoziationen/Aggregationen<br />

• Multiplizitäten<br />

✫<br />

– 0..1: Objektreferenzen<br />

– 0..n: ” Objektsammlungen“<br />

→ Java Collections Framework<br />

4<br />

✩<br />

✪<br />

✩<br />


✬<br />

4.2 Java Collections Framework<br />

Collection = Objekt, das eine Gruppe von<br />

Objekten repräsentiert<br />

Basisoperationen:<br />

• contains(o) - Ist o in der Collection?<br />

• size() - Anzahl der Elemente in der<br />

Collection<br />

• iterator() - Iterator über die Elemente<br />

der Collection<br />

Weitere Operationen wie add, remove sind<br />

optional, d.h. werden nicht von allen<br />

implementierenden Klassen bereitgestellt.<br />

→ Aufruf von nicht unterstützten Operationen<br />

führt zu UnsupportedOperationExceptions.<br />

Iterator = Guided Tour durch die Collection,<br />

besucht die Elemente der Collection der Reihe<br />

nach<br />

✫<br />

✬<br />

Map = Objekt, das Schlüssel-Wert-Paare<br />

verwaltet<br />

Beispiel: Matrikelnummer-Student-Paare<br />

(0812155, Michael), (0812177, Marcus)<br />

Beachte: Nur höchstens ein Wert pro Schlüssel<br />

Basisoperationen:<br />

5<br />

• get(key) - Wert, der dem key zugeordnet<br />

ist<br />

• containsKey(key) - Enthält die Map einen<br />

Wert für key?<br />

weitere Operationen wie put(key,value),<br />

remove(key) optional wie bei Collections.<br />

Spezielle Maps:<br />

• geordnete Map (SortedMap)<br />

Einträge nach Schlüsseln geordnet<br />

• MultiMap (vgl. Übungsblatt 13)<br />

mehr als ein Wert pro Schlüssel<br />

✫<br />

7<br />

✩<br />

✪<br />

✩<br />

✪<br />

✬<br />

Spezielle Collections:<br />

• Menge (Set)<br />

Jedes Element höchstens einmal enthalten,<br />

Ordnung irrelevant,<br />

d.h. {1, 1, 2} = {1, 2} = {2, 1}.<br />

• geordnete Menge (SortedSet)<br />

Ordnung wichtig, d.h. {1, 2} �= {2, 1}.<br />

• Liste (List)<br />

Duplikate zugelassen, Ordnung wichtig,<br />

d.h. (1, 1, 2) �= (1, 2) �= (2, 1).<br />

• Warteschlange (Queue)<br />

Duplikate zugelassen, Ordnung<br />

normalerweise FIFO, oder speziell definiert<br />

(z.B. bei PriorityQueues).<br />

✫<br />

✬<br />

✫<br />

<br />

Set<br />

<br />

SortedSet<br />

6<br />

<br />

Collection<br />

<br />

List<br />

HashSet TreeSet LinkedList<br />

<br />

Map<br />

<br />

SortedMap<br />

HashMap TreeMap<br />

8<br />

<br />

Queue<br />

✩<br />

✪<br />

✩<br />


✬<br />

Wie definiert man die Gleichheit <strong>und</strong> die<br />

Ordnung von Elementen?<br />

→ Gleichheitstest mit der Methode equals,<br />

definiert in der Klasse Object<br />

→ Vergleich mit der Methode compareTo aus<br />

dem Interface Comparable<br />

Definitionen:<br />

• Objects o1 <strong>und</strong> o2 sind genau dann<br />

gleich, wenn o1.equals(o2)<br />

• Das Objekt o1 ist genau dann<br />

✫<br />

– kleiner als o2, wenn<br />

o1.compareTo(o2)0<br />

Standardimplementation in Object:<br />

o1.equals(o2)==true ⇔ o1==o2<br />

✬<br />

Zusätzlich sollten x.equals(y) bzw.<br />

x.compareTo(y) bei jedem Aufruf jeweils den<br />

gleichen Wert liefern, solange sich ihre<br />

Eingabedaten nicht ändern.<br />

Auch möglich:<br />

Vergleichsklasse definieren, die das<br />

Comparator-Interface mit der Methode<br />

compare(o1,o2) implementiert, <strong>und</strong> an die<br />

Konstruktoren geordneter Collections bzw.<br />

Maps übergeben.<br />

→ Semantik äquivalent zu o1.compareTo(o2)<br />

✫<br />

9<br />

11<br />

✩<br />

✪<br />

✩<br />

✪<br />

✬<br />

Um <strong>und</strong>efiniertes Verhalten zu vermeiden,<br />

sollte man bei eigenen Implementationen<br />

sicherstellen, dass für alle x,y,z�=null gilt<br />

• x.equals(null)==false<br />

• x.equals(x)==true (Reflexivität)<br />

• x.equals(y)==true ⇔<br />

y.equals(x)==true (Symmetrie)<br />

• x.equals(y)==true <strong>und</strong><br />

y.equals(z)==true ⇒<br />

x.equals(z)==true (Transitivität)<br />

<strong>und</strong> analog<br />

• x.compareTo(null) erzeugt eine<br />

NullPointerException<br />

• x.compareTo(x)==0<br />

• x.comapreTo(y)==0 ⇔<br />

x.equals(y)==true<br />

• x.compareTo(y)≤0 ⇔ y.compareTo(x)≥0<br />

• x.compareTo(y)≤0 <strong>und</strong><br />

y.compareTo(z)≤0 ⇒ x.compareTo(z)≤0<br />

✫<br />

✬<br />

4.3 Generics im Collections<br />

Framework<br />

10<br />

Pre-JDK 1.5 Definitionen:<br />

Beispiel:<br />

✫<br />

<br />

Collection<br />

+contains(o:Object): boolean<br />

+size(): int<br />

+iterator(): Iterator<br />

<br />

Iterator<br />

+hasNext(): boolean<br />

+next(): Object<br />

+remove()<br />

Collection namen = new HashSet();<br />

namen.add(new String("Max"));<br />

namen.add(new String("Moritz"));<br />

namen.add(new Integer(2));<br />

Iterator it = namen.iterator();<br />

while (it.hasNext()){<br />

String name = (String)it.next();<br />

System.out.println(name);<br />

}<br />

12<br />

✩<br />

✪<br />

✩<br />


✬<br />

→ ClassCastException beim Auslesen der 2,<br />

wird bei der Übersetzung nicht entdeckt<br />

Beobachtung: Je mehr Fehler schon bei der<br />

Übersetzung des Programms gef<strong>und</strong>en werden<br />

können, desto besser.<br />

→ Mit Hilfe von Generics können wir dem<br />

Compiler ab JDK 1.5 bei der Fehlersuche<br />

helfen, indem wir ihm explizit sagen, welchen<br />

Datentyp wir in der Collection namen<br />

speichern wollen.<br />

Definitionen im JDK 1.5:<br />

✫<br />

✬<br />

<br />

Collection<br />

+contains(o:Object): boolean<br />

+size(): int<br />

+iterator(): Iterator<br />

13<br />

<br />

Iterator<br />

+hasNext(): boolean<br />

+next(): T<br />

+remove()<br />

4.4 Implementation von<br />

Assoziationen/Aggregationen<br />

4.4.1 0..1 - 0..1<br />

Beispiel: Student-ecUM<br />

class Student{<br />

private EcUM ecUM;<br />

// ...<br />

public void setEcUM(EcUM ecUM){<br />

this.ecUM = ecUM;<br />

if (ecUM != null) ecUM.setBesitzer(this);<br />

}<br />

public getEcUM() { return ecUM; }<br />

}<br />

class EcUM{<br />

private Student besitzer;<br />

// ...<br />

public void setBesitzer(Student s){<br />

besitzer=s;<br />

if (s != null) s.setEcUM(this);<br />

}<br />

public getBesitzer() { return besitzer; }<br />

}<br />

✫<br />

15<br />

✩<br />

✪<br />

✩<br />

✪<br />

✬<br />

Neue Version des Beispiels:<br />

Collection namen<br />

= new HashSet();<br />

namen.add(new String("Max"));<br />

namen.add(new String("Moritz"));<br />

namen.add(new Integer(2));<br />

// Fehler bei der Uebersetzung<br />

Iterator it = namen.iterator();<br />

while (it.hasNext()){<br />

String name = it.next();<br />

// kein Typecast mehr notwendig<br />

System.out.println(name);<br />

}<br />

Auslesen der Elemente per For-Each-Loop:<br />

for (String name : namen){<br />

System.out.println(name);<br />

}<br />

✫<br />

✬<br />

4.4.2 0..1 - 0..n<br />

Beispiel: Mutter-Kind<br />

public class Mutter{<br />

Set kinder;<br />

// ...<br />

public Mutter(){<br />

kinder = new HashSet();<br />

}<br />

public void addKind(Kind k){<br />

if (k!=null){<br />

kinder.add(k);<br />

k.setMutter(this);<br />

}<br />

}<br />

}<br />

public class Kind{<br />

Mutter mutter;<br />

// ...<br />

public void setMutter(Mutter m){<br />

mutter = m;<br />

if (m!=null) m.addKind(this);<br />

}<br />

}<br />

✫<br />

14<br />

16<br />

✩<br />

✪<br />

✩<br />


✬<br />

4.4.3 0..m - 0..n<br />

Beispiel: Student-Vorlesung<br />

Student <strong>und</strong> Vorlesung analog zu Mutter<br />

→ Übungsaufgabe<br />

Anmerkungen:<br />

• Komposition kann man in Java über innere<br />

Klassen, d.h. Klassen innerhalb von<br />

Klassen realisieren<br />

• Multiple Vererbung kann man in Java<br />

eingeschränkt emulieren durch Erben von<br />

einer Superklasse <strong>und</strong><br />

Kompositionsbeziehung mit der anderen<br />

Superklasse<br />

→ An dieser Stelle keine Details . . .<br />

✫<br />

✬<br />

17<br />

5 Die Klausur<br />

5.1 Aufbau <strong>und</strong> Ziele<br />

• voraussichtlich 27.03.2006, 10.00-11.06 Uhr<br />

• zugelassene Hilfsmittel: keine<br />

Aufgaben:<br />

1. Verständnisfragen<br />

kleine Codeschnipsel, argumentative<br />

Aufgaben (mit kurzen(!) Antworten)<br />

2. HTML/CSS<br />

vollständige elementare HTML-Seiten,<br />

Gr<strong>und</strong>lagen der CSS-Programmierung<br />

3. prozedurales Java<br />

vollständige Java-Application mit<br />

Gr<strong>und</strong>lagen der Sprache<br />

4. objektorientiertes Java<br />

Teilaufgaben zu Objektorientierung, GUI<br />

<strong>und</strong> Collections Framework<br />

5. wie 4.<br />

✫<br />

19<br />

✩<br />

✪<br />

✩<br />

✪<br />

✬<br />

4.5 Zusammenfassung<br />

Weitere Quellen zum Java Collections<br />

Framework:<br />

• PK1-Vorlesung am kommenden Montag<br />

• offizielle Dokumentation unter<br />

http://java.sun.com/j2se/1.5.0/docs/<br />

guide/collections/index.html<br />

• Vorlesung Algorithmen <strong>und</strong><br />

Datenstrukturen<br />

→ Algorithmen in den<br />

Collection-Implementationen<br />

Praktische Anwendungen:<br />

• Übungsblatt 13<br />

• Programmiermethodik<br />

• (vorgeschriebenes) Praktikum<br />

• echtes Programmiererleben<br />

✫<br />

✬<br />

Beachte: HTML-Teil allein reicht nicht zum<br />

Bestehen.<br />

18<br />

Ziel: Gr<strong>und</strong>legendes Verständnis prüfen, nicht<br />

Detail-Faktenwissen abfragen<br />

5.2 Vor der Klausur<br />

• gr<strong>und</strong>legende Programmierpraxis in<br />

HTML/CSS <strong>und</strong> Java erwerben<br />

→ Übungsaufgaben, alte Klausuren,<br />

Aufgaben in Büchern, selbstgestellte<br />

Aufgaben<br />

• Online-Dokumentationen durchblättern<br />

• theoretisches Sprachwissen über<br />

HTML/CSS <strong>und</strong> Java schichtenweise<br />

erwerben<br />

• Kommunikationskanäle nutzen<br />

(Diskussionsforum, Kommillitonen, Sprech<strong>und</strong><br />

Fragest<strong>und</strong>en)<br />

✫<br />

20<br />

✩<br />

✪<br />

✩<br />


✬<br />

5.3 In der Klausur<br />

• Wo nichts steht, gibt’s keine Punkte!<br />

• Zeit ist tendenziell knapp<br />

✫<br />

→ leserliche Schrift reicht, wir erwarten<br />

keine Schönschrift ;-)<br />

→ möglichst viele einfach zu holende<br />

Punkte mitnehmen<br />

→ nicht an Details festbeissen<br />

5.4 Nach der Klausur<br />

• Ruhe bewahren (Noten oft besser als<br />

erwartet)<br />

• Klausureinsicht nutzen<br />

→ Punktzahl <strong>und</strong> Note verifizieren<br />

→ Fehler der Korrektoren finden<br />

→ aus eigenen Fehlern lernen<br />

• Nachklausur wird im Herbst angeboten<br />

21<br />

✩<br />

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!