罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

谁,什么,为什么,但不是这个吗

Dave Foti管理开发面向对象编程功能的MATLAB语言,是对象参数方法的讨论。

相当频繁的问题从我的同事和你们中的一些人是为什么MATLAB类没有关键字,如“这“内部方法和支持的其他行为中发现语言用“这”字。金宝app不得不宣布每一对象参数方法的名称可能是一个小麻烦,但是有前缀属性与对象参数更麻烦。例如,考虑下面的Java方法:

公共int getArea(){返回宽*高;}

在MATLAB语言,这样的一个函数会写成这样:

类型矩形/ getArea
函数= getArea = R (R)。宽度。* R.Height;结束

在上面的例子中看起来更简单的在Java中,有隐式对象参数的情况下得到的方式。许多二元操作符作用于多个对象等功能。当一个函数需要数据从多个对象,语言与隐式对象参数会导致一个不对称在处理不同的对象。例如,考虑一个Java相交方法返回两个输入矩形的交集:

公共矩形相交(矩形B){矩形C =新矩形();C。X = max (X, B.X);C。Y = max (Y, B.Y);C。宽度= min (X +宽度,B。X + B.Width) - C.X;C。身高= min (Y +高度,B。Y + B.Height) -研讨会;返回C; }

恢复一些对称,有时我看到以下模式:

其他公共矩形相交(矩形){矩形= new矩形();其他。X = max(这一点。X, that.X);其他。Y = max(这一点。Y, that.Y);其他。宽度= min(这一点。X +宽度,。X + that.Width) - other.X;其他。身高= min(这一点。Y +高度。Y + that.Height) – other.Y; return other; }

然而,MATLAB方法自然地访问所有的矩形以同样的方式:

类型矩形/相交
函数C = C相交(A, B)。X = max (A。X, B.X);C。Y = max (A。Y, B.Y);C。宽度= min (A.X +。宽度,B.X + B.Width) - C.X;C。身高= min (A.Y +。高度,B.Y + B.Height) -研讨会;结束

MATLAB语言的另一个重要的考虑因素是运营商的工作对象和数字或不同类型的对象。例如,一个有理数类可能提供算术运算符,在理性的价值观和内置的数字值的任意组合。

x =合理(5、7)
x = 5/7
y = 3。* x
y = 15/7
z = x。* 3
z = 15/7
t = y。* x
t = 75/49

在所有三个乘法有理函数乘以叫做上图:

类型Rational /次
函数R =乘以(X, Y)如果isa (X,“理性”)如果isa (Y,“理性”)理性(X R =。分子。* Y。分子,……X。分母。* Y.Denominator);else if ~ isnumeric (Y)错误(' Y必须是一个数字。');理性(X R =结束。分子。* Y, X.Denominator);其他如果~ isnumeric (X)错误(“X必须是一个数字。”);理性(X R =结束。* Y。分子,Y.Denominator);结束结束

在这个例子中,我们可以看到使所有参数显式的值。它允许运营商工作在第一次双参数,第二个理性的论证。它也加强了这一事实函数内部类可以访问私有数据在任何实例的类和方法。时代Rational类的方法是一种方法,适用于一个或多个实例的有理数。当它作用于两个有理数来产生一个新的理性的结果,任何一个没有什么特别之处这三个实例。

MATLAB函数、方法和变量共享相同的名称空间中。对象属性作用域对象的类,他们的名字可以与MATLAB关键词。虽然有时会更方便,隐式引用一个对象参数也意味着额外的限制属性名和函数名潜在的冲突。

我可能会感兴趣你的想法在这个问题上。在代码中,方法的相对频率工作在单个对象和多个对象?隐式对象访问的便利有多重要吗?你想要宣布一个块的方法定义访问一个对象上的操作,使对象隐含在这些方法?




使用MATLAB®7.14发表


  • 打印
  • 发送电子邮件

评论

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