📜  MATLAB中的面向对象编程(OOP)

📅  最后修改于: 2021-04-16 09:08:07             🧑  作者: Mango

MATLAB中的面向对象编程(OOP)与Java, Python等许多常规编程语言类似,但语法不同。 OOP的重要功能是,它使您可以将数据及其关联的操作(方法/功能)组合到对象中。与其他语言(例如C++, Java等)相比,MATLAB中的面向对象编程将更快,这使您能够解决复杂的计算应用程序。 OOP中有某些功能可用于解决复杂的问题,为数据提供安全性等。

MATLAB支持的OOPs功能包括:

  • 目的
  • 班级
  • 多态性
  • 遗产
  • 抽象化
  • 封装形式

现在,让我们深入研究一些示例,以更好地理解上述概念。

班级

类是用户定义使用其创建对象的模板/蓝图。它包括一组用于对象实体的属性和方法。构造函数是方法/函数,使用与类相同的名称定义,并且它使用通过调用函数(即构造函数)传递的某些值来初始化类。与许多其他语言一样,定义构造函数是可选的。与其他常规编程语言相比,MATLAB语法非常独特。

例子:

MATLAB
% MATLAB program to illustrate Classes
  
classdef adder
      
    % Atrributes 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


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)


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


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


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


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


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


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 intial of the property "value1" is %d',self.value1);
        end
    end
      
end


将以上代码另存为adder.m文件,并使用命令提示符/另一个Matlab文件中的命令进行访问。让我们通过从另一个matlab文件中提供一些命令来访问上面的代码,并观察输出以更好地理解它。

的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)

将上面的代码另存为testing.m。执行完上述文件后,您将获得以下输出。

输出

目的

对象是通过调用方法/功能与用户定义的类进行交互的逻辑实体。我们可以根据需要创建任意数量的对象。每个对象将具有两个特征,即状态和行为。这些特性随情况随每个对象而变化。例如,是一个对象/身份。它的忠诚度睡眠步行等都是行为和身材肤色品种等都处于状态之下。

遗产

标题本身表明继承不过是继承/获取父/基类的所有属性,例如属性,方法等。从基类派生的类称为“子类/子类” ,它继承了其父类的所有属性。超类是由子类继承的类。继承的重要性在于代码的可重用性,例如使用父类的属性,方法等。让我们通过一个示例来更好地理解继承概念。

特级:

的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

将上面的代码另存为Animal.m ,这是我们的超类。让我们现在来看子类。

的MATLAB

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

将上面的代码另存为Lion.m ,这是我们的子类。现在,让我们使用子类对象访问父类并观察输出。

输出:

输出

多态性

用已经存在的函数的名称定义函数的机制称为多态性。简单地说,我们称其为“压倒性”。 MATLAB不支持函数的重载。根据传递的参数和用户定义的逻辑,多态函数以相同的名称执行不同的操作。

超类:

的MATLAB

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

将上面的代码另存为superClass.m ,我们还可以看到派生的类代码。

派生类:

的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

将上面的代码另存为derivedClass.m ,让我们观察一下输出。

输出:

输出

抽象化

抽象类描述了一组类所执行的功能。它隐藏重要或不必要的数据,并仅显示必要的组件。例如,可以查看移动设备,但不能查看其内部组件。子类正在使用的所有方法,属性都在抽象类中声明。具体的子类派生自抽象类,以使用其属性。摘要无法实例化。它只能被继承。必须在子类中重新定义/重写在抽象类中声明的所有方法。

例子:

的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

将上面的代码另存为superClass.m ,让我们看一下基类的代码。

的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 intial of the property "value1" is %d',self.value1);
        end
    end
      
end

将上面的代码另存为derivedClass.m,然后执行代码,并通过给出几个命令来观察输出。

输出:

输出

封装形式

先决条件: Value和Handle类的MATLAB文档

封装是一种将数据和代码封装在单个类/单元中的机制。通过禁止对其他类别的限制,它为数据提供了安全性。只能使用getters和setters方法访问或修改类的数据。我们需要继承handle以在MATLAB中实现封装,因为它不返回重复和修改的对象,并且还处理错误。

MATLAB –

将上面的代码另存为superClass.m,然后通过给出几个命令来观察输出。

输出:

输出

笔记:

  • 在MATLAB中,类变量称为“属性”。
  • 在MATLAB中,类和方法在单独的文件中定义。
  • 我们必须使用各自的名称保存类文件和方法文件。