Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Objektorientierte Programmierung mit Java unter BlueJ Beziehungen zwischen Klassen/Objekten (Grundlagen): Vererbung Objektinteraktion Christoph Oberweis.

Ähnliche Präsentationen


Präsentation zum Thema: "Objektorientierte Programmierung mit Java unter BlueJ Beziehungen zwischen Klassen/Objekten (Grundlagen): Vererbung Objektinteraktion Christoph Oberweis."—  Präsentation transkript:

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

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

3 3 Vererbung: Wo sie herkommt C.O. 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. 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. Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

4 4 C.O. 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. 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. Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

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

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

7 7 Aufgabe 1 C.O. 1.Implementieren Sie bitte die drei Klassen der vorherigen Folie in BlueJ! 2.Nehmen Sie bitte in den Unterklassen folgende Veränderungen vor: public class Werkzeug_einfach extends Artikel public class Werkzeug_elektro extends Artikel 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); 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); Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

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

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

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

11 11 Quellcode: Oberklasse C.O. 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; } 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 Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

12 12 Quellcode: 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 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 Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

13 13 Quellcode: 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; } 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; } Aufgabe: Versehen Sie bitte den Quellcode mit Kommentaren! Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

14 14 Schönheitsfehler C.O. 1.Von der Oberklasse lässt sich ein Objekt erzeugen, obwohl das in der Regel eher wenig Sinn macht. 2.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 Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

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

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

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

18 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; } 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 Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

19 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); } 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 Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

20 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; } 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 Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

21 21 Objektinteraktion C.O. 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 Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

22 22 Ein Beispiel C.O. 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! Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

23 23 Nutzer - Beziehung C.O. Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen 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.

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

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

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

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

28 28 Lösung: Die Klasse zum Rechnen C.O. 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; } 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 Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

29 29 Ein Objekt erzeugt Objekte: C.O. 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); } 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 Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

30 30 Und wie funktioniert es? C.O. 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); 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); Erklären Sie bitte die oben stehenden vier Code- Zeilen! Versehen Sie bitte den Quellcode mit Kommentaren! Hilfe: Quellenangabe am Ende dieser Präsentation Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen Vererbung Klassen- diagramme Objekte erzeugen Abstrakte Klassen Objektinter- aktion Objekte erzeugen Objekte Quellen

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

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


Herunterladen ppt "Objektorientierte Programmierung mit Java unter BlueJ Beziehungen zwischen Klassen/Objekten (Grundlagen): Vererbung Objektinteraktion Christoph Oberweis."

Ähnliche Präsentationen


Google-Anzeigen