einseitig

Werbung
4. Einige wichtige Java-Dinge
•
•
•
•
•
•
Ausnahmebehandlung
Enumeration
Daten speichern und laden
Dokumentation
Umgang mit externen Paketen
Model View Controller
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
89
Ausnahmenarten
• Alle neuen Sprachen erlauben Exception Handling
• Ausnahme werfen, wenn nicht erwarte Situation auftritt
• Programmierfehler (z. B. NullPointerException), führt zum
Programmabbruch; nie behandeln, nur loggen
• Java:
• Exceptions, die von RuntimeExeption erben, müssen nicht
behandelt werden (unchecked Exception)
• Andere (checked) Exceptions müssen behandelt werden;
nach außen geben (throws) oder behandeln (try-catch-finally)
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
90
Ausnahmenbehandlung
• eigene Exception-Klasse erbt von Exception
public class Nicht42Exception extends Exception {
public Nicht42Exception(String nachricht){
nachricht){
super(nachricht);
super(nachricht);
}
}
• Variante: Nutzung vorhandener Exception, typisch
throw new IllegalArgumentException("Grund");
IllegalArgumentException("Grund");
• try-catch-finally (mehrere catch möglich, finally optional):
– keine Exception in try, dann in finally weitermachen
– Exception: catches abarbeiten, wenn treffend, dann
diesen catch-Block, dann in finally (und danach weiter)
– Exeception: kein catch, dann finally, dann an aufrufende
Methode weiterleiten (wieder wie beschrieben)
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
91
Beispiel: Ausnahmenbehandlung (1/2)
public class Rechner {
public void analyse(int x, int y) throws Nicht42Exception{
if (x==6 && y==9)
throw new IllegalArgumentException("nicht beantwortbar");
beantwortbar");
else if (x*y==42)
throw new Nicht42Exception("nich 42");
}
public int mal(int x, int y) throws Nicht42Exception{
try{
try{
analyse(x,y);
analyse(x,y);
System.out.println("so weit ...");
}catch (IllegalArgumentException
(IllegalArgumentException e) {
System.out.println(e.getMessage());
System.out.println(e.getMessage());
x=0;
}finally{
finally{
System.out.println("bin am Ende");
}
return x*y;
x*y;
}
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
92
Beispiel: Ausnahmenbehandlung (2/2)
public static void main(String[]
main(String[] args)
args) {
Rechner r = new Rechner();
try{
try{
System.out.println("A::"+r.mal(3, 4));
System.out.println("B::"+r.mal(6, 9));
System.out.println("C::"+r.mal(6, 7));
System.out.println("D::"+r.mal(3, 5));
}catch(Nicht42Exception e){
System.out.println(e.getMessage());
System.out.println(e.getMessage());
}finally{
finally{
System.out.println("in mainmain-finally");
finally");
}
int bumm=
bumm= 7/0;
System.out.println("Ende");
System.out.println("Ende");
}
}
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
so weit ...
bin am Ende
A::12
nicht beantwortbar
bin am Ende
B::0
bin am Ende
nich 42
in mainmain-finally
Exception in thread
"main"
java.lang.Arithmetic
Exception:
Exception: / by zero
at
Rechner.main(
Rechner.main(Rechner
.java:39)
.java:39)
93
Aufzählungen für Anfänger und Klassiker
public class Programmiererfahrung implements Qualifikation{
private String[] stufen={"nicht vorhanden",
"Grundkenntnisse","alte Projekterfahrung",
Projekterfahrung",
"Projektmitarbeiter", "Experte"};
private int stufenwert=0;
...
}
public class Erfahrung {
public final static int NICHT_VORHANDEN=0;
public final static int GRUNDKENNTNISSE=1;
public final static int ALTE_PROJEKTERFAHRUNG=2;
public final static int PROJEKTMITARBEITER=3;
public final static int EXPERTE=4;
}
Zugriff mit:
int meineErfahrung=
meineErfahrung= Erfahrung.NICHT_VORHANDEN;
Erfahrung.NICHT_VORHANDEN;
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
94
Aufzählungen mit Enum
public enum Erfahrung {
NICHT_VORHANDEN, GRUNDKENNTNISSE,
ALTE_PROJEKTERFAHRUNG, PROJEKTMITARBEITER, EXPERTE
}
public class Spielerei {
public static void main (String[] s){
Erfahrung ich= Erfahrung.NICHT_VORHANDEN;
Erfahrung.NICHT_VORHANDEN;
System.out.println(ich);
System.out.println(ich);
for(Erfahrung e: Erfahrung.values())
Erfahrung.values())
System.out.println(e);
System.out.println(e);
NICHT_VORHANDEN
}
NICHT_VORHANDEN
}
GRUNDKENNTNISSE
ALTE_PROJEKTERFAHRUNG
PROJEKTMITARBEITER
EXPERTE
Benutzeroberflächen und
Stephan Kleuker
95
Software-Ergonomie
Michaela Ramm
Weitere Methoden von enum-“Klassen“ (1/2)
Erfahrung ich= Erfahrung.NICHT_VORHANDEN;
Erfahrung.NICHT_VORHANDEN;
System.out.println(ich.getClass());
System.out.println(ich.getClass());
System.out.println(ich.compareTo(Erfahrung.NICHT_VORHANDEN));
System.out.println(ich.compareTo(Erfahrung.NICHT_VORHANDEN));
System.out.println(ich.compareTo(Erfahrung.EXPERTE));
System.out.println(ich.compareTo(Erfahrung.EXPERTE));
System.out.println(ich.equals(0));
System.out.println(ich.equals(1));
System.out.println(ich.equals(Erfahrung.NICHT_VORHANDEN));
System.out.println(ich.equals(Erfahrung.NICHT_VORHANDEN));
class Erfahrung
0
-4
false
false
true
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
96
Weitere Methoden von enum-“Klassen“ (2/2)
System.out.println(ich.getDeclaringClass());
System.out.println(ich.getDeclaringClass());
System.out.println(ich.name());
System.out.println(ich.name());
System.out.println(ich.ordinal());
System.out.println(ich.ordinal());
System.out.println(Erfahrung.valueOf("EXPERTE"));
System.out.println(Erfahrung.valueOf("EXPERTE"));
try{
// trytry{
try-catch spä
später genauer
System.out.println(Erfahrung.valueOf("Experte"));
System.out.println(Erfahrung.valueOf("Experte"));
}catch (IllegalArgumentException
(IllegalArgumentException e){
System.out.println(e);
System.out.println(e);
}
System.out.println(Erfahrung.valueOf(Erfahrung.class,"EXPERTE"));
System.out.println(Erfahrung.valueOf(Erfahrung.class,"EXPERTE"));
class Erfahrung
NICHT_VORHANDEN
0
EXPERTE
java.lang.IllegalArgumentException:
java.lang.IllegalArgumentException: Experte
EXPERTE
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
97
Objekte von enum-Klassen
• Mit enum werden besondere Klassen definiert, sind final
(keine Vererbung möglich), keinen von außen nutzbaren
Konstruktor
• Durch Erfahrung ich= Erfahrung.NICHT_VORHANDEN;
Erfahrung.NICHT_VORHANDEN; erhält
man ein Objekt der Klasse Erfahrung
• D. h. Enum-Klassen können zusätzlich „normale“
Exemplarmethoden und Exemplarklassen enthalten (auch
z. B. toString())
• Klassenmethodenaufruf Erfahrung.klassenmethode();
Erfahrung.klassenmethode();
• Methodenaufruf: ich.exemplarmethode();
ich.exemplarmethode();
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
98
Erweiterte Möglichkeiten mit enum
public enum Coin {
PENNY(1), NICKEL(5), DIME(10), QUARTER(25);
private final int value;
value;
Coin(int value)
value) { this.value = value;
value; }
public int value()
value() { return value;
value; }
}
PENNY:1c COPPER
NICKEL:5c NICKEL
DIME:10c SILVER
QUARTER:25c SILVER
public class CoinTest {
public static void main(String[]
main(String[] args)
args) {
for (Coin c : Coin.values())
Coin.values())
System.out.println(c +":"+c.value()+"c
+":"+c.value()+"c "+color(c
"+color(c));
color(c));
}
private enum CoinColor { COPPER, NICKEL, SILVER }
private static CoinColor color(Coin c) {
switch(c)
switch(c) {
case PENNY: return CoinColor.COPPER;
CoinColor.COPPER;
case NICKEL: return CoinColor.NICKEL;
CoinColor.NICKEL;
case DIME: case QUARTER: return CoinColor.SILVER;
CoinColor.SILVER;
default:
default: throw new AssertionError("Unknown coin:
coin: " + c);
}
und
Stephan Kleuker
99
} Benutzeroberflächen
Software-Ergonomie
Michaela Ramm
}
Serialisierung
• Zum Speichern und Laden von Objekten stellt Java
verschiedene Klassen zur Verfügung
• Variante hier: Objektverwandlung in XML
• generell: Objekte müssen serialisierbar sein (anschaulich:
verwandelbar in String mit Trennzeichen zwischen Werten)
• Collection-Klassen und viele weitere der Java-Bibliothek sind
serialisierbar (Achtung: im „Zeichenbereich“ viele nicht)
import java.io.Serializable;
java.io.Serializable;
public class Punkt implements Serializable{
Serializable{
private static final long serialVersionUID = 1L;
• keine Methode benötigt; Versionsnummer für Änderungen
• für XML-Nutzung: get und set für alle Exemplarvariablen
und parameterloser Konstruktor
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
100
Beispielausschnitt: Serialisierung (1/4)
import java.io.Serializable;
java.io.Serializable;
import java.util.ArrayList;
java.util.ArrayList; // ...
public class Polygon implements Serializable{
Serializable{
private static final long serialVersionUID = 1L;
private boolean geschlossen=false;
geschlossen=false;
private List<Punkt>
List<Punkt> punkte;
public Polygon(){punkte=new ArrayList<Punkt>();}
ArrayList<Punkt>();}
public void setGeschlossen(boolean b){geschlossen=b;}
b){geschlossen=b;}
isGeschlossen()
{return
//get
public boolean isGeschlossen
() {
return geschlossen;} //
get
public List<Punkt>
List<Punkt> getPunkte()
getPunkte() {return
{return punkte;}
public void setPunkte(List<Punkt>
setPunkte(List<Punkt> punkte) {
this.punkte = punkte;
}
public void hinzu(Punkt p){punkte.add(p);}
p){punkte.add(p);}
//...
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
101
Beispielausschnitt: Serialisierung (2/4)
package main;
main;
import java.beans.XMLDecoder;
java.beans.XMLDecoder;
import java.beans.XMLEncoder;
java.beans.XMLEncoder;
import java.io.BufferedInputStream;
java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
java.io.BufferedOutputStream;
import java.io.FileInputStream;
java.io.FileInputStream;
import java.io.FileNotFoundException;
java.io.FileNotFoundException;
import java.io.FileOutputStream;
java.io.FileOutputStream;
public class Main {
public static void main(String[]
main(String[] args)
args) {
Punkt[] ps = { new Punkt(0, 0), new Punkt(3, 3),
new Punkt(3, 0) };
Polygon poly = new Polygon();
for (Punkt p : ps)
ps)
poly.hinzu(p);
poly.hinzu(p);
System.out.println(poly);
System.out.println(poly);
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
102
Beispielausschnitt: Serialisierung (3/4)
XMLEncoder out = null;
try {
out = new XMLEncoder(new BufferedOutputStream(
BufferedOutputStream(
new FileOutputStream("Bsp.xml")));
FileOutputStream("Bsp.xml")));
out.writeObject(poly);
out.writeObject(poly);
} catch (FileNotFoundException
(FileNotFoundException e) {// wegschauen
} finally {
out.close();
out.close();
}
poly.setGeschlossen(true);
poly.setGeschlossen(true);
false < (0,0) (3,3) (3,0) >
true < (0,0) (3,3) (3,0) >
XMLDecoder in = null;
false < (0,0) (3,3) (3,0) >
Polygon poly2 = null;
try {
in = new XMLDecoder(new BufferedInputStream(
BufferedInputStream(
new FileInputStream("Bsp.xml")));
FileInputStream("Bsp.xml")));
poly2 = ((Polygon) in.readObject());
in.readObject());
} catch (FileNotFoundException
(FileNotFoundException e) {// wegschauen
} finally {
in.close();
in.close();
}
System.out.println(poly+"\
System.out.println(poly+"\n"+poly2);
}
}
Benutzeroberflächen
und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
103
Beispielausschnitt: Serialisierung (4/4) „Bsp.xml“
<?xml
<?xml version="1.0" encoding="UTFencoding="UTF-8"?>
<java version="1.6.0_12" class="java.beans.XMLDecoder">
class="java.beans.XMLDecoder">
<object class="graphik.Polygon">
class="graphik.Polygon">
<void property="punkte">
property="punkte">
<void method="add">
method="add">
<object class="basistypen.Punkt"/>
class="basistypen.Punkt"/>
</void
</void>
void>
<void method="add">
method="add">
<object class="basistypen.Punkt">
class="basistypen.Punkt">
<void property="x">
property="x">
<int>3</int>
</void
</void>
void>
<void property="y">
property="y">
<int>3</int>
</void
</void>
void>
</object
</object>
object>
</void
</void>
void>
<void method="add">
method="add">
<object class="basistypen.Punkt">
class="basistypen.Punkt">
<void property="x">
property="x">
<int>3</int>
</void
</void>
void>
</object
</object>
object> und
Benutzeroberflächen
Stephan Kleuker
Software-Ergonomie
Michaela Ramm
</void
void>
</
void>
</void
</void>
void>
104
javadoc – Dokumentation (1/3)
•
•
•
•
•
/** Kommentar */ - wird vor Klassen- und
Interfacedeklarationen sowie vor Methoden, Konstruktoren
und Attributdeklarationen zur Dokumentationsgenerierung
berücksichtigt
Kommentar wird in HTML-Dokumentation von "javadoc"
aufgenommen
=> HTML-Tags im Kommentar sind erlaubt
/** ist Kommentaranfang und */ ist Kommentarende
Innerhalb des Kommentars wird ein * am Zeilenanfang
ignoriert
Erster Satz des Kommentars ist gesonderter
Zusammenfassungssatz. (Punkt als Endmarkierung)
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
105
javadoc – Dokumentation (2/3)
• Durch @-Zeichen innerhalb des Kommentars werden Tags
eingefügt, um automatische Querreferenzen zu erzeugen
• Bei einigen Tags muss man bei javadoc einstellen, dass sie
mit zur Generierung genutzt werden sollen
• @see -Tag erzeugt allgemeine Querreferenz
– Referenz zu anderer Klasse:
@see java.io.InputStream
@see String
– Referenz zu einer Methode einer Klasse:
@see String#equals
– Referenz zu anderer HTML-Datei:
@see <a href="spec.html">Java Spec</a>
Spec</a>
• @author -Tag um Autor zu kennzeichnen
@author Ego ich
@author Ego ich, Me Myself,
Myself, Io Je
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
106
javadoc – Dokumentation (3/3)
• @version -Tag kennzeichnet Version
– @version 1.01beta
• @param -Tag
– Erklärung für Parameter in Methoden und
Konstruktorendeklarationen:
– @param name der Name des Mitarbeiters
• @return -Tag
– Bedeutung des Rückgabeparameters
• @exception -Tag
– Erklärung von Ausnahmen in Methoden und
Konstruktordeklarationen:
– @exception Nicht42Exception unerwü
unerwünschter Wert
• @deprecated -Tag (ab JDK 1.1)
– Kennzeichnung veralteter Methoden
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
107
Anmerkungen
• Methoden und Variablen vor der Deklaration kommentieren
• Kommentar in Methoden durch Kürze (<15 Zeilen), Struktur
(<3 Verzweigungen) und sprechende Namen unnötig
• javadoc erstellt HTML-Seiten; Konfigurationsmöglichkeiten
für das Aussehen
• konfigurierbar, welche Informationen sichtbar sein sollen (z.
B. auch private)
• javadoc auch zentrale Quelle für Interface-Beschreibung
• Variante statt HTML durch Doclets
• Alternative auch für Java: Doxygen
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
108
Beispiel - javadoc (1/4)
/** Klasse zur Beschreibung eines Punktes in der Ebene.
* Koordinaten kö
können nur ganzzahlige Werte annehmen
* @author
@author Ego Ich
* @version
@version 1.0
*/
public class Punkt implements Serializable{
Serializable{
private static final long serialVersionUID = 1L;
/** xx-Ordinate, Abstand vom Nullpunkt
*/
private int x;
/** yy-Ordinate, Abstand zum Nullpunkt
*/
private int y;
/** Methode zur Berechnung des Abstands eines anderen
* Punktes. Berechnung nutzt Satz von Pythagoras (oder so)
* @param
@param p zweiter Punkt, dessen Abstand zu this bestimmt wird
* @return
@return genauer Abstandswert
*/
public double abstand (Punkt p){
return Math.sqrt((xMath.sqrt((x-p.x)*(xp.x)*(x-p.x)
p.x) + (y
(y-p.y)*(yp.y)*(y-p.y));
p.y));
}
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
109
Beispiel - javadoc (2/4)
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
110
Beispiel - javadoc (3/4)
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
111
Beispiel - javadoc (4/4)
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
112
jar-Dateien
• Java-Programme (oder Teilprogramme/Komponenten)
werden typischerweise als Jar-Dateien ausgeliefert
• jar (ist zip-Datei) enthält class-Dateien und weitere genutzte
Dateien
• jar befindet sich als Programm im bin-Verzeichnis der JavaDistribution
• Zur Nutzung einer jar-Datei muss diese in CLASSPATHVariable oder als Parameter beim Programmstart
eingetragen werden
• eingebundene jar-Dateien können wie andere Klassen auch
genutzt werden
• typischerweise liegen fremde jar-Dateien in lib-Verzeichnis
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
113
Umgang mit jar (Beispiel)
• Einpacken der Informationen im
Verzeichnis classes
jar cvf blubb.jar paket1 paket2
(alle Dateien in den Verzeichnissen
paket1, paket2 und darunter werden
eingepackt)
C:
classes
paket1
paket2
• Ergänzung des CLASSPATH mit
c:\
c:\classes\
classes\blubb.jar
Klasse1.java
Klasse2.java
dann an beliebigem Ort ausführbar:
java paket1.Klasse1
• oder
java –classpath c:\
c:\classes\
classes\blubb.jar paket1.Klasse1
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
114
Nutzung externer Bibliothek
• Beispiel: Apache Collections
http://commons.apache.org/collections/
• herunterladen, zip auspacken, zumindest die Datei
commons-collections-3.2.1.jar in sinnvolles Verzeichnis
legen
• In Projekt einbinden - Achtung, nicht entpacken
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
115
Beispiel - Bag
import
import
import
java.util.Set;
java.util.Set;
org.apache.commons.collections.Bag;
org.apache.commons.collections.Bag;
org.apache.commons.collections.bag.HashBag;
org.apache.commons.collections.bag.HashBag;
public class Main {
public static void main(String[]
main(String[] args)
args) {
Bag b = new HashBag();
HashBag();
Punkt[] ps = { new Punkt(0,0), new Punkt(3,3),
new Punkt(3,0), new Punkt(3,3)};
for(Punkt p:ps)
p:ps)
b.add(p);
b.add(p);
System.out.println(b);
System.out.println(b);
b.add(new Punkt(0,0), 3);
System.out.println(b);
System.out.println(b);
[1:(3,0),1:(0,0),2:(3,3)]
System.out.println(ps[0]
[1:(3,0),4:(0,0),2:(3,3)]
+"::"+b.getCount(ps[0]));
(0,0)::4
Set s=b.uniqueSet();
s=b.uniqueSet();
[1:(3,0),1:(0,0),1:(3,3)]
Bag b2= new HashBag(s);
HashBag(s);
System.out.println(b2);
}
Benutzeroberflächen und
Stephan Kleuker
116
} Software-Ergonomie
Michaela Ramm
Software-Design (Modell - View - Controller)
• Klassen müssen so strukturiert werden, dass sie
wiederverwendbar und weiterentwickelbar sind (-> OOAD)
• Basisansatz: Trennung von Ein-/Ausgabe und
Berechnung/Datenverwaltung
• Datenverwaltung wird auch Model (M) genannt: Beispiele
Punkt und Polygon (hat kein System.out, wohl toString())
• Klasse zur Darstellung von Modellinhalten wird View (V)
genannt (Ausgabe in Textform oder graphisch oder ...)
• Klasse zur Bearbeitung von Modellen wird Controller (C)
genannt (z. B. Steuerung durch Nutzer)
• Grundidee: Controller bearbeitet Modellinhalte; Modell
informiert View über Änderungen (die dann gezeigt werden)
• Am Anfang: Zusammenhang zwischen Klassen aufbauen
• Varianten: Controller beeinflusst View, ...
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
117
Beispiel: MVC (1/3)
public class Model {
private View view;
view;
private String inhalt="";
inhalt="";
public String getInhalt(){
getInhalt(){
return inhalt;
inhalt;
}
public void anmelden(View v){
view=v;
view=v;
}
public void setInhalt(String inhalt){
inhalt){
if(!this.inhalt.equals(inhalt)){
if(!this.inhalt.equals(inhalt)){
this.inhalt=inhalt;
this.inhalt=inhalt;
view.informieren(inhalt);
view.informieren(inhalt);
}
}
Controller
+setModel(Model)
setModel(Model)
+aktion()
aktion()
-model 0..1
Model
-inhalt: String
+getInhalt():String
+setInhalt(String)
setInhalt(String)
+anmelden(View)
anmelden(View)
-view
0..1
View
+informieren(String)
informieren(String)
}
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
118
Beispiel: MVC (2/3)
public class View {
public void informieren(String i) {
System.out.println("neu:
System.out.println("neu: "+i);
}
}
public class Controller {
private Model model;
model;
public void setModel(Model model){
model){
this.model=model;
this.model=model;
}
public void aktion(){
aktion(){
int eingabe=eingabe=-1;
while(eingabe!=0){
System.out.print("Wat nu?\
nu?\n(0) Ende\
Ende\n(1) Model ändern: ");
eingabe=Eingabe.leseInt();
eingabe=Eingabe.leseInt();
if(eingabe==1){
System.out.print("Neuer Wert: ");
model.setInhalt(Eingabe.leseString());
model.setInhalt(Eingabe.leseString());
}
}
}
} Benutzeroberflächen und
Stephan Kleuker
119
Software-Ergonomie
Michaela Ramm
Beispiel: MVC (3/3)
public class Main {
Wat nu?
(0) Ende
public static void main(String[]
main(String[] a) { (1) Model ändern:
Neuer Wert: Hai
Model m= new Model();
neu: Hai
Wat nu?
Controller c = new Controller();
(0) Ende
c.setModel(m);
c.setModel(m);
(1) Model ändern:
View v = new View();
View();
Neuer Wert: Hai
Wat nu?
m.anmelden(v);
m.anmelden(v);
(0) Ende
c.aktion();
c.aktion();
(1) Model ändern:
}
Neuer Wert: Fisch
neu: Fisch
}
Wat nu?
(0) Ende
(1) Model ändern:
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
1
1
1
0
120
MVC fortgeschritten
• zu einem Model kann es mehrere Views geben
• Model hat Liste von Views, werden bei Änderungen informiert
• um ähnliche Views zu erlauben, realisieren diese ein Interface
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
121
Model-Delegate (MVC-Variante)
public class Delegate {
private Model model;
model;
public void setModel(Model model){
model){
this.model=model;
this.model=model;
}
public void informieren(String i) {
System.out.println("neu:
System.out.println("neu: "+i);
}
public void aktion(){
aktion(){
int eingabe=eingabe=-1;
while(eingabe!=0){
System.out.print("Wat nu?\
nu?\n(0) Ende\
Ende\n(1) Model ändern: ");
eingabe=Eingabe.leseInt();
eingabe=Eingabe.leseInt();
if(eingabe==1){
System.out.print("Neuer Wert: ");
model.setInhalt(Eingabe.leseString());
model.setInhalt(Eingabe.leseString());
}
}
}
}
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
122
Herunterladen