Programación Orientada a Objetos (POO) en MATLAB

La Programación Orientada a Objetos (POO) en MATLAB es similar a muchos lenguajes de programación convencionales como Java, Python, etc. excepto por la sintaxis. La característica importante de los OOP es que le permite combinar datos y sus acciones asociadas (métodos/funciones) en objetos. En comparación con otros lenguajes, como C++, Java, etc., la programación orientada a objetos será mucho más rápida en MATLAB, lo que le permitirá resolver aplicaciones informáticas complejas. Hay ciertas características en OOP que se pueden usar para resolver problemas complejos, brindar seguridad a los datos, etc.

Las características de OOP admitidas por MATLAB son:

  • Objeto
  • Clase
  • Polimorfismo
  • Herencia
  • Abstracción
  • Encapsulación

Ahora profundicemos en algunos ejemplos para comprender mejor los conceptos anteriores.

Clase

Una clase es una plantilla/modelo definido por un usuario mediante el cual se crean objetos. Se compone de un conjunto de atributos y métodos que se utilizan para las entidades de objetos. Un Constructor es un método/función, definido con el mismo nombre de la clase, e inicializa las clases con ciertos valores pasados ​​a través de la función de llamada (es decir, Constructor). Definir un constructor es opcional como en muchos otros lenguajes. La sintaxis de MATLAB es bastante peculiar en comparación con otros lenguajes de programación convencionales.

Sintaxis:

        classdef (atributos) className 

        . . . . .

        final

Parámetros:

           classdef -> palabra clave utilizada para definir clases

          atributos -> Argumentos/Valores usados ​​para modificar el comportamiento de la clase

Ejemplo:

Matlab

% MATLAB program to illustrate Classes
 
classdef adder
     
    % Attributes of a class are defined
    % in properties block
    properties
        value
    end
     
    % Function/Methods of class are defined
    % in methods block
    methods
        function res = addVal(obj)
            res = obj.value+obj.value;
        end
    end
end

 
 Guarde el código anterior como archivo adder.m y acceda a él con comandos desde el símbolo del sistema/otro archivo matlab. Accedamos al código anterior dando algunos comandos de otro archivo matlab y observemos el resultado para entenderlo mejor.

Matlab

% MATLAB program to access the
% user defined classes
 
% Initiating the Class
temp=testing();
 
% Assign values to the class attributes
temp.value=5;
 
% Calling methods inside the class
addVal(temp)

Guarde el código anterior como testing.m. Después de ejecutar el archivo anterior, obtendrá el siguiente resultado.

Producción

Objeto

Un Objeto es una entidad lógica que interactúa con la clase definida por el usuario invocando métodos/funciones. Podemos crear tantos objetos como quieras. Cada objeto tendrá dos características, es decir, estado y comportamiento. Estas características varían con cada objeto según la situación. Por ejemplo, perro es un objeto/identidad. Es lealtad , sueño , andar , etc son comportamientos y el tamaño , color , raza , etc viene bajo el estado.

Herencia

El título en sí sugiere que la herencia no es más que heredar/adquirir todas las propiedades, como atributos, métodos, etc., de la clase principal/base. La clase que se deriva de una clase base se llama Subclase / Clase secundaria y hereda todas las propiedades de su clase principal. Superclase es la clase que está siendo heredada por la subclase. La importancia de la herencia es la reutilización del código, como usar los atributos, métodos, etc. de la clase principal. Profundicemos en un ejemplo para comprender mejor el concepto de herencia.

Sintaxis:

        classdef subClassName < Superclase

        . . . . . . .

        final

Súper clase: 

Matlab

% MATLAB program to illustrate Super class
% and inheritance.
 
classdef Animal
     
    methods
 
        function eat(self)
            disp('I am Eating');
        end
 
        function sleep(self)
            disp('I am Sleeping');
        end
        
    end
     
end

Guarde el código anterior como Animal.m y esta es nuestra superclase. Veamos ahora la subclase.

Matlab

% MATLAB program to illustrate
% sub class and inheritance
 
classdef Lion < Animal
     
    methods
         
        function roar(self)
            disp('Roaring');
        end
         
    end
     
end

 
 Guarde el código anterior como Lion.m y esta es nuestra subclase. Ahora accedamos a la clase principal usando el objeto de subclase y observemos el resultado. 

Producción:

Producción

Polimorfismo

El mecanismo de definir una función con el nombre de la función ya existente se conoce como polimorfismo. Simplemente lo llamamos anulación. MATLAB no admite la sobrecarga de una función. Las funciones polimórficas realizan diferentes operaciones con el mismo nombre en función de los argumentos pasados ​​y la lógica definida por el usuario.

Superclase: 

Matlab

% An example of polymorphism in MATLAB
 
classdef superClass
    
    methods
     
        function testing(self)
            disp('This is superClass');
        end
         
    end
     
end

Guarde el código anterior como superClass.m y veamos también el código de clase derivado.

Clase derivada: 

Matlab

% An example of polymorphism in MATLAB
 
classdef derivedClass < superClass
     
    methods
     
        % Overriding the superClass method
        function testing(self)
            disp('This is derivedClass');
        end
    end
     
end

 
Guarde el código anterior como clasederivada.m y observemos el resultado.

Producción:

Producción

Abstracción

Una clase abstracta representa la funcionalidad realizada por un grupo de clases. Oculta datos importantes o innecesarios y muestra solo los componentes esenciales. Por ejemplo, se puede ver un móvil pero no sus componentes internos. Todos los métodos, atributos que están siendo utilizados por las subclases se declaran en la clase abstracta. Una subclase concreta se deriva de una clase abstracta para usar sus propiedades. Un resumen no puede ser instanciado. Solo se puede heredar. Todos los métodos declarados en la clase abstracta deben redefinirse/anularse en la subclase. 

Sintaxis:

           classdef (Abstracto) className:

           . . . . .

           final

Ejemplo: 

Matlab

% An example of abstract class in MATLAB
 
classdef (Abstract) superClass
     
    % Declaring abstract properties
    properties (Abstract)
        value1
    end
     
    % Declaring abstract methods
    methods (Abstract)
        checking(obj)
    end
     
end

 
Guarde el código anterior como superClass.m y veamos el código de la clase base. 

Matlab

% An example of abstract base class in MATLAB
 
classdef derivedClass < superClass
     
    % Redefining abstract properties
    properties
        value1 = 0;
    end
     
    % Redefining abstract methods
    methods
        function checking(self)
            disp('This is abstract method of superClass and redefined in the derivedClass');
            fprintf('The initial of the property "value1" is %d',self.value1);
        end
    end
     
end

 
Guarde el código anterior como derivadaClass.m y ejecute el código y observe el resultado dando un par de comandos. 

Producción:

Producción

Encapsulación

Requisito previo: documentación de MATLAB de Value y Handle Classes 

La encapsulación es un mecanismo de encerrar los datos y el código juntos en una sola clase/unidad. Proporciona seguridad a los datos al prohibir el límite a otras clases. Uno puede acceder o modificar los datos de una clase solo usando métodos getters y setters . Necesitamos heredar la clase de manejo para implementar la encapsulación en MATLAB, ya que no devuelve objetos duplicados y modificados y también maneja los errores.

MATLAB – 

Guarde el código anterior como superClass.m y observemos el resultado dando un par de comandos. 

Producción:

Producción

Nota: 

  • En MATLAB, las variables de clase se denominan propiedades.
  • En MATLAB, las clases y los métodos se definen en archivos separados.
  • Tenemos que guardar los archivos de clase y los archivos de método con sus respectivos nombres.

Publicación traducida automáticamente

Artículo escrito por pavan_rachapudi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *