Beziehungen erstellen?

Status
Nicht offen für weitere Antworten.

Tyler**

Mitglied
Hi,

hab ein Problem für Anfänger (bin einer :wink: )

Also ich möchte Beziehungen zwischen verschiedenen Objekten herstellen. Diese Objekte sind dabei Menge einer Klasse unterschiedlicher Hierarchie.

Bsp. Besitztümer von Gruppen o.ä.

Ich habe eine Oberklasse mit zwei Unterklassen. Die Unterklassen haben jeweils nochmals Unterklassen usw.

also:
Code:
class Oberklasse ...

class Unterklasse1 extends Oberklasse ...

class Unterklasse2 extends Oberklasse ...

class Unter1UnterKlasse1 extends Unterklasse1 ...

class Unter2UnterKlasse1 extends Unterklasse1 ...

class Unter1UnterKlasse2 extends Unterklasse2 ...

class Unter2UnterKlasse2 extends Unterklasse2 ...

Nun habe ich ein Objekt z.B. von der Unter1Unterklasse1. Ich möchte irgendwie eine Verbindung herstellen zwischen diesem Objekt und einem Objekt einer anderen Klasse, z.B. soll der Unter1Unterklasse1 ein Objekt aus Unter1Unterklasse2 gehören, in ihrem Besitz sein.

Code:
Unter1Unterklasse1 m = new Unter1Unterklasse1();

m.besitzt.neu(var); //mit var ein Objekt aus einer beliebigen Unterklasse
// diese zweite Anweisung neu() soll var zum Besitz von m erklären.

Wie mache ich das? Wo muss die Methode neu() definiert werden? Und wie ist .besitzt zu handhaben?

Danke für eure Hilfe :toll:
 

Wildcard

Top Contributor
Ohne mich jetzt darüber äussern zu wollen ob ich das was ich von deiner Erklärung verstanden habe als sinnvoll erachte oder nicht:
Was soll .besitzt denn bitte sein?
 
R

Roar

Gast
ähh wenn ich dich richtig verstehe willst du nur dass Unter1UnterKlasse1 eine referenz auf ein opbjekt von Unter1UnterKlasse2 hat oder was?
 

Tyler**

Mitglied
Roar hat gesagt.:
ähh wenn ich dich richtig verstehe willst du nur dass Unter1UnterKlasse1 eine referenz auf ein opbjekt von Unter1UnterKlasse2 hat oder was?
ja, so in etwa!

m.besitzt.neu(var);

das besitzt zeigt an, was sich gerade im Besitz von m befindet! Und neu() soll einfach etwas hinzufügen.
 

Wildcard

Top Contributor
du willst mit neu also eine Referenz auf ein Object hinzufügen?
dann braucht m eine Collection (z.B. ArrayList) und eine neu(Object o) (nenn sie besser add(Object o)) Methode um etwas hinzuzufügen.
 

Tyler**

Mitglied
Wildcard hat gesagt.:
du willst mit neu also eine Referenz auf ein Object hinzufügen?
dann braucht m eine Collection (z.B. ArrayList) und eine neu(Object o) (nenn sie besser add(Object o)) Methode um etwas hinzuzufügen.
richtig. referenz auf ein objekt (wenn man das so nennt :wink: ) das macht Sinn. An ein Array hatte ich gar nicht gedacht. Mir schwebte eher ein String vor, den ich dann einfach immer um ein neues Objekt ergänze.

wo definiere ich nun dieses Array, im Konstruktor?

Eine gegenseitige Beziehung wäre auch nicht schlecht, Objekt A besitzt Objekt B und umgekehrt wird B von A besessen
 

Illuvatar

Top Contributor
*g Das klingt nach Horrorfilm *Hilfe ich bin besessen*

...Nun gut, zum Topic :D
Statt einem Array wäre eine ArrayList sinnvoller, da diese beliebig erweiter-/schrumpfbar ist, ein Array hat eine feste Größe. Eine ArrayList ist eine Klasse und hat Methoden wie add remove size usw, schau in der API. Diese (ArrayList) initialisierst du am besten im Konstruktor, aber speichern musst du sie als Membervariable, also innerhalb der Klassendefinition.
 

KSG9|sebastian

Top Contributor
Mir schwebte eher ein String vor, den ich dann einfach immer um ein neues Objekt ergänze.

/me macht die Augen zu und rennt weg ;D

Einen String dem du ein neues Objekt hinzufügst *wuah*
Das was Illuvatar gesagt hat ist die korrekte Lösung.
Die andere Möglichkeit(bei einer 1:1-Beziehung) wäre eben ein Objekt vom Typ oberklasse oder was auch immer..


aber mal was anderes: Kannst du mir ein einziges Beispiel nennen bei dem es auch nur annähernd sinnvoll ist so ne Vererbungsstruktur zu benutzen ?
 

Tyler**

Mitglied
Nicht lachen! :wink:

bei dem String war natürlich jedes Objekt mit einem Namen versehen!

also Ausgabe "m gehört: nameobj1, nameobj2..."

und die Methode add(var) fügt dann dem String(?) besitzt var hinzu ( besitzt += var; ... oder so)

btw, ArrayList haben wir noch nicht gehabt, muss also noch eine andere Lösung geben! edith sagt: haben wir doch gehabt bzw. nebenbei erwähnt!

Bsp: Allgemeine Dinge --> Unterteilung in Mensch und Gegenstände, Gegenstände unterteilt in z.B. Auto, Haus etc. Und nun soll der Mensch ein Auto besitzen, er mit der Eigenschaft des Besitzens ausgestattet sein, und das Auto soll im Besitz des Menschen sein, das heißt, die Eigenschaft des Bessesenseins besitzen etc.

Dies soll durch Abfragen dann ausgegeben werden (anfangs wird es initialisiert, ob vom Benutzer eingegeben oder direkt im Quellcode angegeben, ist dabei egal)
 
G

Gast

Gast
da es mir anscheinend heute seeehr langweilig zu sein scheint, habe ich dir mal was zusammengeschustert. wenn du dir den quelltext genau anschaust, siehst du eine (aber sicherlich nicht die schönste..) möglichkeit beziehungen zwischen verschiedenen klassen herzustellen. du hast eine klasse 'welt' mit den daraus abgeleiteten klassen 'mensch' und 'gegenstand'. aus 'mensch' ist 'mann' und 'frau' abgeleitet und die klasse 'gegenstand' vererbt ihrerseits ihre eigenschaften und methoden an 'schiff' und 'auto'. vielleicht hilft es dir ja bei der umsetzung deiner eigenen ideen?
gruß,
reinhold
Code:
public class DeineWelt {
    public static void main(String args[]) {
        
        // erschaffe die Welt...
        Welt myWorld = new Welt("Erde");
        
        // kreiere ein paar Menschen
        Mann mann1 = new Mann();
        Frau frau1 = new Frau();
        Frau frau2 = new Frau();
        
        // gib ihnen ihre Namen
        mann1.setNameMensch("Fritz");
        frau1.setNameMensch("Ute");
        frau2.setNameMensch("Jutta");
        
        // kleiner Spass..
        frau2.setWeltName("Sonne");
        
        // produziere zwei Autos
        Auto auto1 = new Auto();
        Auto auto2 = new Auto();
        
        // vergib die Marken
        auto1.setGegenstandBezeichnung("Porsche");
        auto2.setGegenstandBezeichnung("Ferrari");
        
        // Ferrari kommt vom Mond..
        auto2.setWeltName("Mond");
        
        // produziere zwei Schiffe
        Schiff schiff1 = new Schiff();
        Schiff schiff2 = new Schiff();
        
        // gäähn, und wieder dasselbe
        schiff1.setGegenstandBezeichnung("U-Boot");
        schiff2.setGegenstandBezeichnung("Dampfer");
        
        // jetzt gehen wir einkaufen..
        mann1.nimmtInBesitz(auto1);
        auto1.setBesitzer(mann1);
        
        mann1.nimmtInBesitz(schiff2);
        schiff2.setBesitzer(mann1);
        
        frau1.nimmtInBesitz(schiff1);
        schiff1.setBesitzer(frau1);
        
        frau2.nimmtInBesitz(auto2);
        auto2.setBesitzer(frau2);
        frau2.nimmtInBesitz(schiff1);
        schiff1.setBesitzer(frau2);
        frau2.nimmtInBesitz(auto1);
        auto1.setBesitzer(frau2);
        
        // nun checken, wer was besitzt..
        System.out.println(mann1.getNameMensch() + " besitzt " +
                           mann1.hatInBesitz());
        System.out.println(frau1.getNameMensch() + " besitzt " +
                           frau1.hatInBesitz());
        System.out.println(frau2.getNameMensch() + " besitzt " + 
                           frau2.hatInBesitz());
        System.out.println("\n");
        
        // nun checken welche Besitzer jeder einzelne Gegenstand hat..
        System.out.println(auto1.getGegenstandBezeichnung() + " gehört " + 
                           auto1.getBesitzer());
        System.out.println(auto2.getGegenstandBezeichnung() + " gehört " + 
                           auto2.getBesitzer());
        System.out.println(schiff1.getGegenstandBezeichnung() + " gehört " + 
                           schiff1.getBesitzer());
        System.out.println(schiff2.getGegenstandBezeichnung() + " gehört " + 
                           schiff2.getBesitzer()); 
        System.out.println("\n");
        
        // sind alle Menschen und Gegenstände von dieser Welt??
        System.out.println(mann1.getNameMensch() + " lebt auf der " + 
                           mann1.getWeltName());
        System.out.println(frau1.getNameMensch() + " lebt auf der " + 
                           frau1.getWeltName());
        System.out.println(frau2.getNameMensch() + " lebt auf der " + 
                           frau2.getWeltName());
        System.out.println("\n");
        System.out.println(auto1.getGegenstandBezeichnung() + " kommt von " + 
                           auto1.getWeltName());
        System.out.println(auto2.getGegenstandBezeichnung() + " kommt von " + 
                           auto2.getWeltName());
        System.out.println(schiff1.getGegenstandBezeichnung() + " kommt von " + 
                           schiff1.getWeltName());
        System.out.println(schiff2.getGegenstandBezeichnung() + " kommt von " + 
                           schiff2.getWeltName());        
    }
}
class Welt {
    private String planetName = "Erde";
    public Welt() {}
    public Welt(String planetName) {
        this.planetName = planetName;
    }
    
    public void setWeltName(String planetName) {
        this.planetName = planetName;
    }
    
    public String getWeltName() {
        return this.planetName;
    }
    
}
class Mensch extends Welt {
    private String name = "";    
    private String eigentum = "";
    public Mensch() {}       
        
    public void setNameMensch(String name) {
        this.name = name;
    }
    
    public String getNameMensch() {
        return this.name;
    }
    
    public void nimmtInBesitz(Gegenstand gegenstand) {
        eigentum += gegenstand.getGegenstandBezeichnung() + " "; 
    }
    
    public String hatInBesitz() {
        return eigentum;
    }
}

class Mann extends Mensch {    
    public Mann() {
        super();     
    }      
}

class Frau extends Mensch {
    public Frau() {
        super();
    }
}

class Gegenstand extends Welt {
    private String bezeichnung = "";
    private String besitzer = "";
    public Gegenstand() {}
    
    public void setGegenstandBezeichnung(String bezeichnung) {
        this.bezeichnung = bezeichnung;
    }
    
    public String getGegenstandBezeichnung() {
        return bezeichnung;
    }
    
    public void setBesitzer(Mensch mensch) {
        besitzer += mensch.getNameMensch() + " ";
    }
    
    public String getBesitzer() {
        return besitzer;
    }            
}

class Auto extends Gegenstand {   
    public Auto() {
        super();
    }             
}

class Schiff extends Gegenstand { 
    public Schiff() {
        super();
    } 
}
 

Tyler**

Mitglied
:toll:

danke für deine Mühe! Ich werd das Programm mal durchforsten.

Übrigens haben wir eine andere Methode gefunden, Beziehungen herzustellen, und zwar mit TreeSort (java.util.TreeSort). Das ging irgendwie mit UML-Diagrammen. Somit war meine Vorbereitung des Programms völlig sinnlos, denn man konnte das Diagramm in einen Java-Code übersetzen lassen :roll:

Also damit dürfte meine Frage (und damit der Thread) erledigt sein.

Bevor ich ihn abhake:
Kann ich ein paar Fragen stellen zu dem Quelltext?

1.
Code:
class Frau extends Mensch { 
    public Frau() { 
        super(); 
    } 
}
Welche Funtktion hat das super() hier? ich dachte, man greift damit entweder auf die/Methoden der Superklasse zurück oder ergänzt Variablen aus Methoden der Superklasse, die nicht aufgerufen werden?

2. Ich habe jede SubKlasse in einer neuen *.java-Datei gespeichert. Welche Methode ist besser?

3. Was ich bis jetzt nicht verstehe: die Programme funktionieren doch auch alle ohne diese ganzen private-Attribute. Ich finde die überflüssig! Damit schränkt man die Variablen doch nur auf die jeweilige Klasse ein. Kann man diese in den Subklassen wenigstens noch lesen? Warum liege ich mit meiner negativen private-Einstellung (wahrscheinlich) falsch?
 

Wildcard

Top Contributor
Generell werden Member private deklariert.
Zugriff gewährst du nur über getter und setter. Eigne dir dieses System in jedem Fall an!
Alles was private sein kann hat auch private zu sein. Diese Kapselung ist eine der Hauptregeln für OOP um unnötige Fehler zu vermeiden.
 
G

Gast

Gast
zu 1.) ich habe dich mit dem super(); etwas verwirrt! es ist in diesem beispiel auch überflüssig, d.h. es würde ein
Code:
class Frau extends Mensch {
    public Frau() {}
}
auch reichen. das ist deswegen so, weil frau ja aus mensch abgeleitet wurde und natürlich aber trotzdem einen konstruktor braucht, um überhaupt mal erzeugt werden zu können. wenn nun dieser leere konstruktor aufgerufen wird, so wird automatisch der konstruktor der vaterklasse -also mensch- aufgerufen und somit ist die frau ein mensch -mit all seinen eigenschaften und methoden, ..... gottogott, wie hört sich denn das an..

schau dir doch mal folgendes an:
[url]http://www.uni-klu.ac.at/~thaichho/java/k100049.html#konstruktoren
[/URL]
auch die kapitel davor und danach sind sehr hilfreich!!

gruß,
reinhold
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T 1:1 Beziehungen realisieren ? Java Basics - Anfänger-Themen 13
M [Hibernate] Speichern von ManyToOne-Beziehungen in der DB Java Basics - Anfänger-Themen 12
B hsqldb (beziehungen zw. Tabellen) Java Basics - Anfänger-Themen 8
U Implementation von Beziehungen Java Basics - Anfänger-Themen 4
E n:1 Beziehungen umsetzen Java Basics - Anfänger-Themen 13
M Beziehungen zwischen HashMaps Java Basics - Anfänger-Themen 12
G Beziehungen in Java ! Beispiele ! Java Basics - Anfänger-Themen 5
Student Beziehungen zwischen Klassen - wie strukturiere ich das? Java Basics - Anfänger-Themen 23
XWing Int erstellen lassen? Java Basics - Anfänger-Themen 11
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
A exe Datei erstellen Java Basics - Anfänger-Themen 8
J Packages erstellen Java Basics - Anfänger-Themen 7
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
Ostkreuz Spielfeld Schatz erstellen Java Basics - Anfänger-Themen 5
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
B Klasse statisch erstellen da n-mal geladen Java Basics - Anfänger-Themen 3
laxla123 Dreieck erstellen Java Basics - Anfänger-Themen 1
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
A Passwort erstellen Java Basics - Anfänger-Themen 3
S CVS erstellen Java Basics - Anfänger-Themen 1
RashAGhul Java Verwaltungstool Erstellen mit kaum Wissen Java Basics - Anfänger-Themen 9
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
dennis_lnz Klassen Wie kann ich mein Java Textadventure verbessern, um ein Klassendiagramm zu erstellen? Java Basics - Anfänger-Themen 9
dcHost Java Kara Sensor erstellen Java Basics - Anfänger-Themen 1
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U JList erstellen Java Basics - Anfänger-Themen 2
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
frager2345 Programm erstellen ohne Autoboxing und Unboxing Java Basics - Anfänger-Themen 13
berserkerdq2 IO Streams logfile erstellen und Sachen schreiben wie? Java Basics - Anfänger-Themen 2
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
N 2D Array Summe erstellen Java Basics - Anfänger-Themen 6
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
S Programm erstellen Java Basics - Anfänger-Themen 3
S MinMax Programm erstellen Java Basics - Anfänger-Themen 4
S Mit for-Schleife ein 2D JLabel-Array mit veränderbaren Icons erstellen Java Basics - Anfänger-Themen 3
T Countdown erstellen Java Basics - Anfänger-Themen 7
I ZIP File erstellen Java Basics - Anfänger-Themen 10
L Ordner in neuen erstellten Ordner erstellen Java Basics - Anfänger-Themen 12
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
B Zurück Button erstellen Java Basics - Anfänger-Themen 1
melaniemueller Lagerverwaltung erstellen - mehrdimensionale Arrays Java Basics - Anfänger-Themen 62
B JaxB - Referenzen erstellen? Java Basics - Anfänger-Themen 2
K Rekursion: Rechenmauer mit Array erstellen Java Basics - Anfänger-Themen 17
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
E Classpath Datai erstellen Java Basics - Anfänger-Themen 3
B eine methode erstellen Java Basics - Anfänger-Themen 7
I Entity erstellen, die für API gedacht ist Java Basics - Anfänger-Themen 33
M Packages erstellen mit Java-Editor Java Basics - Anfänger-Themen 6
L FinanzApp erstellen Java Basics - Anfänger-Themen 1
J Junit4 Klasse erstellen Java Basics - Anfänger-Themen 5
B Warteschlange erstellen mit LinkedList ? Java Basics - Anfänger-Themen 6
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
JaVaN0oB Bruchklasse erstellen Java Basics - Anfänger-Themen 9
N Kreismuster auf Bestehendem Kreis erstellen Java Basics - Anfänger-Themen 10
K Rahmen erstellen mit mehrdimensionalem Array Java Basics - Anfänger-Themen 1
B Hilfe bei Map Liste erstellen Java Basics - Anfänger-Themen 10
F Adjunkte Matrix erstellen Java Basics - Anfänger-Themen 3
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
GermanPie Discord Text Channel erstellen? Java Basics - Anfänger-Themen 1
K Objektdiagramm erstellen Java Basics - Anfänger-Themen 3
C Wie kann ich Versionen eines Projektes in Eclipse erstellen? Java Basics - Anfänger-Themen 3
D Klassen Klassendiagramm richtig erstellen Java Basics - Anfänger-Themen 20
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
E Filmsammlung erstellen Java Basics - Anfänger-Themen 6
B Eine Methode erstellen Java Basics - Anfänger-Themen 3
M Erstellen eines insets Objekts, GridBagLayout Java Basics - Anfänger-Themen 13
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
N String N-Gramme mit Stream erstellen Java Basics - Anfänger-Themen 7
K Quersumme erstellen Java Basics - Anfänger-Themen 7
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
D Input/Output Mehrzeiligen String aus Textdatei erstellen Java Basics - Anfänger-Themen 5
C Erstellen eines Widerstandsnetzwerks Java Basics - Anfänger-Themen 10
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
A Taschenrechner mit Gui erstellen Java Basics - Anfänger-Themen 9
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
S Hilfe : Unendlich viele Zufallszahlen erstellen? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen


Oben