UML的StereoType的解释
UML中的四种机制使地它简单和更易于使⽤,你可以在UML语⾔的任何时候⽤同样的⽅法来使⽤,这四种机制是:
l specifications
l adornments
l common divisions
l extensibility
本章讨论adornments和extensibility这两种机制。
注释是最重要的⼀种修饰。⼀个注释在UML中是⼀个图形符号,描述了和它相关联的元素或⼀组元素的限制或注释语。
上图就是⼀个使⽤注释的例⼦,图中右边的为注释符号。
UML的扩充性机制允许你在控制的⽅式下扩充UML语⾔。这⼀类的机制包括:stereotype,标记值、约束。Stereotype扩充了UML的词汇表,允许你创建新的建筑块,这些建筑块从已有的继承⽽来,但特别针对你的问题。标记值扩充了UML的建筑块的属性,允许你在元素的规格中创建新的信息。约束扩充了UML建筑块的语义,允许你添加新的规则或修改已有的。你将使⽤这些机制来让UML满⾜你的领域和开发的特别需要。
上⾯是⼀个使⽤扩充机制的例⼦。<<subsystem>>是stereotype,{version = 3.2}是标记值
术语和概念
注释是⼀种图形符号⽤来限制或给⼀个元素或⼀组元素加上注解。注释画成⼀个带折⾓的矩形,在矩形中加上⽂字或图形的注
解,stereotype是UML词汇的扩充,允许你创建新的UML建筑块,这些新的建筑块和原有的类似,但特别针对你⾃⼰的问题。通
湘菜菜谱常stereotype画成⽤<<;和>>包围起来的⼀个名字,通常放在另⼀个元素的名字之上。作为可选,stereotype可以画成加⼀个图标。
标记值是UML元素特性的扩充,允许你创建元素规格的新的信息。在UML中标记值画成{}内的字符串,跟在元素名后⾯。
限制是UML元素语义的扩充,允许你对⼀个UML元素添加新规则或修改存在的规则。限制通常画成{}内的字符串,放在关系附近。当然,你也可以把限制⽤注释来表⽰。
通⽤建模技术
1.建模注解
使⽤注释的⽬的是为了让模型更清晰,下⾯是使⽤注释的⼀些技巧:
l将注释放在你要注解的元素边上,写下注解的⽂字。⽤依赖关系的线将注释和被注释的元素连起来会让⼈更明⽩。
l记住,你可以隐藏元素或使隐藏的元素可见。这就意味着你可以将注释不隐藏起来,⽽她注释的元素是可见的,这样会使你的模型图简洁,在必要的地⽅让注释可见。
l如果你的注释很长或不仅仅是普通⽂本,你可以将你的注解放到⼀个独⽴的外部⽂件中(如WORD⽂档)然后链接或嵌⼊到你的模型中。
法律和道德的关系下⾯是⼀个使⽤注解的例⼦:
建⽴新的建筑块
UML的建筑块如:类、接⼝、合作、组件、注释、关系等等,都在为具体问题建模的时候基本上是够⽤了。然⽽,如果你想扩展你的模型的词汇,如⽤来表⽰你的特定的问题领域,你需要stereotypes。
建⽴新的建筑块有如下的技巧:
l确定没有现成的基本的UML⽅法可以表达你的需要。如果你碰到⼀个普通的建模问题,很有可能已经有某种标准的stereotype是你想要的。
如果你确信没有现成的东西可以表达这些语义,⾸先找到⼀个UML中的最接近你要建⽴的模型的元素(例如:类、接⼝、组件、注释、关系等等)然后为她定义⼀个stereotype。值得⼀提的是你可以定义stereotypes的层次从⽽得到⼀般的stereotypes和为它定义的特别的特性。这种⽅法尽量少⽤。
通过对普通的stereotype定义⼀组标记值和对stereotype进⾏限制可以实现普通stereotype不能实现的功能。
如果你希望这些stereotype具有不同的视觉效果,为他们定义⼀个特别的图标。
纪念的反义词上⾯是⼀个例⼦。假如你⽤活动图来为⼀个涉及到教练⼯作流和队员⼯作流的体育活动建模。在这⾥,区别教练和运动员以及与其他的本领域的对象是有意义的。上⾯的图中有两个事物是很突出的,教练对象和队员对象。这⾥不仅仅是普通的类,更确切地说,他们现在是两个新的建筑块。因为定义了教练和员stereotype,并且运⽤到了UML的类上。在这个图上,被标记为:Coach和:Team的匿名实例,后者显⽰了不同的状态。
建模新属性
UML建筑块的基本属性如:类的属性和操作,包的内容等等,都⾜够描述清楚你要建⽴的模型。然⽽,如果你想扩展这些基本建筑块(或者⽤stereotype建⽴的新的建筑块)的属性,你就需要使⽤标记值。
下⾯是⼀些技巧:
⾸先要确定的是你的需要⽆法⽤基本的UML表达。如果你碰到⼀个普通的建模问题,很有可能已经有某种标准的标记值是你想要的如果你确定没有其他的⽅法可以表达你需要的语义,添加新的属性到⼀个单独的元素或⼀个stereotype。继承的规则是适⽤的,也
就是说对⽗亲定义的标记值对⼉⼦也具有。
建⽴新的语义
当你⽤UML建⽴模型的时候,你总是使⽤UML定义的规则,这实在是件好事,因为别的懂得如何读UML的⼈可以毫⽆偏差地读懂你想要表达的东西。然⽽,如果你发现你需要表达的语义是UML⽆法表达的或你想要修改UML的规则,这时你就需要使⽤限制了。下⾯是使⽤限制的⼀些技巧:
⾸先要确定的是你的需要⽆法⽤基本的UML表达。如果你碰到⼀个普通的建模问题,很有可能已经有某种标准的限制是你想要的。
l如果你确定没有其他的⽅法可以表达你需要的语义,⽤⽂本的形式在限制中写下你的新语义,并且将他放在他涉及的元素附近。你可以使⽤依赖关系来明确地表⽰限制和他涉及的元素之间的关联。
l如果你需要详细说明你的语义,你可以⽤使⽤OCL把它写下来。
下⾯的图是⼀个公司⼈⼒资源系统的⼀⼩部分:
在Java中保留Stereotype
作者:仙⼈掌⼯作室 本⽂选⾃:赛迪⽹
在前⾯两篇⽂章中(和),我们⽐较了在Java编程语⾔以及UML建模语⾔这两种环境中,类以及类之间关系在表达⽅式以及概念
⽅⾯的差异。下⾯我们要来看看UML Stereotype机制对于编写Java代码的影响。
在Java程序中保留Stereotype
UML拥有⼀系列可⽤来扩展其核⼼概念的机制,但最为⼈们熟知的也许就是Stereotype。Stereotype⼀般译作“构造型”,它
是⼀种扩展元模型语义的建模元素。构造型必须基于元模型中特定的现有类型或类。构造型可扩展已有类型和类的语义,但不能改
动它们的结构。构造型默认的表⽰⽅法是在关键词周围加上尖⾓双括号,这种双括号在某些欧洲语⾔中⾃然存在,因为它很象两个
尖括号,所以⽤两个尖括号也是⼀种被认可的表⽰⽅式。
构造型⼏乎适⽤于UML中的任何元素,包括类、属性、操作以及关联等。例如,我们可以⽤构造型来显⽰UML图中⼀个类别的
类。图⼀显⽰了⽤构造型来表⽰State设计模式中⼀个类扮演的⾓⾊,改编⾃《Design Patterns》⼀书。UML定义了⼤量的标准
构造型,我们既可以使⽤这些标准构造型,也可以定义⾃⼰的构造型。
图⼀:UML构造型⽤于表⽰类在设计模式中的⾓⾊
图⼀中的MessageStatus接⼝本来应该让interface这个词位于尖括号之内。但是,为了把接⼝和其他构造型区分出来,⽤来制
作本⽂UML图的Together ControlCenter⼯具已予以省略。这是因为接⼝与其他构造型不同,“在UML元模型中接⼝也具有与
类相似的特性”。
直到UML1.4之前(20001年9⽉),UML中的⼀个图形元素只能有⼀个构造型。但在UML 1.4中,OMG(对象管理组织)取消
了这个限制,现在⼀个图形元素可以有多个构造型。许多UML⼯具由于未能跟上这⼀变化,所以仍没有提供这⽅⾯的⽀持。
那么,构造型对于我们的Java代码⼜有何影响呢?从某种意义上讲,答案是“完全没有”,因为Java没有提供任何让我们按照这
种⽅式对类进⾏分类的⼿段(前⾯⼏篇⽂章已经讨论了接⼝和继承,在UML中它们都有⾃⼰特定的表⽰⽅法)。但是,另⼀⽅
⾯,我们可以利⽤构造型更清楚、明⽩地说明Java代码的含义:⾸先约定构造型的具体意义,然后在源代码注释中以⼀个新的
javadoc标记的形式包含构造型,有效地减少为了说明Java代码含义⽽需要⼿⼯编写的说明⽂字数量。下⾯的代码⽚断就是图⼀
Sent类的⾻架代码,构造型以⼀个定制javadoc标记的形式加⼊到了注释之中:
/**
* @Stereotype concreteState
* @author AuthorName
* @version 0.0001
*/小区自治
public class Sent implements MessageStatus {
大麦茶有6大功效}
在UML中,并⾮只有类可以通过指定构造型⽽约束其定义。图⼆显⽰了两个类之间的依赖关系,⽤构造型来表⽰这种依赖关系的类型。在这个例⼦中,Factory类的对象负责创建Item类的对象。Factory类的代码显⽰了定制的javadoc标记如何⽤构造型来简洁明了地说明这种依赖关系。
图⼆:加注instantiate构造型的UML依赖关系
符号说明:在前⾯的⽂章中,我们看到了三种类之间的关系,这⾥出现的是第四种。关联关系⽤⼀根实线加上开叉的箭头表⽰(如果关联关系是单向的话),⼀般化关系⽤实线加上封闭的箭头(从⼦类指向超类)表⽰,Realization关系⽤虚线加上封闭的箭头(从实现接⼝的类指向接⼝)表⽰。现在我们看到了第四种箭头与线型的组合:虚线加上开叉箭头表⽰的依赖关系。
public class Factory
{
/**
* @dependency <<instantiate>> Item
* @return a new Item
*/
public Item createItem() {
迪士尼的英文return new Item();
}美梦图片
}
操作和属性同样可以指定构造型。如图三所⽰,两个操作被加注了构造型,⽤来表⽰它们是否会修改属性的值。与图三对应的源代码同样利⽤定制的javadoc标记说明该⽅法的构造型信息。
煎丸子图三:为类的操作加注UML构造型