假设我正在设计一个可以拾取各种工具并使用它们的机器人。
我会创建一个Robot类,其中包含Pickup方法来选择我想要使用的工具。
对于每个工具,我都会创建一个类,比如Knife类,其中包含Cut方法。
在对Robot调用Pickup方法之后,现在我想告诉我的机器人进行切割。因此,根据OOP概念,我必须告诉机器人而不是刀子?而Cut方法在Knife上,那么我该如何调用它呢?我必须在Robot上实现某种UseToolCurrentlyHeld()来将我的命令传播到Knife。或者我直接调用机器人(持有的刀)直接使用这个:myrobot.ToolCurrentlyInHand.Cut()
我觉得父方法必须处理它们包含的类的所有内容很奇怪。现在我有重复的方法,比如Knife有Cut(),现在Robot必须有UseCutOnKnife()只为了调用Knife上的Cut(),因为良好的OOP实践是将Knife抽象出来,让它感觉像是在不用担心内部信息(如Knife)的情况下订购机器人。
另一个问题,如果我创作音乐,我会创建Music类,其中包含许多Measure类来存储音符信息。在一个Measure中,可能会有许多Note类,其中Note类将具有信息,例如,这个音符在哪个节拍中,或者这个音符演奏的时间有多长。现在我想在第45个小节的中间添加一个音符。要创建Measure,我必须在Music上调用CreateMeasure(45),然后在Measure上调用CreateNote(0.5f)?像这样创建方法的父级吗?如果现在我想将该音符更改为在小节的0.25处,那么负责更改Note的方法是Note类本身还是Measure类?或者我必须在最上层的Music类上实现更改音符的方法?
这是我的类概述:
我觉得父方法必须处理它们包含的类的所有内容很奇怪。现在我有重复的方法,比如Knife有Cut(),现在Robot必须有UseCutOnKnife()只为了调用Knife上的Cut(),因为良好的OOP实践是将Knife抽象出来,让它感觉像是在不用担心内部信息(如Knife)的情况下订购机器人。
另一个问题,如果我创作音乐,我会创建Music类,其中包含许多Measure类来存储音符信息。在一个Measure中,可能会有许多Note类,其中Note类将具有信息,例如,这个音符在哪个节拍中,或者这个音符演奏的时间有多长。现在我想在第45个小节的中间添加一个音符。要创建Measure,我必须在Music上调用CreateMeasure(45),然后在Measure上调用CreateNote(0.5f)?像这样创建方法的父级吗?如果现在我想将该音符更改为在小节的0.25处,那么负责更改Note的方法是Note类本身还是Measure类?或者我必须在最上层的Music类上实现更改音符的方法?
这是我的类概述:
class Music
{
List<Measure> measures = new List<Measure>();
//methods...
}
class Measure
{
int measureNumber;
List<Note> notes = new List<Note>();
//methods...
}
class Note
{
float positionInMeasure; //from 0 to 1
}
现在Music类已经处于最高位置,我现在必须通过Music发出所有内容吗?并且链接方法以最终调用最内层的类?