Testklausur 2 - Informatik Uni Leipzig

Werbung
Matrikelnummer:
Punkte:
Testklausur 2 zur Vorlesung
Modellierung und Programmierung I
Dr. Monika Meiler
Zeit: 60 Minuten
Bemerkungen:

Jedes Blatt ist mit der Matrikelnummer zu versehen.

Jede Aufgabe ist auf dem vorgesehenen Blatt zu lösen. Reicht der
dortige Platz nicht aus, so verwenden Sie ein mit der Matrikelnummer
versehenes zusätzliches Blatt.

Es sind außer Papier und Schreibzeug keine weiteren Hilfsmittel erlaubt
(keine Taschenrechner, keine Unterlagen, . . . ).

Es ist leserlich und nicht mit Bleistift zu schreiben.

Beantworten Sie Fragen pro Pfeil „“ mit genau einem Sachverhalt.
Schalten Sie Ihr Handy aus!
Punkte
0
25
35
45
55
Note
5
4
3
2
1
Seite 1 von 8
Einige Methoden:
Klasse java.util.Vector<E>
Name
add
get
size
Parameteranzahl
1
1
0
Parametertyp
E
int
ErgebnisTyp
boolean
E
int
Beschreibung
fügt Objekt am Ende ein
liefert Objekt an Position
liefert Anzahl der Objekte
Klasse java.util.Observable
Name
notifyObservers
setChanged
Parameter- Parameter- ErgebnisBeschreibung
anzahl
typ
typ
0
teilt registrierten Observern Änderungen mit
0
Setzt Änderungsflag
Interface java.util.Observer
Name
ParameterParameterErgebnisBeschreibung
anzahl
typ
typ
update 2
Observable,
wird aufgerufen, wenn ein Objekt der überwachten
Object
Klasse geändert wurde
Die folgende Klassenhierarchie zur Verwaltung von Prüfungen soll für eine
Internatsschule benutzt werden.
Matrikelnummer:
Punkte:
Klausuraufgabe 1.
(20 Punkte)
Implementieren Sie zu dem obigen Klassendiagramm:
(a) Geben Sie, ausgehend von dem folgenden Konstruktor der Klasse Person, den
Konstruktor der Klasse Schueler an.
3P
Person.java
public Person( String vorName, String nachName)
{
this.vorName = vorName;
this.nachName = nachName;
}
Schueler.java
public Schueler( String vorName, String nachName, int matrikel)
{
}
(b) Gegeben seien die folgenden toString-Methoden:
2P
Person.java
public String toString()
{
return vorName + " " + nachName;
}
Dozent.java
public String toString()
{
return titel + " " + super.toString();
}
Pruefung.java
public String toString()
{
return dozent.toString() + ": " + thema
+ "(" + leistungsPunkte + ") Note " + note;
}
Welcher String wird für eine Prüfung des Prof. Severus Snape zum Thema
Zaubertränke mit 5 Leistungspunkten und einer Prüfungsnote 3 zurückgegeben
(Verwenden Sie das Zeichen ⌴ als Leerzeichen)?

Seite 3 von 8
(c) Überschreiben Sie die toString-Methode der Klassen Schueler so, dass für jeden
Schüler ein String mit dem vollständigen Namen, Matrikelnummer und allen seinen
Prüfungsergebnissen erzeugt wird1.
5P
Schueler.java
public String toString()
{
}
(d) Schreiben Sie ein Testprogramm main mit dem folgenden Inhalt:
10P
Harry Potter (Matrikelnummer: 4334) hat die Prüfung Verteidigung gegen dunkle
Künste (10 Leistungspunkte) beim Dozenten Prof. Quirin Quirrell mit der Note 2
erfolgreich abgeschlossen.
Initialisieren Sie die notwendigen Objekte der entsprechenden Klassen und geben Sie auf
der Konsole Harrys Prüfungsstand aus.
Schueler.java
public static void main( String[] args)
{
}
1
Einige Methoden der Klasse Vector finden Sie auf der 2. Seite.
Matrikelnummer:
Klausuraufgabe 2.
Punkte:
(20 Punkte)
Im Verlauf des Schuljahres werden bei besonderen Leistungen oder bei Verstößen gegen die
Schulordnung Punkte für jeden Schüler vergeben bzw. abgezogen. Ein Attribut punkte in
der Klasse Schueler speichert den Punktestand. Eine Methode addPunkte in der Klasse
Schueler aktualisiert diesen.
Vervollständigen Sie die folgenden vier Methoden:
(a) Für Prüfungen gibt es Punkte. Diese werden in Abhängigkeit von der Prüfungsnote
bestimmt.
4P
Pruefung.java
private int berechnePunkte()
{
return 3 * leistungsPunkte - note * leistungsPunkte;
}
Wie viele Punkte erreicht Harry Porter nach dem Abschluss folgender Prüfungen:
Rolanda Hooch:
Besenflug
5 Leistungspunkte Note 1
Prof. Quirin Quirrell: Verteidigung gegen dunkle Künste 10 Leistungspunkte Note 2
Prof. Severus Snape: Zaubertränke
5 Leistungspunkte Note 3

(b) Implementieren Sie die Methode addPunkte:
4P
In dieser Methode sollen erreichte Punkte zu den bereits vorhandenen addiert werden.
Schueler.java
public void addPunkte( int punkte)
{
}
Seite 5 von 8
(c) Vervollständigen Sie den javadoc-Kommentar der Methode setNote: Erläutern Sie
die Funktionalität der Methode und geben Sie die Parameter und den Rückgabewert in
entsprechender Form an.
4P
Pruefung.java
/**
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
public int setNote( int note)
{
this.note = note;
return berechnePunkte();
}
(d) Implementieren Sie die Methode neuePruefung:
8P
Die Methode neuePruefung der Klasse Schueler soll mit jeder bestandenen
Prüfung (Note besser als 5) eines Schülers seine erreichte Note in die Prüfung eintragen,
die Prüfung in seine Prüfungsliste aufnehmen und seinen Punktestand aktualisieren.
Schueler.java
public void neuePruefung( Pruefung pruefung, int note )
{
}
Matrikelnummer:
Punkte:
Klausuraufgabe 3.
(20 Punkte)
Jeder Schüler erhält Punkte. Eine Internatsschule besteht aus mehreren Häusern. Jedes
Schulhaus registriert die Summe aller Punkte der dort wohnenden Schüler als Hauspunkte.
Die Schulhäuser stehen ständig im Wettbewerb. Am Schuljahresende ist das Haus mit den
meisten Punkten der Sieger.
Erweitern Sie die UML-Klassenhierarchie:
(a) Modellieren Sie als UML-Klassenhierarchie
Internatsschule, bestehend aus mehreren Häusern.
(ohne
Funktionalitäten)
eine
10P
⇨ Eine Schule verfügt über einen Schulnamen, einen Schuldirektor, einen Stellvertreter, eine
Lehrerschaft und mehreren miteinander konkurrierende Schulhäuser, geordnet nach den
Hauspunkten.
⇨ Jedes Schulhaus besitzt einen Hausnamen, einen Hauslehrer, Schüler und Hauspunkte
(Summe aller Punkte der dort wohnenden Schüler).
⇨ Schuldirektor, Stellvertreter und Lehrerschaft sind in der Schule als Dozenten tätig.
Erweitern Sie das hier etwas vereinfachte UML-Diagramm um die neuen Klassen. Achten Sie
dabei auf kleine, übersichtliche Klassen und Wiederverwendbarkeit dieser bei ähnlichen
Problemen. Geben Sie die Instanzvariablen, Datentypen und Beziehungen der verwendeten
Klassen an.
Seite 7 von 8
(b) Jede Punktänderung eines Schülers soll automatisch sowohl die Hauspunkte als auch die
Ordnung zwischen den Häusern der Internatsschule aktualisieren. Wie würden Sie einen
Überwachungsmechanismus2 aufbauen, der diese Aufgabe erfüllt:
10P
 Java stellt für solche Überwachungsmechanismen zwei spezielle Klassen Observer
und Observable zur Verfügung. Welche Aufgaben übernehmen diese?
 Geben Sie im konkreten Fall an, wer von wem überwacht werden soll.
 Geben Sie für die überwachenden und für die zu überwachenden Klassen der
Internatsschule jeweils die Kopfzeilen Ihrer Klassendefinition an.
 In welchen der Klassen ist eine update-Methode zu implementieren?
 In welchen Methoden welcher Klassen ist die Änderung von Daten anzuzeigen
(setChanged, notifyObservers)?
2
Einige Hinweise finden Sie auf der 2. Seite.
Herunterladen