Teil 1: Neuerungen in Java 1.5 [15P] -...

21
Fachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl der Blätter: 21 Blatt Nummer: 1 Studiengang: Wirtschaftsinformatik Fachnummer: 1 WF 2061 Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2 Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten Name: Vorname: Matr.Nr.: Teil 1: Neuerungen in Java 1.5 [15P] Aufgabe 1.1 Autoboxing [2P] Streichen Sie in folgendem Program die Teile, die dank Autoboxing ab Java 1.5 nicht mehr notwendig sind. 01: 02: import java.io.*; 03: import java.util.*; 04: 05: public class Autoboxing { 06: 07: public static void main( String[] args) { 08: System.out.println( "Enter integers, finish with \"OK\""); 09: List numbers = new ArrayList(); 10: CommandLine cl = new CommandLine(); 11: String value = cl.readString( "==> "); 12: while ( !value.equalsIgnoreCase( "OK")) { 13: numbers.add( new Integer( Integer.parseInt( value))); 14: value = cl.readString( "==> "); 15: } 16: 17: int sum = 0; 18: for ( int i=0; i<numbers.size(); ++i) { 19: sum += ((Integer)numbers.get(i)).intValue(); 20: } 21: System.out.println( "Total=" + sum); 22: } 23: 24: } 07: public static void main( String[] args) { 08: System.out.println( "Enter integers, finish with \"OK\""); 09: List numbers = new ArrayList(); 10: CommandLine cl = new CommandLine(); 11: String value = cl.readString( "==> "); 12: while ( !value.equalsIgnoreCase( "OK")) { 13: numbers.add( new Integer( Integer.parseInt( value)) ); // 1P 14: value = cl.readString( "==> "); 15: } 16: 17: int sum = 0; 18: for ( int i=0; i<numbers.size(); ++i) { 19: sum += ( (Integer)numbers.get(i)).intValue() ; // 1P 20: } 21: System.out.println( "Total=" + sum); 22: }

Transcript of Teil 1: Neuerungen in Java 1.5 [15P] -...

Page 1: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 1

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Teil 1: Neuerungen in Java 1.5 [15P]

Aufgabe 1.1 Autoboxing [2P] Streichen Sie in folgendem Program die Teile, die dank Autoboxing ab Java 1.5 nicht mehr notwendig sind. 01:

02: import java.io.*;

03: import java.util.*;

04:

05: public class Autoboxing {

06:

07: public static void main( String[] args) {

08: System.out.println( "Enter integers, finish with \"OK\"");

09: List numbers = new ArrayList();

10: CommandLine cl = new CommandLine();

11: String value = cl.readString( "==> ");

12: while ( !value.equalsIgnoreCase( "OK")) {

13: numbers.add( new Integer( Integer.parseInt( value)));

14: value = cl.readString( "==> ");

15: }

16:

17: int sum = 0;

18: for ( int i=0; i<numbers.size(); ++i) {

19: sum += ((Integer)numbers.get(i)).intValue();

20: }

21: System.out.println( "Total=" + sum);

22: }

23:

24: }

07: public static void main( String[] args) {

08: System.out.println( "Enter integers, finish with \"OK\"");

09: List numbers = new ArrayList();

10: CommandLine cl = new CommandLine();

11: String value = cl.readString( "==> ");

12: while ( !value.equalsIgnoreCase( "OK")) {

13: numbers.add( new Integer( Integer.parseInt( value))); // 1P

14: value = cl.readString( "==> ");

15: }

16:

17: int sum = 0;

18: for ( int i=0; i<numbers.size(); ++i) {

19: sum += ((Integer)numbers.get(i)).intValue(); // 1P

20: }

21: System.out.println( "Total=" + sum);

22: }

Page 2: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 2

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Aufgabe 1.2 Die neue for-Schleife [3P] Ersetzen Sie die Schleife in folgendem Codestück durch eine neue for-Schleife 07:

08: import java.util.*;

09:

10: public class NewForLoop {

11:

12: public static void main( String[] args) {

13: ArrayList values = new ArrayList();

14: values.add( "Tic");

15: values.add( "Tac");

16: values.add( "Toe");

17:

18: Iterator iter = values.iterator();

19: while ( iter.hasNext()) {

20: Object value = iter.next();

21: System.out.print( value);

22: }

23: System.out.println();

24: }

25:

26: }

23:

24: import java.util.*;

25:

26: public class NewForLoop {

27:

28: public static void main( String[] args) {

29: ArrayList values = new ArrayList();

30: values.add( "Tic");

31: values.add( "Tac");

32: values.add( "Toe");

33:

34: for ( Object value : values) { // 2P Struktur + 1P Datentyp

35: System.out.print( value);

36: }

37: System.out.println();

38: }

39:

40: }

Page 3: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 3

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Aufgabe 1.3 Die neue for-Schleife und ihre Grenzen [3P] Vervollständigen Sie das Programm, so dass folgende Ausgabe erzeugt wird: Tic-Tic-Tic-Tic-Boom!

01:

02: import java.util.*;

03:

04: public class ForWhileDoLoop {

05:

06: public static void main( String[] args) {

07: ArrayList values = new ArrayList();

08: values.add( "Tic");

09: values.add( "Tic");

10: values.add( "Tic");

11: values.add( "Tic");

12: values.add( "Boom!");

13:

14: Iterator iter = values.iterator(); // 0,5P

15: while ( iter.hasNext()) { // 0,5P

16: Object value = iter.next(); // 0,5P

17: System.out.print( value); // 0,5P

18: if ( iter.hasNext()) { // 1P Kriterium

19: System.out.print( "-");

20: }

21: }

22:

23: }

24:

25: }

Hinweis: Wählen Sie eine geeignete Schleife aus um die passende Folge von Werten und "-" auszugeben.

Aufgabe 1.4 Generics [2P] Was versteht man unter generischen Klassen wie z.B. den "neuen" Collections? Generische Klassen verwenden einen oder mehrere Typparameter um die zur Laufzeit verwendeten Datentypen zu abstrahieren. Damit lassen sich Klassen und Funktionen beschreiben, die flexibel mit mehreren (jeweils bestimmten) Datentypen verwendbar und trotzdem typsicher sind. 1P für Typparameter / Abstraktion 1P für Typsicherheit / Flexibilität

Page 4: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 4

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Aufgabe 1.5 Generics [5P] Sie haben eine Webapplikation mit Generics und neuer for-Schleife aus Java 1.5 entwickelt. Leider wird diese Java Version von Ihrem Hoster noch nicht unterstützt! Wandeln Sie daher den folgenden Code so um, dass er wieder mit Java 1.4 läuft. 01:

02: import java.util.*;

03:

04: public class Renderer {

05:

06: public void renderUsers( StringBuffer sb, List<User> users) {

07: sb.append( "<table>\n");

08: sb.append( " <tr>\n");

09: sb.append( " <th>RealName</th>\n");

10: sb.append( " <th>LoginName</th>\n");

11: sb.append( " </tr>\n");

12:

13: for ( User user : users) {

14: sb.append( " <tr>\n");

15: sb.append( " <td>" + user.realName + "</td>\n");

16: sb.append( " <td>" + user.loginName + "</td>\n");

17: sb.append( " </tr>\n");

18: }

19:

20: sb.append( "</table>\n");

21: }

22:

23: }

06: public void renderUsers( StringBuffer sb, List users) {

07: sb.append( "<table>\n");

08: sb.append( " <tr>\n");

09: sb.append( " <th>RealName</th>\n");

10: sb.append( " <th>LoginName</th>\n");

11: sb.append( " </tr>\n");

12:

13: Iterator iter = users.iterator();

14: while ( iter.hasNext()) {

15: User user = (User)iter.next();

16: sb.append( " <tr>\n");

17: sb.append( " <td>" + user.realName + "</td>\n");

18: sb.append( " <td>" + user.loginName + "</td>\n");

19: sb.append( " </tr>\n");

20: }

21:

22: sb.append( "</table>\n");

23: }

Page 5: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 5

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Teil 2: Elementare Bibliothekskomponenten [15P]

Aufgabe 2.1 [2P] Streams sind ein universelles Konzept zum Zugriff auf Datenquellen und –senken. Begründen Sie, warum man im Zusammenhang mit Streams auch bei korrekter Programmierung stets mit try-catch arbeiten muss. Mit Hilfe von Streams werden Ein-/Ausgabeoperationen implementiert. Dabei wird auf Ressourcen zugegriffen, die außerhalb des Programms und damit außerhalb der Kontrolle des Programmierers liegen. Es kann also potentiell immer etwas schiefgeben (Festplatte voll, Verbindungsabbruch, …).

Aufgabe 2.2 [1P] Was versteht man im Zusammenhang mit Streams unter einem Filter Ein Filter ist eine Klasse, die das jeweilige Streaminterface auf Basis des Datentyps byte implementiert und darüber hinaus Methoden anbietet, um "höhere" Datentypen zu verarbeiten bzw. zusätzliche Funktionen wie Pufferung oder Kompression implementiert.

Aufgabe 2.3 [2P + 2ZP] Skizzieren Sie eine Kette von Streams und Filtern, die Objekte gezippt und gepuffert in eine Datei schreibt. Achten Sie dabei auf die richtige Reihenfolge der Elemente "Datei", "Objekte", "Puffer" und "Zip" und geben Sie ggf. die zugehörigen Klassennamen an (Zusatzpunkte!).

ObjectOutputStream => ZipOutputStream => BufferedOutputStream => FileOutputStream Zunächst werden Objekte geschrieben und als Bytes codiert. Im nächsten Schritt wird die Bytefolge gezippt. Die Pufferung findet erst unmittelbar vor der Übergabe an die Datei statt, um die Anzahl der E/A Operationen auf ein Minimum zu reduzieren und optimale Performance zu erreichen.

Aufgabe 2.4 [2P] Was versteht man in Zusammenhang mit Collection Klassen unter einem Iterator? Verwenden Sie zur Erklärung den Vergleich zur Verarbeitung gewöhnlicher Arrays. Ein Iterator ist ein von einer Collection zurückgeliefertes Objekt, mit dessen Hilfe über alle Elemente der Collection iteriert werden kann. Er entspricht in etwa der Laufvariablen bei der Verarbeitung eines Arrays mit Hilfe einer for-Schleife.

Page 6: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 6

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Aufgabe 2.5 [3P] Geben Sie die Ausgabe des folgenden Progamms an und begründen Sie diese. 01:

02: import java.util.*;

03:

04: public class SetMeUp {

05: public static void main( String[] args) {

06: Set elements = new TreeSet();

07: elements.add( "Tick");

08: elements.add( "Trick");

09: elements.add( "Track");

10: Iterator iter = elements.iterator();

11: while ( iter.hasNext()) {

12: String element = (String)iter.next();

13: System.out.println( element);

14: }

15: }

16: }

Hinweis: Beachten Sie dabei die besonderen Eigenschaften der verwendeten Collection! Tick Track Trick Die Ausgabe erfolgt alphabetisch, da der TreeSet seine Elemente sortiert.

Aufgabe 2.6 [5P] Collections vom Typ HashSet und HashMap verwenden bei der Speicherung ihrer Elemente die Methoden equals() und hashCode(). Welcher logische Zusammenhang zwischen diesen beiden Funktionen muss beim Vergleich zweier Objekte bestehen? Gleiche Objekte müssen den gleichen Hashwert haben, d.h. auf o1.equals(o2) MUSS FOLGEN o1.hashCode() == o2.hashCode () damit gleiche Objekte in der gleichen "Hash-Schublade" landen und wiedergefunden werden. Was bedeutet es also, wenn zwei Objekte den gleichen hashCode haben? Nichts, sie sind möglicherweise gleich – vielleicht aber auch nicht. Sie sind nicht sicher ungleich.

Page 7: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 7

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Nach welchem Prinzip erreicht man Konsistenz zwischen equals() und hashCode()? Indem man beide Methoden auf die gleichen Objekteigenschaften, d.h. Instanzvariablen, aufbaut. Implementieren Sie nun die Methode hashCode() für folgende Klasse . 01:

02: public class BankAccount {

03:

04: String accountNo;

05: double balance;

06:

07: public BankAccount( String accountNo) {

08: this.accountNo = accountNo;

09: this.balance = 0.0;

10: }

11:

12: public String getAccountNo() {

13: return accountNo;

14: }

15:

16: public double getBalance() {

17: return balance;

18: }

19:

20: public void deposit( double amount) {

21: balance += amount;

22: }

23:

24: public void withdraw( double amount) {

25: balance -= amount;

26: }

27:

28: public boolean equals( Object o) {

29: if ( o instanceof BankAccount) {

30: BankAccount other = (BankAccount)o;

31: return other.accountNo.equals( this.accountNo);

32: } else {

33: return false;

34: }

35: }

36:

37: public int hashCode() {

38:

39: return accountNo.hashCode();

40:

41: }

42: }

Page 8: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 8

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Teil 3: GUI Layout und Verständnis einfacher Komponenten [15P]

Aufgabe 3.1 [3P] Ordnen Sie die folgenden Klassen den richtigen Paketen zu (1) Color (a) javax.swing (2) JPanel (b) java.awt.event (3) ActionListener (c) java.awt Lösung: 1c, 2a, 3b

Aufgabe 3.2 [3P] Skizzieren Sie das Layout des folgenden Dialogs nach der Vergrößerung

1P Labels, 1P Textfields, 1P Button 01:

02: import java.awt.*;

03: import java.awt.event.*;

04: import javax.swing.*;

05:

06: public class LoginDialog extends JDialog implements ActionListener {

07:

08: JTextField loginField = new JTextField( 20);

09: JPasswordField passwordField = new JPasswordField( 20);

10:

Page 9: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 9

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

11: public LoginDialog( JFrame owner) {

12: super( owner, "Login", true);

13:

14: JPanel content = new JPanel();

15: content.setLayout( new GridBagLayout());

16: GridBagConstraints gbc = new GridBagConstraints();

17: gbc.fill = GridBagConstraints.HORIZONTAL;

18: gbc.anchor = GridBagConstraints.EAST;

19: gbc.insets = new Insets( 5, 5, 5, 5);

20:

21: gbc.gridx = 0;

22: gbc.gridy = 0;

23: content.add( new JLabel( "Login"), gbc);

24: gbc.gridy++;

25: content.add( new JLabel( "Password"), gbc);

26: gbc.gridy = 0;

27: gbc.gridx++;

28: gbc.weightx = 1.0;

29: content.add( loginField, gbc);

30: gbc.gridy++;

31: content.add( passwordField, gbc);

32: gbc.gridy++;

33: gbc.gridx = 0;

34: gbc.gridwidth = 2;

35: JPanel buttonPanel = new JPanel();

36: JButton okButton = new JButton( "OK");

37: okButton.addActionListener( this);

38: buttonPanel.add( okButton);

39: content.add( buttonPanel, gbc);

40: add( content);

41: pack();

42: }

43:

44: public void actionPerformed( ActionEvent e) {

45: dispose();

46: }

47:

48: public String getLogin() {

49: return loginField.getText();

50: }

51:

52: public String getPassword() {

53: return passwordField.getText();

54: }

55:

56: public static void main( String[] args) {

57: new LoginDialog( null).setVisible( true);

58: }

59:

Page 10: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 10

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Aufgabe 3.3 GUI [4P] Skizzieren Sie die Struktur der GUI Elemente des folgenden Programms als Baum 60: import java.io.*;

61: import java.awt.*;

62: import java.awt.event.*;

63: import javax.swing.*;

64:

65: public class SimpleViewer extends JFrame {

66:

67: JTextArea text;

68: JLabel status;

69:

70: public SimpleViewer() {

71: super( "SimpleViewer");

72: setDefaultCloseOperation( EXIT_ON_CLOSE);

73:

74: // Menü erzeugen, siehe nächste Aufgabe ;-)

75:

76: JPanel content = new JPanel();

77: content.setLayout( new BorderLayout());

78: text = new JTextArea();

79: text.setEditable( false);

80: content.add( new JScrollPane( text), BorderLayout.CENTER);

81: status = new JLabel( "Ready");

82: content.add( status, BorderLayout.SOUTH);

83: add( content);

84:

85: setSize( 640, 480);

86: setLocationRelativeTo( null);

87: }

88:

89: public void openFile() {

90: // Eine Datei auf der Festplatte auswählen und einlesen...

91: }

92:

93: public static void main( String[] args) {

94: SimpleViewer v = new SimpleViewer();

95: v.setVisible( true);

96: v.openFile();

97: }

98: }

Page 11: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 11

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

JFrame

JPanel

JScrollPane JLabel

JTextArea

SOUTH CENTER

Lösung hier skizzieren

Page 12: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 12

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Aufgabe 3.4 [5P] Der Datei-Viewer soll nun um eine Menüleiste ergänzt werden, welche das Menü "File" mit dem Menüpunkt "Open" enthält. Dieser soll nach Auswahl die Funktion openFile() aufrufen. Geben Sie die dafür erforderlichen Codezeilen an. Hinweis: Die entsprechenden Codezeilen werden gedanklich an der durch den Kommentar gekennzeichneten Stelle im Konstruktor eingefügt. 01: JMenuBar menuBar = new JMenuBar(); // 1P incl. setJMenuBar()

02: JMenu menu = new JMenu( "File"); // 1P incl. add()

03: JMenuItem menuItem = new JMenuItem( "Open"); // 1P incl. add()

04: menuItem.addActionListener( new ActionListener() { // 1P

05: public void actionPerformed( ActionEvent e) {

06: openFile(); // 1P

07: }

08: });

09: menu.add( menuItem);

10: menuBar.add( menu);

11: setJMenuBar( menuBar);

Page 13: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 13

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Teil 4: Verständnis komplexer GUI Komponenten [15P]

Datei AudioFile.java

01: 02: public class AudioFile { 03: 04: String artist, title; 05: 06: public AudioFile( String artist, String title) { 07: this.artist = artist; 08: this.title = title; 09: } 10: 11: public String getArtist() { 12: return artist; 13: } 14: 15: public String getTitle() { 16: return title; 17: } 18: 19: } 20:

Datei AudioFileTableModel.java

01: 02: import java.util.*; 03: import javax.swing.*; 04: import javax.swing.table.*; 05: 06: public class AudioFileTableModel extends AbstractTableModel { 07: 08: static final String[] columnNames = { "Artist", "Title"}; 09: 10: List<AudioFile> audioFiles = new ArrayList<AudioFile>(); 11: 12: public int getColumnCount() { 13: return columnNames.length; 14: } 15: 16: public int getRowCount() { 17: return audioFiles.size(); 18: } 19: 20: public boolean isCellEditable( int row, int col) { 21: return false; 22: } 23: 24: public String getColumnName( int col) { 25: return columnNames[col]; 26: }

Page 14: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 14

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

27: 28: public Object getValueAt( int row, int col) { 29: AudioFile audioFile = audioFiles.get( row); 30: switch ( col) { 31: case 0: 32: return audioFile.getArtist(); 33: case 1: 34: return audioFile.getTitle(); 35: default: 36: return null; 37: } 38: } 39: 40: public void setValueAt( Object value, int row, int col) { 41: // Tabelle nicht editierbar 42: } 43: 44: public List<AudioFile> getAudioFiles() { 45: return new ArrayList<AudioFile>( audioFiles); // Kopie liefern 46: } 47: 48: public void setAudioFiles( List<AudioFile> audioFiles) { 49: this.audioFiles = audioFiles; 50: fireTableDataChanged(); 51: } 52: 53: } 54:

Datei AudioFileBrowser.java

01: 02: import java.util.*; 03: import java.awt.*; 04: import java.awt.event.*; 05: import javax.swing.*; 06: 07: public class AudioFileBrowser extends JFrame implements ActionListener { 08: 09: AudioFileTableModel model = new AudioFileTableModel(); 10: 11: public AudioFileBrowser() { 12: super( "AudioFileBrowser"); 13: setDefaultCloseOperation( EXIT_ON_CLOSE); 14: add( new JScrollPane( new JTable( model)), BorderLayout.CENTER); 15: JPanel controlPanel = new JPanel(); 16: JButton closeButton = new JButton( "close"); 17: closeButton.addActionListener( this); 18: controlPanel.add( closeButton); 19: add( controlPanel, BorderLayout.SOUTH); 20: pack(); 21: } 22: 23: public void actionPerformed( ActionEvent e) { 24: dispose(); 25: }

Page 15: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 15

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

26: 27: public static void main( String[] args) { 28: AudioFileBrowser afb = new AudioFileBrowser(); 29: // Daten laden und setzen... 30: afb.setVisible( true); 31: } 32: } 33:

Aufgabe 4.1 Erweiterung (Teil 1) [5P] Die Klasse AudioFile soll um die Eigenschaft "genre" erweitert werden. Zählen Sie die dazu notwendigen Änderungen auf und geben Sie den zugehörigen Code an. Hinweis: Sie brauchen nicht die ganze Klasse sondern nur die neuen / geänderten Bestandteile angeben. 1. Neue Instanzvariable definieren String genre;

2. Konstruktor erweitern public AudioFile( String artist, String title, String genre) { this.artist = artist; this.title = title; this.genre = genre; }

3. Neue Zugriffsmethode definieren public String getGenre() { return genre; }

Aufgabe 4.2 Erweiterung (Teil 2) [5P] Die neue Spalte "genre" soll als 3te Spalte in der Tabelle angezeigt werden. Beschreiben Sie alle notwendigen Änderungen an der Klasse AudioFileTableModel. 1. Neuen Spaltennamen hinzufügen static final String[] columnNames = { "Artist", "Title", "Genre"}; 2. Methode getValueAt( …) erweitern case 3: return audioFile.getGenre();

Page 16: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 16

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Aufgabe 4.3 Erweiterung (Teil 3) [5P] Nun soll das GUI um eine Möglichkeit zur Filterung der Einträge erweitert werden. Da (noch) keine Datenbank verwendet wurde, muss die Filterung von Hand programmiert werden. Dazu soll einen Funktionen erstellt werden, die aus einer Liste von AudioFile-Objekten sowie einem Filterausdruck eine neue Liste erstellen, die nur noch AudioFile-Objekte enthält, die dem Filter entsprechen. Implementieren Sie die Funktion zur Filterung nach Titel. Dabei sollen alle AudioFiles zurückgeliefert werden, die mit dem Filterausdruck beginnen. Auszug aus dem API zur Klasse String: public boolean startsWith(String prefix)

Parameters:

prefix - the prefix.

Returns:

true if the character sequence represented by the argument is a prefix of

the character sequence represented by this string; false otherwise. Note

also that true will be returned if the argument is an empty string or is

equal to this String object as determined by the equals(Object) method.

01: public List<AudioFile> filterByTitle( 02: List<AudioFile> audioFiles, 03: String expression 04: ) { 05: List<AudioFile> result = new ArrayList<AudioFile>(); 06: 07: for ( AudioFile audioFile : audioFiles) { 08: if ( audioFile.getTitle().startsWith( expression)) { 09: result.add( audioFile); 10: } 11: } 12: 13: return result; 14: }

Das Ergebnis der Filterung wird anschließend an die Methode setAudioFiles() der Klasse AudioFileTableModel übergeben. Was bewirkt der darin enthaltene Aufruf fireTableDataChanged()? Der Aufruf löst ein Event aus mit dem das JTable Objekt, welches als Listener beim TableModel eingetragen ist, informiert wird, dass sich möglicherweise alle Daten in der Tabelle geändert haben und die Anzeige daher komplett aktualisiert werden muss.

Page 17: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 17

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Teil 5: Verständnis von Netzwerken [10P]

Aufgabe 5.1 Addressierung im Netz [2P] Erläutern Sie die Bedeutung von IP-Adresse und Portnummer für die Addressierung Mit Hilfe der IP-Adresse wird ein Rechner eindeutig identifiziert (Analogie: Haus). Die Portnummer identifiziert einen Dienst auf einem Rechner (Analogie: Briefkasten). Für viele Standarddienste sind feste Portnummern reserviert (z.B. http = 80).

Aufgabe 5.2 Netzwerktopologie [3P] Skizzieren Sie die Topologie eines privaten Ethernets mit 3 Rechnern, die über einen Switch untereinander sowie mit einem DSL Router verbunden sind.

Switch

DSL Router

Rechner 1

Rechner 2

Rechner 3

ins Internet

Aufgabe 5.3 Einfache Protokollverarbeitung [5P] Ein verteiltes Telefonbuch soll die Befehle "define(name,nummer)", "lookup(name)" und "delete(name)" verarbeiten. Diese sollen wie folgt über eine Socketverbindung übertragen werden: Format: "define:{name},{nummer}" Beispiel: "define:meier,07161/12345" Format: "lookup:{name}" Beispiel: "lookup:meier" Format: "delete:{name}" Beispiel: "delete:meier"

Lösung hier skizzieren

Page 18: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 18

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Implementieren Sie eine Methode, welche die ankommenden Nachrichten verarbeitet indem sie diese zerlegt und die entsprechenden Methoden aufruft. Auszug aus dem API zur Klasse String: public int indexOf(String str)

Parameters:

str - any string.

Returns:

if the string argument occurs as a substring within this object, then the

index of the first character of the first such substring is returned; if

it does not occur as a substring, -1 is returned.

public String[] split(String regex)

Parameters:

regex - the delimiting regular expression

Returns:

the array of strings computed by splitting this string around matches of

the given regular expression

public String substring(int beginIndex)

Parameters:

beginIndex - the beginning index, inclusive.

Returns:

the substring from beginIndex to the end of this string

public String substring(int beginIndex, int endIndex)

Parameters:

beginIndex - the beginning index, inclusive.

endIndex - the ending index, exclusive.

Returns:

the substring from beginIndex to endIndex - 1.

Page 19: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 19

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

01: public class MessageHandler {

02:

03: public void process( String message) {

04: int pivot = message.indexOf( ':');

05: String command = message.substring( 0, (pivot>0 ? pivot : 0));

06: String[] parameters = message.substring( pivot+1).split( ",");

07: if ( command.equals( "define")) {

08: define( parameters[0], parameters[1]);

09: } else if ( command.equals( "lookup")) {

10: lookup( parameters[0]);

11: } else if ( command.equals( "delete")) {

12: delete( parameters[0]);

13: } else {

14: error( message);

15: }

16: }

17:

18: public void define( String name, String phoneNumber) {

19: // neue Nummer definieren und Ergebnis zurückschicken

20: }

21:

22: public void lookup( String name) {

23: // Nummer nachschlagen und Ergebnis zurückschicken

24: }

25:

26: public void delete( String name) {

27: // Eintrag löschen und Ergebnis zurückschicken

28: }

29:

30: public void error( String message) {

31: // Protokollfehler

32: }

33:

34: }

Page 20: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 20

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Teil 6: Verständnis von Datenbanken [10P]

Aufgabe 6.1 Datenmodellierung [5P] Beschreiben Sie ein Datenbankschema (Tabellen, Spalten, Datentypen) das den folgenden Sachverhalt wiederspiegelt: Ein Kunde hat einen Vornamen und einen Nachnamen. Zu jedem Kunde kann es mehrere

Kontaktinformationen geben, die durch ihren Typ (z.B. Telefon, Fax, …) und ihren Wert

gekennzeichnet sind.

Hinweis: Führen Sie für Verweise ggf. zusätzliche technische Schlüssel ein. Tabelle Kunde: id INT AUTO_INCREMENT PRIMARY KEY vorname VARCHAR nachname VARCHAR Tabelle KontaktInfo id INT AUTO_INCREMENT PRIMARY KEY kundenid INT REFERENCES Kunde typ VARCHAR (oder INT) wert VARCHAR je 1P für Tabellen, je 1P für Spalten, 1P für Fremdschlüssel

Page 21: Teil 1: Neuerungen in Java 1.5 [15P] - hs-esslingen.derau/vorlesungen/Informatik2/klausur/ss07-klausurL.pdfFachhochschule Esslingen Hochschule für Technik Sommersemester 2007 Zahl

Fachhochschule Esslingen

Hochschule für Technik

Sommersemester 2007 Zahl der Blätter: 21

Blatt Nummer: 21

Studiengang:

Wirtschaftsinformatik

Fachnummer:

1 WF 2061

Prüfungsfach: Softwareentwicklung Vertiefung Semester: 2

Hilfsmittel: Skript(e), Bücher Zeit: 90 Minuten

Name: Vorname: Matr.Nr.:

Aufgabe 6.2 Datenbankabfragen [5P] Geben Sie geeignete SQL-Anweisungen für die angegebenen Teilaufgaben an Tabelle Artikel id INT AUTO_INCREMENT PRIMARY KEY artikelnummer VARCHAR bezeichnung VARCHAR kategorie VARCHAR anzahl INT Einfügen von 3 Duschköpfen mit der Artikelnummer 12345 in der Kategorie Sanitär INSERT INTO Artikel ( artikelnummer, bezeichnung, kategorie, anzahl) VALUES ( '12345', 'Duschkopf ', 'Sanitär', 3)

Selektion des Artikels mit der artikelnummer 10000 SELECT * FROM Artikel WHERE artikelnummer = '10000' Selektion aller Artikel aus der Kategorie Autozubehör die ausverkauft sind SELECT * FROM Artikel WHERE kategorie = 'Autozubehör' AND anzahl = 0 Änderung der Bezeichnung von Artikelnummer 50512 von "Raider" nach "Twix" UPDATE Artikel SET bezeichnung='Twix' WHERE artikelnummer = '50512'

Löschung aller Artikel deren Bezeichnung mit "ACME" beginnt DELETE FROM Artikel WHERE bezeichnung LIKE 'ACME%'