《Applying UML and Patterns》读书笔记

- 3 mins

第1章:绪论

OOAD(Object-Oriented Analysis and Design) & 迭代开发(Iterative Development)

OOD的原则和模式

第2章:迭代、进化和敏捷

迭代开发是OOAD成为最佳实践的核心。敏捷实践(如敏捷建模)是有效应用UML的关键。 UP是相对流行的、示范性的迭代方法。

2.1 什么是UP & RUP?

UP是构造面向对象系统的迭代软件开发过程。描述了构造、部署以及维护软件的方式。

RUP是UP的详细精化。

2.2 迭代开发(interative development)(iterative and incremental development)

(interative and evolutionary development)

2.5 风险驱动和客户驱动的迭代计划

UP(及大多数新方法)提倡 风险驱动(risk-driven)客户驱动(client-driven) (用例驱动)相结合的迭代计划。

风险驱动迭代开发更明确地包含了 以架构为中心(architecture-centric) 迭代 开发的实践。意味着早期迭代要致力于核心架构的构造、测试和稳定。因为没有稳定的架构会 带来高风险。

2.6 什么是敏捷方法

敏捷开发(agile development)方法通常是时间定量的迭代开发,提倡增量交付,提倡 敏捷性 (快速灵活地响应变更)。

2.7 什么是敏捷建模(agile modeling)

建模(构建UML草图等)的目的是为了来理解,而非文档。

2.8 什么是敏捷UP

UP的创始人并没有为其赋予重量级或非敏捷的含义。实际上,UP可以采纳和应用可适应性和轻量级 的精神——敏捷UP。

2.10 什么是UP的阶段

四个主要阶段

  1. 初始化(Inception):大体构想、业务案例、范围和模糊评估
    • 初始阶段不是需求阶段,而是研究可行性的阶段
  2. 细化(Elaboration):精化的构想、核心架构的迭代实现、高风险的解决、确定大多数的 需求和范围、更为实际的评估
    • 细化阶段不是需求或设计阶段,而是迭代实现核心架构并解决高风险的阶段
  3. 构造(Construction):对遗留下来的低风险和简单元素进行迭代实现,准备部署
  4. 移交(Transition):进行beta测试和部署

2.11 什么是UP科目

科目(descipline):一组活动(及相关制品),例如需求分析中的活动。

制品(artifact):工作产品的统称,如代码、模型、图等。

本书关注以下三个科目中的制品:

UP阶段

UP阶段-en

开发案例

开发案例

第5章:进化式需求

5.4 需求的类型

FURPS

第8章:迭代1—基础

迭代1:细化(Elaboration)阶段第一次迭代

实际项目中的迭代1应该以框架为核心或是风险驱动的。

8.2 过程:初始和细化

初始阶段

细化阶段

用一句话概括细化(elaboration):构建核心架构,解决高风险元素,定义大部分需求,以及预计 总体进度和资源

细化阶段开始构建的制品

第9章:领域模型

领域模型是OO分析中最重要的和经典的模型。是其它几个制品的输入

用例概念和专家的观点将作为领域模型的输入

用例是重要的需求分析制品,但不是面向对象的。用例强调了活动视图。

UP制品

9.2 什么是领域模型(domain model)

更准确地讲,UP领域模型是UP 业务对象模型 (BOM)的特化,但是本书并不提倡创建BOM(因为 需要在实现前进行大量建模)

9.4 如何创建领域模型

以当前迭代中所要设计的需求为界:

  1. 寻找概念类
  2. 将其绘制为UML类图中的类
  3. 添加关联和属性

方法2:使用分类列表

方法3:通过识别名词短语寻找概念类(对用例文本进行 语言分析(lingguistic analysis)

> * 语言分析已经演变得更为完备,同时也发展成为 **自然语言建模**。
* 使用这种方法时必须小心处理自然语言中词语的 **二义性** 

9.7 准则:敏捷建模——绘制类图的草图

9.8 准则:敏捷建模——不需要使用工具维护领域模型

创建领域模型的目的是为了快速理解和沟通大致的关键概念。完美不是目的。领域模型在创建之后通常 很快就被抛弃(即使这样,如果你使用白板的话,我还是建议用数码相机拍下来)

9.16 属性

第10章:系统顺序图

10.3 动机:为什么绘制SSD

因为我么必须为处理和响应这些 系统事件 来设计软件。基本上,软件系统给要对一下三种时间 进行响应

  1. 来自参与者(人或计算机)的外部事件
  2. 时间事件
  3. 错误或异常(通常源于外部)

这些事件是 系统行为(system behavior) 分析的重要部分。

第12章:从需求到设计——迭代进化

12.1 以迭代方式做正确的事,正确的做事

需求和面向对象的分析重点关注学习 做正确的事情 ,后续的设计工作将强调 正确地做事

第14章:迈向对象设计

开发者如何设计对象?

  1. 编码: 在编码的同时进行设计(Java, C#, … …), 更为理想的是使用诸如再工程 (refactoring)这样的强大工具. 根据想象的模型直接编码.
  2. 绘图,然后编码: 在白板或UML CASE工具中绘制一些UML, 然后转到第一种方式,使用文本 增强型集成开发环境(IDE, 如Eclipse或Vsiual Studio)进行编码.
  3. 只绘图,不编码: 使用工具从图中生成一切. 众多倒闭的工具提供商都冲向了这一恶岛之滨 . “只绘图”是不当之词, 因为实际上还是会在UML图形元素上附加文本的编程语言.

本章介绍的是在对象设计前进行 轻量级绘图

设计对象:什么是静态和动态建模

对象模型有两种类型:动态和静态。

第15章:UML交互图

UML使用交互图来描述对象间通过消息的交互。交互图可以用于动态对象建模。

15.1 顺序图和通信图

交互图分为:

15.4

生命线框图

消息返回

发送给自身的消息

实例的创建

图框操作符

关联交互图

第16章: UML 类图(class diagram)

第17章: GRASP:基于职责的设计对象

有时候,OOD会被解释为:

首先明确你的需求并创建领域模型,然后为适当的类添加方法,再定义对象之间的消息以实现需求。

17.1 UML与设计原则

对象思想是本书的主题。最关键的软件开发工具是受过良好设计原则训练的思维,而不是UML或任何 其他技术。

17.2 对象设计:输入、活动和输出

所有的制品都是可选的,也许是为了降低某种风险而创造的。

17.3 职责和职责驱动设计

思考软件对象设计以及大型构件的流行方式是,考虑其 职责、角色和协作 。这是被称为 职责驱动设计 的大型方法的一部分

17.4 GRASP: 基本OO设计的系统方法

理解在对象设计中如何运用GRASP是本书的一个关键目标。

所以,GRASP是有意义的,但另一方面,它只是对原则进行结构化和命名的一种学习工具。一旦你掌握 了这些基本原则,特定的GRASP术语(信息专家(Information Expert),创建者(Creator),…) 就不重要了。

17.6 什么是模式

17.9 在对象设计中应用GRASP

GRASP是通用职责分配软件模式(General Responsibility Assignment Software Patterns) 的缩写。

GRASP是设计OO系统的基础

GRASP的九种模式如下:

Dawson Lee

A man who loves to watch Korean dramas

rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora