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

Methods der superclass in subclass aufrufen

 

sierkt
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 31.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2009, 14:41     Titel: Methods der superclass in subclass aufrufen
  Antworten mit Zitat      
Hallo,
ich habe folgendes Problem:

Ich habe eine Klasse "Punkt" erstellt mit einer constructor method.
Des Weiteren habe ich Unterklassen erstellt, "Unterpunkt_A", "Unterpunkt_B" und "Unterpunkt_C".
Jetzt möchte ich folgendes machen. Unter methods der Klasse "Punkt" soll eine Funktion definiert werden, die von den Unterklassen benutzt werden kann, jedoch nicht benutzt werden muss. Diese Funktion heißt:
fcoordinate = formatcoordinate(coordinate)
Wenn ich die Funktion in einer separaten .m-File speichere und in den Unterklassen aufrufe funktioniert das auch alles.
Ich möchte die Anzahl der Dateien meines Programm jedoch so gering wie möglich halten, daher soll die Funktion in die Klasse "Punkt". Ist dieses möglich? Und wenn ja, wie rufe ich diese Funktion der Klasse "Punkt" in der Unterklasse auf.
Diese Funktion wird in der Constructor Method der Unterklasse benötigt.
In der Matlab Hilfe habe ich schon gefunden, dass beim Aufruf das @-Zeichen benutzt werden soll. Dieses funktioniert bei mir auch, wenn ich den Constructor der Hauptklasse aufrufe. Ich bekomme es jedoch nicht bei dieser angesprochenen Funktion hin.

Wäre super wenn mir jemand helfen könnte!

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2009, 15:08     Titel:
  Antworten mit Zitat      
Hallo,

soweit ich weiss, stehen die Methoden einer Klasse in ihren vererbten Klassen zur Verfügung, ohne dass weiteres Zutun notwendig ist. Was passiert denn, wenn du einfach versuchst, die Methode aufzurufen?

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 31.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2009, 15:10     Titel:
  Antworten mit Zitat      
Dann kommt in Matlab die Fehlermeldung, dass die Function bzw. Method nicht definiert ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2009, 15:19     Titel:
  Antworten mit Zitat      
Hallo,

da weiss ich auch erstmal nicht weiter. Kannst du evtl den Code bzw. die relevanten Teile davon posten?

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 31.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2009, 15:23     Titel:
  Antworten mit Zitat      
Vielen Dank.
Werde ich gleich Montag machen. Habe den Code leider momentan nur im Büro.

Gruß,
Sierk
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 31.10.2009, 19:02     Titel:
  Antworten mit Zitat      
Hallo,

ein paar Anmerkungen (ich gebe Harald recht, ohne Code schwierig).
- die Methode muss public oder protected sein
- das @ braucht man nur, wenn man in der abgeleiteten Klasse die Methode überlagert und die Methode der Basisklasse aufrufen will
Code:
% abgeleitete Klasse:
function someMethod()
% rufe Methode der Basisklasse auf:
someMethod@Basisklasse();
 

ansonsten sollte die Funktion bekannt sein (schließlich ist das eins DER Eigenschaften objektorientierter Programmierung).

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
sierkt
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 31.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2009, 15:16     Titel:
  Antworten mit Zitat      
Hallo!
So, hier kommt jetzt erstmal der Code der Basisklasse "Punkt":

Code:
classdef cPunkt
       
    properties
        Name='';                            
        Type='';                            
        AreaCode='';                      
        Latitude;                        
        Longitude;                          
        MagneticVariation;                
        ODBCConnection = 'MYSQL_MATLAB';    
    end
   
    methods
       
        function obj=cPoint(name,type,areacode)
        % Contructor for cPoint Objects
            ...
        end % end Constructor
       
        function obj = set.Type(obj,type)
        % Function to set Point Type
            ...
        end % Set.Type
       
        function display(obj)
        % Display for cPoint Object
            ...
        end % end display
       
        function CoordinateDec=formatCoordinates(Coordinate)

            if Coordinate(1:1)=='W' || Coordinate(1:1)=='E'
                % Longitude Data
                Deg=str2num(Coordinate(2:4));
                Min=str2num(Coordinate(5));
                CoordinateDec=Deg+timedim(Min,'hm','hr');
                % Vorzeichen fuer W und E
                if Coordinate(1:1)=='W'
                    CoordinateDec = -CoordinateDec;
                end
            else
                fprintf('NO Coordinate Data \n')
            end
        end
       
    end
   
end


Die unter methods definierte Function "formatCoordinates" wird nun in einer Unterklasse aufgerufen. Die Unterklasse ist hier zu sehen:

Code:
classdef cVOR < cPunkt
       
    properties
        VORIdentifier                      
        VORName                            
        VORFrequency                    
        NAVAIDClass                        
        StationDeclination                
    end
   
    methods
       
        % Constructor for Point VOR
        function obj = cVOR(name, areacode)
            ...
            ...
            ...
               
                if length(Daten)>1
                    obj.VORIdentifier       =Daten{1};
                    obj.VORName             =Daten{2};
                    obj.VORFrequency        =str2num(Daten{3})/100;
                    obj.NAVAIDClass         =Daten{4};
                   
                    obj.StationDeclination  =formatCoordinates(Daten{5});

                end
           end
        end
        % End Constructor
    end
end


Ich möchte mit dem Datensatz 5, bei dem es sich um einen 'string' handelt in die Funktion formatCoordinates gehen. Wenn ich die Funktion in einer separaten m-File speichere funtioniert alles einwandfrei.
In Matlab wird nun dieser Fehler angegeben:

??? Undefined function or method 'formatCoordinatesDeclination' for input
arguments of type 'char'.

Error in ==> cVOR>cVOR.cVOR at 40
obj.StationDeclination
=formatCoordinatesDeclination(Daten{5});

Hoffe es ist alles einigermaßen verständlich!
Gruß,
Sierk
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.11.2009, 15:37     Titel:
  Antworten mit Zitat      
Hallo,

um das laufen zu lassen, fehlt natürlich z.B., was Daten nun wirklich ist.
Das entscheidende Problem dürfte aber sein, dass MATLAB in dieser Zeile

Code:
obj.StationDeclination  =formatCoordinates(Daten{5});


nicht weiss, dass es sich um eine Methode der Oberklasse handeln soll - woher auch? Probier doch mal:

Code:
obj.StationDeclination  = obj.formatCoordinates(Daten{5});


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 02.11.2009, 15:45     Titel:
  Antworten mit Zitat      
Hallo,

das zweite, was merkwürdig ist: die formatCoordinate Methode ist nicht statisch? Dann sollte der erste Parameter doch ein Objekt sein, oder? Oder, falls sie statisch ist (oder sein sollte), muss sie immer (egal ob in der eigenen Klasse oder wo auch immer) mit cPoint.formatCoordinate aufgerufen werden.

Ciao,
Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
sierkt
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 31.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2009, 15:58     Titel:
  Antworten mit Zitat      
Vielen Dank Titus!!!
Habe die methode jetzt statisch gemacht. Jetzt funktioniert alles bestens. Bin auch recht neu im OOP. Muss mir jetzt mal klar machen, was statisch bedeutet.

Gruß,
Sierk
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 02.11.2009, 17:25     Titel:
  Antworten mit Zitat      
Hallo,

eine statische Methode ist eine, die der Klasse zugehörig sein soll, aber nicht an ein Objekt der Klasse gebunden ist. Beispiel:
Code:
classdef Converter
  methods (Static = true)
    function kmh = mph2kmh(mph)
      kmh = 1.6 * mph;
    end
  end
end

Ich brauche also nicht
Code:
x = Converter;
v = x.mph2kmh(42.0);
 
zu schreiben, da von x selber keine Eigenschaften oder Methoden erforderlich sind, sondern
Code:

v = Converter.mph2kmh(42.0);


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