
编写程序:面向对象还是结构化?
在编写课程作业程序时,我们经常需要建议客户,程序应该用面向对象还是结构化的方式编写。当然,这种情况下最重要的是,在订购程序所对应的课程里,您被教授的是怎样的编程方式……因此,要为您编写的课程作业程序该怎样写,真正应该告诉我们的是您自己。由于这一点非常重要,我们建议您务必确认,因为在这一点上作出错误的决定,可能导致这门课不及格。
不过,如果老师在这一点上给学生留有自由,那么坦率地说,答案可以归结为一个词:面向对象。但我们先从定义说起:
结构化编程是过程式编程概念的延伸,是一种编写程序的方法论,它基于将代码按层次划分为若干模块,模块之间通过严格定义的接口相互通信。数据、过程和函数之间没有直接联系,指令按顺序执行。结构化编程的基础是条件语句和循环,而各种跳转则被视为不良习惯,是线性编程的遗留物,被(理所当然地)认为会破坏源代码的可读性,增加分析难度。
面向对象编程则是一种编写计算机程序的方法论,它用对象来定义程序,这些对象把程序的数据和行为(定义为过程和函数,在面向对象编程中称为方法)结合在一起。程序被表达为这些对象之和,对象之间相互通信,以完成程序被赋予的任务。这使得程序员团队可以高效地编写大型项目,用负责软件各个部分、相互协作的对象来组装它们。
客观的定义就说到这里,现在轮到(无疑完全不客观的)观点了。在我看来,尽管面向对象编程带有一定的规范和限制,常常让编程艺术的年轻爱好者望而却步,但花一点时间了解面向对象编程的原则,会带来不可否认的好处。
面向对象的数据处理方式,以及整个程序员团队以面向对象方式编写程序所带来的可能性,似乎极其重要。在现实中,这些人往往彼此都不认识,却能共同构建庞大的应用,他们之间的沟通仅靠类的方法接口的说明,完全不需要查看内部。面向对象编程的另一个优点是代码清晰易读:看一眼定义文件就够了,一会儿我们就知道某个类或方法负责什么。
结构化编程的情况则大不相同。首先,在较大的应用中,极难做到代码可读。其次,代码一旦写成就不适合复用,因为要把它改成适应其他用途,通常需要在许多不同的地方做大量修改。因此,用结构化方式写成的程序不太可能被重复使用,程序员通常从头写一个新类所需的时间,比无休止地折腾旧代码还要少。
尽管这些事实显而易见,我们的高校教授的仍然多是结构化编程,而学生们被要求提交的,也是以这种方式编写的课程作业程序。当然,这不适用于计算机专业的课程,那里面向对象编程已是标准,但在与计算机没有直接关系的课程中,它仍然很少见。
在结束这篇文章之际,我希望我写下的这几句话能说服您去学习面向对象编程。我并不奢望已穷尽这个话题:我只触及了其中的一些问题,只描述了面向对象编程优点的一小部分。还有更多优点,您会在处理具体任务时发现(尤其是需要团队协作的时候)。