Objektorientierung:Javakurs: Unterschied zwischen den Versionen

Aus Info-Theke
Zur Navigation springen Zur Suche springen
 
(9 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
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 16: Zeile 17:
Variablen einer Klasse können Objekte mit einfachem Datentyp (int, long, bool, char, float und double) oder mit komplexem Datentyp (Klasse) sein.
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.
Methoden sind benannte Ansammlungen von Anweisungen. Näheres im nächsten Kapitel.


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 25: Zeile 30:
Vorteil: Änderungen bleiben lokal begrenzt
Vorteil: Änderungen bleiben lokal begrenzt


Technisch wird das durch Zugriffsrechte geregelt.
Indem zusammengehörige Eigenschaften und Aktionen zu einer Klasse gebündelt werden, ist die erste Stufe der Kapselung erreicht.
Die zweiter Stufe sind Zugriffsrechte, die die Sichtbarkeit von Variablen/Methoden außerhalb der Klasse regeln:


Eine Variable/Methode kann folgende Zugriffsrechte haben:
Es gibt folgende Zugriffsrechte:
* public: die Variable/Methode ist außerhalb der Klasse bekannt und darf "von jedem" benutzt werden.
* 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.
* protected: Die Variable/Methode ist nur innerhalb der Klasse und in abgeleiteten Klassen bekannt.
Zeile 52: Zeile 58:


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 "fliegt"


== Beispiel einer Klassenhierarchie ==
== Beispiel einer Klassenhierarchie ==
<pre>
<pre>
class Article {
class Article {
    private int id;
   // Preis in Cent
   // Preis in Cent
   protected long price;
   protected long price;
Zeile 85: Zeile 104:


Aufgrund der Vererbung hat ein die Klasse Beer auch die Eigenschaften/Methoden der Basisklassen.
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 (amount aus Article).
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().
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.
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: Verkehrsteilnehmer, Fahrzeug, Fahrrad, Kraftrad, Kraftfahrzeug, Fußgänger, PKW, LKW.
Methoden: benutztStrasse(), benutztAutobahn(), zahltSteuer(), hoechstGeschwindigkeit()
Eigenschaften: hubraum, gewicht
=== Aufgabe 2 ===
* Ordne die Entitäten in Klassenhierarchien. Ergänze fehlende Hierarchien:
** Staubsauger, Zange, Hammer, Handmixer, Steinkeil, Keule, Presslufthammer, Küchenwerkzeuge
* Finde Eigenschaften für die Entitäten

Aktuelle Version vom 7. Oktober 2014, 21:34 Uhr


Übersicht

Theorie[Bearbeiten]

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. Näheres im nächsten Kapitel.

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[Bearbeiten]

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

Vorteil: Änderungen bleiben lokal begrenzt

Indem zusammengehörige Eigenschaften und Aktionen zu einer Klasse gebündelt werden, ist die erste Stufe der Kapselung erreicht. Die zweiter Stufe sind Zugriffsrechte, die die Sichtbarkeit von Variablen/Methoden außerhalb der Klasse regeln:

Es gibt folgende Zugriffsrechte:

  • 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[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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 "fliegt"

Beispiel einer Klassenhierarchie[Bearbeiten]

class Article {
    private int id;
   // 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[Bearbeiten]

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[Bearbeiten]

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

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

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

Eigenschaften: hubraum, gewicht

Aufgabe 2[Bearbeiten]

  • Ordne die Entitäten in Klassenhierarchien. Ergänze fehlende Hierarchien:
    • Staubsauger, Zange, Hammer, Handmixer, Steinkeil, Keule, Presslufthammer, Küchenwerkzeuge
  • Finde Eigenschaften für die Entitäten