面向对象分析与设计 UML2.0 学习笔记

一、认识UML

UML-Unified Modeling Language 统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语言。UML的定义包括UML语义和UML表示法两个元素。

UML是在开发阶段,说明、可视化、构建和书写一个面向对象软件密集系统的制品的开放方法。最佳的应用是工程实践,对大规模,复杂系统进行建模方面,特别是在软件架构层次,已经被验证有效。统一建模语言(UML)是一种模型化语言。模型大多以图表的方式表现出来。一份典型的建模图表通常包含几个块或框,连接线和作为模型附加信息之用的文本。这些虽简单却非常重要,在UML规则中相互联系和扩展。

在UML系统开发中有三个主要的模型:

功能模型

从用户的角度展示系统的功能,包括用例图

对象模型

采用对象、属性、操作、关联等概念展示系统的结构和基础,包括类图、对象图、包图。

动态模型

展现系统的内部行为。 包括序列图、活动图状态图。、

二、对象

1.  定义

有自己标识的任何东西,也可以说任何一个有幸或无形的事物。

一件事、一个实体、一个名词等

2.  属性

各种标识信息

如名称、编号等等

3.  行为

可以执行的各种操作或者行为信息

如打印、行走、跳、叫等等

4.  描述对象

通过UML对象图进行描述


5.  封装

将对象的相关属性、行为封装到一个类中。

是防止程序员互相干扰的一种方式

6.  关联和聚会

关联

关联是一种弱连接,可以是一部分但并不是完全依赖的

如汽车、司机、一个乘客的或另一个乘客的关系


聚合

把对象放在一起形成一个更大的对象,形成了聚合。

整体对部分有很强的依赖

如电视机的配件,取出来还是配件,但是电视机没了配件就无法使用了


7.  图和树

层次结构的另一个名称

通常将聚合表示为树


 

对象之间的任意集合

常常用来标识关联


8.  链接和可导航性

链接就是各个对象图中的连接

通过添加箭头可以进行导航,标识一个对象指导另一个对象在哪


9.  消息

每个对象都至少会与另一个对象建立联系。

孤立的对象对任何人来说都没有意义。

对象建立联系后就可以进行协作,执行更复杂的任务。

对象间协作时通过相互发消息进行写作。


10.  启动操作

对象 接收消息后执行某个操作,即消息启动操作

11.  协作示例

对象与对象之间的消息交互

消息回应

消息参数


12.  面向对象程序的工作原理

通过创建对象,然后连接在一起,让他们通过消息彼此协作。

第一个消息通常有main函数担任,也就是程序入口点(entry point)

13.  垃圾收集

当对象的生命周期结束后采取措施清理他们。

具体语言不一样,有的语言有垃圾收集器,有的没有

C++没有垃圾收集器,需要使用“智能指针”,当对象生命周期结束后删除对象。

14.  类

封装一组对象的公共属性

类的层次


层次结构公共名称

继承

火车继承了陆上交通工具的特性

一般化/具体化

火车比陆上交通工具更具体,路上交通工具比火车更一般化

父类/子类

陆上交通工具是火车的父类,火车是路上交通工具的子类

超类/子类

陆上交通工具是火车的超类,火车是路上交通工具的子类

基类/派生类

陆上交通工具是基类,火车是派生类

15.  类定义的内容

类名

在代码的其他地方引用类

字段

类对象存储的信息

构造函数

对象初始化

消息

使用对象的方式提供其他对象

方法,如getName()之类的

操作

告诉对象如何操作

方法中的具体执行语句

注释

代码的注释,用来告诉程序员如何使用或维护(编译器会自动忽略)

16.  共享数据和共享操作

开放的公共属性或方法

17.  类型

数据类型或者各种类

18.  术语

属性

一小段信息

如颜色、高度、名称等等

字段

对象内部的指定值

操作

一段执行代码

方法

操作的同义词

消息

从一个对象发送到另一个对象的请求

如方法名代表的就是消息

调用

执行操作

执行

调用的同义词

关联

两个对象之间的直接或间接连接

聚合

强关联,隐含某种层次结构

复合

强聚合,部分在整体的内部,整体可以创建和销毁部分

接口

对象理解的一组消息

协议

通过网络传消息的认可方式

行为

对象所有操作的集合

19.  重用代码

重用系统中的函数

重用对象中的方法

重用系统中的类

在系统之间重用函数

在系统之间重用类

在所有的系统之间重用类

示例

函数库

类库

设计模式

框架

三、继承

1.  引言

子类继承超类的所有字段、消息和方法(以及断言)

2.  设计类层次结构


3.  给类层次结构添加实现代码

4.  抽象类

至少有一个抽象方法的类

抽象方法可以是该类本身的方法,也可以是从超类继承来的。

优点

允许更丰富、更灵活的建模

可以共享跟多的代码,因为可以编写具体的方法来使用抽象的方法。

5.  重定义方法

原因

继承的方法是抽象的,需要具体化

子类中的方法需要完成一些额外的工作

可以为子类提供更好的实现代码,更高效或更准确

6.  实现栈类

使用继承实现栈

直接继承类似List的类

使用复合实现栈

将List放于Stack内

继承和复合

继承

优点

自然的

优雅的

允许编写一般的代码,便于复用

缺点

很难做的很好

在发现设计中的不足时很难改变

客户程序员很难理解

层次结构会泄露给客户代码,也很难改变

复合

优点

较容易开发

较容易改变

客户容易理解

不会泄露给客户代码

7.  多重继承

优点

非常强大

允许私有继承

更接近真实情况

允许混合继承

缺点

比较复杂

导致名称冲突

导致重复继承

编译器更难编写

运行时系统更难编写

8.  使用继承的原则

不要过度使用

不要认为必须使用继承,甚至总是使用继承

继承可以使用复合或者属性替代

类应该是其超类的一个类型

类应该是其超类的扩展

四、类型系统

1.  引言

类型系统是一个简单的概念

他是一组禁止误用值(原型和对象)的规则

确保提供代码的某些说明

提高运行时系统的性能

2.  动态和静态类型系统

3.  多态性

多态变量

多态消息

4.  动态绑定

定义:在运行期间把消息关联到方法上

使用UML依赖(dependency),即为封口的虚线箭头


5.  多态性规则

使用尽可能搞得抽象级别来编程

应确保,只要可能,每个类的类型都是隐藏在引用与所有相关类的一般消息中

6.  类型转换

7.  显示类型转化

8.  使用模板进行泛化

泛型的使用

五、软件开发的方法学

1.  引言

学习方法学的必要性

方法学有助于对编码设置规则

即使只是了解方法学的基本步骤,也能增进对问题的理解,提高解决方案的质量

编写代码知识软件开发的其中一个活动

在每个阶段,方法学都指定了下一步的工作,不必为下一步做什么而烦恼

方法学有助于编写除扩展性更高、可靠性更高、更易于调试的代码

文档说明

等待时间少了

工作能及时交付,且不超过预算

用户、销售员、经理和开发人员之间有更好的交流,开发更有序,误解和浪费资源的情况也比较少

可重复性

更准确的成本

优秀的方法学解决的问题

规划:确定需要做什么

调度:确定完成工作的时间

分配资源:估计和获得人力、软件、硬件和其他需要的资源

工作流:较大开发工作中的子过程(如体系结构,给问题域建模,规划开发过程等

活动:工作流中的各个任务

测试组件

绘制类图

详细列出使用情况等

任务:方法学中由人完成的部分

开发人员

测试人员

销售人员

制品:开发成果

软件

设计文档

培训计划

手册等

教育:如有必要,培训人员,以完成他们的任务,确认最终用户的如何学习使用新系统的方法。

2.  软件开发中的经典阶段

需求

什么是我们的上下文

要达到什么目的

分析

要处理什么实体

如何确保由正确的实体

设计

如何解决问题

在完成的系统中要什么硬件和软件

如何实现解决方案

源代码和支持文件有哪些

规范

哪些规则控制着系统组件之间的接口

可以去除模糊,确保正确吗?

实现

如何编写组件,复合规范的要求

如何编写漂亮的代码

测试

完成的系统满足要求吗?

可以攻破系统吗?

部署

系统管理员必须做什么?

如何培训最终用户?

维护

可以找出和更正错误吗?

可以改进系统吗?

3.  软件工程和瀑布方法学


4.  新方法学

螺旋式方法学


迭代式方法学


递增式方法学


合并方法学


5.  面向对象的方法学

UML、RUP和XP

统一建模语言UML

基于UML的螺旋式,迭代式,递增式方法,RUP(Rational Unified Process)

极限编程XP(extreme programming)

用例图(use case diagram)

用例是对客户、用户或系统谁用另一个系统或业务的方式的惊天描述


类图

显示了在业务或系统本身中存在哪些类


通信图

通信图显示了对象之间的协作


部署图

显示了已完成的系统如何部署到一台或多台机器上


类图(设计级别)

更详细,使用更多的可用表示法


顺序图(时序图)

显示了对象之间的交互


六、收集需求

1.  引言

两个目标

检查业务上下文

开发软件的原因

理解业务

描述系统需求

系统功能

约束条件

性能

开发成本

资源

系统需求

功能需求

必须完成的工作

非功能需求

其他需求,如客户自定的浏览器,界面等

2.  系统的诞生

从某个位置开始

顾客可能提供了详细的文档

专用布局和目录

也可能只提供了任务概述

新业务的简短概述

3.  用例

开始于一个参与者

之后是业务或系统

最后返回到参与者

每个用力的作用都应是参与者的价值

4.  业务说明

标识业务参与者

编写项目术语表

标识业务用例

在通信图中演示用例


在活动图中演示用例


5.  开发人员的说明

系统用例模型

参与者表(带有描述)

用例列表(带有描述)

用例图

用例细节(包括所有相关的非功能需求)

用例调查

辅助需求(不符合任何用例的系统需求)

用户界面草图

改进的术语表

用例的优先级

使参与者特殊化

用例的关系

特殊化

继承

包含

一个用例有第二个用例提供的步骤,该用例就包含第二个用例。

源用例没有目的用例就不能工作

包含在其他用例中的用例可以独立存在

标识为箭头开放的虚线,从包含的用例指向被包含的用例,标上关键字<<include>>

扩展

一个用例给第二个用例增加步骤,即扩展第二个用例。

源用例即使没有目用例也能工作的很好

拓展另一个用例的用例通常只能作为扩展的用例存在。

标识为箭头开放的虚线,从扩展的用例指向被扩展的用例,标上关键字<<extend>>


UML中带有开放箭头的虚线标识依赖性,但在用例图中,说的是用例关系,而不是依赖性。

系统用例的细节

用例号和标题

用例是否为抽象的

与其他用例的关系

前提条件(执行用例前必须满足的条件)

步骤(假定满足了前提条件)

后置条件(在完成用力后保证满足的条件)

异常路径和这些情况下应该做什么

与这个用例相关的非功能需求

前提条件、后置条件和继承

一个用例特殊化另一个用例是,会继承父用例时,会继承父用例的前提条件,作为起点。子用例添加的新前提条件只会弱化继承的前提条件(使用or合并)

对于后置条件,子用例的起点就是父用例的后置条件。子用例添加的新后置条件,只能强化继承的后置条件(使用and合并)

子用例添加的前提条件和后置条件对父用例的前提条件和后置条件没有影响。

辅助需求

用户界面草案

系统用例的优先级

按照实现的优先级给系统需求分级,尤其时在递增开发过程中。

七、分析问题

1.  引言

分析是找出系统要处理什么的过程,而不是确定如何处理的过程

2.  为什么要进行分析

分析可以防止在cedilla理解问题之前设计解决方案。

即使有了系统用例模型,对问题的理解仍是不全面的,因为用例关注的是外部

用例处理的是参与者和系统边界之间的交互操作-系统本身是一个黑盒子。

3.  分析过程概述

步骤

1.  使用系统需求模型查找候选类,以描述与系统相关的对象,并在类图上建立他们

2.  确定类之间的关系(相关、聚合、复合、继承)

3.  确定类的属性(对象的已指定的简单特性)

4.  检查系统用例,确定已有的对象支持他们,在检查过程中微调类、属性和关系

5.  需要时更新术语和非功能需求-用例本身不需要更新,但可能需要某些更正

一般情况下,不要给客户展示对象操作和通信图。

4.  静态分析

确定类

标识类的关系

绘制类图和对象图

绘制关系

关系

继承

实线上的白色箭头从子类指向超类


聚合

带有一白菱形的线条


复合

带有一黑菱形的线条


关联

未修饰的线条


多重性

除继承外的关系,在两端标识参与关系运行时对象的数量(关系中的多重性)

n

表示n

m..n

m到n范围内的任意数值(包含m和n)

p..*

从p到无从大的任意数值

*

0..*的缩写

0..1

可选

属性

属性

对象的一个特性

如大小、位置、名称、价格、字体等等


关联类

有形对象和无形对象

错误的建模

大量没有用的属性

多余的冗余信息

正确的建模

分离有形概念和无形概念

好的对象

5.  动态分析

进行动态分析的原因

确认类图时完整、正确的

相信当前的模型可以在软件中实现

验证最终系统上用户界面的功能

绘制用例的实现过程


边界、控制器和实体


 

参与者

边界

实体

对象

控制器

封装了复杂或凌乱过程的系统内部对象

通信图中的元素


给类添加操作


职责

状态建模


八、设计系统体系结构

找出体系结构,为所有用例支持实际的,有效的解决方案

系统设计中的步骤

系统拓扑

硬件和过程如何在网络上分布

选择技术

编程语言

数据库

协议等

设计并发策略

并发意味着事情同时发生,多过程、用户、机器

软件必须能 协调这些事情

软件安全策略

各个安全方面的正确处理和控制

选择子系统部分

开发若干个软件,然后确保这些软件可以有效的进行通信

把子系统分解为层或其他子系统

每个子系统一般都需要进一步分解为可管理的块,然后才能进行详细设计

决定机器、子系统和层如何通信

通信策略通常时其他步骤的一个副产品

选择联网的系统拓扑

三层体系结构


分解重要的部分

使用正确的机器完成工作

改进性能

改进安全性

保护投资

灵活

可以容纳不同类型的用户

个人计算机

网络计算机

互联网和万维网

内联网

外联网和虚拟私人网络


客户机-服务器与分布式体系结构


用UML描述网络拓扑


主机用UML关键字<<device>>表示

并发设计

设计优秀的并发系统的外观和操作方式与单用户版本没有区别

业务服务对并发用户和单用户时相同的

为了确保业务对象的并发操作的安全,只需田间消息和支持对象;因此,业务消息(和相关的属性)可以单独设计

安全设计

数字加密和解密

一般安全规则

防止未经授权就访问服务器,无论五一还是恶意

界定内部网络的敏感信息

预期公司交易的业务信息

业务策略

个人信息

信用引用机构的信息

与国家安全相关的信息等

防止盗取导出的信息

确保在内联网外部传递的信息只能由指定的接收者读取

保护员工和顾客的密码

防止服务器代码访问不需要的资源

防止客户机代码访问不需要的资源

防止未经授权就访问客户的资源

防止客户受到无意的上海

分解软件

系统和子系统

业务应有许多不同的系统,每个系统都由不同的开发小组实现

通过设计优良的接口以定义明确的受控方式来传送

单层系统的层


两层和三层系统中的层


转换层


持久层

位于业务层与数据库层之间

去除了业务层对所使用的存储机制的依赖

层中的消息流


事件



使用事件的消息流


九、选择技术

1.  引言

选择技术可以做出正确的选择,同时确定对特定记录的独特特性的依赖程度。

2.  客户层技术

多层系统上运行在客户机上的软件

邮件、HTML、js、JAVA等

3.  客户层到中间层的协议

HTTP

Secure Sockets Layer,SSL

Remote Method Invocation, RMI(远程方法调用)

专用协议

IMAP

电子邮件

AIM

AOL即使消息传输

NNTP

USENET新闻

HTTP/CGI

HTML窗体

FTP

文件传输

Telnet

远程登陆

Subtopic

通用协议

TCP/IP

低级传输,也成为套接字

JRMP

用于JAVA对JAVA的通信

IIOP

用于CORBA通信,类似月RMI,但由多种实现语言

4.  中间层技术

服务器应用程序一般时多线程的代码,为高通过量设计的

服务器应用程序监听某些客户连接的端口

5.  中间层到数据层的技术

在中间层上包含数据库-客户代码,一边访问运行在数据层上的DBMS


6.  其他技术

身份验证

XML

事件和消息

SOAP

Web服务

7.  一般前端配置

HTML/CGI和脚本

HTML/CGI和服务小程序

RMI

CORBA

公共对象请求代理程序体系结构

EJB

8.  后端配置

9.  JAVA电子商务配置


10.  UML包

组合相关的类


包可以用于表示

子系统

可重用的库

框架

应一起部署的类

...


十、设计子系统

1.  引言

把概念性的分析模型装换位可实现的类

2.  把分析的类模型映射为设计的类模型

映射操作

变量类型

字段的可见性

访问器

映射类、属性和复合


映射其他类型的关联

一对一关联


一对多关联


多对多关联


关联类


通用标识符


3.  使用关系数据库实现存储

数据库管理系统

DBMS用于

使用数据定义语言(Data Definition Language,DDL)创建一个模型,用来描述要从存储的数据

使用数据操作语言(Data Manipulation Language,DML)添加、删除和更新数据库中的数据

使用数据库查询语言(Data Query Language,DQL)从数据库中检索数据

关系模型

把对象模型映射为关系模型

映射实体类

映射关联

一对一关联


一对多关联


多对多关联


关联表


映射对象状态



 



4.  最终确定用户界面

以用例为指导

简单

使用选项卡

使用向导

避免使用多个窗口

5.  设计业务服务

使用代理和副本

给业务服务分类

会话标识符

业务服务的实现

6.  使用模式、框架和库

7.  事务

保守并发和开放并发

使用事务和对象的一般规则

组织对象和访问路径,以减少重叠

使用主键,是数据库访问都有各自的主题

使事物尽可能短

上层中的事务

处理多个活动

控制多个任务

控制多个线程

线程安全

不变性

固定值

JAVA中的同步

十一、可重用的设计模式

1.  引言

1.1.  设计模式使开发人员避免重复的一种方式。

1.2.  模式简史

1.3.  目前的软件模式

2.  模式模板

3.  常见的设计模式

3.1.  观察器模式

定义对象之间的一对多依赖关系,当一个对象改变状态时,它的所有依赖对象都会自动获得通知。

3.2.  单一模式

确保类只有一个实例,并提供访问它的一个全局点。

3.3.  多重模式



3.4.  迭代器模式

为顺序访问集合对象的元素提供一种方式,且不爆露其底层表示法。


3.5.  工厂方法和抽象工厂

为创建对象而定义接口,但让子类确定实例化哪个类。

工厂方法允许类把实例化推迟到子类。

3.6.  状态模式

允许对象在其内部状态变化时改变其行为。

对象开起来会改变其类。



3.7.  门面模式

为子系统中的一组接口提供统一的接口

门面模式(Facade)定义了使子系统易于使用的高级接口。


3.8.  适配器模式

把类的一个接口口转换为另一个客户机需要的接口。

适配器允许接口不兼容的类一起工作。



3.9.  策略模式和模板方法

定义一系列算法,封装每个算法,使他们可以交互,策略允许算法随使用他的用户的不同而不同。


3.10.  次轻量级模式

使用共享来有效的支持大量细化的对象



次轻量级模式不一定使100%共享的。

3.11.  复合模式

把对象复合到树结构中,表示部分-整体层次结构。

复合模式允许客户机统一的处理各个对象和对象的复合。

3.12.  代理模式

为另一个对象提供代理或占位符,以控制对它的访问。




4.  使用模式

5.  发现、合并和调整吗模式

十二、指定类的接口

1.  引言

2.  规范的定义

3.  正式规范

4.  非正式规范

5.  动态检查

6.  面向对象的规范

OCL

7.  按合同设计

合同和继承

减少错误检查代码

履行合同

应用程序防火墙

十三、不间断的测试

1.  引言

在开发过程中测试代码

优点

提高软件质量(测试人员越多越好)

降低测试阶段的成本

给程序员展示他们正取得进展(而不仅仅生成代码行)

在测试阶段,减少与程序员相关的错误量

有助于程序员因样式或性能原因而重新组织代码,无需破坏已编写好的代码

2.  测试术语

测试test

错误error

故障fault

失败falure

更正fix

验证verification

有效性验证validation

规范

黑盒子测试

白盒子测试

3.  测试的类型

测试过程

单元测试

完整性测试

系统测试

单元测试

完整性测试

Alpha测试

beta测试

用例测试

组件测试

构建测试

负载测试

渗透测试

应力测试

安装测试

接收测试

衰退测试

说明文档测试

安全测试

衡量标准

4.  测试的自动化

负载工具

测试框架

性能监视工具

衡量标准收集工具

规范检查工具

断言检查工具

5.  准备测试

6.  测试策略

7.  测试内容

8.  测试驱动的开发

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
UML和模式应用(原书第3版) 原书名: Applying UML and Patterns : An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) 原出版社: Prentice Hall PTR 作者: (美)Craig Larman [作译者介绍] 译者: 李洋[同译者作品] 郑龑 出版社:机械工业出版社 目录 第一部分 绪 论 第1章 面向对象分析设计 1.1 本书的主要内容 1.2 最重要的学习目标 1.3 什么是分析和设计 1.4 什么是面向对象分析设计 1.5 简短示例 1.6 什么是UML 1.7 可视建模的优点 1.8 历史 1.9 参考资料 第2章 迭代、进化和敏捷 2.1 什么是UP?其他方法能否对其进行补充 2.2 什么是迭代和进化式开发 2.3 什么是瀑布生命周期 2.4 如何进行迭代和进化式分析和设计 2.5 什么是风险驱动和客户驱动的迭代计划 2.6 什么是敏捷方法及其观点 2.7 什么是敏捷建模 2.8 什么是敏捷UP .2.9 UP的其他关键实践 2.10 什么是UP的阶段 2.11 什么是UP科目 2.12 如何定制过程和UP开发案例 2.13 判断你是否理解迭代开发或UP 2.14 历史 2.15 参考资料 第3章 案例研究 3.1 案例研究中涵盖的内容 3.2 案例研究策略:迭代开发+迭代学习 3.3 案例一:NextGen POS系统 3.4 案例二:Monopoly游戏系统 第二部分 初 始 阶 段 第4章 初始不是需求阶段 4.1 什么是初始 4.2 初始阶段的持续时间 4.3 初始阶段会创建的制品 4.4 何时知道自己并不了解初始阶段 4.5 初始阶段中有多少UML 第5章 进化式需求 5.1 定义:需求 5.2 进化式需求与瀑布式需求 5.3 寻找需求可以采用的方法 5.4 需求的类型和种类 5.5 UP制品如何组织需求 5.6 本书是否包含这些制品的示例 5.7 参考资料 第6章 用例 6.1 示例 6.2 定义:参与者、场景和用例 6.3 用例和用例模型 6.4 动机:为什么使用用例 6.5 定义:用例是功能性需求吗 6.6 定义:参与者的三种类型 6.7 表示法:用例的三种常用形式 6.8 示例:详述风格的处理销售 6.9 各小节的含义 6.10 表示法:有其他格式吗?两栏变体 6.11 准则:以无用户界面约束的本质风格编写用例 6.12 准则:编写简洁的用例 6.13 准则:编写黑盒用例 6.14 准则:持有参与者和参与者目标的视点 6.15 准则:如何发现用例 6.16 准则:什么样的测试有助于发现有用的用例 6.17 应用UML:用例图 6.18 应用UML:活动图 6.19 动机:用例还有其他益处吗?语境中的需求 6.20 示例:Monopoly游戏 6.21 过程:在迭代方法中如何使用用例 6.22 历史 6.23 参考资料 第7章 其他需求 7.1 如何完成这些示例 7.2 准则:初始阶段是否应该对此彻底地进行分析 7.3 准则:这些制品是否应该放在项目Web站点上 7.4 NextGen示例:(部分)补充性规格说明 7.5 注解:补充性规格说明 7.6 NextGen示例:(部分)设想 7.7 注解:设想 7.8 NextGen示例:(部分)词汇表 7.9 注解:词汇表(数据字典) 7.10 NextGen示例:业务规则(领域规则) 7.11 注解:领域规则 7.12 过程:迭代方法中的进化式需求 7.13 参考资料 第三部分 细化迭代1—基础 第8章 迭代1—基础 8.1 迭代1的需求和重点:OOA/D技术的核心 8.2 过程:初始和细化 8.3 过程:计划下一个迭代 第9章 领域模型 9.1 示例 9.2 什么是领域模型 9.3 动机:为什么要创建领域模型 9.4 准则:如何创建领域模型 9.5 准则:如何找到概念类 9.6 示例:寻找和描绘概念类 9.7 准则:敏捷建模—类图的草呼 9.8 准则:敏捷建模—是否要使用工具维护模型 9.9 准则:报表对象—模型中是否要包括“票据” 9.10 准则:像地图绘制者一样思考;使用领域术语 9.11 准则:如何对非现实世界建模 9.12 准则:属性与类的常见错误 9.13 准则:何时使用“描述”类建模 9.14 关联 9.15 示例:领域模型中的关联 9.16 属性 9.17 示例:领域模型中的属性 9.18 结论:领域模型是否正确 9.19 过程:迭代和进化式领域建模 9.20 参考资料 第10章 系统顺序图 10.1 示例:NextGen SSD 10.2 什么是系统顺序图 10.3 动机:为什么绘制SSD 10.4 应用UML:顺序图 10.5 SSD和用例之间的关系 10.6 如何为系统事件和操作命名 10.7 如何为涉及其他外部系统的SSD建模 10.8 SSD的哪些信息要放入词汇表中 10.9 示例:Monopoly SSD 10.10 过程:迭代和进化式SSD 10.11 历史和参考资料 第11章 操作契约 11.1 示例 11.2 定义:契约有哪些部分 11.3 定义:什么是系统操作 11.4 定义:后置条件 11.5 示例:enterItem后置条件 11.6 准则:是否应该更新领域模型 11.7 准则:契约在何时有效 11.8 准则:如何创建和编写契约 11.9 示例:NextGen POS契约 11.10 示例:Monopoly契约 11.11 应用UML:操作、契约和OCL 11.12 过程:UP的操作契约 11.13 历史 11.14 参考资料 第12章 迭代地从需求到设计 12.1 以迭代方式做正确的事,正确地做事 12.2 尽早引发变更 12.3 完成所有分析和建模工作是否需要几个星期 第13章 逻辑架构和UML包图 13.1 示例 13.2 什么是逻辑架构和层 13.3 案例研究中应该关注的层 13.4 什么是软件架构 13.5 应用UML:包图 13.6 准则:使用层进行设计 13.7 准则:模型-视图分离原则 13.8 SSD、系统操作和层之间的联系 13.9 示例:NextGen的逻辑架构和包图 13.10 示例:Monopoly逻辑架构 13.11 参考资源 第14章 迈向对象设计 14.1 敏捷建模和轻量级UML图形 14.2 UML CASE工具 14.3 编码前绘制UML需要花费多少时间 14.4 设计对象:什么是静态和动态建模 14.5 基于UML表示法技术的对象设计技术的重要性 14.6 其他对象设计技术:CRC卡 第15章 UML交互图 15.1 顺序图和通信图 15.2 UML建模初学者没有重视交互图 15.3 常用的UML交互图表示法 15.4 顺序图的基本表示法 15.5 通信图的基本表示法 第16章 UML类图 16.1 应用UML:常用类图表示法 16.2 定义:设计类图 16.3 定义:类元 16.4 表示UML属性的方式:属性文本和关联线 16.5 注解符号:注解、注释、约束和方法体 16.6 操作和方法 16.7 关键字 16.8 构造型、简档和标记 16.9 UML特性和特性字符串 16.10 泛化、抽象类、抽象操作 16.11 依赖 16.12 接口 16.13 组合优于聚合 16.14 约束 16.15 限定关联 16.16 关联类 16.17 单实例类 16.18 模板类和接口 16.19 用户自定义的分栏 16.20 主动类 16.21 交互图和类图之间的关系 第17章 GRASP:基于职责设计对象 17.1 UML设计原则 17.2 对象设计:输入、活动和输出的示例 17.3 职责和职责驱动设计 17.4 GRASP:基本OO设计的系统方法 17.5 职责、GRASP和UML图之间的联系 17.6 什么是模式 17.7 现在我们所处的位置 17.8 使用GRASP进行对象设计的简短示例 17.9 在对象设计中应用GRASP 17.10 创建者 17.11 信息专家(或专家) 17.12 低耦合 17.13 控制器 17.14 高内聚 17.15 参考资料 第18章 使用GRASP的对象设计示例 18.1 什么是用例实现 18.2 制品注释 18.3 下一步工作 18.4 NextGen迭代的用例实现 18.5 Monopoly迭代的用例实现 18.6 过程:迭代和进化式对象设计 18.7 总结 第19章 对可见性进行设计 19.1 对象之间的可见性 19.2 什么是可见性 第20章 将设计映射为代码 20.1 编程和迭代、进化式开发 20.2 将设计映射到代码的 20.3 由DCD创建类的定义 20.4 从交互图创建方法 20.5 代码中的集合类 20.6 异常和错误处理 20.7 定义Sale.makeLineItem方法 20.8 实现的顺序 20.9 测试驱动或测试优先的开发 20.10 将设计映射为代码的总结 20.11 NextGen POS程序简介 20.12 Monopoly程序简介 第21章 测试驱动开发和重构 21.1 测试驱动开发 21.2 重构 21.3 参考资料 第四部分 细化迭代2—更多模式 第22章 UML工具与视UML为蓝图 22.1 前向、逆向和双向工程 22.2 什么是有价值特性的常见报告 22.3 对工具有哪些期待 22.4 如果绘制了UML草图,如何在编码后更新该图形 22.5 参考资料 第23章 快速地更新分析 23.1 案例研究:NextGen POS 23.2 案例研究:Monopoly 第24章 迭代2:更多模式 24.1 从迭代1到迭代2 24.2 迭代2的需求和重点:对象设计和模式 第25章 GRASP:其他对象职责 25.1 多态 25.2 纯虚构 25.3 间接性 25.4 防止变异 第26章 应用GoF设计模式 26.1 适配器(GoF) 26.2 一些GRASP原则是对其他设计模式的归纳 26.3 设计中发现的“分析”:领域模型 26.4 工厂(Factory) 26.5 单实例类(GoF) 26.6 具有不同接口的外部服务问题的结论 26.7 策略(GoF) 26.8 组合(GoF)和其他设计原则 26.9 外观(Facade,GoF) 26.10 观察者/发布-订阅/委派事件模型(GoF) 26.11 结论 26.12 参考资料 第五部分 细化迭代3—中级主题 第27章 迭代3:中级主题 27.1 NextGen POS案例 27.2 Monopoly案例 第28章 UML活动图及其建模 28.1 示例 28.2 如何应用活动图 28.3 其他UML活动图表示法 28.4 准则 28.5 示例:NextGen中的活动图 28.6 过程:“统一过程”中的活动图 28.7 背景 第29章 UML状态机图和建模 29.1 示例 29.2 定义:事件、状态和转换 29.3 如何应用状态图 29.4 更多UML状态机图表示法 29.5 示例:使用状态机进行UI导航建模 29.6 示例:NextGen用例的状态机图 29.7 过程:UP中的状态机图 29.8 推荐资源 第30章 用例关联 30.1 包含关系 30.2 术语:具体用例、抽象用例、基础用例和附加用例 30.3 扩展关系 30.4 泛化关系 30.5 用例图 第31章 更多的SSD和契约 第32章 精化领域模型的精化 32.1 NextGen领域模型中的新概念 32.2 泛化 32.3 定义概念超类和子类 32.4 何时定义概念子类 32.5 何时定义概念超类 32.6 NextGen POS案例中的概念类层次结构 32.7 抽象概念类 32.8 对变化的状态建模 32.9 软件中的类层次结构和继承关系 32.10 关联类 32.11 聚合关系和组合关系 32.12 时间间隔和产品价格—解决迭代1阶段的“错误” 32.13 关联角色名称 32.14 作为概念的角色与关联中的角色 32.15 导出元素 32.16 受限关联 32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 定义:变化点和进化点 33.3 架构分析 33.4 架构分析的常用步骤 33.5 科学:架构因素的识别和分析 33.6 示例:NextGen POS的部分架构因素表 33.7 艺术:架构性因素的解决 33.8 架构分析主题的总结 33.9 过程:UP中的迭代架构 33.10 参考资料 第34章 逻辑架构精化 34.1 示例:NextGen的逻辑架构 34.2 使用层模式的协作 34.3 有关层模式的其他问题 34.4 模型-视图分离和“向上”通信 34.5 参考资料 第35章 使用GoF模式完成更多对象设计 35.1 示例:NextGen POS 35.2 本地服务容错;使用本地缓存提高性能 35.3 处理故障 35.4 通过代理(PGoF)使用本地服务进行容错 35.5 对非功能性或质量需求的设计 35.6 使用适配器访问外部物理设备 35.7 对一组相关的对象使用抽象工厂模式 35.8 使用多态性和“Do It Myself”模式处理支付 35.9 示例:Monopoly案例 35.10 结论 第36章 包的设计 36.1 组织包结构的准则 36.2 参考资料 第37章 UML部署图和构件图 37.1 部署图 37.2 构件图 第38章 使用模式设计持久性框架 38.1 问题:持久性对象 32.2 解决方案:持久性框架提供的持久性服务 38.3 框架 38.4 持久性服务和框架的需求 38.5 关键思想 38.6 模式:将对象表示为表 38.7 UML数据建模简档 38.8 模式:对象标识符 38.9 通过外观访问持久服务 38.10 映射对象:数据库映射器或数据库代理模式 38.11 使用模板方法模式进行框架设计 38.12 使用模板方法模式的具体化 38.13 使用MapperFactory配置Mapper 38.14 模式:缓存管理 38.15 在类中合并和隐藏SQL语句 38.16 事务状态和状态模式 38.17 使用命令模式设计事务 38.18 使用虚代理实现滞后具体化 38.19 如何在表中表示关系 38.20 PersistentObject和关注分离 38.21 未决问题 第39章 架构的文档化:UML和N+1视图模型 39.1 SAD和架构视图 39.2 表示法:SAD的结构 39.3 示例:NextGen POS的SAD 39.4 示例:Jakarta Struts 的SAD 39.5 过程:迭代式架构文档 39.6 参考资料 第六部分 其 他 主 题 第40章 迭代式开发和敏捷项目管理的进一步讨论 40.1 如何计划一次迭代 40.2 适应性计划与预测性计划 40.3 阶段计划和迭代计划 40.4 如何使用用例和场景来计划迭代 40.5 早期预算的有效性(无效性) 40.6 将项目制品组织起来 40.7 何时你会发现自己并没有理解迭代计划 40.8 参考资料 参考文献
UML和模式应用(原书第3版) 原书名: Applying UML and Patterns : An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) 原出版社: Prentice Hall PTR 作者: (美)Craig Larman [作译者介绍] 译者: 李洋[同译者作品] 郑龑 出版社:机械工业出版社 目录 第一部分 绪 论 第1章 面向对象分析设计 1.1 本书的主要内容 1.2 最重要的学习目标 1.3 什么是分析和设计 1.4 什么是面向对象分析设计 1.5 简短示例 1.6 什么是UML 1.7 可视建模的优点 1.8 历史 1.9 参考资料 第2章 迭代、进化和敏捷 2.1 什么是UP?其他方法能否对其进行补充 2.2 什么是迭代和进化式开发 2.3 什么是瀑布生命周期 2.4 如何进行迭代和进化式分析和设计 2.5 什么是风险驱动和客户驱动的迭代计划 2.6 什么是敏捷方法及其观点 2.7 什么是敏捷建模 2.8 什么是敏捷UP .2.9 UP的其他关键实践 2.10 什么是UP的阶段 2.11 什么是UP科目 2.12 如何定制过程和UP开发案例 2.13 判断你是否理解迭代开发或UP 2.14 历史 2.15 参考资料 第3章 案例研究 3.1 案例研究中涵盖的内容 3.2 案例研究策略:迭代开发+迭代学习 3.3 案例一:NextGen POS系统 3.4 案例二:Monopoly游戏系统 第二部分 初 始 阶 段 第4章 初始不是需求阶段 4.1 什么是初始 4.2 初始阶段的持续时间 4.3 初始阶段会创建的制品 4.4 何时知道自己并不了解初始阶段 4.5 初始阶段中有多少UML 第5章 进化式需求 5.1 定义:需求 5.2 进化式需求与瀑布式需求 5.3 寻找需求可以采用的方法 5.4 需求的类型和种类 5.5 UP制品如何组织需求 5.6 本书是否包含这些制品的示例 5.7 参考资料 第6章 用例 6.1 示例 6.2 定义:参与者、场景和用例 6.3 用例和用例模型 6.4 动机:为什么使用用例 6.5 定义:用例是功能性需求吗 6.6 定义:参与者的三种类型 6.7 表示法:用例的三种常用形式 6.8 示例:详述风格的处理销售 6.9 各小节的含义 6.10 表示法:有其他格式吗?两栏变体 6.11 准则:以无用户界面约束的本质风格编写用例 6.12 准则:编写简洁的用例 6.13 准则:编写黑盒用例 6.14 准则:持有参与者和参与者目标的视点 6.15 准则:如何发现用例 6.16 准则:什么样的测试有助于发现有用的用例 6.17 应用UML:用例图 6.18 应用UML:活动图 6.19 动机:用例还有其他益处吗?语境中的需求 6.20 示例:Monopoly游戏 6.21 过程:在迭代方法中如何使用用例 6.22 历史 6.23 参考资料 第7章 其他需求 7.1 如何完成这些示例 7.2 准则:初始阶段是否应该对此彻底地进行分析 7.3 准则:这些制品是否应该放在项目Web站点上 7.4 NextGen示例:(部分)补充性规格说明 7.5 注解:补充性规格说明 7.6 NextGen示例:(部分)设想 7.7 注解:设想 7.8 NextGen示例:(部分)词汇表 7.9 注解:词汇表(数据字典) 7.10 NextGen示例:业务规则(领域规则) 7.11 注解:领域规则 7.12 过程:迭代方法中的进化式需求 7.13 参考资料 第三部分 细化迭代1—基础 第8章 迭代1—基础 8.1 迭代1的需求和重点:OOA/D技术的核心 8.2 过程:初始和细化 8.3 过程:计划下一个迭代 第9章 领域模型 9.1 示例 9.2 什么是领域模型 9.3 动机:为什么要创建领域模型 9.4 准则:如何创建领域模型 9.5 准则:如何找到概念类 9.6 示例:寻找和描绘概念类 9.7 准则:敏捷建模—类图的草呼 9.8 准则:敏捷建模—是否要使用工具维护模型 9.9 准则:报表对象—模型中是否要包括“票据” 9.10 准则:像地图绘制者一样思考;使用领域术语 9.11 准则:如何对非现实世界建模 9.12 准则:属性与类的常见错误 9.13 准则:何时使用“描述”类建模 9.14 关联 9.15 示例:领域模型中的关联 9.16 属性 9.17 示例:领域模型中的属性 9.18 结论:领域模型是否正确 9.19 过程:迭代和进化式领域建模 9.20 参考资料 第10章 系统顺序图 10.1 示例:NextGen SSD 10.2 什么是系统顺序图 10.3 动机:为什么绘制SSD 10.4 应用UML:顺序图 10.5 SSD和用例之间的关系 10.6 如何为系统事件和操作命名 10.7 如何为涉及其他外部系统的SSD建模 10.8 SSD的哪些信息要放入词汇表中 10.9 示例:Monopoly SSD 10.10 过程:迭代和进化式SSD 10.11 历史和参考资料 第11章 操作契约 11.1 示例 11.2 定义:契约有哪些部分 11.3 定义:什么是系统操作 11.4 定义:后置条件 11.5 示例:enterItem后置条件 11.6 准则:是否应该更新领域模型 11.7 准则:契约在何时有效 11.8 准则:如何创建和编写契约 11.9 示例:NextGen POS契约 11.10 示例:Monopoly契约 11.11 应用UML:操作、契约和OCL 11.12 过程:UP的操作契约 11.13 历史 11.14 参考资料 第12章 迭代地从需求到设计 12.1 以迭代方式做正确的事,正确地做事 12.2 尽早引发变更 12.3 完成所有分析和建模工作是否需要几个星期 第13章 逻辑架构和UML包图 13.1 示例 13.2 什么是逻辑架构和层 13.3 案例研究中应该关注的层 13.4 什么是软件架构 13.5 应用UML:包图 13.6 准则:使用层进行设计 13.7 准则:模型-视图分离原则 13.8 SSD、系统操作和层之间的联系 13.9 示例:NextGen的逻辑架构和包图 13.10 示例:Monopoly逻辑架构 13.11 参考资源 第14章 迈向对象设计 14.1 敏捷建模和轻量级UML图形 14.2 UML CASE工具 14.3 编码前绘制UML需要花费多少时间 14.4 设计对象:什么是静态和动态建模 14.5 基于UML表示法技术的对象设计技术的重要性 14.6 其他对象设计技术:CRC卡 第15章 UML交互图 15.1 顺序图和通信图 15.2 UML建模初学者没有重视交互图 15.3 常用的UML交互图表示法 15.4 顺序图的基本表示法 15.5 通信图的基本表示法 第16章 UML类图 16.1 应用UML:常用类图表示法 16.2 定义:设计类图 16.3 定义:类元 16.4 表示UML属性的方式:属性文本和关联线 16.5 注解符号:注解、注释、约束和方法体 16.6 操作和方法 16.7 关键字 16.8 构造型、简档和标记 16.9 UML特性和特性字符串 16.10 泛化、抽象类、抽象操作 16.11 依赖 16.12 接口 16.13 组合优于聚合 16.14 约束 16.15 限定关联 16.16 关联类 16.17 单实例类 16.18 模板类和接口 16.19 用户自定义的分栏 16.20 主动类 16.21 交互图和类图之间的关系 第17章 GRASP:基于职责设计对象 17.1 UML设计原则 17.2 对象设计:输入、活动和输出的示例 17.3 职责和职责驱动设计 17.4 GRASP:基本OO设计的系统方法 17.5 职责、GRASP和UML图之间的联系 17.6 什么是模式 17.7 现在我们所处的位置 17.8 使用GRASP进行对象设计的简短示例 17.9 在对象设计中应用GRASP 17.10 创建者 17.11 信息专家(或专家) 17.12 低耦合 17.13 控制器 17.14 高内聚 17.15 参考资料 第18章 使用GRASP的对象设计示例 18.1 什么是用例实现 18.2 制品注释 18.3 下一步工作 18.4 NextGen迭代的用例实现 18.5 Monopoly迭代的用例实现 18.6 过程:迭代和进化式对象设计 18.7 总结 第19章 对可见性进行设计 19.1 对象之间的可见性 19.2 什么是可见性 第20章 将设计映射为代码 20.1 编程和迭代、进化式开发 20.2 将设计映射到代码的 20.3 由DCD创建类的定义 20.4 从交互图创建方法 20.5 代码中的集合类 20.6 异常和错误处理 20.7 定义Sale.makeLineItem方法 20.8 实现的顺序 20.9 测试驱动或测试优先的开发 20.10 将设计映射为代码的总结 20.11 NextGen POS程序简介 20.12 Monopoly程序简介 第21章 测试驱动开发和重构 21.1 测试驱动开发 21.2 重构 21.3 参考资料 第四部分 细化迭代2—更多模式 第22章 UML工具与视UML为蓝图 22.1 前向、逆向和双向工程 22.2 什么是有价值特性的常见报告 22.3 对工具有哪些期待 22.4 如果绘制了UML草图,如何在编码后更新该图形 22.5 参考资料 第23章 快速地更新分析 23.1 案例研究:NextGen POS 23.2 案例研究:Monopoly 第24章 迭代2:更多模式 24.1 从迭代1到迭代2 24.2 迭代2的需求和重点:对象设计和模式 第25章 GRASP:其他对象职责 25.1 多态 25.2 纯虚构 25.3 间接性 25.4 防止变异 第26章 应用GoF设计模式 26.1 适配器(GoF) 26.2 一些GRASP原则是对其他设计模式的归纳 26.3 设计中发现的“分析”:领域模型 26.4 工厂(Factory) 26.5 单实例类(GoF) 26.6 具有不同接口的外部服务问题的结论 26.7 策略(GoF) 26.8 组合(GoF)和其他设计原则 26.9 外观(Facade,GoF) 26.10 观察者/发布-订阅/委派事件模型(GoF) 26.11 结论 26.12 参考资料 第五部分 细化迭代3—中级主题 第27章 迭代3:中级主题 27.1 NextGen POS案例 27.2 Monopoly案例 第28章 UML活动图及其建模 28.1 示例 28.2 如何应用活动图 28.3 其他UML活动图表示法 28.4 准则 28.5 示例:NextGen中的活动图 28.6 过程:“统一过程”中的活动图 28.7 背景 第29章 UML状态机图和建模 29.1 示例 29.2 定义:事件、状态和转换 29.3 如何应用状态图 29.4 更多UML状态机图表示法 29.5 示例:使用状态机进行UI导航建模 29.6 示例:NextGen用例的状态机图 29.7 过程:UP中的状态机图 29.8 推荐资源 第30章 用例关联 30.1 包含关系 30.2 术语:具体用例、抽象用例、基础用例和附加用例 30.3 扩展关系 30.4 泛化关系 30.5 用例图 第31章 更多的SSD和契约 第32章 精化领域模型的精化 32.1 NextGen领域模型中的新概念 32.2 泛化 32.3 定义概念超类和子类 32.4 何时定义概念子类 32.5 何时定义概念超类 32.6 NextGen POS案例中的概念类层次结构 32.7 抽象概念类 32.8 对变化的状态建模 32.9 软件中的类层次结构和继承关系 32.10 关联类 32.11 聚合关系和组合关系 32.12 时间间隔和产品价格—解决迭代1阶段的“错误” 32.13 关联角色名称 32.14 作为概念的角色与关联中的角色 32.15 导出元素 32.16 受限关联 32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 定义:变化点和进化点 33.3 架构分析 33.4 架构分析的常用步骤 33.5 科学:架构因素的识别和分析 33.6 示例:NextGen POS的部分架构因素表 33.7 艺术:架构性因素的解决 33.8 架构分析主题的总结 33.9 过程:UP中的迭代架构 33.10 参考资料 第34章 逻辑架构精化 34.1 示例:NextGen的逻辑架构 34.2 使用层模式的协作 34.3 有关层模式的其他问题 34.4 模型-视图分离和“向上”通信 34.5 参考资料 第35章 使用GoF模式完成更多对象设计 35.1 示例:NextGen POS 35.2 本地服务容错;使用本地缓存提高性能 35.3 处理故障 35.4 通过代理(PGoF)使用本地服务进行容错 35.5 对非功能性或质量需求的设计 35.6 使用适配器访问外部物理设备 35.7 对一组相关的对象使用抽象工厂模式 35.8 使用多态性和“Do It Myself”模式处理支付 35.9 示例:Monopoly案例 35.10 结论 第36章 包的设计 36.1 组织包结构的准则 36.2 参考资料 第37章 UML部署图和构件图 37.1 部署图 37.2 构件图 第38章 使用模式设计持久性框架 38.1 问题:持久性对象 32.2 解决方案:持久性框架提供的持久性服务 38.3 框架 38.4 持久性服务和框架的需求 38.5 关键思想 38.6 模式:将对象表示为表 38.7 UML数据建模简档 38.8 模式:对象标识符 38.9 通过外观访问持久服务 38.10 映射对象:数据库映射器或数据库代理模式 38.11 使用模板方法模式进行框架设计 38.12 使用模板方法模式的具体化 38.13 使用MapperFactory配置Mapper 38.14 模式:缓存管理 38.15 在类中合并和隐藏SQL语句 38.16 事务状态和状态模式 38.17 使用命令模式设计事务 38.18 使用虚代理实现滞后具体化 38.19 如何在表中表示关系 38.20 PersistentObject和关注分离 38.21 未决问题 第39章 架构的文档化:UML和N+1视图模型 39.1 SAD和架构视图 39.2 表示法:SAD的结构 39.3 示例:NextGen POS的SAD 39.4 示例:Jakarta Struts 的SAD 39.5 过程:迭代式架构文档 39.6 参考资料 第六部分 其 他 主 题 第40章 迭代式开发和敏捷项目管理的进一步讨论 40.1 如何计划一次迭代 40.2 适应性计划与预测性计划 40.3 阶段计划和迭代计划 40.4 如何使用用例和场景来计划迭代 40.5 早期预算的有效性(无效性) 40.6 将项目制品组织起来 40.7 何时你会发现自己并没有理解迭代计划 40.8 参考资料 参考文献
UML和模式应用(原书第3版) 原书名: Applying UML and Patterns : An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) 原出版社: Prentice Hall PTR 作者: (美)Craig Larman [作译者介绍] 译者: 李洋[同译者作品] 郑龑 出版社:机械工业出版社 目录 第一部分 绪 论 第1章 面向对象分析设计 1.1 本书的主要内容 1.2 最重要的学习目标 1.3 什么是分析和设计 1.4 什么是面向对象分析设计 1.5 简短示例 1.6 什么是UML 1.7 可视建模的优点 1.8 历史 1.9 参考资料 第2章 迭代、进化和敏捷 2.1 什么是UP?其他方法能否对其进行补充 2.2 什么是迭代和进化式开发 2.3 什么是瀑布生命周期 2.4 如何进行迭代和进化式分析和设计 2.5 什么是风险驱动和客户驱动的迭代计划 2.6 什么是敏捷方法及其观点 2.7 什么是敏捷建模 2.8 什么是敏捷UP .2.9 UP的其他关键实践 2.10 什么是UP的阶段 2.11 什么是UP科目 2.12 如何定制过程和UP开发案例 2.13 判断你是否理解迭代开发或UP 2.14 历史 2.15 参考资料 第3章 案例研究 3.1 案例研究中涵盖的内容 3.2 案例研究策略:迭代开发+迭代学习 3.3 案例一:NextGen POS系统 3.4 案例二:Monopoly游戏系统 第二部分 初 始 阶 段 第4章 初始不是需求阶段 4.1 什么是初始 4.2 初始阶段的持续时间 4.3 初始阶段会创建的制品 4.4 何时知道自己并不了解初始阶段 4.5 初始阶段中有多少UML 第5章 进化式需求 5.1 定义:需求 5.2 进化式需求与瀑布式需求 5.3 寻找需求可以采用的方法 5.4 需求的类型和种类 5.5 UP制品如何组织需求 5.6 本书是否包含这些制品的示例 5.7 参考资料 第6章 用例 6.1 示例 6.2 定义:参与者、场景和用例 6.3 用例和用例模型 6.4 动机:为什么使用用例 6.5 定义:用例是功能性需求吗 6.6 定义:参与者的三种类型 6.7 表示法:用例的三种常用形式 6.8 示例:详述风格的处理销售 6.9 各小节的含义 6.10 表示法:有其他格式吗?两栏变体 6.11 准则:以无用户界面约束的本质风格编写用例 6.12 准则:编写简洁的用例 6.13 准则:编写黑盒用例 6.14 准则:持有参与者和参与者目标的视点 6.15 准则:如何发现用例 6.16 准则:什么样的测试有助于发现有用的用例 6.17 应用UML:用例图 6.18 应用UML:活动图 6.19 动机:用例还有其他益处吗?语境中的需求 6.20 示例:Monopoly游戏 6.21 过程:在迭代方法中如何使用用例 6.22 历史 6.23 参考资料 第7章 其他需求 7.1 如何完成这些示例 7.2 准则:初始阶段是否应该对此彻底地进行分析 7.3 准则:这些制品是否应该放在项目Web站点上 7.4 NextGen示例:(部分)补充性规格说明 7.5 注解:补充性规格说明 7.6 NextGen示例:(部分)设想 7.7 注解:设想 7.8 NextGen示例:(部分)词汇表 7.9 注解:词汇表(数据字典) 7.10 NextGen示例:业务规则(领域规则) 7.11 注解:领域规则 7.12 过程:迭代方法中的进化式需求 7.13 参考资料 第三部分 细化迭代1—基础 第8章 迭代1—基础 8.1 迭代1的需求和重点:OOA/D技术的核心 8.2 过程:初始和细化 8.3 过程:计划下一个迭代 第9章 领域模型 9.1 示例 9.2 什么是领域模型 9.3 动机:为什么要创建领域模型 9.4 准则:如何创建领域模型 9.5 准则:如何找到概念类 9.6 示例:寻找和描绘概念类 9.7 准则:敏捷建模—类图的草呼 9.8 准则:敏捷建模—是否要使用工具维护模型 9.9 准则:报表对象—模型中是否要包括“票据” 9.10 准则:像地图绘制者一样思考;使用领域术语 9.11 准则:如何对非现实世界建模 9.12 准则:属性与类的常见错误 9.13 准则:何时使用“描述”类建模 9.14 关联 9.15 示例:领域模型
UML和模式应用(原书第3版) 原书名: Applying UML and Patterns : An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) 原出版社: Prentice Hall PTR 作者: (美)Craig Larman [作译者介绍] 译者: 李洋[同译者作品] 郑龑 出版社:机械工业出版社 目录 第一部分 绪 论 第1章 面向对象分析设计 1.1 本书的主要内容 1.2 最重要的学习目标 1.3 什么是分析和设计 1.4 什么是面向对象分析设计 1.5 简短示例 1.6 什么是UML 1.7 可视建模的优点 1.8 历史 1.9 参考资料 第2章 迭代、进化和敏捷 2.1 什么是UP?其他方法能否对其进行补充 2.2 什么是迭代和进化式开发 2.3 什么是瀑布生命周期 2.4 如何进行迭代和进化式分析和设计 2.5 什么是风险驱动和客户驱动的迭代计划 2.6 什么是敏捷方法及其观点 2.7 什么是敏捷建模 2.8 什么是敏捷UP .2.9 UP的其他关键实践 2.10 什么是UP的阶段 2.11 什么是UP科目 2.12 如何定制过程和UP开发案例 2.13 判断你是否理解迭代开发或UP 2.14 历史 2.15 参考资料 第3章 案例研究 3.1 案例研究中涵盖的内容 3.2 案例研究策略:迭代开发+迭代学习 3.3 案例一:NextGen POS系统 3.4 案例二:Monopoly游戏系统 第二部分 初 始 阶 段 第4章 初始不是需求阶段 4.1 什么是初始 4.2 初始阶段的持续时间 4.3 初始阶段会创建的制品 4.4 何时知道自己并不了解初始阶段 4.5 初始阶段中有多少UML 第5章 进化式需求 5.1 定义:需求 5.2 进化式需求与瀑布式需求 5.3 寻找需求可以采用的方法 5.4 需求的类型和种类 5.5 UP制品如何组织需求 5.6 本书是否包含这些制品的示例 5.7 参考资料 第6章 用例 6.1 示例 6.2 定义:参与者、场景和用例 6.3 用例和用例模型 6.4 动机:为什么使用用例 6.5 定义:用例是功能性需求吗 6.6 定义:参与者的三种类型 6.7 表示法:用例的三种常用形式 6.8 示例:详述风格的处理销售 6.9 各小节的含义 6.10 表示法:有其他格式吗?两栏变体 6.11 准则:以无用户界面约束的本质风格编写用例 6.12 准则:编写简洁的用例 6.13 准则:编写黑盒用例 6.14 准则:持有参与者和参与者目标的视点 6.15 准则:如何发现用例 6.16 准则:什么样的测试有助于发现有用的用例 6.17 应用UML:用例图 6.18 应用UML:活动图 6.19 动机:用例还有其他益处吗?语境中的需求 6.20 示例:Monopoly游戏 6.21 过程:在迭代方法中如何使用用例 6.22 历史 6.23 参考资料 第7章 其他需求 7.1 如何完成这些示例 7.2 准则:初始阶段是否应该对此彻底地进行分析 7.3 准则:这些制品是否应该放在项目Web站点上 7.4 NextGen示例:(部分)补充性规格说明 7.5 注解:补充性规格说明 7.6 NextGen示例:(部分)设想 7.7 注解:设想 7.8 NextGen示例:(部分)词汇表 7.9 注解:词汇表(数据字典) 7.10 NextGen示例:业务规则(领域规则) 7.11 注解:领域规则 7.12 过程:迭代方法中的进化式需求 7.13 参考资料 第三部分 细化迭代1—基础 第8章 迭代1—基础 8.1 迭代1的需求和重点:OOA/D技术的核心 8.2 过程:初始和细化 8.3 过程:计划下一个迭代 第9章 领域模型 9.1 示例 9.2 什么是领域模型 9.3 动机:为什么要创建领域模型 9.4 准则:如何创建领域模型 9.5 准则:如何找到概念类 9.6 示例:寻找和描绘概念类 9.7 准则:敏捷建模—类图的草呼 9.8 准则:敏捷建模—是否要使用工具维护模型 9.9 准则:报表对象—模型中是否要包括“票据” 9.10 准则:像地图绘制者一样思考;使用领域术语 9.11 准则:如何对非现实世界建模 9.12 准则:属性与类的常见错误 9.13 准则:何时使用“描述”类建模 9.14 关联 9.15 示例:领域模型中的关联 9.16 属性 9.17 示例:领域模型中的属性 9.18 结论:领域模型是否正确 9.19 过程:迭代和进化式领域建模 9.20 参考资料 第10章 系统顺序图 10.1 示例:NextGen SSD 10.2 什么是系统顺序图 10.3 动机:为什么绘制SSD 10.4 应用UML:顺序图 10.5 SSD和用例之间的关系 10.6 如何为系统事件和操作命名 10.7 如何为涉及其他外部系统的SSD建模 10.8 SSD的哪些信息要放入词汇表中 10.9 示例:Monopoly SSD 10.10 过程:迭代和进化式SSD 10.11 历史和参考资料 第11章 操作契约 11.1 示例 11.2 定义:契约有哪些部分 11.3 定义:什么是系统操作 11.4 定义:后置条件 11.5 示例:enterItem后置条件 11.6 准则:是否应该更新领域模型 11.7 准则:契约在何时有效 11.8 准则:如何创建和编写契约 11.9 示例:NextGen POS契约 11.10 示例:Monopoly契约 11.11 应用UML:操作、契约和OCL 11.12 过程:UP的操作契约 11.13 历史 11.14 参考资料 第12章 迭代地从需求到设计 12.1 以迭代方式做正确的事,正确地做事 12.2 尽早引发变更 12.3 完成所有分析和建模工作是否需要几个星期 第13章 逻辑架构和UML包图 13.1 示例 13.2 什么是逻辑架构和层 13.3 案例研究中应该关注的层 13.4 什么是软件架构 13.5 应用UML:包图 13.6 准则:使用层进行设计 13.7 准则:模型-视图分离原则 13.8 SSD、系统操作和层之间的联系 13.9 示例:NextGen的逻辑架构和包图 13.10 示例:Monopoly逻辑架构 13.11 参考资源 第14章 迈向对象设计 14.1 敏捷建模和轻量级UML图形 14.2 UML CASE工具 14.3 编码前绘制UML需要花费多少时间 14.4 设计对象:什么是静态和动态建模 14.5 基于UML表示法技术的对象设计技术的重要性 14.6 其他对象设计技术:CRC卡 第15章 UML交互图 15.1 顺序图和通信图 15.2 UML建模初学者没有重视交互图 15.3 常用的UML交互图表示法 15.4 顺序图的基本表示法 15.5 通信图的基本表示法 第16章 UML类图 16.1 应用UML:常用类图表示法 16.2 定义:设计类图 16.3 定义:类元 16.4 表示UML属性的方式:属性文本和关联线 16.5 注解符号:注解、注释、约束和方法体 16.6 操作和方法 16.7 关键字 16.8 构造型、简档和标记 16.9 UML特性和特性字符串 16.10 泛化、抽象类、抽象操作 16.11 依赖 16.12 接口 16.13 组合优于聚合 16.14 约束 16.15 限定关联 16.16 关联类 16.17 单实例类 16.18 模板类和接口 16.19 用户自定义的分栏 16.20 主动类 16.21 交互图和类图之间的关系 第17章 GRASP:基于职责设计对象 17.1 UML设计原则 17.2 对象设计:输入、活动和输出的示例 17.3 职责和职责驱动设计 17.4 GRASP:基本OO设计的系统方法 17.5 职责、GRASP和UML图之间的联系 17.6 什么是模式 17.7 现在我们所处的位置 17.8 使用GRASP进行对象设计的简短示例 17.9 在对象设计中应用GRASP 17.10 创建者 17.11 信息专家(或专家) 17.12 低耦合 17.13 控制器 17.14 高内聚 17.15 参考资料 第18章 使用GRASP的对象设计示例 18.1 什么是用例实现 18.2 制品注释 18.3 下一步工作 18.4 NextGen迭代的用例实现 18.5 Monopoly迭代的用例实现 18.6 过程:迭代和进化式对象设计 18.7 总结 第19章 对可见性进行设计 19.1 对象之间的可见性 19.2 什么是可见性 第20章 将设计映射为代码 20.1 编程和迭代、进化式开发 20.2 将设计映射到代码的 20.3 由DCD创建类的定义 20.4 从交互图创建方法 20.5 代码中的集合类 20.6 异常和错误处理 20.7 定义Sale.makeLineItem方法 20.8 实现的顺序 20.9 测试驱动或测试优先的开发 20.10 将设计映射为代码的总结 20.11 NextGen POS程序简介 20.12 Monopoly程序简介 第21章 测试驱动开发和重构 21.1 测试驱动开发 21.2 重构 21.3 参考资料 第四部分 细化迭代2—更多模式 第22章 UML工具与视UML为蓝图 22.1 前向、逆向和双向工程 22.2 什么是有价值特性的常见报告 22.3 对工具有哪些期待 22.4 如果绘制了UML草图,如何在编码后更新该图形 22.5 参考资料 第23章 快速地更新分析 23.1 案例研究:NextGen POS 23.2 案例研究:Monopoly 第24章 迭代2:更多模式 24.1 从迭代1到迭代2 24.2 迭代2的需求和重点:对象设计和模式 第25章 GRASP:其他对象职责 25.1 多态 25.2 纯虚构 25.3 间接性 25.4 防止变异 第26章 应用GoF设计模式 26.1 适配器(GoF) 26.2 一些GRASP原则是对其他设计模式的归纳 26.3 设计中发现的“分析”:领域模型 26.4 工厂(Factory) 26.5 单实例类(GoF) 26.6 具有不同接口的外部服务问题的结论 26.7 策略(GoF) 26.8 组合(GoF)和其他设计原则 26.9 外观(Facade,GoF) 26.10 观察者/发布-订阅/委派事件模型(GoF) 26.11 结论 26.12 参考资料 第五部分 细化迭代3—中级主题 第27章 迭代3:中级主题 27.1 NextGen POS案例 27.2 Monopoly案例 第28章 UML活动图及其建模 28.1 示例 28.2 如何应用活动图 28.3 其他UML活动图表示法 28.4 准则 28.5 示例:NextGen中的活动图 28.6 过程:“统一过程”中的活动图 28.7 背景 第29章 UML状态机图和建模 29.1 示例 29.2 定义:事件、状态和转换 29.3 如何应用状态图 29.4 更多UML状态机图表示法 29.5 示例:使用状态机进行UI导航建模 29.6 示例:NextGen用例的状态机图 29.7 过程:UP中的状态机图 29.8 推荐资源 第30章 用例关联 30.1 包含关系 30.2 术语:具体用例、抽象用例、基础用例和附加用例 30.3 扩展关系 30.4 泛化关系 30.5 用例图 第31章 更多的SSD和契约 第32章 精化领域模型的精化 32.1 NextGen领域模型中的新概念 32.2 泛化 32.3 定义概念超类和子类 32.4 何时定义概念子类 32.5 何时定义概念超类 32.6 NextGen POS案例中的概念类层次结构 32.7 抽象概念类 32.8 对变化的状态建模 32.9 软件中的类层次结构和继承关系 32.10 关联类 32.11 聚合关系和组合关系 32.12 时间间隔和产品价格—解决迭代1阶段的“错误” 32.13 关联角色名称 32.14 作为概念的角色与关联中的角色 32.15 导出元素 32.16 受限关联 32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 定义:变化点和进化点 33.3 架构分析 33.4 架构分析的常用步骤 33.5 科学:架构因素的识别和分析 33.6 示例:NextGen POS的部分架构因素表 33.7 艺术:架构性因素的解决 33.8 架构分析主题的总结 33.9 过程:UP中的迭代架构 33.10 参考资料 第34章 逻辑架构精化 34.1 示例:NextGen的逻辑架构 34.2 使用层模式的协作 34.3 有关层模式的其他问题 34.4 模型-视图分离和“向上”通信 34.5 参考资料 第35章 使用GoF模式完成更多对象设计 35.1 示例:NextGen POS 35.2 本地服务容错;使用本地缓存提高性能 35.3 处理故障 35.4 通过代理(PGoF)使用本地服务进行容错 35.5 对非功能性或质量需求的设计 35.6 使用适配器访问外部物理设备 35.7 对一组相关的对象使用抽象工厂模式 35.8 使用多态性和“Do It Myself”模式处理支付 35.9 示例:Monopoly案例 35.10 结论 第36章 包的设计 36.1 组织包结构的准则 36.2 参考资料 第37章 UML部署图和构件图 37.1 部署图 37.2 构件图 第38章 使用模式设计持久性框架 38.1 问题:持久性对象 32.2 解决方案:持久性框架提供的持久性服务 38.3 框架 38.4 持久性服务和框架的需求 38.5 关键思想 38.6 模式:将对象表示为表 38.7 UML数据建模简档 38.8 模式:对象标识符 38.9 通过外观访问持久服务 38.10 映射对象:数据库映射器或数据库代理模式 38.11 使用模板方法模式进行框架设计 38.12 使用模板方法模式的具体化 38.13 使用MapperFactory配置Mapper 38.14 模式:缓存管理 38.15 在类中合并和隐藏SQL语句 38.16 事务状态和状态模式 38.17 使用命令模式设计事务 38.18 使用虚代理实现滞后具体化 38.19 如何在表中表示关系 38.20 PersistentObject和关注分离 38.21 未决问题 第39章 架构的文档化:UML和N+1视图模型 39.1 SAD和架构视图 39.2 表示法:SAD的结构 39.3 示例:NextGen POS的SAD 39.4 示例:Jakarta Struts 的SAD 39.5 过程:迭代式架构文档 39.6 参考资料 第六部分 其 他 主 题 第40章 迭代式开发和敏捷项目管理的进一步讨论 40.1 如何计划一次迭代 40.2 适应性计划与预测性计划 40.3 阶段计划和迭代计划 40.4 如何使用用例和场景来计划迭代 40.5 早期预算的有效性(无效性) 40.6 将项目制品组织起来 40.7 何时你会发现自己并没有理解迭代计划 40.8 参考资料 参考文献
UML(Unified Modeling Language)是一种广泛应用于面向对象分析设计的图形化建模语言,它提供了一套标准化的符号和规则,方便开发人员进行沟通和交流。 以下是一些 UML 面向对象分析设计的教程: 1. 面向对象分析设计基础概念 了解面向对象分析设计的基础概念,包括对象、类、继承、封装、多态等概念。还要了解 UML 的基本符号和图形,如类图、用例图、时序图、活动图等。 2. 面向对象分析设计方法 学习面向对象分析设计的方法,包括用例驱动开发、迭代开发、敏捷开发等方法。同时,需要掌握面向对象设计原则,如单一职责原则、开放封闭原则、里式替换原则等。 3. UML 建模工具 学习 UML 建模工具的使用方法,如 Rational Rose、Enterprise Architect、StarUML 等工具的基本操作和功能。了解如何使用 UML 工具绘制不同类型的 UML 图表,如类图、时序图、活动图等。 4. 面向对象分析设计实践 通过实际项目实践,将所学的面向对象分析设计方法和技能应用到实际开发中。通过实践,加深对面向对象分析设计的理解,提升面向对象分析设计的实际应用能力。 5. UML 规范与标准 了解 UML 规范和标准,如 UML 1.x、UML 2.0 等版本的规范和标准。了解 UML 规范的变化和发展,以及 UML 标准在实际开发中的应用。 6. 面向对象分析设计案例分析 通过分析实际案例,了解面向对象分析设计在实际开发中的应用。通过案例分析,了解面向对象分析设计的思路和方法,以及如何使用 UML 工具对系统进行建模和设计。 总之,UML 面向对象分析设计是一项非常重要的软件开发技能,学习和掌握这项技能可以提高软件开发的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼听禅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值