Java - BFH

Werbung
Semesterprüfung 2009 Informatik 4 (Java)
Name:
Klasse:
Datum:
Erlaubte Hilfsmittel: Alles, ausser PC, Laptop oder Nachbar.
Zeit:120 min
Maximal erreichbare Punktzahl: 120:
Lesen Sie die Aufgaben genau durch und lösen Sie nur die gestellten Aufgaben. Lösungen oder
Lösungsteile die nicht den Aufgaben entsprechen ergeben keine Punkte.
Bei jeder Aufgabe sind die erreichbaren Punkte angegeben, planen Sie entsprechend. Für eine
genügende Note ist die Hälfte der möglichen Punkte erforderlich.
Lesen Sie zuerst alle Aufgaben durch, bevor Sie beginnen.
Wenn Sie bei einer Aufgabe den Weg zur vollständigen Lösung nicht sehen, Lösen Sie diejenigen Teile die sie können.
Bei grösseren Aufgaben gehört zur Lösung auch der Lösungsweg. Dokumentieren Sie die Lösungsschritte. Sonst können keine Teilpunkte bei falschen Lösungen vergeben werden.
Nicht vergessen, zu einem Programm gehört auch sinnvoller Kommentar.
Wenn irgendwo Unklarheiten sind, oder Ihnen Angaben fehlen, treffen Sie eine Annahme, und
schreiben eine entsprechende Anmerkung zur Aufgabe.
Vergessen Sie nicht, alle Blätter abzugeben. Heften Sie alle Blätter zusammen.
Viel Erfolg!
1/8
1). [20 Punkte] Klassendiagramm 'Schrauben GmbH'
Die Firma Schrauben GmbH besitzt eine Werkshalle und ein Direktionsgebäude. Die Firma
besteht aus einer Produktionsabteilung und einer Entwicklungsabteilung. Die Firma beschäftigt folgende Mitarbeiter: Mechaniker, Zeichner sowie einen Produktionsleiter und einen
Entwicklungsleiter. Die Produktionsabteilung setzt sich aus 4-7 Mechanikern und einem
Produktionsleiter zusammen, die Entwicklungsabteilung aus einem Entwicklungsleiter und
zwei Zeichnern. Jeder Mechaniker hat einen Drehbank, jeder Zeichner einen Zeichentisch
und die beiden Abteilungsleiter haben je ein eigenes Bureau. Drehbänke und Zeichentische
sind in der Werkhalle untergebracht, die Bureaus sind im Direktionsgebäude untergebracht.
Aufgabenstellung
Überlegen sie sich, welche Klassen aus obigem Text modelliert werden können und zeichnen
sie das Klassendiagramm. Entwerfen sie auch gemeinsame Elternklassen wo dies Sinn
macht. Attribute und Methoden der einzelnen Klassen müssen sie nicht angeben, jedoch sollen sie die Beziehungen zwischen den Klassen zeichnen. Geben Sie auch die Art der Beziehungen, und wo sinnvoll auch die Kardinalität (Anzahl der beteiligten Objekte).
2/8
2). [30 Punkte] Lichtsignalanlage
Gegeben ist folgendes Klassendiagramm einer Lichtsignalanlage
LichtSignalAnlage
Steuerung
1
+ Steuerung(melder : ArrayList, lichtSignale : ArrayList)
+ startControl()
+ stopControl()
+ LichtSignalAnlage()
+ addLichtSignal(signal : LichtSignal)
+ addMelder(melder : Melder)
1..n
1..n
LichtSignal <<abstract>>
- myType : String
# myColor : Color
# myId : int
+ LichtSignal(type : String)
+ <<abstract>> setColor(color : Color)
+ <<abstract>> getColor() : Color
+ <<abstract>> getId() : int
+ getType() : String
PersonenAmpel
AutoAmpel
1..n
Melder <<abstract>>
- myType : String
- myName : String
1..n
+ Melder(name : String, type : String)
+ <<abstract>> getData() : byte[]
+ getName() : String
+ getType() : String
IGSMDevice <<interface>>
+ transmit(data : byte[])
+ receive() : byte[]
MelderTaster
MelderRemote
+ MelderTaster(name : String)
+ MelderRemote(name : String)
- myBrightness : float
+ PersonenAmpel(id : int)
+ AutoAmpel(id : int, bright : float)
+ bedeutet public
- bedeutet private
# bedeutet protected
Aufgabenstellung
Schreiben sie den Java-Code zu obigem Klassendiagramm. Setzen sie dabei alle Klassen, das
Interface "IGSMDevice", die aufgeführten Attribute und Methoden (Inklusive der Konstruktoren) um. Fügen sie in den Klassen ebenfalls die Attribute hinzu, welche sich durch die Assoziationen zwischen den Klassen LichtSignalAnlage, Melder und LichtSignal ergeben. Für
die Beziehungen "1..n" verwenden sie eine ArrayList aus java.util.ArrayList. Ein
Objekt können sie mit der Methode "add()" in die ArrayList hinzufügen.
Attribute vom Typ java.awt.Color können mit den Konstanten Color.RED, Color.GREEN und Color.YELLOW initialisiert verwenden. Sie müssen alle Methoden, soweit durch das Klassendiagramm vorgegeben, implementieren. Insbesondere die Konstruktoren sollen ihre Objekte jeweils vollständig initialisieren. Die Methodenrümpfe von transmit(),
receive(), startControl(), stopControl sowie getData() dürfen sie leer lassen (Kein auszuführender Code).
3/8
3). [15 Punkte] Klasse Uhrzeit
Aufgabenstellung
Implementieren (Programmieren) Sie die Klasse Uhrzeit. Sie soll einen Konstruktor haben,
welchem die drei Zahlen Stunden, Minuten und Sekunden als Integerzahlen übergeben können; die drei Attribute Stunden, Minuten und Sekunden welche vom Konstruktor initialisiert
werden sollen; sowie eine Methode InSekunden(), welche die Uhrzeit in Sekunden umrechnet und zurückliefert. Wenn sich aus den drei Werten im Konstruktor keine gültige Uhrzeit
ergibt (Negative Zahlen, Werte grösser als 59 bei Sekunden oder Minuten), soll der Konstruktor eine 'IllegalTimeFormatException' werfen. (Hinweis: Benutzerdefinierte Exceptions
müssen von der Klasse Exception abgeleitet werden).
4/8
4). [45 Punkte] Applet „Quizmaster“
Aufgabenstellung
Implementieren Sie ein vollständiges Applet, welches als Rechenquiz benutzt werden kann.
Das Applet soll sich dem Benutzer wie folgt präsentieren:
Start und Uebernehmen sind Buttons, die Texte Restzeit, Punkte, Aufgabe und Antwort
sind Labels und die vier Felder daneben sind Textfields.
Das Applet hat folgende Funktion:
Der Benutzer kann während 60 Sekunden einfache Rechenaufgaben lösen, nach den 60 Sekunden wird die Anzahl korrekt gelöster Aufgaben angezeigt.
Nach dem Drücken von Start wird die Zeit mit 60 gestartet, Der Punktezähler auf 0 gesetzt
und im Feld Aufgabe eine einfache Rechenaufgabe angezeigt (Eine Addition von zwei zufällig ausgewählten Zahlen). Im Feld Antwort kann nun die Lösung eingetippt werden, und mit
Uebernehmen quittiert werden. Wenn Uebernehmen geklickt wird, überprüft das Applet
die Antwort, wenn sie stimmt wird die Punktezahl (Feld Punkte) um 1 erhöht, ansonsten
nicht. Anschliessend wird eine neue Aufgabe erzeugt und ausgegeben. Das ganze wird solange wiederholt, bis die Zeit abgelaufen ist. Im Feld Restzeit wird ständig angezeigt, wieviel
Zeit noch zur Verfügung steht. Wenn die Zeit abgelaufen ist, hat das drücken von Uebernehmen keine Wirkung.
Mit Start kann das Spiel jederzeit neu gestartet werden.
Wenn im Antwortfeld keine gültige Zahl eingegeben wird, gilt die Antwort als falsch.
Hinweis:
Zufallszahlen können Sie mit einem Objekt der Klasse Random aus java.util erzeugen,
benutzen Sie dazu die Methode nextInt() dieses Objektes.
Random r = new Random();
ZufallsZahl = r.nextInt();
5/8
5). [10 Punkte] Kurzfragen, 1 Punkt pro Aufgabe
Aufgabenstellung
Kreuzen Sie jeweils die korrekten Antworten an. Es können auch mehrere Antworten richtig
sein. Es gibt bei jeder Aufgabe nur einen Punkt, wenn alle Kreuze korrekt gesetzt sind.
a) Welche der nachfolgenden Aussagen sind korrekt?
Der Klassenname und der Dateiname der Klasse müssen übereinstimmen.
Statische Methoden sind keine Objektmethoden, können aber aus den Objekten
aufgerufen werden.
Ein Objekt einer Klasse kann auch ohne explizite Implementierung eines Konstruktors instanziert werden.
Pro Klasse darf nicht mehr als 1 Konstruktor implementiert werden.
Innerhalb einer Klasse ist das Verwenden identischer Methodennamen nicht zulässig.
b) Welche der nachfolgenden Aussagen sind korrekt?
Abstrakte Klassen dürfen auch von andern Klassen erben und Interfaces implementieren.
Eine, von einer Abstrakten Klasse abgeleitetes Objekt ist auch vom Typ der Abstrakten Klasse (instanceof …).
Von Abstrakten Klassen können keine Objekte erzeugt werden.
Eine Methode einer Klasse kann auch als abstrakt definiert werden, ohne dass damit
die ganze Klasse abstrakt wird.
Abstrakte Klassen dürfen Attribute besitzen.
c) Welche der nachfolgenden Aussagen sind korrekt?
Als Public deklarierte Methoden und Attribute können von jeder beliebigen Klasse
benutzt werden.
Als Private deklarierte Methoden und Attribute können nur innerhalb der eigenen
Klasse und von allen (von dieser Klasse) abgeleiteten Klassen benutzt werden.
Als Protected deklarierte Methoden und Attribute können auch von Packagefremden Klassen benutzt werden, sofern diese von der betreffenden Klasse abgeleitet sind.
Ohne Angabe eines Zugriffsmodifiers (private, public, etc.) sind Methoden und Attribute innerhalb desselben Packages uneingeschränkt zugreifbar.
d) Welche der folgenden Definitionen der main()-Methode (Einstiegspunkt eines JavaProgramms) sind korrekt?
public static void main(String[] args) {}.
private static void main(int[] args) {}.
public static int main(String[] args) {}.
private void main(int[] args) {}.
public static void main(int[] args) {}.
6/8
e) Welche der nachfolgenden Aussagen sind korrekt?
Jede Klasse in Java ist von der Klasse Object abgeleitet.
Von einer bestimmten Klasse kann nur einmal geerbt werden.
Mit super() wird der Konstruktor der Basisklasse aufgerufen.
Eine Klasse kann mehrere Interfaces implementieren, jedoch nur von einer Klasse
erben.
Mit 'this' kann innerhalb der eigenen Klasse eine statische Methode referenziert
werden.
f) Gegeben ist folgender Code:
String a = new String("Hallo");
String b = new String("Hallo");
String c = b;
Welche der nachfolgenden Aussagen sind korrekt?
a == b ergibt true
a.equals(b) ergibt true
c == b ergibt true
c.equals(a) ergibt true
g) Gegeben ist folgende, vollständig implementierte Klasse:
import java.awt.Dimension;
public class Auto {
private Auto(int w, int h){
int width = w;
int height = h;
}
public Dimension getDimension() throws Exception{
return new Dimension( width, height );
}
}
Welche der nachfolgenden Aussagen sind korrekt?
Der implementierte Konstruktor kann nur innerhalb der Klasse 'Auto' aufgerufen
werden.
Mit "new Auto()" kann ein Objekt der Klasse Auto erzeugt werden.
Bei der Verwendung der Methode getDimension() muss diese zwingend innerhalb
einer try/catch-Anweisung stehen oder die Exception muss "weitergeworfen" werden.
Die Variabeln width und height können in der ganzen Klasse verwendet werden, da
sie im Konstruktor deklariert und initialisiert werden.
Die Klasse Auto ist korrekt implementiert, d.h. ohne Fehler kompilierbar (Hinweis:
Der verwendete Konstruktor der Klasse Dimension ist korrekt).
h) Welche der nachfolgenden Aussagen sind korrekt?
Sobald ein Objekt nicht mehr durch eine Variable referenziert ist, wird es umgehend durch den Garbage Collector gelöscht.
7/8
In Java kann die main()-Methode einer Applikation von einer andern JavaApplikation aufgerufen werden.
Java-Applikationen können auf jedem Rechnersystem (Linux, Windows, OS X,
etc.) ausgeführt werden, welches eine versionskompatible virtuelle Machine installiert hat.
Elementare Datentypen (int, byte, boolean, etc) können in jeden andern elementaren
Datentyp umgewandelt werden (casting).
i) Welche der nachfolgenden Aussagen sind korrekt?
Java-Applets müssen von der Klasse Applet abgeleitet werden.
Anstelle des Konstruktors wird bei einem Applet die init()-Methode verwendet.
Einem Applet können mit dem PARAM-Tag Argumente von der WEB-Seite aus
übergeben werden.
Der Applet-Code wird im Gegensatz zu einer Applikation auf dem Server (und
nicht auf dem Client) ausgeführt.
Applets können auf Dateien des lokalen Rechners zugreifen.
j) Bei welchen Zeilen wird (in der Zeile) ein neues Objekt erzeugt?
String str = new String("Name");
String name;
String str = "Name";
int i = 5;
Integer zahl = new Integer(5);
8/8
Herunterladen