我仍然有一个小问题,抓住纯OOD的概念.
假设我们有一类人类,我们生活在一个人类行走的世界里(大脑命令腿部),有时树木会消失(人类注意到这一点),有时候人类会随机相互撞击.
前两种情况真的很简单:
class Tree {
private:
void disappear()
{
// call onTreeDisappeared() for all human observers
}
};
class Human {
public:
// The human notices that a tree disappeared
void onTreeDisappeared();
private:
int x, y, z;
// Human wants to walk forward
void moveForward();
// Hit another human, possibly causing him to fall down
void hit(Human &target);
};
Run Code Online (Sandbox Code Playgroud)
现在我遇到了一个非常糟糕的问题.当然,你可以这么说很好
anna.hit(bob);
Run Code Online (Sandbox Code Playgroud)
直到这里我觉得它很好(如果有什么不好就请抱怨)并且读起来像散文(好的OOP代码应该).但是你如何将击球转移到OOP?如果安娜击中鲍勃并且鲍勃跌倒,那么跌倒既不是由安娜也不是鲍勃造成的.它是由命中,失去平衡和物理造成的.
我知道这种情况只有2个选项,但不知怎的,我觉得两个都很糟糕:
public: void fallDown()
{ z = 0; }
public: void hit(Human &target)
{
bool targetFallsDown = …Run Code Online (Sandbox Code Playgroud)