SS2003, 2. Klausur - Institut für Informatik

Werbung
Universität Augsburg, Institut für Informatik
Prof. Dr. Bernhard Bauer
Stefan Fischer, Dr. Martin Müller
Sommersemester 2003
18. Oktober 2003
Informatik II
2. Semesterklausur
Prüfungsmodul Informatik II (SS 2003)
nach dem Leistungspunktesystem
(4 SWS Vorlesung, 2 SWS Übung, 12 Leistungspunkte)
am 18. Oktober 2003
Prüfer: Prof. Dr. Bernhard Bauer
Hinweise:
• Die Bearbeitungszeit beträgt 90 Minuten.
• Verwenden Sie für Ihre Lösungen ausschließlich den Platz unterhalb der jeweiligen Aufgabe. Bei den
Multiple Choice-Aufgaben genügt es, die richtigen Antworten anzukreuzen.
• Die Klausur besteht aus fünf Aufgaben:
1. Objektorientierte Modellierung und Programmierung in Java (Multiple Choice)
7 Punkte
2. UML (konzeptionelle Aufgabe)
8 Punkte
3. Java-Programmierung und Dateibehandlung (Programmieraufgabe)
8 Punkte
4. Threads und Synchronisation (Programmieraufgabe)
8 Punkte
5. Grafikprogrammierung (Programmieraufgabe)
9 Punkte
Summe:
40 Punkte
• Füllen Sie folgende Felder leserlich aus:
Name
Vorname
Matrikelnummer
• Nur vom Lehrstuhl auszufüllen •
Aufgabe
Punkte:
1
2
/7
3
/8
4
/8
P
5
/8
/9
1
Note
/40
Aufgabe 1: Multiple Choice
(
/ 7 Punkte)
Kreuzen Sie die richtige(n) Antworte(n) an. Pro Teilaufgabe gibt es einen Punkt, falls alle richtigen Antworten angekreuzt und alle falschen Antworten nicht angekreuzt sind. Dabei können auch alle oder gar keine
Antwort(en) richtig sein.
(a) Es gilt:
(A) Eine als final deklarierte Klasse darf keine Unterklasse besitzen.
(B) Eine als final deklarierte Methode terminiert das Programm.
(C) Alle Methoden einer final Klasse müssen ebenfalls final sein.
(D) Eine als final deklarierte Methode kann nicht in einer Unterklasse überschrieben werden.
(b) Betrachten Sie den folgenden Programmcode:
class Computer {
public Computer() {
System.out.print("Computer mit ");
meineFestplatte();
}
protected void meineFestplatte() {
System.out.print("3.5’HD.");
}
}
public class Notebook extends Computer {
public void meineFestplatte() {
System.out.print("2.5’HD.");
}
public static void main (String [] args)
Computer c = new Notebook();
Notebook n = new Notebook();
}
{
}
Welche Ausgabe erhalten Sie bei Ausführung des Programms?
(A) Computer mit 3.5’HD.mit 2.5’HD.
(B) Computer mit 3.5’HD.Computer mit 3.5’HD.
(C) Computer mit 2.5’HD.Computer mit 2.5’HD.
(D) Computer mit 3.5’HD.Computer mit 2.5’HD. unter der Voraussetzung, daß Festplatte in Computer
public ist.
2
(c) Es gelte class A extends B implements C und:
A a = new A();
B b = new B();
Dann führt ...
(A) a = (A)b zu einem Compiler– oder Runtime–Error (in Abhängigkeit vom verwendeten Compiler).
(B) a = b zu einem Compiler–Error.
(C) b = (B)a zu einem Compiler–Error.
(D) b = (C)a zu einem Runtime–Error.
(d) Threads:
(A) Threads können auch mit Hilfe des Interfaces java.lang.Runnable implementiert werden, d.h.
ohne Verwendung der Klasse java.lang.Thread.
(B) Threads werden auch als leicht-gewichtige Prozesse bezeichnet.
(C) java.lang.Threads werden verwendet, um echte Parallelität auf Ein-Prozessormaschinen zu
realisieren.
(D) java.lang.Threads werden verwendet, um Quasi-Parallelität auf Ein-Prozessormaschinen zu
realisieren.
(e) Shallow und Deep Copies.
(A) Die clone Methode ist public und wird von der Basisklasse Object geerbt.
(B) Mit clone erzeugte Objekte müssen gecastet werden, da sie automatisch zu der Klasse Object
gehören.
(C) Werden in einem gecloneten Objekt tiefere Strukturen verändert, so ändern sie sich auch im
Original.
(D) clone erzeugt keine deep copies.
(f) AWT und Swing.
(A) AWT bietet mehr Funktionalitäten als Swing.
(B) Swing bietet mehr Funktionalitäten als AWT.
(C) Viele AWT-Klassen erben von Swing-Klassen.
(D) Im AWT gibt es vordefinierte Look–and–Feel Standards für Oberflächen.
(g) Uml:
(A) Multiplizitäten können für Assoziationen in Klassendiagrammen nicht definiert werden.
(B) Vererbung/Generalisierung kann mit Uml-Klassendiagrammen nicht dargestellt werden.
(C) Schnittstellen werden in Uml–Klassendiagrammen durch den Stereotyp Interface dargestellt.
(D) Selbstdelegation ist in Sequenzdiagrammen möglich.
3
Aufgabe 2: UML
(
/ 8 Punkte)
Modellieren Sie folgende Sachverhalte in Uml!
Hinweis: Kursiv gestellte Wörter bezeichnen Klassen, Nachrichten, Assoziationen, etc.
(a) Erstellen Sie ein Klassendiagramm:
(
/4)
Beamte können auf Lebenszeit oder befristet ernannt werden. Professoren sind Beamte auf Lebenszeit,
Assistenten sind befristete Beamte. Wissenschaftliche Mitarbeiter sind Angestellte. Ein Professor ist
dem Kultusminister weisungsgebunden; Mitarbeiter und Assistenten sind dem Professor weisungsgebunden. Ein Lehrstuhl setzt sich aus einem Professor, Assistenten und Mitarbeitern zusammen.
(b) Erstellen Sie ein Sequenzdiagramm:
(
/ 4)
Ein Professor veranlaßt das Sekretariat ein Meeting anzuberaumen. Das Sekretariat sendet mehrere
Terminvorschläge zur Auswahl an alle Mitarbeiter. Diese antworten mit Ihren jeweiligen Terminpräferenzen. Das Sekretariat setzt daraufhin einen geeigneten Termin fest und versendet eine Einladung an
alle Mitarbeiter.
4
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
5
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
6
Aufgabe 3: Java-Programmierung und Dateibehandlung
(
/ 8 Punkte)
Implementieren Sie ein einfaches Programm zur Suche von Zeichenketten in Dateien.
(a) Implementieren Sie eine Methode
(
/ 3)
public static boolean contains (String str, String substr);
die true liefert, genau dann wenn der String str den String substr enthält. — Implementieren Sie
diese Methode ohne Verwendung der Methode regionMatches aus java.lang.String!
(b) Implementieren Sie eine Methode
(
/ 5)
public static void grepFiles (String search, String directory);
die unter Verwendung der Methode contains aus der Teilaufgabe (a) (die in derselben Klasse definiert
ist) zeilenweise Strings nacheinander aus allen Dateien im Verzeichnis directory ausliest, und Zeilen,
die die Zeichenkette search enthalten, unter Angabe des Dateinamens auf der Konsole ausgibt.
Beispiel: Der Methodenaufruf
MyClass.grepFiles("Prop", "verzeichnis");
würde, falls die Methode grepFiles in der Klasse MyClass definiert wurde, die folgende Ausgabe
erzeugen:
verzeichnis/datei.1: member((class, yes), Properties)
verzeichnis/datei.3:
db:’$universe$’(Object, Props),
verzeichnis/datei.3: \section{Project Proposal: Madeira --- Multi Agent Distributed
7
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
8
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
9
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
10
Aufgabe 4: Threads und Synchronisation
(
/ 8 Punkte)
Fünf Philosophen sitzen um einen runden Tisch in einem Restaurant. Jeder hat eine Schüssel Reis vor sich,
und zwischen jedem Philosophen liegt ein Eßstäbchen.
• Um zu essen, braucht ein Philosoph zwei Stäbchen.
• Dazu nimmt er, sofern Stäbchen verfügbar sind, zuerst das linke Stäbchen auf, dann das Rechte.
• Nachdem ein Philosoph einen Happen Reis gegessen hat, legt er beide Stäbchen wieder ab und denkt
nach.
(a) Warum kann es passieren, daß alle Philosophen kurz vor der Erleuchtung verhungern?
Ein Javaianischer Philosoph beschreibt das Problem seiner Kollegen wie folgt:
public class Staebchen{
private boolean benutzt = false;
public Staebchen (){
benutzt=false;
}
public synchronized boolean frei (){
return !benutzt;
}
public synchronized void aufnehmen (){
benutzt=true;
}
public synchronized void ablegen (){
benutzt=false;
}
}
11
(
/ 1)
Jeder der Philosophen wird durch einen eigenen Thread realisiert:
class Philosoph extends Thread
{
public int Id;
public int links;
public int rechts;
public Staebchen staebchen[];
public Philosoph (int p, Staebchen[] staebchen)
{
Id=p;
links=Id;
rechts=(Id+1)%5;
}
public void run()
{
while(true)
{
if (staebchen[links].frei())
{
staebchen[links].aufnehmen();
if (staebchen[rechts].frei())
{
staebchen[rechts].aufnehmen();
// [...] Essen
staebchen[rechts].ablegen();
}
staebchen[links].ablegen();
}
// [...] Denken
}
}
}
(b) Kann bei der Asführung dieses Codes das oben dargestellte Problem auftauchen?
Kurze Begründung!
(
/ 2)
(c) Ist eine Synchronisation durch den Programmcode gewährleistet?
( / 5)
Kurze Begründung! Verbessern Sie gegebenenfalls den Code unter Verwendung von (wie in der Vorlesung definierten) binären Semaphoren.
12
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
13
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
14
Aufgabe 5: Grafikprogrammierung
(
/ 9 Punkte)
Implementieren Sie eine minimale Interaktionsoberfläche zur Simulation einer Ampel:
• Eine Ampel kennt folgende Zustände: rot, rotgelb, gruen und gelb.
• Die Ampel soll zyklisch alle Zustände in genau dieser Reihenfolge nacheinander durchlaufen (Dauer
pro Zustand: 1 Sekunde).
• Die Ampel soll durch ein Fenster dargestellt werden, in dem sich drei Kreise den Ampellichtern entsprechend übereinander befinden. Entsprechend dem Ampelzustand werden die Kreise farbig gezeichnet.
• Das Fenster verfügt über einen Button: Der Button ist initial mit “Start” gelabelt. Ein Klick darauf
startet die Simulation und ändert das Label in “Stop”. Ein erneuter Klick unterbricht die Ampelsimulation, wobei Sie dabei warten können, bis ein neuer Ampelzustand erreicht worden ist. Anschließend
wird das Label wieder auf “Start” gesetzt.
15
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
16
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
17
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
18
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
19
— 2. Semesterklausur Informatik II, Sommersemester 2003 —
20
Herunterladen