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. DevExpress控件安装、汉化使用教程

    前言 DevExpress是一个庞大的控件库,也很是好用(没用过,听说),但是要收费. 网上关于DevExpress的教程满天飞,我找了一下午也没找到正确的安装.简单实用教程,还是自己摸索吧. 自己动 ...

  2. opencv 之 icvCreateHidHaarClassifierCascade 分类器信息初始化函数部分详细代码注释。

    请看注释.这个函数,是人脸识别主函数,里面出现过的函数之一,作用是初始化分类器的数据,就是一个xml文件的数据初始化. static CvHidHaarClassifierCascade* icvCr ...

  3. 制作动画或小游戏——CreateJS事件(二)

    在Canvas中如果要添加事件,就需要计算坐标来模拟各种事件,而EaselJS中已经封装好了多个事件,只需调用即可. 一.事件 1)点击 事件是绑定在Shape类中的,click事件与DOM中的意思是 ...

  4. 【JAVA】基于MVC架构Java技术荟萃案例演练

    基于JAVA-MVC技术的顾客管理项目案例总结 作者 白宁超 2016年6月9日22:47:08 阅读前瞻:本文源于对javaweb相关技术和资料汇总,涉及大量javaweb基础技术诸如:Servle ...

  5. 软件工程-构建之法 WordCount小程序 统计文件中字符串个数,单词个数,词频,行数

    一.前言 在之前写过一个词频统计的C语言课设,别人说你一个大三的怎么写C语言课程,我只想说我是先学习VB,VB是我编程语言的开始,然后接触到C语言及C++:再后来我是学习C++,然后反过来学习C语言, ...

  6. lamp 环境搭建

    LAMP指的Linux(操作系统).ApacheHTTP 服务器,MySQL(数据库软件)和PHP语言 使用wampserver软件,搭建环境.如下图: 双击程序包,安装最后一步随便选择一个浏览器打开 ...

  7. SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法

    本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...

  8. react入门(5)

    对前面四篇内容进行简单的回顾: react入门(1):jsx,组件,css写法 react入门(2):事件,this.props.children,props,...other,map循环 react ...

  9. 关于本月第一天,本月最后一天的SQL代码

    DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)  --返回本月第一天 dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate() ...

  10. Effective java笔记(三),类与接口

    类与接口是Java语言的核心,设计出更加有用.健壮和灵活的类与接口很重要. 13.使类和成员的可访问性最小化 设计良好的模块会隐藏起所有的实现细节,仅使用API与其他模块进行通信.这个概念称为信息隐藏 ...