Vom ERD zu den Klassen?

Status
Nicht offen für weitere Antworten.

mf4nky

Mitglied
Hallo zusammen

Ausgangslage
In der Schule haben wir zur Zeit gerade eine Projektarbeit, in der es darum geht, ein Software-Projekt von A bis Z durchzuspielen, inkl. allen möglichen Dokumentationen usw.

Ich habe folgendes ERD zur Ausgangslage erstellt:


Fragen
Nun möchte ich versuchen, dies im Java umzusetzen, steh aber momentan irgendwie auf dem Schlauch :)

Wie werden die Mitgliedschaften verwaltet? Wird eine Assoziationsklasse erstellt? Wenn ja, wie würde die aussehen?

Optional:
Endziel
Als Endresultat möchte ich dann noch ein GUI erstellen, das in etwa so aussieht:


Das Ziel ist es, in der ersten JTable auf einen Sportler klicken zu können und dass sich dann in der untere JTable die Mitgliedschaften entsprechend aktualisieren -> dies stellt kein Problem dar, hab ich schon mal gemacht.
ABER: in der unteren JTable müssen Informationen aus der Klasse "Verein" und der Klasse "Mitgliedschaft" ersichtlich sein -> sehr grosses Problem :p

Das GUI wird nach dem MVC-Prinzip aufgebaut sein und hinter jeder JTable steckt ein DefaultTableModel.
Ausser, ihr zeigt mir ne andere Möglichkeit... *g*


Besten Dank für eure Anregungen.

Viele Grüsse aus der warmen und sonnigen Schweiz.

/edit: Ich wäre schon froh, wenn ihr mir die Fragen beantworten könnt, das Endziel müsst ihr nicht unbedingt beachten :)
 

mikachu

Top Contributor
ja ein klassischer fall einer m-zu-m-beziehung.
und wie man die auflöst, habt ihr doch bestimmt gelernt! ;)

#edit 1: ein sportler ist mitglied in keinen oder mehreren vereinen (um sportler zu sein, muss man nicht im verein sein)
UND
ein verein hat als mitglieder mehrere (>1) sportler (ein verein ohne sportler ist ne leere menge ^^)
 
G

Guest

Gast
Hey mikachu

Besten Dank für deine Antwort.

Naja, der Witz an der ganzen Sache ist eben, dass wir eine m-zu-m-Beziehung noch nie in Java implementiert haben.
Die Projektarbeit soll genau dazu dienen, Bereiche aufzuzeigen, in denen wir noch Nachhilfe brauchen :p

Und ich habe meinen Problembereich glaub ich gefunden *hehe*

Zu deinem /edit: Stimmt, das ERD war wohl etwas voreilig von mir erstellt worden...

Naja, kann ja mal versuchen, ein Java-Bsp. zu posten:

Sportler.java
Code:
public class Sportler {

    private int sportler_ID = 0;
    private String name = "";

    Sportler() {

    }

    Sportler(int sportler_ID, String name) {
        setSportler_ID(sportler_ID);
        setName(name);
    }

    public int getSportler_ID() {
        return sportler_ID;
    }

    public void setSportler_ID(int sportler_ID) {
        this.sportler_ID = sportler_ID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Verein.java
Code:
public class Verein {

    private int verein_ID = 0;
    private String bezeichnung = "";
    
    Verein() {
	
    }
    
    Verein(int verein_ID, String bezeichnung) {
        setVerein_ID(verein_ID);
        setBezeichnung(bezeichnung);
    }

    public int getVerein_ID() {
        return verein_ID;
    }

    public void setVerein_ID(int verein_ID) {
        this.verein_ID = verein_ID;
    }

    public String getBezeichnung() {
        return bezeichnung;
    }

    public void setBezeichnung(String bezeichnung) {
        this.bezeichnung = bezeichnung;
    }
}

Mitgliedschaft.java
Code:
public class Mitgliedschaft {

    private ArrayList mitgliedschaften = null;
    
    Mitgliedschaft() {
	
    }
    
    // was muss hier noch rein, um die Assoziationen abzubilden?!

    public ArrayList getMitgliedschaften() {
    if (mitgliedschaften == null) {
        mitgliedschaften = new ArrayList();
    }
        return mitgliedschaften;
    } 
}

So in etwa stell ich mir das vor, hab aber keine blasse Ahnung, wie mans wirklich macht :)
Wenn wir jmd an Bsp. zeigt, kommt dann wahrscheinlich das "Aha, ja" :p
 
M

maki

Gast
Vom ERD zu Klassen ist nicht üblich, das ERD bezieht sich rein auf Daten, kein Verhalten/Gemeinsamkeiten.

Der richtige Weg ist umgekehrt, vom Klassendiagramm zum ER Diagramm.
Oder besser, gleich ein ORM einsetzen und das DB Schema wird automatisch erzeugt.

Nachtrag: M-N Beziehungen werden als Bidirektionale Assoziationen dargestellt, beide Klassen haben Collections, welche Objekte der jeweils anderen Klasse enthalten.
 

foobar

Top Contributor
Eine Klasse Mitgliedschaft brauchst du nicht. Dein Sportler braucht nen Member List<Verein> und jeder Verein braucht nen Member List<Sportler>. Dann kannste über einen einzelnen Sportler auf alle seine Vereine zugreifen und über den Verein genauso auf die dazu gehörigen Sportler.
 

mf4nky

Mitglied
Hallo maki, hey foobar

Super, besten Dank für eure Antworten!

Ich glaube, nun hab ichs begriffen und werde versuchen, dies so zu verwirklichen.
Wenn mein Code steht, werd ich ihn hier dann noch posten.

Thx noch einmal!
Schönes WE,
Gruss mf4nky
 

mf4nky

Mitglied
Hey zusammen

Eine Frage hätt ich doch noch, bevor ich dann Ruhe gebe :)

Wenn ich jetzt z.B. noch das Eintritts- und Austrittsdatum des Sportlers in, bzw. aus einem Verein speichern möchte,
wo mach ich das?
Im Verein? Denn der wird ja dann in der Sportler-Klasse in einer Collection gespeichert...?
 

foobar

Top Contributor
mf4nky hat gesagt.:
Wenn ich jetzt z.B. noch das Eintritts- und Austrittsdatum des Sportlers in, bzw. aus einem Verein speichern möchte,
wo mach ich das?
Im Verein? Denn der wird ja dann in der Sportler-Klasse in einer Collection gespeichert...?

Ich würde das auch in der Klasse Verein speichern. Dafür brachste dann noch mal eine Tabelle die das Eintritt, Austrittsdatum und Mappings von Sportlern zu Vereinen enthält. Denn jeder Sportler kann in jedem Verein ein unterscheidliches Eintritt und Austrittsdatum haben. Implementier lieber erstmal die grundlegende Funktionalität bevor du dich mit den Erweiterungen auseinander setzt ;-)
 

mf4nky

Mitglied
Hey zusammen

Also, das Grundlegende hab ich hingekriegt. Habs sogar geschafft, dass die DefaultTableModels die Daten verwalten und dann entsprechend die beiden JTables füllen. Beim Klick auf die erste JTable (Sportler) wird automatisch die zweite aktualisiert (zugeordnete Vereine des Sportlers).

Nun, zu dem erweiterten Teil:
Ich möchte nun z.B. noch das Eintritts-, Austrittsdatum und Bemerkungen führen. Wir waren uns ja schon einig, dass dies in der Klasse Verein geführt werden sollte.

Kann ich da einfach weitere Variable einfügen und diese dann abfüllen?

Was ist aber, wenn ich mehrere Bemerkungen-Feld in der Datenbank habe (siehe ERD). Wie würdet ihr das jetzt umsetzen?


So sieht momentan meine Klasse "Verein" aus:
Code:
public class Verein {

    private int verein_ID = 0;
    private String bezeichnung = "";
    private String eintrittsdatum = "";
    private String bemerkungenVerein = "";	   // Bemerkung zum Verein
    private String bemerkungenMitgliedschaft = ""; // Bemerkung zur Mitgliedschaft
    private ArrayList<Sportler> mitglieder = null;

    Verein() {

    }

    Verein(int verein_ID, String bezeichnung, String eintrittsdatum) {
        setVerein_ID(verein_ID);
        setBezeichnung(bezeichnung);
        setEintrittsdatum(eintrittsdatum);
    }

    // hier kämen Getters und Setters für die Variablen.
    // aus Platzgründen weggelassen...

    public ArrayList<Sportler> getMitglieder() {
        if (mitglieder == null) {
            mitglieder = new ArrayList<Sportler>();
        }
        return mitglieder;
    }
}

PS. Poste dann den kompletten Code, wenn alles einwandfrei läuft, da ich sonst das Forum zumülle :)
 

foobar

Top Contributor
Code:
public ArrayList<Sportler> getMitglieder() {
        if (mitglieder == null) {
            mitglieder = new ArrayList<Sportler>();
        }
        return mitglieder;
    }
schreib das besser so:
Code:
public List<Sportler> getMitglieder() {
        if (mitglieder == null) {
            mitglieder = new ArrayList<Sportler>();
        }
        return mitglieder;
    }
Es ist vollkommen ausreichend das Interface List zu propagieren.

Des weiteren:
- Eintrittsdatum sollte vom Typ Date sein anstatt eines Strings
- Du mußt nicht alle Strings am Anfang mit "" initialisieren. Es muß ja nicht zwangsläufig jeder Verein eine Bemerkung haben.
- Benutz immer die Camelcaseschreibweise für alle nicht statischen Member also auch für die verein_ID lieber vereinID oder einfach nur id.
 

mf4nky

Mitglied
Hey foobar

Ok, das ich soweit alles verstanden und werde es entsprechend umsetzen.

Noch einmal um sicher zu gehen:
Die Angaben zum Verein selber und solche Angaben, welche eher zur Mitgliedschaft gehören, werden einfach ganz normal in die Klasse "Verein" geschrieben und einfach zur die Namensgebung der Variablen wird unterschieden, welcher Wert jetz zum Verein oder zur Mitgliedschaft gehört?

Ich weiss, bisschen komisch ausgedrückt, aber ich hoffe, du weiss was ich meine.

Danke für deine Hilfe.
 

foobar

Top Contributor
Die Angaben zum Verein selber und solche Angaben, welche eher zur Mitgliedschaft gehören, werden einfach ganz normal in die Klasse "Verein" geschrieben und einfach zur die Namensgebung der Variablen wird unterschieden, welcher Wert jetz zum Verein oder zur Mitgliedschaft gehört?
Das kommt ganz darauf an auf welche Informationen du später zugreifen willst. Wie sollen die Daten denn später dargestellt werden?
 
G

Guest

Gast
Hey Foobar

Wie die Daten später dargestellt werden sollen -> siehe mein erster Beitrag unter dem Punkt "Endziel".

Zwei JTables, in der ersten die Sportler, in der zweiten die Mitgliedschaften.
Beim Klick auf einen Sportler, sollen die Informationen für die Mitgliedschaften in der zweiten JTable für den aktuell ausgewählten Sportler aktualisiert werden.

D.h. ich möchte in der zweiten Tabelle sowohl Daten vom Verein selber, sowie Daten der Mitgliedschaft (Eintrittsdatum, evtl. Kommentar) in ein und derselben Tabelle darstellen -> hier auch wieder: siehe mein erster Beitrag, inkl. Pic.

Thx a lot :)
 

foobar

Top Contributor
Also wenn du nur die Vereine eines Sportler anzeigen willst, würde ich das Eintrittsdatum beim Verein speichern. Eine Klasse Mitgliedschaft ist dann nicht mehr nötig. Falls du die Klasse Verein zusätzlich dazu verwenden willst, um die Sportler aufzulisten, wäre das Eintrittsdatum dann eben null.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Import von Klassen aus anderen Projekten mit dem Setzen des "Classpath" Java Basics - Anfänger-Themen 9
R Klassen Anonyme Klassen: Zugänglichkeit neuer Methoden Java Basics - Anfänger-Themen 2
D Initialisierung von Klassen-Objekte Java Basics - Anfänger-Themen 47
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
F Klassen und Pakete Projektübergreifend (Eclipse) Java Basics - Anfänger-Themen 6
V_Fynn03 Klassen Überweisungen tätigen und einzahlen mit 2 Klassen Java Basics - Anfänger-Themen 1
W Abarbeitungsreihenfolge Anonyme Klassen Java Basics - Anfänger-Themen 2
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
E Klassen implementieren Java Basics - Anfänger-Themen 94
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
L Wie teilt man ein Programm in vernünftige Klassen ein? Java Basics - Anfänger-Themen 10
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
A Methode, Klassen Java Basics - Anfänger-Themen 3
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
G Klassen und Objekte Java Basics - Anfänger-Themen 2
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
D Klassen ausgeben Java Basics - Anfänger-Themen 2
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
Queiser Nicht statische Klassen Java Basics - Anfänger-Themen 6
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10
J Gleiche Methode in 2 verschiedenen Klassen - Lösung ? Java Basics - Anfänger-Themen 8
G Refactoring von mehreren identischen Klassen Java Basics - Anfänger-Themen 36
O Wrapper Klassen Java Basics - Anfänger-Themen 6
CptK Best Practice Klassendiagramm aus fertigen Klassen erstellen lassen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben