Komposition

Diskutiere Komposition im Java Basics - Anfänger-Themen Forum; Hallo, ich habe 2 Klassen gegeben: Verzeichnis und Ressource. Meine Aufgabenstellung ist: Bevor eine Ressource in ein neues Verzeichnis eingefügt...

  1. Shantox
    Shantox Mitglied
    Hallo,
    ich habe 2 Klassen gegeben: Verzeichnis und Ressource. Meine Aufgabenstellung ist: Bevor eine Ressource in ein neues Verzeichnis eingefügt werden darf, muss die aus ihrem bisherigen Verzeichnis, falls vorhanden, entfernt werden.
    Meine Frage: Wie überprüfe ich, in diesem Fall, ob eine Ressource bereits in einem Verzeichnis ist?

    Code (Java):

    public class Verzeichnis extends Ressource {
        protected Set<Ressource> inhalte;
        public Verzeichnis() {
            inhalte = new HashSet<Ressource>();
        }
        public boolean addInhalt(Ressource inhalt) {
            if (inhalte.add(inhalt)) {
                inhalt.setVerzeichnis(this);
                return true;
            }
            return false;
        }
        public boolean removeInhalt(Ressource inhalt) {
            if (inhalte.remove(inhalt)) {
                inhalt.setVerzeichnis(null);
                return true;
            }
            return false;
        }
        public Set<Ressource> getInhalte() {
            return Collections.unmodifiableSet(inhalte);
        }

    public abstract class Ressource {
        protected Verzeichnis verzeichnis;
        public Verzeichnis getVerzeichnis() {
            return verzeichnis;
        }
        public void setVerzeichnis(Verzeichnis verzeichnis) {
            if (verzeichnis != null && !verzeichnis.getInhalte().contains(this)) {
                verzeichnis.addInhalt(this);
            }
            this.verzeichnis = verzeichnis;
        }
    }
     
    Mit freundlichen Grüßen
     
  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. Kababär
    Kababär Aktives Mitglied
    Falls removeInhalt true zurückliefert? Wäre so mein Ansatz. Oder mit einer überschriebenen Equals-Methode prüfen.
     
  4. mrBrown
    mrBrown Bekanntes Mitglied
    Indem die Instanzvariable verzeichnis nutzt
     
  5. JStein52
    JStein52 Bekanntes Mitglied
    Code (Text):
    if (getVerzeichnis() != null) {
       ...
    }
     
  6. Shantox
    Shantox Mitglied
    Ich hab jetzt versucht in der addInhalt Methode die Komposition zu implementieren. Meine Idee ist es, falls die Ressource bereits in einem Verzeichnis ist, wird sie aus diesem gelöscht und in das neue Verzeichnis eingefügt.

    Code (Java):

    public boolean addInhalt(Ressource inhalt)
            if(getVerzeichnis() != null) {
                inhalt.setVerzeichnis(null);
                inhalt.setVerzeichnis(this);
            }
            else if(inhalte.add(inhalt)) {
                inhalt.setVerzeichnis(this);
                return true;
            }
            return false;
        }
     
    inhalt.setVerzeichnis(null); ist nicht ganz korrekt oder? Damit tue ich ja das "aktuelle" Verzeichnis referenzieren und nicht das was gelöscht werden muss richtig?
     
  7. mrBrown
    mrBrown Bekanntes Mitglied
    inhalt.setVerzeichnis(null); ist einfach überflüssig, da du es direkt danach auf this setzt.
    Allerdings ist dein if falsch - da musst du inhalt.getVerzeichnis() nutzen
     
  8. Shantox
    Shantox Mitglied
    Aber irgendwie muss ich die Ressource doch aus dem aktuellen Verzeichnis löschen und in das neue packen. Mit inhalt.setVerzeichnis(this) stecke ich die Ressource ja ins neue Verzeichnis. Lediglich das löschen aus dem alten Verzeichnis fehlt richtig?
     
  9. mrBrown
    mrBrown Bekanntes Mitglied
    Ja, das fehlt noch
     
  10. Shantox
    Shantox Mitglied
    verzeichnis.removeInhalt(Inhalt);

    Lösche ich die Ressource damit aus dem alten Verzeichnis?
     
  11. mrBrown
    mrBrown Bekanntes Mitglied
    Ja, das sollte gehen
     
  12. Shantox
    Shantox Mitglied
    Es klappt immer noch nicht wirklich. Die Ressource wird nicht aus dem alten Verzeichnis gelöscht. hmm
     
  13. mrBrown
    mrBrown Bekanntes Mitglied
    Wie versuchst du es denn?
     
  14. Shantox
    Shantox Mitglied
    Code (Java):

    public boolean addInhalt(Ressource inhalt) {
            if(inhalte.add(inhalt) && inhalt.getVerzeichnis() == null) {
                inhalt.setVerzeichnis(this);
                return true;
            }
            else if(inhalt.getVerzeichnis() != null && inhalte.add(inhalt)) {
                verzeichnis.removeInhalt(inhalt);
                inhalt.setVerzeichnis(this);
                return true;
            }
            return false;
        }
     
    So. Es funktioniert sonst alles bis aufs löschen
     
  15. mrBrown
    mrBrown Bekanntes Mitglied
    Mit verzeichnis.removeInhalt(inhalt); löscht du die Ressource aus dem Verzeichnis, in dem dein Verzeichnis, dem du die Resource hinzufügen willst, liegst. Du solltest die Ressource aber aus dem Verzeichnis, in dem sie liegt, löschen
     
  16. Shantox
    Shantox Mitglied
    Kannst du mir nen kleinen Tipp geben? :/ Ich blick grad nicht durch.
     
  17. Harry Kane
    Harry Kane Bekanntes Mitglied
    Das gehört an den Anfang deiner addInhalt-Methode:
    Code (Java):

    Verzeichnis altesVerzeichnis = inhalt.getVerzeichnis();
    if(altesVerzeichnis != null){
        altesVerzeichnis.removeInhalt(inhalt);
    }
     
     
  18. Schau dir jetzt hier den Kurs an und lerne Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)
Die Seite wird geladen...

Komposition - Ähnliche Themen

Codeumsetzung einer Komposition
Codeumsetzung einer Komposition im Forum Hausaufgaben
Aggregation und Komposition programmieren?
Aggregation und Komposition programmieren? im Forum Java Basics - Anfänger-Themen
Komposition
Komposition im Forum Java Basics - Anfänger-Themen
Implementierung Komposition, Aggregation, Assoziation und Generalisierung
Implementierung Komposition, Aggregation, Assoziation und Generalisierung im Forum Java Basics - Anfänger-Themen
Frage zu Farb-Komposition
Frage zu Farb-Komposition im Forum AWT, Swing, JavaFX & SWT
Thema: Komposition