Verfasst am: 08.05.2008, 07:34
Titel: OOP in 2007a - statische Methoden, aber wie?
Hallo,
ich habe eine Frage an die OOP Programmierer.
In Matlab2008a ist die OOP Ansatz dem User komplett geboten. Ich habe rausgefunden, dass manche OOP Features von 2008a bereits in 2007b implementiert sind. Zb. erstellung einer Klasse mittels classdef Schlüsselwortes ...
Das ist beispiel einer einfacher Klasse Stack für die speicherung der Daten. Diese Klasse funktioniert in Matlab 2007a.
properties length; % stack size in rows full= 0; % indicates if full
data = [];
nRow = 0; % actual amt of stack rows
style = 1; % FILO = 1 LIFO = 2 end
if this.nRow == 0
this.data = inData; % fill stack for first time elseif this.style == 1 if this.nRow <= this.length-1
this.data = vertcat(inData, this.data); % concatenate data vertically elseif this.nRow >= this.length
this.data(this.nRow,:) = []; % delete last position data
this.data = vertcat(inData, this.data); % concatenate data vertically end elseif this.style == 2 if this.nRow <= this.length-1
this.data = cat(1,this.data ,inData); % concatenate data elseif this.nRow >= this.length
this.data(1,:) = []; % delete first position data
this.data = cat(1, this.data,inData); % concatenate data end end
ja, mit persistent (bezogen auf variable) kann mein Problem nicht gelösst werden.
Die statische Methoden sind Methoden die sich innerhalb einer Klasse befinden, aber keine Instanz der Klasse als Argument benötigen.
Die Funktion "pushData(this, inData)" benötigt ein Objekt der Klasse Stack (in diesem fall unter "this" zu finden). Die Funktion "testFunction()" benötigt das Objekt "this" nicht.
Wenn ich eine Funktion in der Klasse definiere ist sie automatisch mit der Klasse verbunden und sie velangt nach eigener Instanz. Mit statischen Methoden kann man dieses Verhalten umgehen. Leider ist es in 2007a noch nicht implementiert.
Hallo Joekey,
du hast recht, dachte, dass man die Funktionen direkt aufrufen kann,
da sie je in einem Klassen-Ordner liegen.
Falsch gedacht,
Matworks hat wirklich erst ab 2008a die OOP komplett überarbeitet.
edit:
Ansonsten wurde ich vorschlagen, die Methode außerhalb der Klasse zu definieren. Das wäre im Prinzip sichtbar in der Klasse und auch sonst in Matlab
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
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.