Klassenarbeit OOP |
4.3.2004 |
Zeit 80 min |
Name ________________ |
---|
Differenzieren Sie die Begriffe statische und dynamische Polymorphie anhand eines Klassendiagramms.
Lösung:
![]() |
Statische Polymorphie liegt vor, wenn in einer Klasse mindestens zwei gleichnamige Operationen deklariert werden, die jedoch unterschiedliche Parameterlisten haben. Der Compiler unterscheidet zur Übersetzungszeit anhand der Parameterliste der Nachricht, welche Operation aufgerufen wird. Dynamische Polymorphie liegt vor, wenn in einer Subklasse eine gleichnamige Operation wie in der Superklasse vorhanden ist. Hier müssen die Parameterlisten der Operationen übereinstimmen. Der Compiler kann zur Übersetzungszeit die Operationen den Nachrichten nicht zuordnen. Da das erst zur Laufzeit des Programms möglich ist spricht man hier von der späten Bindung. Im Beispiel oben ist zur Übersetzungszeit also nicht klar welches Verhalten eine Nachricht op2() hervorruft. Mögliche Verhalten wären X.op2() bzw. Y.op2(). |
Die Software für einen MP3-Player soll entwickelt werden. Das "Human Interface" besteht aus einem Display und einem Multifunktions-Sensor. Beides wurde zu einer Klasse Oberflaeche zusammengefügt. Der bisherige Entwickler ist leider verschollen und hat diese Notizen hinterlassen:
![]() |
|
256-Graustufen-Display mit 300*200 Pixeln. (0 = durchsichtig (weiß); 255 = schwarz) Nullpunkt oben links.
deltaPhi(), wenn man den Finger über den Sensor kreisen lässt, wird bei einem Winkel von mehr als 10 Grad die Methode deltaPhi aufgerufen. |
Entwerfen Sie ein stimmiges UML-Klassendiagramm für die Oberfläche, d.h. notwendige Attribute (geheim!), Methoden, Modifizierer und Parameter sind zu ergänzen (aber nicht übertreiben)!
Achtung: Public-Attribute führen zu Punktabzügen!
Die Klasse Oberflaeche wird um eine Methode zeichneTrennlinie(y:GZ) erweitert. Sie zeichnet eine 1 Pixel breite horizontale Linie auf dem Display unter Verwendung der Methode setzePixel(...).
Das Zeichnen geschiet durch Invertieren der vorhandenen Pixel vermöge neuPixel = 255-altPixel. Folge wird eine Linie zweimal gezeichnet ist sie wieder gelöscht! Erweitern Sie das Klassendiagramm durch die nun neue Klasse NewOberfläche! Hinweis: Gegebenenfalls müssen Sie noch "Denkfehler" in der Klasse Oberfläche korrigieren!
Erstellen Sie ein Struktogramm für die Methode zeichneTrennlinie(y:GZ)!
Lösung 2.1 & 2.2: | Lösung 2.3: |
---|---|
![]() |
![]() |
![]() |
Beim Kreisen des Fingers über das Sensorfeld wird alle 10 Grad die Methode deltaPhi() aufgerufen. Das löst den Aufruf der Methode naechsterPunkt() der Klasse Steuerung aus. Hierbei ergeben sich nun zwei wesentliche Fälle:
Erstellen Sie jeweils ein Sequenzdiagramm für diese beiden Abläufe. |
Lösung 2.4a | Lösung 2.4b |
---|---|
![]() |
![]() |
Erstellen Sie ein UML-Klassendiagramm für eine Klasse "Titel" die alle Informationen aus obigem Auszug eines Titel aufnehmen kann.
Hinweise: Der Lautsprecher bedeutet, das der Titel gerade gespielt wird. Ein Häkchen bei Titelname bedeutet, dass der Titel noch aktiv ist.
Wichtig: Die Informationen sollen hierbei nicht geheim sein. Verwenden Sie die Bezeichnungen für die Datentypen aus der Formelsammlung!
Die Titel werden von einer Klasse "TitelFinder" verwaltet. Ein TitelFinder ist auch der Eigentümer der Titel. TitelFinder kann darüber hinaus auch so genannte "CoolList" besitzen, das sind intelligente Wiedergabe-Listen, z.B. eine Liste mit dem Namen "Goa **" in dem automatisch alle Titel der Musikrichtung Goa und mit der Wertung "**" gesammelt werden.
Erstellen Sie ein UML-Assoziations-Klassendiagramm für diese Beziehungen, mit Kardinalitäten usw.!
Erstellen Sie ein Objektdiagramm für "denTitelFinder", den 3 Titel aus 3.1 und der ersten und einzigen CoolListe namens "Goa **"!
Lösung 3.1 | Lösung 3.2 | Lösung 3.3 |
---|---|---|
![]() |
![]() |
![]() |