













Besser lernen dank der zahlreichen Ressourcen auf Docsity
Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo
Prüfungen vorbereiten
Besser lernen dank der zahlreichen Ressourcen auf Docsity
Download-Punkte bekommen.
Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo
Beispiellösung der Klausur zu Objektorientierte Programmierung mit Java - Juli 2004 (SS 2004)
Art: Prüfungen
1 / 21
Diese Seite wird in der Vorschau nicht angezeigt
Lass dir nichts Wichtiges entgehen!














Bearbeitungszeit: 120 Minuten NICHT MIT BLEISTIFT SCHREIBEN!
Nr Max Bewertung 1 8 xxxxx (a) 6 xxxxx (b) 2 xxxxx 2 9 xxxxx (a) 3 xxxxx (b) 3 xxxxx (c) 2 xxxxx (d) 1 xxxxx 3 9 xxxxx
Nr Max Bewertung 4 14 xxxxx (a) 5 xxxxx (b) 4 xxxxx (c) 1 xxxxx (d) 4 xxxxx 5 12 xxxxx 6 18 xxxxx 7 10 xxxxx (a) 2 xxxxx (b) 8 xxxxx Summe 80
Bitte benutzen Sie f¨ur die L¨osungen den freigelassenen Platz nach der jeweiligen An- gabe oder die R¨uckseite unter Angabe der Aufgabe. Nennen Sie m¨oglichst alle Annah- men, die Sie f¨ur die L¨osung einer Aufgabe treffen! Bei den vorgegebenen Programmen wurden die include-Zeilen der ¨Ubersicht halber weggelassen.
Viel Erfolg!
Aufgabe 1 (8 Punkte)
Der Einstiegspunkt in ein Java-Programm ist ¨ublicherweise die folgende Methode:
public static void main( String[] args )
Diese Methode befindet sich in einer Klasse, die dem Java-Interpreter als Argument ubergeben wird.¨
(a) 6 Punkte
Erkl¨aren Sie kurz die Bestandteile public, static und void des Methodenkopfes.
public zeigt an, daß die Methode nach außen hin bekannt ist. static zeigt an, daß es sich um eine Klassenmethode und nicht um eine Instanz- methode handelt; ihre Verwendung ist also nicht an ein Objekt der Klasse gebunden. void zeigt an, daß die Methode keinen R¨uckgabewert besitzt.
Aufgabe 2 (9 Punkte)
Gegeben sei die Java-Klasse Obscure.java (siehe Programmtext 2.1 auf Seite 4):
(a) 3 Punkte
Beschreiben Sie kurz, welche Ausgabe sich der Programmierer dieser Klasse wohl gew¨unscht hat (entweder mit eigenen Worten oder als Bildschirmausgabe)!
zero entspricht 0 one entspricht 1 two entspricht 2 three entspricht 3
Programm 2.1 Obscure.java
import java.util.*;
public class Obscure {
public static HashMap hm = new HashMap();
public static String[] NumString = new String[4];
public static void fillHashMap() { for ( int i = 0; i < 4; i++ ) { hm.put( NumString[i], i ); } }
public static void printHashMap() { for ( int i = 0; i < 4; i++ ) { String temp = NumString[i]; System.out.println( temp + "\tentspricht\t" + hm.get( temp ) ); } }
public static void main ( String[] args ) { NumString[0] = "zero"; NumString[1] = "one"; NumString[2] = "two"; NumString[3] = "three";
fillHashMap(); printHashMap(); }
(c) 2 Punkte
Geben Sie nun an, welche ¨Anderung vorgenommen werden muß, damit das Pro- gramm lauff¨ahig wird! In der Methode fillHashMap() muß die HashMap unter Verwendung ei- ner sogenannten Wrapperklasse gef¨ullt werden. Wrapperklassen transformieren primitive Datentypen in Objekte. Eine HashMap erwartet sowohl f¨ur den Schl¨ussel als auch f¨ur den Wert Objekte, in der Impementierung aus der Aufgabenstellung wird aber versucht, als Wert eine Integer-Variable (und damit also kein Objekt ) zuzuweisen. Zur L¨osung dieses Problems muß die relevante Zeile der Methode in
hm.put( NumString[i], new Integer(i) );
abge¨andert werden.
(d) 1 Punkte Wie ist der Fachbegriff in Java, auf den es bei dieser ¨Anderung ankommt? Wrapperklasse
Aufgabe 3 (9 Punkte)
Gegeben seien die Klasse A ,
package a; public class A { private int x; protected int y; public int z; public void print() { System.out.println(x); // (1) System.out.println(y); // (2) System.out.println(z); // (3) } }
die Klasse B
package b; import a.A; public class B extends A { public void print() { System.out.println(x); // (4) System.out.println(y); // (5) System.out.println(z); // (6) } }
und die Klasse C.
package c; import b.B; public class C { public static void main(String[] args) { B b = new B(); System.out.println(b.x); // (7) System.out.println(b.y); // (8) System.out.println(b.z); // (9) } }
Kreuzen Sie in der folgenden Tabelle an, ob der Compiler die Anweisung mit der jeweiligen Nummer akzeptiert oder eine Fehlermeldung wegen dieser Anweisung aus- gibt.
Aufgabe 4 (14 Punkte)
Gegeben sei die folgende Klasse Quadrat:
Programm 4.2 Quadrat.java
public class Quadrat {
protected int len; // Seitenlaenge
Quadrat( int len ) { this.len = len; }
public int getArea() { return len * len; } }
(a) 5 Punkte Erweitern Sie diese Klasse so, daß eine neue Klasse Rechteck entsteht (die neben der Seitenl¨ange auch eine Seitenh¨ohe besitzt). Schreiben Sie den dazu notwendigen Konstruktor und ¨uberschreiben Sie die Methode getArea().
public class Rechteck extends Quadrat {
protected int height; /* Seitenhoehe, die Seitenlaenge haben wir bereits in der Oberklasse */
Rechteck ( int len, int height ) { super(len); this.height = height; }
public int getArea() { return len * height; }
(b) 4 Punkte Gegeben sei die folgende main()-Methode:
Programm 4.3 Eine main()-Methode
public static void main ( String[] args ) {
Rechteck q1 = new Rechteck(2,4); System.out.println(q1.getArea());
Quadrat q2 = q1; System.out.println(q2.getArea());
Geben Sie an, welche Methoden-Implementierungen bei q1.getArea() und bei q2.getArea() aufgerufen werden und wie die Ausgabe aussieht. Be- gr¨unden Sie Ihre Antwort. (Sie k¨onnen selbstverst¨andlich davon ausgehen, daß die main()-Methode in eine ¨offentlich zug¨angliche Klasse geschrieben wurde und die Klassen Quadrat und Rechteck zur korrekten Verwendung vorlie- gen.)
(c) 1 Punkte
Wie heißt der objektorientierte ” Mechanismus“, der bei q2.getArea() zum Tragen kommt? Polymorphie
Aufgabe 5 (12 Punkte)
Gegeben sei die folgende Klasse UseComplex.java (siehe Programm 5.5 auf Sei- te 12.
Programm 5.5 UseComplex.java
public class UseComplex {
public static void main ( String[] args ) {
// Zwei Objekte der komplexen Zahlen anlegen Complex z1 = new Complex(5, 7); Complex z2 = new Complex(7, 2);
/* Komplexe Zahl ausgeben */ System.out.println( "Ausgabe von z1: "+z1 ); System.out.println( "Ausgabe von z2: "+z2 );
/* Eine komplexe Zahl mit einem Skalar (Integer) multiplizieren und das Ergebnis ausgeben */ Complex z3 = z1.multiplyBy( 5 ); System.out.println( "5 * z1 ergibt: "+z3 );
/* Zwei komplexe Zahlen multiplizieren und das Ergebnis ausgeben */ Complex z4 = z1.multiplyBy( z2 ); System.out.println( "z1 * z2 ergibt: "+z4 );
Dieses Programm verwendet die Klasse Complex, welche die komplexen Zahlen dar- stelle. Es produziert die folgende Ausgabe:
theseus$ java UseComplex Ausgabe von z1: 5 + i* Ausgabe von z2: 7 + i* 5 * z1 ergibt: 25 + i* z1 * z2 ergibt: 21 + i*
Schreiben Sie die Klasse Complex.java mit allen notwendigen Variablen und Me- thoden, die dazu n¨otig sind, um das gegebene Programm 5.5 lauff¨ahig zu machen.
Erl¨auterungen zu komplexen Zahlen:
z = x + i · y
(a, b) + (c, d) = (a + c, b + d)
λ · (x, y) = (λ · x, λ · y)
Zur Vereinfachung k¨onnen Sie f ¨ur diese Aufgabe annehmen, daß f ¨ur eine kom- plexe Zahl (x, y) gilt: x, y ∈ N!
Aufgabe 6 (18 Punkte)
Implementieren Sie unter Verwendung von javax.swing die folgende grafische Applikation XTrans (mit einem Fenster, das die folgenden beiden Gestalten haben kann):
L¨osung:
import java.awt.; import java.awt.event.; import javax.swing.*;
public class XTrans {
public static void main ( String[] args ) {
/* Zwei Stringarrays vorbereiten (fuer deutschen bzw. englischen Inhalt) */ final String[] animalsEnglish = { "Dog", "Cat", "Mouse" }; final String[] animalsGerman = { "Hund", "Katze", "Maus" }; final DefaultComboBoxModel animalsModelGerman = new DefaultComboBoxModel( animalsGerman ); final DefaultComboBoxModel animalsModelEnglish = new DefaultComboBoxModel( animalsEnglish );
// Das Fenster (besser: den Frame) vorbereiten JFrame frame = new JFrame(); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frame.getContentPane().setLayout( new GridLayout( 0,1 ) );
/* Die beiden grafischen Widgets erzeugen und dem Frame hinzufuegen /* final JComboBox cmbBox = new JComboBox( animalsModelGerman ); final JButton button = new JButton( "Switch to English" ); frame.getContentPane().add( cmbBox ); frame.getContentPane().add( button );
// Aktion fuer Anklicken der Schaltflaeche waehlen ActionListener al = new ActionListener() { public void actionPerformed ( ActionEvent e ) { if (e.getActionCommand().indexOf( "English" ) != -1) { button.setText( "In Deutsch umschalten" ); cmbBox.setModel( animalsModelEnglish ); } if (e.getActionCommand().indexOf( "Deutsch" ) != -1) { button.setText( "Switch to English" ); cmbBox.setModel( animalsModelGerman ); } }
button.addActionListener( al );
// Das Uebliche zum Anzeigen frame.pack(); frame.show(); } }