Main Content

Crear una clase simple

Designar una clase

La finalidad básica de una clase es definir un objeto que encapsula datos y las operaciones que se realizan sobre esos datos. Por ejemplo, BasicClass define una propiedad y dos métodos que operan sobre los datos de esa propiedad:

  • Value: propiedad que contiene los datos numéricos almacenados en un objeto de la clase

  • roundOff: método que redondea el valor de la propiedad a dos decimales

  • multiplyBy: método que multiplica el valor de la propiedad por el número especificado

Inicie una definición de clase con un bloque classdef ClassName...end y, a continuación, defina las propiedades y los métodos de la clase dentro de ese bloque. Esta es la definición de BasicClass:

classdef BasicClass
   properties
      Value {mustBeNumeric}
   end
   methods
      function r = roundOff(obj)
         r = round([obj.Value],2);
      end
      function r = multiplyBy(obj,n)
         r = [obj.Value]*n;
      end
   end
end

Para obtener un resumen de la sintaxis de clases, consulte classdef.

Para utilizar la clase:

  • Guarde la definición de clase en un archivo .m con el mismo nombre que la clase.

  • Cree un objeto de la clase.

  • Acceda a las propiedades para asignar datos.

  • Llame a métodos para realizar operaciones sobre los datos.

Crear un objeto

Cree un objeto de la clase utilizando el nombre de la clase:

a = BasicClass
a = 

  BasicClass with properties:

    Value: []

Inicialmente, el valor de propiedad está vacío.

Acceder a propiedades

Asigne un valor a la propiedad Value utilizando la variable del objeto y un punto antes del nombre de la propiedad:

a.Value = pi/3;

Para devolver un valor de propiedad, utilice la notación de puntos sin la asignación:

a.Value
ans =

    1.0472

Para obtener más información sobre las propiedades de las clases, consulte Property Syntax.

Llamar a métodos

Llame al método roundOff en el objeto a:

roundOff(a)
ans =

    1.0500

Pase el objeto como el primer argumento a un método con varios argumentos, como en esta llamada al método multiplyBy:

multiplyBy(a,3)
ans =

    3.1416

También puede llamar a un método utilizando la notación de puntos:

a.multiplyBy(3)

No es necesario pasar el objeto como un argumento explícito cuando se utiliza la notación de puntos. La notación utiliza el objeto a la izquierda del punto.

Para obtener más información sobre los métodos de las clases, consulte Method Syntax.

Añadir un constructor

Las clases pueden definir un método especial para crear objetos de la clase, llamado constructor. Los métodos de constructor le permiten pasar argumentos al constructor, que puede asignar como valores de propiedad. La propiedad BasicClass Value restringe sus valores posibles utilizando la función mustBeNumeric.

Aquí puede ver un constructor para la clase BasicClass. Cuando llama al constructor con un argumento de entrada, se asigna a la propiedad Value. Si llama al constructor sin un argumento de entrada, la propiedad Value tiene un valor predeterminado de vacío ([]).

methods        
    function obj = BasicClass(val)
        if nargin == 1
            obj.Value = val;
        end
    end
end

Añadiendo este constructor a la definición de clase, puede crear un objeto y establecer el valor de propiedad en un paso:

a = BasicClass(pi/3)
a = 

  BasicClass with properties:

    Value: 1.0472

El constructor puede realizar otras operaciones relacionadas con la creación de objetos de la clase.

Para obtener más información sobre los constructores, consulte Class Constructor Methods.

Vectorizar métodos

MATLAB® le permite vectorizar operaciones. Por ejemplo, puede añadir un número a un vector:

[1 2 3] + 2
ans =

     3     4     5

MATLAB añade el número 2 a cada uno de los elementos en el arreglo [1 2 3]. Para vectorizar los métodos de operador aritmético, encierre la referencia de propiedad obj.Value entre corchetes.

[obj.Value] + 2

La sintaxis permite al método trabajar con arreglos de objetos. Por ejemplo, cree un arreglo de objetos utilizando una asignación indexada.

obj(1) = BasicClass(2.7984);
obj(2) = BasicClass(sin(pi/3));
obj(3) = BasicClass(7);

Estas dos expresiones son equivalentes.

[obj.Value] + 2
[obj(1).Value obj(2).Value obj(3).Value] + 2

El método roundOff está vectorizado porque la referencia de propiedad está entre corchetes.

r = round([obj.Value],2);
Puesto que roundOff está vectorizado, puede operar sobre arreglos.

roundOff(obj)
ans =

    2.8000    0.8700    7.0000

Sobrecargar funciones

Las clases pueden implementar funcionalidades existentes, como la suma, definiendo un método con el mismo nombre que la función de MATLAB existente. Por ejemplo, suponga que desea sumar dos objetos BasicClass. Tiene sentido sumar los valores de las propiedades Value de cada objeto.

Esta es una versión sobrecargada de la función plus de MATLAB. Define la suma para la clase BasicClass como la suma de los valores de propiedad:

methods
   function r = plus(o1,o2)
      r = [o1.Value] + [o2.Value];
   end
end

Implementando un método llamado plus, puede utilizar el operador "+" con objetos de BasicClass.

a = BasicClass(pi/3);
b = BasicClass(pi/4);
a + b
ans =

    1.8326

Vectorizando el método plus, puede operar sobre arreglos de objetos.

a = BasicClass(pi/3);
b = BasicClass(pi/4);
c = BasicClass(pi/2);
ar = [a b];
ar + c
ans =

    2.6180    2.3562

Información relacionada

Para obtener más información acerca de la sobrecarga de funciones, consulte Overload Functions in Class Definitions.

Para obtener más información acerca de la sobrecarga de operadores, consulte Sobrecarga del operador.

Enumeración del código BasicClass

Esta es la definición de BasicClass después de añadir las funcionalidades que se analizan en este tema:

classdef BasicClass
    properties
        Value {mustBeNumeric}
    end
    methods
        function obj = BasicClass(val)
            if nargin == 1
                obj.Value = val;
            end
        end
        function r = roundOff(obj)
            r = round([obj.Value],2);
        end
        function r = multiplyBy(obj,n)
            r = [obj.Value] * n;
        end
        function r = plus(o1,o2)
            r = [o1.Value] + [o2.Value];
        end
    end
end

Temas relacionados