面向对象分析(OOA)——如何开始做一个像样的”项目“?如何分析别人的项目?
面向对象分析(OOA)
面向对象设计(OOA)阶段三大模型
- 功能模型:用例图简要的揭示系统需要实现的功能
- 动态模型:以时序图的形式展现用户交互发生过程
- 对象模型:使用类图表示系统需要设计的对象
一、功能模型
功能模型和用例图
功能模型指描述系统功能的模型,可以有多种实现方式,但最常使用用例图描述。以下是用例图的相关描述
尽管用例本身会涉及大量细节和各种可能性,用例图却能提纲挈领地让人了解系统概况。它为“系统做什么”提供了简化了的图形表示,因此被誉为“搭建系统的蓝图”。
由于其简单纯粹的本质,用例图是项目参与者间交流的好工具。用例图的画法是对现实世界的一种刻画,可以让项目参与者明白系统要做成什么样,相对于复杂庞大的类图让人看得不清不楚,令人昏头脑涨,描述功能的用例图更为简洁。
用例图的目的就是为了可以让人在一个更高的层次概览整个系统,用平白的话语让项目参与者理解系统。它可以辅以额外的图表和文档,以更加完整地展现系统的功能和技术细节
用例图的简单组成
简单来说:用例图就是对某个对象(用户)触发某个功能(在某些辅助系统的帮助下)的描述。包含三个元素:
- 使用者:功能的调用者,在不同层面有不同的含义,最外层一般就是整个系统的用户;深入到各个模块衔接,可能是指更上层模块的调用;再细节一点甚至可以视为对象
- 用例:功能的简单描述——登录,查询,取款…再底层就是获取,删除,判断…一般只在较抽象的层次设计而不会到底层
- 辅助系统:执行功能必要的参与角色,有些功能并不是单独完成的,而是需要其他模块加以辅助
简单来说:使用用例图来描述的功能模型仅仅作为一个大概方向,具体流程可细化为动态模型——流程图,具体对象细化为对象模型——类和对象图
二、动态模型
动态模型的描述
动态模型是对整个系统发生事件的流程描述,一般又分为两类,一种是对某类对象的动态行为,可以简单理解为在某阶段触发哪些功能;另一类是对于某个事件的跟踪,通过对事件的处理——输入——转化——输出——每个阶段的处理进行分解。
一般有泳道图,状态转化图等方式描述如下:
动态模型设计启发方法
对于事件跟踪:一般用来处理某个阶段的执行情况
- 首先确定起点和终点,对于交互操作(从触发事件到返回结果),对于复杂的内部处理(找到直接的返回提供者)
- 然后产生中间状态,可能产生的中间结果,使用到的中间对象
- 处理中间状态分配,对于每一个判断分支,在图上表现额外开一个分支,并给分支分配中间状态
- 标识状态转化条件和简要描述
对于泳道图:用以处理复杂功能的调用结构
- 统计该处理流程中参与过的对象
- 从触发函数到函数中又触发函数,在对象中跳转
- 匹配时序画出泳道图
三、对象模型
最基础的模型,主要通过继承,切分等设计提高对象模型的简洁和复用以及合理性。
对象启发
- 关注三个方面:类和关联、类和属性、继承和组织合并
- 寻找类的方法:名称分析(在系统中出现的名词)、多次使用的中间信息、类似功能的集合…选取完之后在进行切分功能,或者合并类
- 类确定后,对类的关系、类所属的层次(分包)、类应该包含的属性和应该具备的功能进行描述
- 在确定类图框架后,在结合动态模型判断是否功能都有对应的类或者几个类支持
欢迎关注我、一起共勉
⭐️⭐️代码之狐⭐️⭐️
主要内容:
- 时不时更新算法题解,算法与数据结构
- 时不时分享心灵鸡汤,详见杂谈栏
- 目前主要在学Java高级内容(虚拟机、框架什么的),会将书中的知识点提炼总结分享
怎么还没人关注我😢