设计模式学习起点 UML类图笔记

大学开设的软件设计课程一般都会学习UML类图,大部分关于设计模式的描述都是使用的UML类图,可以说类图的表示是学习设计模式的起点。

UML定义类之间的关系主要有六种:泛化关系、实现关系、依赖关系、关联关系、聚合关系和组合关系。下面分别学习这几种关系。

一、泛化关系(Generalization)

使用带空心三角形的实线表示。

汽车与SUV之间为泛化关系:

泛化关系相当于面向对象中的继承关系。最终代码中,泛化关系表现为继承非抽象类。

二、实现关系(Emlpementation)

使用带空心三角形的虚线表示。

最终代码中,实现关系表现为继承抽象类。

”车”为一个抽象概念,在现实中并无法直接用来定义对象;只有指明具体的子类(汽车还是自行车),才可以用来定义对象:

三、依赖关系(Dependency)

使用带箭头的虚线表示。

依赖是一种最弱的横向关系。假设A类的变化引起了B类的变化,则称B依赖于A。表现在代码上依赖关系一般有如下三种情况:

  • A类是B类中(某个方法)的局部变量。
  • A类是B类中某个方法的参数。
  • A类向B类发送消息,从而影响B类变化。

四、关联关系(Association)

使用实线表示(可带箭头)。

乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;

从依赖——>关联——>聚合——>组合,可以认为是联系逐渐加强的,组合关系最强调依赖。

五、聚合关系(Aggregation)

使用带空心棱形的实线表示。

聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成。

六、组合关系(Composition)

使用带实心棱形的实线表示。

比如公司由多个部门组成;

相比聚合关系来说,组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了;例如, 公司不存在了,部门也将不存在了,

但是聚合关系的依赖性较弱,部门不在了,员工依然存在。

七、一个类图关系的典型示例

 以下这个类图,类之间的关系是我们需要关注的:

  • 车的类图结构为<<abstract>>,表示车是一个抽象类;
  • 它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;
  • 小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
  • 小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;
  • 学生与班级之间是聚合关系,使用带空心箭头的实线表示;
  • 学生与身份证之间为关联关系,使用一根实线表示;
  • 学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;


参考 看懂UML类图和时序图

时间: 2025-01-24 17:42:05

设计模式学习起点 UML类图笔记的相关文章

设计模式之前奏(UML类图)

原文:设计模式之前奏(UML类图) 本人菜菜一个,最近一直在博客园游走闲逛,看到了各种技术,各种各种--.便看到了大话设计模式这本书,下了电子版的看了看第一章,感觉相当不错,不仅通俗易懂,而且与实际案例相结合,可就是电子版的,鄙人很少看小说,所以立马在京东下单买了本.就是给力-- 看了看书,翻了翻,第一章简单工厂模式最后讲解的是UML类图,以前见到过,但从来没画过,也就是一眼而过.但是又好好看了看书,后面几乎每种模式都会用UML类图来阐述设计模式的整体架构.所以就回过头来好好把第一章最后的UML

《Android 源码设计模式解析与实战》——第2章,第2.4节单例模式UML类图

2.4 单例模式UML类图UML类图如图2-1所示. 角色介绍: (1)Client--高层客户端: (2)Singleton--单例类. 实现单例模式主要有如下几个关键点: (1)构造函数不对外开放,一般为Private: (2)通过一个静态方法或者枚举返回单例类对象: (3)确保单例类的对象有且只有一个,尤其是在多线程环境下: (4)确保单例类对象在反序列化时不会重新构建对象. 通过将单例类的构造函数私有化,使得客户端代码不能通过new的形式手动构造单例类的对象.单例类会暴露一个公有静态方法

UML类图简介

概述 设计模式中常常使用UML来表示类与类,类与接口之间的关系,UML类图是设计模式入门必备的技能,感觉各种关系比较多,这里做一下总结. 类与接口的表示 类与接口通常是一个矩形框表示,一般分为3层,第一层显示类的名称,如果是抽象类则类名用斜体表示.第二层代表类的特性,通常是字段和属性,第三层是类的操作,通常表现为方法或者行为,其中+表示public,-表示private,#表示protect  常用关系 继承  继承关系用空心三角形+实线来表示,在Java中体现为extends关键字  实现接口

看懂UML类图和时序图

原文:看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码对应起来: 有了这些知识,看后面章节的设计模式结构图就没有什么问题了: 本章所有图形使用Enterprise Architect 9.2来画,所有示例详见根目录下的design_patterns.EAP 从一个示例开始 请看以下这个类图,类之间的关系是我们需要关注的:

深入浅出UML类图---写得不错,备忘

九种关系总结,EA图中会用到: 关联关系(Association):双向关联,单向关联,自关联.多重性关联Multiplicity. 聚合(Aggregation):整体与部分的关系,整体对象销毁时成员对象不销毁,一般是构造函数或Set方法传入成员对象. 组合(Composition):整体与部分的关系,整体对象销毁时成员对象一并销毁,一般在构造函数中创建成员对象. 依赖关系(Dependency):Driver类依赖Car类的move方法,Driver--->Car 泛化关系(Generali

YY博客园UML类图之博客模块

UML建模YY系列: YY博客园UML类图之博客模块 YY博客园UML时序图之博客模块 YY博客园UML用例图-活动图-状态图之博客模块 UML几年前就接触过了,那是的学习也可为不求甚解.只知道UML是个建模的,画画图:类图.用例图.时序图和活动图神马的:学了也就学了,一直没怎么用.最近又温习了一遍UML建模方面的知识,总感觉学习的知识点三三两两,零零散散.于是找个具体的项目来实践实践,思来想去决定拿博客园来YY(此时在贼笑),博客园应该不会把我怎样吧?.由于是初学者,学习和理解肯定有许多不到位

PHP与UML类图: PHP and UML Class Diagrams

这篇短文写的不错,用PHP来解释UML(或者反过来说)可以说是一个创新了,通过这篇文章,我也发现了一个好站: www.phppatterns.com .各UML术语的翻译来源于我正在看的<UML用户指南(The Unified Modeling Language User Guide)>一书. UML(Unified Modeling Language, 统一建模语言)是一种通过图的方式表示软件的机制.本质上它允许我们通过画图来设计我们的程序,并且如果有相应的工具,我们甚至可以从图来直接产生代

使用UML类图设计Java应用程序(二)

在第一部分中,我们实现了5个类.在本部分中,我们接着说明如何利用UML类图来设计余下的各个类.为减少篇幅,本部分着重讲解UML类图及应用,对Java实现代码不再详细描述. 六.CGPoint类 CGPoint类说明了如何利用非抽象类扩展抽象类.CGPoint类是CGObject的子类,CGPoint类扩展了 CGObject类,CGPoint类没有再它所继承的变量中增加变量,它所声明的方法只有构造函数和要求它实现的抽象方法.其类图如下: Java实现代码为: 七.CGBox类 CGBox类也扩展

使用UML类图设计Java应用程序(一)

UML已成为面向对象设计的标准图形化工具,在UML定义的各种图中,本文只涉及类图.Java应用程序由许多类所构成,类图的设计与实现,是Java实现面向对象应用程序的核心.本文通过一个具体的应用程序的设计与实现过程,详细说明了利用UML类图设计Java应用程序,使得开发过程标准化.可视化,代码编程简单化. 在类图中,类被描述为带有三层的盒子. 顶层为类名,一般用加粗字体表示.如果类是抽象的,其名称用斜体表示:如果类是接口,则在类名上方标注<<interface>>. 中间层包含类的属