【UML】基本介绍与类图(依赖、泛化、实现、关联、聚合、组合关系)
文章目录
简单记录
UML类图
UML基本介绍
1、UML—— Unified modeling language UML (统一建模语言),是一种用于软件系统 分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。
2、UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描 述软件模型中的各个元素和他们之间的 关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如图:
3、使用UML来建模,常用的工具有 Rational Rose , 也可以使用一些插件来建模
UML是一种语言,用来建模的 跟传统的编程语言不一样 它是用一些符号来表示的 用符号来描述一些设计思想 一种用于软件系统分析和设计的语言工具 图形描述 帮助我们进行思考和记录的结果
工具 Rational Rose 画各种类
插件 AmaterasUML
统一建模语言,可以画各种图形,图形可以帮助我们去软件系统设计和分析理解。
UML图
UML图
画UML图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理。
UML图分类:
- 用例图(use case)
- 静态结构图:类图、对象图、包图、组件图、部署图
- 动态行为图:交互图(时序图与协作图)、状态图、活动图
说明:
类图是描述类与类之间的关系的,是UML图中最核心的
熟悉地掌握了UML,就好像学会了写字,在现实生活中,会写字不见得会写出好文章。仅仅会写,学会了UML并不一定就分析设计出好的软件系统,灵活的使用.
UML类图
UML类图用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。
描述类和类之间的关系
类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合
类图简单举例
public class Person{ //代码形式->类图
private Integer id;
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
类图怎么画呢?
代码形式 --> 类图
类名 属性 方法
类和类之间到底是什么关系?怎么画?这是一个问题.
类图—依赖关系(Dependence)
只要是在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编绎都通过不了。
public class PersonServiceBean {
private PersonDao personDao;//类 public void save(Person person){}
public IDCard getIDCard(Integer personid){
}
public void modify(){
Department department = new Department();
}
}
public class PersonDao{}
public class IDCard{}
public class Person{}
public class Department{}
小结
类中用到了对方
如果是类的成员属性
如果是方法的返回类型
是方法接收的参数类型
方法中使用到
依赖关系
A类用到了B类 ,A依赖于B, 没有B,A编译也通过不了
类图—泛化关系(generalization)
泛化关系实际上就是继承关系,他是依赖关系的特例。
public abstract class DaoSupport{
public void save(Object entity){
}
public void delete(Object id){
}
}
public class PersonServiceBean extends Daosupport{
}
PersonServiceBean继承了DaoSupport
小结:
- 泛化关系实际上就是继承关系
- 如果A类继承了B类,我们就说A和B存在泛化关系
A类继承了B类,泛化关系就是继承关系 , A类继承了B类也相当于A类用到了B类, 泛化关系是依赖关系的特例。
类图—实现关系(Implementation)
实现关系实际上就是A类实现B接口,他是依赖关系的特例.
public interface PersonService { public void delete(Interger id);
}
public class PersonServiceBean implements PersonService {
public void delete(Interger id){}
}
一个类来实现这个接口
PersonServiceBean实现了PersonService这个接口 实现关系
人与人之间存在关系 但是否存在父子关系什么的 这是特例了
实现关系是依赖关系的特例 ,依赖关系更强 。
=>类图
小结????
被一个类实现了 ,A类实现B接口 实现关系
类图—关联关系(Association)
关联关系实际上就是类与类之间的联系,他是依赖关系的特例
关联具有导航性:即双向关系或单向关系
关系具有多重性:如“1”(表示有且仅有一个),“0…”(表示0个或者多个), “0,1”(表示0个或者一个),“n…m”(表示n到 m个都可以),“m…*”(表示至少m 个)。
单向一对一关系
public class Person { private IDCard card;
}
public class IDCard{}
一个人一个身份证号 一对一
单向的 一对一
双向一对一关系
public class Person {
private IDCard card;
}
public class IDCard{
private Person person
}
双向一对一关系
一个人一个身份证号 一对一 一个身份证号也对应一个人
小结:
关联关系实际上就是类与类之间的联系,是依赖关系的特例。
导航性??双向 单向
多重性??一对一,一对多,多对多
类图—聚合关系(Aggregation)
聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。聚
合关系是关联关系的特例,所以他具有关联的导航性与多重性。
如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个 配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示:
computer monitor mouse
计算机包含鼠标、显示器
能不能分开
如果关系是可以分开的,是聚合关系
如果关系是不可以分开的,是组合关系
鼠标是可以分离的,可以插上也可以不插上,电脑没有鼠标还是一个电脑
显示器可以分开
鼠标这个类 显示器这个类 与电脑这个类 他们构成聚合关系
对应类图
小结:
聚合关系表示整体与部分关系,整体与部分可以分开,聚合关系是关联关系的特例,导航性 多重性
谁聚合谁的
A聚合一个B 单聚合
A里面可以聚合多个B 多重聚合
如果我们人Mouse,Monitor和Computer是不可分离的,则升级为组合关系
computer创建mouse、monitor也创建了,销毁也都销毁了
类图—组合关系(Composition)
组合关系:也是整体与部分的关系,但是整体与部分不可以分开。
再看一个案例:在程序中我们定义实体:Person与IDCard、Head, 那么 Head 和Person 就是 组合,IDCard 和 Person 就是聚合。
人不能没有头 可以没有手、脚,没头会死的。
一个人没有身份证,不会死的,可以去补办身份证
Head和Person就是组合,
IDCard和Person就是聚合
但是如果在程序中Person实体中定义了对IDCard进行级联删除,即删除Person时连同IDCard一起删除,那么IDCard 和 Person 就是组合了.
public class Person{ private IDCard card;
private Head head = new Head();
}
public class IDCard{} public class Head{}
级联删除,一起删了,组合。
关联关系 一个类 成员变量 成员属性 用到另一个类 构成关联关系
聚合关系 整体和部分的关系 你是我的一个什么属性 可以分开 聚合关系
不能分开 组合关系
小结
依赖关系
只要是在类中用到了对方,那么他们之间就存在依赖关系
类中用到了对方
如果是类的成员属性
如果是方法的返回类型
是方法接收的参数类型
方法中使用到
虚线 箭头
用到了
泛化关系
泛化关系实际上就是继承关系,他是依赖关系的特例。
如果A类继承了B类,我们就说A和B存在泛化关系
空心三角形 实线
实现关系
实现关系实际上就是A类实现B接口,他是依赖关系的特例.
空心的三角形 虚线
关联关系
类与类之间的关系,他是依赖关系的特例.
导航性 多重性
单向一对一
双向一对一 你用到我 我用到你
聚合关系
聚合关系表示的是整体和部分的关系,整体与部分可以分开.
聚合关系是关联关系的特例,所以他具有关联的导航性与多重性.
Person Head Person IDCard
组合 聚合 菱形实心空心
创建 删除 级联的 组合关系
类图 关系 不同表示 画
依赖 泛化 实现 关联 聚合 组合
方法
陆游和卖油翁
陆游的忠告
《冬夜读书示子聿》
(南宋)陆游
古人学问无遗力,少壮工夫老始成。
纸上得来终觉浅,绝知此事要躬行。
渐若窥宏大 工夫在诗外
纸上得来终觉浅,绝知此事要躬行
卖油翁
卖油翁
【作者】欧阳修 【朝代】宋
陈康肃公善射,当世无双 ,公亦以此自矜。尝射于家圃,有卖油翁释担而立,睨之久而不去。见其发矢十中八九,但微颔之。
康肃问曰:”汝亦知射乎?吾射不亦精乎?”翁曰:”无他, 但手熟尔。”康肃忿然曰:”尔安敢轻吾射!”翁曰:”以我酌油知之。”乃取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,自钱孔入,而钱不湿。因曰:”我亦无他,惟手熟尔。”康肃笑而遣之。
此与庄生所谓解牛斫轮者何异?
我亦无他,惟手熟尔。
书到用时方恨少,事非经过不知难。
知 行
参考资料
【UML】基本介绍与类图(依赖、泛化、实现、关联、聚合、组合关系)的更多相关文章
- UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)
UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...
- UML学习笔记:类图
UML学习笔记:类图 有些问题,不去解决,就永远都是问题! 类图 类图(Class Diagrame)是描述类.接口以及它们之间关系的图,用来显示系统中各个类的静态结构. 类图包含2种元素:类.接口, ...
- 类图class的关联关系(聚合、组合)
类图class的关联关系(聚合.组合) 关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code ...
- [转载]uml 类图依赖与关联的区别
原文链接:https://www.cnblogs.com/liuzhang/archive/2013/03/17/2964095.html 最近研究设计模式,看类图有点发虚!有些关系搞的不是很清楚.所 ...
- uml 类图依赖与关联的区别
类与类之间由弱到强关系是: 没关系 < 依赖 < 关联 < 聚合 < 组合. 1.依赖(dependency) 可以简单的理解,就是一个类A使用到了另一个类B,而这种使用 ...
- Uml 建模 一(类图建模和startuml的使用)
本文将分三个部分介绍Uml建模:Uml建模的作用.类图.startuml的使用 Uml的作用 本文以java为例介绍Uml,在当前的软件开发中大多数使用面向对象开发(OO),面向对象的就是将现实世界中 ...
- UML基础系列:类图
类图描述系统中类的静态结构,它不仅定义系统中的类,描述类之间的联系,如关联.依赖.聚合等,还包括类的内部结构(类的属性和操作).类图描述的是静态关系,在系统的整个生命周期中都是有效的.对象图是类图的实 ...
- 分分钟弄明白UML中泛化 , 实现 , 关联, 聚合, 组合, 依赖
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Compo ...
- [UML]UML系列——类图class的关联关系(聚合、组合)
关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code/assocation) 假设:一个公司 ...
随机推荐
- 程序员必读的 99 本书籍 & 资源
作为程序员,始终要保持学习,一直带着纸质书还是很不便的,因此电子书对于我们还是挺需要的.为了方便广大的小伙伴也能方便找到对应的电子书,我花费洪荒之力从各个搜索网站收集了几百本常用的电子书,找到了,我要 ...
- RMAN duplicate from active database
在Oracle 11G有二种方法实现duplicate: 1.Active database duplication 2.Backup-based duplication Active databas ...
- AWT03-LayoutManager布局管理器
1.LayoutManager布局管理器 在之前的学习中,我们使用setBounds()方法设置容器的位置大小,但我们不得不明白一件事--如果我们手动为容器设置位置大小的话,就会造成程序通用性的下降. ...
- 关于golang的time包总结
目录 前言 time包详解 总结 前言 各种编程语言都少不了与时间有关的操作,因为很多判断都是基于时间,因此正确和方便的使用时间库就很重要额. golang提供了import "time&q ...
- UML—20—001
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...
- Elastic Search 学习之路(一)
一.基本概念及缘由 1.Sql vs nosql SQL:Structured Query Language Nosql:Not only SQL Relationship DB Relations: ...
- # spring boot + mybatis 读取数据库
spring boot + mybatis 读取数据库 创建数据库 use testdb; drop table if exists t_city; create table t_city( id i ...
- sqlmap进阶篇—POST注入三种方法
测试是否存在post注入 第一种方法 直接加--form让它自动加载表单 第二种方法 把form表单里面提交的内容复制出来,放到data中跑 第三种方法 先用burp suite抓包,把包的内容存到本 ...
- spark 系列之一 RDD的使用
spark中常用的两种数据类型,一个是RDD,一个是DataFrame,本篇主要介绍RDD的一些应用场景见代码本代码的应用场景是在spark本地调试(windows环境) /** * 创建 spark ...
- easyui框架 jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...