Lösung 7 (pdf) - Technische Universität München

www1.in.tum.de

Lösung 7 (pdf) - Technische Universität München

Technische Universität München SS 2004

Fakultät für Informatik Lösungsvorschläge zu Blatt 7

Dr. A. Dutoit, Dr. C. Gold,

11 Juni 2004

Dr. C. Herzog, Dr. M. Schneider

Übungen zu Einführung in die Informatik II

Aufgabe 20

Prädikatenlogische Ausdrücke über den natürlichen Zahlen

a) Ein entsprechendes Klassendiagramm könnte folgendermaßen beschaffen sein:

− wert : int

NatuerlicheZahl

* zahlen

+ succ(): NatuerlicheZahl

+ add(y:NatuerlicheZahl): NatuerlicheZahl

+ mult(y:NatuerlicheZahl): NatuerlicheZahl

.............

>

+ istTeiler(y:NatuerlicheZahl): boolean

+ istGerade(): boolean

+ istPrim(): boolean

+ istTeilerfremd(y:NatuerlicheZahl):boolean

+ istGGT(x:NatuerlicheZahl, y:NatuerlicheZahl): boolean

Im Modell wird davon ausge−

gangen, dass ueber zahlen die

Menge aller natuerlichen

Zahlen erreicht wird (auch

wenn diese unendlich ist).

b) Als OCL-Vertrag ergibt sich:

• context: NatuerlicheZahl

inv: wert >= 0

• context: NatuerlicheZahl::istGerade() : boolean

post: result = self.istTeiler(NatuerlicheZahl(2))

• context: NatuerlicheZahl::istPrim() : boolean

post: result = zahlen->forAll(n: NatuerlicheZahl |

self.istTeiler(n) implies (n.wert==1 or n.wert==self.wert))

• context: NatuerlicheZahl::istTeilerfremd(y:NatuerlicheZahl):boolean

post: result = zahlen->forAll(n: NatuerlicheZahl |

self.istTeiler(n) and y.istTeiler(n) implies (n.wert==1) )

• context: NatuerlicheZahl::istGGT(x:NatuerlicheZahl, y:NatuerlicheZahl):boolean

post: result = istTeiler(x) and istTeiler(y) and

zahlen->forAll(n: NatuerlicheZahl |

((n.istTeiler(x) and n.istTeiler(y)) implies n.wert


Lösung 7/ Seite 2

package dokument;

public class AbsatzException extends Exception{

private String meldung;

}

public AbsatzException(String text){

meldung = text;

}

public String getMeldung(){

return meldung;

}

• Die Methode findeIndexInUmgebung() lautet dann:

public int findeIndexInUmgebung() throws AbsatzException {

if (umgebung == null) throw

new AbsatzException("Aeusserster Absatz bereits erreicht");

Iterator it = umgebung.iterator();

int index = 0;

while (it.hasNext()) {

if (it.next() == this)

return index;

index++;

}

throw new AbsatzException("Absatz nicht gefunden");

}

• Eventuell auftretende Fehlermeldungen dürften in erster Linie dadurch behoben werden,

dass die Signatur aller Methoden, die findeIndexInUmgebung aufrufen, um

throws AbsatzException ergänzt wird.

• In der TestUmgebungAufgabe16 muß der gesamte Block, in dem eingerückt wird,

bzw. die Methode findeIndexInUmgebung aufgerufen wird, in einen try .... catch

.... finally Block eingebunden werden.

b) siehe Musterlösungsdateien

Aufgabe 22

Strukturierung von Dokumenten mit HTML-Tags

a) ::=


::= |

::= ( ) ∗

::= ∗


::= left | right | justify | center


::= |

::= a | ... | z | A | ... | Z | 0 | ... | 9 | , | . | | ...

::= | |

Nonterminale sind immer kursiv und in dünnen spitzen Klammern geschrieben. Die spitzen

Klammern, mit welchen HTML-Tags gekennzeichnet werden, sind dagegen fett gedruckt.


Lösung 7/ Seite 3

Hier handelt es sich um terminale Zeichen. Die Nonterminale und

stehen für Leerzeichen bzw. neue Zeile und repräsentieren das Sonderzeichen Worttrenner

aus dem Klassenmodell.

b)


Aufgabe 8 Klassenmodell eines einfachen Editors




Diese Aufgabe stellt den Beginn eines laengeren

Aufgabenzyklus dar, dessen Ziel es ist, einen

interaktiven Editor zu modellieren und

implementieren.



Im Rahmen dieser Aufgabe modellieren wir zunaechst

die Struktur des Dokuments und ergaenzen es

anschliessend um eine spezielle Funktionalitaet

eines Editors: Das rechts-, linksbuendige,

zentrierte oder blocksatzfoermige Formatieren von

Text.




Modellieren Sie zunaechst das Dokument;

beachten Sie, dass ein Dokument im

Allgemeinen aus Absaetzen besteht. Jeder

Absatz ist seinerseits entweder ein einfacher

Absatz, der aus keinen weiteren

Unterabsaetzen besteht oder ein

zusammengesetzter Absatz. Ein einfacher

Absatz enthaelt ein gewisse Anzahl von

Zeichen, wobei normale Zeichen und

Sonderzeichen auftreten.



Modellieren Sie nun den Teil des

Klassenmodells der fuer die Formatierung der

Absaetze verantwortlich ist. Verwenden Sie

dabei das aus dem vorigen Semester bekannte

Strategiemuster!



Verbinden Sie die beiden Teile unter

Verwendung einer geeigneten Testklasse.



Fuegen Sie Ihrem Modell so weit wie moeglich

Attribute und Methoden hinzu!




Bemerkung: Das hier erarbeitete Modell eines

Editors wird auf den weiteren Uebungsblaettern

sukzessive erweitert. Es lohnt sich also am Ball

zu bleiben!



Weitere Magazine dieses Users
Ähnliche Magazine