24 votes

Constructeur de classes multiples Matlab

Est-il possible de définir plus d'un constructeur de classe dans Matlab ? Si oui, comment ?

32voto

Pursuit Points 8392

Chaque classe possède un constructeur. Cependant ... le constructeur peut accepter n'importe quel nombre et n'importe quel type d'arguments, y compris ceux basés sur des varargin .

Ainsi, pour offrir l'option d'un troisième argument par défaut en Java, vous pourriez écrire quelque chose comme ceci (exemples basés sur documentation java ) :

public Bicycle(int startCadence, int startSpeed, int startGear) {
    gear = startGear;
    cadence = startCadence;
    speed = startSpeed;
}
public Bicycle(int startCadence, int startSpeed) {
    gear = 1;
    cadence = startCadence;
    speed = startSpeed;
}

Dans Matlab, vous pourriez écrire

classdef Bicycle < handle
    properties (Access=public)
        gear
        cadence
        speed
    end
    methods (Access = public)
        function self = Bicycle(varargin)
            if nargin>2
                self.gear = varargin{3};
            else
                self.gear = 1;
            end
            self.cadence = varargin{1};
            self.speed = varargin{2};
        end
    end
end

5voto

Mo3bius Points 75

La réponse de Pursuit fonctionne, mais un utilisateur non familiarisé avec la fonction ne peut pas voir combien d'arguments sont nécessaires ni à quoi ils servent. Je recommanderais ceci :

methods (Access = public)
    function self = Bicycle(startCadence, startSpeed, startGear)
        if nargin>2
            self.gear = startGear;
        else
            self.gear = 1;
        end
        self.cadence = startCadence;
        self.speed = startSpeed;        
    end
end

Si vous tapez maintenant "Bicycle(" et attendez, vous pouvez voir au moins les trois arguments. La deuxième possibilité n'est pas affichée. Cela semble possible (par exemple pour le tracé) mais je ne sais pas comment le faire.

4voto

Jonas Points 54073

Chaque classe ne possède qu'un seul constructeur et chaque fichier .m ne peut contenir qu'une seule définition de classe.

Si vous voulez avoir une classe avec de légères différences en fonction de l'entrée, vous pouvez utiliser des propriétés qui définissent des commutateurs qui sont reconnus par les méthodes de la classe. Si vous souhaitez avoir des classes très différentes en fonction de l'entrée, vous pouvez créer une classe generateClass -qui appellera l'une ou l'autre classe définie dans des fichiers différents. Bien entendu, si ces différentes classes ont beaucoup de méthodes et de propriétés communes, vous pouvez les créer en tant que sous-classes d'une superclasse commune.

3voto

learnvst Points 5159

Les constructeurs dans OOP matlab sont très limités par rapport à d'autres langages. Il n'est pas explicitement indiqué dans la documentation AFAIK que vous pouvez avoir plusieurs constructeurs, mais il est fait référence au constructeur d'une classe au singulier dans toute la documentation.

https://www.mathworks.com/help/matlab/matlab_oop/class-constructor-methods.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X