工作有一段时间,在公司中也经常看到这样那样的UML文档。而我--一个半路出家的程序员,面对编程世界很多东西都感到是那么的神奇(因为陌生)。当然 UML也不例外....
今天利用工作空余时间,学习一下UML到底是怎回事。 以为也曾看过一些UML的资料,但是你们的描述过于书面我没怎么理解,今天我是咬起牙来学习的(书到用时方恨少)。
UML据说很强大,功能很丰富。但对于UML我现有的认识是:用图像来表达设计思路或程序设计结构。换一种说明:用图形来表达或者沟通自己的想法。
说道UML就不得不提到泛化、继承、组合之类的,今天我的笔记也主要讲解这方面的东东。
一、泛化 vs继承。正如网上若干资料中提到的一样,他们是从正反两个方向描述东东。所以在UML图形中,泛化和继承的表现形式是一样的。
代码可以这样表示:
class A;//不要扔砖头砸我:这个类的定义写法是错误的
class B:A;
二、依赖。一个类中的某些功能(方法)依赖于另一个类
代码可以表示为:
Class A;
Class B
{
void Do()
{ //可能存在的B类处理代码
B.Do();//调用B中的方法,来完成A类的功能
//可能存在的B类处理代码
}
}
从上面的代码很容易就能看出,B依赖于A。我的疑问:有没有这样的情况:A依赖于B,B依赖于A(我猜这种情况是成立的)
看图→
三、关联。 这个感觉容易和依赖混淆。先了解关联后,再来讲他们的却别:
先用代码来表示:
class A;
class B
{
A a1=new A1();
a1.Do();//A类的方法,即 在B类中可以反问使用A的可访问元素
//或者,如下:
privite A test_Property;//A作为B的一个属性
}
区分依赖和关联: 依赖,一个类中的方法或功能必须依靠另一一个类的方法来完成,即一个类的变化会引起另一个类的变化
关联, 一个类中,知道并可以使用另一个类的课访问元素,常见形式为一个类为属性的形式出现在另一类中
其中,关联又分为单向关联和双向关联。双向就是相互知道彼此
看图→
四、聚合、组合。 首先要明了:聚合与组合是特殊的关联,不然等下你会疑惑怎么关联和聚合如此相似!
然后再来看看聚合和组合聚合的例子→
基本聚合例子:公司和员工的关系,开 了一个新公司,但不一定要招员工,员 工可以单独存在.
组 合聚合例子:当人出生的时候,同 时人就有了心脏,心脏脱离了人就没有意义了.
记忆口诀:(他们的区别主要在于一个是实心菱形,一个事空心菱形)。
聚在一起肯定有空隙,就像聚会时有空位一样,所有事空心 (有聚就有散,所以到头来都是一场‘空’)
为了将空白填满才组合在一起 ,所以组合是实心。
简单点:有聚有散,终为空;先组后和,才结‘实’
看图(这张图是网上下载的,陈程《大话设计模式》中的图) →