通过一个简单的示例,对面向对象编程(OOP)中的良好实践进行了简短的讨论

7次浏览(过去30天)
嗨,伙计们,
我对寻找更多关于面向对象编程的良好实践感兴趣,也欢迎为非程序员提供像样的书籍。
让我们考虑下面的例子:
-类点的一些属性和构造函数的输入参数。
类点
classdef
属性(Access = public)
ID
X
Y
结束
方法(Access = public)
函数obj =点(id, x, y)
%的构造函数
obj。ID= id;
obj。X= x;
obj。Y= y;
结束
结束
结束
- Class Points with Items属性,应该包含Point对象和AddPoint对象等方法
classdef
属性(Access = public)
Item = Point()
计数= 0
结束
方法(Access = public)
函数obj = Points()
结束
函数obj = AddCount(obj)
obj。Count = obj。计数+ 1;
结束
函数obj = AddPoint(obj, id, x, y)
obj = obj. addcount ()
obj.Item(obj.Count) = Point(id, x, y)
结束
函数obj = AddPoint(obj, id, x, y)
% obj.Item(1) =点(id, x, y)
%结束
结束
结束
问题是,类点应该如何构建:
  1. 我应该使用方法AddPoint在点返回一个点对象?如果是,我应该如何获得点对象在点类?我初始化私有属性作为点的实例,并分配对象给它,还是还有其他更好的方法吗?会有很多Point对象,所以应该事先创建一个对象数组。
  2. 如你所见,在Points类中有一个Item属性,它是常见的(在简单的程序)分配对象属性,然后调用它的方法通过点符号分配对象?我知道有访问列表,但目前对我来说有点复杂。
我相信答案是主观的,取决于程序的复杂性(不是那么复杂),因此我愿意听取你的想法。

答案(2)

史蒂文的主
史蒂文的主 2021年9月17日
首先,如果有两个类的名称只在大小写或单数和复数之间有区别,如果输入错误,可能会引起混淆。
其次,在这里使用Points类比使用Point对象向量有什么好处?
>> 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
>> ny = p (2)
纽约=
属性:
ID:“纽约”
X: 9
Y: 6.5
> >元素个数(P)
ans =
3.
1评论
马里奥苹果
马里奥苹果 2021年9月17日
编辑:马里奥苹果 2021年9月17日
我同意第一种说法。
关于第二个,这个想法来自Excel,它有复杂的COM对象,不像我的。Points类就是Point对象的集合。也许他们有这个集合类是因为使用了编程语言。我将考虑把所有东西都放在一个类中,并简化一些事情。

登录评论。


每•艾萨克森
每•艾萨克森 2021年9月20日
编辑:每•艾萨克森 2021年9月30日
“[…适合非程序员阅读的体面书籍。”
阿菲克:没有关于 面向对象的设计和编程 用Matlab算例。然而,Python有很多。Python OO与Matlab OO非常接近,因此Python书籍非常有用。有一点Visual Basic的背景,我曾经完成了大部分的头部优先设计模式(Java示例)。我发现这很有用,但是今天我要找一本Python的书,因为Python像Matlab一样是“动态的”。(见 Peter Norvig的《动态规划中的设计模式》。
我向谷歌询问“一本关于面向对象的Python初学者的好书”,并收到了一些有用评论的链接。
“我应该在Points中使用AddPoint方法来返回Point对象吗?”[…有没有更好的办法?”
没有足够的背景来回答这个问题。这取决于您将如何使用这些类。我猜不出来。为什么这些属性 而且 PointObject ?它们是标量吗?名字都是单数。
属性(Access = public)
Item = Point()
计数= 0
PointObject = Point()
结束
obj。项( 1 索引的值(ONE)是打字错误吗?
obj.Item(1) = Point(id, x, y);
“会有很多Point对象” 小心,用Matlab在成千上万个简单的点对象上操作可能会非常慢。
(在简单的程序中)将一个对象赋值给属性,然后在赋值对象上通过点表示法调用它的方法是常见的吗? 是的,这很常见。后来又补充说:但要注意 火车失事反模式
2的评论
每•艾萨克森
每•艾萨克森 2021年9月21日
“事情变得越来越糟糕了。” 这不是初学者的练习。找出其他人是如何完成任务的。

登录评论。

类别

了解更多构造和使用对象数组帮助中心而且文件交换

s manbetx 845


释放

R2021a

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!