小讨论实践中良好的面向对象编程(OOP)通过一个简单的例子

14日视图(30天)
嗨,伙计们,
我感兴趣的是找到更多关于好的OOP编程实践和像样的书的标题为非程序员也欢迎。
让我们考虑下面的例子:
——类点一些性质和构造函数输入参数。
类点
classdef
属性(访问=公共)
ID
X
Y
结束
方法(访问=公共)
函数obj =点(id, x, y)
%的构造函数
obj。ID= id;
obj。X= x;
obj。Y= y;
结束
结束
结束
——类分项目应该包含的属性点对象,比如AddPoint对象和方法
classdef
属性(访问=公共)
项=点()
数= 0
结束
方法(访问=公共)
函数obj =点()
%
结束
函数obj = AddCount (obj)
obj。数= obj。数+ 1;
结束
函数obj = AddPoint (obj, id, x, y)
obj = obj.AddCount ()
obj.Item (obj.Count) =点(id, x, y)
结束
%函数obj = AddPoint (obj, id, x, y)
% obj.Item(1) =点(id, x, y)
%结束
结束
结束
问题是,应该如何设计类分结构:
  1. 我应该使用方法AddPoint内点返回一个对象?如果是的,我该如何得到点对象内点类?我初始化点和分配对象的私有财产作为实例,还是这样做的另一个更好的方法吗吗?将会有很多的点对象事先应该创建一个对象数组。
  2. 正如您可以看到的,有一个项目属性点类,是常见的(简单程序)分配一个对象属性然后调用它的方法通过点符号分配对象?我知道有访问列表,但这对我来说有点复杂。
我相信答案是主观的,依赖于程序的复杂性(不是如此复杂),因此我愿意听到你的想法。

答案(2)

史蒂文的主
史蒂文的主 2021年9月17日
首先,有两个类的名字只有不同套管或单数和复数的区别似乎如果你多线样式造成混淆。
第二,什么是分阶级的利益在这里只要有一个向量的对象?
> > P =点(“波士顿”10 7)
P =
属性:
ID:“波士顿”
X: 10
Y: 7
> > P (2) = (“纽约”9 - 6.5)
P =
1×2点数组的属性:
ID
X
Y
> > P (3) = (“洛杉矶”,1,3)
P =
1×3点数组的属性:
ID
X
Y
> >纽约=(2页)
纽约=
属性:
ID:“纽约”
X: 9
Y: 6.5
> >元素个数(P)
ans =
3
1评论
马里奥苹果
马里奥苹果 2021年9月17日
编辑:马里奥苹果 2021年9月17日
我同意第一个语句。
关于第二个:嗯,Excel的想法是,复杂的COM对象不同于我的。点类就是点对象的集合。也许他们有这个集合类由于使用编程语言。我会考虑把所有在一个单一的阶级和简化一些。

登录置评。


每•艾萨克森
每•艾萨克森 2021年9月20日
编辑:每•艾萨克森 2021年9月30日
“[…冠军非程序员的像样的书”
AFAIK:没有书 面向对象的设计和编程 用Matlab的例子。然而,有许多Python。Python OO是足够接近Matlab OO Python书有用。用Visual Basic背景我曾经通过大多数头设计模式(Java示例)。我发现有用,然而今天我将寻找一个Python的书,因为Python是“动态”像Matlab。(见 设计模式在Peter Norvig动态规划。 )
我问谷歌“好的面向对象的Python初学者的书”并得到了一些有用的评论的链接。
“我应该使用方法AddPoint内点返回一个对象?[…有另一个更好的办法”
有太少的上下文来回答这个问题。这取决于你如何使用这些类。我也猜不出。为什么属性 PointObject 吗?他们是标量吗?名字是单数。
属性(=公共访问)
项=点()
数= 0
PointObject =点()
结束
obj.Item ( 1 ) 的价值指数(一个)是一个错字吗?
obj.Item(1) =点(id, x, y);
“会有很多点对象” 小心,操作上成千上万的简单点对象可以用Matlab是非常缓慢的。
“这是常见的(简单程序)分配一个对象属性然后调用它的方法通过点符号分配对象” 是的,这是常见的。后来添加的:但是注意 火车失事反模式
2的评论
每•艾萨克森
每•艾萨克森 2021年9月21日
“这是翻脸preeeeeety很快。” 这不是一个初学者练习。发现别人如何解决这个任务。

登录置评。

类别

找到更多的在从MATLAB调用Python帮助中心文件交换

s manbetx 845


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的