Universität Augsburg, Institut für Informatik Sommersemester 2003 Prof. Dr. Bernhard Bauer 5. Juli 2003 Stefan Fischer, Dr. Martin Müller Informatik II Semesterklausur Prüfungsmodul Informatik II (SS 2003) nach dem Leistungspunktesystem (4 SWS Vorlesung, 2 SWS Übung, 12 Leistungspunkte) am 5. Juli 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 mit AWT (Programmieraufgabe) 9 Punkte Summe: 40 Punkte Füllen Sie folgende Felder leserlich aus: Name Vorname Matrikelnummer Nur vom Lehrstuhl auszufüllen Aufgabe 1 2 3 4 5 Punkte: /7 /8 /8 /8 /9 /40 Note 1
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) Die Umgebungsvariable CLASSPATH... (A) muss gesetzt werden, um den Java-Compiler zu finden. (B) muss gesetzt werden, um den Java-Interpreter zu finden. (C) muss gesetzt werden, um die selbstdefinierten Klassen zu finden. (D) muss für Java nicht gesetzt werden. (b) Es gilt: (A) Statische Typüberprüfung und statisches Binden wird in Programmiersprachen nicht eingesetzt. (B) Statische Typüberprüfung und dynamisches Binden wird in Programmiersprachen nicht eingesetzt. (C) Statische Typüberprüfung und statisches Binden ist bei der Ausführung effizienter als dynamische Typüberprüfung und statisches Binden. (D) Dynamische Typüberprüfung und dynamisches Binden bietet die volle Flexibilität bei der objektorientierten Programmierung. (c) Gegeben seien folgende Java Klassendefinitionen: public class A { int i; public A() { this.i = 3; public class B extends A { int j; public B(int j) { this.j = j; Welche Zuweisungen sind in Java erlaubt? (A) A a = new A(); (B) A a = new B(3); (C) B b = new A(); (D) A a = (A) new B(3); (d) Welche Eigenschaften gelten in Java: (A) Arrays werden in Java mit variabler Länge definiert. (B) Die Java-Klasse java.util.vector erlaubt es, Vektoren mit variabler Länge zu definieren. (C) Arrays können initialisiert werden. (D) Die Java-Klasse java.util.vector verwendet man, wenn man mit einer variablen oder unbekannten Anzahl von Elementen arbeitet. 2
(e) Es gilt in Java: (A) Eine abstrakte Klasse muss mindestens eine abstrakte Methode besitzen. (B) Enthält eine Klasse mindestens eine abstrakte Methode, so muss sie als abstrakte Klasse definiert werden. (C) Von einer abstrakten Klasse können keine Instanzen erzeugt werden. (D) Eine abstrakte Klasse darf keine Konstruktoren vereinbaren. (f) Gegeben seien folgende Klassendefinitionen: class C { int i = 5; public C() { public void m() { System.out.print(i); class D extends C { int j = 7; public D(int j) { this.j = j; public void m() { System.out.print(j); super.m(); public static void main(string[] args) { C c = new D(3); c.m(); Welche Ausgabe erhalten Sie, wenn die main-methode ausgeführt wird? (A) 35 (B) keine Ausgabe (C) 73 (D) 37 (g) Gegeben sei folgende Programmzeile: Es gilt: java.util.vector v = new java.util.vector(); (A) In v können Werte von Grunddatentypen (z.b. int, short) abgespeichert werden. (B) In v können nur direkte Instanzen von der Klasse Object gespeichert werden. (C) In v können beliebige Instanzen von Unterklassen von der Klasse Object gespeichert werden. (D) In v können nur Elemente der gleichen Klasse gespeichert werden. 3
Aufgabe 2: UML Modellieren Sie folgende Sachverhalte in Uml! Hinweis: Kursiv gestellte Wörter bezeichnen Klassen, Nachrichten, Assoziationen, etc. ( / 8 Punkte) (a) Erstellen Sie ein Klassendiagramm: ( /4) Eine wissenschaftliche Konferenz wird von einem Programmkommittee organisiert. Der Organisator ist ein spezielles Mitglied des Programmkommittees. Ein Autor ist ein Konferenzteilnehmer, der einen eigenen Artikel auf der Konferenz präsentiert. Er schreibt einen Artikel, der vom Programmkommittee begutachtet wird. (b) Erstellen Sie ein Sequenzdiagramm: ( / 4) Der Organisator verschickt einen Aufruf zur Einreichung von Artikeln an potentielle Autor en. Wenn der Autor diesen liest, erstellt er eine Arbeit, die beim Organisator eingereicht wird. Dieser schickt dann an den Autor einen Vermerk, ob die Arbeit angenommen wurde oder nicht. 4
5
6
7
Aufgabe 3: Java-Programmierung und Dateibehandlung ( / 8 Punkte) Implementieren Sie ein einfaches Programm zur Verschlüsselung von Dateien! (a) String-Verschlüsselung: ( / 4) Definieren Sie eine Methode public String scramble (String str); die die Zeichen eines Strings paarweise vertauscht: D.h. bei einem gegeben String x 1 x 2 x 3 x 4... (wobei die x i Buchstaben sind) wird der String x 2 x 1 x 4 x 3... zurückgeliefert. Bei ungerader Länge des Strings bleibt das letzte Zeichen stehen. Beispiel: Aus dem Eingabestring Eingabestring wird durch paarweise Vertauschung der Ausgabestring iegnbasertnig. (b) Dateiverschlüsselung: ( / 4) Implementieren Sie eine Methode public void encrypt (String dateinamealt, String dateinameneu); die unter Verwendung der Methode scramble aus der Teilaufgabe (a) (die in derselben Klasse definiert ist) zeilenweise Strings aus der Datei mit dem Namen dateinamealt ausliest, paarweise vertauscht und das Ergebnis zeilenweise in die Ausgabedatei mit dem Namen dateinameneu schreibt. 8
9
10
11
12
Aufgabe 4: Threads und Synchronisation ( / 8 Punkte) Gegeben sei folgende Klassendefinition: public class Worker extends Thread { public static Integer i = new Integer(0); public void run () { for (int j = 0; j < 100; ++j) { i = new Integer(i.intValue() + 1); (a) Threads: ( /3) Definieren Sie eine geeignete main Methode, die zwei Worker Threads startet, dann solange wartet, bis beide Threads beendet sind, und anschließend die Meldung Beide Threads beendet. auf dem Bildschirm ausgibt. (b) Wenn Sie mehrere Worker Threads starten, wird es zu einem Konflikt kommen. ( / 2) Wo liegt das Problem genau? Kurze Begründung! (c) Semaphore: ( / 3) Angenommen, Sie hätten die Klasse BinaererSemaphor class BinaererSemaphor { static final boolean FREI = true; static final boolean BESETZT = false; private boolean Zustand = FREI; public synchronized void P() { try { while (!(Zustand == FREI)) wait(); catch (InterruptedException e) { Zustand = BESETZT; public synchronized void V() { Zustand = FREI; notifyall(); aus der Vorlesung gegeben, die binäre Semaphore implementiert. Lösen Sie den Konflikt mit Hilfe eines Semaphors! 13
14
15
16
17
18
Aufgabe 5: Grafikprogrammierung ( / 9 Punkte) Ein Hund hat 3 Zustände: schlafen, freundlich, bellen. Sie können den Hund fuettern, streicheln oder aergern. Ihre Handlungen haben jeweils folgendes Ergebnis: Wenn Sie den Hund fuettern, wird er einschlafen. Wenn Sie den Hund aergern, wird er bellen. Wenn Sie den Hund streicheln, wird er freundlich. Implementieren Sie mit AWT eine minimale Interaktionsoberfläche: Für jede der Handlungen fuettern, aergern, und streicheln gibt es einen Button mit entsprechend gleichlautender Benennung im Label. Die aktuelle Stimmung des Hundes soll durch eine Textausgabe in demselben Fenster oberhalb der Buttons durch die Texte *Zzzzzz* (schlafend), Wedeln! (freundlich), Wau! (bellen) erfolgen. Mit einem Mausklick auf einen der Buttons ändert sich der Zustand des Hundes, was entsprechend durch eine andere Textausgabe visualisiert wird. 19
20
21
22
23
24