一、本章要点
1)信息系统综合知识。包括面向对象的分析与设计、统一建模语言。
2)系统架构设计案例分析。包括面向对象系统建模。
二、基本概念
1)面向对象方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。
2)基本概念:
(1)对象(2)类(3)继承(4)封装(5)消息(6)多态性
三、统一建模语言
1、UML的结构
1)UML的结构包括UML的基本构造块、支配这些构造块如何放在一起的规则(架构)和一些运用于整个UML的机制。
2)UML有三种基本的构造块,分别是事物、关系和图。
3)公共机制是指达到特定目标的公共UML方法,主要包括规格说明(详细说明)、修饰、公共分类(通用划分)和扩展机制4种。
4)UML用于描述事物的语义规则,分别为事物、关系和图命名。
5)UML对系统架构的定义是系统的组织结构,具体来说,就是5个系统视图,分别是逻辑视图、进程视图、实现视图、部署视图和用例视图。
2、事物
1)UML中的事物也称为建模元素,包括结构事物、行为事物、分组事物和注释事物,是最基本的面向对象的构造块。
2)结构事物,在UML模型中属于静态的部分,代表概念上的或物理上的元素:类、接口、协作、用例、活动类、构件、节点。
3)行为事物,在UML模型中属于动态的部分,它们是模型的动词,代表时间和空间上的动作:交互(内部活动)、状态机。
4)分组事物是UML模型中组织的部分,可以把它看成是个盒子,模型可以在其中被分解。只有一种分组事物,包。
5)注释事物是UML模型的解释部分。
3、关系
1)UML用关系把事物结合在一起,主要有4种:依赖、关联、泛化和实现。
2)用例之间的关系可概括为两种:
(1)用于重用的包含关系(2)用于分离出不同行为的扩展关系
3)类之间的关系
(1)关联关系,描述了给定类的单独对象之间语义上的连接。
(2)依赖关系,如果修改元素X的定义可能会引起对另一个元素Y的定义的修改,则称元素Y依赖元素X。
(3)泛化关系,描述了一般食物与该事物中特殊种类之间的关系,也就是父类与子类之间的关系。继承关系是泛化关系的反关系。
(4)聚合关系,一种特殊形式的关联,它是传递和反对称的。表示类之间的关系是整体与部分的关系。
(5)组合关系,如果聚合关系中表示“部分”的类的存在与否,与表示“整体”的类有着紧密的关系,如“公司”与“部门”的关系,那么就是组合关系。
(6)实现关系,将说明和实现联系起来。接口是对行为而非实现的说明,而类之中则包含中实现的结构。
(7)流关系,将一个对象的两个版本以连续的方式连接起来。
3、图形
1)类图。描述一组类、接口、协作和它们之间的关系。
2)对象图。描述一组对象及它们之间的关系。
3)构件图。描述一个封装的类和它的接口、端口,以及由内嵌的构件和连接件构成的内部结构。
4)组合结构图。描述结构化类的内部结构,包括结构化类与系统其余部分的交互点。
5)用例图。描述一组用例、参与者(一种特殊的类)及它们之间的关系。
6)顺序图。是一种交互图,展现了一种交互,它由一组对象或角色以及它们之间可能发送的消息构成。
7)通信图。也是一种交互图,它强调收发消息的对象或角色的结构组织。
8)定时图。也是一种交互图,它强调消息跨越不同对象或角色的实际时间,而不仅仅只是关心消息的相对顺序。
9)状态图。描述一个状态机,它由状态、转移、事件和活动组成。状态图给出了对象的动态视图。
10)活动图。将进程或其他计算的结构展示为计算内部一步步的控制流和数据流。
11)部署图。描述对运行时的处理节点及在其中生存的构件的配置。
12)制品图。描述计算机中的一个系统的物理结构。制品包括文件、数据库和类似的物理比特集合。
13)包图。描述由模型本身分解而成的组织单元,以及它们的依赖关系。
14)交互概览图。是活动图和顺序图的混合物。
四、面向对象分析
分析模型独立于具体实现,即不考虑与系统具体实现有关的因素,这也是OOA和OOD的区别所在,OOA的任务是“做什么”,OOD的任务是“怎么做”。
1、用例模型
1)用例分析技术为软件需求规格化提供了一个基本的元素,而且元素是可验证、可度量的。
2)构建用例模型需要经历识别参与者、合并需求获得用例和细化用例描述三个阶段。
2、分析模型
1)分析模型描述系统的基本逻辑结构,展示对象和类如何组成系统(静态模型),以及它们如何保持通信实现系统行为(动态模型)。
2)建立分析模型包括以下基本活动:
(1)发现领域对象,定义概念类。
(2)识别对象的属性。属性是描述对象静态特征的一个数据项。
(3)识别对象的关系,包括建立类的泛化关系、对象的关联关系。
(4)为类添加职责,分别是类所维护的知识和类能够执行的行为。
(5)建立交互图。
五、面向对象设计
1)面向对象设计是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。
2)面向对象设计的一些基本准则是模块化、抽象、信息隐蔽、高内聚和低耦合。
3)具体的一些面向对象的设计原则:
(1)单一职责原则,这是模块内聚性在类和类的职责中的体现。
(2)开放-封闭原则,在模块本身不变动的情况下,通过改变模块周围的环境达到修改目的。
(3)李氏(Liskov)替换原则,子类型必须能够替换掉它们的基类型;子类具有扩展父类的责任,而不是重写的责任。
(4)依赖倒置原则,高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节。针对接口编程,而不是针对实现编程。
(5)接口隔离原则,应当为客户端提供尽量小的单独接口,而不是提供大的接口;使用多个专门的接口比使用单一的总接口要好。
(6)组合重用原则,要尽量使用组合,而不是继承关系达到重用目的。
(7)迪米特(Demeter)原则,又叫最少知识法则(Least Knowledge Principle,LKP),就是说一个对象应当对其他对象有尽量少的了解。
六、面向对象测试
1)传统测试模式与面向对象的测试模式最主要的区别在于,面向对象的测试更关注对象而不是完成输入输出的单一功能,这样的话测试可以在分析与设计阶段就现行介入,使得测试更好地配合软件生产过程并为之服务。
2)与传统测试模式相比,面向对象测试的优点在于:
(1)更早地定义出测试用例,甚至在需求被确定之前,可以帮助系统分析员和设计师更好地理解需求并且保证需求是可测试的。
(2)由于错误的修改成本与错误发现的时间成正比,早期介入可以降低成本。
(3)尽早地编写系统测试用例,以便开发人员与测试人员对系统需求的理解保持一致。
(4)面向对象的测试模式更注重与软件的实质。
3)面向对象测试包括4个测试层次:算法层、类层、模板层和系统层。
(1)算法层,测试类中定义的每个方法,基本上相当于传统软件测试中的单元测试。
(2)类层,测试封装在同一个类中的所有方法与属性之间的相互作用。面向对象测试中所特有的模块(单元)测试。
(3)模板层,又称为主题层,测试一组协同工作的类或对象之间的相互作用。
(4)系统层,把各个子系统组装成完整的面向对象软件系统,在组装过程中同时进行测试。