pdf, 4 Folien pro Seite

Werbung
Beispiele für Ausdrücke
Der imperative Kern
Deklarationen mit Initialisierung
Variablendeklarationen
int i = 10;
int j = 15;
[<Sichtbarkeit>] [static] <Typ>
<Name1> [= <Init1>]
[ , <Name2> [= <Init2>], … ]
Beispiele für Ausdrücke
Beispiele:
–
–
–
–
i+j
i++
i & j
i | j
int i = 10;
public static String Hello = “Hello World !“;
boolean flag = true;
int i, j=10,k, l=2*j;
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
62
63
Imperativer Kern - Kontrollstrukturen
Der imperative Kern
Blöcke
Zuweisungen
Sequenzen von Anweisungen und Deklarationen in
<Variable> = <Ausdruck>;
{ … }
Beispiele:
Beispiel
x = 1;
y = 2;
{ int
i =
int
j =
}
Zuweisungen sind auch Ausdrücke:
x = y = 1;
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
entspricht
x = (y = 1);
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
64
i = 10;
2*i;
j;
i+i;
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
65
Imperativer Kern - Kontrollstrukturen
Imperativer Kern - Kontrollstrukturen
Bedingte Anweisungen
Endliche Fallunterscheidung (Switch)
Sequenzen von Anweisungen und Deklarationen in
switch (<Ausdruck>) {
case
c1 : <Anweisung1>
.
.
.
cn : <Anweisungn>
[ default : <Anweisung> ]
}
if (<Bedingung>) {
<Konsequenz>
}
[ else {
<Alternative>
} ]
Beispiel
Spezielle Anweisung: break;
if ( a < b ) { x = a; } else { x = b;}
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
66
Imperativer Kern - Kontrollstrukturen
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
67
Imperativer Kern - Kontrollstrukturen
Endliche Fallunterscheidung (Switch)
Schleifen (while, do, for)
Beispiel:
while (<Bedingung>) { <Anweisungen> }
int x = 2, j;
switch (x) {
case 1: j=10;
case 2: j=20;
case 3: { j=25;
break;
}
case 4: j=0;
default: j++;
}
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
do
{ <Anweisungen> }
while (<Bedingung>)
for (<Init>; [<Bedingung>;] <Abschluss>)
<Anweisungen>
Beispiel
for (i=0; i<10; i++) { x = x+i; }
68
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
69
Imperativer Kern
Java als Programmiersprache
Die Fakultät in Java
public class Fakultaet {
static int fac (int n) {
if (n==0)
return 1;
else
return n*fac(n-1);
}
Objektorientierung (Klassen, Objekte, Methoden, Vererbung)
public static void main (String[] argv) {
System.out.println ( fac(6) );
}
}
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
70
Java als Programmiersprache
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
71
Klassen und Objekte
Klassen sind Datentypen (zeigerreferenzierte Recordtypen)
– entsprechen etwa zeigerreferenzierten Records in Modula 2
– legen die Struktur (Instanzvariablen, erlaubte Operationen)
ihrer Instanzen (Objekte) fest
– können Komponenten einer anderen Klasse erben
– kapseln Funktionalität etwa durch Deklaration von Sichtbarkeiten
Objektorientierung (Klassen, Objekte, Methoden, Vererbung)
Kapselung (engl. encapsulation)
Vererbung (engl. inheritance, Struktursicht, Typsicht)
Nachrichtenaustausch (engl. message passing)
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
class Circle {
float x, y, r;
}
72
// Mittelpunkt (x,y) und Radius
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
73
Klassen und Objekte
Objekte (Instanzen)
Objekte sind Daten (zeigerreferenzierte Records)
Objekte sind Daten (Instanzen einer Klasse)
Speicher
– entsprechen etwa zeigerreferenzierten Records in Modula 2
– werden i.a. dynamisch erzeugt (zur Laufzeit) new Circle();
– Haben eine Identität (Unterschied zu Tabellen in Datenbanken)
class Circle {
float x, y, r;
}
new Circle()erzeugt
0100
nocheinmal new Circle()
// Mittelpunkt (x,y) und Radius r
0110
0100
Circle
0104
x = 0.0
0108
y = 0.0
010C
r = 0.0
0110
Circle
0114
X = 0.0
0118
Y = 0.0
011C
Z = 0.0
Circle c;
c = new Circle(); // erzeugt ein Objekt der Klasse Circle
// und weist es der Variablen c zu
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
74
Methoden
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
75
Methoden
Methoden entsprechen Prozeduren / Funktionen
– werden durch Nachrichten aufgerufen:
Methodendeklarationen (in Klassen)
[<Sichtbarkeit>] [static] <Typ> <Name>
(<Parameter>) { <Rumpf>}
objekt.methodenname(arg1, …, argn)
entspricht
Beispiel:
methodenname(objekt, arg1, …, argn)
public class Circle {
…
public double umfang () {
return 2*3.14159 * this.r;
}
}
– Methoden heissen auch (Objekt)Methoden
– Statische Methoden (static) heissen auch Klassenmethoden
– Das Empfängerobjekt einer Nachricht (objekt) wird im Rumpf
der Methode als this bezeichnet
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
76
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
77
Objekterzeugung (Konstruktoren)
Methodenaufruf (Nachricht)
(Objekt-) Methoden
– werden durch Nachrichten aufgerufen:
Instanzen von Klassen (Objekte) werden durch Konstruktoraufrufe
erzeugt, z.B. durch
new Circle(2.0, 3.0, 1.0);
– Beispiel:
– Methoden, die keinen Resultattyp und denselben Namen haben
wie die Klasse, sind Konstruktormethoden
c.x = 2.0;
c.y = 3.0;
c.r = 1.0;
– Beispiel:
public Circle ( float x, y, r ) {
this.x = x;
this.y = y;
this.r = r;
}
double x = c.umfang();
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
78
79
Überladung
Objekte (Instanzen)
Objekte sind Daten (zeigerreferenzierte Records)
In Java sind zwei Methoden verschieden, wenn sie
• verschiedene Namen oder
• gleiche Namen und
verschiedene Signaturen haben, d.h. Anzahl, Reihenfolge
oder Typen der Parameter verschieden sind
Speicher
new Circle(2.0,3.0,1.0)erzeugt
0100
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
0100
Circle
0104
float x = 2.0
0108
float y = 3.0
010C
float r = 1.0
Beispiel: (hier: Konstruktormethoden):
0110
public Circle ( float r ) {
this.x = 0.0; this.y = 0.0; this.r = r; }
0114
0118
011C
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
public Circle ( Circle c ) {
this.x = c.x; this.y = c.y; this.r = c.r; }
80
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
81
Statische Komponenten
Überladung
In Java sind zwei Methoden gleich, wenn sie
• den gleichen Namen und
• die gleiche Signatur haben, d.h. Anzahl, Reihenfolge
und Typen der Parameter gleich sind
– Statische Methoden sind gewöhnliche Funktionen oder
Prozeduren (Schlüsselwort static)
– Statische Instanzvariablen sind globale Variablen.
Sind sie zusätzlich final deklariert, wirken sie wie Konstanten
Beispiel: (hier: Konstruktormethoden):
– Beispiele:
public static int fac ( int n ) { … }
public double umfang () {
return 2 * Math.PI * r;
}
public double umfang () {
return Math.PI * ((r + s) * 3 / 2
- Math.sqrt(r * s));
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
public final static double PI = 3.14159;
82
Statische Variablen (Beispiel)
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
83
Vererbung
A
public class Circle {
class B extends A {
…
}
static int num_circles = 0;
float x,y,r;
public Circle (float x, float y, float z) {
this.x = x; this.y = y; this.r = z;
num_circles++ // zählt Anzahl der Instanziierungen
}
–
–
–
–
public Circle () {
this (0.0, 0.0, 1.0);
}
}
B
B erweitert (spezialisiert) A
B heisst Subklasse von A, A heisst Superklasse von B
Klasse B erbt alle Komponenten (Attribute, Methoden) von A
jedes B ist auch ein A, B ist Subtyp von A
Zugriff auf statische Variablen (Klassenvariablen):
Circle.num_circles
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
84
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
85
Vererbung (Struktursicht, Typsicht)
Vererbung (Typsicht, Typ-/Subtyp-Beziehung)
A
class B extends A {
…
}
A
class B extends A {
…
}
B
Struktursicht:
B erbt alle Komponenten (Attribute, Methoden) von A
– jedes B ist auch ein A, B ist Subtyp von A
– überall dort, wo Instanzen des Typs A erwartet werden, dürfen
auch Instanzen des Typs B auftauchen
Typsicht:
B ist Subtyp von A, jedes B ist auch ein A
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
B
86
Vererbung - Beispiel
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
Objekte (Instanzen), Vererbung von Attributen
Objekte sind Daten (zeigerreferenzierte Records)
Klasse GraphicsCircle erbt die Komponenten von Circle
public class GraphicCircle extends Circle {
Color fill, outline;
Speicher
new GraphicsCircle()
erzeugt
public void draw (Graphics g) {
g.setColor(outline);
g.drawOval(x-r, y-r, 2*r, 2*r);
g.setColor(fill);
g.fillOval(x-r, y-r, 2*r, 2*r);
}
}
87
0100
Die Methoden drawOval(…) und fillOval(…) in Java 1.5
erwarten Integer-Argumente (Anzahl Pixel) anstatt float.
0100
GraphicsCircle
0104
float x = 0.0
0108
float y = 0.0
010C
float r = 0.0
0110
Color fill =
0114
Color outline =
0118
– Beteiligte Packages:
011C
java.awt.Color, java.awt.Graphics
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
88
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
89
Vererbung – Überdecken von Attributen
Objekte (Instanzen), Überdecken von Attributen
Objekte sind Daten (zeigerreferenzierte Records)
Klasse Circle erbt alle Komponenten von Ellipse
public class Circle
extends Ellipse {
Speicher
double r;
new Circle()erzeugt
public double umfang () {
return 2 * Math.PI * r;
}
0100
}
0100
Circle
0104
float x = 0.0
0108
float y = 0.0
010C
float r = 0.0
0110
float r2 = 0.0
0114
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
double r = 0.0
0118
– Kreise haben sowohl ein double r
als auch das float r aus Ellipse
011C
90
Wolfgang Goerigk: Objektorientierte Programmierung in Java (SS 2009)
91
Herunterladen