Page 1 ?
UML及软件建模
主讲人, 李 唯
clx7000@163.com
Page 2 ?
第一章 理解面向对象
? 如何理解面向对象思维方式
? 一些面向对象的概念
? 对象如何与其他对象关联
Page 3 ?
对象 ( object), 无论是具体的还是抽象的, 遍布于我们的周围, 它
们组成了整个世界 。 程序通常也要模拟现实世界中的对象 。
首先最重要的,对象是一个类(种类)的实例。例如你和我都是 Person这
个类的实例,那么其中,你和我就是对象,而 Person则是一个类。对象是
系统中用来描述客观事务的一个实体,具有自身的结构( Structure),
也就是说,它具有 属性 (特性 )和 行为 。对象的行为包括它所能执行的操
作。属性和操作合起来被称为特征。
如何理解面向对象思维方式?
对象只描述客观事物本质的, 与系统目标有关的特征, 而不考虑那些非本
质的, 与系统目标无关的特征 。
Page 4 ?
类( Class)是具有相同的属性和方法的一组对象的集合,它为属于该类的全
部对象提供了统一的对象描述。
同类对象具有相同的属性和方法,是指它们的定义形式相同,而不是说每个对象的属性值
相同。
让我们再会到洗衣机的例子。如果指定洗衣机类具有
brandName﹑ modelName﹑ serialName﹑ 和 capacity等属性,还有
acceptClothes()﹑ acceptDetergent()﹑ turnOn()和 turnoff()等操作的
话,你就有了制造 WashingMachina类新实例的机制。也就是说,可以基于
洗衣机这个类创建新的对象。
记住面向对象的目标是开发出能够反映现实世界某个特定片段的软件(或者说
是“建模”)。你考虑到的属性和行为越多,你所建立的模型就越符合实际。
在洗衣机的例子中,如果你在洗衣机类中包括 drumVolume(洗涤缸容量
)﹑ trap(水阀) ﹑ motor(马达) ﹑ motorSpeed(马达转速 )等属性的话,
洗衣机模型就更精确。
在面向对象的世界里,类除了起到分类的作用外,类还是用来创建对象的模板
。如可以把类看成是加工小甜饼的模子,你可以用来压出新的小甜饼对象。
Page 5 ?
一些面向对象的概念
面向对象还包含对象的其它方面,这些方面包括
抽象( abstraction)
继承( inheritance)
多态( polymorphism)
封装( encapsulation)
其他三种重要面向对象概念是
消息传递 (message sending)
关联( association)
聚集( aggregation)
Page 6 ?
抽象 的意思就是过滤掉对象的一部分特性和操作直到只剩下你所需要的
属性和操作。
抽象是人类认识问题的最基本手段之一。 在面向对象方法中的抽象,是
指对具体的问题(对象)进行概括,抽出一类对象的公共性质并加以描
述的过程。
例如你的洗衣机包括什么,不包括什么,在做出这样的决策后所保留的
部分就是对洗衣机的抽象。
一些权威人士认为抽象对于建模者来说是最重要的技术,也就是说要搞
清楚什么应该纳入模型中,什么应该舍去。
一般来讲,对一个问题的抽象应该包括两个方面:
1、数据抽象:描述某类对象的属性或状态,也就是此类对象区别于彼
类对象的特征。
2、行为抽象(功能抽象):描述的是某类对象的共同行为或功能特征

抽象( abstraction)
Page 7 ?
继承 ( inheritance)
每个消费类电子产品的子类(手机 ﹑ 电视机 ﹑ 电子词典等等)都继承了
消费类电子产品的特征,在面向对象概念中,这种超类消费类电子产品
与其子类的关系就是继承。注意每个子类都增加了自己的属性和操作。
利用继承,子类可以继承父类的属性和方法,在一些文献里,往往把子
类 /父类称作特殊类 /一般类、子类 /超类、派生类 /基类。
继承增加了软件重用的机会,可以降低软件的开发和维护费用,而继承是
OO技术和非 OO技术的一个很明显的区别。
利用继承可以开发更贴近现实的模型,使得模型更简洁。
继承的另一个好处是可以保证类之间的一致性,父类可以为所有的子类定
制规则。
Page 8 ?
单继承和多继承
? 单继承:子类只从一个父类继承
? 多继承:子类只从一个父类继承
交通工具
水上交通
工具
陆地交通
工具 水陆两用交
通工具
陆地交通
工具
水上交通
工具
单继承 多继承
Page 9 ?
多态性 ( polymorphism)
? 有时不同的类具有相同名称的操作。在面向对象中,每个类都能够自己“知道

如何执行自己的打开操作,这就叫做多态性 。
? 在面向 对象的世界里,多态是对人类思维方式的一种直接模拟,是指一个实体
在不同的上下文条件下具有不同的意义或用法能力。 例如你可以 打开一扇门
﹑ 打开一扇窗 ﹑ 打开报纸 ﹑ 打开一件礼物 ﹑ 打开银行帐号 ﹑ 甚至打 开一段对
话。
Page 10 ?
封 装 ( encapsulation)
封装:把对象的属性和方法结合成一个独立的系统单位,并尽
可能地隐藏对象的内部细节。
当一个对象执行自己的操作时,它对外界隐藏了操作的细节。
封装使一个对象形成两个部分:接口部分和实现部分。对于用
户来说,接口部分是可见的,而实现部分是不可见的
封装提供了两种保护:
首先,封装可以保护对象,防止用户直接存取对象的内部细节;
其次,封装也保护了客户端,防止对象实现部分的变化可能会产
生的副作用,即实现部分的改变不会影响到相应的客户端的改变
Page 11 ?
消息传递 (message sending)
面向对象方法的一个原则就是通过消息进行对象之间的通信,一个对象发送一个
操作消息(或请求)给令一个对象,接收消息的对象就执行这个操作。
消息( Message):就是向对象发出的服务请求,它包括了提供服务的对象标识
、服务(方法)标识、输入信息和回答信息等。
大家往往把消息等同于函数调用,事实上两者之间存在区别。消息可以包括同步
消息和异步消息,如果消息是异步的,则一个对象发送消息后,就继续自己的活
动,不等消息接收者返回控制,而函数调用往往是同步的,消息的发送者要等待
接收者返回值。
Page 12 ?
关联( association )
关联:对象之间以某种方式发生联系。
多向关联
单向关联
多种方式的关联
一个类和其它的多个类关联
多重性( multiplicity)是对象之间关联的一个重要方面。它说明了在
关联中一个类的对象可以对应另一个类的多少个对象。
Page 13 ?
聚集( aggregation)
? 聚集是对象之间的另一种关联。
? 组成体( composition):聚集对象和它的组成对象之间具
有强关联。