的比较gydF4y2BaMATLABgydF4y2Ba和其他面向对象语言gydF4y2Ba
从c++和一些差异gydF4y2BaJavagydF4y2Ba代码gydF4y2Ba
MATLABgydF4y2Ba®gydF4y2Ba编程语言不同于其它面向对象的语言,如c++或JavagydF4y2Ba®gydF4y2Ba在一些重要的方面。gydF4y2Ba
公共属性gydF4y2Ba
与字段在c++或Java语言,您可以使用MATLAB属性定义一个公共接口的实现数据存储分开。您可以提供公共访问属性,因为您可以定义设置和获取访问方法执行时自动分配或查询属性值。例如,以下语句:gydF4y2Ba
myobj。材料=gydF4y2Ba“塑料”gydF4y2Ba;gydF4y2Ba
分配的gydF4y2Ba字符gydF4y2Ba
向量gydF4y2Ba塑料gydF4y2Ba
到gydF4y2Ba材料gydF4y2Ba
的属性gydF4y2BamyobjgydF4y2Ba
。在进行实际的作业之前,gydF4y2BamyobjgydF4y2Ba
执行一个方法称为gydF4y2Baset.MaterialgydF4y2Ba
(假设的类gydF4y2BamyobjgydF4y2Ba
定义这个方法),它可以执行任何必要的操作。看到gydF4y2Ba属性访问方法gydF4y2Ba有关属性访问方法的更多信息。gydF4y2Ba
你也可以通过设置属性访问控制属性,使公共、保护,或私人访问。看到gydF4y2Ba属性的属性gydF4y2Ba的财产属性的完整列表。gydF4y2Ba
没有隐式参数gydF4y2Ba
在一些语言中,一个对象参数方法总是隐式。在MATLAB中,对象是显式参数的方法,采取行动。gydF4y2Ba
调度gydF4y2Ba
在MATLAB类、方法调度不是基于方法签名,在c++和Java代码。当参数列表包含对象相同的优先级,MATLAB使用左边的对象来选择要调用的方法。gydF4y2Ba
但是,如果类的一个论点是优于其他的类参数,MATLAB分派方法优越的参数,参数列表内的立场无关。gydF4y2Ba
看到gydF4y2Ba类优先gydF4y2Ba为更多的信息。gydF4y2Ba
调用父类方法gydF4y2Ba
在c++中,您使用作用域操作符调用超类方法:gydF4y2Ba
超类::方法gydF4y2Ba
在Java代码中,您可以使用:gydF4y2Ba
superclass.methodgydF4y2Ba
相当于MATLAB操作gydF4y2Ba
。gydF4y2Bamethod@superclassgydF4y2Ba
其他的差异gydF4y2Ba
在MATLAB类,没有相当于c++或Java泛型模板。然而,MATLAB是弱类型,可以编写函数和类,处理不同类型的数据。gydF4y2Ba
MATLAB类不支持重载函数使用不同的签名相万博1manbetx同的函数名。gydF4y2Ba
对象修改gydF4y2Ba
MATLAB类可以定义公共属性,您可以修改这些属性通过显式赋值在给定类的实例。然而,只有类的gydF4y2Ba处理gydF4y2Ba
类展览参考行为。修改属性值在一个值类(类的一个实例来自gydF4y2Ba处理gydF4y2Ba
),改变了价值的上下文中只修改。gydF4y2Ba
接下来的小节详细描述这种行为。gydF4y2Ba
对象传递给函数gydF4y2Ba
MATLAB将所有变量的值。当你将对象传递给一个函数,MATLAB来自调用者的值复制到参数变量在被调用的函数。gydF4y2Ba
然而,MATLAB支持两种类型的万博1manbetx类,表现出不同的复制:gydF4y2Ba
处理类——一个句柄类实例变量是指一个对象。句柄类实例变量的副本是指同一个对象与原始变量。如果一个函数修改一个处理对象作为输入参数传递,修改影响对象由原来的和复制的句柄引用。gydF4y2Ba
值类,属性数据值类的一个实例是独立的房地产数据副本实例(尽管一个值类属性可以包含处理)。一个函数可以修改一个值对象作为输入参数传递,但这种修改不会影响原来的对象。gydF4y2Ba
看到gydF4y2Ba处理的比较和价值类gydF4y2Ba更多信息的行为和使用这两种类型的类。gydF4y2Ba
通过值对象。gydF4y2Ba值对象传递给一个函数时,参数变量的函数创建一个本地副本。函数只能修改副本。如果你想修改原始对象,返回修改后的对象,并将其分配给原来的变量名。例如,考虑值类,gydF4y2BaSimpleClassgydF4y2Ba
:gydF4y2Ba
classdefgydF4y2BaSimpleClassgydF4y2Ba属性gydF4y2Ba颜色gydF4y2Ba结束gydF4y2Ba方法gydF4y2Ba函数gydF4y2Baobj = SimpleClass (c)gydF4y2Ba如果gydF4y2Ba输入参数个数> 0 obj。颜色= c;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba
创建一个实例gydF4y2BaSimpleClassgydF4y2Ba
分配一个值gydF4y2Ba红色的gydF4y2Ba
对其gydF4y2Ba颜色gydF4y2Ba
属性:gydF4y2Ba
obj = SimpleClass (gydF4y2Ba“红色”gydF4y2Ba);gydF4y2Ba
将对象传递给函数gydF4y2BaggydF4y2Ba
,分配gydF4y2Ba蓝色的gydF4y2Ba
到gydF4y2Ba颜色gydF4y2Ba
属性:gydF4y2Ba
函数gydF4y2Bax y = g (x)。颜色=gydF4y2Ba“蓝”gydF4y2Ba;y = x;gydF4y2Ba结束gydF4y2Ba
y = g (obj);gydF4y2Ba
这个函数gydF4y2BaggydF4y2Ba
修改输入对象的复制副本并返回,但不会改变原来的对象。gydF4y2Ba
y.ColorgydF4y2Ba
ans =蓝色gydF4y2Ba
obj.ColorgydF4y2Ba
ans =红gydF4y2Ba
如果函数gydF4y2BaggydF4y2Ba
没有返回值,对象的修改gydF4y2Ba颜色gydF4y2Ba
属性只会发生的复制gydF4y2BaobjgydF4y2Ba
在工作空间的函数。这个副本的函数执行结束后范围。gydF4y2Ba
覆盖原来的变量实际上取代它与一个新对象:gydF4y2Ba
obj = g (obj);gydF4y2Ba
经过处理的对象。gydF4y2Ba一个句柄传递给一个函数时,函数处理变量的复制,就像当传递一个值对象。然而,由于一个处理对象的副本是指同一对象与原始处理,该函数可以修改对象而不必返回修改后的对象。gydF4y2Ba
例如,假设您修改gydF4y2BaSimpleClassgydF4y2Ba
类定义类的gydF4y2Ba处理gydF4y2Ba
类:gydF4y2Ba
classdefgydF4y2BaSimpleHandleClass <处理gydF4y2Ba属性gydF4y2Ba颜色gydF4y2Ba结束gydF4y2Ba方法gydF4y2Ba函数gydF4y2Baobj = SimpleHandleClass (c)gydF4y2Ba如果gydF4y2Ba输入参数个数> 0 obj。颜色= c;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba
创建一个实例gydF4y2BaSimpleHandleClassgydF4y2Ba
分配一个值gydF4y2Ba红色的gydF4y2Ba
对其gydF4y2Ba颜色gydF4y2Ba
属性:gydF4y2Ba
obj = SimpleHandleClass (gydF4y2Ba“红色”gydF4y2Ba);gydF4y2Ba
将对象传递给函数gydF4y2BaggydF4y2Ba
,分配gydF4y2Ba蓝色的gydF4y2Ba
到gydF4y2Ba颜色gydF4y2Ba
属性:gydF4y2Ba
y = g (obj);gydF4y2Ba
这个函数gydF4y2BaggydF4y2Ba
设置gydF4y2Ba颜色gydF4y2Ba
对象的属性被返回的句柄和原始处理:gydF4y2Ba
y.ColorgydF4y2Ba
ans =蓝色gydF4y2Ba
obj.ColorgydF4y2Ba
ans =蓝色gydF4y2Ba
的变量gydF4y2BaygydF4y2Ba
和gydF4y2BaobjgydF4y2Ba
引用同一个对象:gydF4y2Ba
y.Color=“黄色”gydF4y2Ba;obj.ColorgydF4y2Ba
ans =黄色gydF4y2Ba
这个函数gydF4y2BaggydF4y2Ba
修改了对象引用输入参数(gydF4y2BaobjgydF4y2Ba
)并返回一个对象的句柄gydF4y2BaygydF4y2Ba
。gydF4y2Ba
MATLABgydF4y2Ba经过处理的价值。gydF4y2Ba处理变量的引用一个对象。MATLAB传递这个参考价值。gydF4y2Ba
处理不像c++中的引用。如果一个对象句柄传递给一个函数,函数分配一个不同的对象来处理变量,该变量在调用者不受影响。例如,假设您定义一个函数gydF4y2Bag2gydF4y2Ba
:gydF4y2Ba
函数gydF4y2Bay = x = SimpleHandleClass g2 (x) (gydF4y2Ba“绿色”gydF4y2Ba);y = x;gydF4y2Ba结束gydF4y2Ba
通过一个处理对象gydF4y2Bag2gydF4y2Ba
:gydF4y2Ba
obj = SimpleHandleClass (gydF4y2Ba“红色”gydF4y2Ba);y = g2 (obj);y.ColorgydF4y2Ba
ans =绿色gydF4y2Ba
obj.ColorgydF4y2Ba
ans =红gydF4y2Ba
覆盖的函数句柄作为参数传入,但不覆盖处理的对象引用。原来的处理gydF4y2BaobjgydF4y2Ba
还是原来的对象的引用。gydF4y2Ba
静态属性gydF4y2Ba
在MATLAB中,类可以定义常量属性,但不是“静态”属性的其他语言像c++。你不能改变常量属性的初始值在类定义中指定。gydF4y2Ba
MATLAB长期规则,变量总是优先于函数和类的名字。赋值语句引入一个变量不存在。gydF4y2Ba
这种形式的表达gydF4y2Ba
一个。B= C
引入一个新的变量,gydF4y2Ba一个gydF4y2Ba
,这是一个gydF4y2Ba结构体gydF4y2Ba
包含一个字段gydF4y2BaBgydF4y2Ba
的值是gydF4y2BaCgydF4y2Ba
。如果gydF4y2Ba一个。B= C
可以引用一个类的静态属性gydF4y2Ba一个gydF4y2Ba
类,然后gydF4y2Ba一个gydF4y2Ba
将优先于变量gydF4y2Ba一个gydF4y2Ba
。gydF4y2Ba
这种行为将是一个重要和MATLAB之前的版本不兼容。例如,引入类命名gydF4y2Ba一个gydF4y2Ba
在MATLAB路径上可能会改变一个赋值语句的意义gydF4y2Ba一个。B= C
在一个gydF4y2Ba。m
代码文件。gydF4y2Ba
在其他语言中,很少使用静态类数据,除内部私有数据类或作为公共常量。在MATLAB中,您可以使用常量属性相同的方式使用gydF4y2Ba公共gydF4y2Ba
最后gydF4y2Ba
静态gydF4y2Ba
在Java领域。使用内部类的数据在MATLAB中,创建持久变量在私人或保护方法或本地函数使用私人的类。gydF4y2Ba
避免在MATLAB静态数据。如果一个类静态数据,在多个应用程序中使用相同的类会导致应用程序之间的冲突。冲突更少的问题在其他语言。这些语言编译成可执行程序,在不同的进程中运行的应用程序。每个进程都有自己的类静态数据的副本。MATLAB,经常运行许多不同的应用程序在相同的过程和环境与每个类的一个副本。gydF4y2Ba
的方式来定义和使用MATLAB中的静态数据,看看gydF4y2Ba静态数据gydF4y2Ba。gydF4y2Ba
常见的面向对象技术gydF4y2Ba
这个表提供了链接部分,讨论面向对象技术常用的其他面向对象的语言。gydF4y2Ba
技术gydF4y2Ba | 如何使用MATLABgydF4y2Ba |
---|---|
操作符重载gydF4y2Ba | 操作符重载gydF4y2Ba |
多重继承gydF4y2Ba | 子类化多个类gydF4y2Ba |
子类化gydF4y2Ba | 设计子类构造函数gydF4y2Ba |
析构函数gydF4y2Ba | 处理类的析构函数gydF4y2Ba |
数据成员范围gydF4y2Ba | 属性的属性gydF4y2Ba |
包(范围类)gydF4y2Ba | 包创建名称空间gydF4y2Ba |
命名常量gydF4y2Ba | 看到gydF4y2Ba定义类的属性与常量值gydF4y2Ba和gydF4y2Ba指定值gydF4y2Ba |
枚举gydF4y2Ba | 定义枚举类gydF4y2Ba |
静态方法gydF4y2Ba | 静态方法gydF4y2Ba |
静态属性gydF4y2Ba | 不受支持万博1manbetx的。看到gydF4y2Ba 可变的静态数据,请参阅gydF4y2Ba静态数据gydF4y2Ba |
构造函数gydF4y2Ba | 类的构造函数方法gydF4y2Ba |
拷贝构造函数gydF4y2Ba | 没有直接等效gydF4y2Ba |
参考/引用类gydF4y2Ba | 处理的比较和价值类gydF4y2Ba |
抽象类/接口gydF4y2Ba | 抽象类gydF4y2Ba |
垃圾收集gydF4y2Ba | 对象生命周期gydF4y2Ba |
实例属性gydF4y2Ba | 动态属性-属性添加到一个实例gydF4y2Ba |
进口类gydF4y2Ba | 进口类gydF4y2Ba |
事件和监听器gydF4y2Ba | 事件和监听器的概念gydF4y2Ba |