uml 类图整理

1.五分钟读懂UML类图

http://www.cnblogs.com/shindo/p/5579191.html

2.UML类关系(依赖,关联,聚合,组合的区别)

https://www.jianshu.com/p/eefa0b5b4922

2.1 关联

1、关联关系

关联关系又可进一步分为单向关联、双向关联和自关联。

(1)单向关联

我们可以看到,在UML类图中单向关联用一个带箭头的直线表示。上图表示每个顾客都有一个地址,这通过让Customer类持有一个类型为Address的成员变量类实现。

 

(2)双向关联

从上图中我们很容易看出,所谓的双向关联就是双方各自持有对方类型的成员变量。在UML类图中,双向关联用一个不带箭头的直线表示。上图中在Customer类中维护一个Product[]数组,表示一个顾客购买了那些产品;在Product类中维护一个Customer类型的成员变量表示这个产品被哪个顾客所购买。

 

(3)自关联

自关联在UML类图中用一个带有箭头且指向自身的直线表示。上图的意思就是Node类包含类型为Node的成员变量,也就是“自己包含自己”。

 

2.2依赖--dependency

用带折线的箭头表示

  • 依赖其实定义非常模糊,所以使用依赖只应该是在其他关系无法表示的时候:
  • 依赖通常体现为调用一个其他所依赖类的方法
  • 在代码中往往体现为依赖类作为函数参数或者局部临时变量

举例:人依赖车 

2.3聚和--aggregation

UML中聚合关系用带空心菱形和箭头的直线表示。聚合关系强调是“整体”包含“部分”,但是“部分”可以脱离“整体”而单独存在

2.4组合--composition

组合关系与聚合关系见得最大不同在于:这里的“部分”脱离了“整体”便不复存在。比如下图:

显然,嘴是头的一部分且不能脱离了头而单独存在。在UML类图中,组合关系用一个带实心菱形和箭头的直线表示。

总结:聚合和组合都属于包含的范畴,现实生活中的关系;比如 汽车包含引擎,头包含嘴;

  •  不同的是聚合,两个类/对象(现实中的事物)是彼此可以独立存在的;For Example: 汽车和引擎可以彼此独立存在的因此是聚合关系。
  • 组合是c中两个事物不能独立;For Example :头和嘴是彼此不能独立存在的

    依赖和关联区别:

  •   依赖:代码中通常体现为调用其他类作为参数或者局部变量
  •   关联:关联类通常作为一个类的成员变量存在

           

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web控件开发系列(四) 自定义控件属性(下)

控件在WEB开发时经常要用到,虽然有部分已经存在工具箱里,但有时总需要根据自己的要求,开发一些合适自己的控件。接上一节,已经说过了控件的属性, 例如,我们需要一组属性的集合时,这时我们需要用到的就是复杂属性了&…

【C++深度剖析教程3】C++中类的静态成员变量

学习交流加(可免费帮忙下载CSDN资源):个人微信: liu1126137994学习交流资源分享qq群1(已满): 962535112学习交流资源分享qq群2: 780902027 以一个简单的例子来引入C中类的静态成员变…

前端学习(46):页面导入样式时,使用link和@import有什么区别?

用法 import的写法 <style type”text/css”> import url&#xff08;“a.css”&#xff09;&#xff1b; </style> link的写法 <link rel"stylesheet" href"index.csss"> 区别 1. 来源&#xff1a;link属于XHTML标签&…

静态变量加载时间,静态代码块加载时间

当类加载器将类加载到JVM中的时候就会创建静态变量&#xff0c;这跟对象是否创建无关。静态变量加载的时候就会分配内存空间。静态代码块的代码只会在类第一次初始化的时候执行一次。一个类可以有多个静态代码块&#xff0c;它并不是类的成员&#xff0c;也没有返回值&#xff…

关于linux系统中无法识别某一命令问题的解决方案

问题描述&#xff1a; [XXXX~]$ su - root 口令&#xff1a; [XXXX:]~# gedit /etc/profile Command gedit is available in /usr/bin/gedit The command could not be located because /usr/bin is not included in the PATH environment variable. -su: gedit&#xff1a;找…

FarMap诞生了!

今天&#xff0c;注册完成的FarMap网站最简版正式上线&#xff0c;开辟了一片我的作品发布空间。www.farmap.cn准备修改各个博客网址和下载地址。FarMap2009 使用说明 关键字&#xff1a;基站定位&#xff0c;CPS&#xff0c;GPS&#xff0c;CPS&GPS&#xff0c;短信通讯&a…

23设计模式学习

1.什么设计模式 1.1模式是解决相似问题的核心1.2设计模式软件设计过程中解决一类问题的方案总结来说&#xff1a;设计模式 &#xff1a;软件设计过程中解决一类问题的一种方案&#xff1b; 2.什么是面向对象的设计模式 面向对象设计模式描述了面向对象设计过程中、特定场景下…

修改linux的最大文件句柄数限制

修改linux的最大文件句柄数限制 对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值&#xff0c;就会提到“too many files open”的…

人工智能课程

清华大学计算机博士联合智能社创始人年末巨献&#xff0c;【机器学习】大型线上公开课&#xff0c;报名人数超过2800人&#xff0c;课程观看地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1nv66ywD 密码&#xff1a;9bv3想看更多课程的联系:qq:1126137994微信&…

Makefile工程管理语法与使用技巧

使用GNU Make工具来管理程序是每个Linux工程师必须掌握的技能。Make能够使整个程序的编译、链接只需要一个命令(make)就可以完成。 Make的工作主要依赖于一个叫为Makefile的件。Makefile文件描述了整个程序的编译&#xff0c;连接等规则。其中包括&#xff1a;工程中的哪些源文…

JUC 知识总结

在 ThreadPoolExecutor 里面定义了 4 种 handler 策略&#xff0c;分别是 1. CallerRunsPolicy &#xff1a;这个策略重试添加当前的任务&#xff0c;他会自动重复调用 execute() 方法&#xff0c;直到成功。 2. AbortPolicy &#xff1a;对拒绝任务抛弃处理&#xff0c;并且…

C# java 有关“字节序”的描述 .

有关“字节序”的描述 收藏 BIG-ENDIAN&#xff08;大字节序、高字节序&#xff09; LITTLE-ENDIAN&#xff08;小字节序、低字节序&#xff09; 主机字节序 网络字节顺序 JAVA字节序 1&#xff0e;BIG-ENDIAN、LITTLE-ENDIAN跟多字节类型的数据有关的比如int,short,long型&…

移植u-boot-2012.04.01到jz2440开发板

今天我给大家分享一下如何移植一个纯净的uboot到jz2440开发大版&#xff0c;通过记录学习分享&#xff0c;与大家一起进步&#xff01;&#xff01;&#xff01; 1.首先我们在uboot官网下载u-boot-2012.04.01.tar.bz2&#xff0c;建立source insight工程。将下载好的uboot通过…

温习了一下java线程状态方面的知识总结一

好长时间没有复习线程状态这块&#xff0c;读并发编程实战正好看着这块&#xff0c;顺便复习一下&#xff1a; 1.线程的五种状态&#xff1a; 2.线程五种状态的转换图&#xff1a; wait()会立刻释放synchronized(obj)中的锁以便其它线程可以执行obj.notify 但是notify() 不会立…

WinForm:进度条的实现(异步)

在WinForm中经常遇到一些费时的操作界面&#xff0c;比如统计某个磁盘分区的文件夹或者文件数目&#xff0c;如果分区很大或者文件过多的话&#xff0c;处理不好就会造成“假死”的情况&#xff0c;或者报“线程间操作无效”的异常&#xff0c;为了解决这个问题&#xff0c;可以…

移植u-boot-2012.04.01到jz2440开发板之修改代码支持NAND启动

上一篇文章我们已经修改了uboot源码使其能够正常打印输出了&#xff0c;但是输出停到了nand启动那里&#xff0c;所以这篇文章就来记录如何修改源码使uboot支持NAND启动。 原来的代码在链接时加了”-pie”选项, 使得u-boot.bin里多了”(.rel)”, “*(.dynsym)”使得程序非常大…

XMLHttpRequest() 请求 返回结果JSON 对象与JSON 字符串处理

好久没有看JavaWEB项目了突然拿起来&#xff0c;而且是原生的项目&#xff0c;中JSON 字符串的处理 json.stingfy() 将对象&#xff0c;数组转换为字符串&#xff0c;json.parse() 将字符串转成json 对象JSON.stringify&#xff08;数组或者对象&#xff09; JSON.parse(字符串…

【C++深度剖析教程4】C++的二阶构造模式

今天学习的是C中的二阶构造模式&#xff0c;二阶构造模式只是设计模式中的简单的模式&#xff0c;是一种软件设计的方法&#xff0c;并没有我们想象的那么高深&#xff0c;设计模式也是一样&#xff0c;只不过是一系列的设计方法&#xff0c;只要我们懂得了原理&#xff0c;那么…

获取应用程序根路径

public string GetRootURI(){string UrlAuthority Request.Url.GetLeftPart(UriPartial.Authority);if (Request.ApplicationPath null || Request.ApplicationPath "/"){//直接安装在Web站点return UrlAuthority;}else{//安装在虚拟子目录下return UrlAuthority …