现在的位置: 首页 > 综合 > 正文

《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.1 面向过程与面向对象

2014年04月05日 ⁄ 综合 ⁄ 共 1990字 ⁄ 字号 评论关闭

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

3.1 面向过程与面向对象

 

本小节的内容涉及到编程方面的知识,如果你有相关经验,请认真阅读本小节,本小节目的是澄清开发人员的一些面向过程和面向对象的理解误区。如果你没有编程经验或者对此不感兴趣,可忽略本小节直接阅读下一小节,忽略本小节并不影响你对后文的理解。

 

上世纪90年代初,当我读高中的时候首次接触电脑,并且学习了第一门编程语言Basic。当时不知道什么是面向过程,也不知道何为面向对象,只知道不断地学习Basic语言的算法,感受编程的乐趣。当时学习的Basic语言,现在看来是很老土的面向过程的语言。

 

后来学习了C语言,不久后朋友告诉我应该学习C++,我问:C和C++有什么不同?于是朋友告诉我:C是面向过程的语言,C++是面向对象的语言,C++比C最不同的地方就是C++有类(Class),C没有……

 

这就是我对面向过程和面向对象的第一印象,后来又学习了一些面向对象的知识,似乎将很多东西变成类,类里面有特性和操作,就是面向对象。然而工作后发现完全不是那么回事,面向对象真的是只可意会难以言传啊。下面说说我对面向过程和面向对象的理解,希望对你有帮助。

 

多年前的程序只有一行行的代码,后来出现代码难以组织、不好阅读、重复代码多等问题。于是“发明”了方法,将一段代码放到方法里面,实现一定的功能,供别的地方调用。方法的“发明”是编程史上的一大进步,其实方法就是一定程度上的封装,只要调用者给出符合要求的输入,方法就会返回合适的输出,调用者完全不用理会方法的具体实现,而方法里面又可以调用方法。随着后来的发展,出现了结构化编程,将编程的艺术更推进一步。

 

无论是方法还是结构化编程,都是我们提高编程技术以更好地解决复杂的、高难度的问题的一种手段而已。但后来发现问题越来越复杂,结构化编程开始招架不住了,于是有人提出面向对象编程。面向对象编码是一种基于类的编程方法,每一个类有特定的作用,类中有属性和方法,一条条语句只存在于属性或方法中。用面向对象的思路来求解问题,就是要设计出能解决问题的一个或多个类,通过类之间的相互操作和协作来解决问题。类是对代码的进一步封装,比方法对代码的封装要进一大步,类的出现要求我们编程的思想更进一步。

 

对于面向过程和面向对象编程存在这样的一些误区:

 

1) 面向对象比面向过程更高级,无需注重结构化编程和编程基本功。

前面提到的编码发展史,简单说就是以下几个阶段:
 一行行的代码
 用方法组织起来的代码
 结构化代码
 面向对象的代码(用类来组织的代码)

看上去似乎后面的可以取代前面的,特别是到了面向对象编程阶段,似乎人人都可以喊自己是面向对象的,真正能写出好代码的人并不多。其实编码基本功相当重要,结构化编程也相当重要,如果这些基础不行,面向对象只能喊喊而已。我在以前公司招聘程序员,编程基本功是必考的。

 

2) 面向对象编程就是将代码放进一个个类而已。

我最开始对面向对象编程的看法基本上就是这样,后来用VB编程还是未能真正体会面向对象编程,直到后来使用真正面向对象的语言C#以及学习了UML和设计模式,才开始真正体会。如何设计、提炼、规划类,是很讲技巧和功力的事情,面向对象一点都不容易。

 

3) 将业务概念直接转变为类,赋予合适的属性和操作,就可以解决问题。

需求阶段的建模与设计阶段的建模是很不一样的,需求建模是对业务和需求的提炼,优秀的需求建模是设计建模的良好开始,但优秀的设计建模还需要考虑更多的设计上的事情,并不是简单地将业务模型直接转变化设计模型就可以解决问题的。

 

本书不会具体介绍如何面向对象地编程,而是如何面向对象地进行需求分析,我们将会借鉴面向对象编程的思想用于需求分析工作中。有开发经验的人士从事需求分析工作时,受面向过程和面向对象编程的思维习惯影响,容易处于“技术实现”的角度来分析问题。这需要一个转变过程,我强烈建议你先忘掉自己的开发经历。本书接下来的内容,将会通过一个又一个的具体案例和练习,让你体会面向对象分析需求的方法。当完成这个转变时,你会发现编程思想和分析需求的思想有共通之处但又不太一样,你在编程时养成的严谨、全面、深入的分析方法会让你在需求分析工作中受益不浅。

请看下一节……

作者:张传波

创新工场创业课堂讲师

华为某团队研发管理高级顾问

《火球——UML大战需求分析》作者

www.umlonline.org 创办人

抱歉!评论已关闭.