Technische Informatik - Universität Paderborn

Werbung
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Technische Informatik
für Ingenieure
Kapitel 10
Java: Klassen
Wintersemester 2001 / 2002
Wolfram Hardt
Zusammenfassung
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
? Unterprogramme
<modifier> <ergebnistyp> <name> (parameterliste) anweisungsblock
? modifier:
static, pubic, private
? ergebnistyp:
Typ, wenn das Unterprogramm ein Ergebnis liefert,
ansonsten "void".
? Unterprogramme heißen „Funktionen“, wenn
? ein Ergebnis zurückgegeben wird.
? Programmkonstrukt zur Rückgabe des Ergebnis: return
? Unterprogramme heißen „Prozeduren“, wenn
? kein Ergebnis zurückgegeben wird.
? Parameter können globale Variablen sein
10-2
1
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Zusammenfassung
static int sumplus (int a, int b)
{
a++;
// a um 1 erhoehen (inkrementieren)
b++;
// b um 1 erhoehen (inkrementieren)
return a+b; // Summe als Ergebnis zurueckliefern
}
int x=3; int y=4;
int s1 = sumplus(x,y);
int s2 = sumplus(x,y);
// s1=9
// s2=9
int a=3; int b=4;
int s3 = sumplus(a,b);
// s3=9, a=3, b=4
? Formale Parameter: Unterprogrammdeklaration; BSP: a, b
? Aktuelle Parameter: aufrufendes Programm;
BSP: x, y, a, b
10-3
Beispiel II zu Rekursion
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
? Die Fibonacci-Zahlen (Leonardo Fibonacci, 1202)
? Rekursive Definition:
f0 = 0;
f1 = 0;
fn = fn-1 + fn-2 für n > 1
n: 0
fn: 0
1
1
2
1
3
2
4
3
5
5
6
8
7 8 9 10 11 12 13
13 21 34 55 89 144 233
10-4
2
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Rekursive Funktion (Fibonacci)
static int fib(int n)
{
// Berechnet die n-te Fibonacci-Zahl
if ( n == 0) return 0; // 1. Startwert
else
if (n==1) return 1; // 2. Startwert
else return (fib(n-1) + fib(n-2)); // Rekursion
}
Die rekursive Lösung führt zu Mehrfachberechnungen.
Bei n=40 bereits über 200 Millionen Additionen !
Der Rechenaufwand steigt exponentiell mit n.
10-5
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Struktur des rekursiven Aufrufs
f7
f5
f6
f5
f4
f3
f4
f3
f2
f2
f2 f1 f1 f0 f1 f0
f3
f1
f2
f2
f1
f1
f1 f0
f3
f4
f3
f0
f2
f2
f1
f1
f2
f0
f1
f1
f0
f1 f0
f1 f0
10-6
3
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Iterative Lösung
static int fib(int n)
{ //Berechnet die n-te Fibonacci-Zahl
int f [] = new int [n+1];
// Feld fuer Fibonacci Zahlen
f[0]= 0; f[1]= 1;
// Startwerte
if (n>1)
for (int i = 2; i<=n; i++)
f[i]= f[i-1]+f[i-2];
return f[n];
// Fuelle Tabelle
// hole Werte aus Tabelle
}
Braucht für n=40 nur 39 Additionen!
0
1
1
2
3
5
8 13 21
Der Rechenaufwand wächst linear mit n.
10-7
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Klassen: Idee
? Abstrakte Datenstruktur
? Vergleich mit Datenfledern (Arrays)
? Gruppierung mehrerer Daten gleichen Typs
? abstraktes Objekt Array, definierte Elemente
? Klassen
? Gruppierung mehrerer Daten
? Gruppierung von Daten und Funktionen
? abstraktes Objekt, definierte Elemente
? einfache Datentypen (int, float, ... )
Member
? komplexe Datentypen (String, Array, ... )
? Unterprogramme, dediziert zu Daten
Methode
? Sichtbarkeitsbreiche
10-8
4
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Klassen
? Beschreibung von Objekten der realen Welt
? Konzentration auf relevante Einzelheiten
Abstraktion
? Vernachlässigung nicht relevanter Einzelheiten
? Zugriff auf die Elemente eines Objektes
? Member-Variablen und Methoden
? Sichtbarkeitsbereiche
? public:
? static:
? private:
?
keine Einschränkung
globale Variable für alle Objekte dieses Typs
nur innerhalb der Klasse sichtbar
nur innerhalb eines Packages
? Package
? Gruppe von Klassen
10-9
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Packages
? neues Schlüsselwort: package
? Beispiel
? package tifi.uebung
? Voraussetzung
? es existiert der Pfad tifi/uebung
? ls tifi/uebung
? loesung1.java
? loesung2.java
? Alle Klassen aus den Files loesung1.java und loesung2.java
gehören zum Package package tifi.uebung
10-10
5
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Konstruktor
? Klassen verfügen über spezielle Initialisierungs-Operatoren
? Konstruktoren
? Namen der Klasse,
Parameter
? Beispiel
class Forwarder {
private float
private float
Forwarder
length: float
weight: float
length;
weight;
public Forwarder
length
weight
=
}
public Forwarder
length
weight
=
}
{
=
-1;
-1;
Forwarder()
Forwarder(len: float
(float len ){
=
len;
-1
}
10-11
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Bisher ...
? Klassen
? Gruppierung von Daten und Funktionalität
? Sichtbarkeitsbereich
? public - private - static
? Initialisierungsoperator
? Konstruktor
? unterschiedliche Parameter möglich
? Klassen spiegeln wesentliche Aspekte der ‚realen Welt‘ wider
? Daten und Methoden sind
? Basis von Klassen und wesentliche Bausteine der
? Objektorientierten Programmierung
10-12
6
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Objektorientierung
? Objekte der ‚realen Welt‘ werden in einem Programm repräsentiert
? z.B. Gegenstände, Personen
? Diesen Vorgang nennt man Abstraktion: nur bestimmte Aspekte des
realen Objekts interessieren
? Person:
Name, Vorname, Adresse, Telefonnummer
? Motor:
Drehzahl, Drehmoment, Temperatur
? Objekte gleichen Typs werden zu einer Klasse zusammengefasst
? Objekte können auch ein Verhalten zeigen, man kann an ihnen
Handlungen, d.h. Operationen durchführen
? Person:
aufnehmen, abweisen, einordnen
? Flasche:
öffnen, trinken, wegwerfen
? Personenliste:
sortieren, drucken
? In gewisser Weise definiert sich das Objekt durch das, was man mit ihm
„machen“ kann
10-13
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Klassen und Instanzen
Eigenschaften
Zustandsgrößen
(Typen,Variablen)
(Typen,Variablen)
Verhalten
Methoden
Reales Objekt
Abstraktes Objekt
Konkrete Objekte
Klasse
Objekte, Instanzen
Datenobjekte
Datenobjekte
Datenobjekte
(Werte)
Datenobjekte
(Werte)
(Werte)
in der Vorlesung wird der
Begriff Instanz verwendet.
10-14
7
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Klassen und Instanzen
Klassenname
class Circles
Instanzvariable
x, y, radius
Instanzmethoden
Konstruktormethode
Drei Instanzen
der Klasse
Circles
getX ()
getY ()
getRadius ()
move (...)
grow (...)
Circles (...)
Circles (1,1,0.5)
0
0
1.0
1
1
0.5
Circles (0,0,1.0)
10
20
100.0
Circles (10,20,100.0)
10-15
Bildung von Klassen
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
? Instanzen werden durch den new-Operator klassenspezifisch erzeugt:
new Circles (0,0,1.0)
? Die new-Operation führt zum Aufruf der Konstruktor-Methode, deren
Parameter die initialen Eigenschaften der Instanz festlegen.
? Das Ergebnis der new-Operation kann einer Variablen passenden Typs
zugewiesen werden.
Circles unit = new Circles(0,0,1.0);
Circles small = new Circles(1,1,0.5);
Circles big = new Circles(10,20,100.0);
? Alle Instanzen sind verschieden, auch wenn sie dieselben Werte haben.
int a, b; ? zwei Instanzen vom Typ integer
a = 5;
? beide speichern den gleichen Zahlenwert
b = 5;
? in verschiedenen Speicherstellen
a = 3;
System.out.println(‚Welchen Wert hat b?‘
+ b);
5
10-16
8
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Bildung von Klassen
? Der Klassenname wird wie eine Typangabe verwendet.
? Objektmethoden werden werden für eine bestimmte Instanz aufgerufen.
? Die Variablen dieser Instanz werden verwendet.
? Die Variablen dieser Instanz können verändert werden.
big.getRadius();
small.move(1,2);
// Liefert den Radius-Wert der Instanz big
// ändert die Koordinaten des Objekts small
? Achtung: Es gibt eine Ausnahme
? Variablen, die als ‚static‘ definiert sind
static int a;
? eine Änderung gilt für alle Instanzen
? spezielle Bezeichnung: Klassenvariable
Instanz 2
a = 2
10-17
a = 3
Instanz 1
a = 4
Instanz 3
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Klassenvariable (static)
? Klassenvariable und Klassenmethoden gehören zur Klasse als Ganzes.
? Sie beziehen sich nicht auf eine spezielle Instanz.
? Klassenvariable und Klassenmethoden werden durch static
gekennzeichnet.
? Eine Klassenmethode kann nicht auf Variable einzelner Instanzen zugreifen.
? Eine Klassenvariable existiert nur einmal pro Klasse, nicht für jede Instanz.
Beispiel:
class Circles
{ ...
Circles (int ix,int iy, double ir)
{ noOfCircles ++; ...}
static int getCounter ();
{ return noOfCircles; }
private static int noOfCircles = 0;
private int x, y; double radius;
}
// Konstruktor
// Klassenmethode
// Klassenvariable
// Instanzvariable
10-18
9
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Begriffe
Programm
besteht aus
Klassen
besteht aus
Elemente
sind
Methoden
Daten
sind
Klassenvariable
sind
sind
Instanzvariable
haben
Konstruktor
Klassenmethoden
sind
haben
Instanzmethoden
ohne mit
Ergebnis
Typ
besteht
aus
besteht aus
Parameter
lokale Variable
Anweisungen
10-19
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Beispielklasse
Class Circles
{
private int x, y;
private double radius;
int getX () { return x;}
// x-pos. d. Mittelp.
int getY () { return y;}
// y-pos. d. Mittelp.
double getRadius () { return radius;}
void move (int dx, int dy){ x += dx; y += dy; }
void grow (double dr){ radius += dr;}
Circles (int ix, int iy, double ir)
{ x = ix; y = iy; radius = ir; }
}
? Schnittstelle (von außen aufrufbare Methoden):
getX, getY, getRadius,move, grow, Konstruktor Circles
? Direkter Zugriff auf Instanzvariable big.radius = 3.14 ist verboten,
denn radius ist als private deklariert.
10-20
10
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Beispiel: Stack
? Ein Stack (Stapel) ist eine Datenstruktur zum Abspeichern von Elementen
nach dem Prinzip „last in first out“ (LIFO)
? Operationen auf dieser Datenstruktur
? push: ablegen von Daten
? pop: wiederholen von Daten
? Beispiel
4
10
12
Stack
push(12);
push(10);
push(4);
a = pop();
System.out.println(a + ‚wurde vom Stack geholt‘);
Ausgabe: 4
10-21
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Beispiel: Stack
class Stack
{
private int Size; // aktuelle Groesse
private int V[]; // der eigentliche Speicher
public Stack (int capacity) // Konstruktor
{ V = new int[capacity];
// Erzeugen eines Arrays zur
// Aufnahme von integer-Daten
Size = 0;
// Size zeigt auf den ersten
}
// freien Platz des Stacks
public void push (int value) // lege ein Element auf den Stack
{
V[Size++] = value;
// speichern und Size erhoehen
}
public int pop ()
// nehme ein Element from Stack
{
Size--;
// Size erniedrigen
return V[Size];
// oberstes Element herausnehmen
}
public int top ()
// lies oberstes Element
{
return V[Size-1];
}
} // unvollständig: Fehlersituationen müssen abgefangen werden
10-22
11
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Vererbung (Inheritance)
? Hierarchische Relation zwischen
Klassen zur:
Oberklasse
(allgemeiner)
? Spezialisierung: Instanzen einer
Unterklasse können wie Instanzen
der Oberklasse behandelt werden
Unterklasse
(spezieller)
? Wiederverwendung: Unterklasse
erbt die Implementierung der
Oberklasse und erweitert diese.
Beispiele
Geometrics
Circles
Java-Schlüsselwörter:
extends
super
abstract
Motor
Rectangles
Diesel
Benzin
Elektro
10-23
Beispiel für Vererbung
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
abstract class Geometrics
{ int getX () { return x; }
int gety () { return y; }
void move (int dx, int dy){ x += dx; y += dy; }
Geometrics (int ix, int iy){ x = ix; y = iy;}
private int x,y;
}
class Circles extends Geometrics
{ double getRadius () { return radius;}
void grow (double dr){ radius += dr;}
Circles(int ix,int iy,double ir)
{super(ix,iy); radius=ir;}
private double radius;
}
class Rectangles extends Geometrics
{ Rectangles(int ix, int iy, double l, double w)
{ super (ix,iy); length =l; width = w;}
private double length, width;
}
10-24
12
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Vererbung
? Die Oberklasse Geometrics ist als abstract gekennzeichnet, d.h. es
gibt keine Instanzen dieser Klasse.
? Circles und Rectangles erben von Geometrics die x- und yKoordinaten und die zugehörigen Methoden.
? Circles und Rectangles definieren weitere, speziellere Methoden und
Instanzvariable.
? super ist der Aufruf des Konstruktors der Oberklasse zur Durchführung
der Initialisierung der Werte, für die die Oberklasse zuständig ist
Ein Rectangles-Objekt
Ein Circles-Objekt
X
X
y
y
radius
length
width
10-25
Polymorphie: Variablentypen
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
? Polymorphie (=Vielgestaltigkeit)
? Instanzen verschiedener Unterklassen können wie eine Instanz der
gemeinsamen Oberklasse behandelt werden, d.h. allgemeinere Methoden
der Oberklasse können auf speziellere Instanzen von Unterklassen
angewendet werden.
Circles
cir = new Circles (1,2,3.0);
Rectangles rec = new Rectangles (3,4,5.0,6.0);
Geometrics geo;
geo = cir;
// Typausweitung: Circles ->Geometrics
geo.move(1,1);
// Aufruf einer allgemeinen Methode
geo = rec;
geo.move(2,3)
rec = (Rectangles)geo; // Einengen des Typs
// Geometrics > Rectangles
rec = geo;
// Übersetzungsfehler !
10-26
13
Polymorphie: Dynamische Methodenbindung
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
? Die Klassenzugehörigkeit der Instanz bestimmt, welche Methode aufgerufen
wird.
abstract class Motor
class Diesel extends Motor
{
{
void on()
{...}
void off() {...}
void glueh()
void on()
void accelerate (...) {...}
{...}
// überschreibt
{ glueh(); super.on();}
...
...
}
}
class Elektro extends Motor...
? In einer Unterklasse können Methoden definiert werden, die mit gleichem
Namen, gleichen Typen von Parametern und Ergebnis auch in der Oberklasse
definiert sind. Sie überschreiben die der Oberklasse. Sie sollen konzeptuell das
gleiche leisten, nur speziell bezogen auf die Unterklasse.
? Ein Aufruf von m.on() führt je nach aktuellem Inhalt von m auf die Motor-,
Diesel- oder Elektromethode.
10-27
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Vererbung: Zusammenfassung
? Die Unterklasse B erbt Methoden und Variable
von der Oberklasse A: Die Methoden und
Variablen von A sind auch für B definiert.
? Eine B-Instanz kann wie eine A-Instanz
behandelt werden:
Oberklasse
class A
A
? zu einer B-Instanz Methoden aufrufen, die in A
definiert sind
? eine Referenz der B-Istanz an eine Variable vom
Typ A zuweisen
? Eine B-Instanz enthält auch Instanzvariable, die
in A definiert sind.
B
Unterklasse
class B extends A
? Eine B-Instanz bleibt immer eine B-Instanz, auch
wenn seine Referenz an Variable eines anderen
Typs zugewiesen wird.
? In den Methodendefinitionen von B können
Methoden von A aufgerufen und Variable von A
benutzt werden, sofern sie nicht private sind
10-28
14
Technische Informatik
für Ingenieure
Wolfram Hardt
Universität Paderborn
Frohes
und
gesegnetes
Weihnachtsfest
10-29
15
Herunterladen