34.1创建类

本章通过为多项式设计的自定义类说明用户定义类和面向对象编程。选择这个类是因为它的简单性,不会不必要地分散对Octave编程函数的讨论。即便如此,在引入Octave面向对象编程的语法和技术之前,对多项式类的目标有一点背景知识是必要的。

多项式类用于表示形式的多项式

a0+a1*x+a2*x^2+…+一个*x^n

其中a0、a1等是实标量。因此多项式可以用向量表示

a=[a0,a1,a2,…,an];

这是一个足够的规范,可以开始为多项式类编写构造函数。Octave中的所有面向对象类都必须位于一个目录中,该目录是以“”开头的类的名称@象征例如,多项式类的所有方法都将在@多项式目录

类的构造函数必须是类本身的名称;在本例中,构造函数位于文件中@多项式/多项式.m。理想情况下,即使在没有参数的情况下调用构造函数,它也应该返回一个有效的对象。多项式类的构造函数可能看起来像

##-*-texinfo-*-##@deftypefn{}{}多项式()##@deftypefnx{}{}多项式(@var{a}@end deftypefn函数p=多项式(a),如果(nargin==0)p.poly=0;p=类(p,“多项式”);否则如果(isa(a,“多项式”))p=a;elseif(isreal(a)&&isvector(a))p.poly=a(:).';#力行向量p=类(p,“多项式”);else错误(“@多项式:A必须是实向量”);endif endifendfunction

请注意,构造函数的返回值必须是的输出作用的第一个参数函数是aststructure,第二个是类本身的名称。调用类构造函数来创建实例的示例是

p=多项式([1,0,1]);

方法从类目录中的m文件定义,并且可以具有与任何其他m文件相同的嵌入文档。构造函数的帮助可以通过单独使用构造函数名称来获得,也就是说,对于多项式构造函数帮助多项式将返回帮助字符串。通过使用该方法后面的类目录名,可以将帮助限制到特定的类。例如help@多项式/多项式是显示多项式构造函数的帮助字符串的另一种方式。第二种方法是为类的重载方法和函数获取帮助的唯一方法。

Octave期望函数名的任何地方都可以使用相同的规范机制。例如类型@多项式/disp将打印的代码disp方法的多项式类到屏幕,和dbstop@多项式/disp将在的第一个可执行行设置断点disp多项式类的方法。

要检查变量是否属于用户类isoobjectisa可以使用函数。例如

p=多项式([1,0,1]);等对象(p)⇒ 1isa(p,“多项式”)⇒ 1.
 
: tf = isobject (x)

如果返回truex是一个类对象。

详见: , 类型信息, isa, ism方法, isprop.

类的可用方法可以显示为method作用

 
: methods (obj)
: methods ("classname")
: methods (…, "-full")
: mtds = methods (…)

列出对象的公共方法的名称obj或thename类类的名称.

obj可以是Octave类对象或Java对象。类的名称可以是Octave类或Java类的名称。

如果可选参数满的然后Octave返回所有方法签名,其中包括输出类型、方法名称以及输入的数量和类型。

当在没有输出参数的情况下调用时,method将方法名称列表打印到屏幕上。否则,输出参数mtds包含字符串元胞数组中的列表。

详见: ism方法, 属性, 字段名.

要查询用户类是否存在特定方法ism方法可以使用函数。

 
: tf = ismethod (obj, method)
: tf = ismethod (class_name, method)

如果字符串为true,则返回true方法是对象的有效方法obj或属于同类clsname.

详见: isprop, isoobject, isjava, 方法.

对于多项式类,有一种计算其根的方法是有意义的。

函数r=根(p)r=根(fliplr(p.poly));结束函数

我们可以检查是否存在root-方法,方法调用:

p=多项式([1,0,1]);ismethod(p,“根”)⇒ 1.

版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号