0.UML图入门——学习《大话设计模式》笔记
《大话设计模式》中讲述了UML类图的基本用法,做此笔记加深理解。
注:上图来源于《大话设计模式》
上图中设计的关键术语为:继承、实现、聚合、组合、关联、依赖。
要想弄清楚UML图的原理,必须深入理解上述六大术语的基本含义。
- 继承表示:
//鸟类
class Bird
{
public:
void layeggs() { } private:
string color;
}; //大雁类继承自鸟类
class wildGoose : public Bird
{
public:
void layeggs() { }
void fly() { }
}; //鸭子类继承自鸟类
class duck : public Bird
{
void layeggs() { }
void swimming() { }
};
继承关系为is-a关系,上述关系中,大雁、鸭子、企鹅均属于鸟类,则其继承自鸟类,其中,箭头方向所指动物类。
- 实现表示:(在C++中继承自抽象类也选用此种表示方式)
//动物类
class Animal
{
public:
//声明了纯虚函数的类,都成为抽象类。
virtual void live() = ; private:
string food;
}; //鸟类继承自动物类
class Bird : public Animal
{
public:
void layeggs() { }
void fly() { }
private:
string teeth;
};
在Java中有接口的概念,上图中大雁实现了飞翔接口;在C++中,动物类为抽象类,鸟类继承自抽象类,同样适用虚线进行表示。
- 聚合表示:
//大雁类继承自鸟类
class wildGoose : public Bird
{
public:
void layeggs() { }
void fly() { }
}; //雁群类
class wildGooseGroup
{
public:
wildGoose *wildgoose;
public:
wildGooseGroup(wildGoose *wildgoose) {
this->wildgoose = wildgoose;
}
wildGooseGroup() { }
};
聚合表示个体与整体的关系,可以表示为 has-a ,但是需要注意的是个体与整体属于外在的构成,即一个对象参与构成了一个整体,如同学生组成班级的关系,即使整体不存在的情况下,个体还是可以存在的,即两者之间生命周期不同步。
- 组合表示:
//翅膀类
class Wings
{
public:
Wings(){}
~Wings(){}
}; //大雁类继承自鸟类
class wildGoose : public Bird
{
public:
void layeggs() { }
void fly() { }
private:
//大雁类中包含翅膀类
Wings wings;
};
组合表示部分与整体的关系,可以表示为 contains-a 关系,部分与整体属于内在的组成,即一个对象称为了整体的一部分,如同大脑与身体的关系,若整体不存在的情况下,部分是不会存在的。
注:
聚合表示 class A {…} class B { A* a; …..} 用到指针,从而表示两者生命周期不同步。
组合表示 class A{…} class B{ A a; …}
- 关联表示:
//企鹅类继承自鸟类
class penguin : public Bird
{
public:
void layeggs() { }
private:
Climate climate;
};
关联表示不同类之间的结构关系,其中一个类可以“知道”另外一个类,其中箭头指向被关联的类。继承、组合、聚合、依赖均为关联关系的一种表现形式。
关联关系作用时间持久。一个对象保存了对另外一个对象的引用,并在需要的时候调用这个对象的方法。
上述企鹅类中保存了气候对象,相对于组合等表现形式,关联所体现的为企鹅类与气候类之间一种很弱的联系。
- 依赖表示:
//鸟类
class Bird
{
public:
Bird(Oxygen oxygen, Water water) { }
~Bird(){}
void layeggs() { } private:
string color;
};
依赖关系表明一个类会使用到另一个类的情况,主要体现在“临时”情况下,比如可以体现在构造函数使用、传参使用。箭头指向被依赖的类。
补充例子:
你与你的手之间是组合关系(手是你身体的一部分,不可归其他所有);
你与你你的班级之间是聚合关系(班级没有你仍然存在);
你与你朋友之间是关联关系;
你与水之间是依赖关系;
0.UML图入门——学习《大话设计模式》笔记的更多相关文章
- Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation
原文:Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...
- Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD
原文:Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链 ...
- Elasticsearch7.X 入门学习第一课笔记----基本概念
原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...
- <大话设计模式>笔记
读完了<大话设计模式>这本书,收获很多,对程序设计有了很多新的理解.将每章模式的大概要点做了些笔记以备查阅,一些设计模式书读完也对其了解得不是很透彻,需要以后在实践中来不断地加深理解吧.读 ...
- 【后台管理系统】—— Ant Design Pro入门学习&项目实践笔记(三)
前言:前一篇记录了[后台管理系统]目前进展开发中遇到的一些应用点,这一篇会梳理一些自己学习Ant Design Pro源码的功能点.附:Ant Design Pro 在线预览地址. Dashboard ...
- Git入门学习和应用笔记
>>关于Git 1.BitMover公司收回Linux社区的BitKeeper免费使用权,Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git.2.什么是集中式版本控制系 ...
- Java设计模式精讲之UML急速入门
简单记录 - 慕课网 - Java设计模式精讲 Debug方式+内存分析 文章目录 第2章 UML急速入门 2-1.UML简单入门 UML定义 UML特点 UML 2.2分类 UML类图 理解泛化.实 ...
- UML图基础知识
一.UML简述 类是面向对象系统中最重要的构造块.类图显示了一组类.接口.协作以及他们之间的关系,通过类图,我们能够很好的掌握类与类之间的关系. 首先给出一幅UML类图,此图来源于<大话设计模式 ...
- 设计模式("大话设计模式"读书笔记 C#实现)
前言:毫无疑问 ,学习一些设计模式,对我们的编程水平的提高帮助很大.写这个博客的时候自己刚开始学习设计模式,难免有错,欢迎评论指正. 我学设计模式的第一本书是“大话设计模式”. 1.为什么要学设计模式 ...
随机推荐
- 【大数据】分布式文件系统HDFS 练习
作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292 利用Shell命令与HDFS进行交互 以”./bin/dfs d ...
- LeetCode 7. 反转整数(Reverse Integer)
题目描述 给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 ...
- Python模块安装方法
安装Python模块 电子邮件 distutils-sig @ python .组织 作为一个受欢迎的开源开发项目,Python具有活跃的贡献者和用户支持社区,并且根据开放源代码许可条款,其软件可供其 ...
- easyui datagrid怎么动态获取表头的列名及显示名称
说明:目前使用easyui combobox多选属性,绑定的数据源是来自datagrid的表头的列名及显示名称 处理方法: //获取冻结的数据源并返回key,value格式数据 var GetFroz ...
- disruptor 组件理解
disruptor 中核心组件包括 RingBuffer.Event .EventHandler.Sequence.Sequence Barrier. WaitStrategy.WorkProcess ...
- 【IoT】物联网NB-IoT之电信物联网开放平台对接流程浅析
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/liwei16611/article/de ...
- java算法 -- 基数排序
基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较.由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排 ...
- 数据分析入门——pandas之DataFrame多层/多级索引与聚合操作
一.行多层索引 1.隐式创建 在构造函数中给index.colunms等多个数组实现(datafarme与series都可以) df的多级索引创建方法类似: 2.显式创建pd.MultiIndex 其 ...
- vue+element-ui+ajax实现一个表格的实例
<!DOCTYPE html> <html> <head> <script src="js/jquery-3.2.1.js">< ...
- LeetCode Top Interview Questions
LeetCode Top Interview Questions https://leetcode.com/problemset/top-interview-questions/ # No. Titl ...