软件工程-第九章-面向对象方法学引论
9. 面向对象方法学引论
应用于大型软件产片的开发
9.1 面向对象方法学概述
9.1.1 面向对象方法学的要点
面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使软件开发的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。
面向对象方法具有下述4个要点:
- 软件是由对象组成的,任何元素都是对象,复杂软件对向由比较简单的软件对象组成。由此可见,面向对象方法用对象分解取代了传统方法的功能分解。
- 把所有对象都划分成各种对象类,每个对象类都定义了一组数据和一组方法。
- 按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种层级结构中,通常下层的派生类自动具有和上层的基类相同的特性(包括数据和方法),这种现象称为继承。但是,如果在派生类中对某些特性又做了重新描述,则在派生类中的这些特性将以新描述为准,也就是说,低层的特性将屏蔽高层的同名特性。
- 对象彼此之间仅能通过传递消息互相联系。一切局部于该对象的私有信息,都被封装在该对象类的定义中,就好像装在一个不透明的黑盒子中一样,在外界是看不见的,更不能直接使用,这就是“封装性”。
OO = objects + classes + inheritance(继承) + communication with messages
面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。
9.1.2 面向对象方法学的优点
- 与人类习惯的思维方法一致
- 稳定性好
- 可重用性好
- 较易开发大型软件产品
- 可维护性好
9.2 面向对象概念
9.2.1 对象
对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。
对象的几个定义:
- 对象是具有相同状态的一组操作的集合。
- 对象是对问题域中某个东西的抽象,这种抽象反映了系统保存有关这个东西的信息或与它交互的能力。对象是对属性值和操作的封装。
- 对象::=<ID,MS,DS,MI>。ID是对象的标识或名字,MS是对象中的操作集合,DS是对象的数据结构,MI是对象受理的消息名集合(即对外接口)。
对象的特点:
- 以数据为中心
- 对象是主动的
- 实现了数据封装
- 本质上具有并行性
- 模块独立性好
9.2.2 其他概念
- 类:是一组具有相同属性和相同操作的对象的集合。类是对具有相同属性和行为的一个或多个对象的描述。
- 实例:实例就是由某个特定的类所描述的一个具体的对象。
- 消息:消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。组成部分:接收消息的对象;消息选择符(也称为消息名);零个或多个变元
- 方法:方法就是对象所能执行的操作,也就是类中所定义的服务。
- 属性:属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。
- 封装:对象封装了对象的数据以及对这些数据的操作。所谓封装就是把某个事物包起来,使外界不知道该事物的具体内容。
- 继承:继承是子类自动地共享基类中定义的数据和方法的机制。
- 单重继承:子类仅从一个父类继承属性和方法。
- 多重继承:子类可从多个父类继承属性和方法。
- 多态性:多态性是指子类对象可以像父类对象那样使用。
- 重载(有两种重载):函数重载:指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。
- 重载:运算符重载:指在同一个运算符可以施加于不同类型的操作数上面。
9.3 面向对象建模
一个典型的软件系统组合了3方面的内容:它使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。
1、什么是对象模型?建立对象模型时主要使用那些图形符号?这些符号的含义 是什么?
答:对象模型表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。通常使用UML提供的类图来建立对象模型。在UML中术语“类“的实际含义是,一个类及属于该类的对象。
主要使用图形符号:
矩形:类
空心三角:泛化
空心菱形:共享聚集
实心菱形:组合聚集
虚线:依赖
折角矩形:注释
2、什么是动态模型?建立功能模型时主要使用哪些图形符号?这些符号的含义 是什么?
答:动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的台法变化序列。
通常,用UML提供的状态图来描绘对象的状态、触发状态转换的事件以及对象的行为(对事件的响应)。 每个类的动态行为用一张状态图来描绘, 各个类的状态图通过共享事件合并起来,从而构成系统的动态模型。也就是说,动态模型是基于事件共享而互相关联的一组状态图的集台。
主要使用图形符号:
圆角矩形:状态
箭头:事件
实心圆:开始
3、什么是功能模型?建立功能模型时主要使用哪些图形符号?
答:
功能模型表示变化的系统的功能性质,它指明了系统应该做什么,因此更直接地反映了用户对目标系统的需求。
功能模型由一组数据流图组成。在面向对象方法学中,数据流图远不如在结杂对象提供的服务,简 单的处理(或用例)对应于更基本的对象提供的服务。有时一个处理(或用例)对应多个服务,也有一个服务对应多个处理(或用例)的时候。主要使用方框,椭圆,线条,连线。
(1)数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象。
(2)数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。
(3) 用例图中的行为者,可能是对象模型中的对象。
(4) 功能模型中的处理(或用例)可能产生动态模型中的事件。
(5)对 象模型描述了数据流图中的数据流、数据存储以及数据源点/终 点的结构。
9.4 对象模型
对象模型表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。
9.4.1 类图的基本符号
-
定义类:
-
定义属性:
9.4.2 表示关系的符号
类与类之间通常有关联、聚集、泛化(继承)、依赖和细化4种关系。
- 聚集:
-
共享聚集:
如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。 -
组合聚集:
如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失(或失去价值了),则该聚集称为组合聚集(简称为组成)。
- 泛化:
- 普通泛化
- 受限泛化
9.5 动态模型
是状态图。
动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。
9.6 功能模型
是用例图。
功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。
习题
- 什么是面向对象方法学?它有哪些优点?
面向对象方法学是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类解决问题的方法与过程,使描述问题的问题空间与实现揭发的解空间在结构上尽可能一致的方法学科。
优点:
1、与人类的习惯的思维方法一致;
2、稳定性好;
3、可重用性好;
4、适合用于大型软件产品;
5、所开发的软件有较好的可维护性;
6、面向对象的软件比较容易修改;
7、面向对象软件比较容易理解;
8、易于测试和调式。
- 什么是“对象”?它与传统的数据有何异同?
对象是面向对象方法学开发软件时对客观世界实体的抽象,它是由描述实体属性的数据和可以对这些数据施加的所有操作封装在一起构成的统一体。
传统的数据是传统方法学开发软件时对客观世界实体的抽象,但是,这种抽象是不全面的:数据只能描述实体的静态属性,不能描述实体的动态行为。必须从外界对数据施加操作,才能改变数据、实现相应的行为。
对象与传统数据有本质的区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体。必须发消息请求对象主动地执行它的某些操作,处理它的私有数据,而不能直接从外界对它的私有数据进行操作。
- 什么是“类”?
类是对具有相同数据和相同操作的一组相似对象的定义。
- 什么是“继承”?
继承是指能够直接获得已有事物的性质和特征,而不必重复定义他们。
在层级结构中,通常下层的派生类自动具有和上层的基类相同的特性(包括数据和方法),这种现象称为继承。继承是子类自动地共享基类中定义的数据和方法的机制
- 什么是模型?开发软件为何要建模?
所谓模型就是为了理解事物而对该事物做出的一种抽象,是对事物的一种无歧视定义的书面描述。由于模型忽略了事物的非本质东西,因此模型比原始事物更容易操作。对于那些因过分复杂而不能直接理解的系统,特别需要建立模型,建模的目的主要是为了降低复杂性。人的头脑每次只能处理少量信息,模型通过把系统的重要部分分解成人的头脑一次能处理的若干个子部分,从而减少了系统的复杂程度。
- 什么是对象模型,建立对象模型时主要使用哪些图形符号,这些符号的含义是什么?
对象模型表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。通常使用UML提供的类图来建立对象模型。在UML中术语“类“的实际含义是,一个类及属于该类的对象。
- 什么是动态模型?建立动态模型时主要使用哪些图形符号?这些符号的含义是什么?
动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。通常,用 UML 提供的状态图来描绘对象的状态、触发状态转换的事件以及对象的行为(对事件的响应)。每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型。也就是说,动态模型是基于事件共享而互相关联的一组状态图的集合。
- 什么是功能模型?建立功能模型时主要使用哪些图形符号?
功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。
通常,功能模型由一组数据流图组成。建立功能模型时主要使用的图形符号如下所示: