Doppelte Objekte
Kristin
- programmiertechnik
ich setze mich gerade intensiver mit OOP und UML auseinander.
Wie kann oder muss ich folgendes umsetzen?
Ich habe eine Klasse A, welche in ein Array Objekte von der Klasse B enthält und ein Array mit Objekte von der Klasse C.
In der Klasse B benötige ich aber auch bestimmte Objekte von der Klasse C.
Das Objekt A würde 413 Objekte der Klasse C enthalten. Das Objekt B eine Teilmenge dieser.
Wie kann ich verhindern, dass in der Klasse A und B die selben Objekte liegen, oder kann man dieses nicht verhindern?
Kristin
Das Objekt A würde 413 Objekte der Klasse C enthalten. Das Objekt B eine Teilmenge dieser.
Hat die Klasse B _wirklich_ eine Teilmenge der Objektsammlung aus A?
Oder sind es nur Objekte gleichen Inhalts?
Wie kann ich verhindern, dass in der Klasse A und B die selben Objekte liegen, oder kann man dieses nicht verhindern?
Kurz und knapp: Indem du in Klasse A und B alle Objekte selbst erstellst.
Weiterführend:
Die Frage ist, _woher_ bekommen die Klassen die Objekte von B und C.
Wenn die Klasse A in ihrem eigenen Code Objekte von B/C erstellt, dann funktioniert das mit dem "new"-Operator. Somit ist die Instanz der Klasse B/C nur in A bekannt. Solange du diese Instanz in der Klasse A unter Verschluss hältst kommt niemand an die Objekte herran.
-> Siehe Google -> Information Hiding
Grüße
Jojo
»» Das Objekt A würde 413 Objekte der Klasse C enthalten. Das Objekt B eine Teilmenge dieser.
Hat die Klasse B _wirklich_ eine Teilmenge der Objektsammlung aus A?
Oder sind es nur Objekte gleichen Inhalts?
die Objekte von A würden mit dem selben Inhalt in B vorkommen.
»» Wie kann ich verhindern, dass in der Klasse A und B die selben Objekte liegen, oder kann man dieses nicht verhindern?
Kurz und knapp: Indem du in Klasse A und B alle Objekte selbst erstellst.
hm...
ok, dann würden aber alle Objekte mit dem gleichen Inhalt doppelt existieren
Weiterführend:
Die Frage ist, _woher_ bekommen die Klassen die Objekte von B und C.
Im Objekt A muss ich mir alle Objekte von C merken, da ich wenn Bestimmte existieren, ein Objekt B erstelle, welche genau die enthalten würde.
Wenn die Klasse A in ihrem eigenen Code Objekte von B/C erstellt, dann funktioniert das mit dem "new"-Operator. Somit ist die Instanz der Klasse B/C nur in A bekannt. Solange du diese Instanz in der Klasse A unter Verschluss hältst kommt niemand an die Objekte herran.
-> Siehe Google -> Information Hiding
werde ich mir gleich mal anschauen
Kristin
die Objekte von A würden mit dem selben Inhalt in B vorkommen.
Du musst dir wohl erst mal klar werden, was eine Klasse und eine Instanz/ein Objekt ist.
Anschließend solltest du dir überlegen, ob die Klasse A die _gleichen_ Objekte wie Klasse B besitzen soll. Also ob B auf Objekte der Klasse A arbeiten darf.
hm...
ok, dann würden aber alle Objekte mit dem gleichen Inhalt doppelt existieren
Ja, du hast ja auch geschrieben, dass B _keine_ Objekte von C aus A haben darf. Somit müssen es Objekte mit dem gleichen Inhalt sein, wenn B eine Teilmenge aus A besitzen soll.
Ich schätze aber, dass du wirklich eine Teilmenge brauchst. Somit besitzt/kennt B eine Teilmenge der C-Objekte aus der Klasse A.
-> Würde auch dem OO-Ansatz entsprechen.
Im Objekt A muss ich mir alle Objekte von C merken, da ich wenn Bestimmte existieren, ein Objekt B erstelle, welche genau die enthalten würde.
dann machst du in der Klasse A z.B.:
B b = new B(c[0], c[1], c[4]);
-> jetzt besitzt B die _gleichen_ Referenzen auf die drei C-Objekte wie die Klasse A. Aber _nur_ die drei übergebenen.
Lektüren für dich:
Google : Klasse
Google : Instanz / Objekt
Google : Referenz
Google : Information Hiding / Kapselung
Ich glaube das ist erst mal genug zum Einsteigen.
Grüße
Jojo
Anschließend solltest du dir überlegen, ob die Klasse A die _gleichen_ Objekte wie Klasse B besitzen soll. Also ob B auf Objekte der Klasse A arbeiten darf.
ja, es sind bzw. sollten eigentlich die gleichen sein
»» hm...
»» ok, dann würden aber alle Objekte mit dem gleichen Inhalt doppelt existieren
Ja, du hast ja auch geschrieben, dass B _keine_ Objekte von C aus A haben darf. Somit müssen es Objekte mit dem gleichen Inhalt sein, wenn B eine Teilmenge aus A besitzen soll.
wenn ich das geschrieben habe, war das falsch
Ich schätze aber, dass du wirklich eine Teilmenge brauchst. Somit besitzt/kennt B eine Teilmenge der C-Objekte aus der Klasse A.
-> Würde auch dem OO-Ansatz entsprechen.»» Im Objekt A muss ich mir alle Objekte von C merken, da ich wenn Bestimmte existieren, ein Objekt B erstelle, welche genau die enthalten würde.
dann machst du in der Klasse A z.B.:
B b = new B(c[0], c[1], c[4]);
-> jetzt besitzt B die _gleichen_ Referenzen auf die drei C-Objekte wie die Klasse A. Aber _nur_ die drei übergebenen.
c[0], c[1] und c[4] müßte ich doch als Liste übergeben, oder?
also [c[0], c[1], c[4]]
Lektüren für dich:
Google : Klasse
Google : Instanz / Objekt
Google : Referenz
Google : Information Hiding / Kapselung
ok, da hab ich etwas zu lesen :-)
Kristin
Hi,
Ich habe eine Klasse A, welche in ein Array Objekte von der Klasse B enthält und ein Array mit Objekte von der Klasse C.
In der Klasse B benötige ich aber auch bestimmte Objekte von der Klasse C.
"Neue" Objekte, oder Referenzen auf bestehende?
Das Objekt A würde 413 Objekte der Klasse C enthalten. Das Objekt B eine Teilmenge dieser.
Das klingt nach Referenzen in B auf bestehende C-Objekte in A.
Wie kann ich verhindern, dass in der Klasse A und B die selben Objekte liegen, oder kann man dieses nicht verhindern?
Das jetzt wiederum so, also ob du keine Referenzen, sondern jedes Mal "neue" Objekte erzeugen willst.
Deine Fragestellung ist zu unklar, um überhaupt zielführend beantwortet werden zu können.
MfG ChrisB
Hi!
Deine Fragestellung ist zu unklar, um überhaupt zielführend beantwortet werden zu können.
die Fragestellung ist leider unklar, da ich gerade erst anfange mich damit zu beschäftigen; mir fehlt sicherlich etwas Erfahrung.
Als Skriptsprache verwende ich python 2.4.
Die Objekte, die ich in B benötige sind mit dem selben Inhalt in A vorhanden bzw. werden vorhanden sein.
Im Objekt A werde ich alle Objekte von C benötigen, im Objekt B werde ich für Berechnungen bestimmte Objekte von C benötigen.
Sollte ich bei den Methoden von B, die C benötigen, alle C Objekte von A übergeben?
---
Wie realisiert man so etwas mit ein Datenbankobjekt, welches jedes Objekt benötigt?
Kristin
Hi,
Die Objekte, die ich in B benötige sind mit dem selben Inhalt in A vorhanden bzw. werden vorhanden sein.
Im Objekt A werde ich alle Objekte von C benötigen, im Objekt B werde ich für Berechnungen bestimmte Objekte von C benötigen.
Benötigst du in B wirklich die Objekte, oder nur bestimmte Eigenschaften resp. Werte, die sie besitzen?
Sollte ich bei den Methoden von B, die C benötigen, alle C Objekte von A übergeben?
Spricht denn etwas dagegen, jeweils nur exlizit die benötigten Werte zu übergeben; oder aber vielleicht auch Referenzen auf die Objekte, die diese Werte (und ggf. Methoden zum Zugriff darauf) bereitstellen?
Wie realisiert man so etwas mit ein Datenbankobjekt, welches jedes Objekt benötigt?
Erst mal genauer analysieren, was genau wo "benötigt" wird.
MfG ChrisB
Hi,
»» Die Objekte, die ich in B benötige sind mit dem selben Inhalt in A vorhanden bzw. werden vorhanden sein.
»»
»» Im Objekt A werde ich alle Objekte von C benötigen, im Objekt B werde ich für Berechnungen bestimmte Objekte von C benötigen.Benötigst du in B wirklich die Objekte, oder nur bestimmte Eigenschaften resp. Werte, die sie besitzen?
ich benötige die Methoden, welche DB-Abfragen durchführen
»» Sollte ich bei den Methoden von B, die C benötigen, alle C Objekte von A übergeben?
Spricht denn etwas dagegen, jeweils nur exlizit die benötigten Werte zu übergeben; oder aber vielleicht auch Referenzen auf die Objekte, die diese Werte (und ggf. Methoden zum Zugriff darauf) bereitstellen?
nur bestimmte Werte bringt mir nichts, da ich die Ausgabe von den Methoden benötige
»» Wie realisiert man so etwas mit ein Datenbankobjekt, welches jedes Objekt benötigt?
Erst mal genauer analysieren, was genau wo "benötigt" wird.
jedes Objekt benötigt den Zugriff auf die DB
Kristin
Hi,
ich benötige die Methoden, welche DB-Abfragen durchführen
Wieso hat jedes Objekt davon eine eigene?
jedes Objekt benötigt den Zugriff auf die DB
Dann sollte es sich an ein (ggf. globales) Objekt wenden, dessen Aufgabe die Kommunikation mit der Datenbank ist.
MfG ChrisB
Hi!
»» ich benötige die Methoden, welche DB-Abfragen durchführen
Wieso hat jedes Objekt davon eine eigene?
alle Objekte vom selben Typ haben doch die gleichen Methoden, oder irre ich mich?
In der Klasse C gibt es eine Methode z.B. getXY, diese Methode gibt entsprechend der Eigenschaften Daten aus der Datenbank zurück.
»» jedes Objekt benötigt den Zugriff auf die DB
Dann sollte es sich an ein (ggf. globales) Objekt wenden, dessen Aufgabe die Kommunikation mit der Datenbank ist.
wie meinst du das?
Kristin