OOAD 引论和用例模型(一)
1.1 在 OOAD 中使用 UML 和模式
• OOAD 的目标是设法生成一个高质量的软件‘蓝图’
• UML 是用来绘制软件‘蓝图’的符号语言
• 是一种思考和交流的工具
• 模式(Pattern)是已命名的,针对一个问题的,经过反复验证的一种优化解决方案
• 软件开发中的一些指导原则(Principles)
• UP(Unified Process)是一种指导软件开发活动的方法
• 本书是在 UP 的指导下,以一个案例(POS)为红线介绍 OOAD
1.2 分配职责
• 用OOAD开发出的软件系统是由一组相互合作的对象组成
• 很象现实生活中的团队合作
• 应该包含哪些成员? (OOA)
• 各个成员的职责是什么? (OOD)
• OOAD中最关键,最基本的技能是如何熟练的为软件组件分配职责
• 必不可少的一项活动,且对软件质量影响很大
• 比较难以掌握的一种技能
• GRASP 模式:关于对象设计和职责分配的一组基本原则
1.3 什么是分析和设计?
• 分析强调的是对问题和需求的调查研究(What?)
• 需求分析 - 对需求的调查研究
• 对象分析 - 对领域对象的调查研究
• 设计强调的是一个能满足需求的(概念上的)解决方案(How?)
1.4 什么是OOAD?
• OOA 强调的是在问题领域内去发现对象或概念
• 问题领域指的是需要开发的软件系统的背景领域
• 问题领域随着软件系统的不同而不同
• 问题领域涉及的都是已经存在的实体或概念
• OOD 强调的是如何定义软件对象及他们之间的协作方式来满足需求
• 软件对象大都是受领域对象的启发而得到的
• 在很多情况下软件对象和领域对象一一对应
• 但软件对象之间协作方式的定义却没有这么直观
一个 OOAD 的例子
1.5 OOAD 举例: 掷骰子游戏(软件)
• OOAD 过程的主要活动
– 定义用例 (需求获取)
– 定义领域模型 (OOA, 对象分析)
– 定义交互图 (OOD, 对象设计)
– 定义设计类图 (OOD, 对象设计)
• 定义一个用例(简化的例子)
用例名: 玩掷骰子游戏
参与者: 玩游戏者
用例描述: 玩游戏者一次掷两个骰子,如果两个骰子的面值相加为七则赢
• 定义领域模型
– 在做OOAD时, 我们先创建一个问题域的对象模型,然后在此对象模型的基础上构建一个求解域的对象模型(软件蓝图)
– 问题域的模型的创建是通过识别问题域中的相关概念,概念的属性和相互关系,并将其用UML符号表示出来而完成的
定义交互图
• 利用交互图来探索领域模型中的对象应如何合作来实现软件系统的需求
• 交互图有两种形式(语义等价的)
– 顺序图(Sequence Diagram)
– 合作图(Collaboration Diagram)
• 对象间的合作是通过一个对象向另一个对象发送消息(请求服务)来实现的
定义设计类图
• 在领域模型概念类的基础上定义设计类
• 设计类与软件实现(Java, C++)类相对应