Struktur von Java Programmen?

plautzer

Neues Mitglied
Hallo,
ich setzte mich gerade intensive mit OOP und Java auseinander und habe noch eine paar Verständnisprobleme bei Strukturierung. Ich hoffe hier ein paar Tipps und Denkanstöße zu finden, wie ich die nachstehende Probleme am geeignesten Lösen kann. Ich habe auch schon mehrere Tuts und Bücher zu dem Thema gelesen, jedoch sind die Beispiele alle auf einem sehr niedrigen level und konnten mir daher nicht weiterhelfen.
Als Projekt habe ein Verwaltungstool für unsere Basketball-Liga gewählt. Folgende Ausgangssituation habe ich dabei:
Es gibt grob gesehen 2 Objekte:
  • Liga
  • Saison
  • Spieltag
  • Spiel
  • Mannschaft
Und noch ein paar Statistiken, die einmal für das Spiel und die beiden Mannschaften ermittelt und gespeichert werden sollen:
  • Mannschaftstatistik (Punkte ,Fouls, Freethrows, Dunks, Dreier etc jeweils je Viertel)
  • SpielStatistik (Punkte ,Fouls, Freethrows, Dunks, Dreier etc jeweils je Viertel)
Die Klasse Spiel habe ich folgendemaßen aufgebaut:
Code:
Class Spiel{
Private integer Id;
Private Date spielDatum;
Private integer ligaID;
Private integer SpieltagID;
Private Mannschaft  heimTeam;
Private Mannschaft  auswaertsTeam;
Private Statistik  Viertel1; 
}
Class Mannschaft{
Private integer Id;
Private String Name;
}
Das Heimteam und Auswärtsteam sind jeweils von der Klasse Mannschaft. Bei der Erzeugung es Spielobjekts werden die Mannschaften übergeben.
Falls das so korrekt ist, dann habe ich folgende Situation:
1. Frage
Wenn ich alle Spiele aus der Datenbank in meine Programm laden will, dann erzeuge ich erst mein Spiel, danach die beiden Mannschaften und übergebe diese an mein Spiel. Wie kann ich sich sein, dass ich nicht ein Team erzeuge was schon existiert Bzw. wie finde ich eine Mannschaft, die schon als Objekt existiert? Bisher nutze ich ein statisches Array[pos] von der klasse Mannschaft, welche ich als pos die ID mitgebe. Das Array ist jedoch statisch, dh ich muss voher schon wissen wieviel datensätze aus der Datenbank kommen. Gibt es hierfür noch eine elegantere Lösung?

In einer Hauptklasse möchte ich mir alle spiel aus der DB anzeigen lassen:
Code:
Class ZeigeSpiele{
//Get alle Spiele aus der DB
//Zeige alles Spiele mit den Statisitken
}

2. Frage: Wie löse ich die Kommunikation (write/read) mit der Datenbank?
  • Kreiert man hierfür eine Methode getallgames in der Klasse ZeigeSpiele oder in der Klasse Spiele? Es kommt mir etwas unlogisch vor, dass in der Klasse Spiele zu tun, da ich in der ZeigeSpiele erst eine Spiel erzeugen müsste, was nicht real ist um alle Spiel abzufragen. Macht das Sinn?
  • Was ist generell der beste Weg in Java für das Arbeiten mit einer Datenbank? Sollte man eine Klasse SQL kreieren, welche einmal in der Klasse Zeigespiel instaziert wrid erzeugt wird und dann an die Objekte (z.b. Team, Mannschaft) übergeben wird, falls deren Daten gespeichert werden sollen?

Frage 3: Wie verhält sich das mit den Statistiken
Wird hierfür eine erweiterte Klasse gebildet (z.b. Statistik), welche die Klasse erweitert? Oder ist es eine innere Klasse in Mannschaft oder eine eigenen Klasse mit Referenz auf Mannschaft bzw. Team?

Code:
Class Statistik{
Int Punkte;
Int freethrows;
Int Dunks;
Int Dreier;
}
Class Mannschaft{
Private integer Id;
Private String Name;
Private Statistik  Viertel1 = new Statistik(); 
Private Statistik  Viertel2 = new Statistik(); 
Private Statistik  Viertel3 = new Statistik(); 

}


Und Frage 4 zum Schluss: Wie kann ich die Objekte durchsuchen? Z.B. möchte ich mir alle Spiele anzeigen lassen, die über 100 Punkte erreicht haben, oder wieviel Fouls durchschnittlich getätigt wurden?

Es wär top wenn Ihr mir bei den Fragen weiterhelfen würdet!

Viele Grüße
Plautzer
 
Gibt es hierfür noch eine elegantere Lösung?
Java:
List<SomeObject> l = new ArrayList<SomeObject>();
Kreiert man hierfür eine Methode getallgames in der Klasse ZeigeSpiele oder in der Klasse Spiele?
Kommt darauf an was du alles mit dem Objekt Spiel (Objektnamen = Einzahl) machen willst. Wenn das Objekt nur alle zusammengehörigen Attribute speichern soll, dann gehört die Methode in die Klasse, die die Spiele erzeugt. Und das ist bei dir, so wie ich das sehe, der Fall.
Was ist generell der beste Weg in Java für das Arbeiten mit einer Datenbank? Sollte man eine Klasse SQL kreieren, welche einmal in der Klasse Zeigespiel instaziert wrid erzeugt wird und dann an die Objekte (z.b. Team, Mannschaft) übergeben wird, falls deren Daten gespeichert werden sollen?
Das ist wohl der einfachste Weg. Wobei bei dir die Objekte Team und Mannschaft dem Objekt Spiel ähneln, weshalb es das beste ist, wenn du Methoden, die das DBMS ansprechen, in die DB-Klasse packst.
Wird hierfür eine erweiterte Klasse gebildet (z.b. Statistik), welche die Klasse erweitert? Oder ist es eine innere Klasse in Mannschaft oder eine eigenen Klasse mit Referenz auf Mannschaft bzw. Team?
Dies ist wohl auch wieder ein eigenes Objekt. Die Frage ist jetzt nur noch wie die Abhängigkeiten sind. Also ob es sinnvoll ist eine Statistik innerhalb einer Mannschaft, oder in der Hauptklasse zu verwalten. Da aber wohl jede Mannschaft und jedes Spiel eine Statistik hat, macht es Sinn diese auch innerhalb dieser Objekte zu verwalten bzw. anzulegen.
Wie kann ich die Objekte durchsuchen? Z.B. möchte ich mir alle Spiele anzeigen lassen, die über 100 Punkte erreicht haben, oder wieviel Fouls durchschnittlich getätigt wurden?
Java:
List<Spiel> spiele = new ArrayList<Spiel>();
...
for (Spiel s : spiele) {
  if (s.getPunkte() > 100) {
    // mach was
  }
  // usw.
}
 
Für die Sache mit der Datenbank ist die Java Persistenz-Api (JPA) sehr empfehlenswert. Einerseits macht sie das wirklich einfach, andererseits zwingt sie einen geradezu dazu, das Objektmodell sehr sauber und strukturiert anzulegen.

Das Suchen nach Objekten mit bestimmten Eingeschaften kann man auch als Datenbank-Query ausführen.

Sauberes Objektorientiertes Design ist, wie ich finde, etwas, was man nicht auf Anhieb hinbekommt, sondern was Erfahrung und Fingerspitzengefühl erfordert. Daher, einfach mal anfangen.. wenns irgendwo hakt in der Anwendung, wirst Du das schon merken.
 
Hi,

danke für euere Hilfe... ich habe dadurch eine Basis für Projekts schaffen können und die Kommunikation mit der DB durch eine SQL Klasse realisiert. Als zweiten Schritt werde ich nun mit einer Persistenz Schicht arbeiten.

Jan hat JPA empfohlen... könnte ihr mir kurz verdeutlichen was der Vorteil/Nachteil zu Hibernate und POJO ist?

Das habe ich noch zwei Fragen zum Array:
Wenn ich ein Array mit Objekten an eine Methode übergebe... dann wird lediglich eine Pointer zum array übergeben und nicht das Array kopiert, richtig?

Besteht hier die Möglichkeit bei der Arrayliste die Objekte in der Liste direkt anzusprechen?

Grüße
 
Hibernate IST (mehr oder weniger) JPA.. JPA ist nur die offzielle java-standardisierung von ORM-Mappern wie hibernate und co. Wobei JPA 1.0 noch etwas unvollständig ist. Aber de fakto ist JPA nur die Spezifzierung, und man benutzt oft hibernate als konkrete Implementation dessen.

"Wenn ich ein Array mit Objekten an eine Methode übergebe... dann wird lediglich eine Pointer zum array übergeben und nicht das Array kopiert, richtig?"

ja. Generell werden immer Pointer auf Objekte übergeben und nie Kopien dieser erstellt.
 

Neue Themen


Zurück
Oben