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方式,依赖优于关联优于继承。复用类方面,组合比继承更加灵活。

时间: 2024-10-11 10:14:03

UML类图细节的相关文章

[.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图

[.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图 1.UML简介 Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是他们的主要用途简介: 1.用例图:对系统的使用方式分类. 2.类图:显示类和它们的相互关系. 3.对象图:只显示对象及它们的相互关系. 4.活动图:显示人或对象的活动,其方式类似于流程

深入浅出UML类图

在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition>(<UML精粹:标准对象建模语言简明指南(第3版)>)中有这么一段:“If someone were to come up to you in a dark alley and say, 'Psst, wanna

UML类图和时序图

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

看懂UML类图和时序图

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

《Nodejs开发加密货币》之二十六:轻松从Js文件生成UML类图

前言 上一篇<函数式编程入门经典>,罗嗦了很长,很多小伙伴看得云里雾里.这里提供一个实例,让大家切身感受函数式编程的奥妙和趣味.当然,仅仅为了举例而写代码就没有什么意义了,本书提供的例子都是承担了某项任务的具体项目或工具,这个例子自然也不能例外. 本书用到了大量的Uml类图,经常有小伙伴问我用什么工具画的.说实话,前几篇是我个人一点点手工整理的,但后来就感觉在浪费生命,作为程序员,怎么可能容忍这样的事情反复发生.所以,就有了 js2uml(见参考)这个小工具.只不过,当初目的单一,仅仅使用正则

设计模式——1.概述&amp;UML类图和时序图

声明:设计模式相关文章均整理修改自网络,原文地址:图说设计模式 学习设计模式的3个层次—— 1.熟悉所有设计模式: 2.能够用代码实现: 3.运用到工作的项目中. 设计模式指导软件开发,学习设计模式首先需要了解相关UML图,下面将对UML类图做相关介绍. 重点需要明白,类图中各个类之间的关系,各个类之间线条.箭头的含义. 应该能将类图所表达的含义和最终的代码对应起来. 一.从一个示例开始 请看下面的类图,类之间的关系是我们需要关注的: 1.车的类图结构为<<abstract>>,表

从 Java 代码逆向工程生成 UML 类图和序列图

from:http://blog.itpub.net/14780914/viewspace-588975/ 本文面向于那些软件架构师,设计师和开发人员,他们想使用 IBM? Rational? Software Architect 从 Java? 源代码来逆向工程生成 UML 类和序列图. 逆向工程经常被用来从已有的源代码中以一种抽象模型 UML 格式来获得丢失的设计文档,其可以用来研究一个系统的静态结构和动态行为,并用于扩展新的特性到产品. 作者详细说明了使用 IBM Rational Sof

[转] 看懂UML类图和时序图

PS: 组合关系:实心,一个类A属于另一个类,或多个类,但是类A不能单独存在去使用,A一般是一种抽象的东西 聚合关系:空心,一个类A可以单独存在使用 不论组合聚合,A的方法都会被直接调用. 看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码对应起来: 有了这些知识,看后面章节的设计模式结构图就没有什么问题了: 本章所有图形使

intellij idea 高级用法之:集成JIRA、UML类图插件、集成SSH、集成FTP、Database管理

之前写过一篇IntelliJ IDEA 13试用手记,idea还有很多高大上的功能,易用性几乎能与vs.net媲美,反正我自从改用idea后,再也没开过eclipse,今天来看几个高级功能: 一.与JIRA集成 jira是一个广泛使用的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域.idea可以很好的跟它集成,参考下图: File -> Settings ->Task -> Servers 点击右侧上面的+号,选择JIRA,