Leistungskontrolle "Softwaretechnologie"

Werbung
TECHNISCHE
UNIVERSITÄT
DRESDEN
Fakultät Informatik
Institut für Softwareund Multimediatechnik
Lehrgebiet Softwaretechnologie
Prof. Dr.
rer . nat . habil. Heinrich
Technische
Hußmann
Tel.: (+49
)351/463-38464
Fax .: (+49)351/463-38459
Universität Dresden * 01062 Dresden
e-mail: [email protected]
Dresden, den 04.02.2003
Leistungskontrolle "Softwaretechnologie"
(Gruppe A)
Name:
Vorname:
Immatrikulationsnummer:
Aufgabe
1
Maximale
Punktanzahl
21
2
24
3
45
Gesamt
Erreichte
Punktanzahl
90
Zum Bestehen der Leistungskontrolle müssen mindestens 40 Punkte (entspricht 45%) erreicht werden.
Hinweise:
¾ Die Klammerung der Aufgabenblätter darf nicht entfernt werden.
¾ Tragen Sie bitte die Lösungen auf den Aufgabenblättern ein!
¾ Verwenden Sie keine roten Stifte!
¾
Es ist kein eigenes Papier zu verwenden! Bei Bedarf ist zusätzliches Papier bei der Aufsicht
erhältlich. Bitte jedes zusätzliche Blatt mit Name, Vorname und Immatrikulationsnummer
beschriften.
¾ Es sind alle Aufgabenblätter abzugeben!
¾ Ergänzen Sie das Deckblatt mit Name, Vorname und Immatrikulationsnummer!
¾
Halten Sie Ihren Studentenausweis und einen Lichtbildausweis zur Identitätsprüfung bereit.
¾
Achtung! Das Zeichen
#
am linken Seitenrand heißt : Java-Text ist einzufügen!
Aufgabe l: Universität
Eine Universität besteht aus Fakultäten, die durch einen Namen und eine laufende Nummer
bezeichnet sind. Jede Fakultät besteht aus Instituten, zu denen je ein Name und ein
Buchstabencode festgelegt ist.
Für jeden Professor ist sein Name und sein Ernennungsdatum bekannt. Jeder Professor gehört
zu einem Institut. Ein Institut kann mehrere Professoren haben. Jedes Institut hat einen
Professor zum Direktor. Jede Fakultät hat einen Professor zum Dekan.
Die Fakultät bietet Lehrveranstaltungen an, die durch einen Veranstaltungstitel eine
Studentenzahl und die vorgesehenen Semesterwochenstundenzahl beschrieben sind und
jeweils einem Professor zugeordnet sind. Vorlesungen sowie Übungen sind
Lehrveranstaltungen. Jede Übung ist einer Vorlesung zugeordnet. Für jeden Professor kann
die Gesamtzahl der von ihm betreuten Semesterwochenstunden bestimmt werden.
Entwickeln Sie aus der Anwendungsbeschreibung ein statisches Analysemodell
Notation für UML-Klassendiagramme! Achten Sie dabei insbesondere auf:
•
•
•
•
•
•
Klassen
Operationen und Attribute in Klassen
Vererbung
Aggregationen
Assoziationen mit deren Benennung und Angabe der Leserichtung oder mit
Assoziationsenden
Multiplizitäten
in der
Aufgabe 2: Bankautomat
Nachfolgend wird das dynamische Verhalten eines Bankautomaten beschrieben:
Nach seiner Inbetriebnahme ist der Bankautomat im Grundzustand. Er wartet auf Benutzung.
Wird eine Karte eingeführt, prüft er diese auf ihre Gültigkeit. Ist sie ungültig, wird der
Grundzustand wieder eingenommen. Ist die Karte gültig, wartet der Automat auf den
Geheimcode. Bei ungültigem Geheimcode wird der Grundzustand wieder eingenommen.
Ist der Code gültig, bietet der Automat die Auswahl von Dienstleistungen (Kontoanzeige,
Auszahlung) an. Bei Auswahl der Kontoanzeige wird der Kontostand angezeigt. Nach Ende
der Anzeige (durch Knopfdruck) befindet sich der Automat wieder im Zustand der Auswahl
der Dienstleistungen. Wird als Dienstleistung die Auszahlung gewählt, besteht die
Möglichkeit, einen Auszahlungsbetrag zu wählen. Nach dieser Angabe prüft der Automat das
Konto, ob der geforderte Betrag zur Verfügung steht. Ist dies nicht der Fall, wird der Vorgang
abgebrochen und der Automat geht in den Grundzustand. Verfügt das Konto über den
geforderten Betrag, geht der Automat nach der Auszahlung in den Grundzustand.
Es ist möglich, jeden Vorgang in jedem möglichen Zustand abzubrechen. Ein Abbruch führt
in den Grundzustand.
Leiten Sie aus dem beschriebenen Verhalten des Bankautomaten ein Zustandsmodell ab!
Stellen Sie dieses Modell in einem Zustandsdiagramm (der Analysephase) als
Protokollmaschine dar!
Aufgabe 3: Geordnete Mengen und Warteschlangen (45 Punkte)
Gegeben ist das folgende Analysemodell einer Warteschlange (Queue):
Eine Warteschlange (Queue) besteht aus einer geordneten Reihenfolge von Objekten
(Object). Objekte werden nach dem FIFO-Prinzip („first-in, first out“) in eine
Warteschlange
• als letztes Element aufgenommen (add()) und
• als erstes Element entfernt (remove()).
• front() stellt das erste Element der Warteschlange bereit.
• isEmpty() testet, ob die Warteschlange leer ist.
• size() ermittelt die Anzahl der Objekte in der Warteschlange.
Auf der folgenden Seite ist ein Entwurfsmodell sowohl für die Implementation einer
Warteschlange als auch für die dafür benötigten Datenstrukturen gegeben.
Es können zwei Arten von Warteschlangen erzeugt werden:
1. Warteschlangen ohne duplizierte Objekte (d.h., ein Objekt kann sich nur genau einmal in
der Warteschlange „anstellen“ Æ withDuplicates = false)
2. Warteschlangen mit duplizierten Objekten (d.h., ein Objekt kann sich mehrfach in der
Warteschlange „anstellen“ Æ withDuplicates = true)
Dementsprechend wird zur Implementation entweder
• eine Liste ohne duplizierte Objekte („geordnete Menge“ Æ OrderedSet, nicht im
Java2-Collection-Framework enthalten, erbt von java.util.List und
java.util.Set ) oder
• eine „herkömmliche“ Liste (hier java.util.LinkedList)
benutzt.
______________________________________________________________
Lösen Sie folgende Aufgaben:
a) Warum wird für eine Implementation einer Warteschlange mit duplizierten
Objekten java.util.LinkedList statt java.util.ArrayList verwendet?
_____________________________________________________________________
_____________________________________________________________________
b) Um die Warteschlange entsprechend dem gegebenen Modell zu implementieren,
brauchen Sie (wie zuvor erklärt) eine geordnete Menge. Da im Java2-CollectionFramework eine solche Datenstruktur nicht verfügbar ist, müssen Sie diese zunächst
selbst implementieren (Klasse OrderedSetImpl).
Vervollständigen Sie die Implementierung von OrderedSetImpl!
import java.util.*;
#
public class OrderedSetImpl
{
public OrderedSetImpl() {
super();
}
public OrderedSetImpl(int initialCapacity) {
super(initialCapacity);
}
public boolean add(Object obj) {
if(obj==null){
throw new NullPointerException();
}
int previousIndex = indexOf(obj);
if (previousIndex!=-1)
return false;
else{
super.add(obj);
return true;
}
}
public boolean addAll(Collection collection) {
throw new UnsupportedOperationException();
}
public boolean addAll(int i, Collection collection) {
throw new UnsupportedOperationException();
}
public Object set(int i, Object obj) {
/*
* Ersetzt das Element an Position i genau dann durch das Element
* obj, falls in dieser geordneten Menge nicht bereits das
* gleiche Element enthalten ist. Der Wert null ist für obj nicht
* zulässig und führt zu einer Exception.
* Gibt das Element zurück, das zuvor an Position i war oder
* null, falls obj zuvor bereits enthalten war
*/
#
}
public void add(int i, Object obj) {
**
* Fügt ein Element obj genau dann an Position i ein, falls in
* dieser geordneten Menge nicht bereits das gleiche Element
* enthalten ist. Der Wert null ist für obj nicht zulässig und
* führt zu einer Exception.
*/
#
}
}
c) Jetzt können Sie mit Hilfe der Datenstruktur „geordnete Menge“ eine
Warteschlange implementieren. Vervollständigen Sie nun die Implementierung der
Klasse QueueImpl!
import java.util.*;
#
public class QueueImpl
{
private List myObjects;
public QueueImpl(boolean withDuplicates){
#
}
public boolean add(Object o){
//Rückgabe analog der Methode add(Object o) von java.util.Set
#
}
public Object remove(){
//Rückgabe analog der Methode remove(int index) von java.util.List
#
}
public Object front(){
#
}
public boolean isEmpty(){
#
}
public int size(){
#
}
public String toString(){
return myObjects.toString();
}
}
d) Welche (drei) Entwurfmuster erkennen Sie im Entwurfsmodell? Zeichnen Sie diese
in das Klassendiagramm ein!
e) Welche Ausgabe erzeugt die im folgenden angegebene Methode main()?
public static void main(String args[]){
myQueue = new QueueImpl(false);
myQueue.add("Frank");
myQueue.add("Susi");
myQueue.remove();
myQueue.add("Susi");
myQueue.remove();
myQueue.add("Anne");
System.out.println(myQueue);
}
Ausgabe auf der Konsole:
[
]
Herunterladen