Kristin: Doppelte Objekte

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

  1. 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

    1. »» 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

      1. 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

        1. 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

  2. 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

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. 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

      1. 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

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. 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

          1. 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

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
            1. 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