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