Softwareentwickler MATLAB/Simulink (w/m) Erarbeitung von Lösungen im Bereich der Schnittstelle zum Simulink-Modell und der Benutzeroberfläche von TargetLinkdSPACE GmbH - Paderborn
Verfasst am: 24.08.2011, 11:46
Titel: Dem Constructor Referenzen von anderen Objekten übergeben
Hallo,
ich habe hier Matlab2007b (RedHat) und versuche mich gerade ein wenig in die OOP von Matlab einzuarbeiten. Hierzu habe ich mir die Einführung angesehen. Mein erster Versuch war soweit auch zielführend. Ich habe eine Klasse für 3D-Punkte erstellt und der eine Methode zur Bestimmung des Abstandes zu einem weiteren Punkt gegeben:
Code:
classdef SpatialPoint
properties
x
y
z
id
end
methods
function obj=SpatialPoint(ID, X, Y, Z)
obj.id = ID;
obj.x = X;
obj.y = Y;
obj.z = Z;
end
function dist=getDistance(this, point2)
dist = sqrt((this.x-point2.x)^2 + (this.y-point2.y)^2 + (this.z-point2.z)^2);
end end end
Nun habe ich eine weitere Klasse definiert, die zum Instanziieren zwei Punktobjekte (f1 und f2) benötigt.
Code:
classdef SpatialEllipse
properties
f1
f2
plane
a
id
end
methods
function obj=SpatialEllipse(id, f1, f2, plane, a)
obj.id = id;
obj.f1 = f1;
obj.f2 = f2;
obj.plane = plane;
obj.a = a;
end
mit diesem konnte ich dann meine beiden Punktreferenzen übergeben und ein Ellipsenobjekt erzeugen:
Code:
ellipse=SpatialEllipse(1, p, q, 5, 4)
... das ganze funktioniert jedoch nur solange, bis ich Matlab einmal neu gestartet habe. Wenn ich jetzt versuche, die Instanz zu erzeugen, erhalte ich eine Fehlermeldung:
Zitat:
??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit. Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.
Error in ==> SpatialEllipse
Durch was wird diese Rekursion denn ausgelöst? An der Klasse habe ich nichts geändert. Werden die Klassen, die man erzeugt, noch woanders vorgehalten? Im Moment speichere ich sie in einem Unterverzeichnis von meinem Arbeitsverzeichnis. Ich frage deshalb, weil ich manchmal das Gefühl habe, dass Änderungen an den Klassen nicht direkt verfügbar sind sondern erst nach einem Neustart von Matlab. Gibts hier ggf. einen Befehl, den Klassen-Cache - sofern vorhanden - zu leeren?
Sollte ich mein Problem unzureichend beschrieben haben, bitte kurz Bescheid geben; ansonsten freue ich mich über einen Hinweis zur Problembewältigung!
Im übrigen wurde die Objektorientierte Programming in MATLAB mit 2008a grundlegend überarbeitet und verbessert; ich empfehle also den Umstieg auf eine neuere Version von MATLAB.
Mein gezeigter Quellcode ist/war vollständig. Ich kann nicht erkenne, wie er mir weiterhelfen könnte.
Harald hat Folgendes geschrieben:
Objektorientierte Programming in MATLAB mit 2008a grundlegend überarbeitet
Ich habe diesen Beitrag gefunden, wo das selbe Problem beschrieben wird. Eine Lösung für Matlab 2007 scheint es demnach nicht zu geben bzw. die dort präsentierte finde ich eher umständlich.
Wobei ich mich frage, warum es funktioniert, solange ich Matlab nicht Neustarte...
das Verwenden des Debuggers hat nichts mit Vollständigkeit des Codes zu tun. Er ermöglicht dir nur, an bestimmten Stellen des Codes anzuhalten und nachzuvollziehen, was gerade vor sich geht.
Das mit dem Neustart ist mir allerdings auch schleierhaft. Vor allem: wie soll sich ein Neustart von MATLAB von einem kompletten Neustart des Rechners (so wie ich dich verstehe, geht es dann wieder?) unterscheiden?
Zusatz: ich habe es eben mit 2009a versucht (p=q=1) und hatte auch nach Neustart von MATLAB keine Probleme.
beim Neustart haben wir uns ggf. falsch verstanden. Wenn die Klasse in der Matlab-Instanz aufrufe, in der ich sie erstellt habe, funktioniert sie. Wenn ich Matlab zwischenzeitlich aus und wieder an mache, bekomme ich diese Fehlermeldung. Der Rechner (ein Server) wird hierzu nicht neugestartet.
Wenn Du p=q=1 setzt, funktioniert es. Instanzen mit primitiven Instanzvariablen gehen; Probleme machen nur (selbsterstellte) Objekte. Das scheint aber wirklich an der Version von Matlab zu liegen, wie der verlinkte Beitrag in meinem letzten Posting zumindest suggeriert.
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
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.