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 claseroundOff
: método que redondea el valor de la propiedad a dos decimalesmultiplyBy
: método que multiplica el valor de la propiedad por el número especificado
Inicie una definición de clase con un bloque classdef
y, a continuación, defina las propiedades y los métodos de la clase dentro de ese bloque. Esta es la definición de ClassName
...endBasicClass
:
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);
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 Operator Overloading.
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