Teil 1: Grundlegende Eigenschaften der Sprache Java [20P]

Werbung
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 1
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Skript(e), Bücher
Name:
Vorname:
90 Minuten
Matr.Nr.:
Teil 1: Grundlegende Eigenschaften der Sprache Java [20P]
Aufgabe 1.1 Datentypen [5P]
Geben Sie die Ausgabe des folgenden Programms an (mit Begründung)
01:
02: public class Datatypes {
03:
04: public static void main( String[] args) {
05:
double[] d1 = new double[] { 3.0};
06:
double[] d2 = d1;
07:
double d3 = 3.0;
08:
double d4 = d3;
09:
10:
d2[0] = 1.0;
11:
d4 = 5.0;
12:
13:
System.out.println( d1[0]);
14:
System.out.println( d3);
15: }
16:
17: }
18:
Die Ausgabe lautet:
1.0
3.0
Ein double-Array ist ein Referenztyp (1P), daher wirkt sich die Änderung auf das erste Element
von d2 auch auf d1 aus (1P). Der Typ double ist ein primitiver Datentyp (1P). Deshalb kann man
d4 verändern ohne dass d3 beeinflußt wird (1P).
Wie ändert sich die Ausgabe nach folgender Änderung?
07:
double d3 = d1[0];
Die Ausgabe ändert sich nicht, da der Wert kopiert wird (1P).
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 2
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Name:
Skript(e), Bücher
Vorname:
90 Minuten
Matr.Nr.:
Aufgabe 1.2 Kontrollstrukturen [5P]
Ersetzen Sie die Schleife in folgendem Programm durch eine neue for-Schleife()
08:
09: public class Statistics {
10:
11: public double computeAverage( double[] values) {
12:
double total = 0.0;
13:
for ( int i=0; i<values.length; ++i) {
14:
total += values[i];
15:
}
16:
return total/values.length;
17: }
18:
19: public static void main( String[] args) {
20:
Statistics s = new Statistics();
21:
System.out.println( s.computeAverage( new double[] { 1}));
22:
System.out.println( s.computeAverage( new double[] { 1, 1}));
23:
System.out.println( s.computeAverage( new double[] { 1, 2}));
24: }
25:
26: }
27:
01:
02: public class StatisticsL {
03:
04: public double computeAverage( double[] values) {
05:
double total = 0.0;
06:
for ( double value : values) {
07:
total += value;
08:
}
09:
return total/values.length;
10: }
11:
12: public static void main( String[] args) {
13:
StatisticsL s = new StatisticsL();
14:
System.out.println( s.computeAverage( new double[] { 1}));
15:
System.out.println( s.computeAverage( new double[] { 1, 1}));
16:
System.out.println( s.computeAverage( new double[] { 1, 2}));
17: }
18:
19: }
20:
2P für korrekte Schleifenstruktur, 2P für korrekten Datentyp in der Schleife, 1P für Schleifenrumpf
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 3
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Name:
Skript(e), Bücher
Vorname:
90 Minuten
Matr.Nr.:
Aufgabe 1.3 Enums [5P]
Markieren Sie den Fehler in folgendem Programm und verbessern Sie es anschließend mit
Hilfe von Enums.
01:
02: public class Enuminator {
03:
04: public static final int EXAM_PASS = 1;
05: public static final int EXAM_FAIL = 2;
06:
07: public String decodeResult( int result) {
08:
switch ( result) {
09:
case EXAM_PASS:
10:
return "Congratulations!";
11:
case EXAM_FAIL:
12:
return "Better luck next time";
13:
default:
14:
return "SYSTEM ERROR!";
15:
}
16: }
17:
18: public static void main( String[] args) {
19:
Enuminator e = new Enuminator();
20:
System.out.println( e.decodeResult( 1));
21:
System.out.println( e.decodeResult( EXAM_FAIL));
22:
System.out.println( e.decodeResult( 3));
23: }
24:
25: }
26:
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 4
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Skript(e), Bücher
Name:
Vorname:
90 Minuten
Matr.Nr.:
Platz für die Lösung
01:
02: public class EnuminatorL {
03:
04: public static enum Result { EXAM_PASS, EXAM_FAIL};
05:
06: public String decodeResult( Result result) {
07:
switch ( result) {
08:
case EXAM_PASS:
09:
return "Congratulations!";
10:
case EXAM_FAIL:
11:
return "Better luck next time";
12:
default:
13:
return "SYSTEM ERROR!";
14:
}
15: }
16:
17: public static void main( String[] args) {
18:
EnuminatorL e = new EnuminatorL();
19:
System.out.println( e.decodeResult( Result.EXAM_PASS));
20:
System.out.println( e.decodeResult( Result.EXAM_FAIL));
21:
//
22:
// Nicht mehr möglich
23:
// System.out.println( e.decodeResult( 3));
24:
//
25:
// Führt zu NullPointerException!
26:
System.out.println( e.decodeResult( null));
27: }
28: }
29:
2P für korrekte Definition des enum-Typs
2P für korrekte Anpassung der Aufrufe
1P für korrekte Entfernung des ungültigen Aufrufs
Ist das Programm jetzt wirklich "wasserdicht"? (1ZP)
1 ZP für Benennung der Nullpointer-Exception
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 5
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Name:
Skript(e), Bücher
Vorname:
90 Minuten
Matr.Nr.:
Aufgabe 1.4 Generics [5P]
Analysieren Sie den Gebrauch der Collections in folgendem Programm und verbessern Sie
es anschließend durch Verwendung von Generics.
01:
02: import java.util.*;
03:
04: public class Generics {
05:
06: public static void main( String[] args) {
07:
List liste = new ArrayList();
08:
liste.add( "1");
09:
liste.add( Integer.toString( 2));
10:
liste.add( Character.toString( '3'));
11:
for ( Object o : liste) {
12:
System.out.println( o);
13:
}
14: }
15:
16: }
17:
01:
02: import java.util.*;
03:
04: public class GenericsL {
05:
06: public static void main( String[] args) {
07:
List<String> liste = new ArrayList<String>();
08:
liste.add( "1");
09:
liste.add( Integer.toString( 2));
10:
liste.add( Character.toString( '3'));
11:
for ( String s : liste) {
12:
System.out.println( s);
13:
}
14: }
15:
16: }
17:
je 1P für Deklaration, Initialisierung, Füllung mit int und char sowie Anpassung der Schleife
Welche Gefahr besteht bei dem ursprünglichen Programm? (1ZP)
Typunsicherheit bei der Entnahme von Objekten
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 6
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Name:
Skript(e), Bücher
Vorname:
90 Minuten
Matr.Nr.:
Teil 2: Elementare Bibliothekskomponenten [10P]
Aufgabe 2.1 [2P]
Die Klasse Math ist Bestandteil der Sprachdefinition von Java. Wie ruft man die Methoden
der Klasse auf? Wieviele Instanzen der Klasse existieren in einem Java Programm?
Die Klasse Math enthält nur Klassenmethoden. Der Aufruf der Methoden von Math erfolgt also
über die Klasse selbst (1P), z.B. Math.sqrt( 4). Es gibt also keine Objekte der Klasse Math (1P).
Dies wäre auch nicht sinnvoll, da die Mathematik "an sich" keinen Zustand hat.
Aufgabe 2.2 [2P]
In Java existieren sog. Wrapper Klassen für die primitiven Datentypen. Wozu wurden diese
ursprünglich benötigt und durch welches Sprachfeature wurden Sie ab Java 1.5 nahezu
"unsichtbar"?
Die Wrapper Klassen waren ursprünglich notwendig, um aus primitiven Datentypen Objekte zu
machen und sie so z.B. in Collections speichern zu können. Durch das Sprachfeature
"Autoboxing" entfällt das explizite ein- und auspacken.
Aufgabe 2.3 [2P]
Welche Methoden enthält das Interface Serializable und welche Bedeutung hat es im
Zusammenhang mit Streams?
Das Interface Serializable ist ein sogenanntes Marker-Interface, d.h. es muss nur angegeben
werden und enthält keine Methoden. Damit wird angezeigt, dass eine Klasse und ihre Attriute
"serialisierbar" sind, d.h. mit Hilfe eines Streams übertragen bzw. gespeichert werden können.
Technisch geht das immer – aber manchmal will man es nicht, daher die explizite Markierung..
Aufgabe 2.4 [2P]
Welche Vor- und Nachteile bieten Collections gegenüber Arrays?
Vorteile: Dynamische Größe, Unterstützung verschiedener Typen
Nachteile: Mehr Speicherbedarf, geringerere Geschwindigkeit
Aufgabe 2.5 [2P]
Nennen Sie den Interface-Typ und eine konkrete Implementierung derjenigen Art von
Collections, deren Eigenschaften Arrays am nächsten kommt.
Interface-Typ List, Implementierung ArrayList
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 7
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Skript(e), Bücher
Name:
Vorname:
90 Minuten
Matr.Nr.:
Teil 3: Entwicklung einfacher Java-Programme [5P]
Aufgabe 3.1 [5P]
Schreiben Sie eine Methode, welches den Maximalwert in einer Menge von Zahlen findet,
und rufen Sie diese in der main()-Methode auf.
public class Maximus {
public int findMax( int[] values) {
int max = Integer.MIN_VALUE;
for ( int value : values) {
if ( value > max) max = value;
}
return max;
}
public static void main( String[] args) {
Maximus m = new Maximus(); // Objekt anlegen
int[] values1 = new int[] { 5, 2, 9, 4, 7};
int max1 = m.findMax( values1);
System.out.println( max1);
int[] values2 = new int[5];
for ( int i=0; i<values2.length; ++i) {
values2[i] = (int)(Math.random()*10);
}
int max2 = m.findMax( values2);
System.out.println( max2);
}
}
1P Schnittstelle der Methode
1P Initialisierung der max-Variablen
1P for-Schleife
1P if-Statement
1P Aufruf(e)
Fachhochschule Esslingen
Hochschule für Technik
Zahl der Blätter: 19
Sommersemester 2008
Blatt Nummer: 8
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Skript(e), Bücher
Name:
Vorname:
90 Minuten
Matr.Nr.:
Teil 4: GUI Layout und Verständnis einfacher Komponenten [20P]
Aufgabe 4.1 [3P]
Ordnen Sie die folgenden Klassen den richtigen Paketen zu
(1) ActionEvent
(a) javax.swing
(2) Dimension
(b) java.awt.event
(3) JLabel
(c) java.awt
Lösung: 1b, 2c, 3a
Aufgabe 4.2 [3P]
Skizzieren Sie das Layout des folgenden Dialogs nach der Vergrößerung
1P Labels, 1P Textfields, 1P Button (gleiche Position, wenn unklar -0,5P!)
wenn Layout erkennbar völlig missverstanden, z.B. als FlowLayout, dann 0P
01:
02: import java.awt.*;
03: import java.awt.event.*;
04: import javax.swing.*;
05:
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 9
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Name:
Skript(e), Bücher
Vorname:
90 Minuten
Matr.Nr.:
06: public class LoginDialog extends JDialog implements ActionListener {
07:
08:
JTextField loginField;
09:
JPasswordField passwordField;
10:
11:
public LoginDialog( JFrame owner) {
12:
super( owner, "Login", true);
13:
14:
JPanel content = new JPanel();
15:
content.setLayout( null);
16:
17:
JLabel label1 = new JLabel( "Login");
18:
label1.setBounds( 10, 10, 80, 20);
19:
content.add( label1);
20:
JLabel label2 = new JLabel( "Password");
21:
label2.setBounds( 10, 40, 80, 20);
22:
content.add( label2);
23:
loginField = new JTextField( 20);
24:
loginField.setBounds( 90, 10, 100, 20);
25:
content.add( loginField);
26:
passwordField = new JPasswordField( 20);
27:
passwordField.setBounds( 90, 40, 100, 20);
28:
content.add( passwordField);
29:
30:
JButton okButton = new JButton( "OK");
31:
okButton.setBounds( 50, 70, 100, 20);
32:
okButton.addActionListener( this);
33:
content.add( okButton);
34:
add( content);
35:
this.setSize( 210, 140);
36:
}
37:
38:
public void actionPerformed( ActionEvent e) {
39:
dispose();
40:
}
41:
42:
public String getLogin() {
43:
return loginField.getText();
44:
}
45:
46:
public String getPassword() {
47:
return passwordField.getText();
48:
}
49:
50:
public static void main( String[] args) {
51:
new LoginDialog( null).setVisible( true);
52:
}
53:
54: }
55:
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 10
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Skript(e), Bücher
Name:
Vorname:
90 Minuten
Matr.Nr.:
Aufgabe 4.3 Layout Manager [9P]
Benennen Sie den/die jeweiligen LayoutManager (verwenden Sie verschiedene
Farben/Linienstile um Gitterzellen oder verschachtelte Layouts zu kennzeichnen).
Button
Frame (1P):
BorderLayout (West, Center, South)
Button
Panel West (2P):
BoxLayout (Y-Axis)
Button
Button
Button
Label
Textfield
Label
Textfield
Label
Textfield
Label
Textfield
Frame (2P):
GridBagLayout
Button in Zelle mit gridWidth = 2 (1P)
Button
Label-Aplication
Label-Version
Strut
Label-Author
Label
(Image)
Label-Copyright
Frame (2P):
BoxLayout (X-Axis)
Rechtes Panel (1P)
BoxLayout (Y-Axis)
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 11
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Name:
Skript(e), Bücher
Vorname:
90 Minuten
Matr.Nr.:
Aufgabe 4.4 Event Handling [5P]
Analysieren Sie den folgenden Quellcode und beantworten Sie die zugehörigen Fragen.
01:
02: import java.awt.*;
03: import java.awt.event.*;
04: import javax.swing.*;
05:
06: public class Eventuality extends JFrame {
07:
08: JTextField textField = new JTextField( "<enter text here>");
09:
10: public Eventuality() {
11:
super( "Eventuality");
12:
setDefaultCloseOperation( EXIT_ON_CLOSE);
13:
14:
setLayout( new FlowLayout());
15:
add( new JLabel( "Text"));
16:
add( textField);
17:
JButton resetButton = new JButton( "Reset");
18:
ActionListener resetListener = new ActionListener() {
19:
public void actionPerformed( ActionEvent e) {
20:
resetText();
21:
}
22:
};
23:
resetButton.addActionListener( resetListener);
24:
add( resetButton);
25:
pack();
26: }
27:
28: public void resetText() {
29:
textField.setText( "");
30: }
31:
32: public static void main( String[] args) {
33:
new Eventuality().setVisible( true);
34: }
35:
36: }
37:
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 12
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Name:
Skript(e), Bücher
Vorname:
90 Minuten
Matr.Nr.:
Wieviele class-Dateien werden beim Kompilieren dieses Programms erzeugt? (1P)
Es werden 2 class-Dateien erzeugt, Eventuality.class und Eventuality$1.class (für den Listener).
Welche Sequenz von Objekten und Methoden ruft ein Klick auf den Button auf? (1P)
JButton➠resetListener.actionPerformed() [0,5P]➠this.resetText() [0,5P]➠textField.setText() [0,5 ZP]
Zu welcher (Art von) Klasse gehört das Objekt in der Variablen "resetListener"? (1P)
Das Objekt ist Instanz einer anonymen Inner Class mit Interface-Typ, erbt also von Object.
Warum kann die Variable "textField" keine lokale Variable sein? (1P)
Damit die Methode resetText() darauf zugreifen kann.
Welchen Vorteil bietet die Realisierung der separaten Methode "resetText()"? (1P)
Man kann die zugehörige Aktion auch unabhängig vom Button auslösen. Falls der Code für die
Ausführung der Aktion länger ist verbessert sich außerdem die Übersichtlichkeit.
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 13
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Skript(e), Bücher
Name:
Vorname:
90 Minuten
Matr.Nr.:
Teil 5: Verständnis komplexer GUI Komponenten [15P]
Aufgabe 5.1 [15P]
Analysieren Sie das nachfolgende Programm und beantworten Sie die zugehörigen Fragen.
Screenshot des Hauptfensters
Datei BeerFrame.java
01:
02: import java.util.*;
03: import javax.swing.*;
04:
05: public class BeerFrame extends JFrame {
06:
07: JTable beerTable;
08:
09: public BeerFrame( List<Beer> beers) {
10:
super( "BeerFrame");
11:
setDefaultCloseOperation( EXIT_ON_CLOSE);
12:
beerTable = new JTable( new BeerTableModel( beers));
13:
BeerTableRenderer renderer = new BeerTableRenderer();
14:
beerTable.setDefaultRenderer( Object.class, renderer);
15:
add( new JScrollPane( beerTable));
16:
pack();
17: }
18:
19: public static void main( String[] args) {
20:
List<Beer> beers = new ArrayList<Beer>();
21:
beers.add( new Beer( "Schöfferhofer Grapefruit", "Schöfferhofer", 2.5));
22:
beers.add( new Beer( "Jever Lime", "Jever", 2.5));
23:
new BeerFrame( beers).setVisible( true);
24: }
25: }
26:
Wie würde sich das Hauptfenster ohne die JScrollPane verändern? [2P]
Ohne die JScrollPane würden die Spaltenköpfe nicht automatisch angezeigt werden sondern
müssten manuell ins Layout eingefügt werden (1P). Außerdem wäre kein Scrolling möglich (1P).
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 14
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Skript(e), Bücher
Name:
Vorname:
90 Minuten
Matr.Nr.:
Datei BeerTableModel
01:
02: import java.util.*;
03: import javax.swing.table.*;
04:
05: public class BeerTableModel extends AbstractTableModel {
06:
07: static final String[] columnNames = { "Name", "Brauerei", "%Alc"};
08:
09: List<Beer> beers;
10:
11: public BeerTableModel( List<Beer> beers) {
12:
this.beers = beers;
13: }
14:
15: public String getColumnName( int col) {
16:
return columnNames[col];
17: }
18:
19: public int getColumnCount() {
20:
return columnNames.length;
21: }
22:
23: public int getRowCount() {
24:
return beers.size();
25: }
26:
27: public boolean isCellEditable( int row, int col) {
28:
return false;
29: }
30:
31: public Object getValueAt( int row, int col) {
32:
Beer beer = beers.get( row);
// fix me
33:
switch ( col) {
// fix me
34:
case 0:
35:
return beer.getName();
// fix me
36:
case 1:
37:
return beer.getBrewery();
// fix me
38:
case 2:
39:
return Double.toString( beer.getAlcohol()) + "%";
// fix me
40:
default:
41:
return null;
42:
}
43: }
44:
45: public void setValueAt( Object value, int row, int col) {
46:
// not needed
47: }
48:
49: }
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 15
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Skript(e), Bücher
Name:
Vorname:
90 Minuten
Matr.Nr.:
Welche Aufgaben hat das BeerTableModel? Ergänzen Sie die fehlenden Teile. [6P]
Ein TableModel agiert als "Adapter" zwischen GUI und Daten indem es der JTable eine definierte
Schnittstelle zum Zugriff bietet und zwischen Tabellenkoordinaten und Objekten und deren
Eigenschaften übersetzt; siehe Methode getValueAt(). Je 1P für richtige Ergänzung
Wieviele Spalten hat die Tabelle? Welche sind editierbar? [1P]
Die Tabelle hat 3 Spalten; siehe Screenshot bzw. getColumnCount().
Keine der Spalten ist editierbar; siehe isCellEditable() bzw. Hinweis in setValueAt().
Datei Beer.java
01:
02: public class Beer {
03:
04:
final String name;
05:
final String brewery;
06:
final double alcohol;
07:
08:
public Beer( String name, String brewery, double alcohol) {
09:
this.name = name;
10:
this.brewery = brewery;
11:
this.alcohol = alcohol;
12:
}
13:
14:
public String getName() {
15:
return name;
16:
}
17:
18:
public String getBrewery() {
19:
return brewery;
20:
}
21:
22:
public double getAlcohol() {
23:
return alcohol;
24:
}
25:
26: }
27:
Welche Bedeutung hat die Klasse Beer? [1P]
Eine Instanz der Klasse Beer repräsentiert bzw. modelliert eine (real existierende) Biersorte.
Warum sind die Instanzvariablen alle final? [1P]
Die Eigenschaften einer Biersorte werden einmal festgelegt ändern sich anschließend nicht mehr.
Welche genaue Bedeutung/Kodierung hat die Instanzvariable "alcohol"? [1P]
Die Instanzvariable "alcohol" speichert den Alkoholgehalt in %; siehe Konstruktoraufruf.
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 16
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Skript(e), Bücher
Name:
Vorname:
90 Minuten
Matr.Nr.:
Datei BeerTableRenderer.java
50:
51: import java.awt.*;
52: import javax.swing.*;
53: import javax.swing.table.*;
54:
55: public class BeerTableRenderer extends DefaultTableCellRenderer {
56:
57: public Component getTableCellRendererComponent( JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int col) {
58:
Component c = super.getTableCellRendererComponent( table,
value, isSelected, hasFocus,
row, col);
59:
switch ( col) {
60:
case 0:
61:
case 1:
62:
((JLabel)c).setHorizontalAlignment( LEFT);
63:
break;
64:
case 2:
65:
case 3:
66:
((JLabel)c).setHorizontalAlignment( RIGHT);
67:
break;
68:
}
69:
return c;
70: }
71:
72: }
Wie würde die Tabelle ohne die Klasse BeerTableRenderer aussehen? [2P]
Der BeerTableRenderer richtet die Spalten 0+1 linksbündig und die Spalten 2+3 rechtsbündig aus.
Warum wirkt sich der Renderer auf alle Spalten aus (siehe Hauptprogramm)? [1P]
Der Renderer ist zuständig für Spalten vom Typ Objekt. Dies trifft per Default auf alle Spalten zu.
Fachhochschule Esslingen
Hochschule für Technik
Zahl der Blätter: 19
Sommersemester 2008
Blatt Nummer: 17
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Skript(e), Bücher
Name:
Vorname:
90 Minuten
Matr.Nr.:
Teil 6: Threads [10P]
Aufgabe 6.1 Zustände von Threads [10P]
Das nachfolgende Diagramm zeigt die möglichen Zustände eines Threads. Kennzeichnen
Sie im nachfolgenden Program die Stellen, an denen ein Zustandswechsel des Threads t
stattfindet und nennen Sie den Zustand vor und nach dem Übergang.
01:
02: public class ThreadStates {
03:
04:
public static void main( String[] args) throws InterruptedException {
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17: }
18:
19: }
Thread t = new Thread( new Runnable()
public void run() {
int i = 10;
do {
System.out.println( i--);
Thread.yield();
} while ( i>0);
System.out.println( "Ignition!");
}
});
t.start();
t.join();
{
// Running -> Blocked (I/O)
// Running -> Ready-to-Run
// Running -> Dead (Fertig)
// Unknown -> Ready-to-Run
Durch Einsatz welcher Methode könnte der Countdown verzögert werden? (2P)
Durch die Methode Thread.sleep() statt der Methode Thread.yield()
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 18
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Name:
Skript(e), Bücher
Vorname:
90 Minuten
Matr.Nr.:
Teil 7: Verständnis von Datenbanken [10P]
Aufgabe 7.1 Datenmodellierung [5P]
Beschreiben Sie grafisch oder textuell ein Datenbankschema (Tabellen, Spalten,
Datentypen, Querverweise) für den folgenden Sachverhalt:
Ein Rundreise hat einen Namen und einen Zeitpunkt. Zu einer Rundreise gehören mehrere
Stationen. Die Stationen haben einen Namen und eine festgelegte Reihenfolge.
Hinweise:
Führen Sie für Verweise ggf. zusätzliche technische Schlüssel ein.
Tabelle Rundreise:
id INT AUTO_INCREMENT PRIMARY KEY
name VARCHAR
zeitpunkt DATE
Tabelle Station
id INT AUTO_INCREMENT PRIMARY KEY
rundreise_id INT REFERENCES Rundreise
name VARCHAR
nr INT
je 2P für Tabellen inkl. Spalten, 1P für Fremdschlüssel, -0,5P pro Fehler
Fachhochschule Esslingen
Hochschule für Technik
Sommersemester 2008
Zahl der Blätter: 19
Blatt Nummer: 19
Studiengang:
Fachnummer:
Wirtschaftsinformatik
Prüfungsfach: Softwareentwicklung Vertiefung
1 WF 2061
Semester: 2
Hilfsmittel:
Zeit:
Skript(e), Bücher
Name:
Vorname:
90 Minuten
Matr.Nr.:
Aufgabe 7.2 Datenbankabfragen [5P]
Geben Sie geeignete SQL-Anweisungen für die angegebenen Teilaufgaben an
Tabelle Aktie
wkn VARCHAR
name VARCHAR
kurs DOUBLE
anzahl INT
Einfügen von 10 "Fantasia"-Aktien mit der wkn 123456 zum Kurs von 39.00
INSERT INTO Aktie ( wkn, name, kurs, anzahl) VALUES ( '123456', 'Fantasia', 39.0, 10)
Selektion von Anzahl und Kurs der "Autobauer"-Aktie
SELECT anzahl, kurs FROM Aktie WHERE name = 'Autobauer'
Selektion aller Aktien mit Kurs < 1.00
SELECT * FROM Aktie WHERE kurs < 1.00
Änderung des Namens der "TelefonFirma"-Aktie in "PhoneCompany"-Aktie.
UPDATE Aktie SET name='PhoneCompany' WHERE name = 'Telefon'
Löschung aller Aktien mit Anzahl = 0
DELETE FROM Aktie WHERE anzahl = 0
Herunterladen