# OOP einer Vermietung



## Korhil (22. Okt 2010)

Hallo alle zusammen,

auch wenn das keine Hausaufgabe ist, denke ich, das es hier am besten aufgehoben ist.

Ich programmiere seit Jahren in diversen Sprachen und wollte jetzt mit Java und OOP anfangen. Bis jetzt hab ich mich vor der objekt-orientierten Programmierung immer ein wenig gedrückt, weil ich wohl damit auf Kriegsfuss stehe 

Um das Ganze jetzt mal anzugehen, habe ich mir folgende Aufgabe ausgedacht:

Es soll eine Vermietung auf Konsolenebene (zum Einstieg) programmiert werden, die diverse Sachen vermieten kann.

Könnt ihr vielleicht mal einen Blick auf meine Klassen werfen, ob das Sinn macht:

Objekt
- Fahrzeug
-  - Motorisiertes Fahrzeug
-  -  - PKW
-  -  - LKW
-  - Unmotorisiertes Fahrzeug
-  -  - Fahrrad
- Immobilie
-  - Haus
-  - Wohnung

(Erklärung: Objket ist die Oberklasse von Fahrzeug und Immobilie; Motorisiertes und Unmotorisiertes Fahrzeug sind Von Fahrzeug abgeleitet; ...)

Alternative 1:
Die tatsächlich verwendeten Klassen (PKW, LKW, Fahrrad, Haus und Wohnung) bekommen über ein Interface Mietobjekt gesagt, welche für das vermieten relevanten Variablen und Methoden benötigt werden [Ausleihen(), ZurückGeben(), ...].
Vorteil: Klassen sind auch für andere Probleme nutzbar.

Alternative 2:
In der Klasse Objekt werden die zur Vermietung benötigten Variablen und Methoden schon eingefügt.
Vorteil: Weniger Schreibarbeit, weil der Code nur einmal eingegeben werden muss.

Ist mein Ansatz richtig oder gibt es eine ultimative Alternative 3 ? 

Vielen dank für eure Hilfe, 
Korhil


----------



## XHelp (22. Okt 2010)

Um so eine Baumhierarchie darzustellen, bist du vermutlich beim Vererben (Alternative 2) besser aufgehoben.
Und andere Alternativen gibt es immer  Mir wurde ständig der Decorator Pattern ans Herz gelegt.


----------



## Tomate_Salat (22. Okt 2010)

Ich würde vllt Objekt anderster nennen, weil Objekt bereits existent ist. Jede JavaKlasse die du erstellst, ist vom Typ Objekt ;-)


----------



## XHelp (22. Okt 2010)

Tomate_Salat hat gesagt.:


> Ich würde vllt Objekt anderster nennen, weil Objekt bereits existent ist. Jede JavaKlasse die du erstellst, ist vom Typ Objekt ;-)



Also genaugenommen sind die vom Typ Obje*c*t


----------



## maki (22. Okt 2010)

> Es soll eine Vermietung auf Konsolenebene (zum Einstieg) programmiert werden, die diverse Sachen vermieten kann.
> 
> Könnt ihr vielleicht mal einen Blick auf meine Klassen werfen, ob das Sinn macht:


Solltest IMHO darauf achten nützliche Abstraktionen zu erstellen.
D.h., dass du nicht anfängst die reale Welt stur nachzumodellieren, sondern dir überlegst welche Abstraktionen du wirklich brauchst.
Wenn zB. LKWs, Auto, Fährräder, Häuser etc. pp. immer gleich behandelt werden, brauchst du dafür keine eignen Klassen, das macht nur Sinn wenn sie unterschiedlich behandelt werden müssen.
Wenn du vorhast sowieso alles über ein einziges Interface Mietobjekt zu händeln in dem wohl noch die beiden Methoden immer gleich implementiert werden, dann brauchst du all diese Abstraktionen nicht.

Klassisches Beispiel: Eine Vererbungshierarchie für Geometrische Formen.
Es macht normalerweise nie Sinn, eine Klasse "Rechteck" zu haben und zusätzlich eine Klasse "Quadrat", meist reicht es der Rechteck Klasse eine zus. Methode "public boolean isSquare()" zu spendieren.

Hüte dich vor allem vor dem Denkfehler "Wenn ich das jetzt richtig komplex mache & aufblase, könnte ich später vielleicht Vorteile haben...", mach genau das was du brauchst, nicht was du brauchen könntest.


----------



## Tomate_Salat (22. Okt 2010)

XHelp hat gesagt.:


> Also genaugenommen sind die vom Typ Obje*c*t



*c*lugscheißer  (lies meine Signatur  ... hmm man bräuchte ne Variable für den aktuellen Tag in der Signatur )


----------



## Korhil (25. Okt 2010)

Vielen Dank schon einmal für eure hilfreichen Kommentare 

Leider war das WE mal wieder total überladen (geht nicht nur in der OOP), so dass ich erst heute mich wieder mit Java beschäftigen konnte 



Tomate_Salat hat gesagt.:


> Ich würde vllt Objekt anderster nennen, weil Objekt bereits existent ist. Jede JavaKlasse die du erstellst, ist vom Typ Objekt ;-)



Die Problematik hatte ich mir auch schon überlegt, da ich hier aber erst mal meinen Gedankengang kurz erläutern wollte und mir nichts besseres auf die schnelle eingefallen war, hatte ich es dabei belassen.

@maki
Die ganze Aufgabe ist nur an den Haaren herbei gezogen, damit ich endlich mal den Einstieg in die OOP schaffe. Aus diesem Grund wollte ich das Modell nicht zu einfach machen. Und wenn ich jetzt überlege, brauche ich beim Vermieten von LKWs und PKWs schon unterschiedliche Anforderungen an den Kunden (Führerschein, Sicherheit, Tacho-Scheibe) und werde unterschiedliche Tarife anbieten.
Aber du hast natürlich recht, das man mit Verstand und einem vernünftigen Maß programmieren sollte, und da ich das im Bereich OOP noch lernen will/muss, bin ich über jede Kritik und jeden Denkanstoß sehr dankbar.

Ich hoffe neben der Renovierung meines Büros endlich die Zeit zu finden, das Programm zu schreiben und werde es dann hier einstellen.


----------

