面向对象技术 -UML
【 课程内容 】
主要介绍面向对象技术的统一建模语言 UML。
【 目的 】
了解面向对象技术的基本概念,掌握面向对象
的分析和设计方法,以及与面向对象技术相关的一
些软件开发技术。
制作 龙鹏飞






面向对象技术 -UML
【 关于 】
UML是由著名的面向对象技术专家 Grady Booch
(布什),James Rumbaugh(云豹)和 Ivar
Jacobson(雅 森),在各自方法的基础上,汲取
其他面向对象方法的优点,广泛征求意见,几经修
改完成的一种建模语言。
UML是一种定义良好、易于表达、功能强大且
适用于各种应用领域的建模语言,已被 OMG采纳为
标准,目前 UML已成为面向对象技术领域内占主导
地位的标准建模语。掌握 UML语言,不仅有助于理
解面向对象的分析与设计方法,也有助于对软件开
发全过程的理解。
制作 龙鹏飞






面向对象技术 -UML
【 软件危机 】
上世纪 60年代中期开始爆发的软件危机,产生于大中型
软件。
大中型软件与小型软件有本质的区别:大型软件系统的
开发周期长、开发费用昂贵、开发出来的软件质量难以保
证、开发生产效率低,它们的复杂性已远远超出人脑所能
直接控制的程度。 —— 软件工程学诞生
经过近四十年的探索和发展,软件工程这门学科有了长
足的发展,但软件危机依然存在,而且有越来越严重趋势。
现在软件在规模、复杂性等方面远超过以前的软件,开
发效率低、产品质量差、产品难以维护、软件可移植性差、
开发费用超过预算、开发时间超期等依然存在。 ——
各种软件开发方法产生
制作 龙鹏飞






面向对象技术 -UML
【 软件开发方法 】
瀑布式
快速原型法
螺旋式
变换式
增量式
净室法
喷泉式
面向对象方法
制作 龙鹏飞






面向对象技术 -UML
【 大型软件系统的特点 】
开发代价高,开发时间长,参加开发的人
员多,软件生命周期长。采用传统的软件工
程方法开发大型软件存在开发效率低、产品
质量差、产品难以维护、软件可移植性差、
软件可重用性低等问题。
制作 龙鹏飞






面向对象技术 -UML
【 软件系统 开发涉及的两个方面 】
制作 龙鹏飞
1、软件开发过程
从软件需求、总体设计、详细设计、代码实现、
测试到最终产品的提交,以及后期的软件维护及再
开发过程,这方面要求软件开发具有连续性,开发
各阶段得到的产品要求在逻辑上相互一致。
2、软件开发过程中涉及的资源
包括参与开发的各种工作人员、硬件资源和软
件资源,这些资源在使用过程中需要进行协调和管
理。
正是这两个方面之间的相互作用,形成了完整的软件
开发活动、目前软件开发中存在的问题,究其原因,往往
是由于在这两个方面上控制不当,或协调不一致造成的。






面向对象技术 -UML
【 软件 工程 】
就是希望采用工程的概念、原理、技术和方法,
把经过时间考验而证明有效的管理技术和当前能够
得到的最好的技术方法结合起来,以指导计算机软
件的开发和维护。
【 软件 工程的目的 】
就是要在规定的时间、规定的开发费用内开发
出满足用户需求的高质量的软件系统。
高质量:不仅包括错误率低,好用、易用、可
移植、易维护等要求。
制作 龙鹏飞






面向对象技术 -UML
【 软件 与硬件不同 】
表现形式:思想产物 /客观实体
生产方式:思想组合 /物质组合
产品要求:无误差 /允许误差
维护方式:改进缺陷、功能扩充等 /老化
制作 龙鹏飞






面向对象技术 -UML
【 软件 的固有复杂性 】
软件的特点说明了软件开发的复杂性和困
难性。著名的计算机专家、被称之为 IBM
360系列计算机之父的 F,Brooks认为软件的
复杂性是固有的,软件可能是人类所能制
造出来的最复杂的实体。
制作 龙鹏飞






面向对象技术 -UML
【 复杂性原因 】
制作 龙鹏飞
1、软件的复杂性与计算机的体系结构有关;
( 冯,诺依曼计算机体系结构是硬件简单,软件复
杂)
2、软件开发是人的一种智力活动,软件系统从
本质上来说是由许多相互联系的概念所组成的结构 ;
(这种概念结构很难用一组数学公式或物理定律来
描述,也就是说,很难找到一种好的方法或工具来
刻画软件系统的内在本质特征或规律)
3、软件系统中各元素之间的相互作用关系具有
不确定性 ; (从理论上,任何两个元素间都可以存在交互
关系) 4、由于软件没有固定的形式和坚硬的外壳,认
为软件系统是软的,可以随意扩充和修改 ; (要求
适应人的工作方式、提供更好的方便、提供更多种类和更
大数量的工作等) 5、规模较大的软件系统的生命周期一般都超过所涉及硬件的生命周期。 (硬件环境不断变化,软件也
应适应)






面向对象技术 -UML
【 控制软件复杂性的基本方法 】
制作 龙鹏飞
1、分解
大问题分解为子问题,功能分解;大实体分解为子部分,
实体分解。
2、抽象
抽出系统中的基本特性,忽略非基本的特性,
关注与目标相关的方面。
抽象分过程抽象和数据抽象。
过程抽象:一个过程是一个操作,大的操作由
系列步骤构成。
数据抽象:定义了数据类型和施加于该类型上
的操作。
3、模块化
一般地,对模块的要求是:高内聚( cohesion),低耦
合( coupling)。
高内聚:在一个模块中尽量汇聚逻辑上相关的计算资源。
低耦合:模块之间的相互作用尽量少。
模块可以是:过程、类及其载体动态库等。
4、信息隐藏
把模块内的实现细节与外界隔离,用户只需知道模块的
功能或接口,而不需要了解其内部实现细节。






面向对象技术 -UML
【 面向对象技术,object-oriented,OO】
制作 龙鹏飞
1、面向对象技术充分体现了分解、抽象、模块化、信息
隐藏等思想,可以有效地提高软件生产率、缩短软件开发
时间、提高软件质量,是控制软件复杂性的有效方法。
2、结构化方法
着眼于软件系统需要什么样的方法和处理过程,以过程
抽象来对待系统的需求,其主要思想就是对问题进行 功能
分解,因此结构化方法也叫功能分解法。
现实世界被影射为功能的集合。
3、面向对象方法
着眼于问题域中事物,以数据抽象来实现系统的需求。
现实世界中的实体及其相互关系被影射为对象及对象间
的关系,实体之间的相互作用被影射为对象间的消息发送,
以及其它类似的各种影射关系。






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
1、对象和实例
对象 ( object)是系统中用来描述客观事物的一个实体。
一个对象由一组属性和对这组属性进行操作的一组方法组
成。
对象只描述客观事物本质的与系统目标有关的特征。
对象之间通过消息通信、一个对象通过向另一个对象发
送消息激活某一个功能。
实例 ( instance)比对象有更广的含义,一个对象也是
一个实例,在 UML中,不仅类有实例(即对象),而且一
些其它元素也有实例(如用例的实例是协作,关联的实例
是链接)。






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
2、类
类 ( class)是具有相同属性(名称)和方法的一组对象
的集合,它为属于该类的全部对象提供了统一的抽象描述。
C++:
class Circle
{ protected,static double PI;
private,double m_x,m_y,m_r;
public:
double GetX(){return m_x;}
double GetY(){return m_y;}
double GetR(){return m_r;}
void SetX(double x){this->m_x=x;}
void SetY(double y){this->m_y=y;}
void SetR(double r){this->m_r=r;}
double area(){return PI*m_r*m_r;}
};
double Circle::PI=3.1415926;
Java:
public class Circle
{ protected final double PI=3.1415926;
private double m_x,m_y,m_r;
public double GetX(){return m_x;}
public double GetY(){return m_y;}
public double GetR(){return m_r;}
public void SetX(double x){this->m_x=x;}
public void SetY(double y){this->m_y=y;}
public void SetR(double r){this->m_r=r;}
public double area(){return PI*m_r*m_r;}
};
C#:
public class Circle
{ protected const double PI=3.1415926;
private double m_x,m_y,m_r;
public double x{get{return m_x;}set{m_x=value;}}
public double y{get{return m_y;}set{m_y=value;}}
public double r{get{return m_r;}set{m_r=value;}}
public double area(){return PI*r*r;}
};






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
3、封装
封装 ( encapsulation)就是把对象的属性和方法结合成
一个独立的系统单位,并尽可能地隐蔽对象的内部细节。
封装提供了两种保护。 首先封装可以保护对象,防止用
户直接存取对象的内部细节,其次封装也保护了客户端,
防止对象实现部分的变化可能产生的副作用,即实现部分
的改变不会影响到相应客户端的改变 。 (只要接口不改变)
封装使一个对象形成两个部分,接口部分和实现部分。
对于用户来说,接口部分是可见的,而实现部分是不可
见的。






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
4、继承
利用 继承 ( inheritance),子类可以继承父类的属性和
方法。子类/父类也可分别叫做特殊类/一般类、子类/
超类、派生类/基类等。






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
⑴ C++继承
class Cylinder:public Circle
{
private:double m_h;
public:
double GetH(){return m_h;}
void SetH(double h){m_h=h;}
double volume(){return area()*m_h;}
};






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
⑵ Java继承
public class Cylinder extends Circle
{
private double m_h;
public double getH(){return m_h;}
public void setH(double h){m_h=h;}
public double volume(){return area()*m_h;}
}






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
⑶ C#继承
public class Cylinder:Circle
{
private double m_h;
public double h{get{return m_h;}set{m_h=value;}}
public double volume(){return area()*h;}
}






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
⑷ 多重继承( C++)
V e h i c l e
G r o u n d V e h i c l e W a t e r V e h i c l e
C a r T r u c k A m p h i b i o u s V e h i c l e S h i p






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
⑸ C++继承
class Vehicle
{};
class GroundVehicle, public Vehicle
{};
class WaterVehicle, public Vehicle
{};
class Car, public GroundVehicle
{};
class Truck, public GroundVehicle
{};
class AmphibiousVehicle, public WaterVehicle,public GroundVehicle
{};
class Ship, public WaterVehicle
{};






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
⑹ 多重继承( Java,C#)
V e h i c l e
G r o u n d V e h i c l e
< < i m p l e m e n t a t i o n c l a s s > >
W a t e r V e h i c l e
C a r T r u c k
A m p h i b i o u s V e h i c l e S h i p
< < i n t e r f a c e > >
I W a t e r V e h i c l e






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
⑺ C#继承
public class Vehicle
{}
public class GroundVehicle,Vehicle
{}
public class WaterVehicle,Vehicle,IWaterVehicle
{}
public class Car,GroundVehicle
{}
public class Truck,GroundVehicle
{}
public class AmphibiousVehicle,GroundVehicle,IWaterVehicle
{}
public class Ship,WaterVehicle
{}
public interface IWaterVehicle
{}






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
5,多态
在面向对象技术中,多态 ( polymorphism)指
的是使一个实体在不同的上下文(环境)条件
下具有不同意义和用法的能力。
多态与覆盖( override)、动态绑定等概念相
联系。多态属于运行时的问题,而重载
( overload)是编译时的问题。
+ A r e a ( ), d o u b le
+ m _ x, d o u b le
+ m _ y, d o u b le
+ m _ r, d o u b le
C ircle
+ A r e a ( ), d o u b le
+ m _ h, d o u b le
C ylin d er
public class Circle //C#
{
public double m_x;
public double m_y;
public double m_r;
public virtual double Area()
{
return 3.1415926*m_r*m_r;
}
}
public class Cylinder,Circle //C#
{
public double m_h;
public override double Area()
{
return 2*base.area()+
2*3.1415926*m_r*m_h;
}
}






面向对象技术 -UML
【 面向对象的基本概念 】
制作 龙鹏飞
6、消息
消息 ( message)就是向对象发出的服务请求。
它包括提供服务的标识、服务标识、输入信息、和
回答信息等。
面向对象方法的一个原则就是通过消息进行对象
之间的通信。
同步消息,一个对象发送消息后,等待消息接收
者返回控制,并获得可能有的回答信息。如一般的
函数调用。
异步消息,一个对象发送消息后,就继续自己的
活动,不等待消息接收者返回控制。
同步消息:
res=wnd.SendMessage(msg,wParam,lParam);
代码对象向 Wnd窗体对象发送消息,请求 SendMessage服
务,等待。输入参数是 msg,wParam,lParam。
异步消息:
bl=wnd.PostMessage(msg,wParam,lParam);
代码对象向 Wnd窗体对象发送消息,请求 PostMessage服
务,不等待。输入参数是 msg,wParam,lParam。
服务标识
输入信息
消息接收者
服务提供者响应信息