C++编程杂谈之四:漫谈UML

UML对很多人来说应该不是一个陌生的概念,这一两年来,UML被大家越来越多的讨论着。本来UML跟我这个主题似乎并不能扯上多大的关系(它是语言无关的,甚至可以说其本身就是一种语言——用于交流的)。我在此谈到它有两个目的:

1.UML是针对面向对象软件开发的,而C++正是这样的一种语言

2.UML在设计中被越来越多的使用着,而下一篇杂谈准备讨论设计模式,如果不了解UML,那么无法进行下去

UML,全称:Unified Modeling Language,其目的是为了对软件密集型的制品进行可视化、详述、构造和文档化的图形语言。UML是依据许多前人的思想总结出的成果,1997年被OMG通过并成为标准(所以在《设计模式》书中如果你看到与标准不一样的地方,不要奇怪,那本书是95年的)。关于UML的历史和更详细的描述,可以参考《UML 参考手册》。UML主要由一系列视图组成,其中包括静态视图(Static view),用例视图(Use case view)活动视图(Activity view)等,不同的图用处自然也不一样,而对开发人员来讲(或者说为我的下一篇来说),更重要的应该是静态视图中的类图(class diagram)和交互视图(Interaction view)中的顺序图(Sequence diagram),请注意view和diagram的区别。

类图

静态视图说明了对象的结构,其中最常用的就是类图,类图可以帮助我们更直观的了解一个系统的体系结构,有时侯,描述系统快照的对象图(Object diagram)也是很有用的。在这里,我们主要介绍类图,下面的图就是一个简单的类图:

在类图中,类由矩形框来表示,如上图中,定义了4个类,分别为Base、A、B、C,类之间的关系通过各种线条和其他符号来表示,在上图中,空心的三角表示继承关系,在UML的术语中,这种关系被称为泛化(Generalization),所以上面的类用等价代码表示为:

class Base{…};

class A:public Base{…};

class B:public Base{…};

class C:public Base{…};

我们再看下一幅图:

这幅图与上幅几乎没有什么区别,唯一的不同就是Base类中增加了成员,一个私有的integer _x(UML术语为property)和一个公有的fun()的函数(method),是否需要这些类的内部细节UML本身并没有限制,完全取决于你自己如何使用,UML的用处在于帮助你了解系统,所以只要你自己觉得足够清楚,那么够了,不要再复杂了。

接着看第三幅图:

时间: 2024-08-22 12:51:06

C++编程杂谈之四:漫谈UML的相关文章

.NET 4 并行(多核)编程系列之四 Task的休眠

原文:.NET 4 并行(多核)编程系列之四 Task的休眠 .NET 4 并行(多核)编程系列之四 Task的休眠 前言:之前的几篇文章断断续续的介绍了Task的一些功能:创建,取消.本篇介绍Task的休眠,本篇的内容比较的少. 本篇的议题如下: 1.       Task的休眠.   系列文章链接: .NET 4 并行(多核)编程系列之一入门介绍 .NET 4 并行(多核)编程系列之二 从Task开始  .NET 4 并行(多核)编程系列之三 从Task的取消  .NET 4 并行(多核)编

098_《Delphi5高级编程丛书之四:COM、CORBA与Internet编程》

<Delphi5高级编程丛书之四:COM.CORBA与Internet编程> Delphi 教程 系列书籍 (098) <Delphi5高级编程丛书之四:COM.CORBA与Internet编程> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2 Part3 Part4 作者: 徐新华 出版社: 人民邮电出版社 书号: 7115084963 出版日期:2000年5月 开本: 787*1092 1/16 页码: 392 版次: 2000

vb.Net编程简介之四

编程 Windows APIs    大多数的API调用可以象在Visual Basic 6.0中一样使用,因为数据类型发生了改变.在Visual Basic 6.0中的Long类型在Visual Basic.NET中定义为Integer类型.在升级过程中这些定义会自动改变,例如: Private Declare Function GetVersion Lib "kernel32" () As LongFunction GetVer()    Dim Ver As Long    Ve

Aspect Oriented编程杂谈

至今Aspect Oriented Programming已经被开发人员所熟知,其简写AOP,译为面向方面编程(也有称面向切面编程).其产生于90年代Xerox PARC实验室编程范式.被称为oop的延续,oop主要针对业务处理过程的领域问题抽象封装,形成领域对象,更 好的描述自然领域问题.而aop主要处理业务处理过程中处理逻辑步骤分离,减少业务逻辑的耦合性,是的我们的开发人员在开 发过程中只需关心领域的核心实际逻辑.在结构化编程(SP)中提出了SOC(分离关注点),并一直被称为是面对复杂软件最

C++编程杂谈之三:面向对象(续)

上一篇我们涉及了面向对象的一个基本概念--封装,封装是一个相对比较简单的概念,也很容易接受,但是很多的场合下面,仅仅是封装并不能很好的解决很多问题,考虑下面的例子: 假设我们需要设计一个对战游戏的战斗细节,在最初的版本中我们将支持一种动作--fight.假设我们有三种角色:fighter.knight和warrior,每种角色的health.hit point不同,基于封装的基本想法,我们很自然的想到对每个对象使用类的封装,首先明显的元素有2个:health.hit point,另外还有name

C++编程杂谈之二:面向对象

软件开发是一个极其复杂的过程,一段小的代码我们可以快速.准确的完成,但是当你面对的是一个庞大的软件系统的时候,你是否有不知所措的感觉呢? 在我们使用C的年代里面,编程思想是结构化的,你的C语言老师可能会不断的教导你怎样使用结构化的方法来完成一段程序,同时,你可能也知道在软件开发中的一个重要定律(Wirth定律): 程序 = 算法 + 数据结构 在结构化设计中人们通常是这样来看待这个定律的: 程序 =(算法) + (数据结构) 例如:(我仍然使用C++标准库来写下面的代码,方便和以后的代码对比)

C++编程杂谈之一:编译器

网上有很多各种编译器的优劣比较的东西,我写这些东西并不是想支持或否定某些东西,因为我始终认为在编程的领域中,我只是一个初学者,并没有资格来评判什么(况且我也不想去评判),我只是想讲述一下个人学习道路上的感受. 学编程的一个必备的条件是你要有一个实践的平台--一个相应的编译器,没有这个条件,一切都是空谈.选择编译器之前,首先选择的是语言(这个我想不必更多的解释了),这里我假设你选择了C或C++. 现在最流行的编译器恐怕应该是微软的VC了,在继续之前,我想再提一下一个重点:VC是一个编译器,只是一个

.NET 4并行(多核)编程系列之四 Task的休眠

前言:之前的几篇文章断断续续的介绍了Task的一些功能:创建,取消.本篇介绍Task的休眠,本篇的内容比较的少. 本篇的议题如下: 1.Task的休眠. 1.Task的休眠 有时候,我们常常希望一个Task在等待一段时间之后再运行,也就有点类似之前多线程编程中的Sleep.我们可以设置一个Task休眠多长时间,当这个时间过了,Task就自动的唤醒接着运行. 下面就讲讲休眠的方法: a.使用CancellationToken的Wait Handle: a)在.NET 4并行编程中,让一个Task休

【 MAKEFILE 编程基础之四】详解MAKEFILE 函数的语法与使用!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/771.html 使用函数: 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使用. 一.函数的调用语法 函数调用,很像变量的使用,也是以"$"来标识的,其语法如下: $