文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>理解面向对象设计3(建立面向对象模型之类的划分)

理解面向对象设计3(建立面向对象模型之类的划分)

时间:2010-05-01  来源:qingfenghao

建立面向对象模型

2.1 划分依据

对象的划分以行为的同类和属性的相同为标准。

在相同属性下,对系统中的行为进行分类,具有相同(或一类)行为的可以分为一类,所谓相同(或一类)的行为,就是实现同样功能的行为。

a. 人和动物的本质区别在于人可以“制造工具”。这里的“制造工具”就是一种行为,而不是属性。眼睛、鼻子和嘴都是人和动物的属性,就属性而言,人和猩猩并没有什么不同。
此外,人和动物的另一个重大区别是:人是直立行走,而动物是四肢行走。“行走”也是一种行为。而人都具有相同的属性,不管是外观还是衣着。

b. “物以类聚,人以群分”。这里区分的一般标准也是行为,而不是属性。比如,活泼的人一般也喜欢和活泼的人的交往,大方的人一般不喜欢和小气的人交往。“活泼”、“大方”和“小气”也体现在人的行为而不是属性上,因为它们从外表和年龄是看不出来的。

c. 被视为“异类”的人,通常也是因为他们的行为举止与众不同。

 

自然界的生物是如此分类,C++中的类(class)也是如此。所以类(class)的概念契合了自然界分类的规律。

 

以这样观点,如果对人进行分类,那么分为黄种人、白种人和黑种人是不准确的。因为他们仅仅是属性(肤色)上的不同,而并无行为上的差异。他们具有相同的行为比如吃饭。



class Person
{
public:
    Eat();    //行为

protected:
   color;        //属性

}


但可以把人分为举止礼貌和不礼貌的。比如,如果有人吃饭很粗鲁,那就会被视为“异类”。




class PolitePerson : public Person
{
public:
Eat();
};

PolitePerson::Eat()
{
   Eat politely;
}

class UnPolitePerson : public Person
{
public:
   Eat();
}

UnPolitePerson::Eat()
{
   Eat Unpolitely;
}


UnPolitePerson和PolitePerson都从Person派生,因为当然他们都属于“人”,都有着同样的行为和属性,只不过在吃饭这个行为上有着具体的差别。

 

有一个问题是,东方人习惯用筷子吃饭,而西方人则习惯于刀叉,这样的行为也有差别,那么是否可以把人分类为东方人和西方人呢?理论上似乎不错,但它用接下来要讲的面向对象里的组合(Composition,有时也称为Integration/Aggregation)描述更准确。

由于叉子并不属于人本身的属性,而是人吃饭所使用到的一种工具。所以,叉子是“人”对象所包含的另一个对象。简单地说,一个对象包含另一(多)个的情形,就称之为组合。特别地,如果一个对象包含同类对象,称之为Composite(重合)。

 




class DishWare
{
Public:
      Action();
}
class Chopsticks: public DishWare
{
Public:
      Action();
}

Chopsticks::Action()
{
    Nip the food.
}

class Fork: public DishWare
{
Public:
      Action();
}

Fork::Action()
{
    Fork the food.
}

class Person
{
public:
    Person(color, area)
     {
          this.color = color;
          this->area = area;
     }

   Eat();        //行为

protected:
   color;        //属性

   area

}

PolitePerson::Eat()
{

    if(area == eastern)

       dishware = new Chopsticks();

   else

      dishware = new Fork();

      dishware->Action();
    Politely to mouth.

     delete dishware;
}
UnPolitePerson::Eat()
{

    if(area == eastern)

       dishware = new Chopsticks();

   else

      dishware = new Fork();


    dishware->Action();
    UnPolitely to mouth.

     delete dishware;

}


这样程序不需要从Person派生4个类:EasternPolitePerson, EasternUnpolitePerson,
WesternPolitePerson, WesternUnpolitePerson.


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载