UML随笔

来源:互联网 发布:最后的晚餐 知乎 编辑:程序博客网 时间:2024/05/18 11:28


泛化就是继承,实现就是接口的继承,

关联就是包含,聚合就是特殊的包含包含,但是强调整体与部分,组合就是特殊的包含,但是强调整体与部分 并且A包含B,A没了,B不能独立存在,

依赖就是A的成员方法需要用到B

类图

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

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

1.class Base{…};
2.class A:public Base{…};
3.class B:public Base{…};
4.class C:public Base{…};

我们再看下一幅图:

 

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

接着看第三幅图:

 

上面图中的箭头表示一种关系,箭头另一边有一个菱形(空心)表示聚合(aggregation),聚合的意义表示has-a关系,其等价代码如下(A的指针由构造函数传递进去):

1.class A{…};
2.class B{ A* theA;…};class C{  A* theA;  C(A* right)  {     theA = right;  }
};

聚合是一种相对松散的关系,聚合类B不需要对被聚合的类A负责。

下面的图:

这幅图与上面的唯一区别是菱形为实心的,它代表了一种更为坚固的关系――组合(composition)。组合表示的关系也是has-a,不过在这里,A的生命期受B控制,通常情况,等价代码如下:

1.class A{…};
2.class B{A theA;…};class C{  A* theA;  C()  {     theA = new A();  }
}

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

下图:

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

1.class A{…};
2.class B{fun(A params);…};

常用的关系就是我们上面用的这些,通过这些关系和类表示的类图,我们可以用图形化的方式描述一个系统的设计部分,当你习惯使用UML后,你会发现,这往往比你告诉同伴某某类从某某类派生,派生类又和某某类具有什么关系容易的多。


    Facade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Facdae很多时候更是一种架构
设计模式。
    注意区分Facade模式、Adapter模式、Bridge模式与Decorator模式。Facade模式注重简化接口,Adapter模式注重转换 接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式注重稳定接口的前提下为对象扩展功能。 
0 0
原创粉丝点击