Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Objektorientierte Programmierung mit Java unter BlueJ

Ähnliche Präsentationen


Präsentation zum Thema: "Objektorientierte Programmierung mit Java unter BlueJ"—  Präsentation transkript:

1 Objektorientierte Programmierung mit Java unter BlueJ
Teil 2 Beziehungen zwischen Klassen/Objekten (Grundlagen): Vererbung Objektinteraktion Christoph Oberweis 2008

2 Agenda Vererbung Klassendiagramme Objekte erzeugen Abstrakte Klassen
Objektinter-aktion Objekte erzeugen Objekte Quellen Vererbung Klassendiagramme Objekte erzeugen Abstrakte Klassen Objektinteraktion Objekte erzeugen Objekte Quellen C.O.

3 Vererbung: Wo sie herkommt
Das Entity-Relationship-Modell als semantisches Datenmodell kennt den is-a (ist-ein) Beziehungstyp: Ein Entitätstyp besitzt alle Attribute eines anderen Entitätstyps und zusätzlich noch andere Attribute. Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Person hat z. B. die Attribute Name, Adresse, bei Mitarbeiter kommt z. B. das Eintritts-Datum in die Firma hinzu, Kunde könnte z. B. eine Angabe hinsichtlich der Bonität haben. C.O.

4 Vererbung: Generalisierung und Spezialisierung
Eine Klasse ist eine Spezialisierung einer anderen Klasse, wenn sie zusätzlich zu den Datenfeldern der anderen Klasse eigene besitzt (z.B. bei PKW: Attribut „Anzahl Türen“). Mit „ist ein“ wird das Verhältnis von Spezialisierung zu Generalisierung beschrieben. Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Fahrrad ist ein Fahrzeug Kraftfahrzeug ist ein Fahrzeug PKW ist ein Kraftfahrzeug Kleinlaster ist ein Kraftfahrzeug  In der OOP wird eine Spezialisierung durch Vererbung realisiert. C.O.

5 Vererbung: UML-Notation
Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Der Pfeil zeigt auf die Oberklasse, von der die Unterklasse „erbt“, d. h. die Oberklasse gibt Eigenschaften an diese weiter. C.O.

6 Beispiel 1 C.O. Vererbung Klassen- diagramme Objekte erzeugen
Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

7 Aufgabe 1 Implementieren Sie bitte die drei Klassen der vorherigen Folie in BlueJ! Nehmen Sie bitte in den Unterklassen folgende Veränderungen vor: Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen public class Werkzeug_einfach extends Artikel public class Werkzeug_elektro extends Artikel Die Konstruktoren der Unterklassen müssen die Datenfelder der Oberklasse mit berücksichtigen: public Werkzeug_einfach(int aNum, String aBez, double nPreis, String dieGroesse, String dieAnwendung) Im Konstruktor der Unterklassen: super(aNum, aBez, nPreis); C.O.

8 Programmtest C.O. Vererbung Klassen- diagramme Objekte erzeugen
Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

9 Datenfelder der Oberklasse
Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

10 Methode – geerbt! C.O. Vererbung Klassen- diagramme Objekte erzeugen
Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

11 Quellcode: Oberklasse
public class Artikel { private int artikelnummer; private String bezeichnung; private double nettopreis; public Artikel(int aNum, String aBez, double nPreis) artikelnummer = aNum; bezeichnung = aBez; nettopreis = nPreis; } public double bruttoAusgeben() return nettopreis * 1.19; Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

12 Quellcode: Subklasse 1 public class Werkzeug_einfach extends Artikel {
private String groesse; private String anwendung; public Werkzeug_einfach(int aNum, String aBez, double nPreis, String dieGroesse, String dieAnwendung) super(aNum, aBez, nPreis); groesse = dieGroesse; anwendung = dieAnwendung; } Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

13 Quellcode: Subklasse 2 public class Werkzeug_elektro extends Artikel { private int leistung; // in Watt private String zusatz; // z. B. Koffer ... public Werkzeug_elektro(int aNum, String aBez, double nPreis, int dieLeistung, String derZusatz) super(aNum, aBez, nPreis); leistung = dieLeistung; zusatz = derZusatz; } Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Aufgabe: Versehen Sie bitte den Quellcode mit Kommentaren! C.O.

14 Schönheitsfehler Von der Oberklasse lässt sich ein Objekt erzeugen, obwohl das in der Regel eher wenig Sinn macht. Ein direkter Zugriff auf die Datenfelder der Oberklasse aus den Subklassen wird verhindert („private“). Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

15 Schönheitsfehler: Reparatur
Von der Oberklasse lässt sich ein Objekt erzeugen, obwohl das in der Regel eher wenig Sinn macht. Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Abhilfe: public abstract class Artikel Verhindert, dass eine Instanz von „Artikel“ erzeugt werden kann! C.O.

16 Schönheitsfehler: Reparatur
Ein direkter Zugriff auf die Datenfelder der Oberklasse aus den Subklassen wird verhindert („private“). Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Lösung: protected int artikelnummer; protected String bezeichnung; protected double nettopreis; Zugriff für Subklassen möglich, Kapselung bleibt erhalten! C.O.

17 Beispiel 2 Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen preisMengegroesser10(): Berechnung des Mengenrabatts beim Kauf von mehr als 10 gleiche Artikel. C.O.

18 Lösung: Oberklasse C.O. public abstract class Artikel {
protected int artikelnummer; protected String bezeichnung; protected double nettopreis; public Artikel(int aNum, String aBez, double nPreis) artikelnummer = aNum; bezeichnung = aBez; nettopreis = nPreis; } public double bruttoAusgeben() return nettopreis * 1.19; Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

19 Lösung: Subklasse 1 C.O. public class Werkzeug_einfach extends Artikel
{ private String groesse; private String anwendung; public Werkzeug_einfach(int aNum, String aBez, double nPreis, String dieGroesse, String dieAnwendung) super(aNum, aBez, nPreis); groesse = dieGroesse; anwendung = dieAnwendung; } public double preisMengegroesser10() return (nettopreis * 0.9); Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

20 Lösung: Subklasse 2 C.O. public class Werkzeug_elektro extends Artikel
{ private int leistung; // in Watt private String zusatz; // z. B. Koffer ... public Werkzeug_elektro(int aNum, String aBez, double nPreis, int dieLeistung, String derZusatz) super(aNum, aBez, nPreis); leistung = dieLeistung; zusatz = derZusatz; } Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

21 Objektinteraktion Neben der Vererbung existiert noch ein weiteres wichtige Konzept hinsichtlich der Beziehungen zwischen Klassen. Häufig ist es sinnvoll (und in der Praxis unumgänglich), ein Problem in Teilprobleme zu zerlegen. Eine Rechnung setzt sich z. B. zusammen aus Rechnungskopf-Daten, Positionszeilen (gekaufte Artikel) und dem Rechnungsfuß. Das Objekt Rechnung könnte also in diese drei „Bereiche“ zerlegt werden (Modularisierung). Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

22 Ein Beispiel Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Die Positionszeile mit den Artikeln muss jetzt „irgendwie“ zum Rechnungs-kopf in Beziehung gesetzt werden. Beachte: Das Konzept der Vererbung löst das Problem nicht! C.O.

23 Nutzer - Beziehung Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Grundgedanke: Das Objekt „Rechnung“ erzeugt (automatisch) „Hilfsobjekte“, welche bestimmte Aufgaben übernehmen, z. B. Berechnung des Brutto-Betrags. Das Objekt „Rechnung“ benutzt dann also das Objekt „Gesamtbetrag_rechnen“. C.O.

24 Abzüglich 3% Rabatt : 3,60 Euro Nettobetrag : 116,40 Euro
Der Rechnungsfuß Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Summe : ,00 Euro Abzüglich 3% Rabatt : ,60 Euro Nettobetrag : ,40 Euro MwSt. (19)% : ,12 Euro zu zahlender Rechnungsbetrag : 138,52 Euro C.O.

25 Analyse Summe : 120,00 Euro Abzüglich 3% Rabatt : 3,60 Euro
Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Summe : ,00 Euro Abzüglich 3% Rabatt : ,60 Euro Nettobetrag : ,40 Euro MwSt. (19)% : ,12 Euro zu zahlender Rechnungsbetrag : 138,52 Euro Teilaufgaben, diese können ausgegliedert und getrennt erstellt werden: Modularisierung C.O.

26 Teilaufgaben sind Objekte
Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Summe : ,00 Euro Abzüglich 3% Rabatt : ,60 Euro Nettobetrag : ,40 Euro MwSt. (19)% : ,12 Euro zu zahlender Rechnungsbetrag : 138,52 Euro Lösung der Teilaufgaben durch Objekte, die sich allerdings sehr ähnlich sind C.O.

27 Eine Klasse – mehrere Objekte
Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Summe : ,00 Euro Abzüglich 3% Rabatt : ,60 Euro Nettobetrag : ,40 Euro MwSt. (19)% : ,12 Euro zu zahlender Rechnungsbetrag : 138,52 Euro Lösung der Teilaufgaben durch Objekte, die sich allerdings sehr ähnlich sind C.O.

28 Lösung: „Die Klasse zum Rechnen“
public class Betrag_berechnen { private int proz; public Betrag_berechnen(int prozent) proz = prozent; } public double rech_und_gibBetrag(double betrag) return ((betrag * proz) / 100) + betrag; Mwst oder Rabatt Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

29 Ein Objekt erzeugt Objekte:
public class Rechnung { private Betrag_berechnen rab; private Betrag_berechnen mwst; private double nettorab; private double endBetrag; public Rechnung() rab = new Betrag_berechnen (-3); mwst = new Betrag_berechnen (19); } public void rechne_und_aktualisiere(double nettoPreis) nettorab = rab.rech_und_gibBetrag(nettoPreis); endBetrag = mwst.rech_und_gibBetrag(nettorab); Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen C.O.

30 Und wie funktioniert es?
private Betrag_berechnen rab; private Betrag_berechnen mwst; rab = new Betrag_berechnen (-3); mwst = new Betrag_berechnen (19); nettorab = rab.rech_und_gibBetrag(nettoPreis); endBetrag = mwst.rech_und_gibBetrag(nettorab); Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Erklären Sie bitte die oben stehenden vier Code-Zeilen! Versehen Sie bitte den Quellcode mit Kommentaren! Hilfe: Quellenangabe am Ende dieser Präsentation C.O.

31 Objektinteraktion in Aktion!
1. Rechnung „benutzt“ Betrag_berechnen (in BlueJ dargestellt als gestrichelter Pfeil) Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen 2. Test 3. Es funktioniert! C.O.

32 Quellen Balzert, Helmut: Lehrbuch Grundlagen der Informatik.- Spektrum
Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter-aktion Objekte erzeugen Objekte Quellen Balzert, Helmut: Lehrbuch Grundlagen der Informatik.- Spektrum Verlag Barnes, D. u. Kölling, M.: Java lernen mit BlueJ.- Pearson-Verlag Das BlueJ Tutorial C.O.


Herunterladen ppt "Objektorientierte Programmierung mit Java unter BlueJ"

Ähnliche Präsentationen


Google-Anzeigen