建立面向对象模型

楚凡科技(www.trufun.net)   10年间致力于做中国最专业的软件工程解决方案提供商
 
规范软件开发过程  优化软件开发流程

保证软件开发质量  提高软件开发效率

Trufun UML2建模工具、Trufun Bacon  需求管理工具、 Trufun 研发云管理工具等

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

在相同属性下,对系统中的行为进行分类,具有相同(或一类)行为的可以分为一类,所谓相同(或一类)的行为,就是实现同样功能的行为。
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. 

你可能感兴趣的:(建立面向对象模型)