# Organisation von Klassen



## MiMa (31. Dez 2012)

Hallo,

seit einiger Zeit sitze ich da und überlege mir, wie man am besten Klassen im Projekt organisiert.
Man kann das ja machen, wie mal möchte, aber den Überblick nicht verlieren.

Einfach gesagt, ist aber nicht ganz einfach um zu setzen.

In meinem Beispiel möchte ich Dateien mit ISBN Nummern organisieren und habe es wie folgt aufgebaut.

Abstrakte Klasse für "Datei"
Instanzvariablen die nur auf Dateien zutreffen, wie Dateiname, Änderungsdatum usw.
Methoden wie, Dateinamen holen, Änderungsdatum holen, usw. (Get und Set Methoden)

Eine weitere Klasse habe ich erzeugt, die ich "Buch" genannt habe und dort sind alle
Instanzvariablen die auf Bücher zutreffen wie ISBN, Verlag, .... und erben von der klasse "Datei".
Methoden, getISBN, setISBN, .....

So jetzt kommt es.
Für die Variable ISBN habe ich mehrere Methoden für das manipulieren der ISBN Nummer geschrieben, wie ISBN Prüfen, Verlag finden, Sprache, .....

Ich habe dafür eine weitere Klasse gemacht, die ich "ISBNoperationen" genannt habe und die erbt von "Buch".

Die Frage ist nur, wären die Methoden besser in der Klasse "Buch aufgehoben" oder war es korrekt eine eigene Klasse dafür zu machen.

Wenn ich einerseits alles in die Buch Klasse schreibe, habe ich nachher eine Unmenge von Methoden drin, da ich ja auch nicht nur Manipulationen von ISBN vornehmen wollte.

Ich würde gerne wissen, wie man das richtig Organisiert, so das man nachher auch noch die Übersicht nicht verliert.

Danke

Mi


----------



## Marcinek (31. Dez 2012)

Die Methoden sind auf keinen Fall in einer Klasse "ISBNOperations" zu implementieren. Klassen beschreiben Dinge und tuen nix.

Ich würde die Methoden in einer klasse ISBN oder so implementieren.


----------



## MiMa (31. Dez 2012)

Ich hatte die Klasse "ISBNoperationen" genannt, weil dort keine Instanzvariablen enthalten sind sondern nur Methoden zum manipulieren der Instanzvariable.

Aus der ISBN werden Informationen generiert, wie pruefeISBN13, getISBN10, getVerlag, getSprache, usw. die in der Klasse Buch gespeichert werden sollten. 

Wenn ich jetzt eine Klasse mache die "ISBN" heisst, und neben den Methoden auch noch die Instanzvariablen da mit hineinpacke wie ISBN13 und ISBN10, dann würden die Instanzvariablen in der Klasse "Buch" ja nicht mehr benötigt!?!

Wenn jetzt ISBN von Klasse Buch erbt, würde beim erstellen eines Objektes ISBN mit samt den Variablen Buch Verwendung finden.

Was aber wenn ich dann für Verlag auch mehrere Dinge anstellen möchte und auch diese Variable dort entziehe und eine eigene Klasse mache und die ebenfalls von buch erbt, dann wird die Klasse Buch immer kleiner und der Sinn dieser Klasse scheint mir dann völlig unsinnig ???

Mi


----------



## turtle (31. Dez 2012)

> Instanzvariablen die auf Bücher zutreffen wie ISBN, Verlag, .... und erben von der klasse "Datei".



Klingt für mich schräg. Was hat ein Buch mit einer Datei zu tun? Wieso erbt Buch von Datei?

Überdenke dies noch einmal.

Eine Vererbung sagt aus das ein Buch eine Datei ist IS-A) und alle Operationen, die auf Datei zulässig sind auch auf einem Buch möglich sind. Dieses, ohne genauer hinzuschauen, bezweifle ich doch arg. Diese Art der Denkweise kenne ich aus meinen Anfängen in der OO ebenfalls, als ich dachte, man müsste grosse Codeteile weiterverwenden, indem man diese vererbt. Das ist aber ein grosser Denkfehler und wenn man sich seine Verwandten anschaut, sieht man, dass man nicht von Mensch erbt sondern von Vater/Mutter. Also sehe ich diese Vererberei eher kritisch. Stattdessen wird häufig Aggregation verwendet, also HAT (HAS-A ein Buch vielleicht eine Datei und benutzt diese.

Instanzvariablen schreibt man übrigens klein, Klassennamen beginnen mit einem Grossbuchstaben.


----------



## MiMa (31. Dez 2012)

Ja danke, das was Du da schreibst erinnert mich stark daran, was ich derzeit durch mache.
Auch ich überlege wie man Klassen organisiert und die Schnittstellen erzeugt, damit diese weiterverwendet werden können.

Allerdings ist es wirklich so, das Buch von Datei erbt. Dabei bezieht es sich auf PDF und ePub Dateien, womit ich mit Hilfe von TIKA die ISBN Nummer heraus lese und diese dann mit einem eigenen Parser die ISBN mit einer Datenbank Online abgleiche und die zurückgegebenen Metadaten in die Klasse Buch schreibe.

Mittlerweile habe ich aber den Überblick verloren und überlege, ob die Klassen vielleicht anders Strukturiert werden sollten.

Vererbung setze ich auch nur gewzielt ein und zwar nur dort wo es auch nötig ist.

Mi


----------



## Timothy Truckle (31. Dez 2012)

MiMa hat gesagt.:


> Ich hatte die Klasse "ISBNoperationen" genannt, weil dort keine Instanzvariablen enthalten sind sondern nur Methoden zum manipulieren der Instanzvariable.


Welche Instanzvariable? die ISBN in 
	
	
	
	





```
Buch
```
?
Besser wäre die Variable aus 
	
	
	
	





```
Buch
```
 in die Klasse 
	
	
	
	





```
Isbn
```
 (Ja: nicht so viele Grosbuchstaben anhäufen) zu verschieben und Buch hält dann eine Instanz von 
	
	
	
	





```
Isbn
```
.

bye
TT


----------

