UML的使用方式
草稿
蓝本
开发语言
在敏捷开发中我们常以草稿的方式来使用UML。
图
敏捷开发中我们常用到的图是类图跟序列图。我们用这两种图来分析识别领域模型。这些图形识别出来的概念将形成我们对相关领域描述的一套语言。
1.类图(Class Diagram)
用来描述对象的类型,是对静态信息的描述。这些静态的信息包括类的特性(Features)跟类之间的关系及限制。
- 相关概念
类的特性包括性质(Property)跟操作(Operation)。 Property包括类的属性(Attribute)跟关联(Association)。 注意操作(Operation)跟方法(Method)的区别。 Operation是过程的声明。Method是过程的具体实现。这个区别在存在多态的时候比较容易解释。比如,我们父类里有doAction(),在不同的子类中有不同的实现。在这种情况下,我们可以说我们有一个operation,并有多个Method的实现。 Generalization, 从软件开发的角度来看,用继承(inheritance)可以很好地阐述这个问题。判断继承的一个重要原则是李氏替换原则(Liskov Substitution Principle - LSP)。 依赖(Dependency),如果一个单元的相关定义的变换会引起其他单元的变化,我们就可认定着两者间存在依赖。在软件设计时。 通过辨识依赖我们可以分析设计在依赖方面的问题。通常我们要做到单向的依赖,环状依赖的形成是需要我们特别注意避免的。另外,我们尽量要依赖于稳定的单元。接口相对于具体实现要稳定。 根据依赖的定义,其实association,generalization都确立了类之间的依赖关系。但在图形表达时我们要根据想要表达的核心意图来选择是用依赖来表示还是association或generalization。 依赖的传递性上是根据具体依赖的种类不同决定的。一般的依赖不具传递性。有的也有传递性,比如继承。
-注意点
在我们识别generalization关系时,注意区分分类(classification)这个概念。原因是generalization是可传递的,classification是不传递的,它是描述对象跟类型之间的关系。比如,猴子是灵长目,灵长目是动物。灵长目是动物按目的一种分类。我们尝试应用传递关系来组织一下。我们可以说猴子是动物,但我们不能说猴子是动物按目的一种分类。注意这里“灵长目是动物按目的一种分类”是classification。所以注意这里“是”的关系不都是generalization。
2.序列图(Sequence Diagram)
序列图是交互图(Interaction Diagram)的一种。交互图描述某些行为上对象之间(注意是对象之间,不是类。另外有可能不仅仅是类的对象之间,可能还有其他参与者)的相互协作的关系。序列图用来帮助我们捕获一个场景下的行为。画序列图时,我们常针对一个use case进行,找出实例对象以及他们之间交互的信息来进行图示。
-作用
此图不能清楚地描述算法,但它能清楚地描述出调用关系。这很符合我们敏捷开发的需求。作为草图我们无需关注太多算法细节。
此图能清楚地辨析出各个对象的职责。作为OO开发的入门或初级用户,往往容易写出集中控制(centralized control)的代码,因为这样更加贴合过程式的思维习惯。而我们提倡分布的逻辑控制(distributed control),就是把数据跟行为紧密结合到单一职责的对象上。