关系是事物之间的联系。类之间有4种重要的关系:依赖、泛化、关联和实现。这些关系都可以映射到代码里。
依赖是一种使用关系,描述了一个事物的规格说明的变化可能会影响到使用它的另一个事物(反之不一定)。在UML中表示为一条指向被依赖事物的虚线。依赖有很多构造型,不过一般不需要使用,以免搞得过份复杂。其实另外3种关系泛化、关联和实现都可以算作是某种依赖关系,只不过它们有比较强的语义和重要的作用,所以划分出来。一般对类关系建模的时候,先对泛化、关联和实现建模,剩下的关系都可以看作依赖了。
对应到代码中,依赖关系可能有很多种形式,例如
public class A
{
public B getB(C c, D d)
{
E e = new E();
B b = new B(c, d, e);
}
}
这里类A就依赖于类B(方法返回类)、C和D(参数类)、E(方法内变量的类),因为这几个类的变化都有可能影响到类A
泛化是一般事物(称为超类或父类)和较特殊的事务(称为子类)之间的关系,对类来说一般就是继承了,如:public Class A extends B。一般用一个带空心箭头的实线表示泛化关系。
关联是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。给定一个连接两各类的关联,可以从一个类的对象导航到另一个类的对象。
一般把关联画为连接相同或者不同的类一条实线。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。大部分情况下导航是单向的,可以加一个箭头表示。
关联在代码中一般表示为属性,例如
public class A
{
private B b;
}
可以认为有一个A指向B的关联。
如果B也关联到A,那么它们就是双向的关联。
有的时候B不是A的属性,但是也可以有关联关系,例如:
public class A
{
public B[] getBs()
{...}
}
方法getBs可能去查数据库,找到A和B之间的关联关系。
两个类之间的简单关联表示了两个同等地位类之间的结构关系。聚合也是一种关联关系,与简单关联不同的是,它描述的是一个整体和组成部分的关系,即“has-a”关系,意思是整体对象拥有部分对象,例如学校和学生的关系。聚合的整体和部分之间在生命周期上没有什么必然的联系,部分对象可以在整体对象创建之前创建,也可以在整体对象销毁之后销毁。聚合用带一个空心菱形(整体的一端)的实线表示。
public Class Person
{...}
public Class School
{
private ArrayList students;
private void addStudent(Person person)
{
students.add(person);
}
}
组合则是比聚合更强的关联形式。组合是指带有很强的拥有有关系且整体与部分的生命周期一致的聚合关联形式。例如Windows的窗口和窗口上的菜单就是组合关系。生命周期一致指的是部分必须在组合创建的同时或者之后创建,在组合销毁之前或者同时销毁,部分的生命周期不会超
出组合的生命周期。组合是用带实心菱形的实线来表示。
public Class Menu
{...}
public Class Window
{
private Menu menu;
}
组合和聚合在代码实现上的主要差别在于生命周期的实现上,组成需要负责其部分的创建和销毁。
public Class School
{
public School()
{...}//不需要创建任何Person对象,其Students都是已有的Person对象
public void destroy()
{...}//只需要关掉School对象和断开它与自己所有的Person对象的关联即可,Person对象是不会销毁的
}
public Class Window
{
private Menu menu;
public Window()
{
menu = new Menu();
}//可以在这时候创建Menu对象,也可以在之后创建
public void destory()
{
menu.destory();
}//必须同时或者在这之前销毁关联的Menu对象
}
另外有一个差别是组合中的一个对象在同一时刻只能属于一个组成对象,而聚合的一个部分对象可以被多个整体对象聚合,例如一个学生可以在多个学校就读,而一个菜单在同一时刻只能是某个窗口内的对象。
实现关系就比较简单了,指的是一个类元描述了另一个类元保证实现的契约。对类来说,就是一个类实现了一个接口
public interface A
{
public void methodA();
}
public class B implements A
{
public void methodA()
{...}
...
}
一般在面对对象的系统中,尽可能的使用接口来减少类之间的耦合。因为接口没有实现,所以依赖于接口就不会依赖于某种具体实现,例如jdbc里的Connection和ResultSet都是接口,不同数据库厂商的实现可以不一样。
总结一下
1)依赖关系:关系对象出现在局部变量或者方法的参数里,或者关系类的静态方法被调用
2)关联关系:关系对象出现在实例变量中
3)聚合关系:关系对象出现在实例变量中
4)合成关系:关系对象出现在实例变量中
5)Generalization: extends
6)实现: implements
聚合是这样的:学生与所选课程之间的关系就是组合,他们之间在感念上没有必然关系,删掉一门课程,不会影响到学生
组合是这样的:订单和订单条目的关系就是聚合,他们的关系很紧密,删掉一个订单,订单条目也就没有意义了
组合是聚合的一种形式
分享到:
相关推荐
IEnumerable<T>、IEnumerable、ICollection<T>、IList<T>、ObservableCollectin<T>和Collection<T>的关系,里面还有个UML图,希望能对大家有所帮助!
<br>UML:Java程序员指南<br><br>【原 书 名】 UML For Java Programmers <br>【原出版社】 Pearson Education Prentice Hall/Pearson <br>【作 者】Robert C. Martin <br>【译 者】 黄晓春 <br>【丛 书 名】 软件...
IEnumerable<T>、ICollection<T>、IList<T>、ObservableCollectin<T>和Collection<T>的关系。还有UML图。希望能帮到有需要的人。:)
用UML进行对象建模<br>为什么使用UML<br>什么是UML<br>UML图表<br>如何将UML建模图表配合在一起<br>如何将UML合并到我们的项目中<br>可以考虑的一些UML CASE工具<br>小结<br>第4章 数据建模<br>数据建模的阶段<br>...
<br><br>第五章 用Rational Rose生成系统框架代码<br>§5.1 生成框架代码的基本步骤<br>§5.2 生成什么<br>§5.3 由Rational Rose生成的部分框架代码 <br>§5.4 用Rational Rose逆向转出工程代码简介 <br>第六章 ...
ReadTestquestion<br>7.5. 课程设计作业<br>第8章 日历记事本<br>8.1. 设计内容<br>8.2. 设计要求<br>8.3. 总体设计<br>8.4. 具体设计<br>8.4.1. 运行效果与程序发布<br>8.4.2. 主类CalendarPad<br>8.4.3. 记事本...
UML Applied: A .NET Perspective 第一部分<br>Table of Contents <br> UML Applied—A .NET Perspective <br> Foreword <br> Introduction <br> Part One - UML and Five-Step UML: It's all About Communication ...
<br><br>第一部份、UML和模式介绍 <br> <br>com.javapatterns.uml 统一建模语言UML介绍 <br> <br><br>第二部份、面向对象的设计原则 <br> <br>com.javapatterns.openclose “开-闭”原则 <br>...Java接口 <br>...
Software Evolution with UML and XML <br> Preface <br> Chapter I - A Framework for Managing Consistency of Evolving UML Models <br> Chapter II - Deriving Safety-Related Scenarios to Support ...
Software Evolution with UML and XML <br> Preface <br> Chapter I - A Framework for Managing Consistency of Evolving UML Models <br> Chapter II - Deriving Safety-Related Scenarios to Support ...
ModelGoon,Eclipse插件。由 java代码可自动生成UML类图、协作图、顺序图等,操作简单
Professional UML with Visual Studio .NET—Unmasking Visio for Enterprise Architects 第二部分<br>Table of Contents <br> Professional UML with Visual Studio .NET—Unmasking Visio for Enterprise ...
第一章 针对Java程序员的UML概述<br>第二章 使用图(Diagrams)<br>第三章 类(Class)图<br>第四章 序列(Sequence)图<br>第五章 用例(use case)<br>第六章 面向对象设计(OOD)原则<br>第八章 包(Packages)<br>第九章 ...
Professional UML with Visual Studio .NET—Unmasking Visio for Enterprise Architects 第一部分<br>Table of Contents <br> Professional UML with Visual Studio .NET—Unmasking Visio for Enterprise ...
while also applying the UML<br><br>New coverage of UML 2, Agile Modeling, Test-Driven Development, and refactoring<br><br>Many new tips on combining iterative and evolutionary development with OOA/D...
UML教程<br>4e-01UML概述.ppt<br>4e-02use case.ppt<br>4e-02use case补充内容.ppt<br>4e-03sequence-collaboration.ppt<br>4e-04class-object-package.ppt<br>4e-05状态-活动-构件-配置图.ppt<br>4e-06Web建模.ppt...
关系是事物之间的联系。类之间有4种重要的关系:依赖、泛化、关联和实现。这些关系都可以映射到代码里。
<br>1) 粘度<br>2) 僵硬<br>3. 系统应该设计成什么样<br>1) 扩展<br>2) ……<br>4. 达到的原则(6个)<br>5. 设计模式<br>1) 解决什么问题<br>2) 怎样解决(code代码+uml图)<br>3) 优缺点<br>
著,俞志翔 译<br><br>【出版社】清华大学出版社<br><br>【ISBN】7302125465<br><br>【出版日期】2006年04月<br><br>本书详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。...