uml类图的关系:

泛化关系也就是继承。

实现关系就是一个类实现另外一个接口。

依赖关系就是一个类使用了另外一个类,是一种使用关系,在这个类的某个服务中需要另外一个类来协助。

关联关系就是一类拥有另外一个类,是一种拥有关系,这个类在创建的时候需要另外一个类的协助,可以是双向的但是最好依据业务的关注点变成单向的。

聚合关系是整体与部分的关系但是部分可以离开整体而存在。

组合关系也是整体与部分的关系但是两者的生命周期是绑定在一起的,部分不能离开整体而存在。

更喜欢我们大哥的分类:

多态:

泛化关系,实现关系

依赖:

依赖关系

关联:

关联关系,聚合关系,组合关系

详见博客

类图关系的图形表示:

泛化关系(继承)
(带三角箭头的实线,箭头指向父类)

实现关系
(带三角箭头的虚线,箭头指向接口)

依赖关系
(带箭头的虚线,指向被使用者)

关联关系:
(带普通箭头的实心线,指向被拥有者)

聚合关系
(带空心菱形的实心线,菱形指向整体)

组合关系
(带实心菱形的实线,菱形指向整体)

代码层面的表示:

泛化关系
public Class Tigger extends Animal{
实现关系
public Class Course implements Goods{
依赖关系
局部变量、方法的参数或者对静态方法的调用

关联关系,聚合关系,组合关系都是成员变量

实际应用需注意:

要依据真实需求的描述来确定类关系

类与类之间关系的确定必须是依据实际需求,换句话说就是在某个语义下才能确定两个类的关系,客观真实的反应真实需求。
比如:语义环境是:"汽车有四个车轮,有了车轮汽车才可以行驶,车轮本身有自己的特征(颜色,大小)"
那么我们就可以抽取出汽车类和车轮类,那么如何确定他们的关系??
根据uml类关系我们可以排除实现和继承,那么就剩下关联和依赖,依赖强调的是使用关系,关联强调的是拥有关系,“有车轮才可以行驶”这句话就可以
推断出他们不是使用关系,而是拥有关系,汽车必须拥有车轮。所以应该是:

比如:语义环境“卸掉的车轮要放到车库中去”依据这句话我们可以抽取两个类
车轮类和车库类,那么他们之间的关系又是什么呢?
肯定也不是实现和继承,那究竟是依赖还是关联呢,根据"车轮放到车库中"这句话可以得出,车库要提供一个存放车轮的服务,
两者不是拥有关系而是使用关系。所以:

另外一种方式确定类的关系

语义描述"一个学习视频有多个知识点,一个知识点又可以被多个视频拥有"
还有一种方法来确定两个类的关系,使用类关系的代码体现确定类关系:
依赖关系的代码体现是方法参数,局部变量,静态方法调用。
关联关系的代码体现是成员变量。
根据"一个学习视频有多个知识点"的描述我们可以知道,视频类肯定有一个list<知识点类>的成员变量,
根据"一个知识点又可以被多个视频拥有"的描述我们可以知道,知识点类也有一个list<视频类>的成员变量,
所以可以断定视频类和知识点是关联关系。

注意:并不是所有的成员变量都是关联关系,如果说这个对象在创建的时候就需要这个属性,那么就可以断定是关联关系,
但是如果这个属性可以放在创建这个对象之后赋值,那么它就是依赖关系。

针对多对多一对多这种关系的指向如何确定以哪一类为起点呢??

还是上面的语义描述"一个学习视频有多个知识点,一个知识点又可以被多个视频拥有"
由上面的分析我们已经可以确定视频类和知识点是关联关系,那我们在做指向的时候做双向箭头的话,理解起来会有问题,如:

所以我们团队的做法是根据你的业务关注程度,比如说你正在做视频有关的业务,那你就应该讲箭头指向知识点类。

确定完类关系为关联关系之后我们创建的类要如何体现类关系呢?比如:关联关系的一对多,多对多?

可能有人觉得前面已经讲过关联关系的代码体现是成员变量吗,直接使用成员变量不就完了吗?
比如:
一对多:
一里面放一个类型为多的集合成员变量。
多对多:
双方都存放彼此类型集合的成员变量。
但是,这样我们在做数据持久的时候非常麻烦。
所以我们的做法是:
如果是一对多就在以里面存放一个多的主键ID,比如:
一个视频一定是属于某个老师的,代码如图:

如果是多对多我们采用的是关系表去做,
比如说视频和知识点的关系我们会创建一个关系表去承载这个多对对关系,在实体类中不做体现。

我对uml类图关系的理解的更多相关文章

  1. UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

    UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父 ...

  2. 图解六大UML类图关系

    在学习UML类图的过程中,UML类图关系是必须要掌握的问题,UML定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合.下面对其定义和表示方法逐一说明. UML类图关系简介 依赖(Dependen ...

  3. UML类图关系大全

    UML类图关系大全 1.关联 双向关联: C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法.在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设 ...

  4. UML[1] UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)(转)

    转自:http://blog.csdn.net/zhaoxu0312/article/details/7212152 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是 ...

  5. UML类图关系大全【转】

    UML类图关系大全 1.关联 双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法. 在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设 ...

  6. 【UML】UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

    http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的 ...

  7. UML类图关系(继承、泛化、实现、依赖、关联、聚合、组合)

    继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者 ...

  8. UML类图关系(转,添加了实例)

    UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Associati ...

  9. UML类图关系表示方法

    本文转载: http://blog.csdn.net/fengsh998/article/details/8105631 分类: UML2012-10-24 10:18 1175人阅读 评论(0) 收 ...

随机推荐

  1. input(file)按钮美化

    <!DOCTYPE HTML> <html> <body> <input type="file" id="upload" ...

  2. 小菜学习编程-Winform系列(初学者)

    前言 记得上次写<小菜的程序员道路(二)>,这篇文章的时候说过,要把工作以来整理的编程知识分享给大家,因为这半年来的工作实在是忙,现在也在忙着公司产品上线,但是答应的一定要实现,大家看我上 ...

  3. Javascript常用正则表达式汇总

    一.匹配数字和字符串 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数 字:"^\d{n}$&qu ...

  4. java读写file

    private static String encoding = "utf-8"; public static void readTxt(String filePath) thro ...

  5. 【翻译】设计模式学习系列1---【Design Patterns Simplified: Part 1【设计模式简述:第一部分】】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part1/ Design Pattern ...

  6. 轻量级ORM

    不知道可能称的上是ORM,其实就是一个DBHelper.看到网上不少人写自己的ORM,但我觉得都不太好. 我这个ORM,学习成本非常低,常用的方法仅有几个,在使用的过程中,你不需要有太多要注意的地方, ...

  7. Asp.Net 上传图片并生成高清晰缩略图

    在asp.net中,上传图片功能或者是常用的,生成缩略图也是常用的.baidu或者google,c#的方法也是很多的,但是一用却发现缩略图不清晰啊,缩略图片太大之类的事情,下面是我在处理图片上的代码, ...

  8. 利用SHELL脚本实现文件完整性检测程序(1.2版更新)

    一..开发背景 因时势所逼,需要对服务器的文件系统实行监控.虽然linux下有不少入侵检测和防窜改系统,但都比较麻烦,用起来也不是很称手.自己琢磨着也不需要什么多复杂的功能,写个脚本应该就可以满足基本 ...

  9. [WCF编程]11.错误:错误类型

    一.错误概述 不管是哪一种操作,在任意时刻都可能出现不可预期的错误.问题在于我们应该如何将错误报告给客户端.异常和异常处理机制是与特定技术紧密结合的,不能跨越边界的.此外,如果有客户端来处理错误,必定 ...

  10. 通过Laravel 初识Vue.js

    最近也在学习laravel的框, 因为之前学过tp框架, 都说laravel是最优雅的框架,所以开学后忍不住去试试这个在国外已经火的不要不要的框架. 总的来说,对于学习完tp框架后,我觉得tp毕竟是中 ...