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

Dem Constructor Referenzen von anderen Objekten übergeben

 

Milo
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 19.03.09
Wohnort: KA
Version: ---
     Beitrag Verfasst am: 24.08.2011, 11:46     Titel: Dem Constructor Referenzen von anderen Objekten übergeben
  Antworten mit Zitat      
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
 


Hiermit kann ich nun folgendes machen:
Code:

>> p=SpatialPoint(1, 10, 20, 30);
>> q=SpatialPoint(2, 10, 40, 30);
>> p.getDistance(q)

ans =

    20
 

Das funktioniert soweit.

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

    end
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! Wink

Schöne Grüße
Milo
_________________

Die Geodäten - Portal für Vermesser und Geoinformatiker || Freie Ausgleichungssoftware
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: 24.08.2011, 14:07     Titel:
  Antworten mit Zitat      
Hallo,

der Debugger sollte helfen, das Problem zu lösen.

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.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 19.03.09
Wohnort: KA
Version: ---
     Beitrag Verfasst am: 24.08.2011, 15:47     Titel:
  Antworten mit Zitat      
Hallo Harald,

Harald hat Folgendes geschrieben:
der Debugger sollte helfen, das Problem zu lösen.


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...

Schöne Grüße
Milo
_________________

Die Geodäten - Portal für Vermesser und Geoinformatiker || Freie Ausgleichungssoftware
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: 24.08.2011, 17:57     Titel:
  Antworten mit Zitat      
Hallo,

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.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 19.03.09
Wohnort: KA
Version: ---
     Beitrag Verfasst am: 25.08.2011, 08:14     Titel:
  Antworten mit Zitat      
Hallo,

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.

Gruß Milo
_________________

Die Geodäten - Portal für Vermesser und Geoinformatiker || Freie Ausgleichungssoftware
Private Nachricht senden Benutzer-Profile anzeigen
 
Milo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 19.03.09
Wohnort: KA
Version: ---
     Beitrag Verfasst am: 08.09.2011, 11:11     Titel:
  Antworten mit Zitat      
... in Matlab 2011 ist das genannte Problem nicht mehr vorhanden. Ursache war demnach wohl wirklich die Matlab-Version.

Schöne Grüße
_________________

Die Geodäten - Portal für Vermesser und Geoinformatiker || Freie Ausgleichungssoftware
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.