|
|
Variablen von Superklasse in Unterklasse benutzen |
|
MarekJosef |
Forum-Anfänger
|
|
Beiträge: 36
|
|
|
|
Anmeldedatum: 10.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2013, 10:49
Titel: Variablen von Superklasse in Unterklasse benutzen
|
|
Hallo!
Ich habe folgendes Problem: ich habe zwei Klassen "A" und "B", A ist die Superklasse von B. Ich möchte jetzt in B Methoden definieren, welche Properties aus A benutzt. Folgendes habe ich programmiert (gekürzt auf das wesentliche):
Ich denke mir, mein Problem liegt in der Objekterzeugung. Dies habe ich so gemacht:
Ich muss Matlab jetzt ja noch irgendwie sagen, dass ObjektB die Unterklasse von ObjektA ist, und ObjektB die Daten von ObjektA verwerden kann. Wurde leider nicht fündig, wie das geht.
Viele Grüße und vielen Dank!
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 11.01.2013, 11:06
Titel:
|
|
Hallo,
du solltest bei Objekten der Klasse B auf vererbte Eigenschaften mit
zugreifen können.
Im Grunde genauso, als ob du die Eigenschaft für die Klasse B definieren würdest.
Grüße,
Harald
|
|
|
MarekJosef |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 36
|
|
|
|
Anmeldedatum: 10.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2013, 12:02
Titel:
|
|
Aber Matlab weiß doch gar nicht, dass meine erzeugte Klasse ObjektB die Unterklasse von ObjektA ist.
Wie würde das denn in meinem Code aussehen, bitte mit Initialisierung der Objekte.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 11.01.2013, 12:39
Titel:
|
|
Hallo,
sprichst du jetzt von Klassen oder von den Instanzen der Klassen, den Objekten?
Was die Klassen angeht: mit classdef B < A wird festgelegt, dass B von A vererbt wird. Instanzen von B übernehmen somit auch die Properties und Methods von A, sofern sie nicht explizit umdefiniert oder erweitert werden.
Was die daraus erzeugten Objekte, also die Instanzen angeht: ObjektA und ObjektB sind vollkommen unabhängig voneinander. Es gibt meines Wissens keine Möglichkeit, vom einen auf das andere zuzugreifen. Ich sehe darin auch keinen Sinn.
Du brauchst gar kein Objekt der Klasse A, sondern kannst direkt in der Klasse B mit den aus A vererbten Eigenschaften arbeiten.
Grüße,
Harald
|
|
|
MarekJosef |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 36
|
|
|
|
Anmeldedatum: 10.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2013, 13:17
Titel:
|
|
Ich finde, das würde ganz viel Sinn machen, wenn man Instanzen A und B zueinander ordnen könnte.
Mein Fall ist so: Ich werde viele Instanzen der Klasse B haben, diese in einem Vektor abspeichern. Aber, all diese verschiedenen Instanzen von B sollen alle genau die gleiche Instanz von A als Superklasse haben. Das heißt z.B. 100 Instanzen von B und nur eine Instanz von A. Das wäre ja jetzt doof, wenn ich auch 100 mal A als Instanz aufrufen muss, weil diese immer die gleichen Werte hätte.
Das muss doch irgendwie funktionieren. Das frisst mir doch den Speicher leer.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 11.01.2013, 13:59
Titel:
|
|
|
|
|
Hallo,
Zitat: |
Ich finde, das würde ganz viel Sinn machen, wenn man Instanzen A und B zueinander ordnen könnte. |
A und B sind ja einander zugeordnet, nur ObjektA und ObjektB nicht. Da also bitte wirklich aufpassen, wovon man redet.
Das Zuordnen der Objekte ist meines Wissens in dieser Form nicht möglich. Man könnte jedoch A als Handle-Klasse (damit die Kopien vermieden werden) definieren und B nicht von A vererben, sondern diese Information als Eigenschaft von B definieren, die von der Klasse A ist (geht in Richtung Aggregation).
Zitat: |
Mein Fall ist so: Ich werde viele Instanzen der Klasse B haben, diese in einem Vektor abspeichern. Aber, all diese verschiedenen Instanzen von B sollen alle genau die gleiche Instanz von A als Superklasse haben. Das heißt z.B. 100 Instanzen von B und nur eine Instanz von A. Das wäre ja jetzt doof, wenn ich auch 100 mal A als Instanz aufrufen muss, weil diese immer die gleichen Werte hätte. |
Was ich dann vorschlagen würde: die Klasse B so aufzubauen, dass du statt mit Vektoren von Instanzen mit einer Instanz arbeitest, die Vektoren von Daten beinhaltet.
Grüße,
Harald
|
|
|
MarekJosef |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 36
|
|
|
|
Anmeldedatum: 10.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2013, 14:13
Titel:
|
|
Könntest Du mir bitte das mal in meinem Code aufzeigen, was ich da jetzt ändern muss?
Was ich aber nicht will, ist, dass die EigenschaftA als eine Eigenschaft in der Klasse B definiert wird. Das soll der Übersichtlichkeit getrennt bleiben. Würde gerne das mit den Referenzen aufgreifen.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 11.01.2013, 14:21
Titel:
|
|
Hallo,
das ist nicht in ein paar Zeilen getan.
Zum ersten Vorschlag noch genauer: die Implementierung von A und B bliebe trotzdem getrennt. Im Konstruktor von B (du hast noch keinen) würde dann festgelegt, welches ObjektA dem ObjektB zugeordnet wird.
Grüße,
Harald
|
|
|
MarekJosef |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 36
|
|
|
|
Anmeldedatum: 10.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.01.2013, 14:39
Titel:
|
|
Danke, aber ich versteh das jetzt noch immer nicht ganz. Das Klassenkonzept ist doch nicht so toll, wie ich anfangs fand.
Ich finde das unlogisch, dass man Instanzen nicht andere Instanzen als Unterinstanz zuweisen kann. Das erleichtert doch vieles.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 11.01.2013, 16:09
Titel:
|
|
Hallo,
kannst du doch, aber eben als Eigenschaft.
Dein Beispiel ist zu minimal, um da mit ein paar Zeilen etwas machen zu können.
Ich schau mal, ob ich da demnächst ein Beispiel zusammenstellen kann.
Grüße,
Harald
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.01.2013, 10:33
Titel:
|
|
Hallo,
habe nun doch ein recht einfaches Beispiel gefunden:
Aufruf:
Grüße,
Harald
|
|
|
MarekJosef |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 36
|
|
|
|
Anmeldedatum: 10.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.01.2013, 12:05
Titel:
|
|
Vielen Dank, ich werds dann mal ausprobieren
|
|
|
MarekJosef |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 36
|
|
|
|
Anmeldedatum: 10.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.01.2013, 11:18
Titel:
|
|
Ich habs jetzt mal ausprobiert. Und, ich zweifel da noch etwas daran, dass der Speicherbedarf nicht ansteigt.
Ich habe das Objekt B zum ersten Mal initialisiert. Im Workspace kann ich dessen Größe in Bytes ablesen. Das wären bei Deinem Beispiel ca. 80 Millionen Bytes.
Wenn ich jetzt B(2) initialisiere, hat B nun den doppelten Platz, also ca. 160 Millionen Bytes.
Ich habe dies auch im Taskmanager unter "Performance" und dann "Memory", der physical memory, nachgeschaut. In der Tat wächst da der Speicher nur einmalig bei der Initialisierung von A auf, bei weiteren Initialisierungen von B bleibt diese Memory gleich.
Könntest Du mir bitte das Erklären, warum im Workspace von Matlab trotzdem die Bytes angezeigt werden und diese aber nicht in die Memory eingehen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.01.2013, 11:26
Titel:
|
|
|
|
MarekJosef |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 36
|
|
|
|
Anmeldedatum: 10.10.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.01.2013, 11:38
Titel:
|
|
Ich hoffe, ich nerve Dich nicht .
Vielen Dank erst mal für die Antwort.
Was wäre denn jetzt, wenn ich z.B. 10 Objekte von B initialisiere, alle mit den gleichen Daten von A. 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.
Die Objekte B sollte ich aber nicht neu initialisieren, da diese weitere Daten beinhalten, die ich mit den Anfangsdaten vom Objekt A berechnet hab, und die ich weiterverwenden möchte.
Ich könnte ja auf ObjB.AinB.EigenschaftA zugreifen und die alten Daten überschreiben. Aber, ist da Matlab noch immer so schlau, dass es merkt, dass es all die gleichen Daten sind? Ich glaube doch eher nicht.
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|