首页 > 代码库 > Mooc软件工程-03面向对象分析与设计
Mooc软件工程-03面向对象分析与设计
1 用例建模
统一过程是目前最好的面向对象泛型
分析工作流, 是为了更深的理解需求, 使设计和实现目标系统更加容易
统一过程覆盖了三种类
实体类(分析工作流涉及到的)
边界类
控制类
面向对象分析的三项工作
用例建模: 目标系统如何来提供功能, 不考虑这些功能的先后顺序, 结果是用例图
类建模: 确定实体类以及实体类的属性, 结果是类图
动态建模: 确定由或者对一个实体类的一些操作, 结果是状态图
用例模型
以用例的形式描述目标系统的功能性需求
主要包括三个元素, 参与者+用例+参与者与用例之间的关系
参与者: 用户与目标系统用例进行交互时所扮演的角色, 不是目标系统的角色, 而是属于外部, 参与者可能是人也可能是机器也有可能是另外一个系统, 也可能是信息的主动给予者也可能是信息的被动接受者
参与者需要用一个小人来表示, 要用单数的相关的名称命名
用例: 用来描述一系列的行为, 对特定的客户返回可观察到的结果, 一个用例描述系统做了什么, 而不是怎么做
用例用一个椭圆来表示, 在椭圆中标识用例名, 一般用强动词来表示
关联: 一个参与者可以链接到一个或者多个用例
用一条直线来表示,
2 用例图
案例1 电梯系统
案例2 在线商店
案例3 课程注册系统
用例图需要一个用例说明
用例说明包括: 用例名; 简单描述; 事件流; 与其他参与者或者用例之间的关系; 是否有什么特殊要求; 前置条件; 后置条件; ...
参与者之间也有可能有关系
继承关系(泛化): 子参与者继承所有父参与者的行为, 子参与者用空心箭头指向父参与者表示
代理: 请求者发出请求, 实际执行操作的是代理者, 用请求者用虚线箭头指向执行者
用例之间的关系
泛化: 一个用例可以分成几种用例, 这种情况是泛化的关系, 使用空心三角箭头由子类指向父类用例
包含: 一个用例A执行之前需要执行另一个用例B, 则原有用例A包含另一个用例B, 用实心三角箭头由用例A执行用例B, 且在箭头上面写上<<include>>
扩展: 一个用例A的某种结果可能形成另一个用例B, 这个用例B就扩展了用例A, 用实心三角有用例B指向用例A
3 类建模
类建模的产品是类图
类图: 分析阶段的类图, 表达的是软件系统中的实体类与他们之间的关系, 针对功能性需求的一种静态视图
类图表达了模型的静态结构(类, 类的内部结构, 类之间的关系)
形成类建模的方法
名词抽取
CRC(类-职责-合作)卡片方法: 需要较多的领域知识, 更适合对类图进行测试
用名词抽取方法实现类建模
1 对目标系统的业务进行言简意赅的描述
2 从描述中抽取出名词, 这些名词很可能成为候选类
3 对提取出的名词进行筛选处理, 不能成为实体类的排除, 不相关的排除
4 结合用例图等形成初步的类建模
4 动态建模
动态建模的产品是状态图
状态图是类图的补充, 描述了一个类的实例可能的状态以及造成这些状态的事件, 这些事件可能是造成这些状态转变的行为
不是所有的类都需要状态图
案例1 CD播放器
案例2 图书馆的书的状态
案例3 购物系统的订单
5 面向对象测试
crc卡片: 对每个类都贴上一个卡片, 该卡片记录了: 类名; 类的功能; 该类将激活的别的类
crc卡片将明确的显示丢失或者不争取的项目
6 软件系统设计
通过需求和分析, 回答了what的问题
在分析和实现之间, 还需要回到how的问题, 这个就是设计
软件系统设计分为
架构设计: 软件系统的整体结构
模块设计: 功能上相对独立, 又可以继承的
数据库设计: 存储和处理数据
数据结构和算法设计: 把软件系统的各个部分连接到一起
用户界面设计: 易用性, 美观大方
软件系统设计先进行架构设计, 在执行后面的四种设计
7 面向对象设计
主要包括两个工作
完成类图: 基于分析阶段的简单类图而完成一个详细类图, 将包括所有的类(实体类; 边界类; 控制类)以及类的属性和方法
完成详细设计: 对类的所有方法进行算法设计, 包括内部变量和数据结构
实现步骤
1) 给每个情景构造交互图
交互图: 完成该情景所涉及的对象以及对象之间传递的消息
包括顺序图和协作图
Mooc软件工程-03面向对象分析与设计