Probeklausur: Programmierung WS04/05



Ähnliche Dokumente
Probeklausur: Programmierung WS04/05

Objektorientierte Programmierung

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Einführung in die Programmierung

Programmieren in Java

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Java: Vererbung. Teil 3: super()

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Programmierkurs Java

Einführung in die Java- Programmierung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Objektorientierte Programmierung

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Java Kurs für Anfänger Einheit 5 Methoden

5. Tutorium zu Programmieren

2. Semester, 2. Prüfung, Lösung

3 Objektorientierte Konzepte in Java

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Graphic Coding. Klausur. 9. Februar Kurs A

Computeranwendung und Programmierung (CuP)

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Vorkurs C++ Programmierung

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Client-Server-Beziehungen

Typumwandlungen bei Referenztypen

Kapitel 6. Vererbung

SEP 114. Design by Contract

Delegatesund Ereignisse

Studentische Lösung zum Übungsblatt Nr. 7

Große Übung Praktische Informatik 1

Einführung in die Programmierung für Wirtschaftsinformatik

1 Vom Problem zum Programm

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Einführung in die Programmierung

Übungen Programmieren 1 Felix Rohrer. Übungen

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Zählen von Objekten einer bestimmten Klasse

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

2A Basistechniken: Weitere Aufgaben

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Java Einführung Abstrakte Klassen und Interfaces

Prinzipien Objektorientierter Programmierung

Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger

Algorithmen und Datenstrukturen

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Software Engineering Interaktionsdiagramme

Datenbanken Kapitel 2

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

EndTermTest PROGALGO WS1516 A

Kontrollstrukturen und Funktionen in C

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Einführung in die Programmierung

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Programmierkurs Java

Java Einführung Operatoren Kapitel 2 und 3

BEISPIELKLAUSUR Softwareentwicklung:

Vererbung & Schnittstellen in C#

Kapitel 6. Vererbung

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 16. Juli 2005 Dr. Alfons Huhn, Timotheus Preisinger

Folge 18 - Vererbung

Kapitel 6. Vererbung

Ingenieurinformatik Diplom-FA (C-Programmierung)

Einführung in die Java- Programmierung

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Zahlen auf einen Blick

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Klassenbeziehungen & Vererbung

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

WPF Steuerelemente Listbox, ComboBox, ListView,

Klausur in Programmieren

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Objektorientierte Programmierung OOP

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Anleitung für Autoren auf sv-bofsheim.de

Programmiervorkurs WS 2012/2013. Schleifen und Methoden

Wir arbeiten mit Zufallszahlen

Professionelle Seminare im Bereich MS-Office

4. AuD Tafelübung T-C3

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

Viele Bilder auf der FA-Homepage

Innere Klassen in Java

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

5.5.8 Öffentliche und private Eigenschaften

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Klassendefinitionen verstehen

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Erstellen von x-y-diagrammen in OpenOffice.calc

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Mediator 9 - Lernprogramm

Transkript:

Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt, versuche diese Zeit einzuhalten. Am Ende der Klausur solltest Du Dir einen kleinen Puffer lassen, um noch einmal alle Antworten durchzulesem. Lies Dir die Aufgabenstellungen aufmerksam und sorgfältig durch. Während der richtigen Klausur sind keine weiteren Unterlagen oder Hilfsmittel erlaubt. Versuche deshalb auch die Probeklausur zu bearbeiten, ohne Deine Notizen, Lehrbücher oder die API zu konsultieren. Die maximal zu erreichende Punktzahl ist 60.

1 Fragen zum Allgemeinen Verständnis (15 Punkte) 1. Im Folgenden sind vier verschiedene Implementierungen der Methode umfang() einer Klasse Kreis gegeben. Welche der Implementierungen funktionieren fehlerfrei mit dem gegebenen Hauptprogramm? Gib bei den nicht funktionierenden Implementierungen jeweils in maximal einem Satz an, wieso sie nicht funktionieren. Listing 1: KreisTest.java 1 package Irgendwo ; 2 i m p o r t Geometrie. * ; 3 4 p u b l i c c l a s s K r e i s T e s t { 5 p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { 6 K r e i s k = new K r e i s ( 5 ) ; 7 d o u b l e u = k. umfang ( ) 8 9 Listing 2: Kreis.java 1 package Geometrie ; 2 p u b l i c c l a s s K r e i s { 3 p r o t e c t e d d o u b l e r ; 4 p u b l i c K r e i s ( d o u b l e r ) { 5 t h i s. r = r ; 6 7 8 / * umfang ( ) * / 9 (a) protected double umfang() { return 2*r*Math.PI; (b) public static double umfang() { return 2*r*Math.PI; (c) public double umfang() { return 2*r*Math.PI; (d) public static double umfang(double r) { return 2*r*Math.PI; 3

(a) Funktioniert nicht. Auf Methoden mit Sichtbarkeit protected kann ausserhalb des Pakets nur aus Klassen zugegriffen werden, die Kreis erweitern. (b) Funktioniert nicht. In einer statischen Methode kann man nicht auf Instanzvariablen (z.b. r) zugreifen. (c) Funktioniert. (d) Funktioniert nicht. Die Methode wird in KreisTest ohne Parameter aufgerufen, in der Signatur wird aber ein Parameter verlangt. 2. Es seien die folgenden Klassendeklarationen und Objektinstanziierungen gegeben. class ErsteKlasse { int a; class ZweiteKlasse extends ErsteKlasse { int b; class DritteKlasse extends ZweiteKlasse { int c; ErsteKlasse eins = new ErsteKlasse(); ZweiteKlasse zwei = new ZweiteKlasse(); DritteKlasse drei = new DritteKlasse(); Welche der folgenden Aussagen sind dann richtig? drei instanceof ErsteKlasse ergibt true. eins = drei; ist zulässig. zwei.a = eins.a; ist nicht zulässig. zwei = (DritteKlasse) eins; ist zulässig. 3. Welches Java-Keyword beinhaltet die Referenz auf das aktuelle Objekt? Gib ein Beispiel für die typische Benutzung dieses Keywords an. this. Zum Beispiel wird this oft in Setter-Methoden benutzt, um explizit die Objektvariable zu referenzieren und diese von einem Parameter zu unterscheiden: public void setname (String name) { this.name = name; 4

4. Bei den folgenden Behauptungen gibt ein richtig angekreuztes Kästchen 1 Punkt, ein falsch angekreuztes führt zu 1 Punkt Abzug. Behauptung Ja Nein Alle Java Klassen haben eine gemeinsame direkte oder indirekte Oberklasse. Eine Java Klasse kann mehrere Konstruktoren besitzen. Abstrakte Klassen müssen mindestens eine abstrakte Methode besitzen. Unter einer überladenen Methode versteht man zwei Methoden gleichen Namens in derselben Klasse, mit gleichen Rückgabetypen und unterschiedlichen Parametern. Eine Klasse kann beliebig viele Schnittstellen implementieren. Eine Klasse kann von beliebig vielen Klassen erben. Die Anweisungsfolge int[] a = new int[10]; a[10]=10; wird vom Compiler akzeptiert. Die Anweisungsfolge int[] a = new int[10]; a[10]=10; liefert eine Ausnahme zur Laufzeit. static Methoden können nur aus static Methoden aufgerufen werden. Ein Konstruktor kann alle nichtprivaten Methoden der aktuellen Klasse und ihrer Oberklasse aufrufen. 5

2 Grafische Oberflächen und Eventmodell (5 Punkte) Betrachte die abgebildete Benutzeroberfläche bestehend aus einer Anzeige und einem Knopf. Erweitere das folgende Programm in den Zeilen 6 und 18, sowie in der Methode actionperformed, so dass bei jedem Drücken des Knopfes OK der Zähler im Textfeld um 1 erhöht wird. 6

Listing 3: ZaehlKnopf.java 1 i m p o r t j a v a. awt. * ; 2 i m p o r t j a v a. awt. e v e n t. * ; 3 i m p o r t j a v a x. swing. * ; 4 5 p u b l i c c l a s s ZaehlKnopf e x t e n d s J P a n e l 6 implements A c t i o n L i s t e n e r 7 { 8 p r o t e c t e d i n t z a e h l e r = 0 ; 9 p r o t e c t e d J T e x t F i e l d a n z e i g e ; 10 p r o t e c t e d J B u t t o n knopf ; 11 12 ZaehlKnopf ( ) { 13 s u p e r ( new FlowLayout ( ) ) ; 14 s e t S i z e ( new Dimension ( 1 0 0, 1 0 0 ) ) ; 15 a n z e i g e = new J T e x t F i e l d ( 3 ) ; 16 a n z e i g e. s e t T e x t ( " " + z a e h l e r ) ; 17 J B u t t o n knopf = new J B u t t o n ( "OK" ) ; 18 knopf. a d d A c t i o n L i s t e n e r ( t h i s ) ; 19 add ( a n z e i g e ) ; 20 add ( knopf ) ; 21 22 23 p u b l i c void a c t i o n P e r f o r m e d ( A c t i o n E v e n t e v t ) { 24 z a e h l e r ++; 25 a n z e i g e. s e t T e x t ( " " + z a e h l e r ) ; 26 27 28 29 p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { 30 JFrame frame = new JFrame ( " Z a e h l k n o p f " ) ; 31 frame. s e t D e f a u l t C l o s e O p e r a t i o n ( 32 JFrame. EXIT_ON_CLOSE ) ; 33 frame. s e t C o n t e n t P a n e ( new ZaehlKnopf ( ) ) ; 34 frame. pack ( ) ; 35 frame. s e t V i s i b l e ( t r u e ) ; 36 37 7

3 Zuweisungen und Operatoren (10 Punkte) Bei den folgenden Fragen seien jeweils die Variablen wie folgt vorausgesetzt: int a = 2; int b = 10; double c = 3.0; double d = 1.0; boolean e = false; Berechne die folgenden Ausdrücke und gib für jeden die Reihenfolge an, in der die Operatoren gemäß den Präzedenzen in Java ausgewertet werden. Gib außerdem den Wert und den Datentyp des Ergebnisses an. In der ersten Zeile der Tabelle ist ein Beispiel angegeben. Ausdruck 1 2 3 4 5 Wert Datentyp Beispiel: a = 3 + 4 2 + = 11 int 3 8/3/2 / / 4 int (int) (c/ + +d) ++ / (int) -1 int c = b%a % = 0.0 double a + + b c ++ -28.0 double e = 16 >> 1 >> 2%2 == 8 % >> >> == = true boolean 8

4 Sprachkonstrukte in Java (10 Punkte) 1. Welche Bildschirmausgabe erzeugt der folgende Java Code? String text="test"; int i=0; while (i<text.length()) { if (i % 2!= 0) System.out.print(text.charAt(i)); else System.out.print( (""+text.charat(i)).touppercase()); i++; TeSt 2. Ergänze die folgende for Schleife so, dass die Variable a nach Ausführung der Schleife die Summe der Zahlen von 1 bis 10 enthält: int a = 0; for (int zaehler = 1; zaehler <= 10; zaehler++) { a+=zaehler; oder: int a = 0; for (int zaehler = 0; zaehler <10; zaehler++) { a += zaehler+1; 9

3. Gegeben seien die beiden folgenden für positive ganze Zahlen (größer 0) definierten Funktionen: g(n) = n 1 h(n) = n! (gemeint ist die Fakultätsfunktion: n! = 1 2... n) sowie die Funktion f(m, 0) = m für n = 0 f(m, n) = f(h(g(n)), g(n)) für n > 0 Schreibe jeweils eine Java Methode, die g, h und f implementiert. Gehe dabei davon aus, dass nur korrekte Parameter übergeben werden. public static int g ( int n ) { return n-1; public static int h ( int n ) { int fak=1; for (int i=1; i<= n; i++) fak *=i; return fak; public static int f ( int m, int n ) { if (n==0) return m; else return f(h(g(n)),g(n)); 10

5 Objektorientiertes Programmieren (10 Punkte) Definiere eine Java-Klasse zur Simulation der Senderauswahl bei einem Fernseher. Der Fernseher hat eine feste Zahl an Speicherplätzen (z.b. 30), die beginnend mit 0 durchgehend numeriert sind. Am Fernseher wird jeweils der Sender zum aktuell ausgewählten Speicherplatz angezeigt. Deine Klasse soll die folgenden Operation unterstützen: 1. Wechsel auf den nächsten Speicherplatz bzw. Sender (Zapping). Auf den letzten Speicherplatz folgt wieder der erste. 2. Speichern eines Sendernamens (z.b. ARD) fur den aktuellen Speicherplatz. 3. Ausgabe des Sendernamens fur den aktuellen Speicherplatz. 4. Suchen des Speicherplatzes zu einem Sendernamen; und Wechsel zu diesem Sender, falls ein solcher Speicherplatz existiert. Schreibe eine passende Klassendefinition mit Instanzvariablen, geeignetem Konstruktor und den Signaturen für alle benötigten Methoden. Implementiere eine der Methoden nach Deiner Wahl. Listing 4: KreisTest.java 1 p u b l i c c l a s s F e r n s e h e r { 2 3 p r i v a t e i n t a k t u e l l e r S e n d e r ; 4 p r i v a t e S t r i n g [ ] senderkennungen ; 5 6 F e r n s e h e r ( i n t s e n d e r Z a h l ) { 7 senderkennungen = new S t r i n g [ s e n d e r Z a h l ] ; 8 f o r ( i n t i = 0 ; i < s e n d e r Z a h l ; i ++) 9 senderkennungen [ i ] = " " ; 10 a k t u e l l e r S e n d e r = 0 ; 11 12 13 / * n i c h t i n d e r Aufgabe g e f o r d e r t 14 p r i v a t e b o o l e a n a n g e s c h a l t e t ; * / 15 p u b l i c void a n s c h a l t e n ( ) { a n g e s c h a l t e t = t r u e ; 16 p u b l i c void a u s s c h a l t e n ( ) { a n g e s c h a l t e t = f a l s e ; 17 18 p u b l i c void zap ( ) { 19 i f ( a k t u e l l e r S e n d e r = = senderkennungen. l e n g t h 1) 11

20 a k t u e l l e r S e n d e r = 0 ; 21 e l s e 22 a k t u e l l e r S e n d e r ++; 23 24 25 p u b l i c void setzekennung ( S t r i n g kennung ) { 26 senderkennung [ a k t u e l l e r S e n d e r ] = kennung ; 27 28 29 p u b l i c S t r i n g gibkennung ( ) { 30 r e t u r n senderkennung [ a k t u e l l e r S e n d e r ] ; 31 32 33 / * 34 * l i e f e r e gefundenen S p e i c h e r p l a t z zurueck, 35 * oder 1 wenn Sender n i c h t gefunden 36 * / 37 p u b l i c i n t waehlesender ( S t r i n g kennung ) { 38 39 f o r ( i n t i = 0 ; i < senderkennungen. l e n g t h ; i + + ) { 40 i f ( senderkennungen [ i ]. e q u a l s ( kennung ) ) { 41 a k t u e l l e r S e n d e r = i ; 42 r e t u r n i ; 43 44 45 r e t u r n 1; 46 47 Gefordert war nur eine Implementation, z.b. von gibkennung(). restlichen Methoden genügt die Angabe der Signatur: public void setzekennung(string name) Für die 12

6 Vererbung (10 Punkte) 1. Schreibe drei Klassen zu folgendem Problem: Es gibt Bücher, zu denen der Autorenname, der Titel und die Sprache festgehalten werden soll. Gedruckte Bücher und Elektronische Bücher sind Spezialisierungen von Büchern. Gedruckte Bücher haben zusätzlich eine Seitenzahl und sind entweder ein Taschenbuch oder nicht. Elektronische Bücher haben eine Dateigröße und ein Format. Die Klassen sollen folgende abstrakte Methoden haben: Buch: drucken() ElektronischesBuch: speichern() GedrucktesBuch: kopieren() Achtung: Klassen müssen als abstrakt definiert werden! abstract class Buch { String autor; String sprache; String titel; abstract public void drucken(); abstract class GedrucktesBuch extends Buch { int seiten; boolean taschenbuch; abstract public void kopieren(); abstract class ElektronischesBuch extends Buch { int dateigroesse; String format; abstract public void speichern(); 2. Es sei eine Klasse nicht-abstrakte WebArtikel als Erweiterung von ElektronischesBuch gegeben, sowie eine nicht-abstrakte Klasse Lehrbuch, die GedrucktesBuch erweitert. Erstelle nun ein Buch[] Array und fülle es mit vier Instanzen von Klassen, die Du in diesem Array speichern kannst. 13

Buch[] array = new Buch[4]; array[0] = new WebArtikel(); array[1] = new WebArtikel(); array[2] = new Lehrbuch(); array[3] = new Lehrbuch(); Achtung: von den abstrakten Klassen Buch, GedrucktesBuch, ElektronischesBuch dürfen keine Instanzen erzeugt werden 3. Welche Methode besitzen alle in (2) erzeugten Instanzen? Schreibe eine Schleife, die für alle Elemente des Arrays diese Methode ausführt. drucken() for (int i=0; i<array.length; i++) array[i].drucken(); 4. Wann wird festgestellt, aus welcher Klassendefinition die auszuführende Methode herangezogen wird? Wie nennt man das dahinterstehende Konzept? Zur Laufzeit des Programms. Polymorphie. 14