pdf, 4 Folien pro Seite

Werbung
Klausur – Termin und Ort
Klausur – Beispiele für Klausuraufgaben
Als die drei wesentlichen Merkmale der objektorientierten Programmierung werden
Kapselung, Vererbung (Polymorphie) und Nachrichtenaustausch (message passing)
bezeichnet. Charakterisieren Sie diese Merkmale und geben Sie jeweils ein Beispiel:
Donnerstag, 16.07.2009
09:00 – 11:00 Uhr (2 Zeitstunden)
Hörsaal 1
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
1. Inwiefern kapseln Klassendefinitionen Daten und Funktionen? Welche Modifikatoren
können für Attribute und Methoden in Klassen verwendet werden, um die Sichtbarkeit zu
erlauben oder einzuschränken (Information Hiding)?
2. Erklären Sie, wie sich die Vererbung (in Java extends) zwischen Subklasse und Superklasse
auf die Struktur der Subklasse auswirkt. Was bedeutet es, dass die Subklasse auch Subtyp
der Superklasse ist?
3. Erklären Sie, wie Objekte (Instanzen von Klassen) Nachrichten austauschen. Was bezeichnet
man als Nachricht? Wie reagiert ein Objekt auf das Senden einer Nachricht?
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
141
Klausur – Beispiele für Klausuraufgaben
142
Klausur – Beispiele für Klausuraufgaben
class A {
int i = 1;
int m1() { return i; }
}
Betrachten Sie die folgenden drei Klassendiagramme bzw. die entsprechenden JavaKlassen- und Schnittstellendefinitionen. Vererbungsbeziehungen (extends) sind
durchgezogen, Implementierungsbeziehungen (implements) sind gestrichelt gezeichnet.
class B extends A {
int i = 2;
int m2() { return i; }
}
public class Test {
public static void main(String[] args) {
A x = new B();
System.out.println(x.m1());
System.out.println(x.m2());
}
}
•
•
Erläutern Sie im Detail die Zeile “A x = new B();“
1. Was ist x? Welchen Typ hat x? Welchen Wert erhält x?
2. Ist die Initialisierung von x mit dem Wert von new B() erlaubt? Begründund
Welche der drei Diagramme beschreiben gültige (erlaubte) Vererbungs- bzw.
Implementierungsbeziehungen in Java?
Falls Fehler vorhanden sind, markieren Sie diese in den Diagrammen deutlich.
Beschreiben Sie für jeden Fehler die Fehlerart
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
3. Welche Instanzvariablen und Methoden hat die Klasse A? Welche die Klasse B?
4. Ist der Aufruf x.m2() in der dritten Zeile der main-Methode erlaubt? Begründen Sie
Ihre Antwort.
143
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
144
Klausur – Beispiele für Klausuraufgaben
Klausur – Beispiele für Klausuraufgaben
class A {
public void sayA() { System.out.println(“A“); }
}
Gegeben sei folgende Problemstellung: Sie entwickeln eine Verwaltungssoftware für einen
Waschsalon und wollen zunächst die objektorientierte Modellierung durchführen. Folgende
Informationen liegen Ihnen vor:
class B {
public void sayB() { System.out.println(“B“); }
}
1. Ein Waschsalon verfügt über verschiedene Geräte, darunter Waschmaschinen und Trockner.
Die Geräte haben jeweils einen Betriebszustand, verfügen über mehrere Programme und
können die Restlaufzeit angeben.
2. Waschmaschinen haben einen Wasch- und Weichspülmittelbehälter, dessen Füllstand
ausgelesen werden kann. Trockner haben eine Knitterschutzfunktion, die aktiviert und
deaktiviert werden kann.
3. Unter den Kunden des Waschsalons gibt es Abonnenten, deren Wasch- und
Trockenvorgänge über ein Abonnement abgebucht werden. Die Abonnenten verfügen über
eine Kundenkarte, mit der sie die Geräte steuern können.
class C {
public void sayC() { System.out.println(“C“); }
public class D {
public static void wasBinIch (ABoderC x) {
x.wasBinIch();
}
}
Ergänzen Sie das Programm um eine Schnittstelle ABoderC und die nötigen weiteren
Methoden, so dass jedes x auf die Nachricht wasBinIch() im Rumpf der
Methode wasBinIch der Klasse D mit seinem richtigen Klassennamen antwortet,
also As mit “A“, Bs mit “B“ und Cs mit “C“.
Entwerfen Sie in Java geeignete Klassen bzw. Schnittstellen für die obige Aufgabe. Die
Klassen sollen entsprechende Attribute und Methoden enthalten.
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
145
Klausur – Beispiele für Klausuraufgaben
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
146
Benutzerschnittstellen und Ereignisverarbeitung
Gegeben seien die folgenden Ausschnitte aus zwei Java-Dateien B.java und A.java
1. package usedemo;
2. import demo.A;
3.
4. public class B extends A {
5.
6.
private int att1 = 5;
7.
8.
public void hello() {
9.
System.out.println("B");
10.
System.out.println(att1);
11.
System.out.println(att2);
12.
System.out.println(att3);
13.
System.out.println(att4);
14.
}}
1. package demo;
2. public class A {
3.
4.
private
int
att1 = 1;
5.
int
att2 = 2;
6.
protected int
att3 = 3;
7.
public
int
att4 = 4;
8.
9.
public void hello(){
10.
System.out.println("A");
11.
System.out.println(att1);
12.
System.out.println(att2);
13.
System.out.println(att3);
14.
System.out.println(att4);
15.
}}
Aufbau graphischer Benutzeroberflächen
1. Beim Übersetzen wird der Compiler zunächst einen oder mehrere Fehler anzeigen.
Wo? Geben Sie Dateinamen und Zeilennummer und ein Begründung an.
2. Gehen Sie nun davon aus, dass alle fehlerhaften Zeilen auskommentiert sind, und
geben Sie die Ausgabe der Aufrufe
new A().hello();
new B().hello();
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
147
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
148
Aufbau graphischer Benutzeroberflächen
Aufbau graphischer Benutzeroberflächen
• Aufbauelemente / Bestandteile (statische Sicht):
• statische Sicht auf die Benutzerschnittstelle:
– Fensterobjekte (Instanzen verschiedener vorgegebener und abgeleiteter
Fensterklassen)
– Controls, mit denen interagiert wird (Controls im Abstract Window Toolkit,
Controls in Swing/Java Foundation Classes, Steuerelementbibliotheken weiterer
Anbieter, selbst entwickelte Controls)
– Aufbauelemente der Benutzerschnittstellenprogrammierung
• Fensterklassen
• Controls
• Steuerung visueller Eigenschaften (Styles, Ränder, Fraben etc.)
• Unterscheidung der Dialogelemente in
– Layout und Anordnung von Elementen
– Container: können andere Controls enthalten (Behälter, z. B.
– die Fensterklassen) und
– einfache Steuerelemente, die keine weiteren Controls enthalten können (Button,
Canvas, TextField etc.)
• dynamische Sicht
– Interaktion mit der Benutzerschnittstelle
– Verarbeiten von Ereignissen (Events)
– Benutzerschnittstelle als „Scharnier“ zwischen Benutzer und „dahinter“
liegender Systemfunktionalität
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
• Anordnung und Layout von Steuerelementen
– Steuerung durch absolute Angaben (Größe, Position) oder
– durch Verwenden sog. LayoutManager, die jeweils für einen bestimmten
Container die Anordnung der in ihm enthaltenen Steuerelemente regeln
149
Oberflächenprogrammierung in Java
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
150
Java Foundation Classes (Swing)
• Graphical User Interface (GUI)
• Vorteile
– deutlich vereinfachte Fensterprogrammierung gegenüber AWT
– plattformunabhängige Erscheinungsform (pluggable-look-andfeel, PLAF) von
Java-Programmen
– bei Bedarf umschaltbar auf plattformabhängigen Look-and-Feel
– intensive Anwendung der objektorientierten Programmierung
– Nutzung der Java-Klassenbibliotheken
• standardmäßig zwei verwendbare Klassenbibliotheken
– Abstract Window Toolkit (AWT, java.awt und Unterpakete)
• vorgefertige Klassen und Methoden für Dialoge, z.B.
– Java Foundation Classes (JFC, javax.swing und Unterpakete)
– File öffnen, speichern: JFileChooser()
– Warnungen und Fehlermeldungen: OptionPane.showMessageDialog()
• auch Swing-Bibliothek genannt (import javax.swing…)
• baut auf AWT auf
• seit Java 1.2 Standard
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
151
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
152
Übersicht über Pakete im Java AWT (einfaches GUI Toolkit)
Übersicht über Pakete in Java Swing
java.awt
Abstract Window Toolkit
(Benutzerschnittstellenprogrammierung)
javax.swing
Benutzerschnittstellenkomponenten von Swing/Java
Foundation Classes
java.awt.datatransfer
Datenübertragung zwischen Anwendungen
über die Zwischenablage (clipboard)
javax.swing.border
Klassen für die Generierung von Rändern um
Swing-Komponenten
java.awt.dnd
Funktionalität für die Unterstützung von drag &
drop-Operationen
javax.swing.colochooser Farbwahlkomponente und Farbauswahlmodelle
java.awt.event
Ereignisprogrammierung (Ereignisklassen,
Lauscherklassen, Adapterklassen)
java.awt.peer
Klassen, die die Schnittstelle zwischen den
AWT-Klassen und der aktuellen graphischen
Benutzerschnittstelle (z. B. MS-Windows, OSFMotif etc.)
bilden
java.awt.print
javax.swing.event
Hilfsklassen für die Druckausgabe von AWT Komponenten
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
153
Übersicht über Pakete in Java Swing Cont…
javax.swing.text
Hilfsklassen für den Aufbau von Texteditoren mit
Swing
javax.swing.text.html
Klassen für den Aufbau von HTMLEditoren
javax.swing.text.html.parser
Einfacher HTML-Parser mit Hilfsklassen wie
Element, Entity und DTD
javax.swing.text.rtf
Klassen für den Aufbau von RTF-Editoren
(rich text format)
Zusatzklassen für die Ereignisverarbeitung in Swing
javax.swing.filechooser Dateiauswahlkomponente und Dateifilter für Swing
javax.swing.plaf
pluggable-look-and-feel (plaf), modifizierbares
Benutzerschnittstellendesign
javax.swing.table
Tabellenkomponente von Swing
javax.swing.tree
Baumdarstellungskomponente von Swing
javax.swing.undo
Funktionalität für die Implementierung von UNDO-fähigen
Komponenten in Swing
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
154
Component und Container
Die Klassenhierarchie des Paktes java.awt sieht zwei grundlegende
Klassen vor, die die gemeinsame Basisfunktionalität der GUIElemente enthalten
– java.awt.Component
Wurzelklasse aller GUI-Komponenten (auch der Java Swing-Klassen)
Komponentenarchitektur von Java GUIs
– java.awt. Container
Wurzelklasse der Containertypen
javax.beans
Komponentenentwicklung (Java Beans)
javax.beans.beancontext
Beschreibung eines bean context, d.h. eines
Behälters für Java Beans
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
155
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
156
Wichtige GUI-Elemente der Swing-Bibliothek
Component und Container
• Normales Fenster:
• Component enthält z. B. alle erforderlichen Methoden für die
Manipulation des visuellen Erscheinungsbildes einer Komponente
–
–
–
–
–
– JFrame
• Menüleiste:
setForeground
setBackground
getFont
setFont
...
– JMenuBar
• Menüelement:
– JMenuItem
• Bedienelemente:
–
–
–
–
–
–
–
• Container enthält Methoden zur Identifikation und Hinzunahme von
Komponenten (z.B. in die Darstellungsfläche eines Applets oder
eines Fensters einer GUI). Steuerung der Layouteigenschften.
–
–
–
–
–
–
countComponents
Add
Remove
getLayout
setLayout
...
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
JButton: Knopf
JCheckBox: Auswahl
JLabel: nicht editierbares (einzeiliges) Textfeld
JTextField: editierbares (einzeiliges) Textfeld
JTextArea: editierbarer (mehrzeiliger) Textbereich
JScrollBar
JList
• Klasse zur Zusammenfassung von Bedienelementen
– JPanel
157
Layouts
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
158
Implementierung von Benutzerschnittstellen (statisch)
Anordnung der Bedienelemente (Beispiele)
• Objektorientierung
– GUI-Elemente als Felder einer Klasse
– Spezialisierung (Subklassen) von GUI-Elementklassen, z.B. spezielle Fenster,
spezielle Controls
• BorderLayout:
• Strukturierung
• FlowLayout (GUI-Objekte werden nebeneinander angeordnet)
– durch Container und Components
– Container können Komponenten und auch Container enthalten
• GridLayout (alle Bereiche gleich groß!)
• CardLayout
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
159
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
160
Ereignisauslösung und -verarbeitung
Implementierung von Benutzerschnittstellen (dynamisch)
Benutzeraktionen generieren Events
• wenn für das gegebene Event ein Listener („Lauscher“, Event-Handler)
vorhanden ist, wird der Event-Handler aufgerufen
• Zu den Events gehören u.a.:
• Benutzeraktionen lösen Ereignisse (Events) aus
• Grundprinzip notification-based event delegation
– ein Ereignis wird nur der Komponente zugeführt, die für dieses Ereignis als sog.
Lauschobjekt (Listener) registriert ist
– Mausbewegung,
– Tastendruck (Keyboard/Maus),
– Scrolling, etc.
• Ereignisquellen erzeugen Ereignisse (z. B. nach Benutzeraktionen)
• Lauschobjekte (Listener) bekommen Ereignisobjekte zugeführt und
verarbeiten sie
Verarbeitung (z.B.)
• Benutzer klickt auf Schaltfläche (Ereignisquelle)
• Event-Objekt wird erzeugt und in die zentrale Event-Queue eingestellt
• Event-Objekt wird dem zugehörigen (registrierten) Listener zugestellt
(Aufruf der Event-Handler-Methode, Ereignisbearbeitung)
• Eine zentrale System Event Queue
– überwacht die Benutzerschnittstelle und fängt Ereignisse ab
– verteilt die Ereignisse an die registrierten Ereignislauscher
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
161
Ereignisverarbeitung
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
162
Ereignistypen
• Einfache Ereignisse wie Mausbewegung oder Tastendruck:
– Component ComponentEvent
FocusEvent, KeyEvent, MouseEvent, MouseMotionEvent, …
– Dialog, Frame WindowEvent
• Auswertung von Events mittels Listener
– java.awt.event
• Interaktionen
• Anwendung des Interface-Konzepts
• z.B. java.awt.event.ActionListener stellt Schnittstelle zur Auswertung
einer Action bereit
• z.B. Mausklick auf bestimmtes Bedienelement:
–
–
–
–
–
–
–
– public abstract void actionPerformed(ActionEvent e);
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
163
Button ActionEvent
MenuItem ActionEvent
List ActionEvent, ItemEvent
Choice ItemEvent
CheckBox ItemEvent
CheckboxMenuItem ItemEvent
ScrollBar AdjustmentEvent
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
164
Beispiel: Scribble
Adapterklassen
public class Scribble extends Applet
implements MouseListener, MouseMotionListener {
private int last_x, last_y;
public
public
public
public
public
public
void mouseClicked(MouseEvent ev) {}
void mouseReleased(MouseEvent ev) {}
void mouseEntered(MouseEvent ev) {}
void mouseExited(MouseEvent ev) {}
void mouseMoved(MouseEvent ev) {}
void mousePressed (MouseEvent ev) {
last_x = ev.getX();
last_y = ev.getY();
• Problem:
– GUI-Elemente müssen als Listener für verschiedene Ereignisse registiert werden
– Interface-Konzept erfordert Implementierung aller Interface-Methoden (meist mit
leerem Rumpf)
}
public void mouseDragged (MouseEvent ev) {
int x = ev.getX();
int y = ev.getY();
this.getGraphics().drawLine (last_x, last_y, x, y);
last_x = x;
last_y = y;
}
public void start () {
addMouseListener (this);
addMouseMotionListener (this);
}
• Adapterklassen
– definieren die Schnittstellenmethoden bereits mit leerem Rumpf
– Eine Subklasse eines Adapters, in muss nur die benötigte Methode implementieren
– Realisierung des Adapters oft als anonymes Objekt / anonyme Klasse
}
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
165
Adapterklassen (Beispiel)
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
166
Model-View-Control (MVC)
• Anwendungsbereich
– Komplexe GUI-Applikationen
Schnittstelle WindowListener
Ereignismethoden:
void
void
void
void
void
void
void
windowActivated(WindowEvent e)
windowClosed(WindowEvent e)
windowClosing(WindowEvent e)
windowDeactivated(WindowEvent e)
windowDeiconified(WindowEvent e)
windowIconified(WindowEvent e)
windowOpened(WindowEvent e)
• Aufteilen in logische Einzelkomponenten (Objekte)
Adapterklasse
public abstract class WindowAdapter
extends Object
implements WindowListener,
WindowStateListener,
WindowFocusListener {
void windowActivated(WindowEvent e)
void windowClosed(WindowEvent e)
void windowClosing(WindowEvent e)
void windowDeactivated(WindowEvent e)
void windowDeiconified(WindowEvent e)
void windowIconified(WindowEvent e)
void windowOpened(WindowEvent e)
…
}
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
167
– Datenmodell (model)
– Ansicht (view)
– Steuerung (control)
• Zweck
– Trennung des Anwendungsobjekts (model) von der Art seiner Repräsentation (view)
beim Benutzer und der Weise, in der es von ihm beeinflusst wird (controller)
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
168
Model-View-Control (Kommunikation der Objekte)
Registrieren der Observer beim Observable
• Model an View: Realisierung über Observer
– Views registrieren sich beim Observable (addObserver)
– Observable hält eine Liste der Referenzen der registrierten Observer
– Observer werden immer dann benachrichtigt (update), wenn sich Werte im
Model geändert haben
– Observer implementiert hierzu das Interface Observer:
abstract void update(...)
• View an Controller: Realisierung über Action Listener
– Aktive Objekte im View werden beim Controller registriert
– Controller hält eine Liste der Referenzen der registrierten GUI-Objekte
– Wenn von einem GUI-Objekt eine Aktion ausgeht, wird der Controller
benachrichtigt (actionPerformed)
– Controller implementiert hierzu das Interface ActionListener:
abstract void actionPerformed(...)
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
169
Registrieren der Observer beim Observable
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
171
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
170
Herunterladen