WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Handle-Objekt überlebt: Warum?

 

jupiter
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 30.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2013, 11:05     Titel: Handle-Objekt überlebt: Warum?
  Antworten mit Zitat      
Hallo zusammen,

ich nutze zum ersten Mal die OOP in Matlab. Dabei hat sich mir ein Problem aufgetan, das ich selber bisher leider nich lösen konnte, ich hoffe ihr könnte mir weiterhelfen. Es geht um Folgendes:

Ich habe eine handle-Klasse A und A hat als property eine andere handle-Klasse B.

Ich instanziere A, arbeite damit und wende am Schluss clear an. Wenn ich dann wieder A instanziere, existieren die Daten in B weiterhin, obwohl ich das gar nicht will.
Eine besondere Destruktor Methode habe ich jeweils nicht definiert und delete wende ich auch nicht an. Bisher dachte ich, dass clear ausreicht um den Workspace sauber zu machen und danach von neuem zu starten.

Anscheind mache ich etwas nicht richtig, nur was?


Vielen Dank für Eure Hilfe!

Schöne Grüße,
jupiter
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2013, 11:13     Titel:
  Antworten mit Zitat      
Hallo,

bitte ein Code-Beispiel anstatt einer Beschreibung dessen, was du machst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jupiter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 30.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2013, 11:17     Titel:
  Antworten mit Zitat      
Klasse A entspricht "Management" und B "Anlagenverbund.MILPmodelRepo":

Code:
classdef Management

    properties
        MILPmodelRepo = Anlagenverbund.MILPmodelRepo;
    end
   
    methods        
        addBHKW(obj, BHKWmodell);
    end
   
end


Nochmal kurz zusammengefasst: Wenn ich A instanziere, damit arbeite, clear anwende und A erneut instanziere, dann existieren die Daten in B weiter. Das möchte ich nicht, sondern B soll es nur so lange geben, so lange es A gibt.
Wie mache ich das?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2013, 12:01     Titel:
  Antworten mit Zitat      
Hallo,

dem Beispiel zufolge wäre Management keine Handle-Klasse.

Kann es sein, dass die Information gar nicht erhalten bleibt, sondern bei der nächsten Instanziierung neu ermittelt wird?

Falls das ausgeschlossen ist, fällt mir auf Anhieb nichts weiter an. Dann wäre die Bitte, ein komplett lauffähiges Beispiel zu posten, d.h. beide Klassen und den Code, wie du mit diesen Klassen arbeitest.
Mir ist klar, dass du nicht unbedingt dein gesamtes Projekt posten willst, aber du kannst ja alles herausnehmen bzw. durch Dummy-Code ersetzen, was nicht benötigt wird, um das Problem zu reproduzieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jupiter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 30.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2013, 12:06     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort!

Das habe ich übersehen. Wenn ich aber aus Management eine handle Klasse mache, funktioniert es leider trotzdem nicht wie gewünscht Smile

Aber mit folgendem Code funktioniert es jetzt:

Code:
classdef Management < handle

    properties
        MILPmodelRepo = [];
    end
   
    methods
        function obj = Management
            obj.MILPmodelRepo = Anlagenverbund.MILPmodelRepo;
        end
       
        function delete(obj)
            delete(obj.MILPmodelRepo);
        end
       
        addBHKW(obj, BHKWmodell);
    end
   
end


Frage am Rande: Ist die destruktor Methode erwünscht, um dieses Objekt im Objekt zu "löschen" (im Sinne von guter Programmierstil, damit keine unnötigen Daten übrigbleiben)? Weil es funktioniert auch ohne diese.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2013, 22:30     Titel:
  Antworten mit Zitat      
Hallo,

ich würde Methoden nur dann überladen, wenn es notwendig ist. Warum würdest du explizit etwas angeben, was ohnehin gemacht wird?

Sinnvoll ist ein Überladen der delete-Methode, wenn z.B. eine Datei oder eine Verbindung zu einer Datenbank geschlossen werden soll. Das sind nämlich Dinge, die nicht automatisch passieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jupiter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 30.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2013, 22:31     Titel:
  Antworten mit Zitat      
Ok, danke schön!

Schöne Grüße,
jupiter
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.