Benutzeroberflaechen und Software

Werbung
BO-Ich
Benutzeroberflaechen
und Software - Ergonomie
Prof. Dr. Stephan Kleuker
Prof. Michaela Ramm
Fachhochschule Osnabrück
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
• [email protected], Raum SI 0109
• Sprechstunde nach Vereinbarung und wenn ich da bin
1
Ablauf
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
2
Verhaltenscodex
• 2h Vorlesung + 2h Praktikum = 5 CP
• Planung: 6 VL zu BO + 7 VL zu SE
• Praktikum in BO:
– Anwesenheit = (Übungsblatt vorliegen + Lösungsversuche
zum vorherigen Aufgabenblatt)
– 6-7 Übungsblätter mit jeweils 7-8 Punkten (Σ ≥ 50), 2 Studis
– Praktikumsteil mit 40 oder mehr Punkten bestanden
• Prüfung: Projektaufgabe (Kenntnisse aus der Vorlesung
anwenden + eigene Untersuchungen)
• Folienveranstaltungen sind schnell, bremsen Sie mit Fragen
• von Studierenden wird hoher Anteil an Eigenarbeit erwartet
Benutzeroberflächen und
Software-Ergonomie
• Prof. Dr. Stephan Kleuker, geboren 1967, verheiratet, 2
Kinder
• seit 1.9.09 an der FH, Professur für Software-Entwicklung
• vorher 4 Jahre FH Wiesbaden
• davor 3 Jahre an der privaten FH Nordakademie in Elmshorn
• davor 4 ½ Jahre tätig als Systemanalytiker und
Systemberater in Wilhelmshaven
Stephan Kleuker
Michaela Ramm
•
•
•
•
Rechner sind zu Beginn der Veranstaltung aus
Handys sind aus
Wir sind pünktlich
Es redet nur eine Person zur Zeit
• Sie haben die Folien zur Kommentierung in der Vorlesung
vorliegen, ab So-Abend mit Aufgaben im Netz,
Aufgabenzettel liegen in der Übung vor (Ihre Aufgabe)
http://www.edvsz.fh-osnabrueck.de/kleuker/index.html
• Probleme sofort melden
• Wer aussteigt teilt mit warum
3
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
4
Minimale Grundvoraussetzungen
Themengebiete BO (Planung)
Gute Programmierkenntnisse in C++
• Klasse
• Methode
• Klassenvariable und Klassenmethode
• Sichtbarkeit
• Vererbung
• abstrakte Klassen
• Collections (z. B. Liste, Menge)
• Polymorphie
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
1
2
3
4
5
6
7
5
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
6
1. Klassen und Objekte
Literatur
• C. Heinisch, F. Müller, J. Goll, Java als erste
Programmiersprache, Vieweg+Teubner
• G. Krüger, Handbuch der Java-Programmierung, AddisonWesley
http://www.javabuch.de/download.html
• C. Ullenboom, Java ist auch eine Insel, Galileo Computing
http://openbook.galileocomputing.de/javainsel8/
•
•
•
•
•
•
•
•
Java-Seiten von Sun (sehr lesenswert):
http://www.oracle.com/technetwork/java/javase/overview
/index.html
Klassendokumentation:
http://download.oracle.com/javase/6/docs/api/ (auch
herunterladbar)
Benutzeroberflächen und
Software-Ergonomie
Klassen und Objekte
Vererbung und Polymorphie
Abstrakte Klassen, Interfaces, Collections
Einige wichtige Java-Dinge
Frames, Knöpfe und Ereignisbehandlung
Layout, hierarchischer GUI-Aufbau
Rundflug über GUI-Bausteine
Stephan Kleuker
Michaela Ramm
7
Klasse
Sichtbarkeit
Objekterzeugung
this
Methoden
Klassenvariablen - und Methoden
Array
String
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
8
Java - Bedeutung in der Praxis (Stellenbörsen)
<name> stepstone monster jobscanner stellenanzeigen zeit
Suchbegriff
Informatik
Java
wwj
2615
>1000
3855
>500 11450 6905
1975
3407
2691
514 12621 6902
Java - Bedeutung im Studium
speed.ch
171 23.4.07
31 28.1.10
881
>1000
1441
>500 4679 3238
203
791
1408
1252
149 5211 3100
111
382
>1000
114
194
*** 2563
394
754
781
66
2167
24
C#
175
531
47
61
***
755
38
237
556
28
823
56
PHP
111
543
350
>500 2014
887
10
303
608
269
71 1523 1014
13
SAP
2509
>1000
4357
>500 17213 7330
396
1889
4647
2567
359 14019 6844
168
319
745
312
115 1752
743
22
150
427
170
60 1727
614
11
187
234
81
29
647
4
C++
ABAP
Flash (28.1.10)
Benutzeroberflächen und
Software-Ergonomie
37
534
!
36
Stephan Kleuker
Michaela Ramm
!
9
!
!
!
Java !
!
!
!
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
10
Vom Source Code zum ausführbaren Programm
• Objekt-orientierte Programmierung ist für komplexe und
umfangreiche Aufgaben unerlässlich
Java Source
(Punkt.java)
• Plattformunabhängigkeit und Netzwerkfähigkeit sind
Voraussetzungen für eine weltweite Verfügbarkeit einer
Anwendung
Just-in-time
Compiler
Java Virtual
Machine (java)
• Source Code wird vom Compiler in Bytecode übersetzt
• Bytecode wird von JVM ausgeführt (d.h. interpretiert)
• Ggf. werden über den JIT-Compiler bestimmte
Befehlssequenzen in nativen Code übersetzt
• Java macht Spaß
Stephan Kleuker
Michaela Ramm
Java Bytecode
(Punkt.class)
Java Compiler
(javac)
• Sehr umfangreiche und gute Klassenbibliothek als Standard
vorhanden
Benutzeroberflächen und
Software-Ergonomie
!
!
11
Benutzeroberflächen und
11.11.2010
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
BOSE WS 2010/2011
12
12
Vorgehensweise und Verknüpfung zu OOP-VL
Klassendefinition
• Einführung in wesentliche Sprachkonzepte von Java (nicht
was ist noch so alles möglich)
• Syntaxbestandteile, die in C++ und Java ähnlich sind, werden
nicht explizit behandelt
– Deklaration mit Zuweisung int x=0;
– Blockklammern { und } (weglassbar bei Einzeilern)
– Alternative if(<Bedingung>){<if-Teil>} [else{<else-Teil}]
– verschachtelte Alternative switch(<Variable>) { case
<Wert>: {...} ... default: {...} }
– statische Schleife for (<Initialisierung>,<Abbruch>,
<Schleifenendeaktion>){...}
– dynamische Schleife while(<Bedingung>){...}
– Datentypen (sind leider keine Klassen): char, byte, int,
long, float, double, boolean
Benutzeroberflächen und
Software-Ergonomie
class Punkt {
int x;
int y;
Punkt
void moveTo(int newX, int newY){
x = newX;
y = newY;
}
void moveRel(int dx, int dy){
x += dx;
y += dy;
}
x: int
y: int
moveTo(int,int)
moveRel(int,int)
}
Stephan Kleuker
Michaela Ramm
13
Sichtbarkeiten [Teil 1]
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
14
Objekterzeugung - Konstruktorennutzung
• Für Klassen, Exemplarvariablen und Methoden sind
„Sichtbarkeiten“ anzugeben, wer darf darauf zugreifen
(Kapselung)
• public: alle
private: nur innerhalb der Klasse ...[später]
• Standard: Exemplarvariablen private
public class Punkt {
private int x;
private int y;
Punkt
-x: int
-y: int
public void moveTo(int newX, int newY){
x = newX;
y = newY;
}
...
Benutzeroberflächen und
Software-Ergonomie
• Eine Klassendefinition besteht aus dem Schlüsselwort class
und dem Klassennamen; jede Klasse in eigener Datei
• Der Körper einer Klasse enthält Exemplarvariablen- (bzw.
Attribut-, Instanzvariablen) und Methodendefinitionen
Stephan Kleuker
Michaela Ramm
+moveTo(int,int)
+moveRel(int,int)
15
• Erzeugen von Objekten (Exemplaren) einer Klasse in einer
Methode
Punkt
Punkt
start
ende
start;
ende;
= new Punkt();
= new Punkt();
• Nach der Deklaration Punkt start; gilt zunächst start hat
den Wert null (null-Referenz)
• Bei der Benutzung des new-Operators wird
• Speicherplatz für ein Objekt einer Klasse angefordert
• der Konstruktor, eine spezielle Methode zum
Initialisieren von Objekten, aufgerufen
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
16
Konstruktoren einer Klasse
Beispiel für Konstruktoren
• Konstruktoren einer Klasse haben den gleichen Namen wie
die Klasse
• Konstruktoren haben keinen Ergebnistyp, liefern ein Objekt
der Klasse zurück
• eine Klasse kann mehrere Konstruktoren mit
unterschiedlichen Signaturen haben
• ist für eine Klasse kein Konstruktor definiert, so wird für die
Klasse ein impliziter parameterloser Konstruktor verwendet
• Wenn ein Konstruktor einen anderen Konstruktor aufruft,
dann muss dieser Aufruf die erste Anweisung des
Konstruktors sein
• Coding Guideline: Konstruktor immer angeben
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
17
this
public class Punkt {
private int x;
private int y;
public Punkt(){
x = 0; y = 0; //schlechtester Zeilenschreibstil!
}
public Punkt(int newX){
x = newX; y = 0;
}
public Punkt(int newX, int newY){
x = newX; y = newY;
}
public void moveTo(int newX, int newY){ . . . }
public void moveRel(int dx, int dy){ . . . }
}
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
18
Methoden
• this liefert einen Verweis auf das Objekt in dem dieses
Schlüsselwort steht
• Verwendung des this-Schlüsselwortes
• Zugriff auf überdeckte Exemplarvariablen
• Eine Methode wird folgendermaßen definiert:
sichtbarkeit returntyp methodenname([parameter]){
. . .
}
Punkt(int x){
this.x = x;
this.y = 0;
}
• Ist der returntyp nicht void, muss jeder Methodenablauf mit
return <ergebnis>; enden
• Methoden können lokale Variablendefinitionen enthalten,
diese müssen vor dem ersten Gebrauch immer initialisiert
werden, können Exemplar- und Klassenvariablen überdecken
• Zugriff auf andere Konstruktoren einer Klasse
Punkt(int x, int y){
this(x); //Konstruktor nutzen (erste Zeile)
this.y = y;
}
public boolean aufXAchse(){
boolean ergebnis = false;
if (y == 0)
ergebnis = true;
return ergebnis;
// geht alles in einer Zeile
}
• Aufruf einer Methode mit dem aktuellen Objekt als
Parameter
einObjekt.drawPunkt(this);
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
19
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
20
Nutzung von Exemplarvariablen
Nutzung von Klassen und Methodenaufrufe
public class Linie {
private Punkt anfang;
private Punkt ende;
• Generell ist es sinnvoll, für Exemplarvariablen get- und setMethoden zu definieren
public int getX(){
return x;
//this kann weggelassen werden
}
public void setX(int x){
this.x = x;
}
public Linie(int x1, int y1, int x2, int y2){
anfang = new Punkt(x1,y1);
Linie
ende = new Punkt(x2,y2);
}
+Linie(int,int,int,int)
public int xAbstand(){
+xAbstand():int
return anfang.getX()-ende.getX();
}
• Innerhalb der Implementierung einer Klasse wird häufig auf
die Nutzung von get- und set- verzichtet
• private für Exemplarvariablen garantiert, dass Methoden in
anderen Klassen nur über get und set zugreifen können, sonst
public static void main(String[] args) {
Linie linie= new Linie(1,1,4,4);
System.out.println(linie.xAbstand());
}
Punkt pkt= new Punkt(2,3);
pkt.x=4; //schlechtester Stil
-ende
-anfang
Punkt
}
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
21
Ausführbarkeit und Kompilierung
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
22
Klassenvariablen
• Jede Klasse steht in eigener Datei mit Endung .java
• Gute Idee: Startmethode main (Parameter beachten) in
eigene Klasse auslagern
• Klassenvariablen sind globale Variablen innerhalb einer Klasse
• Klassenvariablen werden mit dem Modifier static definiert
public class Mitarbeiter {
static private int anzahl=0;
final static public String FIRMA = "FH";
...
public class Main{ // Datei Main.java
public static void main(String[] args) {
Linie linie= new Linie(1,1,4,4);
System.out.println(linie.xAbstand());
}
} // Main und Linie in einem Verzeichnis
• Klassenvariablen werden für eine Klasse nur einmal angelegt
• Klassenvariablen werden (wenn durch public erlaubt) von
außen mit Klassenname.Variablenname angesprochen
• 1. Schritt: Übersetzung in Byte-Code (entsteht Main.class)
System.out.println("Isch bin in "+Mitarbeiter.FIRMA);
javac Main.java
• in der Klasse selbst anzahl=42; möglich
• 2.Schritt: Ausführung des Programms
java Main
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
23
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
24
Klassenmethoden
Beispiel zu Exemplar- und Klassenvariablen (1/2)
public class Mitarbeiter{
private static int anzahl=0;
private int miNr;
private String name;
• gehören zu einer Klasse und nicht zu einem bestimmten
Objekt der Klasse
• werden mit dem Schlüsselwort static definiert
• können nur statische Teile (Variablen, Methoden) einer
Klasse verwenden
public Mitarbeiter(String name){
this.name=name;
miNr= anzahl++;
}
public static int gibAnzahl(){
return(anzahl);
}
• Methodenaufruf
– Exemplarmethoden
– Klassenmethoden
public String toString(){
return "Nr."+miNr+" : "+name;
}
exemplar.methode(…)
Klasse.methode(…) oder
exemplar.methode(…) [schlecht]
Mitarbeiter
-anzahl:int
-miNr:int
-name:String
+Mitarbeiter(String)
+toString():String
+istChef():boolean
+bisherAngestellt():int
public boolean istChef(){
return(miNr==0);
}
public static int bisherAngestellt(){
return anzahl;
}
}
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
25
Beispiel zu Exemplar- und Klassenvariablen (2/2)
Stephan Kleuker
Michaela Ramm
Stephan Kleuker
Michaela Ramm
26
Nutzung von Klassenmethoden
public class Main {
public static void main(String[] args) {
Mitarbeiter m1= new Mitarbeiter("Erhard M.");
Mitarbeiter m2= new Mitarbeiter("Stephan K.");
System.out.println (m2); // ruft automatisch toString
System.out.println("Chef? "+m2.istChef());
System.out.println (m1);
System.out.println("Chef? "+m1.istChef());
System.out.println("# Angestellte: "
+Mitarbeiter.bisherAngestellt());
}
Nr.1 : Stephan K.
}
Chef? false
Nr.0 : Erhard M.
Chef? true
# Angestellte: 2
Benutzeroberflächen und
Software-Ergonomie
Benutzeroberflächen und
Software-Ergonomie
• Klassenmethoden werden dann angeboten, wenn
Berechnungen gewünscht sind, die nicht vom Zustand eines
Objekts abhängen. Beispiel: Klasse die von der Console liest
public class Eingabe {
public static String leseString(){...}
public static int leseInt(){...}
public static float leseFloat(){...}
public static double leseDouble(){...}
public static boolean leseBoolean(){...}
}...
public static void main (String[] s){
int eingabe;
System.out.print("Gib Zahl: ");
eingabe= Eingabe.leseInt();
...
27
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
28
Parameterübergabe
Arrays (Felder) (1/4)
• Datentypen werden „Call by Value“ übergeben
• Objekttypen werden „Call by Reference“ übergeben
public void machWas(int z, Punkt punkt){// in Klasse Punkt
z=0;
punkt.setX(42);
• In Java sind Arrays (Felder, Reihungen) spezielle Objekte
• jedes Element eines Arrays hat den gleichen Typ,
dieser wird bei der Deklaration festgelegt
• die Länge eines Arrays wird einmal festgelegt und
kann nicht einfach verändert werden
}
public static void main(String[] args) {
Punkt pkt= new Punkt(3,3);
int y=11;
pkt.machWas(y,pkt);
System.out.println("y: "+y+" pkt.x: "+pkt.getX());
}
y: 11 pkt.x: 42
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
29
Arrays (Felder) (2/4)
• Gemeinsamkeiten von Objekten und Arrays
• Arrays werden wie Objekte dynamisch angelegt
• Arrays sind Objekte
• Wenn ein Array als Exemplarvariable genutzt wird,
werden seine Elemente automatisch initialisiert
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
30
Arrays (Felder) (3/4)
• Unterschiede zwischen Objekten und Arrays
• Arrays haben als einzigen Konstruktor eine spezielle
Syntax des new-Operators
• Es können keine Unterklassen von Arrays definiert
werden
• Erzeugen von Arrays durch den new-Operator
int[] a1;
a1 = new int[4];
int[] a2 = new int[4];
String[] names = new String[4];
• Zugriff auf Arrays
• Deklaration von Arrays
a1[0] = 1;
a1[1] = 2;
a1[2] = 3;
a1[3] = 4;
names[0]="Karl";
names[1]="Jan";
names[2]="Uwe";
names[3]=new String("Hans");
int a1[]; //geht auch, nicht schön
int[] a1;
String[] names;
• Nach einer solchen Deklaration hat die Variable den Wert
null (sollte nicht verwundern)
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
31
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
32
Arrays (Felder) (4/4)
Mehrdimensionale Felder
• Direktes Initialisieren von Array-Elementen
• Arrays die als Basistyp ein Array haben
int[] a1 = {1, 2, 3, 4};
String[] names = {"Karl", "Jan", "Uwe",
new String("Hans")};
ChessPiece [][] chessBoard ;
chessBoard = new ChessPiece[8][8];
chessBoard[0][0] = new ChessPiece("Rook");
• Durch Initialisieren ist die Array-Größe festgelegt
• Array-Länge ist durch die sichtbare :( Exemplarvariable
length gegeben
• direktes Initialisieren mehrdimensionaler Arrays
int[][] a = {{1, 2, 3},{1, 2, 3}};
for(int i = 0; i < a1.length; i++)
a1[i] = i + 1;
• mehrdimensionale Arrays müssen nicht rechteckig sein
• Cooler, aber ohne Zugriff auf Laufindex:
int[][] a = {{0},{1,2},{1,2,1}};
for(String s:names)
System.out.println(s);
for(int i:a1)
System.out.println(i);
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
33
Zeichenketten (Strings)
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
34
Methoden bei Zeichenketten
• Zeichenketten sind Objekte der Klasse java.lang.String
String s1 = "konstante Zeichenkette";
StringBuffer s2 = new StringBuffer("änderbare Zeichenkette");
• Verkettung von Zeichenketten
String s = "Ein String aus" + " zwei Hälften"
• Umwandeln von Zeichenketten (eine Möglichkeit)
StringBuffer sb = new StringBuffer("ABC");
sb.append("DEF");
String s = sb.toString();
• Strings mit + zu verknüpfen benötigt mehr Rechenzeit als mit
StringBuffer und append zu arbeiten und am Ende toString zu
nutzen
• einige Methoden der Klasse java.lang.String
– length()
liefert die Länge des String-Objekts
– charAt(int)
liefert das Zeichen an Position
– equals(String) Vergleichen von Zeichenketten
(== testet nur auf Identität)
– substring(int,int)
liefert den Teilstring
• einige Methoden der Klasse java.lang.StringBuffer
– append(String)
anhängen am Ende des Strings
– insert(int,String)
fügt Zeichenkette an bestimmter
Stelle ein
– delete(int,int)
löscht einen Teil des Strings
– replace(int,int,String)
ersetzt Teil des Strings
• Hinweis: Stringbuffer-Objekte verstehen auch length(),
charAt(int), substring(int,int)
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
35
Benutzeroberflächen und
Software-Ergonomie
Stephan Kleuker
Michaela Ramm
36
Herunterladen