Lesen Sie zuerst die Hinweise auf der Rückseite!

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

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

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 folgenden Seite! Klausurort: Aufgabe Summe

Lesen Sie zuerst die Hinweise auf der Rückseite!

Lesen Sie zuerst die Hinweise auf der Rückseite!

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 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 folgenden Seite! Klausurort: Aufgabe Summe

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

Lesen Sie zuerst die Hinweise auf der Rückseite!

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

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

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

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

Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

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

Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

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

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

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

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

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

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

12 Abstrakte Klassen, finale Klassen und Interfaces

Prüfung Softwareentwicklung II (IB)

Programmieren in Java -Eingangstest-

Modularisierung in Java: Pakete Software Entwicklung 1

Vorkurs Informatik WiSe 15/16

Allgemeine Hinweise:

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

Allgemeine Informatik II SS :30-11:30 Uhr

Klausur: Java (Liste P)

Einstieg in die Informatik mit Java

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

3 Objektorientierte Konzepte in Java

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

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

Matrikelnummer:

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Klausur Grundlagen der Programmierung

Programmieren in Java

14 Abstrakte Klassen, finale Klassen, Interfaces

Musterlösung Stand: 5. Februar 2009

Einführung in die Informatik 1

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

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Semesterklausur 1. Hinweise:

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

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

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

Vererbung, Polymorphie

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

Aufgabe 1: Quer durch Java (4 Punkte) super abstract abstract protected

Fakultät IV Elektrotechnik/Informatik

Klausur "ADP" SS 2016

Objektorientierte Programmierung Studiengang Medieninformatik

Prof. Dr. Uwe Schmidt. 21.August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (BInf 211, BTInf 211, BMInf 211, BWInf 211)

1 Abstrakte Klassen, finale Klassen und Interfaces

Einstieg in die Informatik mit Java

Informatik II. Semesterklausur

Probeklausur: Programmierung WS04/05

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

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015. Musterlösung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

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

Klausur zur Vorlesung Informatik 1 im Wintersemester 2014/2015 am 18. Februar Bearbeitungszeit: 90 Minuten Gesamtpunktezahl: 90 Punkte

Klausur zur Einführung in die objektorientierte Programmierung mit Java

JAVA 05: Objektorientierte Konzepte

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen

1. Welche Programmzeilen definieren die main-methode richtig?

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

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Klausur Programmieren 2 SS 2016

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

1. Testklausur Sommersemester 2013 Datenstrukturen und Algorithmen 24. Mai 2013

Vererbung und Polymorphie

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

Vorbereitende Aufgaben

Bachelorprüfung: Objektorientierte Softwareentwicklung

Klausur Software-Entwicklung März 01

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Programmierung Nachklausurtutorium

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

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

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

4. Vererbung Die Klasse Object. Die Klasse Object

Transkript:

Fachbereich 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 2005 Einführung in die objektorientierte Programmierung Klausur am 30.07.2005 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 d e f a b a b c a b c d habe bearbeitet maximal 2 2 2 2 2 4 6 6 4 5 5 10 10 5 10 10 3 4 4 4 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 24.09.2005 statt; wenn Sie teilnehmen möchten, melden Sie sich bitte bis zum 15.08.2005 an. (Näheres siehe unser Informationsheft vom 09.05.2005). Hagen, den im Auftrag 2005 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 7. 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 und 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 2005 am 30.7.2005 1 Aufgabe 1: Kurz gefasst (10 Punkte) Kreuzen Sie in der Tabelle am Ende der Aufgabe für jeden Aufgabenteil an, ob die entsprechende Aussage richtig oder falsch ist und geben Sie im zugehörigen Feld eine kurze Begründung an. a) Der Modifikator final kann unabhängig von anderen Modifikatoren stets als Modifikator für Klassen verwendet werden. b) Von äußeren Klassen aus kann auf sämtliche Attribute und Methoden aller inneren Klassen zugegriffen werden, auch wenn sie als private deklariert sind. c) Zum Auflösen eines Methodenaufrufs wird nur der dynamische Typ der Empfängervariablen verwendet. d) Seien a und b zwei Ausdrücke in Java. Dann liefert die Auswertung der Ausdrücke (a & b) und (a && b) stets dasselbe Ergebnis. e) Soll in Java eine Methode einer Superklasse überschrieben werden, so muss für die überschreibende Methode in der Subklasse gelten: sämtliche Parametertypen einschließlich des Rückgabetyps müssen identisch sein mit den entsprechenden Typen der überschriebenen Methode. (Gehen Sie von der Darstellung im Kurs aus, die auf Java 2 basiert.) Aufgabe Richtig Falsch Weil... a) b) c) d) e) Hinweis: Für jedes Paar aus richtiger Antwort und richtiger Begründung gibt es 2 Punkte, ansonsten 0 Punkte.

Klausur zum Kurs 1618 im Sommersemester 2005 am 30.7.2005 2 Aufgabe 2: Verschiedenes (30 Punkte) a) Betrachten Sie das folgende Programm, das den booleschen Wert true in einen String umwandelt und auf der Systemausgabe anzeigt. public class TestAufruf { public static void main(string argv[]) { System.out.println(java.lang.String.valueOf(true)); Beschreiben Sie, aus welchen Teilen der Ausdruck java.lang.string.valueof(true) aufgebaut ist und was diese Teile bedeuten! b) Zeichnen Sie das Objektgeflecht, das entstanden ist, wenn die Ausführung der main- Methode die markierte Stelle erreicht hat! (6 Punkte) public class Objektgeflecht { Objektgeflecht a, b, c; public Objektgeflecht () { a = null; b = null; c = null; public Objektgeflecht (Objektgeflecht a, Objektgeflecht b, Objektgeflecht c) { this.a = a; this.b = b; this.c = c; public static void main (String argv[]) { Objektgeflecht u = new Objektgeflecht(); Objektgeflecht v = new Objektgeflecht(); Objektgeflecht w = new Objektgeflecht(u, v, null); (w.a).b = v; v.a = u.b; (u.b).c = w; w.c = v.c; u.c = (v.a).c; /* Markierung */

Klausur zum Kurs 1618 im Sommersemester 2005 am 30.7.2005 3 c) Betrachten Sie das folgende Java-Programm: class X { void compare (X x) { if (this.getclass().isinstance(x)) { System.out.println("x ist vom selben Typ wie this bzw. von einem Subtyp."); else System.out.println("x ist nicht zuweisungskompatibel mit this."); class Y extends X { void compare (X x) { super.compare(x); class Z extends Y { public static void main(string argv[]) { X x = new Y(); x.compare(new Z()); Was wird bei der Ausführung der main-methode ausgegeben? Begründen sie Ihre Antwort! (6 Punkte) Hinweise: Die Methode getclass() liefert den dynamischen Typ der Variablen zurück, auf der sie aufgerufen wird. Die Methode isinstance (Object o) der Klasse Class prüft, ob o vom Typ (oder einem Subtyp) der Klasse ist, die durch das Class-Objekt repräsentiert wird, auf dem die Methode aufgerufen wird. d) Wird das folgende Programm von einem Java-Übersetzer ohne Beanstandungen übersetzt? Falls nicht, warum? Begründen Sie Ihre Antwort! abstract class A { protected int i = 5; abstract void m1 (); void m2 (int i) { System.out.println(i); int m3 () { return i; class B extends A { int m3 () { return i + 5; public static void main (String arv[]) { A a = new B(); a.m3();

Klausur zum Kurs 1618 im Sommersemester 2005 am 30.7.2005 4 e) Schreiben Sie ein kleines Programmbeispiel, bei dessen Ausführung dynamisch gebunden wird! Erklären Sie genau, an welcher Stelle der Programmausführung dynamisch gebunden wird! Ihr Beispiel soll übersetzbar und ausführbar sein. (5 Punkte) f) Schreiben Sie ein kleines Programmbeispiel, an dessen Ausführung man erkennen kann, dass der Attributzugriff in Java nicht dynamisch gebunden wird! Ihr Beispiel soll übersetzbar und ausführbar sein. (5 Punkte) Aufgabe 3: Spezialisierung (20 Punkte) a) Betrachten Sie das folgende Programmfragment eines Typen für Buchstaben: public class Buchstabe { private int aktbuchstabe; public void setbuchstabe(char c) throws KeinBuchstabeException {... public char getbuchstabe() {... public void naechsterbuchstabe() {... Aufgabe: Die Klasse soll nur die Buchstaben A bis Z und a bis z verwalten. Der aktuelle Buchstabe soll als Integer-Zahl im Attribut aktbuchstabe gespeichert werden. Beachten Sie, dass man den ASCII-Code eines Zeichens als Dezimalzahl über einen Typecast auf int erhalten kann. Der ASCII-Code für die Buchstaben A bis Z liegt zwischen 65 und 90, der für a bis z zwischen 97 und 122. Vervollständigen Sie die Implementierung so, dass außerdem die unten aufgeführten Eigenschaften gelten. Vereinbaren Sie bei der Implementierung in der Klasse Buchstabe keine neuen Attribute! 1. Der Konstruktor soll ein Buchstabe-Objekt erzeugen und mit einem int-wert initialisieren, der A entspricht. (1 Punkte) 2. Die Methode naechsterbuchstabe() soll ein Buchstabe-Objekt auf den im Alphabet folgenden Buchstaben setzen. Die Folge sei dabei durch die Ordnung der ASCII-Codes vorgegeben, wobei auf den letzten Buchstaben ( z ) wieder der erste ( A ) folgt. (Die verwalteten Buchstaben werden also zyklisch behandelt!) 3. Die Methode setbuchstabe(char c) soll das Attribut aktbuchstabe auf den dem übergebenen Zeichen entsprechenden Integer-Wert setzen. Falls es sich bei dem übergebenen Wert nicht um einen der zu verwaltenden Buchstaben handelt, soll eine KeinBuchstabeException geworfen werden. Vereinbaren Sie dazu eine Klasse KeinBuchstabeException. KeinBuchstabeException soll Subtyp von Exception sein und die gesamte Funktionalität von Exception erben. 4. Die Methode getbuchstabe soll den aktuellen Buchstaben als Ergebnis liefern. Beachten Sie dabei, dass man ein Zeichen durch einen Typecast auf char aus seinem ASCII-Code zurückgewinnen kann. (1 Punkte)

Klausur zum Kurs 1618 im Sommersemester 2005 am 30.7.2005 5 b) Leiten Sie von der Klasse Buchstabe eine Klasse GrossBuchstabe mit den unten angegebenen Eigenschaften ab, deren Objekte nur die Großbuchstaben A bis Z verwalten! (10 Punkte) 1. Die Klasse GrossBuchstabe soll keine weiteren Attribute vereinbaren. 2. Sorgen Sie dafür, dass die Methoden naechsterbuchstabe und setbuchstabe entsprechend der Einschränkung auf Großbuchstaben arbeiten! 3. Implementieren Sie eine weitere Methode als Überladung von setbuchstabe, die den aktuell zu setzenden Buchstaben in Form eines int-wertes übergibt statt eines char-wertes. Der übergebene int-wert soll den ASCII-Code als Dezimalzahl repräsentieren. Aufgabe 4: Threads und Synchronisation (25 Punkte) a) Jedes Thread-Objekt hat eine public void run() und eine public void start()- Methode. Beschreiben Sie die unterschiedliche Bedeutung der beiden Methoden! (5 Punkte) b) Betrachten Sie die folgende Klasse, die die Implementierung einer Speicherzelle für int- Werte darstellt: class Speicherzelle { private int wert; public Speicherzelle (int w) { wert = w; public synchronized void setwert(int w ) { wert = w; public synchronized int getwert() { return wert; public synchronized void swapwert(speicherzelle s) { int h = s.getwert(); s.setwert(wert); setwert(h); Führen mehrere Threads den obigen Programmcode gleichzeitig aus, so kann es zu einer Verklemmung kommen. Beschreiben Sie eine solche Situation anhand eines konkreten Beispiels, in dem nur die swapwert-methode aufgerufen wird! (10 Punkte) c) Ändern Sie die Klasse Speicherzelle so ab, dass ihre Verwendung garantiert verklemmungsfrei ist und weiterhin wechselseitiger Ausschluss beim Zugriff auf gemeinsame Daten garantiert ist. Die Methode swapwert soll aus Sicht eines Threads eine unteilbare Operation sein. Begründen Sie, warum die geänderte Klasse die gestellten Anforderung erfüllt. (10 Punkte)

Klausur zum Kurs 1618 im Sommersemester 2005 am 30.7.2005 6 Aufgabe 5: Kapselung (15 Punkte) Diese Aufgabe behandelt den Zusammenhang zwischen Kapselungstechniken und Sicherheitsfragen. Gegeben ist folgendes Szenario: Eine Systemumgebung, repräsentiert durch ein Objekt vom Typ Umgebung, verwaltet, welche Personen Zugriff auf geschützte Systemteile haben. Deren Kennungen (Namen der Personen) werden als Strings in einem Objekt der Klasse Befugnis gespeichert. Umgebung und Befugnis sind wie folgt implementiert: package System; public interface Umgebung { public void setbefugnis(befugnis b); public Befugnis getbefugnis(); package System; public class Befugnis { protected String[] kennungen; public Befugnis() { kennungen = new String[5]; public String[] getkennungen() { return kennungen; Das Zusammenspiel zwischen Umgebung und Befugnis ist wie folgt: 1. Objekte vom Typ Befugnis können von beliebigen Klassen erzeugt und mit der Methode setbefugnis an die Systemumgebung übergeben werden. 2. setbefugnis speichert die übergebene Referenz und trägt die Kennungen der zugelassenen Personen in das String-Feld des Befugnis-Objekts ein, indem es direkt auf dessen Attribut kennungen zugreift. (Beachten Sie, dass Umgebung und Befugnis im gleichen Paket deklariert sind!) 3. Beliebige Nutzer des Systems können sich mittels der Methoden getbefugnis und get- Kennungen die Kennungen der zugelassenen Personen holen, um lesend auf diese zuzugreifen, also um diese z.b. mit anderen Kennungen zu vergleichen. Wir nennen das Zusammenspiel zwischen Umgebung und Befugnis ein sicheres System, wenn keine Klasse außerhalb des Pakets System die in einem Befugnis-Objekt gespeicherten Kennungen verändern kann. Aufgaben: a) Mit der obigen Implementierung ist das System nicht sicher. Beschreiben Sie, wie ein Angreifer unter Verwendung der Methode getkennungen die Liste der Kennungen manipulieren könnte! Unter einem Angreifer verstehen wir eine Klasse, die außerhalb des Pakets System deklariert ist. (3 Punkte) b) Geben Sie an, wie man die Implementierung der Klasse Befugnis ändern müsste, um den Angriff aus Teilaufgabe a) zu verhindern! Die modifizierte Befugnis-Klasse muss jedoch die Punkte 1 3 des oben beschriebenen Zusammenspiels weiterhin zulassen! Auch die Schnittstelle Umgebung sowie ihre Implementierung müssen von der Änderung unberührt bleiben.

Klausur zum Kurs 1618 im Sommersemester 2005 am 30.7.2005 7 c) Beschreiben Sie, wie ein Angreifer ohne Verwendung der Methode getkennungen die Liste der Kennungen manipulieren könnte! d) Geben Sie an, wie man die Implementierung der Klasse Befugnis ändern müsste, um den Angriff aus Teilaufgabe c) zu verhindern! Es gelten die gleichen Rahmenbedingungen wie bei Teilaufgabe b).