Objektorientiertes Konstruieren 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.
Klassendeklaration (Gerüst) Learning By Doing Klassendeklaration (Gerüst) Dateiname Instanzvariablen Konstruktor Methode (Akzessor) Methode Klassenname // Bankkonto.java class Bankkonto { double kapital; double zinssatz; int anlagejahre = 0; Bankkonto(double kap, double zs) // Konstruktor } double kontostand() // Gibt aktuellen Kontostand zurück int laufzeit() // Gibt die Anlagezeit in Jahren zurück void jahresabrechnung() // Führt die Jahresabrechung durch // Setzt neues Kapital, neue Laufzeit
Applikationsklasse Learning By Doing Applikationsklasse Dateiname Import Klassenname main Instanzierung Ausschreiben // WbzEx1.java import static ch.aplu.util.Console.*; class WbzEx1 { public static void main(String[] args) Bankkonto konto = new Bankkonto(200, 2.5); 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 mit printf() (nur J2SE V5) 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)
Console 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); while (konto.kontostand() < 2*anfangseinlage) konto.jahresabrechnung(); println("Laufzeit mindestens " + konto.laufzeit() + " Jahre"); println("Irgendeine Taste..."); readChar(); System.exit(0); } Double lesen 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
Standardform für Applikationen 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); } void berechnen(Bankkonto konto, double anfangseinlage) while (konto.kontostand() < 2*anfangseinlage) konto.jahresabrechnung(); public static void main(String[] args) new WbzEx1c(); Konstruktor Instanz der Applikationsklasse J2SE V1.4: statt import static nur import Alle Methoden f() von Console mit Console.f() aufrufen
Bemerkungen/Zusammenfassung 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
Aufgaben zum objektorientierten Konstruieren 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:
Aufgaben zum objektorientierten Konstruieren 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