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