UML 类图关系详解(学习笔记)
2016-08-17 19:44
465 查看
类的六种关系(按关系由弱到强排列):
依赖关系(Dependency)<关联关系(Association)<聚合关系(Aggregation)<组合关系(Composition)<泛化关系(Generalization)==实现关系(realization)
1,<依赖关系(Dependency)>
依赖关系可解析为A类使用了B类,此处则以Person使用Computer为例子
那么依赖的四种形式为:
(1)参数传递
(2)作为类中的局部对象
(3)调用Computer静态方法
(4)单例类调用
2,<关联关系(Association)>
表明一种拥有的关系, 它使一个类知道另一个类的属性和方法,如上图,Teacher和Student是多对多关系,表示一个学生有多个老师,一个老师有多个学生;而Sutdent和Subject是单向关系,即一个学生能同时学习多个科目,但是科目却不记录学生数。代码如下
依赖与关联的区别:
从类的属性是否增加来看:
*依赖一般不增加类的属性,依赖只在类中局部使用依赖对象的方法。
*关联通常会增加类的属性,属性是一种更为紧密的耦合。
从生存周期来看:
*依赖一般只在类调用方法时产生,随方法调用结束时销毁。
*关联则在类实例化时产生,类销毁时关系结束,生命周期长。
3,<聚合关系(Aggregation)>
如上图所示,PersonGroup(人群)由Person(人)组成,具体来说就是
是整体与部分的关系, 且部分可以离开整体单独存在。
聚合关系与关联关系的区别:
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
4,<组合关系(Composition)>
组合即如上图所示,翅膀和爪子都是鸟的组成部分,不能分割,而类的表现形式为,用户只知道Bird的存在,不能知道Wind和Paw不能离开Bird存在。代码如下:
聚合和组合的区别:
从构造函数来说
*聚合类的构造函数中包含另一个类的实例作为参数,因为该类构造使用外部类,所以Person能作为单独类被使用。
*组合类的构造函数包含另一个类的实例化,因此Wind,Paw与Bird紧密耦合在一起,随Bird的销毁,Wind和Paw也将要被销毁。
从封装性来说
*在聚合关系中,用户可以同时了解PersonGroup类和Person类,因为他们是独立的。
*在组合关系中,用户只认识鸟类,根本不知道翅膀类和爪类的存在,因为翅膀类被严密地封装在鸟类中。
5,<泛化关系(Generalization)>
范化是一种继承关系,通常在基类中包含了虚方法的实现,派生类继承后可以直接使用或者重写(override)方法。代码如下
6,<实现关系(realization)>
这是一种类与接口的关系, 表示类是接口所有特征和行为的实现,接口中的方法并没有实现,需要用户在派生类中实现,接口在C#中可以用于模拟C++中的多重继承。
主要参考:
浅谈UML中类之间的五种关系及其在代码中的表现形式
http://www.cnblogs.com/DebugLZQ/archive/2013/05/13/3066715.html
UML
9a48
类图几种关系的总结
http://blog.csdn.net/dragonpeng2008/article/details/6836448
UML关系(泛化,实现,依赖,关联(聚合,组合))
http://justsee.iteye.com/blog/808799
作图工具:
StarUML2.7
声明:
该文仅作学习与记录之用,欢迎技术纠错和讨论;
非技术性言论皆为一家之谈,如有不同意见请坚持己见;
如有雷同可能为学习汝之所得,请各位巨人的肩膀还请继续空出位置。
依赖关系(Dependency)<关联关系(Association)<聚合关系(Aggregation)<组合关系(Composition)<泛化关系(Generalization)==实现关系(realization)
1,<依赖关系(Dependency)>
依赖关系可解析为A类使用了B类,此处则以Person使用Computer为例子
那么依赖的四种形式为:
(1)参数传递
public class Person { //以参数形式/返回值依赖起来 public Computer Programing(Computer toy) { return null; } }
(2)作为类中的局部对象
public class Person { //在函数中以局部变量的形式出现 public void Person() { Toy tToy = new Toy(); } }
(3)调用Computer静态方法
public class Computer { static public void Open(){} } public class Person { public void Programing() { //调用类静态方法 Computer.Open(); } }
(4)单例类调用
public class Computer { //单例类伪代码 static public Instance(){} public void Open(){} } public class Person { public void Programing() { //使用单例类调用类函数 Computer.Instance().Open(); } }
2,<关联关系(Association)>
表明一种拥有的关系, 它使一个类知道另一个类的属性和方法,如上图,Teacher和Student是多对多关系,表示一个学生有多个老师,一个老师有多个学生;而Sutdent和Subject是单向关系,即一个学生能同时学习多个科目,但是科目却不记录学生数。代码如下
public class Subject() { public Subject(){} } public class Teacher() { private List<Student> ClassMembers; public Teacher(){} public AddStudent(Student s) { ClassMembers.Add(s); } } public class Student() { private List<Subject> Subjects; private List<Teacher> SchoolTeachers; public Student(){} public AddTeacher(Teacher t) { SchoolTeachers.Add(t); } public AddSubject(Subject s) { Subjects.Add(s); } }
依赖与关联的区别:
从类的属性是否增加来看:
*依赖一般不增加类的属性,依赖只在类中局部使用依赖对象的方法。
*关联通常会增加类的属性,属性是一种更为紧密的耦合。
从生存周期来看:
*依赖一般只在类调用方法时产生,随方法调用结束时销毁。
*关联则在类实例化时产生,类销毁时关系结束,生命周期长。
3,<聚合关系(Aggregation)>
如上图所示,PersonGroup(人群)由Person(人)组成,具体来说就是
是整体与部分的关系, 且部分可以离开整体单独存在。
public class Person() { public Person(){} } public class PersonGroup { private List<person> PersonSet; public PersonGroup(Person p) { PersonSet.Add(p); } }
聚合关系与关联关系的区别:
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
4,<组合关系(Composition)>
组合即如上图所示,翅膀和爪子都是鸟的组成部分,不能分割,而类的表现形式为,用户只知道Bird的存在,不能知道Wind和Paw不能离开Bird存在。代码如下:
public class Bird() { private Wind[] wind; private Paw[] paw; public Bird() { wind = new Wind[2]; paw = new Paw[2]; } }
聚合和组合的区别:
从构造函数来说
*聚合类的构造函数中包含另一个类的实例作为参数,因为该类构造使用外部类,所以Person能作为单独类被使用。
*组合类的构造函数包含另一个类的实例化,因此Wind,Paw与Bird紧密耦合在一起,随Bird的销毁,Wind和Paw也将要被销毁。
从封装性来说
*在聚合关系中,用户可以同时了解PersonGroup类和Person类,因为他们是独立的。
*在组合关系中,用户只认识鸟类,根本不知道翅膀类和爪类的存在,因为翅膀类被严密地封装在鸟类中。
5,<泛化关系(Generalization)>
范化是一种继承关系,通常在基类中包含了虚方法的实现,派生类继承后可以直接使用或者重写(override)方法。代码如下
public class Shape { public virtual void Draw(){} } public class Circle:Shape { public override void Draw(){} }
6,<实现关系(realization)>
这是一种类与接口的关系, 表示类是接口所有特征和行为的实现,接口中的方法并没有实现,需要用户在派生类中实现,接口在C#中可以用于模拟C++中的多重继承。
public interface IGetName { string GetName(); } public Person:IGetName { public string GetName() { return "NoBody"; } }
主要参考:
浅谈UML中类之间的五种关系及其在代码中的表现形式
http://www.cnblogs.com/DebugLZQ/archive/2013/05/13/3066715.html
UML
9a48
类图几种关系的总结
http://blog.csdn.net/dragonpeng2008/article/details/6836448
UML关系(泛化,实现,依赖,关联(聚合,组合))
http://justsee.iteye.com/blog/808799
作图工具:
StarUML2.7
声明:
该文仅作学习与记录之用,欢迎技术纠错和讨论;
非技术性言论皆为一家之谈,如有不同意见请坚持己见;
如有雷同可能为学习汝之所得,请各位巨人的肩膀还请继续空出位置。
相关文章推荐
- UML之类图学习——类图的五种关系与代码的对应关系
- UML学习笔记之类之间的关系
- Hibernate学习笔记之ORM实体间关系“OneToOne”详解
- 详解 UML类图之各种关系
- JPA2.0学习笔记---对象/关系映射增强详解
- UML翻译及学习笔记1--Class Diagrams(类图)
- Uml 类图及关系详解
- UML学习笔记(1)之用例图,类图与对象图
- UML 学习笔记三 类图
- UML学习笔记(一)——对象类图
- UML学习笔记(1)之用例图,类图与对象图
- UML学习笔记(二)【类图】
- UML学习笔记(1) 类图
- UML --类图中的关系详解
- UML学习笔记(二)【类图】
- UML-用例、类图、类图之间的关系详解
- java 学习笔记——类之间的关系之封装、继承与多态的详解
- J2EE系列之Spring4学习笔记(六)--IOC详解(bean之间的关系,bean的作用范围)
- UML学习笔记(二)——关系
- 学习ArcGis for Android一些类图关系笔记