小编Kir*_*kes的帖子

我怎样才能掌握纯OOD的概念?

我仍然有一个小问题,抓住纯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)

c++ oop ooad

5
推荐指数
1
解决办法
444
查看次数

标签 统计

c++ ×1

ooad ×1

oop ×1