Teil 1: Grundeigenschaften von Rechnern und Software
Aufgabe 1.1 [2P]
Welcher fundamentale Unterschied besteht zwischen dem Zweck eines Computer von dem Zweck anderer Maschinen (etwa einer Kaffeemaschine)?
Ein Computer ist eine universelle Maschine, frühere Maschinen hatten stets einen eindeutigen Zweck
Aufgabe 1.2 [3P]
Was ist ein Programm, d.h. woraus besteht es, was bewirkt es?
Ein Programm ist ein “Kochrezept” zur Lösung eines Problems, ausgedrückt durch eine Folge von Anweisungen die der Computer der Reihe nach abarbeitet.
Aufgabe 1.3 [5P]
Ein Werbespot behauptet, ein Produkt sei mit Computern entwickelt und geprüft.
Diskutieren Sie diese Aussage bzgl. der Qualität des Produkts.
Nicht alles, was mit Computern gemacht wird, ist automatisch richtig. Das Programm wird von Menschen erstellt und ist damit für systematische Fehler anfällig, ebenso wie die Interpretation seiner Ausgaben. Ist es jedoch richtig, dann gilt dies immer (ein Rechner ermüdet nicht und macht keine Leichtsinnsfehler).
Aufgabe 1.4 [5P]
Software hat besondere Eigenschaften bzw. Vorteile die jedoch auch oft ihre Erstellung erschweren können. Welche?
Software ist sehr flexibel und (scheinbar) jederzeit leicht änderbar – auch in letzter Minute.
Andererseits ist Software als rein geistiges Produkt nicht greifbar und unterliegt nicht den üblichen physikalischen Gesetzen. So gilt zum Beispiel das Lokalitätsprinzip nicht, d.h. eine Änderung an einer Stelle kann Folgen an ganz anderer Stelle haben.
Aufgabe 1.5 [4P+1ZP]
Nennen Sie die Phasen/Tätigkeiten eines Software-Entwicklungsprozesses Analyse, Design, Implementierung, Test, Wartung
Aufgabe 1.6 [6P]
Charakterisieren Sie das Programmieren “im Großen” und “im Kleinen” anhand folgender Parameter:
Programmieren im Großen Programmieren im Kleinen
Anzahl der Entwickler Viele Wenige/Einer
Anzahl der Anwender Viele Wenige/Programmierer
Größe/Komplexität des Projekts Hoch Niedrig
Teil 2: Grundlagen der objektorientierten Softwareentwicklung
Aufgabe 2.1 [5P]
Erläutern Sie die Bedeutung der Begriffe “Klasse” und “Objekt”
Eine Klasse ist die Abstraktion eines Konzepts, z.B. Person, und kann als Bauplan für eine Familie von Objekten interpretiert werden, d.h. sie und definiert deren Eigenschaften.
Ein Objekt ist eine Instanz eines Konzepts bzw. einer Klasse, z.B. eine konkrete Person, d.h. es enthält die im Bauplan angegebenen Eigenschaften.
Aufgabe 2.2 [5P]
Sowohl Klassen als auch Objekte können Eigenschaften haben. Diese Beschreiben deren Zustand und ihr Verhalten. Nennen Sie diese Eigenschaften.
Klasseneigenschaften: Zustand=Klassenvariablen, Verhalten=Klassenmethoden.
Objekteigenschaften: Zustand=Instanzvariablen, Verhalten=Instanzmethoden.
Aufgabe 2.3 [5P]
Erläutern Sie den Unterschied zwischen Klassen- und Objekteigenschaften Klasseneigenschaften sind nur 1x vorhanden und jederzeit über die Klasse erreichbar.
Objekteigenschaften sind für jedes Objekt vorhanden und nur über eine Objektreferenz erreichbar.
Aufgabe 2.4 [5P]
Nennen Sie zu jeder der folgenden Beschreibungen den passenden Begriff Eine spezielle Methode, mit der neue Objekte initialisiert werden
Konstruktor
Ein Wert, der an eine Methode übergeben wird (aktueller) Parameter/Argument
Verfahren, bei dem sich eine Methode selbst wieder aufruft Rekursion
Notation zur graphischen Modellierung der Eigenschaften und Beziehungen von Objekten Modellierungssprache, UML, Unified Modelling Language
Beziehung, bei der ein Objekt in einem anderen enthalten ist und mit diesem “stirbt”
Komposition Aufgabe 2.5 [5P]
Erläutern Sie folgende Begriffe Überladen einer Methode:
Implementierung mehrerer Methoden mit gleichem Namen und unterschiedl. Signatur.
Überschreiben einer Methode:
Ersetzen einer geerbten Methode durch eine eigene Implementierung mit gleicher Signatur
Teil 3: Elementare Java Syntax
Aufgabe 3.1 [5P]
Erläutern Sie die Bedeutung folgender Java Schlüsselwörter
public [ ] protected [ ] final [ ] static [ ] abstract [ ] Aufgabe 3.2 [5P]
Erläutern Sie Unterschiede/Gemeinsamkeiten zwischen Interfaces, abstrakten Klassen und Klassen. Geben Sie die Schlüsselwörter für deren Verwendung an.
Ein Interface definiert ein Protokoll für Objekte und kann nur abstrakte Instanzmethoden und Konstanten enthalten. Eine Klasse kann sämtliche Eigenschaften von Objekten beschreiben (bei einer abstrakten Klasse sind einige von Ihnen abstrakt). Rein abstrakte Klassen sind äquivalent zu Interfaces. Eine Klasse kann nur von einer Klasse erben aber mehrere Interfaces implementieren.
extends Erweiterung/Vererbung von Klassen und Interfaces implements Angabe von unterstützten Schnittstellen
Aufgabe 3.3 [5P]
In Java gibt es 2 Arten von Datentypen. Nennen Sie diese, geben Sie je ein Beispiel an und erläutern Sie anschließend deren Unterschied anhand ihres Verhaltens bei Zuweisungen und Methodenaufrufen.
Für primitive Datentypen, z.B. int, wird bei Zuweisungen sowie bei Methodenaufrufen der Wert kopiert (call-by-value), d.h. Änderungen an der Kopie haben keine Auswirkung auf das Original
Für objekttypen, z.B. String, wird bei Zuweisungen sowie bei Methodenaufrufen nur eine Referenz kopiert (call-by-reference), Änderungen an dieser Referenz verändern auch das Originalobjekt.
Aufgabe 3.4 [5P]
Erläutern Sie kurz den Unterschied zwischen if-else und einer switch-Anweisung Mit if-then können beliebige entweder-oder Bedingungen realisiert werden, eine switch-Anweisung ist ein Spezialfall einer if-else-if-else-... Kette und erlaubt eine Auswahl über einem skalaren
Datentyp
Aufgabe 3.5 [5P]
Ergänzen Sie folgendes Code-Fragment um get- und set-Methoden für die Elemente des Arrays. Implementieren Sie anschließend die Methode printAllValues() durch eine Schleife, die alle Elemente von values auf der Konsole ausgibt
public class Fido extends Dido { int[] values;
public int getValue(int index) { return values[index];
}
public void setValue(int index, int newValue) { values[index] = newValue;
}
public void printAllValues() {
for (int i=0; i<values.length; i++) { System.out.println(values[i]);
} } }
Teil 4: Verständnis von Java Programmen
Aufgabe 4.1 [10P]
Analysieren und beschreiben Sie die Funktion des folgenden Programms
package klausur.ss2003;
public class Analyse { int samples[];
public Analyse(int count) { samples = new int[count];
for (int i=0; i<count; ++i) {
samples[i] = (int) (Math.random()*10 + 1);
} }
public void run() { double total = 0;
for (int i=0; i<samples.length; ++i) { total += samples[i];
}
System.out.println( total/samples.length);
}
public static void main(String[] args) { new Analyse(10).run();
} }
Es erzeugt eine Folge von 10 Zufallszahlen zwischen 1 und 10 und berechnet deren Durchschnitt.
Aufgabe 4.2 [10P]
Finden und korrigieren Sie die Fehler in folgendem Programm
package klausur.ss2003;
// missing import statements import javax.swing.JFrame;
import javax.swing.JLabel;
public class Errors extends JFrame { // missing declaration
public void Errors() { // invalid return type super("Errors");
setDefaultCloseOperation( EXIT_ON_CLOSE);
getContentPane().add(
new JLabel("Congratulations! " + errorCount + " errors.");
);
pack();
}
public void main(String[] params) { // missing static new Errors(5.0).show(); // wrong argument
} }
Aufgabe 4.3 [10P]
Implementieren Sie die fehlenden Stellen in folgendem Programm
package klausur.ss2003;
import java.awt.event.*;
import javax.swing.*;
public class FillTheGaps extends JFrame { public FillTheGaps() {
super( "FillTheGaps");
setDefaultCloseOperation( EXIT_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setLayout( new BoxLayout( contentPane, BoxLayout.X_AXIS));
JButton myButton = new JButton("Start");
myButton.setToolTipText( "Where did you want to go yesterday?");
myButton.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e) { closeAction();
} });
contentPane.add( myButton);
contentPane.add( new JLabel( "Press start to shutdown"));
getContentPane().add( contentPane);
pack();
}
public void closeAction() { System.exit(1);
}
public static void main(String[] args) { FillTheGaps ftg = new FillTheGaps();
ftg.show();
} }