类很少独立存在,类之间彼此协作。为系统建模的时候,既要从问题域抽离出对象,还要描述他们的关系。
有依赖、类属、关联(聚合、组合)、实现四种关系。
转载请注明原文地址:http://blog.youkuaiyun.com/ts_dchs/article/details/50740248
1 依赖关系 - Dependency
Dependency Relationship
一个元素的变化会引起另一个的变化。(被依赖的元素Target变化会引起依赖元素Source的变化)
依赖关系还可以再细分为5种类型:
- 绑定(Binding)依赖
- 实现(Realization)依赖
- 使用(Usage)依赖
- 抽象(Abstraction)依赖
- 授权(Permission)依赖
虚线,括号尖,依赖指向被依赖:
2 类属关系 - Generalization (继承关系)
共同特性的元素抽象成类,通过增加内涵进一步细分。
对应的是基本元素(父类)与特殊元素(子类)的关系,
这就是多态(Polymorphism)的特性——++同一操作,用于不同对象,效果不同++。这个实现源于子类的方法可以覆盖父类的方法。
如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。
编码:父类extends子类
实线,三角空心箭头,子类指向父类:
3 关联关系 - Association
两个类之间存在的某种语义的联系,一种弱联系。关联本身是松散的,因为某个场景联系在一起。不过拆开可以独立存在。
编码:成员变量存有对别的对象的引用。声明之后用构造函数或者成员方法赋值。
实线,可以没有箭头。
关联关系可以用四种基本修饰:名字(Name),角色(Role),阶元(Multiplicity),聚合(Agrregation)。
4 聚合关系 - Agrregation
是一种特殊的关联关系。他们之间的联系是整体、部分的关系。整体对部分是依赖的。
是概念上的关系,没有联系整体与部分的生命周期。
一个部分可以被多个整体共享。比如一个墙和两个房间。
编码:关联和聚合在语法没法区分,只能从语义区分。
实线,菱形空心:
5 组合关系 - Composition
组合是聚合的变种,加强了整体与部分有一致的生命周期。
部分不能共享,整体负责Parts的创建和破坏。整体销毁,部分也销毁。
编码:类中的(私有)成员类。在产生对象的时候一起产生。用构造函数自己new出来。
实线,菱形实心
典型例子是一个窗体:
6 实现关系 - Realize
常被用于接口和实现接口的类的关系。
接口是操作的集合,实现了定义和实现的分离。
编码:Java中声明interface,再类声明implements
软件中是用圆圈代表interface,而且上述线型会转化为如图的线
虚线,空心三角
这可以通过右键Icon形式的Interface通过修改Format来自动实现decoration或者label的添加。不用认为方式添加。
7 关联关系的修饰
四种:
- 名字(Name)
- 角色(Role)
- 阶元(Multiplicity)
- 聚合(Agrregation)。
Role:关系中的类,扮演的角色。
在starUML2:在属性的end.name的位置设置。加号是自动带的,代表public,减号private。
Multiplicity:多少个对象参与关联。类似ER图中的数量关系
编码:用一个list做参数?
StarUML2:可以双击name来选择,也可以填写end.multiplicity属性。
有时候,关联本身带有一些信息,不能与二者之间的任何一方合并,需要独立存在,那么就可以用Association Classes表示。
比如,雇佣关系的例子中,可以抽象出关联类-Job
编码:声明一个类代表关系,通过关系类建立两个类的联系。
StarUML2:Calss(Advanced)用Association Class链接一个class和一个关系。
如果有多个关联类,可以抽象出一个父类,大家集成之后在成为各自的关联类。
Navigation,导航:关联关系可以有方向。表明单方向,否则双向。
常见的单向关联有账号和密码,想让账号可以找到密码,但不希望密码找到账号。
编码:通过让账号(源)含有对密码(目标)的引用实现。
StarUML2:有单独的,Directed Association。
notification
source: 资料源于网络。个人所学有限,若有错误和不足还请不吝赐教,我会及时更正。Terrence Zhou.
http://blog.youkuaiyun.com/ts_dchs
转载请注明原址