类是面向对象编程的基础。用一个简单的表格来来说明面向对象技术是如何对现实时间进行描述的:
类与现实的对比
现实世界 | 面向对象技术 |
由事物组成 | 用对象来描述事物 |
事物之间有共性,可以归纳 | 类是具有相同共性的抽象描述 |
事物存在联系,需要交流 | 消息,方法 |
事物是一个独立的实体 | 封装性 |
客观世界中事物存在继承关系,用来简化对事物的认识和描述 | 继承性 |
复杂事物可以看成由多个简单事物组成 | 聚合关系 |
不同的事物收到同样的消息时,所产生的行为不同 | 多态性 |
那么我们使用面向对象技术进行编程,使用UML 中类图是必须的。
学习类图让我们从下面四个问题开始:
1、什么是类图?类图用来做什么?
2、怎么寻找类?
3、类的表示?类图的构成?
4、类之间的关系?
首先回答什么是类图?类图用来做什么?
类图是我们把待开发系统中的对象进行抽象形成的各个不同的类,通过某种关系组合在一个的图。
它是对待开发系统静态部分进行描述。
那么怎么寻找类呢?
从待开发的系统中寻找名词。当然在寻找的过程中,我们不可能一次就可以找齐,一步一步的分析,过程中添加。
例如机房收费系统中,首先涉及到得名词有管理员,学生,卡,账单。然后我们在分析,账单是如何产生的,可想而知是由消费表和退卡表,充值表的基础上生成的;那么消费表是单独存在的吗?如果没有数据设定表,就不会有合理的消费表,所以这里还有一个数据设定表用来规定计费情况。这样我们顺藤摸瓜,就可以慢慢的找齐待开发系统设计到类。
类的表示
(1)类有三部分:名字,属性,方法。如下图所示:
属性,方法可以选择性隐藏。
(2)修饰符
private,public ,protect,static。根据需要进行选择修饰符。
类图的构成:类,关系。
(1)类。这里的类不可以狭义的理解为类,有时类图中也存在包,接口,构件等元素。
(2)关系。依赖,泛化,关联。
关联又分普通关联,聚合,组合。
| (1)普通关联 | (1.1)单向关联 | 实线+箭头 |
1、关联 |
| (1.2)双向关联 | 实线 |
| (2)聚合 |
| 实线+空心菱形 |
| (3)组合 |
| 实线+实心菱形 |
2、依赖 |
|
| 虚线+箭头 |
3、泛化 |
|
| 实线+空心三角 |
确定一个关系式不是关联关系,个人理解:
关联关系的判断:相互关联的类,在各自的类中都含有一个属性是关于对方的。
例子:学生,卡的关系。双向关联。学生类中有一个属性:CID;卡类中有一个这样的属性:SID;
卡和充值记录表,单向关联。充值记录表中有一个属性:CID。
聚合和组合的区别:
聚合类:类A,类B,这些类可以单独存在。
组合类:只要类A消失,类B也将不存在。
依赖关系的判断:
1、类A的参数使用到类B。
2、类A的方法使用到类B。
泛化也就是继承,比较简单那,不再赘述。
下图是对机房收费系统的一个粗略的类图尝试绘制,有不足青指正。: