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

Variablen von Superklasse in Unterklasse benutzen

 

Harald
Forum-Meister

Forum-Meister


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

Zitat:
Dann muss ich aber die Daten vom initialisierten Objekt A verändern, und jedes der 10 initiierten Objekte von B soll jetzt mit diesen veränderten Daten weiterarbeiten.

In dem Fall solltest du A als Handle-Klasse definieren. Dann wird mit einer Veränderung von A die Veränderung überall automatisch aktualisiert. Ansonsten kann es in der Tat dazu kommen, dass du temporär den doppelten Speicher brauchst.

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


MarekJosef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 10.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 15:22     Titel:
  Antworten mit Zitat      
Das mit dem handle dachte ich auch, also irgendwie eine Referenz. Doch ich habe jetzt folgendes ausprobiert:

Code:

% "A.m"
classdef A < handle
    properties
         EigenschaftA
    end
end

% "B.m"
classdef B < A
    properties
    end
   
    methods
         function obj = B(Ain)
             obj.EigenschaftA = Ain.EigenschaftA;
         end
    end  
end

% "Skript.m"
ObjektA = A;
ObjektA.EigenschaftA = 1:10;

ObjektB = B(ObjektA);
 


Ich habe Dein Beispiel etwas geändert. Ich finde das so übersichtlicher, es behält auch das ursprüngliche Klassensystem. Nur weiß ich nicht, ob das auch auf diese Weise funktioniert.

Auf jeden Fall: Wenn ich jetzt
Code:

ObjektA.EigenschaftA = 5:10;
 


mache, bleibt das ObjektB davon unberührt. Es behält 1:10. Ich wüsste auch nicht, wie Matlab das jetzt wissen sollte, dass es ObjektB automatisch aktualisieren müsste. Aber, ich denke, auch dafür gibt es eine Lösung.

PS: Ich habe das grad mit Deinem ehemaligen Beispiel probiert, da klappt es. Aber, ich finde da ist die Klassenstruktur nicht so schön gegeben. Geht das auch so, wie ich es hier geschrieben habe? Und, wieso ist bei Dir nicht mehr B als Subklasse von A definiert?

Vielen Dank!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Ich wüsste auch nicht, wie Matlab das jetzt wissen sollte, dass es ObjektB automatisch aktualisieren müsste.

Ich auch nicht. Du übernimmst ja nur eine Eigenschaft, nicht das gesamte Objekt.

Zitat:
Aber, ich denke, auch dafür gibt es eine Lösung.

Mir ist keine bekannt.

Zitat:
Aber, ich finde da ist die Klassenstruktur nicht so schön gegeben.

Ansichtssache. Man hat die eine zusätzliche Schicht, wenn man von B aus auf A zugreifen möchte, aber damit sollte man leben können.

Zitat:
Geht das auch so, wie ich es hier geschrieben habe?

Ich wüsste nicht wie.

Zitat:
Und, wieso ist bei Dir nicht mehr B als Subklasse von A definiert?

Weil ich nicht mit Vererbung arbeite, sondern mit Aggregation. Das scheint mir für deine Zwecke besser geeignet.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.01.2013, 12:16     Titel:
  Antworten mit Zitat      
Zitat:
mache, bleibt das ObjektB davon unberührt. Es behält 1:10. Ich wüsste auch nicht, wie Matlab das jetzt wissen sollte, dass es ObjektB automatisch aktualisieren müsste. Aber, ich denke, auch dafür gibt es eine Lösung.

Hallo,

Es fehlen dir die Grundsätze der Vererbung, empfehle dir dringend Literatur aufzuschlagen.

Man kann sich auch ein banales Beispiel aus dem Leben vorstellen. z.B
Ein Vater hat 2 Töchter, Zwillinge, die Kinder haben seine Haarfarbe geerbt z.b. sind beide Blond. Jetzt färbt ein Kind seine Haare in Braun um, welchen Einfluss hat das auf die andere Schwester, ändert sich ihre Haarfarbe deswegen automatisch um, weil sie ein Zwilling ist?
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2013, 09:10     Titel:
  Antworten mit Zitat      
So wie ich das verstanden habe, willst du quasi eigentlich nur eine Art von globale Variable setzen.
Für deine Zwecke würde ich das dann auch so machen.

die variable global setzen
Code:
setappdata(0,'irgendwas',irgendeinwert)


und dann in den B instanzen verwenden
Code:
irgendwas = getappdata(0,'irgendwas')


jetzt kannst sie von überall aus verändern, ob in A oder auch in B oder manuell und er rechnet beim nächsten getappdata klarerweise damit weiter...
ob dir das hilft? Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 31.03.2013, 04:19     Titel:
  Antworten mit Zitat      
[edit]
Oh, hier gabs ne zweite Seite! ich sollte ins Bett...
[/edit]

Ich kenn mich mit OO in Matlab überhaupt nicht aus ("wie? das geht?") Aber in den nicht so hohen Programmiersprachen würde ich mit einer Liste von Objekten der Klasse B arbeiten, da kann die Liste auch direkt in A drin sein (oder andersrum eine Liste von AObjekten im BObjekt).

Im Programmcode kann man dann zum erzeugten "großen" viele "kleine" via der Liste anlegen. Old School wäre ein Array, was dem ganzen Klassenkonzept den Stinkefinger zeigt, aber es gibt bestimmt auch eine schöne Lösung in Matlab.
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.