简单记录 - 慕课网 - Java设计模式精讲 Debug方式+内存分析

第2章 UML急速入门

主要讲解UML基础、UML类图、UML类关系、UML时序图、UML类关系记忆技巧等,让大家急速入门UML,从而为后面设计模式的学习做好准备。

  • 2-1 本章导航
  • 2-2 UML类图讲解
  • 2-3 UML类图讲解-自上而下
  • 2-4 UML类图讲解-对比讲解联想记忆

2-1、UML简单入门

UML类图及时序图入门

定义 特点 分类

类图 时序图 记忆技巧

UML角度 理解 设计模式

UML定义

UML定义

  • 统一建模语言(英文:Unified Modeling Language,缩写UML)
  • 非专利的第三代建模和规约语言

UML特点

UML特点

  • UML是一种开发的方法

  • 用于说明、可视化、构建和编写一个正在开发的面向对象的、软件密集系统的制品的开发方法。

    制品 软件开发过程中 产物 模型 各种流程图 源代码 测试用例 等等 可视化 描述

  • UML展现了一系列最佳工程实践

    这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效 通过UML对系统更深理解

UML 2.2分类

UML2.2中一共定义了14种图示,分类如下:

  • 结构式图形:强调的是系统式的建模
  • 行为式图形:强调系统模型中触发的事件
  • 交互式图形:属于行为式图形子集合,强调系统模型中资料流程。

结构式图形

  • 静态图(类图、对象图、包图)
  • 实现图(组件图、部署图)
  • 剖面图
  • 复合结构图

行为式图形

  • 活动图
  • 状态图
  • 用例图

交互式图形

  • 通信图
  • 交互概述图(UML2.0)
  • 时序图(UML2.0)
  • 时间图(UML2.0)

UML类图

  • Class Diagram:用于表示类、接口、实例等之间相互的静态关系
  • 虽然名字叫类图,但类图中并不只是类 包括权限、属性、方法等等

理解泛化、实现

泛化关系 继承关系 记忆技巧

  • UML箭头方向:从子类指向父类

  • 提示:可能会认为子类是以父类为基础的,箭头应从父类指向子类

    从来没有这么想过

    记忆技巧-箭头方向

    • 定义子类时需要通过extends关键字指向父类
    • 子类一定是知道父类定义的,但父类并不知道子类的定义
    • 只有知道对方信息时才能指向对方

    UML 所以箭头方法从子类指向父类

实线-继承 | 虚线-实现

实现关系

  • 被一个类实现了 ,A类实现B接口 实现关系

  • 三角空心虚线

实现关系、继承关系

实线-继承 | 虚线-实现

  • 空心三角箭头:继承或实现

  • 实线-继承 ,is a 关系,扩展目的,不虚,很结实的。

  • 虚线-实现,虚线代表“虚”无实体。实现接口 实现接口方法

理解依赖、关联

实线 -关联 | 虚线-依赖

关联关系 实线

依赖关系

实线 -关联 | 虚线-依赖

依赖关系 虚线

  • 虚线-依赖关系:临时用一下,若即若离,虚无缥缈,若有若无

    调用的时候才会用一下 虚线 依赖关系

  • 表示一种使用关系,一个类需要借助另一个类来实现功能

  • 一般是一个类使用另一个类做为参数使用,或作为返回值 参数 返回值

关系关系 实线

  • 实线-关联关系:关系稳定,实打实的关系,铁哥们。
  • 表示一个类对象和另一个类对象有关联
  • 通过是一个类中有另一个类对象做为属性 属性 一个成员变量

理解聚合、组合

空心菱形-聚合 | 实心菱形-组合

  • 菱形就是一个盛东西的器皿(例如盘子)

  • 聚合:代表空器皿里可以放很多相同的东西,聚在一起(箭头方向所指的类 个体

  • 组合:代表满器皿里已经有实体结构的存在,生死与共 强关系

整体与部分 可以离聚合 不可以离组合

组合关系

鸟和翅膀 人和头 强关系 相同的生命周期 你死我也死

数字?

空心菱形 聚合关系 记忆技巧

  • 整体和局部的关系,两者有着独立的生命周期,是has a的关系

  • 弱关系

    大雁群 has a 大雁

  • 消极的词:弱 - 空 空心菱形

实心菱形 组合关系 记忆技巧

  • 整体与局部的关系,和聚合的关系相比,关系更加强烈

    两者有相同的生命周期,contains-a的关系 包含

  • 强关系

  • 积极的词:强 - 满 实心菱形

常见数字表达及含义

一个鸟 两个翅膀

UML时序图

生命线 上到下 时间的流逝

方法调用

消息

类图 时序图 用例图 重要

时序图 调用关系

2-2、UML类 图讲解

类的表示

类名 抽象类 斜体表示 接口 <>

属性 行为

public + private - protected #

什么都不加 or ~ 是表示 default

+ max

- min private

# protected

横线 static 属性

横线 static 静态方法

斜体 抽象方法 有抽象方法 是抽象类 要斜体来表示一下咯所以上面那个图错了

是抽象类 有抽象方法

有抽象方法的是抽象类 抽象类要斜体来表示一下

记住这个类图

类图表示 要 准确 避免产生歧义

2-3、UML类图讲解 自上而下

大话设计模式的图 UML图

一起来学习吧

依赖关系

虚线箭头 箭头方向 指向被依赖的对象

  • 表示一种使用关系,一个类需要借助另一个类来实现功能
  • 一般是一个类使用另一个类做为参数使用,或作为返回值 参数 返回值

鸟是一种动物



父类 子类 鸟继承动物 箭头方向:子类指向父类

  • UML箭头方向:从子类指向父类

  • 提示:可能会认为子类是以父类为基础的,箭头应从父类指向子类

    从来没有这么想过

    记忆技巧-箭头方向

    • 定义子类时需要通过extends关键字指向父类
    • 子类一定是知道父类定义的,但父类并不知道子类的定义
    • 只有知道对方信息时才能指向对方

    UML 所以箭头方法从子类指向父类

实线-继承 | 虚线-实现

  • 空心三角箭头:继承或实现

  • 实线-继承 ,is a 关系,扩展目的,不虚,很结实的。

  • 虚线-实现,虚线代表“虚”无实体。实现接口 实现接口方法

关联关系

关联关系 实线

  • 实线-关联关系:关系稳定,实打实的关系,铁哥们。
  • 表示一个类对象和另一个类对象有关联
  • 通过是一个类中有另一个类对象做为属性 属性 一个成员变量

有一个类对象的属性

聚合关系

空心菱形 聚合关系 记忆技巧

  • 整体和局部的关系,两者有着独立的生命周期,是has a的关系

  • 弱关系

    大雁群 has a 大雁

  • 消极的词:弱 - 空 空心菱形

整体 大雁群 局部、部分 大雁

空心菱形 菱形指向很多大雁也就是大雁群 箭头指向大雁

实现关系 空心三角虚线 表示实现关系

空心三角虚线 大雁实现了飞翔这个接口

棒棒糖表示法 接口表示 实现关系

2-4、UML类图讲解 - 对比讲解联想记忆

依赖关系 虚线箭头 参数、返回值 使用的时候才会关注

关联关系 实线箭头 实打实的关系 ,一般用了一个类对象作为另一个类的属性

聚合关系 空心菱形 菱形在整体 箭头在部分 聚在一起 独立的生命周期 弱关系

组合关系 实心菱形 强关系 人与头 人挂了 头也没生命力了

继承关系 三角空心实线 类和类之间的关系 继承 子类指向父类

实现关系 三角空心虚线 虚 实现 指向要被实现的接口

看图 项目代码 看看UML图 快速理解项目

总结

  • 定义

  • 特点

  • 分类

  • 类图

  • 时序图

  • 记忆技巧 理解 多用

Java设计模式精讲之UML急速入门的更多相关文章

  1. 【设计模式】Java设计模式精讲之原型模式

    简单记录 - 慕课网 Java设计模式精讲 Debug方式+内存分析 & 设计模式之禅-秦小波 文章目录 1.原型模式的定义 原型-定义 原型-类型 2.原型模式的实现 原型模式的通用类图 原 ...

  2. 设计模式课程 设计模式精讲 2-3 UML类图讲解自上而下

    1 内容简析(易错加粗) 2 uml类图展示 1 内容简析(易错加粗) 1.1 设计模式中的对象关系 依赖关系 虚线箭头 组合关系 实心菱形 聚合关系 空心菱形(想象成盘子,盛东西,盘子的多,另一方少 ...

  3. 设计模式课程 设计模式精讲 2-4 UML类图讲解 对比讲解 demo

    1 主要内容 1.1 关联和依赖的对比 1.2 组合和聚合的对比 1.3 继承和实现的对比 1.4 各种关系代码实现demo 1 主要内容 1.1 关联和依赖的对比 关联是a类中存在b类对象,企鹅类中 ...

  4. 设计模式课程 设计模式精讲 2-2 UML类图讲解

    1 类图讲解 1 类图讲解 + 公共方法 - private权限 # protected权限 包内和包外继承的子类都能引用 ~ default权限(包权限)只有包内能引用 下划线   静态 Stati ...

  5. java高级精讲之高并发抢红包~揭开Redis分布式集群与Lua神秘面纱

    java高级精讲之高并发抢红包~揭开Redis分布式集群与Lua神秘面纱 redis数据库 Redis企业集群高级应用精品教程[图灵学院] Redis权威指南 利用redis + lua解决抢红包高并 ...

  6. 设计模式课程 设计模式精讲 18-2 迭代器模式coding

    1 代码演练 1.1 代码演练1(迭代器模式演练) 1.2 代码使用场景 1 代码演练 1.1 代码演练1(迭代器模式演练) 需求: 课程管理:需要实现课程可进行增添,删除,并能够打印出课程列表. u ...

  7. 8千字干货教程|java反射精讲

    java反射机制精讲 目录 1. 反射机制的概念 2. 反射的基础Class类 3. 反射的用法 4. 反射的应用示例 作者简介:全栈学习笔记,一个正在努力的人 微信公众号:公众号日更,精彩美文每天推 ...

  8. 设计模式课程 设计模式精讲 22-2 备忘录模式coding

    1 代码演练 1.1 代码演练1 1 代码演练 1.1 代码演练1 需求: 网站笔记需要存储快照,能实现回退的功能. 注意: a 设计的时候,可以分为笔记类,笔记快照类和 笔记快照管理类  三个类. ...

  9. 设计模式课程 设计模式精讲 7-2 建造者模式Coding

    1 代码演练 1.1 建造者模式演练 1.2 静态内部类演练建造者模式(链式调用) 1 代码演练 1.1 建造者模式演练 需求: 根据讲师提供的课程名称,课程ppt,课程视频,课程手记,课程问答 制作 ...

随机推荐

  1. uwsgi+nginx 基于linux的各种离谱错误

    1.常见的排查方法 1.nginx错误 启动报错 systemctl restart nginx tail -f /var/log/nginx/error.log 在浏览器中访问抱错 tail -f ...

  2. Redis数据持久化(RDB、AOF)

    1. 简介   Redis作为内存型数据库,数据都保存在内存中,如果重启或意外宕机后,数据会全部丢失.因此,Redis提供了完善的持久化机制,将内存中的数据持久化到磁盘上,避免了完整性和安全性的问题, ...

  3. 跨站点脚本编制 - SpringBoot配置XSS过滤器(基于Jsoup)

    1. 跨站点脚本编制   风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务.   原因:未对用户输入正确执行危险字符清 ...

  4. 行业动态 | 每日处理2500万事务数据的IoT解决方案

    借助DataStax Enterprise和其他开源的解决方案,Locstat为它的用户提供了创新的IoT解决方案,并将数据分析时间由2-3周降至数分钟内,从而快速生成用于分析的图数据.不仅如此,现在 ...

  5. Websocket---认识篇

    为什么需要 WebSocket ? 了解计算机网络协议的人,应该都知道:HTTP 协议是一种无状态的.无连接的.单向的应用层协议.它采用了请求/响应模型.通信请求只能由客户端发起,服务端对请求做出应答 ...

  6. 仙剑4CPK加密解密算法(转)

    // RSTEncDec.h: interface for the CRSTEncDec class. // ///////////////////////////////////////////// ...

  7. Flutter ListTile - Flutter每周一组件

    该文章属于[Flutter每周一组件]系列,其它组件可以查看该系列下的文章,该系列会不间断更新:所有组件的demo已经上传值Github: https://github.com/xj124456/fl ...

  8. HCIP --- MPLS BGP 实验

    实验要求: 实验拓扑: 一.配置IP地址 二.给AS 2配置OSPF 1.R2-R7配置相同: 查看路由表: 可以看到,业务网段学的是32位的 修改:在R2-R7上都修改 [R2]int loo1[R ...

  9. CSS中margin:auto什么意思?margin:auto属性的用法详解

    我们都知道使用margin:auto可以让元素水平居中的.但你有没有想过使用margin:auto可以让元素水平居中的原因,要回答这个问题,我们首先需要看一下margin:auto的工作原理.auto ...

  10. java 反射给字段重新赋值

    1.获取实体的所有字段,遍历 2.获取字段类型 3.调用字段的get方法,判断字段值是否为空 4.如果字段值为空,调用字段的set方法,为字段赋值 Field[] field = model.getC ...