漫谈UML

UML,全称:Unified Modeling Language,其目的是为了对软件密集型的制品进行可视化、详述、构造和文档化的图形语言。我们在进行软件开发的过程当中,需要对整个系统的架构和系统运行的流程进行描述。我们可以使用UML来帮助我们建立一个系统模型。更直观的表达了系统的设计。指导系统进行开发。

以下是我们在开发过程经常使用到的。

类图

  静态视图说明了对象的结构,其中最常用的就是类图,类图可以帮助我们更直观的了解一个系统的体系结构,有时侯,描述系统快照的对象图(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(图三)

  上面图中的箭头表示一种关系,箭头另一边有一个菱形(空心)表示聚合(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后,你会发现,这往往比你告诉同伴某某类从某某类派生,派生类又和某某类具有什么关系容易的多。

  顺序图:

  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(图六)

  图中上方的方块表示参与的对象,垂直的虚线表示对象的生命线,方框表示激活,其中箭头表示了一个调用消息(也可以有回送return),如果是异步的消息,则用半箭头表示,其中draw表示了一个自调用(self call)

 

至此,UML中最常用的(从开发人员的角度),当然UML的内容远远不只这些,这里的介绍只是一些简单的概括,并且UML本身也在不断的发展之中,无论怎样,我觉得UML会越来越多的深入我们的开发过程中,

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭