rumlee 2019-11-02
OOA——面向对象的分析,就是运用面向对象方法进行系统分析,对问题域(问题所涉及的范围)和系统责任(所开发的系统应具备的职能)进行分析与理解,找出描述问题及系统责任所需要对象,定义对象的属性、操作以及它们之间的关系。
UML是对软件密集型系统中的制品(模型、源代码、测试用例等)进行可视化、详述、构造和文档化的语言。
(1)UML特点
(2)UML的构成
UML中的3类主要元素是基本构造块、规则、公共机制
(3)UML中的视图
UML中的视图包括用例视图、逻辑视图、实现视图、进程视图、部署视图,被称为“4+1”视图
OOA模型是指运用面向对象的分析方法建立的系统模型,包括基本模型、需求模型和辅助模型三部分。
基本模型:基本模型以直观的方式表达了最重要的系统结构信息
需求模型:需求模型用于定义用户需求
辅助模型:辅助模型提供几种对基本模型进行组织或者加强理解的辅助图形
模型规约:对模型进行详细的描述
2.4.1 基本模型——类图
构成类图的主要成分是类、属性、操作、一般-特殊结构、整体-部分结构、关联和消息。这些成分所表达的模型信息可以从下面三个层次来看待:
(1)继承关系(即泛化关系)——通过一般-特殊结构表示
泛化关系"a kind of",类与类之间的关系即继承关系
(2)聚集与组合关系——通过整体-部分结构表示
聚集关系"has-a",组合关系"contains-a":聚集关系表示事物的整体-部分关系较弱的情况,组合关系表示事物的整体-部分关系较强的情况
区别:组合关系中的整体和部分具有同样的生命周期。在聚集关系中,代表部分事物的对象可以属于多个聚集对象,可以为多个聚集对象所共享,而且可以随时改变它所从属的聚集对象。代表部分事物的对象与代表聚集事物对象的生存期无关,一旦删除了它的一个聚集对象,不一定也就随便删除代表部分事物的对象。在组合关系中,代表整体事物的对象负责创建和删除代表部分事物的对象,代表部分事物的对象只属于一个组合对象。一旦删除了组合对象,也就随即删除了相应的代表部分事物的对象。
(3)关联关系——用静态关系表示,分为自返关联、二元关联、N元关联
关联(association)是对具有共同的结构特性、行为特性、关系和语义的链(链表示对象与对象之间的关系,关联表示类与类之间的关系)的描述
(4)依赖关系——用消息表示对象之间在行为上的依赖关系
假设有两个元素X、Y,如果修改X的定义可能会导致对另一个元素Y的定义的修改,则称元素Y依赖于元素X。对于类而言,如果两个类之间有关联关系,那么一般只要表示出关联关系即可,不用再表示这两个类之间还有依赖关系。
建立类图的步骤:
ps:抽象类与接口区别:
抽象类是不能直接产生实例的类,因为抽象类中的方法往往只是一些声明,而没有具体的实现,因此不能抽象类实例化。接口与抽象类很相似,但两者之间存在不同的地方:接口不能含有属性,而抽象类可以含有属性;接口中声明的所有方法都没有实现部分,而抽象类中的某些方法可以有具体的实现。
2.4.2 需求模型——用例图(用况图)
用例是系统、子系统或类和外部的参与者(actor)进行交互的动作序列的说明,包括可选的动作序列和会出现异常的动作序列。而参与者是指系统以外的、需要使用系统或与系统交互的东西,包括人、设备、外部系统等。用例间的关系主要有关联、扩展(extend)、泛化、包含(include)关系等。
(1)泛化关系:子用例继承了父用例的行为和含义,子用例也可以增加新的行为和含义或覆盖父用例中的行为和含义
(2)包含关系<<include>>:指两个用例之间,其中一个用例的行为包含了另一个用例,包含关系是比较特殊的依赖关系。在包含关系中,箭头的方向是从基本用例指向包含用例,即基本用例依赖于包含用例。
(3)扩展关系<<extend>>:扩展关系是对扩展用例有更多的规则限制,即基本用例必须声明若干扩展点,而扩展用例只能在这些扩展点上增加新的行为和含义。在扩展关系中,箭头的方向是从扩展用例到基本用例,也就是说,扩展用例是依赖于基本用例的。
注意区别包含关系与扩展关系:在包含关系中,在执行基本用例时,一定会执行包含用例;在扩展关系中,一个基本用例执行时,可以执行、也可以不执行扩展部分,简言之,满足条件就执行,不满足条件就不执行。
用例图:把用例、参与者以及它们之间的关系用一些图像符号进行可视化表示,便得到用例图。它是直接描述需求的,所以是一个需求模型。
寻找用例的步骤:
2.4.3辅助模型——包图、顺序图、活动图及其他
(1)包图:包(package)是一种将其他模型元素组织起来,形成较大粒度的系统单位的机制。UML中,包是分组事物的一种,它是在建模时用来组织模型中的元素的,在系统运行时并不存在包的实例,这点和类不一样,类在运行时会有实例。
设计包的原则:
ps:重用等级原则、共同闭包原则、共同重用原则这3个原则事实上是相互排斥的,不可能同时被满足。它们是从不同使用者的角度提出的,重用等价原则和共同重用原则是从重用人员的角度考虑的,而共同闭包原则是从维护人员的角度考虑的。共同闭包原则希望包越大越好,而共同重用原则却要求包越小越好。
(2)顺序图:用来描述一组相互协作的对象在完成一项功能时彼此之间的交互情况。它按时间顺序把各个对象所执行的操作以及它们之间所传达的消息展现出来,因此可以清晰直观地表示对象之间的行为依赖关系以及操作与消息的时序关系。
建立顺序图的步骤:
(3) 活动图:活动图的作用是对系统的行为建模,它把系统中的一项行为表示成一个可以由计算机、人或者其他执行者执行的活动,通过给出活动中的各个动作以及动作之间的转移关系来描述系统的行为。类图中的每个类都要定义它应该提供的操作,但是并不能把每个操作的执行过程具体地表示出来。顺序图表现了一组对象是如何通过消息进行交互的,以及有关的操作和消息的时间顺序,但是也没有详细地表示每个操作内部的执行情况。对此,活动图可以起到很好的补充作用。一般活动图可以对系统的工作流程建模,即对系统的业务过程建模,也可对具体的操作建模,用于描述计算机过程的细节。
活动(activity)表示的是某流程中的任务的执行,它可以表示某算法过程中语句的执行。在活动图中注意区分动作状态和活动状态。动作状态是原子的,不能被分解,没有内部转移,没有内部活动,动作状态的工作所占用的时间是可以忽略的,动作状态的目的是执行进入动作,然后转向另一个状态。活动状态是可分解的,不是原子的,其工作的完成需要一定的时间。
泳道:泳道是活动图中的区域划分,根据每个活动的职责对所有活动进行划分,每个泳道代表一个责任区。泳道和类并不是一一对应的关系,泳道关心的是其所代表的职责,一个泳道可能由一个类实现,也可能由多个类实现。
在活动图中,对于同一个触发事件,可以根据不同的警戒条件转向不同的活动,每个可能的转移是一个分支。如果要表示系统或对象中的并发行为,则可以使用分叉(fork)和汇合(join)这两种建模元素。分叉表示的是一个控制流被两个或多个控制流代替,经过分叉后,这些控制流是并发执行的;汇合正好与分叉相反,表示两个或多个控制流被一个控制流代替。
(4)构件图和部署图:构件图和部署图是对面向对象系统物理方面建模的两个图
基本概念:
构件:构件是系统中遵从一组接口且提供其实现的物理的、可替换的部分。构件包括部署构件(如dll文件、exe文件数据库表等)、工作产品构件(如源代码文件、数据文件等)、执行构件(系统执行后得到的构件)
构件图中的构件与类图中的类区别:
部署图两个基本概念:结点和连接
结点是存在于运行时的代表计算资源的物理元素,结点一般都具有一些内存而且常常具有处理能力,结点可以代表一个物理设备以及运行在该设备上的软件系统。结点之间的连线表示系统之间进行交互的通信路径,这个通信路径称为连接。部署图的结点分为两类,即处理机和设备
连接表示两个硬件之间的关联关系。
OOA过程包括以下主要活动
(1)建立需求模型——用例图
(2)建立基本模型——类图
(3)建立辅助模型
(4)建立模型规约:对模型中的成分进行规范的定义和文字说明
(5)原型开发:可选,结合其他活动反复进行
以上各个OOA过程总体来说是一个反复进行,不断完善的过程,以建立基本模型为中心,进行需求模型、基本模型、辅助模型的建立、修复与完善。
参考书籍
《面向对象的系统分析》(第2版) 邵维忠 杨芙清 著
《UML面向对象技术教程》 王少锋 编著