Objektorientierung:Javakurs: Unterschied zwischen den Versionen

Aus Info-Theke
Zur Navigation springen Zur Suche springen
Zeile 58: Zeile 58:
   // Preis in Cent
   // Preis in Cent
   protected long price;
   protected long price;
   String asEuro(){
   String priceAsString(){
       return String.format("%d.%02d", price / 100, price % 100);
       return String.format("%d.%02d EUR", price / 100, price % 100);
   }
   }
}
}
class PieceGoods : extends Article {
class PieceGoods extends Article {
   int number
   int number
}
}
class Fluid : extends Article {
class Fluid extends Article {
   public int amount;
   public int amount;
}
}
class Beer : extends Fluid {
class Beer extends Fluid {
}
}
class Cookie : extends PieceGoods {
class Cookie extends PieceGoods {
}
}
class Meat : extends PieceGoods {
class Meat : extends PieceGoods {
Zeile 76: Zeile 76:
}
}
</pre>
</pre>
=== 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 (amount 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.

Version vom 20. September 2014, 20:51 Uhr


Übersicht

Theorie

Objektorientierung zeichnet durch folgende Eigenschaften aus:

  • Kapselung
  • Vererbung
  • Polymorphie

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.

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.

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 (amount 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.