1、需求模型
用例模型的样例如下:
【用例名称】
一般情况下,用例的名称即需求的名称。
【场景】
场景即用例发生的环境,正好对应 5W 中的 3 个 W:Who、Where、When
【用例描述】
描述详细的用例内容,对应 5W 中的 What 和 How,即用户应该怎样做,以及每个步骤中的输出。但并不
要求每个步骤都一定有输出,可以有也可以没有,也可以有多个。
【用例价值】
描述用例对应的客户价值,对应 5W 中的 Why。
【约束和限制】
即整个需求流程中相关的约束和限制条件,对应 518 方法中的 8C
这种情况一般不用画图
2、领域模型
领域模型是对领域内的概念类或现实世界中对象的可视化表示,又称概念模型、领域对象模型、分析对象
模型。它专注于分析问题领域本身。
1、发掘重要的业务领域概念
2、建立业务领域概念之间的关系。
找名词、加属性、连关系
属性是挖掘名词下有哪些属于名词的特性
3、设计模型
第一步(照猫画虎):领域类映射
【类筛选】
【名称映射】
【属性映射】
【提炼方法】 找动词
第二步(精雕细琢):应用设计原则和设计模式
设计原则和设计模式互补体现在:设计原则主要用于指导“类的定义”的设计,而设计模式主要用于指导
“类的行为”的设计,更通俗一点的讲:设计原则是类的静态设计原则,设计模式是类的动态设计原则。
一般情况下,我们是采用“先设计原则,后设计模式”的方法来操作的
第三步(照本宣科):拆分辅助类
拆分辅助类的主要目的是为了使我们的类在编码的时候能够满足一些框架或者规范的要求。比如说常见的
MVC 模式,将一个业务拆分成 Control、Model、View 三个元素;J2EE 模式中,将对象分为 PO、BO、
VO、DTO 等众多对象
【状态模型】
状态模型主要用于描述对象的生命周期的状态变化。通过状态图,我们可以了解到对象有哪些状态,状态
之间如何转换,转换的触发条件等。当我们发现一个对象的状态比较复杂的时候,就需要设计对象的状态
模型。
【活动模型】
活动模型主要用于描述一个工作流程或者计算流程。其关注点是在完成某项工作的过程中,系统中的哪些
对象承担了什么样的任务、做了什么处理,以及这些对象之间的先后交互关系
【序列模型】
序列模型主要用于描述对象按照时间顺序组织的消息交互过程,其关键特征是强调按照“时间顺序”来组
织对象的交互,所以序列图有时又称为“时序图”或者“顺序图”。序列模型是我们最常用的动态模型,
特别适合将用例模型或者 SSD 转换为系统的动态模型
4、实现模型
各种编程语言对于面向对象的支持或者实现并不完全相同
C++中,类的声明和定义是分开的
C++支持 public、protected、private、friend 共 4 种访问控制方式
C++友元访问机制实质上是对类封装的一种破坏
C++的继承分为 public、protected、private 三种继承方式
C++支持多继承
C++支持虚拟继承
C++虚拟继承虽然解决了多继承的钻石问题,但同样带来了复杂性问题
C++通过虚函数来实现多态
C++没有语法上的关键字来标识抽象类,而是通过纯虚函数的特性来支持抽象类
C++没有提供语法上的关键字来标识接口,同样也是通过纯虚函数来实现接口的
Java 并不区分类的声明和定义两种不同概念的动作,Java 的类只有定义动作
Java 中的访问控制包含两部分:类的访问控制,成员的访问控制
Java 的成员访问控制有 4 种方式:public、protected、默认、private
Java 通过关键字 extends 来指明继承关系
Java 默认情况下就是支持多态的,并不需要像 C++一样通过关键字来标识
Java 通过关键字 abstract 来标识抽象类,相比 C++更加清晰
Java 通过关键字 interface 来标识接口,相比 C++也更加清晰
第三部分:面向对象技巧
8.1. 内聚和耦合
是否专注模块的职责,才是内聚性的充要条件
内聚与耦合是为降低复杂度