UML类图细节
类图表述的是类和类之间的关系,是前期用来推演代码设计,后期用来优化代码的结构,寻找设计不合理之处。网上解释类图和类图的画法,往往表述的十分晦涩,或者例子呆板,很难具体的操作。
类图一般在详细设计过程中出现,主要用来描述系统中各个模块中类之间的关系。也就是说,看完类图之后,你要能想象出代码大体的实现。能做到这点,才能说会看类图。类的关系一般分为3种,分别是依赖、关联、继承。先上张各个关系的表示图:

依赖,维基百科的解释是类和类之间弱连接,只在某一个时间点,有调用关系。从代码实现角度来看,一般分为三种:对象作为方法参数、对象作为局部变量、调用类的静态方法。即一个类function的括号内所调用的类,与它自己都是依赖关系。因为这种关系是弱连接的,从高内聚低耦合的角度来看,这样的代码组织最优,无论是面向对象还是面向过程。
依赖中有一个特殊的现象,即相互依赖。推敲上面对依赖的解释,相互依赖可以理解为:A类的函数可以调用B类函数的局部变量,反之同样。更加普遍的学名应该是闭包。虽然和动态语言的支持力度不一样,但java的确是支持的,就是匿名内部类。这样的结构,处理回调十分有优势。换句话说:看到类图里有相互依赖的无箭头虚线,就能得出这里有回调关系。
关联则是一种强连接关系,代码上表现为将一个类的对象作为另一个类的成员变量。关联又有两种常见的关联关系:组合和聚合。这两种区别十分的明显:在类A中有成员变量类B的实例b,如果b的生命周期一直在类A之内,则表明A关联B,且是组合关系。如果类A生成了b,而且将其传到类C,则类B与A,C都是关联,且是聚合关系,因为b的生命周期不再由A单独掌握。
找一个网上的图(图(2)),意会一下其中的区别。

其实我觉得这两种情况在真正的编码的时候,是不容易混淆的,因为他们的作用完全不一样。组合的方式主要用于代码的复用,竞争对手是继承,用于类的构建。而聚合的方式主要用于类似工厂模式,生成一些符合规格的实例,填入属性,给其他的类使用,用于代码运行时。
继承,不同于关联和依赖,它是按照现有类的类型创建新的类的方式。从线条上来说分为一般化和实现。常见的我们使用一般化,而使用实现通常在强调这是一个final类。在《Java编程思想》一书中,对应该使用继承还是组合复用代码有一个经典的判断:是否需要从新类向基类进行向上转型,如果必须,则用继承,否则应该用组合。
总结下,为了使代码高内聚低耦合,这3方式,依赖优于关联优于继承。复用类方面,组合比继承更加灵活。
UML类图细节的更多相关文章
- UML类图(下):关联、聚合、组合、依赖
前言 上一篇文章UML类图(上):类.继承.实现,讲了UML类图中类.继承.实现三种关系及其在UML类图中的画法,本文将接着上文的内容,继续讲讲对象之间的其他几种关系,主要就是关联.聚合.组合.依赖, ...
- [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图
[.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图 1.UML简介 Unified Modeling Language (UML)又称统 ...
- UML——在Visual Studio 2013/2015中设计UML类图
1.UML简介 Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是 ...
- 转:深入浅出UML类图(具体到代码层次)
深入浅出UML类图 作者:刘伟 ,发布于:2012-11-23,来源:CSDN 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML ...
- intellij idea 高级用法之:集成JIRA、UML类图插件、集成SSH、集成FTP、Database管理
之前写过一篇IntelliJ IDEA 13试用手记,idea还有很多高大上的功能,易用性几乎能与vs.net媲美,反正我自从改用idea后,再也没开过eclipse,今天来看几个高级功能: 一.与J ...
- 深入浅出UML类图
原作者:http://www.uml.org.cn/oobject/201211231.asp 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作&l ...
- 看懂UML类图与时序图
看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图 ...
- 设计模式——1.概述&UML类图和时序图
声明:本博客设计模式相关文章均整理和修改自网络,原文地址:图说设计模式 学习设计模式的3个层次—— 1.熟悉所有设计模式: 2.能够用代码实现: 3.运用到工作的项目中. 设计模式指导软件开发,学习设 ...
- 看懂UML类图和时序图
看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图 ...
随机推荐
- iPhone丢失后通过iccid找回流程
切记,丢失IPHONE第一时间要去补卡,免得小偷刷机用你的卡激活,这样你查到的号码只会是你自己的号码找iphone有2个方法:ICCID和维修换机.两者之间没任何直接联系,请不要混淆!下面是总体流程图 ...
- 嵌入式 hi3518c裸板uboot烧写、kernel烧写、fs烧写小结
1.在uboot中我可以添加自己的命令,添加的方法是找到一个uboot的命令,然后模仿着去增加属于自己的命令代码以及实现函数就可以 2.记住在使用printf进行调试的时候,在遇到指针或者字符串的时候 ...
- Servlet3.0学习总结(三)——基于Servlet3.0的文件上传
在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不 ...
- MailSystem.NET Gmail IMAP讀取信件
程式的主流程為: 開啟SSL連線,逐一讀取收信匣中的信件,將信件內文HTML及附檔逐一存檔後,再將信件移至垃圾桶. 程式碼如下,補充說明我寫在註解裡,請參考: static void Main(str ...
- arm linux kernel启动之start_kernel
了解完kernel启动以前的汇编之后我们来看看正式的c语言启动代码,也就是我们的start_kernel函数了.start_kernel相当大,里面每一个调用到的函数都足够我们伤脑筋了,我这里只是浅尝 ...
- AIX 添加开机启动项
在学习本主题之前,还是先学习一些AIX关于启动的基础知识,如果你只关心如何开机自动重启程序,请跳过第一章.第二章. ----------------------------第一章 AIX开机启动过程介 ...
- oracle rac 学习(转载)
一. RAC 并发 RAC 的本质是一个数据库,运行在多台计算机上的数据库,它的主要任务是数据库就是事务处理,它通过 Distributed Lock Management(DLM:分布式锁管理器) ...
- Oracle10g/11g 在SUSE/RHEL上的安装与配置
在过去对众多项目的支撑过程中,Oracle作为首选数据库,其安装与配置过程成了重复性最多的工作之一.在此,我进行了总结,并分享出来,希望能对大家有所帮助.随着Oracle版本的提升,从9i -> ...
- 部署 外网 ASP.NET程序时, IIS安全性 配置 -摘自网络
最近,和朋友们在聊及ASP.NET程序的安全性没有JAVA高,IIS(Internet Infomartion Server)的存在很多漏洞(以及新型蠕虫,例如Code Red 和Nimda),安全得 ...
- mongodb的固定集合(优化效率)
mongodb固定集合(Capped Collection)和大文件管理(GridFS) Capped Collection 固定集合(Capped Collection)是性能出色的有着固定 ...