Klassendesign

Status
Nicht offen für weitere Antworten.
D

Drake85

Gast
Hallo Leute,

ich habe eine Frage an euch, wie ein gutes Klassendesign auszusehen hat. Grundsätzlich kann ich ja alles beliebig weit aufteilen, nur was ist da ein vernünftiges Maß?

Angenommen ich habe jetzt die Aufgabe einen Schüler zu Modellieren. Ich habe jetzt die Aufgabe so gelöst:

Der Schueler ist eine eigene Klasse. Als Attribute hat er SchuelerDaten (Name, Vorname, Adresse, etc.), Schulkonto (Kontonummer, Kontostand, etc.), Klasse (Klassenlehrer, Bezeichnung, Raum, etc.), Noten, usw.

Meine Idee war es, dass die Klasse Schueler sozusagen eine Struktur für weitere Klassen ist. Damit ist das ganze aufgeräumt.


Mein Kumpel sagt aber etwas anderes. Er erstellt eine einzige Klasse Schueler und schreibt dort alles als Attribut rein. Nochmal im Vergleich.

Meine Version: schueler.schuelerDaten.Name
Seine Version: schueler.Name

Seine Argumente liegen z.B. in der besseren Performance, so dass man nicht mehrere Objekte anlegen und verwalten muss. Außerdem war er der Meinung, dass der Zugriff auf den Namen mit meiner Version teuerer ist, als mit seiner.

Ich war der Meinung, dass es eh alles in O(1) liegt und von daher egal ist, was man macht. Aber bei meiner Version habe ich eine bessere Übersicht über die Klassen.

Wer hat von uns recht?
 

Wildcard

Top Contributor
Das Performance Argument ist Unsinn. Bei deiner Lösung stellt sich mir jedoch die Frage, was ein Schüler ist, wenn die Attribute die den Schüler ausmachen in SchülerDaten liegen.
 
D

Drake85

Gast
Bei meiner Lösung habe ich mir den Schüler als eine Art allgemeine Struktur vorgestellt. Oder noch besser gesagt als ein Baum. Schüler ist der Wurzelknoten von dem unter anderem auch SchülerDaten ausgeht. Und die eigentlichen Daten sind dann die Blätter
 
M

maki

Gast
Denke lieber OO, nicht in Bäumen ;)

Dein Kumpel ist auf dem richtigen Weg, wenn er auch die falschen Argumente ("Performance") anführt.
 

Wildcard

Top Contributor
Bei OOP versuchst du ( in den meisten Fällen) die Wirklichkeit nachzuempfinden. Die Daten eines Schülers die für dein Programm relevant sind, machen dessen Attribute aus.
Manchmal hilft es auch, sich eine sinnvolle XML Repräsentation der Daten zu überlegen und anschließend das Domain Model danach zu modellieren (oder mit einem Binding Framework automatisch generieren zu lassen).
 

DLor

Aktives Mitglied
Ich mache mir immer Gedanken, wie ich meine Daten in der Datenbank festhalten will. Der Schüler hat damit feste Daten, die ihn ausmachen, und Daten, die von anderen "Schülerobjekten" mitgenutzt werden. Diese Daten lagere ich in einem anderen Objekt aus und dieses Objekt kann bei weiteren Schülern verwendet werden.
Somit hat man keine Redundanz bei der Datenhaltung.
Somit hätte ich 2 Klassen "Schüler" mit einigen Attributen und eine Klasse "Klasse" mit den Attributen Lehrer, usw.

Man könnte nun auch noch eine Klasse "Person" erstellen und "Schüler" und "Lehrer" davon ableiten. Es sind "spezialisierte Personen".
 

Marco13

Top Contributor
Der Schueler ist eine eigene Klasse. Als Attribute hat er SchuelerDaten (Name, Vorname, Adresse, etc.), Schulkonto (Kontonummer, Kontostand, etc.), Klasse (Klassenlehrer, Bezeichnung, Raum, etc.), Noten, usw.

Ich finde auch, dass sowas wie Name und Vorname NICHT nochmal in eine Unterstruktur "SchülerDaten" gehört. Stattdessen finde ich, dass das ... entweder direkt in "Schüler" gehört, besser aber noch in eine (evtl. abstrakte) Klasse "Person". Dann kann "Schüler" von "Person" erben, und hat automatisch die Dinge, die JEDE Person hat - eben Name, Vorname etc, und eben zusätzlich noch das, was einen Schüler eigentlich ausmacht (Z.B. Schulkonto, was sicher eine eigene Klasse sein sollte).

Ob ein Schüler eine "Klasse" (also, ein Objekt der Klasse "Klasse" :wink: ) in diesem Sinne "besitzen" (bzw. enthalten) sollte, weiß ich aber nicht - Eine Klasse enthält mehrere Schüler - ob jeder einzelne Schüler nun eine Referenz auf seine Klasse braucht, muss man sich überlegen....
 
D

Drake85

Gast
@Wildcard

Okay, also wenn ich mir das jetzt etwas genauer überlege, dann sollte der Schüler aus drei Sachen "bestehen". Zum einen ist es seine ID, der Name und der Vorname.

Das sind auch die Daten, auf die man Ständig zugreift. Die Adressdaten und anderes Zeugs sind nebensächliche Informationen, die man nicht immer braucht. Wie wäre es, wenn ich einfach diese Attribute aus der SchuelerDaten Klasse in die Schueler Klasse verschiebe?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben