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