类图(Class Diagram):

类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。

类一般由三部分组成:

类名(Class):每个类都必须有一个名字,类名是一个字符串。

属性(Attributes):属性是指类的性质,即类的成员变量。类可以有任意多个属性,也可以没有属性。

UML中:可见性 名称:类型 [= 默认值]

操作(Operations):操作是类的任意一个实例对象都可以使用的行为,操作是类的成员方法。

UML中:可见性 名称(参数名):返回值

接下来我们看一下类的关系:

要注意uml中的关系是面向对象关系。如果不以面向对象的思维去考虑会感觉到有很多关系认为是一样的。

关联关系(Association):

通常关联关系用来实现连接有关联的对象所对应的类,即将一个类的对象作为另一个类的属性。

还有就是关联关系可以是单向的也可以是双向的。双向的符号是没有方向标的,只是一条直线。

例:

单向:

双向:

自己:

多重性关联关系:

例:

在这里要注意,看完此图中1…1以后不要认为一个Form是对应一个Button的。

不是的,应该是一个Button是对应一个Form的。1..1是表示另一个类的一个对象只与一个该类对象有关系。记住上面的表格。是另一个类与该类是什么关系。

聚合关系(Aggregation):

表示整体与部分的关系。考虑到一个整体类的组成结构。找出成员类。即成员对象是整体对象的一部分,但是成员对象可以队里整体对象独立存在。所以也有人说此关系是一种弱关系,那么强关系是什么后面我们会降到组成关系。

聚合关系有一个特点,那就是可替换。

直观的来看此图Car中必须得有一个Engine,这样才可以认为是一个完整体。

但是这个Engine是可替换的。是以传参的形式给Car赋一个Engine。

再次强调一下聚合是可替换的。Car中必须有一个Engine,但是此Engine可以是一个抽象的具体的Engine是在当你使用Car时可以具体去找一个合适的Engine装到Car上就行,如果没有Engin那么这个Car是跑不了。

组合关系(Composition):

表示整体与部分的关系。但是与聚合不同此关系是整体与部分是同生共死关系。即如果整体对象销毁了部分也会被销毁。

上图Head是整体Mouth是部分,如果Head没了Mouth也跟着销毁了。如果Mouth没了Head也将是面目全非。在代码中Head中Mouth是直接new出来的。

就是说当你去new Head时Mouth也被new出来。记住一同创建一同销毁关系。也叫强关系。那么有人会问关联,聚合,组合我怎么认为是一样呢。

可以说他们是一样的都可以说是关联关系,是的,但是关联关系的强弱来区分了一下关联关系强度来看组合>聚合>关联。

依赖关系(Dependency):

是一个使用关系。特定事物的改变有可能会影响到使用该事物的其他事物。简单说在一个类中通过另外一个类来调用其方法的表示。

从图中可以看出Driver中使用了Car的move方法。那么就说明Driver是依赖于Car才能做Driver的职责。那么又有人会问聚合与依赖有区别吗,当然很明显Driver是一个整体,Car也是整体。不是整体与部分关系。

泛化关系(Generalization):

继承(extends)关系,父类与子类关系。这个好理解直接上图。

从图中可以看出Student也是Person,Teacher也是Person。他们有共同的特征name,age。但是也有独自的特征一个是study一个是teach的特征。

子类那么就是Student,Teacher父类是Person。继承了父类那么子类可以直接适用父类的方法或属性(家产)。

实现关系(Realization):

类实现(implements)了接口.当多个类有类似的行为方式的时候我们通常会适用接口。

Ship,Car都有move的特征他们都属于交通工具(Vehicle)只是他们move的方式不一样。那么我们就可以适用接口实现的方式去设计。代码中是public class Car implements Vehicle

好我们来看一下一个完整的类图例子:

回顾一下之前关系。去分析一下此UML的类图。

用户通过注册界面(RegisterForm)输入个人信息,

用户点击“注册”按钮后将输入的信息通过一个封装用户输入数据的对象(UserDTO)传递给操作数据库的数据访问类(DAO),

为了提高系统的扩展性,针对不同的数据库可能需要提供不同的数据访问类,因此提供了数据访问类接口,

如IUserDAO,每一个具体数据访问类都是某一个数据访问类接口的实现类,

如OracleUserDAO就是一个专门用于访问Oracle数据库的数据访问类。

UserDTO只是把userAcount,userPassword封装了一下使用了Getter,Setter。

那么肯定是RegisterForm的成员,注册窗体不能没有用户名与密码信息所以是组合关系。RegisterForm没有了用户信息(UserDTO)那么就没有意义了。

然后IUserDAO与RegisterForm是聚合关系因为是可以替换的。比如说你可以使用Oracle的以后扩展成Mysql的那么可以方便替换。

考虑到今后会扩展UserDAO所以适用了接口。

IUserDAO为什么与UserDTO是依赖关系,因为IUserDAO要把用户信息保存到数据库中那么必须需要用户信息。如果没有了用户信息此工作无法完成所以是依赖关系

mysql 类图_类图 - 吴小凯 - 博客园相关推荐

  1. 接口应用小玩具-博客园积分排名变动监控工具

    小玩具-博客园积分排名变动监控工具 一个简单的在线服务监控和提醒工具 1   概述 前段时间自己准备重新开启自己的博客园,然后还和一些圈子里面的朋友夸下海口,自己要开始像打游戏那样,进行博客园的 天梯 ...

  2. webbrowser中localhost和发布的地址_发布一款android版博客园官方app

    1.前言 博客园创立于2004年1月,是一个面向开发者的知识分享社区.自创建以来,博客园一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益 ...

  3. mysql左链表右链表区别_MySql链表语句--博客园老牛大讲堂

    为什么链表?--博客园老牛大讲堂 因为表与表之间有关系,而且查询时需要两张表的某些数据. 链表的前提是:表与表之间必须设置主外键吗? 不是的,其实表与表之间不需要设置主外键关系,用数据库语句就可以实现 ...

  4. mysql 内联函数_内联函数 - freeboy小亮 - 博客园

    (1)什么是内联函数? 内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内. (2)为什么要引入内联函数? 当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题.另外,前面我们 ...

  5. gradle mysql方言_2020 年 4月 随笔档案 - xj_aks - 博客园

    04 2020 档案 摘要:Maven 1. 什么是 Maven ? Maven 是Apache 基金下的个 Java 平台的项目自动化构建工具,基于 2. Maven 可以作什么 自动管理 jar ...

  6. c mysql datasource_DataSource(mysql/oracle) - 随笔分类 - 我爱si搬砖 - 博客园

    摘要:--单行函数:作用于一行,返回一个值--字符函数select upper(deptno),loc from dept;--结果转大写select lower(loc),loc from dept ...

  7. java费波拉切_面试题 - 不再犯错 - 博客园

    js的基本类型有哪些?引用类型有哪些?null和undefined的区别. 如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种) Object是引用类型嘛?引用类型和基 ...

  8. java编写某计算器控制台程序_计算器 - 进阶的憨狗 - 博客园

    源起 最近在看程杰著作的<大话设计模式>,全书以小菜和大鸟对话的形势,由浅入深的讲解程序的设计思想,影射出一个个设计模式.我之前虽然也使用过一些设计模式,但没有系统的学习.整理.总结,现从 ...

  9. 怎么把java安装进老年机_环境搭建 - 老人与JAVA - 博客园

    安装JDK 1:下载安装 在这个页面可以看到最新的版本,在这个页面的最下方有一个入口可以下载历史版本: 警告:这些年长的JRE和版本的JDK提供帮助开发人员调试问题在更旧的系统.他们不是最新的安全补丁 ...

最新文章

  1. leetcode--最长连续递增序列--python
  2. 研究显示自动驾驶汽车只能解决三分之一的交通事故
  3. 粗浅看 java反射机制
  4. 处理之后的图像句柄传到显示框_深度学习目标检测与预处理模块
  5. 【Linux驱动】字符设备驱动
  6. 如何做简单的访客统计JQ+PHP
  7. 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)
  8. Ansible-----条件判断与错误处理
  9. 处理一些常见的跨浏览器封装的函数
  10. 利用console.time优化js代码
  11. md5算法不可逆,为啥网上很多网站声称可以解密md5
  12. GIS-坐标系-EPSG(二次整理)
  13. 轻量级纯CSS框架,11款最轻量级的CSS框架
  14. CSS3图片边框四个角剪切
  15. 纪念日+小游戏+工具小软件
  16. word2vec模型训练保存加载及简单使用
  17. 异常-Exception
  18. 【Spring Cloud 2】软件架构设计,Java游戏合集百度云盘
  19. ios音乐播放器-仿QQ音乐
  20. 这大概是你见过最全面的 Python 重点了

热门文章

  1. 兰卡斯特大学计算机专业世界排名,2019上海软科世界一流学科排名计算机科学与工程专业排名兰卡斯特大学排名第101-150...
  2. WhatsUp Gold v14.x 培训教材
  3. IGMP协议原理与配置
  4. 视觉测量检测系统 【附带全部源代码】
  5. 编码结构光三维视觉测量系统(二)
  6. DocuSign沙盒 C#,SDK的使用demo
  7. Oracle课堂笔记之事务集合查询与PL/SQL匿名块(3)(实验习题)
  8. FBX格式mesh解析与加载(一)
  9. Maven <resource>中<includes><excludes><filtering>之间的关系
  10. 【更正】ISCA2016:计算机体系结构顶会CNN走红,神经网络论文夺桂冠