摘要类图(Class Diagram)可能是用得最多的一种UML图。类图的基本语法并不复杂,你可能最多学习两三天就可以掌握,然而要真正做到活用类图则可能需要几年的功力。类图是锻炼面向对象分析(OOA:Object-Oriented Analysis)和面向对象设计(OOD:Object-Oriented Design)思想的重要的工具,是业务结构建模的重要工具。本章将会有大量的实战练习,你的OOA思想将会接受极大的考验和提升。

 

本文全长1万6千多字,并且有几十张插图,本文来自新书《火球——UML大战需求分析》的第3章(本书已经发售)。

温馨提示:本文有点长,麻烦你收藏一下慢慢阅读,谢谢!

 

作者:张传波 网名:Fireball(火球)
www.umlonline.org

 

大纲

3.1 面向过程与面向对象
3.2 类图的基础知识
3.3 类之间的关系
3.4 演练类之间的关系
3.5 类的“递归”关系与“三角”关系
3.6 考试管理系统——类图综合训练
3.7 关于对象图
3.8 小结与练习

 

3.1  面向过程与面向对象

本小节的内容涉及到编程方面的知识,如果你有相关经验,请认真阅读本小节,本小节目的是澄清开发人员的一些面向过程和面向对象的理解误区。如果你没有编程经验或者对此不感兴趣,可忽略本小节直接阅读下一小节,忽略本小节并不影响你对后文的理解。
上世纪90年代初,当我读高中的时候首次接触电脑,并且学习了第一门编程语言Basic。当时不知道什么是面向过程,也不知道何为面向对象,只知道不断地学习Basic语言的算法,感受编程的乐趣。当时学习的Basic语言,现在看来是很老土的面向过程的语言。
后来学习了C语言,不久后朋友告诉我应该学习C++,我问:C和C++有什么不同?于是朋友告诉我:C是面向过程的语言,C++是面向对象的语言,C++比C最不同的地方就是C++有类(Class),C没有……
这就是我对面向过程和面向对象的第一印象,后来又学习了一些面向对象的知识,似乎将很多东西变成类,类里面有特性和操作,就是面向对象。然而工作后发现完全不是那么回事,面向对象真的是只可意会难以言传啊。下面说说我对面向过程和面向对象的理解,希望对你有帮助。
很多年前的程序只有一行行的代码,后来出现代码难以组织、不好阅读、重复代码多等问题。于是“发明”了方法,将一段代码放到方法里面,实现一定的功能,供别的地方调用。方法的“发明”是编程史上的一大进步,其实方法就是一定程度上的封装,只要调用者给出符合要求的输入,方法就会返回合适的输出,调用者完全不用理会方法的具体实现,而方法里面又可以调用方法。随着后来的发展,出现了结构化编程,将编程的艺术更推进一步。
无论是方法还是结构化编程,都是我们提高编程技术以更好地解决复杂的、高难度的问题的一种手段而已。但后来发现问题越来越复杂,结构化编程开始招架不住了,于是有人提出面向对象编程。面向对象编码是一种基于类的编程方法,每一个类有特定的作用,类中有属性和方法,一条条语句只存在于属性或方法中。用面向对象的思路来求解问题,就是要设计出能解决问题的一个或多个类,通过类之间的相互操作和协作来解决问题。类是对代码的进一步封装,比方法对代码的封装要进一大步,类的出现要求我们编程的思想更进一步。

对于面向过程和面向对象编程存在这样的一些误区:
1) 面向对象比面向过程更高级,无需注重结构化编程和编程基本功。
前面提到的编码发展史,简单说就是以下几个阶段: