|
|
1
9
尽管这个人“锁”了门,但实际上,这个人是在门的一个部件(锁把手)上切换(或起泡),这种操作会导致锁锁住门。你可以想到这里,尽管有人在移动门闩,但门闩是锁上门的东西,而不是锁上门的人。所以更好的表示可能是一扇门有一个锁,而这个人调用lock.lock(),然后将锁设置为关闭(锁定)。 这里的基本前提是,尽管用户正在操作锁,但这是外部的(函数调用)。锁的内部变化(功能内部的代码)实际上是导致门锁定的原因。这个人不是每次都拿下门把手,操纵门的内部来锁门——他们只是简单地在外部切换一个状态,并期望内部的机器来处理它。 |
|
|
2
6
OOP并不是在模拟“现实世界”中事物的工作方式。更重要的是管理复杂性。考虑到这一点,门锁本身是完全可以接受的。即使在现实世界中,锁门的人也不需要知道锁门是如何工作的,除了转动门把手或钥匙。 把复杂概念的细节隐藏在抽象的背后是OOP如此有用的原因。您使用的抽象与问题域不同。在您给出的示例中,除了如何操作门之外,该人员不需要了解任何有关门的信息:
|
|
|
3
0
对我来说,最有趣的设计问题是如何处理储物柜和受锁人之间的耦合,因为必须满足允许锁定/解锁的要求。我看着这个问题,想象一个游戏,玩家有时是人类,但有时是猫(根据给出的例子),也许
人们可以想象在对象之间的对话,比如:
但是,您可能不想公开所涉及的字段,也不想让不需要知道锁定/解锁要求的对象看到的播放器接口混乱。
我不是一个C程序员,自从我做Java以来已经有一段时间了,但是我认为Java中的一种方法也可以应用在C语言中,让玩家对象通过一个
不确定相同的内部类方法是否适用于C,但将其表示为需要考虑的内容。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |