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

Object handling

 

demibreton
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 26.10.12
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 27.11.2012, 10:28     Titel: Object handling
  Antworten mit Zitat      
Hallo,

ich erstelle in einer Routine ein Objekt einer Klasse, dass ich dann in ein Cell Array speichere. Die Erstellung des Objekts läuft über eine Schleife, die immer weiter neue Objekte erstellt. Ich möchte dem Objekt nur einen Hilfsnamen geben, bis es im Cell Array gespeichert ist und den Namen nicht in der Schleife hochzählen.
Das Problem ist jetzt, dass er jedesmal bei der Erstellung eines neuen Objektes die alten im Cell Array aktualisiert und die Werte des neuen Objektes zuweist. Wie kann ich das verhindern?

Danke schonmal im Voraus!
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: 27.11.2012, 11:12     Titel:
  Antworten mit Zitat      
Hallo,

es wäre gut, die Fragen möglichst konkret zu stellen und am besten mit einem Code-Beispiel die Problematik darzustellen.

Meine Vermutung ist, dass du mit Handle-Klassen (vererbt von Klasse Handle) arbeitest und Anweisungen der Form instanz2=instanz1 verwendest. Da Handle-Klassen mit Referenzen arbeiten, wird dann mit instanz1 auch instanz2 automatisch mitgeändert und umgekehrt.
Ist das soweit richtig?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 26.10.12
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 27.11.2012, 11:18     Titel:
  Antworten mit Zitat      
Kann sein, dass das Handle Klassen sind. Ich bin noch recht neu im Umgang mit objektorientierter Programmierung in Matlab. Ein Codebeispiel lässt sich schlecht posten, aber ich kann nochmal versuchen grob zu umreissen was passiert.

Das Objekt wird erstellt => Übergabe an Methode 'Berechnung' => Methode 'Berechnung' berechnet Größen und schreibt sie ins Objekt => Methode 'Berechnung' gibt Objekt zurück => Objekt wird in Cell Array gespeichert => Schleife wird erneut durchlaufen (Objekt wird mit gleichem Namen wieder erstellt, usw.)

Nach mehrmaligen DUrchlauf der Schleife habe ich nur identische Objekt im Cell Array.
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: 27.11.2012, 11:24     Titel:
  Antworten mit Zitat      
Hallo,

wie sieht die Klassendefinition (erste Zeile der Klasse) aus?
Code:
Steht da etwas wie < handle ?

Wie wird das Objekt erstellt?
Ohne genauere Infos wird es schwierig sein, dir zu helfen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 26.10.12
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 27.11.2012, 11:28     Titel:
  Antworten mit Zitat      
Den code für die Klasse kann ich posten. Der sieht so aus:

Code:

classdef solloc
    %SOLLOC Summary of this class goes here
    %   Detailed explanation goes here
   
    properties (SetAccess = private)
        mass;
        ptot;
        pstat;
        qdot;
        y;
        temp;
        velo;
        rho;
        equival;
        WOI;
        hv;
        prob;
    end
   
    methods
        function solobj = solloc(nl, ns)
            solobj.mass = zeros(nl,1);
            solobj.ptot = zeros(nl,1);
            solobj.qdot = zeros(nl,1);
            solobj.y = zeros(nl,ns);
            solobj.pstat = zeros(nl,1);
            solobj.temp = zeros(nl,1);
            solobj.velo = zeros(nl,1);
            solobj.rho = zeros(nl,1);
            solobj.equival = zeros(1,1);
            solobj.WOI = zeros(1,1);
            solobj.hv = zeros(1,1);
            solobj.prob = zeros(1,1);
        end
 
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: 27.11.2012, 11:42     Titel:
  Antworten mit Zitat      
Hallo,

mich wundert dieses Verhalten.

Ich fürchte, ohne den Code, der die Objekte erstellt, werden wir nicht weiterkommen. Ein Minimalbeispiel würde ja reichen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 26.10.12
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 27.11.2012, 11:48     Titel:
  Antworten mit Zitat      
Die Objekterstellung mittels constructor sieht so aus:

Code:

solobj = solloc(nl,ns)
 


dann werden dem objekt in der Berechnungsmethode die richtigen werte zugeordnet. Dies geschieht im moment noch über
Code:

solobj.property = wert;
 

bin das aber gerade zwecks kapselung auf zuweisung über set-methoden am umschreiben
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: 27.11.2012, 12:52     Titel:
  Antworten mit Zitat      
Hallo,

du hast ja dein Cell Array mit den Objekten. Ist sicher gestellt, dass die Berechnungsmethode auch wirklich nur auf den Inhalt einer Zelle und nicht etwa das gesamte Cell Array von Objekten angewendet wird?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 26.10.12
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 27.11.2012, 12:56     Titel:
  Antworten mit Zitat      
Hallo,

die Methode bekommt nur das einzelne Objekt übergeben, ändert es, gibt es wieder zurück und dann wird es erst ins Cell Array gepackt.

Grüße
Florian
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: 27.11.2012, 13:06     Titel:
  Antworten mit Zitat      
Hallo,

und dabei werden dann wirklich Zellen geändert, die nicht angesprochen werden? Kann ich mir so fast nicht vorstellen.
Ich fürchte, dass zumindest ich nicht weiterhelfen kann, ohne wirklich ein komplettes (evtl. vereinfachtes) Beispiel zu sehen, an dem das Problem auftritt.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 26.10.12
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 27.11.2012, 14:22     Titel:
  Antworten mit Zitat      
Habs jetzt anders gelöst. Ich erzeuge jetzt direkt das Objekt schon mit den Indizes, die es im Array hat:

Code:

solobj{i,j,k} = solloc(nl,ns);
 


So ist jedes Objekt einzeln ansprechbar und ich laufe nicht mehr Gefahr, was zu überschreiben. Obs besser ist, weiß ich allerdings nicht.
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: 27.11.2012, 14:52     Titel:
  Antworten mit Zitat      
Hallo,

funktioniert das denn jetzt? Wenn ja, passt's ja.

Wie hast du dein solobj denn vorher in das Cell Array gebracht?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 26.10.12
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 27.11.2012, 14:56     Titel:
  Antworten mit Zitat      
Jetzt klappts soweit. Vorher wurde das solobj einzeln erstellt, berechnet und dann an eine Stelle im Cell Array zugewiesen.
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.