Objektorientierte Programmierung mit Java unter BlueJ Beziehungen zwischen Klassen/Objekten...

Click here to load reader

  • date post

    05-Apr-2015
  • Category

    Documents

  • view

    109
  • download

    0

Embed Size (px)

Transcript of Objektorientierte Programmierung mit Java unter BlueJ Beziehungen zwischen Klassen/Objekten...

  • Folie 1
  • Objektorientierte Programmierung mit Java unter BlueJ Beziehungen zwischen Klassen/Objekten (Grundlagen): Vererbung Objektinteraktion Christoph Oberweis 2008 Teil 2
  • Folie 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
  • Folie 3
  • 3 Vererbung: Wo sie herkommt C.O. Das Entity-Relationship-Modell als semantisches Datenmodell kennt den is-a (ist-ein) Beziehungstyp: Ein Entittstyp besitzt alle Attribute eines anderen Entittstyps und zustzlich noch andere Attribute. Person hat z. B. die Attribute Name, Adresse, bei Mitarbeiter kommt z. B. das Eintritts-Datum in die Firma hinzu, Kunde knnte z. B. eine Angabe hinsichtlich der Bonitt 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
  • Folie 4
  • 4 C.O. Vererbung: Generalisierung und Spezialisierung Eine Klasse ist eine Spezialisierung einer anderen Klasse, wenn sie zustzlich zu den Datenfeldern der anderen Klasse eigene besitzt (z.B. bei PKW: Attribut Anzahl Tren). Mit ist ein wird das Verhltnis 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
  • Folie 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
  • Folie 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
  • Folie 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 Vernderungen 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 mssen die Datenfelder der Oberklasse mit bercksichtigen: 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 mssen die Datenfelder der Oberklasse mit bercksichtigen: 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
  • Folie 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
  • Folie 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
  • Folie 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
  • Folie 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
  • Folie 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
  • Folie 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
  • Folie 14
  • 14 Schnheitsfehler C.O. 1.Von der Oberklasse lsst 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
  • Folie 15
  • 15 Schnheitsfehler: Reparatur C.O. Von der Oberklasse lsst 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
  • Folie 16
  • 16 Schnheitsfehler: Reparatur C.O. Ein direkter Zugriff auf die Datenfelder der Oberklasse aus den Subklassen wird verhindert (private). Lsung: protected int artikelnummer; protected String bezeichnung; protected double nettopreis; Zugriff fr Subklassen mglich, 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
  • Folie 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
  • Folie 18
  • 18 Lsung: 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; pu