Objektorientierung:Javakurs: Unterschied zwischen den Versionen

Aus Info-Theke
Zur Navigation springen Zur Suche springen
Zeile 9: Zeile 9:
* Vererbung
* Vererbung
* Polymorphie
* Polymorphie
* Überladung


In der Programmierung wird dies alles in Klassen realisiert.
In der Programmierung wird dies alles in Klassen realisiert.
Zeile 19: Zeile 20:


Variablen und Methoden haben Namen.
Variablen und Methoden haben Namen.
Grundregel beim Modellieren von Klassen: eine Oberklasse ist immer eine Spezialisierung einer Basisklasse.
Ein Objekt einer Oberklasse kann auch als Basisklasse angesprochen werden, also z.B. ein  PKW ist auch ein Fahrzeug.


=== Kapselung ===
=== Kapselung ===
Zeile 52: Zeile 57:


Vorteil: Bessere Verständlichkeit.
Vorteil: Bessere Verständlichkeit.
=== Überladung ===
Eine Methode einer Basisklasse kann in einer Oberklasse überschrieben werden.
Diese Methode wird auch dann benutzt, wenn ein Objekt der Oberklasse als Basisklasse angesprochen wird.
Beispiel:
* Klasse Luftfahrzeug,
** Methode Luftfahrzeug.fortbewegung() liefert "fliegt"
* Klasse Zeppelin abgeleitet von Luftfahrzeug
** Methode Zeppelin.fortbewegung() liefert "fährt"
* Klasse Helikopter abgeleitet von Luftfahrzeug
** die Klasse hat keine eigene Methode fortbewegung(), sie erbt also die Methode aus Luftfahrzeug und diese liefert "fährt"


== Beispiel einer Klassenhierarchie ==
== Beispiel einer Klassenhierarchie ==
Zeile 90: Zeile 107:


Und das, obwohl der Preis bei Beer, Keksen und Fleisch existiert.
Und das, obwohl der Preis bei Beer, Keksen und Fleisch existiert.
=== Aufgabe ===
Modelliere Klassen für Straßenverkehrsteilnehmer im Sinne der Straßenverkehrsordnung.
Entitäten sind: Fahrzeug, Fahrrad, Kraftrad, Kraftfahrzeug, Fußgänger, PKW, LKW.
Methoden: benutztStrasse(), benutztAutobahn(), zahltSteuer()
Eigenschaften: hubraum, gewicht

Version vom 20. September 2014, 21:13 Uhr


Übersicht

Theorie

Objektorientierung zeichnet durch folgende Eigenschaften aus:

  • Kapselung
  • Vererbung
  • Polymorphie
  • Überladung

In der Programmierung wird dies alles in Klassen realisiert.

Eine Java-Klasse ist ein komplexer Datentyp, der Variablen und Methoden enthält.

Variablen einer Klasse können Objekte mit einfachem Datentyp (int, long, bool, char, float und double) oder mit komplexem Datentyp (Klasse) sein.

Methoden sind benannte Ansammlungen von Anweisungen.

Variablen und Methoden haben Namen.

Grundregel beim Modellieren von Klassen: eine Oberklasse ist immer eine Spezialisierung einer Basisklasse.

Ein Objekt einer Oberklasse kann auch als Basisklasse angesprochen werden, also z.B. ein PKW ist auch ein Fahrzeug.

Kapselung

Kapselung bedeutet, dass Informationen nur dort vorhanden sind, wo sie wirklich gebraucht werden.

Vorteil: Änderungen bleiben lokal begrenzt

Technisch wird das durch Zugriffsrechte geregelt.

Eine Variable/Methode kann folgende Zugriffsrechte haben:

  • public: die Variable/Methode ist außerhalb der Klasse bekannt und darf "von jedem" benutzt werden.
  • protected: Die Variable/Methode ist nur innerhalb der Klasse und in abgeleiteten Klassen bekannt.
  • private: Die Variable/Methode ist nur innerhalb der Klasse bekannt.

Ferner bieten Interfaces (siehe später) eine Möglickeit der Kapselung an.

Vererbung

Eine Klasse kann von einer anderen Klasse (Basisklasse genannt) abgeleitet werden. Das bedeutet, dass alle Variablen/Methoden dieser Basisklasse auch in der Oberklasse vorhanden sind. Allerdings sind private Variablen/Methoden nicht nutzbar.

Der Vorteil: Wiederverwendung von Code. Reduzierung von Komplexität.

Polymorphie

Das bedeutet, dass es mehrere Methoden mit gleichem Namen und verschiedenen Parameterdefinitionen geben kann. Der Compiler findet die passende Methode beim Aufruf selber heraus.

Beispiel: Berechnung eines Teilstrings eines Strings.

  • String substr(String source, int from);
  • String substr(String source, int from, int to);

Wird die Methode mit 2 Parametern aufgerufen, wird der String ab Position from zurückgegeben, bei 3 Parametern der String von from bis to.

Vorteil: Bessere Verständlichkeit.

Überladung

Eine Methode einer Basisklasse kann in einer Oberklasse überschrieben werden. Diese Methode wird auch dann benutzt, wenn ein Objekt der Oberklasse als Basisklasse angesprochen wird.

Beispiel:

  • Klasse Luftfahrzeug,
    • Methode Luftfahrzeug.fortbewegung() liefert "fliegt"
  • Klasse Zeppelin abgeleitet von Luftfahrzeug
    • Methode Zeppelin.fortbewegung() liefert "fährt"
  • Klasse Helikopter abgeleitet von Luftfahrzeug
    • die Klasse hat keine eigene Methode fortbewegung(), sie erbt also die Methode aus Luftfahrzeug und diese liefert "fährt"

Beispiel einer Klassenhierarchie

class Article {
   // Preis in Cent
   protected long price;
   String priceAsString(){
      return String.format("%d.%02d EUR", price / 100, price % 100);
   }
}
class PieceGoods extends Article {
   int number
}
class Fluid extends Article {
  public int amount;
}
class Beer extends Fluid {
}
class Cookie extends PieceGoods {
}
class Meat : extends PieceGoods {
   public int weight;
}

Diskussion

Die Basisklasse Article enthält die gemeinsame Eigenschaft aller Waren, den Preis.

Davon abgeleitet sind die Klassen PieceGoods und Fluid, die eigene Eigenschaften mitbringen.

Die eigentlichen Warenklassen sind Beer, Cookie und Meat.

Aufgrund der Vererbung hat ein die Klasse Beer auch die Eigenschaften/Methoden der Basisklassen. Also hat Beer auch die Eigenschaft Menge (amount aus Fluid) und einen Preis (price aus Article).

Bei der DM/Euro-Umstellung musste nur eine Stelle geändert werden: die Methode priceAsString().

Und das, obwohl der Preis bei Beer, Keksen und Fleisch existiert.

Aufgabe

Modelliere Klassen für Straßenverkehrsteilnehmer im Sinne der Straßenverkehrsordnung.

Entitäten sind: Fahrzeug, Fahrrad, Kraftrad, Kraftfahrzeug, Fußgänger, PKW, LKW.

Methoden: benutztStrasse(), benutztAutobahn(), zahltSteuer()

Eigenschaften: hubraum, gewicht