传统的结构程序设计采取的方式是先考虑求解问题的算法,然后再寻找合适的数据结构。即传统的结构程序是:程序=算法+数据结构。算法被认为是描述程序的逻辑实现。提出这个公式的人是瑞士计算机科学家,也是Pascal语言的设计者Niklaus Wirth。他认为算法是第一位的,也就是说在做程序时,首先要确定是怎么样对数据进行操纵,然后再决定使用什么样的数据结构。所以的传统的结构程序设计中程序是通过算法加上数据结构来实现的。
面向对象的软件开发思想认为程序是由对象组成的,而所有的这些程序代码又都是是放在类中的。面向对象软件开发的首要任务是找到解决该问题的对象,寻找对象的一个比较简单的方法就是在分析过程中找出现的名词。
对象之间通过方法改变自身的状态并且可以发送消息来进行相互通信,因此,在找到对象之后,下一步就是查找动词,找到对象应该负责完成什么样的任务。最后就可以把对象的行为(程序设计中的方法)和状态(程序设计中的变量)封闭到相应的类中;
(有点类似于代数的设未知数,建立方程求解);
这样,软件开发人员可以根据自己的需要调用相关对象的变量和方法,而不必关心这个对象和方法是如何实现的。所以面向对象的程序设计中程序是通过对象和消息的传递来实现的。
实际上,在面向对象的软件开发过程中,一个对象并不是承担的任务越多越好。如果创建一个对象含有复杂的逻辑和数据结构,那么势必会给代码的编写和程序的调试带来很多问题。所以在创建对象的时候,要尽量创建一个可以执行较小任务功能的对象, 这样更有利于代码的编写和程序的调试;
与传统的结构程序设计关注算法不同,在面向对象的思想中,程序员更关心的是使用这个对象的接口来完成所需要完成的任务,对对象内部的具体实现并不是十分关心。这就像使用计算机的时候,关心的是CPU、硬盘、电源这些是不是符合自己的要求,至于它们内部到底是怎么实现的并不是计算机使用者所关心的。
传统的过程化程序设计,必须从顶部的main函数开始编写程序。在设计面向对象的系统时没有所谓的顶部。而是从设计类开始,然后再往每个类中添加方法。
识别类的简单规则是在分析问题的过程中寻找名词,而方法对应着动词。
程序开发的方法
1 渐进式程序开发incremental development
1.1 从一个可以工作的程序的主要部分开始,然后小增量式修改程序,这样可以很快定位错误;
1.2 使用临时变量存储中间值,通过打印来检查这些中间值;
1.3 一旦程序能够工作,就可以删除这些“施工架”。然后将多条语句合并为复合语句;
2 封闭与泛化
开发大型程序的一种方法是先开发一次性的临时程序,不断地改进。这样不会让人望而生畏,程序在开发中逐渐进步;
我们在写大型程序时,一般先设计最顶层、最抽象的类和方法,然后逐步实现细节化的类和方法。
凡是能提取一定度量数据,并能通过某种途径对度量数据实施操作的客观存在都可以构成一个对象,且用属性来描述对象的状态,使用方法和事件来处理对象的各种行为。