C++编程杂谈之四:漫谈UML
当前位置:以往代写 > C/C++ 教程 >C++编程杂谈之四:漫谈UML
2019-06-13

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

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

副标题#e#

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)也是很有用的。在这里,我们主要先容类图,下面的图就是一个简朴的类图:

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

在类图中,类由矩形框来暗示,如上图中,界说了4个类,别离为Base、A、B、C,类之间的干系通过各类线条和其他标记来暗示,在上图中,空心的三角暗示担任干系,在UML的术语中,这种干系被称为泛化(Generalization),所以上面的类用等价代码暗示为:

class Base{…};

class A:public Base{…};

class B:public Base{…};

class C:public Base{…};

我们再看下一幅图:

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

这幅图与上幅险些没有什么区别,独一的差异就是Base类中增加了成员,一个私有的integer _x(UML术语为property)和一个公有的fun()的函数(method),是否需要这些类的内部细节UML自己并没有限制,完全取决于你本身如何利用,UML的用处在于辅佐你相识系统,所以只要你本身以为足够清楚,那么够了,不要再巨大了。

接着看第三幅图:

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


#p#副标题#e#

上面图中的箭头暗示一种干系,箭头另一边有一个菱形(空心)暗示聚合(aggregation),聚合的意义暗示has-a干系,其等价代码如下:

class A{…};

class B{ A* theA;…};

聚合是一种相对松散的干系,聚合类B不需要对被聚合的类A认真。

下面的图:

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

这幅图与上面的独一区别是菱形为实心的,它代表了一种更为健壮的干系——组合(composition)。组合暗示的干系也是has-a,不外在这里,A的生命期受B节制,凡是环境,等价代码如下:

class A{…};

class B{A theA;…};

即A会跟着B的建设而建设,随B的消亡而消亡。

下图:

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

这里B与A的干系只是一种依赖干系,这种干系表白,假如类A被修改,那么类B会受到影响,一个简朴的例子就是:

class A{…};

class B{fun(A params);…};

常用的干系就是我们上面用的这些,通过这些干系和类暗示的类图,我们可以用图形化的方法描写一个系统的设计部门,当你习惯利用UML后,你会发明,这往往比你汇报伙伴某某类从某某类派生,派生类又和某某类具有什么干系容易的多。

#p#副标题#e#

顺序图:

UML中别的一个常用的图形就是交互视图中的顺序图,在以往的进程化语言中,我们凡是利用流程图来描写一个函数(系统)是如何事情的,而在面向工具的系统中,这显然是不行行的,而顺序图正是来办理这个问题的。

假设有如下的伪代码:

class circle
{
public:
  void fillcolor()
  {
//    ...
  };
  void draw()
  {
    fillcolor();
  };
};
class window
{
public:
  void drawcircle()
  {
    _circle.draw();
  };
private:
  circle _circle;
};

对付下面的挪用:

window wnd;

wnd.drawcircle();

对应的顺序图如下:

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

#p#分页标题#e#

图中上方的方块暗示参加的工具,垂直的虚线暗示工具的生命线,方框暗示激活,个中箭头暗示了一个挪用动静(也可以有回送return),假如是异步的动静,则用半箭头暗示,个中draw暗示了一个自挪用(self call)

至此,UML中最常用的(从开拓人员的角度),虽然UML的内容远远不但这些,这里的先容只是一些简朴的归纳综合,而且UML自己也在不绝的成长之中,无论奈何,我以为UML会越来越多的深入我们的开拓进程中,出格是对下一篇我们要先容的设计模式而言,类图是主要的描写东西(到谁人时候你会体会到UML描写的优越)。

假如你看过《设计模式》着本书,你会发明与我上面所描写的有一些细微的差异,没干系张,《设计模式》是GOF95年的作品,当时候UML还没有形成,并且,个中也明晰那是OMT要领(Jim Rumbaugh在通用电气颁发的建模技能——Object Modeling Technique)和Booch要领。假如你以为UML有些让你无所适从,也不必告急,UML自己只是一个帮助东西,它的目标是辅佐你描写系统,不是巨大你的事情,假如你的系统很简朴,一句话可以说的很清楚,那么不要用UML,假如你只想说明类之间的干系,而不是类的接口描写,那么像第一副图那样简朴的描写就很好,总之不要去追求细节,只要能说明问题,那么你的目标就到达了(甚至你没有须要完全遵守类型)。

    关键字:

在线提交作业