罗兰在MATLAB的艺术

把想法变成MATLAB

什么时候在MATLAB中创建类

我很高兴向大家介绍今天的来宾博客,Nausheen Moulana。Nausheen负责设计和管理团队
MATLAB语言的发展。她分享她的想法当你可能想在MATLAB中创建类。

内容

我最喜欢MATLAB环境是我作为一名程序员的灵活性选择/ API函数
我认为需要手头的任务。巧妙的是,如果我找到或不喜欢是什么“盒子里”,我能
创建我自己的。

增强的面向对象编程R2008a释放能力的MATLAB编程工具箱添加一些新的工具。虽然我还计划与现有的工具,如函数和脚本,
这里有一些情况下,创建一个类好的设计意义。

创建一个新的数据类型

MATLAB,像大多数编程语言一样,有一组原始数据类型与定义的一组操作。然而,
有些情况下,我们可能需要创建自己的数据类型。例如,我可能想要使用结构数组来跟踪
员工信息但希望限制添加新字段或修改与现有相关联的值
字段。

员工。一个ge = 23; employee.name =“简”;员工。ID = 17;员工(2)=结构(“年龄”39岁的“名字”,“杰瑞”,“ID”,45岁);员工
员工= 1 x2结构体数组字段:年龄名字ID

我面临的问题是,结构数组的字段可以修改容易被分配新值一样
我可以修改任何存储原始数据类型的变量。

另一方面,如果变量员工是一个对象,只有我选择功能(如类的创造者)可以修改字段。

控制访问和修改数据的能力被称为封装。设计一个类促进封装从而提高代码的质量,因为对象是健壮的意外
修改。

在这一点上,我想澄清类和对象之间的区别。类是一种机制来描述接口
与用户交互的功能,而对象是类的具体实例和自己的数据
及相关操作。使用类设计和对象。

我可能想要创建一个新类型的另一个原因是扩展或重新定义现有的操作类型。例如,我可能需要整数运算包装相对于饱和(这是什么
MATLAB)溢出。此外,我可能需要一个√6函数作用于整数并不是在MATLAB中实现。我可以解决这些需求子类化从适当的整数类在MATLAB和覆盖等算术运算+、-、*、/、。\。^包装上溢出。我也可以添加一个新的整数类计算方法√6整数值。子类化促进代码重用从而消除需要从头开始创建新功能。

注意:如果你选择覆盖一个算术运算符+,请注意,您可能需要过载可能使用的其他功能+以确保他们给正确的答案。

使用MATLAB的外部接口api和互操作能力,我能连接到外部系统无论是外部设备(如数据采集工具或外部库使用Java或创建的组件对象模型(COM)。
一个方便的方式与这些系统是设计一个类,管理以及数据访问和修改
在外部系统提供足够的控制功能,我想暴露在MATLAB。通过设计
一个类,我将能够添加新的行为库我接口兼容性的前提下发展。
另外,如果外部系统是隐式面向对象设计一个类是一种更自然的方式呈现出来
MATLAB。

类的一个例子在MATLAB接口与外部库计时器功能使用Java的定时器对象(java.util.Timer)。

%创建一个定时器对象和设置它%执行模式安排计时器事件。t =计时器(“TimerFcn”,”图,显示亮度图像(魔法(5)),“时间”1);t。ExecutionMode =“fixedrate”;%设置定时器的名称t。Name =“定时器”;%的次数设置为执行回调函数。%在这个例子中,魔术方块的形象画两次,%的两个事件。t。TasksToExecute = 2;%启动计时器。开始(t)%停止和释放计时器。停止(t)删除(t)

在这个例子中,允许我设计一个类重用定时器功能在Java虽然给了我灵活地呈现api的方式对用户来说是熟悉的
在MATLAB与对象交互。

注意,当使用新的类编写的MATLAB 7.6,我不需要显式地调用删除方法从内存中删除一个对象;这是MATLAB时自动对象已不再使用。的能力
一个对象清理通过析构函数,当不再使用MATLAB确定对象只是一个的增强
在MATLAB 7.6面向对象的功能。

变量的生命周期管理

通常用MATLAB对我负责管理内存。例如,创建一个50×50矩阵的双打。

一个=兰德(50);= 5;

第二个任务一个,MATLAB负责释放分配的内存之前的声明中,无需任何用户干预。当变量
的范围、被修改或不再使用,MATLAB与这些变量相关自动释放内存
当这些变量原始类型。然而,如果变量是资源,比如文件句柄、字体、或
代表其他类型,然后MATLAB需要转移控制对象当对象不再是释放资源
使用。

在某些情况下我可能需要采取额外的行动显式管理的生命周期创建的变量。析构函数(通过创建类删除方法),我可以保证内存与变量相关联变量时释放不再使用。为
的例子,让我们看一下memmapfile在MATLAB类。的memmapfile功能创建一个对象,让我一个文件映射到内存,在内存中修改对象的任何操作
会修改磁盘上的文件的内容。

这是我可以如何映射文件命名records.dat一系列的无符号32位整数和通过其他值设置为零数据房地产在内存中。

m = memmapfile(“记录。dat”、“格式”、“uint32”,……“可写”,真正的);m.data (1:2) = 0;

由于MATLAB不显式地分配内存的数据中包含的变量(即,它不能释放内存。,in this case, unmapping the mapped region in MATLAB's memory) when thememmapfile修改对象超出范围或通过任务,也许在这种情况下。

m =兰德(4);

如果我直接暴露了内存映射功能,可能会无意记忆滥用如果这个类的用户不
以编程方式映射映射区域。然而,一个面向对象的方法,缓解了这一情况,因为它提供了
类控制对象的创建和销毁。

组织代码

关键字在MATLAB 7.6允许我定义我的课和组织我的代码在一个m文件。通过属性,方法,事件定义在相同的文件,我可以看透类数据和操作相对较快。方法,我也
有分离的函数定义实现的灵活性。我在文件中定义的方法
包含类定义和实现方法在单独的文件中。根据我班的数量方法
在单独的文件中,保持方法实现类定义可以减少混乱。

总结

MATLAB 7.6面向对象功能显著增强,简化设计类的过程
提供足够的功能来处理最复杂的类设计。编程的时候,如果你发现自己需要
上述任何一个,那么你应该考虑设计一个类。我很想听听当你发现创建类
是有用的。请让我知道在这里

使用MATLAB®7.6发表

|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。