Learning By Doing
Objektorientiertes Konstruieren
• Der Bauplan für ein Objekt ist die Klassendeklaration
• Ein Objekt besitzt Eigenschaften und Verhalten (Fähigkeiten)
• In der Regel gibt es zu einer Klasse mehrere Objekte,
Instanzen genannt.
In Java werden die Eigenschaften durch Instanzvariablen, das Verhalten
durch Methoden (Funktionen) beschrieben.
Learning By Doing
Klassendeklaration (Gerüst)
// Bankkonto.java
Dateiname
class Bankkonto
{
double kapital;
double zinssatz;
int anlagejahre = 0;
Klassenname
Bankkonto(double kap, double zs)
// Konstruktor
{
}
Konstruktor
double kontostand()
// Gibt aktuellen Kontostand zurück
{
}
Methode (Akzessor)
int laufzeit()
// Gibt die Anlagezeit in Jahren zurück
{
}
Methode (Akzessor)
void jahresabrechnung()
// Führt die Jahresabrechung durch
// Setzt neues Kapital, neue Laufzeit
{
}
}
Instanzvariablen
Methode
Learning By Doing
Applikationsklasse
// WbzEx1.java
Dateiname
import static ch.aplu.util.Console.*;
Import
class WbzEx1
{
public static void main(String[] args)
{
Bankkonto konto = new Bankkonto(200, 2.5);
Klassenname
main
Instanzierung
while (konto.kontostand() < 400)
konto.jahresabrechnung();
println("Laufzeit mindestens "
+ konto.laufzeit() + " Jahre");
}
}
J2SE V1.4:
statt import static nur import
dafür statt println() überall Console.println()
Ausschreiben
Learning By Doing
Ausschreiben mit printf() (nur J2SE V5)
// WbzEx1a.java
import static ch.aplu.util.Console.*;
class WbzEx1a
{
public static void main(String[] args)
{
Bankkonto konto = new Bankkonto(200, 2.5);
while (konto.kontostand() < 400)
konto.jahresabrechnung();
printf("Laufzeit mindestens %d Jahre", konto.laufzeit());
}
}
Formatierungsstring
Dokumentation: siehe Klasse Formatter
(J2SE V5)
Learning By Doing
Einlesen auf Console
// WbzEx1b.java
import static ch.aplu.util.Console.*;
class WbzEx1b
{
public static void main(String[] args)
{
println("Anfangseinlage: ");
double anfangseinlage = readDouble();
Bankkonto konto = new Bankkonto(anfangseinlage, 2.5);
Double lesen
while (konto.kontostand() < 2*anfangseinlage)
konto.jahresabrechnung();
println("Laufzeit mindestens " + konto.laufzeit() + " Jahre");
println("Irgendeine Taste...");
readChar();
System.exit(0);
}
}
Auf Taste warten
Programm
beenden
Dokumentation: siehe Klasse ch.aplu.util.Console
J2SE V1.4:
statt import static nur import
Alle Methoden f() von Console mit Console.f() aufrufen
Learning By Doing
Standardform für Applikationen
// WbzEx1c.java
import static ch.aplu.util.Console.*;
class WbzEx1c
{
WbzEx1c()
{
println("Anfangseinlage: ");
double anfangseinlage = readDouble();
Bankkonto konto = new Bankkonto(anfangseinlage, 2.5);
berechnen(konto, anfangseinlage);
println("Laufzeit mindestens " + konto.laufzeit() + " Jahre");
println("Irgendeine Taste...");
readChar();
System.exit(0);
}
Konstruktor
void berechnen(Bankkonto konto, double anfangseinlage)
{
while (konto.kontostand() < 2*anfangseinlage)
konto.jahresabrechnung();
}
public static void main(String[] args)
{
new WbzEx1c();
}
}
J2SE V1.4:
Instanz der
Applikationsklasse
statt import static nur import
Alle Methoden f() von Console mit Console.f() aufrufen
Learning By Doing
Bemerkungen/Zusammenfassung
• Prozedurale Programmierung ist Teil der OOP (Klasse in Methoden aufteilen)
• Im main() eine Instanz der Applikationsklasse erzeugen, Konstruktor verwenden
• Initialisierung von Instanzvariablen:
- implizite auf 0 (false, null)
- explizite bei der Deklaration oder im Konstruktor
• Akzessoren (getter-Methoden): lesender Zugriff
• Mutatoren (setter-Methoden): schreibender Zugriff
• Parameterübergabe an Methoden: nur Call-by-value
• Statt print(), println() eher printf() einsetzen
• Statt System.out.print() eher ch.aplu.util.Console einsetzen
Learning By Doing
Aufgaben zum objektorientierten Konstruieren
Aufgabe 1:
Deklarieren Sie in einer Applikationsklasse eine Methode quadrat, die ein einziges
Quadrat erzeugt. Verwenden Sie diese Methode, um folgende Figur zu zeichnen:
Learning By Doing
Aufgaben zum objektorientierten Konstruieren
Aufgabe 2:
a) Deklarieren Sie ein Klasse Blume, die eine Blume mit Stiel in vorgebbarer
Richtung zeichnet. Testen Sie sie mit einer main-Methode aus.
b) Deklarieren Sie eine Applikationsklasse, die damit einen Blumenstrauss zeichnet.
Aufgabe 2a
Aufgabe 2b

oop