Teil 1: Grundlegende Eigenschaften der

Werbung
Fachhochschule Esslingen
Hochschule für Technik
Zahl der Blätter: 9
Sommersemester 2011
Blatt Nummer: 1
Studiengang: Wirtschaftsinformatik
Fachnummer:1 WF 2061/-62/-63
Prüfungsfach: Softwareentwicklung Vertiefung
Semester: 2
Hilfsmittel: Notizen, Skript / Laborbuch, ein Buch nach Wahl
Zeit:
Name:
Matr.Nr.:
Vorname:
90 Minuten
Teil 1: Grundlegende Eigenschaften der Sprache Java [25P]
Aufgabe 1.1 Datentypen [5P]
Beantworten Sie die folgenden Fragen und geben Sie ggf. ein geeignetes Codebeispiel an.
In Java gibt es primitive Datentypen und Referenztypen. Wie verhalten bzw. unterscheiden sich
diese (bei einer lokalen Variablen) bzgl. der folgenden Eigenschaften (Tabelle ausfüllen)
Speicherort für Werte
Verhalten bei Zuweisung
Bedeutung von typecasts
Methodenaufruf
Vererbung
Primitive Datentypen
Wert in der Variable / Stack
Kopie des Werts
Echte Umwandlung des Werts
Geht nicht
Geht nicht
Referenztypen
Referenz zu Objekt auf dem Heap
Kopie der Referenz
Uminterpretation des Datentyps
Geht, mit Objekt und Punktoperator
Geht, aber nur Einfachvererbung
Aufgabe 1.2 Wrapperklassen [5P]
Um die Brücke zwischen primitiven Datentypen und Referenztypen zu schlagen existieren
in Java die sog. Wrapperklassen. Geben Sie anhand der Wrapperklasse Integer an, wie ein
primitiver Wert in ein Objekt bzw. in einen String umgewandelt werden kann (Coding!).
Umwandlung Wert => Objekt
Umwandlung Objekt => Wert
Umwandlung Wert => String
Umwandlung String => Wert
Object o = new Integer( 42);
int i = ((Integer)o).intValue();
String s = Integer.toString( 42);
int i = Integer.parseInt( "42");
Bei welcher Umwandlung kann eine Exception auftreten? Welche?
ParseException, bei der Interpretation eines ungültigen Strings
Aufgabe 1.3 Autoboxing [5P]
Autoboxing wurde eingeführt um die Verwendung von Wrapperklassen zu vereinfachen.
Beschreiben Sie, welche der Umwandlungen in der vorherigen Aufgabe nun vereinfacht
werden und kommentieren Sie die Zeilen 4-6 des folgenden Codings.
Die Umwandlungen " Wert => Objekt" und "Objekt => Wert" werden automatisch vorgenommen.
01: public class Autoboxing {
02:
03: public static void main( String[] args) {
04:
Integer i = 17; // Autoboxing 17 => new Integer(17)
05:
int j = i + 4; // Auto-Unboxing Integer i => int & Berechnung
06:
String result = ((Object)j).toString(); // Autoboxing+toString()
07:
System.out.println( "17+4=" + result);
08: }
09: }
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2011
Zahl der Blätter: 9
Blatt Nummer: 2
Studiengang: Wirtschaftsinformatik
Fachnummer:1 WF 2061/-62/-63
Prüfungsfach: Softwareentwicklung Vertiefung
Semester: 2
Hilfsmittel: Notizen, Skript / Laborbuch, ein Buch nach Wahl
Zeit:
Name:
Matr.Nr.:
Vorname:
90 Minuten
Aufgabe 1.4 Kontrollstrukturen [10P]
Das folgende Beispielprogramm zur Ermittlung von mehreren verschiedenen Zufallszahlen
enthält verschiedene Kontrollstrukturen. Analysieren Sie das Programm und beantworten
Sie die zugehörigen Fragen.
01: public class RandomSelection {
02:
03: public static void main( String[] args) {
04:
int[] numbers = new int[5];
05:
for ( int i=0; i<numbers.length; ++i) {
06:
while (true) {
07:
boolean re = false;
08:
int number = (int)(Math.random()*10+10);
09:
for ( int j=0; j<i; ++j) {
10:
if ( number==numbers[j]) re = true;
11:
}
12:
if ( !re) {
13:
numbers[i] = number;
14:
break;
15:
}
16:
}
17:
}
18:
for ( int number : numbers) {
19:
System.out.println( number);
20:
}
21: }
22: }
1. Wieviele verschiedene Kontrollstrukturen werden hier verwendet? 4 (for, while, if, for-each)
2. Wieviele Zufallszahlen werden erzeugt? 5, entsprechend der Größe des Arrays "numbers"
3. Welchen Wertebereich haben die Zufallszahlen? Untergrenze 10, Obergrenze 19 (9.99…+10)
4. Welche Aufgabe hat die Schleife in Zeile 6? Wiederholung bis eindeutige Zahl gefunden
5. Welche Aufgabe hat die Variable "re"? Zeigt an, ob eine Wiederholung nötig ist
6. Wie deuten Sie die Bedingung "j<i" in Zeile 9? Nur die bisherigen Zahlen vergleichen
7. Welchen Zweck hat die if-Anweisung in Zeile 10? Prüfung auf identische Zahl
8. Welche Laufzeitverbesserung wäre hier noch möglich? break-Anweisung wenn identisch
9. Was bewirkt die break-Anweisung in Zeile 14? Verlassen der Endlos-Schleife
10. Wie nennt man die Kontrollstuktur in Zeile 18? Neue for-Schleife bzw. for-each-Schleife
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2011
Zahl der Blätter: 9
Blatt Nummer: 3
Studiengang: Wirtschaftsinformatik
Fachnummer:1 WF 2061/-62/-63
Prüfungsfach: Softwareentwicklung Vertiefung
Semester: 2
Hilfsmittel: Notizen, Skript / Laborbuch, ein Buch nach Wahl
Zeit:
Name:
Matr.Nr.:
Vorname:
90 Minuten
Teil 2: Elementare Bibliothekskomponenten [15P]
Aufgabe 2.1 Collections und Generics [10P]
Beantworten Sie die folgenden Fragen zum Thema
Nennen Sie die drei Arten von Collections und geben Sie jeweils eine konkrete Beispielklasse an.
List => ArrayList, Set => HashSet, Map => HashMap
Mit Hilfe von Generics kann die Typsicherheit von Collections erhöht werden. Verbessern Sie das
folgende nicht-generische Programm indem Sie Generics verwenden und die Fragen beantworten.
01: public class WithoutGenerics {
02: public static void main( String[] args) {
03:
List l = new ArrayList();
04:
l.add( new Person( "Jonny", "Java"));
05:
l.add( new Person( "Paula", "Perl"));
06:
l.add( new Object());
07:
Iterator iter = l.iterator();
08:
while (iter.hasNext()) {
09:
Person p = (Person)iter.next();
10:
System.out.println( p);
11:
}
12: }
13: }
01: public class WithGenerics {
01: public static void main( String[] args) {
02:
List<Person> l = new ArrayList<Person>(); // 2P
03:
l.add( new Person( "Jonny", "Java"));
04:
l.add( new Person( "Paula", "Perl"));
05:
l.add( new Object());
06:
Iterator<Person> iter = l.iterator(); // 1P
07:
while (iter.hasNext()) {
08:
Person p = iter.next(); // 1P
09:
System.out.println( p);
10:
}
11: }
12: }
In welcher Zeile des Programms wird mit der Liste ein Fehler gemacht?
In Zeile 6 (hinzufügen eines Objekts zu einer Liste von Personen)
In welcher Zeile des alten Programms äußert sich dieser Fehler und wie?
In Zeile 9 (ClassCastException zur Laufzeit, Objekt kann nicht in Person umgewandelt werden)
In welcher Zeile des neuen Programms äußert sich dieser Fehler und wie?
In Zeile 6 (Compile-Fehler, kann kein Objekt zu einer Liste von Personen hinzufügen)
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2011
Zahl der Blätter: 9
Blatt Nummer: 4
Studiengang: Wirtschaftsinformatik
Fachnummer:1 WF 2061/-62/-63
Prüfungsfach: Softwareentwicklung Vertiefung
Semester: 2
Hilfsmittel: Notizen, Skript / Laborbuch, ein Buch nach Wahl
Zeit:
Name:
Matr.Nr.:
Vorname:
90 Minuten
Aufgabe 2.2 Streams und Serialisierung[5P]
Beantworten Sie die folgenden Fragen zum Thema.
Was versteht man unter Serialisierung?
Die Umwandlung eines Objekts in einen Datenstrom, z.B. zur Speicherung
Was versteht man unter einem Stream bzw. einem Filter?
Ein Stream ist eine Datenquelle oder –Senke, ein Filter wandelt / interpretiert einen Datenstrom um
Welche Klassen sind notwendig, um Objekte in eine Datei zu schreiben?
Die Stream-Klasse FileOutputStream und die Filter-Klasse ObjectOutputStream
Geben Sie eine Instanzmethode (Deklaration und Implementierung) an, die nach Übergabe eines
Dateinamens und eines serialisierbaren Objekts versucht, dieses in der Datei zu speichern, und im
Fehlerfall die Exception an den Aufrufer zurückliefert (kein try-catch!).
public void saveObject( String fn, Serializable obj) throws IOException
{
FileOutputStream fos = new FileOutputStream( fn);
ObjectOutputStream oos = new ObjectOutputStream( fos);
oos.writeObject( obj);
}
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2011
Zahl der Blätter: 9
Blatt Nummer: 5
Studiengang: Wirtschaftsinformatik
Fachnummer:1 WF 2061/-62/-63
Prüfungsfach: Softwareentwicklung Vertiefung
Semester: 2
Hilfsmittel: Notizen, Skript / Laborbuch, ein Buch nach Wahl
Zeit:
Name:
Matr.Nr.:
Vorname:
90 Minuten
Teil 3: Entwicklung einfacher Java-Programme [5P]
Aufgabe 3.1 Ermittlung der Altersklasse beim Sport [5P]
Implementieren Sie die Methode, welche die Altersklasse eines Sportlers ermittelt.
Hinweis: Sie können bei allen Klassen sämtliche get-/set-Methoden voraussetzen.
Datei: AgeBracket.java
public class AgeBracket {
String name;
int minAge, maxAge;
public AgeBracket( String name, int minAge, int maxAge) {
// Initialisierung wie üblich
}
}
Datei: Athlete.java
public class Athlete {
String name;
int age;
public Athlete( String name, int age) {
// Initialisierung wie üblich
}
public AgeBracket findAgeBracket( AgeBracket[] allAgeBrackets) {
for ( AgeBracket ageBracket : allAgeBrackets) {
if ( ageBracket.getMinAge()<=age && age<=ageBracket.getMaxAge()) {
return ageBracket;
}
}
return null;
}
}
Datei: SportsTest.java
public class SportsTest {
public static void main( String[] args) {
AgeBracket[] allAgeBrackets = {
new AgeBracket("kid", 0, 12), new AgeBracket("junior", 13, 20),
new AgeBracket("adult", 21, 30), new AgeBracket("senior", 31, 99)
};
Athlete athlete = new Athlete( "Superman", 36);
System.out.println( athlete.findAgeBracket( allAgeBrackets));
}
}
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2011
Zahl der Blätter: 9
Blatt Nummer: 6
Studiengang: Wirtschaftsinformatik
Fachnummer:1 WF 2061/-62/-63
Prüfungsfach: Softwareentwicklung Vertiefung
Semester: 2
Hilfsmittel: Notizen, Skript / Laborbuch, ein Buch nach Wahl
Zeit:
Name:
Matr.Nr.:
Vorname:
90 Minuten
Teil 4: GUI Layout und Verständnis einfacher Komponenten [20P]
Aufgabe 4.1 Verhalten von Layout Managern [10P]
Analysieren Sie das folgende Layout und beschreiben Sie einen möglichen Lösungsansatz.
Hinweis: Kennzeichnen Sie zuerst die verschiedenen Bereiche und deren Layouts im Bild.
Normale Darstellung
Vertikale Vergrößerung
Horizonale Vergrößerung
Platz für Lösungsansatz (kein Coding!):
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2011
Zahl der Blätter: 9
Blatt Nummer: 7
Studiengang: Wirtschaftsinformatik
Fachnummer:1 WF 2061/-62/-63
Prüfungsfach: Softwareentwicklung Vertiefung
Semester: 2
Hilfsmittel: Notizen, Skript / Laborbuch, ein Buch nach Wahl
Zeit:
Name:
Matr.Nr.:
Vorname:
90 Minuten
Aufgabe 4.2 Event-Handling [10P]
Implementieren Sie den ActionListener sowie die Methode um die Lichter weiterzuschalten.
Initiale Darstellung
Anzeigereihenfolge: 0,1,2,…,7,8,9,0,1,2,3,…
public class MovingLights extends JFrame {
JLabel[] lights = new JLabel[10];
int activeLight = 0;
public MovingLights() {
super("MovingLights");
setDefaultCloseOperation( EXIT_ON_CLOSE);
JPanel lightPanel = new JPanel();
for ( int i=0; i<lights.length; ++i) {
JLabel light = new JLabel( Integer.toString(i));
light.setPreferredSize( new Dimension(25,25));
light.setHorizontalAlignment( JLabel.CENTER);
light.setOpaque( true);
lightPanel.add( light);
lights[i] = light;
}
add( lightPanel, BorderLayout.CENTER);
JButton cycleButton = new JButton( "next");
cycleButton.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e) {
moveLights();
}
});
add( cycleButton, BorderLayout.SOUTH);
moveLights();
pack();
}
public void moveLights() {
for ( int i=0; i<lights.length; ++i) {
if ( i==activeLight) {
lights[i].setBackground( Color.RED);
} else {
lights[i].setBackground( Color.GRAY);
}
}
activeLight = (activeLight+1)%lights.length;
}
}
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2011
Zahl der Blätter: 9
Blatt Nummer: 8
Studiengang: Wirtschaftsinformatik
Fachnummer:1 WF 2061/-62/-63
Prüfungsfach: Softwareentwicklung Vertiefung
Semester: 2
Hilfsmittel: Notizen, Skript / Laborbuch, ein Buch nach Wahl
Zeit:
Name:
Matr.Nr.:
Vorname:
90 Minuten
Teil 5: Verständnis komplexer GUI Komponenten [5P]
Aufgabe 5.1 Model-View-Controller [5P]
Vervollständigen Sie das folgende TableModel und skizzieren Sie eine mögliche Darstellung
Datei: MovieTableModel.java
01: import javax.swing.table.*;
02:
03: public class MovieTableModel extends AbstractTableModel {
04:
05:
String[] headers = { "Title", "Genre", "Price", "In Stock"};
06:
List<Movie> movies;
07:
08:
public MovieTableModel( List<Movie> movies) {
09:
this.movies = movies;
10:
}
11:
12:
public String getColumnName( int col) {
13:
return headers[col];
14:
}
15:
16:
public int getColumnCount() {
17:
return headers.length;
18:
}
19:
20:
public int getRowCount() {
21:
return movies.size();
22:
}
23:
24:
public Class getColumnClass( int col) {
25:
return ( col!=3 ? String.class : Boolean.class);
26:
}
27:
28:
public Object getValueAt( int row, int col) {
29:
Movie movie = movies.get(row);
30:
switch (col) {
31:
case 0: return movie.getTitle();
32:
case 1: return movie.getGenre();
33:
case 2: return movie.getPrice();
34:
case 3: return movie.isInStock();
35:
}
36:
return null;
37:
}
38: }
Skizze (Tabelle mit Beispieleintrag):
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2011
Zahl der Blätter: 9
Blatt Nummer: 9
Studiengang: Wirtschaftsinformatik
Fachnummer:1 WF 2061/-62/-63
Prüfungsfach: Softwareentwicklung Vertiefung
Semester: 2
Hilfsmittel: Notizen, Skript / Laborbuch, ein Buch nach Wahl
Zeit:
Name:
Matr.Nr.:
Vorname:
90 Minuten
Teil 6: Verständnis von Datenbanken [5P]
Aufgabe 6.1 Datenbankabfragen [5P]
Geben Sie geeignete SQL-Anweisungen für die angegebenen Teilaufgaben an
Tabelle Spieler
id INT AUTO_INCREMENT PRIMARY KEY
name VARCHAR not null
rolle VARCHAR not null
spiele INT
tore INT
Hinweis: In der Spalte "rolle" sollen Werte wie "Sturm", "Mittelfeld" oder "Abwehr" stehen.
Einfügen eines neuen Stürmers "Supermann" mit 0 Spielen und 0 Toren
INSERT INTO Spieler (name, rolle, spiele, tore) VALUES ('Supermann', 'Sturm', 0, 0)
Selektion (nur) der Namen aller Spieler mit mindestens 10 Toren
SELECT name FROM Spieler WHERE tore >= 10
Selektion aller Spieler (mit allen Eigenschaften) geordnet nach Anzahl der Spiele
SELECT * FROM Spieler ORDER BY spiele
Saisonende…
Löschung aller Stürmer mit weniger als 3 Toren (werden gekündigt!)
DELETE FROM Spieler WHERE rolle='Sturm' AND tore<3
Rücksetzung der Spiele und der Tore aller Spieler auf 0
UPDATE Spieler SET spiele=0, tore=0
Herunterladen