MATLAB中的面向对象编程(OOP)与Java, Python等许多常规编程语言类似,但语法不同。 OOP的重要功能是,它使您可以将数据及其关联的操作(方法/功能)组合到对象中。与其他语言(例如C++, Java等)相比,MATLAB中的面向对象编程将更快,这使您能够解决复杂的计算应用程序。 OOP中有某些功能可用于解决复杂的问题,为数据提供安全性等。
MATLAB支持的OOPs功能包括:
- 目的
- 班级
- 多态性
- 遗产
- 抽象化
- 封装形式
现在,让我们深入研究一些示例,以更好地理解上述概念。
班级
类是用户定义使用其创建对象的模板/蓝图。它包括一组用于对象实体的属性和方法。构造函数是方法/函数,使用与类相同的名称定义,并且它使用通过调用函数(即构造函数)传递的某些值来初始化类。与许多其他语言一样,定义构造函数是可选的。与其他常规编程语言相比,MATLAB语法非常独特。
Syntax:
classdef (attributes) className
. . . . .
end
Parameters:
classdef -> keyword used to define classes
attributes -> Arguments/Values used to modify the behaviour of class
例子:
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。执行完上述文件后,您将获得以下输出。
目的
对象是通过调用方法/功能与用户定义的类进行交互的逻辑实体。我们可以根据需要创建任意数量的对象。每个对象将具有两个特征,即状态和行为。这些特性随情况随每个对象而变化。例如,狗是一个对象/身份。它的忠诚度,睡眠,步行等都是行为和身材,肤色,品种等都处于状态之下。
遗产
标题本身表明继承不过是继承/获取父/基类的所有属性,例如属性,方法等。从基类派生的类称为“子类/子类” ,它继承了其父类的所有属性。超类是由子类继承的类。继承的重要性在于代码的可重用性,例如使用父类的属性,方法等。让我们通过一个示例来更好地理解继承概念。
Syntax:
classdef subClassName < SuperClass
. . . . . . .
end
特级:
的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 ,让我们观察一下输出。
输出:
抽象化
抽象类描述了一组类所执行的功能。它隐藏重要或不必要的数据,并仅显示必要的组件。例如,可以查看移动设备,但不能查看其内部组件。子类正在使用的所有方法,属性都在抽象类中声明。具体的子类派生自抽象类,以使用其属性。摘要无法实例化。它只能被继承。必须在子类中重新定义/重写在抽象类中声明的所有方法。
Syntax:
classdef (Abstract) className:
. . . . .
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
将上面的代码另存为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中,类和方法在单独的文件中定义。
- 我们必须使用各自的名称保存类文件和方法文件。