Lesen Sie zuerst die Hinweise auf der Rückseite!

Ähnliche Dokumente
Lösungsvorschläge zur Klausur zum Kurs 1618 Sommersemester 2007 am

Matrikelnummer: 1 Aufgabe 1: Quickies (30 Punkte) a) Wird das folgende Programm von einem Java-Übersetzer ohne Beanstandungen übersetzt? Falls nicht,

Lesen Sie zuerst die Hinweise auf der Rückseite!

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

Lesen Sie zuerst die Hinweise auf der Rückseite!

Lesen Sie zuerst die Hinweise auf der Rückseite!

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

5. Lesen Sie vor der Bearbeitung einer Aufgabe den gesamten Aufgabentext sorgfältig durch!

Lesen Sie zuerst die Hinweise auf der Rückseite!

Aufgabe 1: Objekte, Klassen, Vererbung (15 Punkte)

Probeklausur Informatik 2 Sommersemester 2013

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

Kurs Einführung in die objektorientierte Programmierung (Kursdurchführung des Sommersemester 2017) Klausur am

Lesen Sie zuerst die Hinweise auf der Rückseite!

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Lesen Sie zuerst die Hinweise auf der Rückseite!

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am

Klausur Software-Entwicklung März 01

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

Klausur Kompaktkurs Einführung in die Programmierung Dr. T. Weinzierl & M. Sedlacek 25. März 2011

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort:

Informatik II. Semesterklausur

Klausur Grundlagen der Programmierung

Kurs Einführung in die objektorientierte Programmierung (Kursdurchführung des Sommersemester 2016) Klausur am

Klausur: Java (Liste P)

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Einstieg in die Informatik mit Java

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

Universität zu Lübeck Institut für Telematik. Prof. Dr. Stefan Fischer

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

Languages and Tools for Object-Oriented Development Klausur Wintersemester 2007/2008

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 16. Juli Klausur

Dies ist eine Probeklausur, die keine formalen Schlüsse auf die Form, die Struktur oder den Inhalt der endgültigen Klausur zulässt.

Objektorientierte Programmierung

Kurs:1618 SS 2008 (Vorname, Name) Einführung in die objektorientierte Programmierung Klausur am (PLZ, Ort) Dauer: 3 Std.

Klausur zur Informatik A WS 2001/2002 Name: Korrektor: Punkte: a) Zeichnen Sie zu der nachstehenden Syntax in EBNF die passenden Syntaxdiagramme.

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Kurs Einführung in die objektorientierte Programmierung (Kursdurchführung des Sommersemester 2015) Hauptklausur am

Einstieg in die Informatik mit Java

Dr. Monika Meiler. Inhalt

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

Prozesszustände (1a)

Klausur Softwaretechnik / JAVA Fachbereich BW, für WINFO

Basispruefung Herbst 2016/ Einführung in die Programmierung

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018

Programmierung für Mathematik HS11

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Institut für Programmierung und Reaktive Systeme 6. Juli Programmieren II. Übungsklausur

Prüfung Softwareentwicklung II (IB)

Geoinformatik und Vermessung Prüfung 502 : Informatik (JAVA)

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Klausurort: Aufgabe Summe

(C) Sortieren und Suchen mit Java.-AWT Seite 1

Institut für Programmierung und Reaktive Systeme 7. Juli Programmieren II. Übungsklausur

UNIVERSITÄT SIEGEN Fachbereich 12, Elektrotechnik und Informatik Fachgruppe Betriebssysteme / verteilte Systeme

Allgemeine Hinweise:

Allgemeine Hinweise:

1 of :17:14

Objektorientierte Programmierung Studiengang Medieninformatik

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Algorithmen und Programmierung III

Klausur zur Lehrveranstaltung. Technische Informatik für Ingenieure WS 2009/10

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

PR1-MB, SS10 Seite 1 Hauptklausur, geschrieben am Di

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Klausur zum Kurs Betriebssysteme (1802) am 19. September 2009

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Institut für Informatik. Endterm Klausur zu Informatik I 20. Februar 2010

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. Juni 2004

Technische Universität Braunschweig

Vorbereitende Aufgaben

Lesen Sie zuerst die Hinweise auf der folgenden Seite! Musterlösung. Klausurort: Aufgabe Summe

Klausurdauer: 3 Stunden. Lesen Sie zuerst die Hinweise auf der Rückseite!

Einführung in die Informatik 1

Einführung in die Programmierung. (K-)II/Wb17

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Probeklausur zur Vorlesung

Übung zur Vorlesung Programmierung

Objektorientierte Programmierung Studiengang Medieninformatik

OOP: Nebenläufigkeiten Threads. Dipl.-Inform. Arnold Willemer

Ausnahmen. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 30. März 2006

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten. Lesen Sie die Aufgaben jeweils bis zum Ende durch; oft gibt es hilfreiche Hinweise!

Einführung in die Informatik 1

Ausnahmen. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

12 Abstrakte Klassen, finale Klassen und Interfaces

Scheinklausur zur Vorlesung Praktische Informatik I. 12. November Punkteübersicht

Transkript:

Fakultät für Mathematik und Informatik Lehrgebiet Programmiersysteme Prof. Dr. Friedrich Steimann FernUniversität in Hagen D-58084 Hagen (Name, Vorname) (Straße, Nr.) (PLZ) (Wohnort) (Land, falls außerhalb Deutschlands) Kurs 1618 SS 2007 Einführung in die objektorientierte Programmierung Klausur am 28.07.2007 Dauer: 3 Std., 10 13 Uhr Lesen Sie zuerst die Hinweise auf der Rückseite! Matrikelnummer: Geburtsdatum:.. Klausurort:... Aufgabe 1 2 3 4 5 Summe Teilaufgabe a b c d e a b c a b a b c d e habe bearbeitet maximal 5 4 6 3 7 2 12 16 3 7 6 2 2 2 8 15 100 erreicht Korrektur Herzlichen Glückwunsch, Sie haben die Klausur bestanden. Note:... Sie haben die Klausur leider nicht bestanden. Für den nächsten Versuch wünschen wir Ihnen viel Erfolg. Die Nachklausur findet am 22.09.2007 statt; wenn Sie teilnehmen möchten, melden Sie sich bitte bis zum 10.09.2007 an. (Näheres siehe unser Informationsheft vom 29.05.2007). Hagen, den 10.08.2007 im Auftrag 2007 FernUniversität in Hagen

Hinweise zur Bearbeitung 1. Prüfen Sie die Vollständigkeit Ihrer Unterlagen. Die Klausur umfasst: 1 Deckblatt, 5 Aufgaben auf Seite 1 bis Seite 10. Geben Sie diese Unterlagen zusammen mit Ihren Lösungen später bitte vollständig ab, einschließlich Aufgabenstellung. 2. Füllen Sie jetzt bitte zuerst das Deckblatt aus: Name, Vorname und Adresse, Matrikelnummer, Geburtsdatum und Klausurort. 3. Schreiben Sie Ihre Lösungen mit Kugelschreiber oder Füllfederhalter (kein Bleistift) auf eigenes Papier. Kreuzen Sie die bearbeiteten Aufgaben auf dem Deckblatt an. Schreiben Sie unbedingt auf jedes Blatt Ihrer Lösungen die Aufgabennummer, Ihren Namen und Ihre Matrikelnummer. 4. Es sind keine Hilfsmittel zugelassen. 5. Lesen Sie vor der Bearbeitung einer Aufgabe den gesamten Aufgabentext sorgfältig durch. 6. Achten Sie darauf, dass Sie bei Programmieraufgaben Ihre Lösungen sinnvoll kommentieren; es könnten Ihnen sonst Punkte abgezogen werden. 7. Es sind maximal 100 Punkte erreichbar. Wenn Sie mindestens 40 Punkte erreichen, haben Sie die Klausur mit Sicherheit bestanden. 8. Sie erhalten die korrigierte Klausur zurück zusammen mit einer Bescheinigung für das Finanzamt und ggf. dem Übungsschein. 9. Legen Sie jetzt noch Ihren Studentenausweis und einen amtlichen Lichtbildausweis bereit, dann kann die Arbeit beginnen. Viel Erfolg!

Klausur zum Kurs 1618 im Sommersemester 2007 am 28.7.2007 1 Aufgabe 1: Kurz gefasst (25 Punkte) a) Zeichnen Sie das Objektgeflecht, das am Ende der main-methode entstanden ist. (5 Punkte) public class TestFeldInitialisierung { public static void main(string[] args) { char[] vor; char[] Fliegen = { F, l, i, e, g, e, n ; vor = new char[3]; vor[0] = v ; vor[1] = o ; vor[2] = r ; char[][] satz = { Fliegen, { f, l, i, e, g, e, n, vor, Fliegen ; b) Im Kurs haben Sie zwei Möglichkeiten kennengelernt, mit Hilfe von for-schleifen über Felder zu iterieren. Wenden Sie diese beiden Varianten an, um den Inhalt der Variablen satz aus Aufgabenteil a) auf der Standardausgabe auszugeben. (4 Punkte) c) Realisieren Sie einen Aufzählungstyp für Farben mit Hilfe eines Java-Interfaces und des, ab der Java-Version 5.0 verfügbaren, Programmierkonstrukts für Aufzählungstypen. Welchen Vorteil bietet eine Realisierung mit Hilfe der neuen Aufzählungstypen gegenüber der Realisierung mit Hilfe von Interfaces? (6 Punkte) d) Bestimmen Sie das Ergebnis des im folgenden Programmcode durch (*) gekennzeichneten Ausdrucks und begründen Sie Ihre Antwort. (3 Punkte) public class TestVonAusdruecken { public static void main(string[] args) { int x = 26; (*) int i = 10 + (i = x) / 7 + 3 * i - 13; e) In dieser Teilaufgabe soll innerhalb der main-methode der Klasse ObjektErzeugung ein Objekt vom Typ B erzeugt werden (B b = new B(ia1, ia2);). Kann die Objekterzeugung erfolgreich durchgeführt werden? Wenn ja, geben Sie den Inhalt aller Attribute des von b referenzierten Objekts an. Wenn nein, erläutern Sie, an welcher Stelle ein Problem auftritt und warum es auftritt. (7 Punkte)

Klausur zum Kurs 1618 im Sommersemester 2007 am 28.7.2007 2 class A { private int [] ia; private int numberelements; public A (int[] ia) { this.ia = ia; numberelements = numberofelements (); public int numberofelements () { return ia.length; /*...*/ class B extends A { private int[] ia2; private int noelements; public B (int[] ia, int[] ia2) { super(ia); this.ia2 = ia2; noelements = numberofelements (); public int numberofelements () { return ia2.length; class ObjektErzeugung { public static void main(string[] args) { int[] ia1 = {1, 2, 3, 4; int[] ia2 = {2, 4, 6, 8, 10, 12; B b = new B(ia1, ia2);

Klausur zum Kurs 1618 im Sommersemester 2007 am 28.7.2007 3 Aufgabe 2: Polymorphie (30 Punkte) In dieser Aufgabe geht es um die verschiedenen Arten von Polymorphie, die Sie im Kurs kennengelernt haben. a) Erläutern Sie zunächst allgemein den Begriff der Polymorphie. Was versteht man darunter im Kontext von Programmiersprachen? (2 Punkte) b) Nennen Sie die vier im Kurs genannten Arten von Polymorphie und erklären Sie deren Bedeutung. (12 Punkte) c) Geben Sie je ein in Java geschriebenes Beispiel an für jede der vier Arten von Polymorphie. Ihr Beispiel soll die im Folgenden angegebene Klasse Stack dazu geeignet modifizieren. Das Beispiel soll, wo nötig, weiterhin zusätzlichen Programmcode enthalten, der dazu dient, für die gerade diskutierte Art der Polymorphie zu verdeutlichen, wo Polymorphie zum Tragen kommt. (16 Punkte) import java.util.*; class Stack { ArrayList stack = new ArrayList(); public boolean isempty() { return stack.isempty(); public void push (Object elem) { stack.add(elem); public Object pop () { if (!stack.isempty()) return stack.remove(stack.size()-1); else return null; public Object top () { if (!stack.isempty()) return stack.get(stack.size()-1); else return null; Erläuterung: Die Klasse Stack ist ein Container für Elemente vom Typ Object mit der folgenden Charakteristik: Die push-methode legt das als Parameter übergebene Objekt oben auf dem Stack ab, diepop-methode nimmt das oberste Element vom Stack und gibt es zurück. D.h. das Element, das zuletzt auf dem Stack abgelegt wurden, wird mittels pop als erstes wieder vom Stack herunter genommen. Die top-methode der Klasse Stack liefert das oberste Stackelement zurück, lässt es aber, im Gegensatz zu pop, auf dem Stack. Die Methode isempty prüft, ob der Stack leer ist.

Klausur zum Kurs 1618 im Sommersemester 2007 am 28.7.2007 4 Aufgabe 3: Verhaltenskonformität (10 Punkte) Im Kurs wurde neben den syntaktischen Regeln, die ein Subtyp einhalten muss, auch von konformem Verhalten eines Subtyps gesprochen. a) Erläutern Sie, was man unter Verhaltenskonformität im Kontext von Subtyping versteht. (3 Punkte) b) Geben Sie ein Beispiel für einen Subtyp an, der sich nicht konform zu seinem Supertyp verhält. Ihr Beispiel soll lauffähigen Java-Code enthalten, der den Sachverhalt demonstriert sowie eine Erklärung, warum und wo im Beispiel die Verhaltenskonformität verletzt wird. (7 Punkte) Hinweis: Sie dürfen auch auf dem Stack-Beispiel aus Aufgabe 2 aufbauen.

Klausur zum Kurs 1618 im Sommersemester 2007 am 28.7.2007 5 Aufgabe 4: AWT und Ereignissteuerung (20 Punkte) a) Nennen Sie drei der im Kurs genannten Ereignissorten und erläutern Sie deren Bedeutung. (6 Punkte) b) Erläutern Sie, wie eine AWT-Komponente bekannt gibt, Ereignisse welcher Ereignissorten an ihr auftreten können, und geben Sie ein Beispiel dafür an. (2 Punkte) c) Welche Bedingungen müssen Klassen erfüllen, deren Instanzen als Beobachter von Ereignissen einer bestimmten Ereignissorte ESEvent fungieren sollen? Geben Sie ein passendes Beispiel an. (2 Punkte) d) Was passiert, wenn an einer Komponente ein Ereignis auftritt? Beschreiben Sie die durch das Ereignis ausgelösten Aktivitäten und erläutern Sie Ihre Ausführungen an einem Beispiel. (2 Punkte) e) In dieser Teilaufgabe sollen Sie die unten angegebene Implementierung einer Klasse vervollständigen, die einen Zähler darstellen soll, der durch Drücken entsprechender Schaltflächen erhöht bzw. erniedrigt werden kann. (8 Punkte) import java.awt.*; import java.awt.event.*; class CountFrame extends Frame { private int counter = 0; (1) private Panel p = new Panel(...); private TextField tcounter = new TextField(5); private Button binc = new Button(">"); private Button bdec = new Button("<"); public CountFrame() { tcounter.settext("" + counter); (2) // Komponenten in Fenster einfügen (3) // Beobachter registrieren this.setsize(100, 100); this.setlocation(100, 100); this.setvisible(true); 1. Fügen Sie die Komponenten p, tcounter, binc und bdec so in das Fenster ein (siehe (2)), dass das Fenster die in Abbildung 1 gezeigte Darstellung auf dem Bildschirm hat. Dabei sollen Textfenster und Button-Objekte im Panel-Objekt platziert werden. Wählen Sie einen geeigneten Layoutmanager für die Behälterkomponente p aus (siehe (1)), der die Darstellung aus Abbildung 1 gewährleistet.

Klausur zum Kurs 1618 im Sommersemester 2007 am 28.7.2007 6 Abbildung 1: Benutzungsoberfläche von CountFrame 2. Registrieren Sie Beobachter-Objekte in geeigneter Weise, sodass der Zählerstand per Mausklick ereignis-gesteuert um eins erhöht bzw. erniedrigt werden kann (siehe (3)). 3. Das Programm soll beendet werden, wenn der Benutzer die Anforderung zum Schließen des Fensters gibt (unter Windows durch Anklicken der rechten oberen Schaltfläche des Fensters).

Klausur zum Kurs 1618 im Sommersemester 2007 am 28.7.2007 7 Aufgabe 5: Kooperierende Threads (15 Punkte) In dieser Aufgabe simulieren wir einen Verpackungsprozess, der aus drei anderen Prozessen besteht: einem Kartonzufuhrprozess, einem Produktablageprozess und einem Prozess zum Abtransport der befüllten Kartons. Immer dann, wenn kein Karton mehr an der Befüllposition steht, soll einer dorthin gefahren werden, anschließend mit einem Produkt befüllt und danach weggefahren werden. Im Anschluss daran beginnt der ganze Zyklus von vorn. Die drei Prozesse synchronisieren sich über 3 Signale, von denen eins (ablageposfrei) signalisiert, dass ein neuer Karton zur (Ablage- /)Befüllposition gefahren werden kann, ein zweites, das signalisiert, ob der Karton befüllt werden kann (produktablageerlaubt) und ein drittes, das anzeigt, ob der Karton mit einem Produkt befüllt wurde und damit weggefahren werden kann (produktabgelegt). Nach dem Wegfahren des Kartons ist die Ablageposition wieder frei. Die benötigten Signale werden durch Attribute, die in einer gemeinsamen Klasse Signale deklariert sind, simuliert. Der Programmrahmen sieht wie folgt aus: class Verpackungsprozess { public static void main(string[] args) { Signale signale = new Signale(); /* Die Prozesse Kartonzufuhrprozess, */ /* Produktablageprozess und */ /* Kartonabtransportprozess starten. */ class Signale { private boolean ablageposfrei = true; private boolean produktablageerlaubt = false; private boolean produktabgelegt = false; // Darauf warten, dass Signal auf true gesetzt wird public synchronized void WarteAblageposFrei() throws InterruptedException { /*... */ public synchronized void WarteProduktablageErlaubt() throws InterruptedException { /*... */ public synchronized void WarteProduktAbgelegt() throws InterruptedException { /*... */ // Signalzustand auf value setzen public synchronized void setablageposfrei(boolean value) { /*... */

Klausur zum Kurs 1618 im Sommersemester 2007 am 28.7.2007 8 public synchronized void setproduktablageerlaubt(boolean value) { /*... */ public synchronized void setproduktabgelegt(boolean value) { /*... */ class Kartonzufuhrprozess extends Thread { private Signale signale; public Kartonzufuhrprozess(Signale signale) { this.signale = signale; private void fahrekartonvor() throws InterruptedException { sleep(1000); // Verfahrzeit bis zur Ablageposition private void fahrekartonzurablageposition() throws InterruptedException { signale.warteablageposfrei(); System.out.println("-1- Karton wird vorgefahren"); fahrekartonvor(); /* Relevante Signale (zurueck) setzen */ public void run() { while (true) { try { fahrekartonzurablageposition(); catch (InterruptedException e) { System.out.println("Unzulaessige Unterbrechung"); System.exit(0); class Produktablageprozess extends Thread { private Signale signale; public Produktablageprozess(Signale signale) { this.signale = signale; private void legeproduktab() throws InterruptedException { /* Produktablage simulieren analog zum Vorfahren des Kartons */

Klausur zum Kurs 1618 im Sommersemester 2007 am 28.7.2007 9 private void legeproduktabfallserlaubt() throws InterruptedException { /* Auf Signal zum Ablegen warten */ System.out.println("-2- Produkt wird abgelegt"); legeproduktab(); /* Relevante Signale (zurueck) setzen */ public void run() { while (true) { try { legeproduktabfallserlaubt(); catch (InterruptedException e) { System.out.println("Unzulaessige Unterbrechung"); System.exit(0); class Kartonabtransportprozess extends Thread { private Signale signale; public Kartonabtransportprozess(Signale signale) { this.signale = signale; private void fahrekartonweg() throws InterruptedException { /* Wegfahren des Kartons simulieren analog zum Vorfahren des Kartons */ private void fahrekartonvonablageposweg() throws InterruptedException { /* Auf Signal warten, das signalisiert, dass Produkt */ /* abgelegt und damit der Karton weggefahren werden kann */ System.out.println("-3- Karton wird weggefahren"); fahrekartonweg(); /* Relevante Signale (zurueck) setzen */ public void run() { while (true) { try { fahrekartonvonablageposweg(); catch (InterruptedException e) { System.out.println("Unzulaessige Unterbrechung"); System.exit(0);

Klausur zum Kurs 1618 im Sommersemester 2007 am 28.7.2007 10 Aufgabe: Ergänzen Sie den durch Kommentare angedeuteten Programmtext so, dass der Ablageprozess wie oben beschrieben abläuft. Setzen Sie nach Erledigung einer Teilaufgabe, wie z.b. fahrekartonvor();, alle notwendigen Signale zurück und setzen Sie das Signal auf true, das die darauf folgende Teilaufgabe triggert. Verwenden Sie zur korrekten Koordinierung über die Signale Java s wait/notify-mechanismus.