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

OOP in 2007a - statische Methoden, aber wie?

 

joekey
Forum-Century

Forum-Century


Beiträge: 169
Anmeldedatum: 03.04.08
Wohnort: Wien
Version: 2011b
     Beitrag Verfasst am: 08.05.2008, 08:34     Titel: OOP in 2007a - statische Methoden, aber wie?
  Antworten mit Zitat      
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.
Code:
classdef stack < handle
    % STACK

    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

    methods
        function this = stack(length, style)
            this.length = length;
            this.style = style;
        end  
        function pushData(this, inData)

            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

            this.nRow = size(this.data,1);                          % count stack rows

            if this.nRow == this.length
                this.full = 1;                                      % stack is full?
            end
        end
    end
   
    methods(Static)
        function testFunction()
            disp('bin drinnen');
        end
    end
end


Und hier test der Klasse Stack

Code:
% objekt der klasse stack intantieren
st = stack(4,1);

% objekt mit daten befüllen
for i=1:5
    st.pushData([i 2 3 4 5]);
end

% objekt mit daten befüllen
stackPush(st, [9 9 9 9 9]);

%inhalt ausschreiben
st.data


Ich bräuchte aber auch die statischen Methoden. In 2008a werden sie folgendermaßen definiert.
Code:

class Name

   methods (Static)
        function name...
        end
   end
end


Schlüsselwort "Static" wird aber leider in 2007b nicht erkannt!

Meine Frage: ist es vielleicht jemandem gelunden statische Methoden in 2007b anders zu definieren?

Vielen dank für eure Ideen.

LG Joe
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 08.05.2008, 08:40     Titel:
  Antworten mit Zitat      
Hallo,
schaue dir persistent an.

edit:
Ich glaube, ich habe was verwechselt. Methoden glaube sind in älteren Versionen sind bereits statisch.
Private Nachricht senden Benutzer-Profile anzeigen
 
joekey
Themenstarter

Forum-Century

Forum-Century


Beiträge: 169
Anmeldedatum: 03.04.08
Wohnort: Wien
Version: 2011b
     Beitrag Verfasst am: 08.05.2008, 10:37     Titel:
  Antworten mit Zitat      
Hallo Denny,

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.

LG Joe
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 08.05.2008, 11:55     Titel:
  Antworten mit Zitat      
Hallo Joekey,
du hast recht, dachte, dass man die Funktionen direkt aufrufen kann,
da sie je in einem Klassen-Ordner liegen.
Falsch gedacht, Sad

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