FH D Fachhochschule Düsseldorf University of Applied Sciences Informatik 2 Objektorientierte Programmierung in Java Prof. Dr.- Ing. André Stuhlsatz FH D Wiederholung: abstract Fachhochschule Düsseldorf University of Applied Sciences Der Modifikator abstract kann bei Methoden und Klassen verwendet werden. abstract kennzeichnet, dass eine Klasse oder Methode noch nicht vollständig implementiert ist (Prototyp). Ist eine Methode als abstract deklariert, dann muss auch die Klasse abstrakt sein. Abstrakte Klassen können nicht instanziert werden! Von einer abstrakten Klassen kann abgeleitet werden, dann muss die Subklasse alle abstrakten Methoden implementieren. Neben abstrakten Methoden können auch Attribute und implementierte Methoden existieren. abstract class KlasseAbstract{ private String a; public KlasseAbstract(String a) { this.a = a; } public abstract void setzeNeu(String neu); } Informatik 2 2 FH D Beipiel: Abstrakte Klasse Fachhochschule Düsseldorf University of Applied Sciences Grafisches Objekt Rechteck Linie Bézierkurve Kreis Grafische Objekte haben vieles gemeinsam: Zustände: Position, Orientierung und Farbe Verhalten: rotieren, bewegen, Größe ändern, zeichnen Trotzdem implementieren grafischen Objekte ihr Verhalten zum Teil unterschiedlich. Informatik 2 3 FH D Fachhochschule Düsseldorf University of Applied Sciences Beipiel: Abstrakte Klasse abstract class GrafischesObjekt{ protected int posX, posY; … protected bewegen(int neuX, int neuY){ … } abstract protected void zeichne(); abstract protected voide ändereGröße(); } Subklassen müssen abstrakte Methoden implementieren! final class Kreis extends GrafischesObjekt{ public void zeichne(){ … } public void ändereGröße(){ … } } Informatik 2 4 FH D Fachhochschule Düsseldorf University of Applied Sciences Coding Rule: Reihenfolge von Klassenelementen Eine allgemein geläufige Reihenfolge der Elemente einer Klassendefinition ist folgende: 1. 2. 3. 4. 5. 6. Klassenattribute Instanzattribute Konstruktoren Statische Methoden Getter/Setter Beliebige Methoden Innerhalb der einzelnen Blöcke wird in der Regel nach einschränkender Sichtbarkeit sortiert. Informatik 2 5 FH D Fachhochschule Düsseldorf University of Applied Sciences Klassenhierarchie (Java API) java.lang.Object java.awt.Component java.awt.Button java.awt.Checkbox java.awt.TextComponent java.awt.TextArea Informatik 2 java.awt.TextField 6 FH D Anwendung Walzwerk Fachhochschule Düsseldorf University of Applied Sciences Walzwerk (Prozesskette für den Werkstoff Stahl) Objekte einer Walzstraße Walzen Walzensatz Informatik 2 Gerüst Walzstraße 7 FH D Klasse Walzwerk (Java Anwendung) Fachhochschule Düsseldorf University of Applied Sciences package walzwerk; public class Walzwerk { public static void main(String[] args) { // Implementierung der Funktionalität eines Walzwerkes } } Alle Klassen die Objekte eines Walzwerkes definieren, liegen im package walzwerk. Die Klasse Walzwerk ist unsere Anwendungsklasse mit main-Methode. Informatik 2 8 FH D Fachhochschule Düsseldorf University of Applied Sciences Klasse Walzstrasse package walzwerk; Die Walzstraße ist ein Teil eines Walzwerkes. public class Walzstrasse { private Gerüst[] gerüste; Eine Walzstraße besteht aus Walzgerüsten. public Walzstrasse(int anzahl) {…} public Walzstrasse(Gerüst[] gerüste) {…} Überladener Konstruktor. public void baueGerüst(int position, Gerüst gerüst) {…} public void entferneGerüst(int position, Gerüst gerüst) {…} public void zeigeGerüste() {…} Methoden der Walzstraße. } Informatik 2 9 FH D Gerüste Fachhochschule Düsseldorf University of Applied Sciences Duo-Gerüst Quarto-Gerüst Informatik 2 Sexto-Gerüst 10 FH D Vererbungshierarchie Fachhochschule Düsseldorf University of Applied Sciences Ein Duo, Quarto oder Sexto „ist ein“ Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung die Eigenschaften und Methoden von der Klasse Gerüst erben. Zusätzlich können eigene Eigenschaften und Methoden definiert werden. abstract class Gerüst (Basisklasse/Superklasse) class Duo class Quarto class Sexto Klassendiagramm: Der Pfeil zeigt auf die Basisklasse (auch Superklasse genannt) Informatik 2 11 FH D Fachhochschule Düsseldorf University of Applied Sciences Abstrakte Klasse Gerüst (Prototyp) package gerüst; public abstract class Gerüst { protected double reibung;// Kundengeheimnis protected double temperatur;// Kundengeheimnis protected double drehmoment;// Kundengeheimnis private int wartungsintervall;//in Monaten private Walze[] walzensatz; double banddicke, double bandbreite // Getter und Setter … protected Gerüst(int wartungInMonaten) {…}// nur Package oder Subklasse! public void setzeUmlaufgeschwindigkeit(double umlaufgeschwindigkeit){…} public abstract double simulationWalzkraft(double banddicke, double bandbreite); public void zeigeWalzensatz() {…} } Informatik 2 12 FH D Klasse Duo Fachhochschule Düsseldorf University of Applied Sciences package gerüst; public class Duo extends Gerüst { public Duo(int wartungInMonaten, double arbeitswalzen_durchmesser) {…} // Getter und Setter … @Override public double simulationWalzkraft(double banddicke, double bandbreite) { // Implementierung einer Simulation abhängig von banddicke, bandbreite // und errechnetem Bandzug unter zur Hilfenahme von // Reibung, Temperatur, Drehmoment und Umlaufgeschwindigkeit. return 0.0; } } Informatik 2 13 FH D Fachhochschule Düsseldorf University of Applied Sciences Klasse Quarto package gerüst; public class Quarto extends Gerüst{ public Quarto(int wartungInMonaten, double arbeitswalzen_durchmesser, double stützwalzen_durchmesser) {…} // Getter und Setter @Override public double simulationWalzkraft(double banddicke, double bandbreite) { // Implementierung einer Simulation abhängig von banddicke, bandbreite // und errechnetem Bandzug unter zur Hilfenahme von // Reibung, Temperatur, Drehmoment und Umlaufgeschwindigkeit. return 0.0; } Informatik 2 14 FH D Fachhochschule Düsseldorf University of Applied Sciences Klassse Walze package gerüst; public class Walze { private double durchmesser;// mm private double umlaufgeschwindigkeit;// U/min private double bandgeschwindigkeit;// m/s private String hersteller; private String id; public Walze(String, String, double, double){…} public Walze(String, double, double){…} // Getter und Setter public void zeigeInfo(){…} private double berechneBandgeschwindigkeit(){…} } Informatik 2 15 FH D Fachhochschule Düsseldorf University of Applied Sciences Klasse Sexto Übung für Zuhause… Informatik 2 16