文章目录
- 9.1 面向对象方法学概述要点
- 9.2 面向对象的概念对象
- 9.3 面向对象建模
- 9.4 对象模型
- 9.5 动态模型
- 9.6 功能模型
- 9.7 3种模型之间的关系
9.1 面向对象方法学概述要点
- 面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,使描述问题的问题空间与实现解法的解空间在结构上尽可能一致
- (1)定义
- 面向对象方法是一种以数据或信息为主线,把数据和处理相结合的方法。
- (2)要点
- ① 对象;
- ② 类;
- ③ 继承性;
- ④ 封装性。
- 【注意】需理解四个要点各自的含义。
- 面向对象方法学的优点
- (1)与人类习惯的思维方法一致;
- (2)稳定性好;
- (3)可重用性好;
- (4)较易开发大型软件产品;
- (5)可维护性好。
9.2 面向对象的概念对象
- (1)对象的定义
- ① 面向对象程序设计的角度:对象是具有相同状态的一组操作的集合。
- ② 信息模拟的角度:对象是对属性值和操作的封装
- ③ 对象的形式化定义:对象 ::= <ID, MS, DS, MI>
- ID 对象的标识或名字
- MS 对象中的操作集合
- DS 对象的数据结构
- MI 对象受理的信息名集合(对外接口)
- ④ 结构化的角度:对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体。
- 面向对象方法学认为,客观世界是由对象组成,任何事物都是对象。
- 传统的软件开发以算法为核心,面向对象以对象为核心
- (2)对象的特点
- ① 以数据为中心;
- ② 对象是主动的;
- ③ 实现了数据封装;
- ④ 具有并行性;
- ⑤ 模块独立性好。
- 其他概念
- (1)类
- 类是对具有相同数据和相同操作的一组相似对象的定义。
- (2)实例
- 实例就是由某个特定的类所描述的一个具体的对象。
- 【注意】类是对象的抽象,对象是类的实例。
- (3)消息
- ① 定义:消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。
- ② 组成:一个消息由接收消息的对象、消息选择符、零个或多个变元组成。
- (4)方法
- 方法就是对象所能执行的操作,也就是类中所定义的服务。
- (5)属性
- 属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。
- (6)封装
- 封装是把数据和实现操作的代码集中起来放在对象内部。
- (7)继承
- ① 定义
- 继承是子类自动地共享基类中定义的数据和方法的机制。
- ② 特点
- a.继承具有传递性;
- b.低层的性质将屏蔽高层的同名性质。
- ③ 分类
- a.单继承:一个类只允许有一个父类,即类等级为树形结构。
- b.多重继承:允许一个类有多个父类。
- ① 定义
- (8)多态性
- ① 定义
- 多态性指在类等级的不同层次中可以共享一个方法的名字,不同层次中的每个类各自按自己的需要来实现这个行为。
- 【注意】在C++中,多态性是通过虚函数来实现的。
- ② 动态联编
- 在运行时刻根据接收消息的对象所属于的类,决定执行哪个特定版本的函数,这称为动态联编(滞后联编)。
- ③ 优点
- a.增加了面向对象软件系统的灵活性,进一步减少了信息冗余。
- b.显著提高了软件的可重用性和可扩充性。
- ① 定义
- (9)重载
- ① 分类
- a.函数重载
- 在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。
- 【注意】常考点:重载函数的形式参数(指参数的个数或者类型或者顺序)必须不同,而与函数返回值类型无关。
- b.运算符重载
- 同一个运算符可以施加于不同类型的操作数上面。
- a.函数重载
- ② 实现
- a.函数重载是通过静态联编(先前联编)实现的。
- b.运算符重载是在编译时根据被操作数的类型,决定使用该算符的哪种语义。
- ③ 优点
- 进一步提高了面向对象系统的灵活性和可读性。
- ① 分类
9.3 面向对象建模
- 模型
- (1)定义
- 模型是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。
- (2)作用
- ① 是一种思考工具,利用这种工具可以把知识规范地表示出来。
- ② 可以帮助人们思考问题、定义术语、在选择术语时作出适当的假设, 并且有助于保持定义和假设的一致性。
- (1)定义
- 模型分类
- (1)对象模型:描述系统数据结构。
- 对象模型是最基本、最核心、最重要。
- (2)动态模型:描述系统控制结构。
- (3)功能模型:描述系统功能。
- (1)对象模型:描述系统数据结构。
- 面向对象建模是面向对象分析的关键。
9.4 对象模型
- 概念
- (1)定义
- 它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。
- 【注意】对象模型表示静态的、结构化的系统的数据性质。
- (2)工具
- 使用UML提供的类图来建立对象模型。
- UML:统一建模语言
- UML的类图建立对象模型;
- UML的状态图建立动态模型;
- 功能模型:使用数据流图或UML的用例图建立功能模型;
- (1)定义
- 类图的基本符号
- 类图描述类及类与类之间的静态关系。类图是一种静态模型,它是创建其他UML图的基础。
- (1)定义类
- UML中类的图形符号为长方形,用两条横线把长方形分为上、中、下3个区域,3个区域分别放类的名字、属性和服务,如图所示。
- 【注意】类名应该是富于描述性的、简洁的而且无二义性的。
- (2)定义属性
- ① UML描述属性的语法格式为:
- 可见性 属性名:类型名=初值{性质串}
- ② 属性的可见性分为公有的(+)、私有的(-)和保护的(#),没有默认的可见性。
- ① UML描述属性的语法格式为:
- (3)定义服务
- ① 服务也就是操作,UML描述操作的语法格式为: 可见性 操作名(参数表):返回值类型{性质串}
- ② 操作的可见性分为公有的(+)、私有的(-)和保护的(#),没有默认的可见性。
- ③ 参数表中描述一个参数的语法为:参数名:类型名=默认值
- 表示关系的符号
- 类与类之间通常有关联、泛化(继承)、依赖和细化4种关系。
- (1)关联
- ① 定义
- 关联表示两个类的对象之间存在某种语义上的联系。
- ② 普通关联
- a.定义
- 只要在类与类之间存在连接关系就可以用普通关联表示。
- b.表示
- 第一,普通关联的图示符号是连接两个类之间的直线。
- 第二,关联是双向的,可为关联起一个名字。在名字前面(或后面)加一个表示关联方向的黑三角。
- 第三,在表示关联的直线两端可以写上重数。
- a.定义
- ③ 限定关联
- a.定义
- 限定关联用在一对多或多对多的关联关系中,可以把重数从一对多变成一对一,或从多对多简化成多对一。
- b.表示
- 在类图中把限定词放在关联关系末端的一个小方框内。
- a.定义
- ④ 关联类
- a.定义
- 为了说明关联的性质,可能需要一些附加信息。关联类可以用来记录相关信息。
- b.表示
- 关联中的每个连接与关联类的一个对象相联系。关联类通过一条虚线与关联连接。
- a.定义
- ① 定义
- (2)聚集
- 聚集(聚合)是关联的特例。表示类与类之间的关系是整体与部分的关系。
- ① 共享聚集
- a.定义
- 如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。
- b.表示
- 在表示关联关系的直线末端紧挨着整体类的地方画一个空心菱形。
- a.定义
- ② 组合聚集
- a.定义
- 如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失,则该聚集称为组合聚集。
- b.表示
- 在表示关联关系的直线末端紧挨着整体类的地方画一个实心菱形。
- a.定义
- (3)泛化
- ① 定义
- UML中的泛化关系就是继承关系,它是通用元素和具体元素之间的一种分类关系。
- ② 表示
- 在UML中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。
- ③ 分类
- 泛化关系包括普通泛化和受限泛化。
- ④ 约束
- 预定义的约束有4种:多重、不相交、完全和不完全。
- ⑤ 继承分类
- 分为多重继承、不相交继承、完全继承、不完全继承四类。
- ① 定义
- (4)依赖和细化
- ① 依赖关系
- a.定义
- 依赖关系描述两个模型元素之间的语义连接关系:其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。
- b.表示
- 在UML类图中用带箭头的虚线连接有依赖关系的两个类,箭头指向独立的类。
- a.定义
- ② 细化关系
- a.定义
- 对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系。
- b.表示
- 细化的图示符号为由元素B指向元素A的一端为空心三角形的虚线。
- a.定义
- ① 依赖关系
9.5 动态模型
- 概念
- 动态模型表示瞬时的、行为化的系统的控制性质,它规定了对象模型中的对象的合法变化序列。
- 建模
- 每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型。
9.6 功能模型
- 概念
- (1)定义
- 功能模型表示变化的系统的功能性质,它指明了系统应该做什么。
- (2)组成
- 功能模型由一组数据流图组成。
- (1)定义
- 用例图
- 在UML中把用用例图建立起来的系统模型称为用例模型。
- (1)定义
- 用例模型描述的是外部行为者所理解的系统功能。用例模型的建立是系统开发者和用户反复讨论的结果,它描述了开发者和用户对需求规格所达成的共识。
- (2)组成和表示
- ① 系统,用方框表示。
- ② 用例,用椭圆表示。
- ③ 行为者,用线条人表示。
- ④ 关系,用连线表示。
- (3)关系的分类
- UML用例之间主要有扩展和使用两种关系,它们是泛化关系的两种不同形式。
- ① 扩展关系
- 向一个用例中添加一些动作后构成了另一个用例,这两个用例之间的关系就是扩展关系,后者继承前者的一些行为,通常把后者称为扩展用 例。
- ② 使用关系
- 一个用例使用另一个用例时,这两个用例之间就构成了使用关系。
- 创建用例模型的工作:
- 定义系统
- 寻找行为者和用例
- 寻找行为者和用例是关键
- 描述用例
- 定义用例之间的关系
- 确认模型
9.7 3种模型之间的关系
- 针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。
- 状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。
- 功能模型中的处理对应于对象模型中的类所提供的服务。
- 数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象。
- 数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。
- 用例图中的行为者,可能是对象模型中的对象。
- 功能模型中的处理可能产生动态模型中的事件。
- 对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构。