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 Welche Rolle spielt der Datentyp bei der Zuweisung eines Werts an eine Variable?
Der Datentyp legt fest, welche Art von Werten an eine Variable zugewiesen werden können.
Codebeispiel: ALTERNATIVE INTERPRETATION
long y = 23; // zulässig Primitive werden kopiert int x = true; // unzulässig Referenzen werden geteilt
Welcher primitive Datentyp in Java hat am wenigsten gültige Werte?
Der Datentyp boolean, er umfasst nur die Werte "true" und "false". NICHT: byte, char Erläutern Sie die Begriffe "statischer Typ" und "dynamischer Typ" einer Variablen?
Der statische Typ ist der deklarierte Typ der Variablen (im Beispiel: Person), der dynamische Typ ist der Typ des enthaltenen Werts (im Beispiel: Student).
Codebeispiel:
Person p = new Student();
Was versteht man unter einem typecast (d.h. wie funktioniert der cast-Operator)?
Ein Typecast ist ein Hinweis an den Compiler, einen primitiven Wert in den angegebenen Datentyp zu konvertieren bzw. einen Referenzwert als den angegebenen Datentyp zu betrachten.
Codebeispiel:
int i = (int)(Math.random()*10);
Auto a = (Auto)fuhrpark.get(0);
Unter welchen Umständen kann ein typecast fehlschlagen?
Bei primitiven Datentypen schlägt ein Typecast zur Übersetzungszeit fehl, wenn der statische Typ und der im cast angegebene Typ nicht kompatibel sind. Bei Referenztypen kann der cast zur Laufzeit fehlschlagen, wenn der tatsächliche Datentyp nicht dem im cast angegebenen Datentyp entspricht.
Codebeispiel:
float f = (float)"1.5";
Object o = new Fahrzeug();
Mitarbeiter m = (Mitarbeiter)o;
Aufgabe 1.2 Kontrollstrukturen [10P]
Vereinfachen Sie folgende Beispiele durch Umstellung oder Ersatz der Kontrollstruktur 01:
02: public boolean checkValue( int value) { 03: if ( (0<value) && (value<10)) {
04: return true;
05: } else {
06: return false;
07: } 08:
01:
02: public boolean checkValue( int value) { 03: return ((0<value) && (value<10));
04: } 05:
01:
02: public void decodeResult( int result) { 03: switch ( result) {
04: case 0:
05: System.out.println( "OK");
06: break;
07: case 1:
08: System.out.println( "ERROR");
09: break;
10: case 2:
11: System.out.println( "ERROR");
12: break;
13: default:
14: System.out.println( "UNKNOWN");
15: } 16: } 17:
01:
02: public void decodeResult( int result) { 03: switch ( result) {
04: case 0:
05: System.out.println( "OK");
06: break;
07: case 1:
08: case 2:
09: System.out.println( "ERROR");
10: break;
11: default:
12: System.out.println( "UNKNOWN");
13: } 14: } 15:
01:
02: public void printCount( int max) { 03: int i = 0;
04: while ( i<max) {
05: System.out.println( i);
06: i++;
07: } 08: } 09:
10:
01:
02: public void printCount( int max) { 03: for ( int i=0; i<max; ++i) { 04: System.out.println( i);
05: } 06: } 07:
08:
09: public void printAll( String[] strings) { 10: for ( int i=0; i<strings.length; ++i) { 11: System.out.println( strings[i]);
12: } 13: } 14:
01:
02: public void printAll( String[] strings) { 03: for ( String string : strings) {
04: System.out.println( string);
05: } 06: } 07:
01:
02: public String integerToBinary( int value) { 03: String result = "b";
04: result = (value & 0x01) + result;
05: value >>= 1;
06: result = (value & 0x01) + result;
07: value >>= 1;
08: result = (value & 0x01) + result;
09: value >>= 1;
10: result = (value & 0x01) + result;
11: value >>= 1;
12: return result;
13: } 14:
15:
16: public String integerToBinary( int value) { 17: String result = "b";
18: for ( int i=0; i<4; ++i) {
19: result = (value & 0x01) + result;
20: value >>= 1;
21: }
22: return result;
23: } 24:
Alternative: Nutzung von Integer.toBinaryString( value);
Aufgabe 1.3 Konstanten und Enums [5P]
Beantworten bzw. bearbeiten Sie die folgenden Fragen
Welche zwei Vorteile bieten Konstanten gegenüber der direkten Verwendung ihrer Werte?
Sie geben Werten einen Namen bzw. eine Bedeutung (Hauptvorteil) und erlauben deren Definition sowie spätere Anpassung an zentraler Stelle. FALSCH: Nicht änderbar - Literale sind auch fest.
Welcher Modifier und welche Schreibweise wird in Java für Konstanten verwendet?
Konstanten werden mit dem Modifier final gekennzeichnet und in Großbuchstaben geschrieben.
Welche zusätzlichen Vorteile bieten Enums gegenüber gewöhnlichen Konstanten?
Ein Enum definiert eine feste Wertemenge und ermöglicht die Definition von Variablen, die nur genau diese Werte annehmen können.
Geben Sie die Definition eines Enums namens TimeOfDay für verschiedene Tageszeiten an ^^^^^^^^^^
01:
02: public enum TimeOfDay {
03: MORNING, NOON, EVENING, MIDNIGHT; // NICHT: MO, DI, MI, …, FRI !!!
04: } 05:
Geben Sie ein Beispiel für eine switch-Anweisung an, die in Abhängigkeit von der Tageszeit eine passende Begrüßung am Bildschirm ausgibt
01:
02: public void printGreeting{ TimeOfDay tod} { 03: switch ( tod) {
04: case MORNING:
05: System.out.println( "Good morning!");
06: break;
07: case NOON:
08: System.out.println( "Good day!");
09: break;
10: case EVENING:
11: System.out.println( "Good evening!");
12: break;
13: case MIDNIGHT:
14: System.out.println( "Good night!");
15: break;
}
Aufgabe 1.4 Collections und Generics [5P]
Beantworten Sie die folgenden Fragen zum Thema Generics
Beispielprogramm 01:
02: import java.util.*;
03:
04: public class Generics { 05:
06: public static void main( String[] args) {
07: List<String> liste = new ArrayList<String>();
08: for ( String arg : args) { 09: liste.add( arg);
10: }
11: System.out.println( liste.size() + " Parameter angegeben");
12: String first = liste.get( 0);
13: Object last = liste.get( liste.size()-1);
14: System.out.println( first + "..." + last);
15: } 16: } 17:
Welche Datentypen können in der Collection liste gespeichert werden?
Nur Objekte der Klasse String und deren (nicht-existenter) Subklassen Welchen Datentyp liefert der Aufruf liste.get( 0) zurück?
Den generischen Typ der Collection, also String
Was passiert, wenn das Programm ohne Kommandozeilenparameter aufgerufen wird?
Es kommt zu einem Fehler in Zeile 12 (Zugriff auf ein nicht vorhandenes Element) Ist die Zuweisung in Zeile 03 korrekt oder nicht? Warum?
01: Object o = new Student( "Richard", "Tick");
02: List<String> liste = new ArrayList<String>();
03: List<Object> etsil = liste;
04: etsil.add( new Student( "Reiner", "Fall"));
05: String s = liste.get( 0);
Die Zuweisung in Zeile 01 ist korrekt da jeder Student is-a Object. Bei Listen gilt dies jedoch nicht mehr, d.h. die Zuweisung in Zeile 03 ist falsch da sich ansonsten wie in Zeile 04 dargestellt ein Student in die Liste einschleichen könnte, die eigentlich nur Strings enthalten darf.
1P für Einschätzung und 1P für Bewertung
Teil 2: Elementare Bibliothekskomponenten [10P]
Aufgabe 2.1 [2P]
Die Klasse Math bietet u.a. eine Methode zur Generierung von Zufallszahlen. Welche ist dies und welchen Datentyp und Wertebereich haben die generierten Zahlen?
Die Methode heißt Math.random(). Sie liefert Zufallszahlen vom Typ double im Wertebereich [0..1[
Aufgabe 2.2 [2P]
In Java existieren sog. Wrapper Klassen für die Vermittlung von primitiven Datentypen zwischen deren Werten und der Welt der Objekt und der Welt der Zeichenketten. Nennen Sie die Wrapperklasse für den Datentyp int und die zugehörige Methode zur Umwandlung von Zeichenketten in primitive Werte inkl. deren Signatur.
Die Wrapperklassen zum Datentyp int ist Integer und besitzt die Methode int parseInt( String).
Aufgabe 2.3 [2P]
Welche Methode(n) enthält das Interface Comparable und welche Bedeutung hat es im Zusammenhang mit den Collectionklassen TreeSet und TreeMap?
Das Interface Comparable enthält die Methode int compareTo( Object o) dient zum Vergleichen von Objekten und wird in den Collectionklassen.TreeSet und TreeMap verwendet, um die enthaltenen Objekte bzw Schlüssel zu sortieren.
Aufgabe 2.4 [2P]
Welche Vor- und Nachteile bieten Arrays gegenüber Collections?
Vorteile: Geringerer Speicherbedarf, höhere Geschwindigkeit Nachteile: Feste Größe, Beschränkung auf einen Typ
Aufgabe 2.5 [2P]
Wie lautet die beiden Wurzeln derjenigen Familie von I/O Klassen, die zum Einlesen und Ausgeben von zeichenorientierten Daten verwendet wird.
Es handelt sich um die Klassen Reader und Writer
Teil 3: Entwicklung einfacher Java-Programme [5P]
Aufgabe 3.1 Einfacher Auswertungsalgorithmus [5P]
Implementieren Sie die Methode, welche die Anzahl der richtigen Antworten ermittelt.
public class Quiz extends JFrame { public static class Frage {
String behauptung;
boolean loesung;
public Frage( String behauptung, boolean loesung) { this.behauptung = behauptung;
this.loesung = loesung;
}
}
Frage[] fragen = new Frage[] {
new Frage( "Die Sonne geht im Westen unter", true), new Frage( "Diese Klausur ist schwierig", false), new Frage( "Java ist auch eine Insel", true), };
boolean[] antworten = new boolean[fragen.length];
/*
* Code zum GUI aufbauen, Benutzer klicken lassen usw. ausgelassen */
public int punktzahlErmitteln() { // HIER FEHLT DIE IMPLEMENTIERUNG // Hilfsvariable definieren und mit Startwert 0 initialisieren int count = 0;
// Alle Lösungen mit den jeweiligen Antworten vergleichen for ( int i=0; i<fragen.length; ++i) {
if ( fragen[i].loesung==antworten[i]) count++;
}
// Ergebnis zurückliefern return count;
}
public static void main( String[] args) { new Quiz().setVisible( true);
} }
Teil 4: GUI Layout und Verständnis einfacher Komponenten [15P]
Aufgabe 4.1 [3P]
Ordnen Sie die folgenden Klassen/Interfaces den richtigen Paketen zu
(1) JTextField (a) javax.swing
(2) Color (b) java.awt.event
(3) ActionListener (c) java.awt
Lösung: 1a, 2c, 3b
Aufgabe 4.2 Verhalten von Layout Managern [7P]
Analysieren Sie das folgende Programm und skizzieren & beschreiben Sie das Layout des auf den Folgeseiten dargestellten Fensters nach der angedeuteten Vergrößerung. Wie verändern sich Lage und Größe der unterschiedlichen Fensterbestandteile?
01:
02: import java.net.*;
03: import java.awt.*;
04: import java.awt.event.*;
05: import javax.swing.*;
06:
07: public class Hangman extends JFrame { 08:
09: JPanel textPanel = new JPanel();
10: JPanel iconPanel = new JPanel();
11: JLabel iconLabel = new JLabel();
12: JPanel keysPanel = new JPanel();
13:
14: String word;
15: int attempts;
16:
17: public Hangman( String word) { 18: super( "Hangman");
19: setDefaultCloseOperation( EXIT_ON_CLOSE);
20: setLayout( new BorderLayout());
21:
22: this.word = word;
23: this.attempts = 0;
24: textPanel.setLayout( new FlowLayout());
25: for ( int i=0; i<word.length(); ++i) { 26: textPanel.add( new JLabel( "_"));
27: }
28: add( textPanel, BorderLayout.NORTH);
29:
30: URL url = ClassLoader.getSystemResource( "hangman.jpg");
31: Icon icon = new ImageIcon( url);
32: iconLabel.setIcon( icon);
33: iconPanel.setLayout( new GridBagLayout());
34: GridBagConstraints gbc = new GridBagConstraints();
35: gbc.insets = new Insets( 5,5,5,5);
36: gbc.fill = GridBagConstraints.NONE;
37: gbc.anchor = GridBagConstraints.CENTER;
38: iconPanel.add( iconLabel, gbc);
39: add( iconPanel, BorderLayout.CENTER);
40:
41: ActionListener al = new ActionListener() { 42: public void actionPerformed( ActionEvent e) {
43: keyPressed( ((JButton)e.getSource()).getText().charAt(0));
44: } 45: };
46: keysPanel.setLayout( new GridLayout( 2,13,5,5));
47: for ( char c='a'; c<='z'; ++c) {
48: JButton button = new JButton( Character.toString( c));
49: button.addActionListener( al);
50: keysPanel.add( button); }
51: add( keysPanel, BorderLayout.SOUTH);
52:
53: pack();
54: } 55:
56: public void keyPressed( char c) { 57: // look if c is part of word 58: }
59:
60: public static void main( String[] args) { 61: new Hangman( "klausur").setVisible( true);
62: } 63: } 64:
TIPPS:
o Identifizieren und kennzeichnen Sie zuerst Layout-relevante Stellen im Quellcode
o Zeichnen Sie dann die Sublayouts ins Bild ein und berücksichtigen Sie deren spez. Verhalten
Fenster in Normalgröße:
Fenster nach Vergrößerung:
2P Labels bleiben gleich+zentriert, 3P Bild gleich+mittig; 2P Buttons gleich hoch+breiter
Aufgabe 4.3 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 BattlefieldPanel extends JPanel {
07: 08: public static class BattlefieldButton extends JButton { 09: 10: int row, col;
11: 12: public BattlefieldButton( int row, int col) { 13: this.row = row;
14: this.col = col;
15: } 16:
17: }
18: 19: boolean[][] battlefield = new boolean[10][10];
20:
21: public BattlefieldPanel() {
22: ActionListener al = new ActionListener() { 23: public void actionPerformed( ActionEvent e) { 24: fieldClicked( (BattlefieldButton)e.getSource());
25: } 26: };
27: setLayout( new GridLayout( 10,10,3,3));
28: for ( int row=0; row<10; ++row) { 29: for ( int col=0; col<10; ++col) {
30: BattlefieldButton button = new BattlefieldButton( row, col);
31: button.addActionListener( al);
32: add( button);
33: } 34: } 35: } 36:
37: public void fieldClicked( BattlefieldButton b) {
38: battlefield[b.row][b.col] = !battlefield[b.row][b.col];
39: b.setBackground( battlefield[b.row][b.col] ? Color.BLACK : Color.WHITE);
40: } 41:
42: public static void main( String[] args) {
43: JFrame frame = new JFrame( "Battlefield Testframe");
44: frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
45: frame.add( new BattlefieldPanel());
46: frame.setSize( 400, 400);
47: frame.setLocationRelativeTo( null);
48: frame.setVisible( true);
49: } 50:
51: } 52:
Wieviele class-Dateien werden beim Kompilieren dieses Programms erzeugt? (1P) Es werden 3 class-Dateien erzeugt:
BattlefieldPanel.class
BattlefieldPanel$BattlefieldButton.class BattlefieldPanel$1.class (für den Listener).
Wieviele Instanzen von BattlefieldButtons und ActionListenern gibt es? (1P) Es gibt 10x10 = 100 BattlefieldButtons und einen gemeinsamen ActionListener für alle
Welche Art von InnerClass ist der ActionListener? (1P) Der ActionListener ist als anonyme Klasse implementiert
Was passiert beim Klick auf einen der Buttons (Methodenaufruf(e), Effekt)? (1P) Es wird die Methode fieldClicked() aufgerufen. Die Buttons werden abwechselnd schwarz/weiss.
Welchen Vorteil bietet die Realisierung eigenen Button-Klasse? (1P) Die Buttons können die eigenen Koordinaten und ihren Status direkt speichern
Teil 5: Verständnis komplexer GUI Komponenten [15P]
Aufgabe 5.1 Mitarbeiterverwaltung [15P]
Analysieren Sie das nachfolgende Programm und beantworten Sie die zugehörigen Fragen.
Datei: Person.java 01:
02: public class Person { 03:
04: // ...wie immer...
05:
06: } 07:
Datei: Mitarbeiter.java 01:
02: // Datei: Mitarbeiter.java
03: public class Mitarbeiter extends Person { 04:
05: static int neuePersonalNr = 1;
06:
07: int personalNr;
08: double gehalt;
09:
10: public Mitarbeiter(String vorname,String nachname, double gehalt) { 11: super( vorname, nachname);
12: this.personalNr = neuePersonalNr++;
13: this.gehalt = gehalt;
14: } 15:
16: public int getPersonalNr() { 17: return personalNr;
18: } 19:
20: public double getGehalt() { 21: return gehalt;
22: } 23:
24: public void setGehalt( double gehalt) { 25: this.gehalt = gehalt;
26: } 27:
28: } 29:
Datei: MitarbeiterTableModel.java 01:
02:
03: import java.util.*;
04: import java.text.*;
05: import javax.swing.table.*;
06:
07: public class MitarbeiterTableModel extends AbstractTableModel { 08:
09: static String[] columnNames = { "PersonalNr", "Vorname", "Nachname", "Gehalt"};
10: static NumberFormat nf = NumberFormat.getCurrencyInstance( Locale.GERMANY);
11:
12: List<Mitarbeiter> mitarbeiterListe = new ArrayList<Mitarbeiter>();
13:
14: public int getRowCount() {
15: return mitarbeiterListe.size();
16: } 17:
18: public int getColumnCount() { 19: return columnNames.length;
20: } 21:
22: public String getColumnName( int col) { 23: return columnNames[col];
24: } 25:
26: public Object getValueAt( int row, int col) {
27: Mitarbeiter mitarbeiter = mitarbeiterListe.get( row);
28: switch (col) { 29: case 0:
30: return mitarbeiter.getPersonalNr();
31: case 1:
32: return mitarbeiter.getVorname();
33: case 2:
34: return mitarbeiter.getNachname();
35: case 3:
36: return nf.format( mitarbeiter.getGehalt());
37: default:
38: return null;
39: } 40: } 41:
42: public void setValueAt( Object value, int row, int col) { 43: Mitarbeiter mitarbeiter = mitarbeiterListe.get( row);
44: switch (col) { 45: case 0:
46: throw new IllegalArgumentException( "Spalte nicht editierbar");
47: case 1:
48: mitarbeiter.setVorname( (String)value);
49: break;
50: case 2:
51: mitarbeiter.setNachname( (String)value);
52: break;
53: case 3:
54: try {
55: mitarbeiter.setGehalt( nf.parse( (String)value).doubleValue());
56: } catch ( ParseException ex) { 57: ex.printStackTrace();
58: } 59: break;
60: } 61: } 62:
63: public boolean isCellEditable( int row, int col) {
64: return (0<col && col<3) || (3==col && User.current.hatGehaltsZugriff());
65: } 66:
67: }
Datei: MitarbeiterFrame.java 01:
02: import java.awt.*;
03: import javax.swing.*;
04: import javax.swing.table.*;
05:
06: public class MitarbeiterFrame extends JFrame { 07:
08: MitarbeiterTableModel mitarbeiterModel = new MitarbeiterTableModel();
09: JTable mitarbeiterTable = new JTable( mitarbeiterModel);
10:
11: public MitarbeiterFrame() { 12: super( "Mitarbeiter");
13: setDefaultCloseOperation( EXIT_ON_CLOSE);
14:
15: Box box = Box.createVerticalBox();
16: JScrollPane tablePane = new JScrollPane( mitarbeiterTable);
17: box.add( tablePane);
18: JPanel buttonPanel = new JPanel();
19: buttonPanel.setLayout( new FlowLayout());
20: JButton saveButton = new JButton( "Speichern");
21: // ... ActionListener hinzufügen ...
22: buttonPanel.add( saveButton);
23: JButton cancelButton = new JButton( "Abbrechen");
24: // ... ActionListener hinzufügen ...
25: buttonPanel.add( cancelButton);
26: box.add( buttonPanel);
27: add( box);
28: load();
29: pack();
30: } 31:
32: public void load() { 33: // ... Daten laden ...
34: } 35:
36: public void save() {
37: // ... Daten speichern ...
38: } 39:
40: public static void main( String[] args) { 41: new MitarbeiterFrame().setVisible( true);
42: User.current = new User( "boss", true);
43: } 44:
45: } 46:
Datei: User.java 01:
02: public class User { 03:
04: public static User current = null;
05:
06: String name;
07: boolean gehaltsZugriff;
08:
09: public User( String name, boolean gehaltsZugriff) { 10: this.name = name;
11: this.gehaltsZugriff = gehaltsZugriff;
12: } 13:
14: public String getName() { 15: return name;
16: } 17:
18: public boolean hatGehaltsZugriff() { 19: return gehaltsZugriff;
20: } 21:
22: } 23:
Screenshot des Hauptfensters
Warum sieht man im Hauptfenster trotz JScrollPane keine Scrollbars? [3P]
Die Scrollbars werden erst angezeigt, wenn mehr (zuviele) Einträge in der Tabelle sind (1P).
Welchen Zweck hat die Klasse User und wo wird sie verwendet? [3P]
Die Klasse User dient zur Verwaltung der Rechte des Anwenders, z.B. im Tablemodel.
Nur bestimmte User haben gehaltsZugriff. In der main()-Methode ist ein solcher User (2P) Unter welchen Bedingungen sind die Spalten in der Tabelle editierbar? [3P]
Immer editierbar sind Vorname und Nachname (1P) Nur für bestimmte Benutzer editierbar ist Gehalt (1P) Nie editierbar ist PersonalNr. (1P)
Implementieren Sie die fehlenden Methoden im MitarbeiterTableModel? [6P]
Teil 6: Verständnis von Datenbanken [15P]
Aufgabe 6.1 Datenmodellierung [10P]
Beschreiben Sie grafisch oder textuell ein Datenbankschema (Tabellen, Spalten, Datentypen, Querverweise) für den folgenden Sachverhalt und implementieren Sie die zugehörige Fachklasse (nur Klassenrumpf mit Attributen und Konstruktor).
In einem bekannten Gesellschaftsspiel gibt es eine Reihe von Feldern. Diese haben einen Namen, und einen Wert. Außerdem gehören Sie zu einer Gruppe von Feldern die jeweils durch eine Farbe (RGB) gekennzeichnet ist. Für bestimmte Aktionen muss man alle Felder einer Gruppe besitzen.
Tabelle Feld:
id INT AUTO_INCREMENT PRIMARY KEY name VARCHAR
wert INT
gruppe_id INT REFERENCES Gruppe
public class Feld { int id;
String name;
int wert;
Gruppe gruppe;
public Feld( int id, String name, int wert, Gruppe gruppe) { this.id = id;
this.name = name;
this.wert = wert;
this.gruppe = gruppe;
} }
Tabelle Gruppe
id INT AUTO_INCREMENT PRIMARY KEY farbe_r INT
farbe_g INT farbe_b INT
public class Gruppe { int id;
Color farbe;
public Gruppe( int id, int r, int g, int b) { this.id = id;
this.farbe = new Color( r,g,b);
} }
Schema 6P, Coding 4P
Aufgabe 6.2 Datenbankabfragen [5P]
Geben Sie geeignete SQL-Anweisungen für die angegebenen Teilaufgaben an Tabelle Artikel
artikelnr INT AUTO_INCREMENT PRIMARY KEY name VARCHAR
preis DOUBLE bestand INT
Einfügen von 50 Stück des Artikels "Baldrian" zum Preis von 4.99
INSERT INTO Artikel (name, preis, bestand) VALUES ( 'Baldrian', 4.99, 50)
Selektion von Name und Preis aller Artikel, geordnet nach Name
SELECT name, preis FROM Artikel ORDER BY name
Selektion aller Artikel mit Bestand < 10
SELECT * FROM Artikel WHERE bestand < 10
Änderung des Namens von "Raider" in "Twix".
UPDATE Artikel SET name='Twix' WHERE name = 'Raider'
Löschung des Artikels mit artikelnr 13
DELETE FROM Artikel WHERE artikelnr = 13
Teil 7: Netzwerke [5P]
Aufgabe 7.1 Allgemeines Verständnis von Netzwerken [5P]
Beantworten Sie die folgenden Fragen zum Thema Netzwerke
Nennen Sie zwei Ziele, die durch verteilte Software erreicht werden können? [1P]
Lastverteilung, Ausfallsicherheit
Was versteht man unter einem Netzwerkprotokoll? Nennen Sie ein Beispiel? [1P]
Ein Protokoll, z.B. TCP/IP, regelt den Ablauf und die möglichen Inhalte der Kommunikation Java unterstützt zwei Mechanismen zur Netzwerkkommunikation. Welche? [1P]
Sockets und Remote Method Invocation
Welche Aufgabe hat die Registry (Naming Service) bei der Kommunikation? [1P]
Registriert und gibt Auskunft über verteilte Objekte ("gelbe Seiten")
Implementiert das nachfolgende Programm einen Server oder einen Client? [1P]
Einen Client, da eine Verbindung aktiv aufgebaut wird (der Server wartet auf Verbindungen) 24:
25: import java.io.*;
26: import java.net.*;
27:
28: public class Networker { 29:
30: public void run() { 31: try {
32: int port = 6000;
33: byte[] bytes = new byte[] {(byte)192, (byte)168, (byte)0, (byte)100};
34: InetAddress addr = InetAddress.getByAddress( bytes);
35: Socket sock = new Socket( addr, port);
36: InputStream is = sock.getInputStream();
37: OutputStream os = sock.getOutputStream();
38: // ... send and receive data ...
39: sock.close();
40: } catch ( Exception ex) { 41: ex.printStackTrace();
42: } 43: } 44:
45: public static void main( String[] args) { 46: new Networker().run();
47: } 48:
49: } 50: