我对uml类图关系的理解
uml类图的关系:
泛化关系也就是继承。
实现关系就是一个类实现另外一个接口。
依赖关系就是一个类使用了另外一个类,是一种使用关系,在这个类的某个服务中需要另外一个类来协助。
关联关系就是一类拥有另外一个类,是一种拥有关系,这个类在创建的时候需要另外一个类的协助,可以是双向的但是最好依据业务的关注点变成单向的。
聚合关系是整体与部分的关系但是部分可以离开整体而存在。
组合关系也是整体与部分的关系但是两者的生命周期是绑定在一起的,部分不能离开整体而存在。
更喜欢我们大哥的分类:
多态:
泛化关系,实现关系
依赖:
依赖关系
关联:
关联关系,聚合关系,组合关系
类图关系的图形表示:
泛化关系(继承)
(带三角箭头的实线,箭头指向父类)
实现关系
(带三角箭头的虚线,箭头指向接口)
依赖关系
(带箭头的虚线,指向被使用者)
关联关系:
(带普通箭头的实心线,指向被拥有者)
聚合关系
(带空心菱形的实心线,菱形指向整体)
组合关系
(带实心菱形的实线,菱形指向整体)
代码层面的表示:
泛化关系
public Class Tigger extends Animal{
实现关系
public Class Course implements Goods{
依赖关系
局部变量、方法的参数或者对静态方法的调用
关联关系,聚合关系,组合关系都是成员变量
实际应用需注意:
要依据真实需求的描述来确定类关系
类与类之间关系的确定必须是依据实际需求,换句话说就是在某个语义下才能确定两个类的关系,客观真实的反应真实需求。
比如:语义环境是:"汽车有四个车轮,有了车轮汽车才可以行驶,车轮本身有自己的特征(颜色,大小)"
那么我们就可以抽取出汽车类和车轮类,那么如何确定他们的关系??
根据uml类关系我们可以排除实现和继承,那么就剩下关联和依赖,依赖强调的是使用关系,关联强调的是拥有关系,“有车轮才可以行驶”这句话就可以
推断出他们不是使用关系,而是拥有关系,汽车必须拥有车轮。所以应该是:
比如:语义环境“卸掉的车轮要放到车库中去”依据这句话我们可以抽取两个类
车轮类和车库类,那么他们之间的关系又是什么呢?
肯定也不是实现和继承,那究竟是依赖还是关联呢,根据"车轮放到车库中"这句话可以得出,车库要提供一个存放车轮的服务,
两者不是拥有关系而是使用关系。所以:
另外一种方式确定类的关系
语义描述"一个学习视频有多个知识点,一个知识点又可以被多个视频拥有"
还有一种方法来确定两个类的关系,使用类关系的代码体现确定类关系:
依赖关系的代码体现是方法参数,局部变量,静态方法调用。
关联关系的代码体现是成员变量。
根据"一个学习视频有多个知识点"的描述我们可以知道,视频类肯定有一个list<知识点类>的成员变量,
根据"一个知识点又可以被多个视频拥有"的描述我们可以知道,知识点类也有一个list<视频类>的成员变量,
所以可以断定视频类和知识点是关联关系。注意:并不是所有的成员变量都是关联关系,如果说这个对象在创建的时候就需要这个属性,那么就可以断定是关联关系,
但是如果这个属性可以放在创建这个对象之后赋值,那么它就是依赖关系。
针对多对多一对多这种关系的指向如何确定以哪一类为起点呢??
还是上面的语义描述"一个学习视频有多个知识点,一个知识点又可以被多个视频拥有"
由上面的分析我们已经可以确定视频类和知识点是关联关系,那我们在做指向的时候做双向箭头的话,理解起来会有问题,如:
所以我们团队的做法是根据你的业务关注程度,比如说你正在做视频有关的业务,那你就应该讲箭头指向知识点类。
确定完类关系为关联关系之后我们创建的类要如何体现类关系呢?比如:关联关系的一对多,多对多?
可能有人觉得前面已经讲过关联关系的代码体现是成员变量吗,直接使用成员变量不就完了吗?
比如:
一对多:
一里面放一个类型为多的集合成员变量。
多对多:
双方都存放彼此类型集合的成员变量。
但是,这样我们在做数据持久的时候非常麻烦。
所以我们的做法是:
如果是一对多就在以里面存放一个多的主键ID,比如:
一个视频一定是属于某个老师的,代码如图:
如果是多对多我们采用的是关系表去做,
比如说视频和知识点的关系我们会创建一个关系表去承载这个多对对关系,在实体类中不做体现。
我对uml类图关系的理解的更多相关文章
- UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父 ...
- 图解六大UML类图关系
在学习UML类图的过程中,UML类图关系是必须要掌握的问题,UML定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合.下面对其定义和表示方法逐一说明. UML类图关系简介 依赖(Dependen ...
- UML类图关系大全
UML类图关系大全 1.关联 双向关联: C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法.在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设 ...
- UML[1] UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)(转)
转自:http://blog.csdn.net/zhaoxu0312/article/details/7212152 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是 ...
- UML类图关系大全【转】
UML类图关系大全 1.关联 双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法. 在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设 ...
- 【UML】UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的 ...
- UML类图关系(继承、泛化、实现、依赖、关联、聚合、组合)
继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者 ...
- UML类图关系(转,添加了实例)
UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Associati ...
- UML类图关系表示方法
本文转载: http://blog.csdn.net/fengsh998/article/details/8105631 分类: UML2012-10-24 10:18 1175人阅读 评论(0) 收 ...
随机推荐
- EF CodeFirst EntityTypeConfiguration 自关联映射配置
实体示例代码: public class Message { public Message() { } public int ID { get; private set; } public strin ...
- 【Java】 环境变量如何配置?
Java知识简介与环境变量配置问题 一.在学习一门语言中,不仅需要掌握其语法结构,开发平台以及环境也是很重要的.在开始Java学习之前首先对其进行压缩包的下载安装,以及开发平台环境下载安装.基于此下面 ...
- SQL Server基础之游标
查询语句可能返回多条记录,如果数据量非常大,需要使用游标来逐条读取查询结果集中的记录.应用程序可以根据需要滚动或浏览其中的数据.本篇介绍游标的概念.分类.以及基本操作等内容. 一:认识游标 游标是 ...
- jQuery-1.9.1源码分析系列(十五) 动画处理——缓动动画核心Tween
在jQuery内部函数Animation中调用到了createTweens()来创建缓动动画组,创建完成后的结果为: 可以看到上面的缓动动画组有四个原子动画组成.每一个原子动画的信息都包含在里面了. ...
- angular.js写法不规范导致错误
以下写法:没有明确指定module和controller,写法不规范. 更改angular.js版本会出bug. <html ng-app> <head> <title& ...
- 糖果 bzoj 2330
糖果(1s 128MB)candy [题目描述] 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明 ...
- nginx concat模块配置 页面返回400 bad request
在1.4.x版本的nginx没有发现这个问题,但是在1.5.x版本就遇到了这个问题 由于Nginx在新版本中,使用了标准的 MIME-Type:application/javascript.而在ngi ...
- Mybatis中javaType和jdbcType对应关系
JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR ...
- Java子类属性继承父类属性
public abstract class Parent { String name = "parent"; } public class Son extends Parent{ ...
- centos yum Segmentation fault 问题解决办法
今儿在centos 使用yum 安装软件时出现了 ”Segmentation fault“ 错误提示,google一大把执行 yum clean all 命令后,再执行还是没用,最后把 zlib.x. ...











