品味Thinking In C++(二)

来源:互联网 发布:免费 网盘php源码 编辑:程序博客网 时间:2024/05/01 23:03

第一章 对象导言

 

 

 

 

 

计算机革命起源于一台机器。因此,程序设计语言的起源看上去也起源于那台机器。

 

 

 

 

 

―― Bruce Eckel

 

 

 

 

 

Bruce Eckel的话似乎是正确的。的确,程序设计语言从第一台计算机所用的最原始的拔插N多插头开始,逐步发展到了对底层机器进行抽象描述的汇编语言,“命令式”的编程语言(如C,BASIC,Fortran),描述逻辑模型的LISPAPL语言,到后来对软件开发方式影响颇为深远的OOPSmalltalk,C++,JAVA)语言,都没有离开一个最为宗旨的意图:让机器解决问题。程序设计语言也就充当了人与计算机交流的纽带。当然,设计程序必不可少的需要设计方法的支持,程序设计方法也和计算机语言的发展是一致的。当一个时代的语言有共同性质的时候,也决定了这个时代的程序设计方式。纵观程序设计语言的发展历史,我们很容易发现设计方法由“过程序”――“面向对象式”。同时,也能够深刻的体会到这两种设计方式给世界的软件业带来的影响。

 

 

 

 

 

B.E.在本章简单的阐述了面向对象设计语言中的一些共同的特性,以及面向对象程序设计方法。Alan KaySmalltalk的语言设计思想的模型来指出纯的面向对象语言的几个特性:

 

 

 

 

 

1)万物皆对象

 

 

 

 

 

2)程序就是一组对象,对象之间通过发送消息互相通信

 

 

 

 

 

3)每一个对象都有它自己的由其它对象构成的存储区

 

 

 

 

 

4)每个对象都有一个类型

 

 

 

 

 

5)一个特定类型的所有对象都能接受相同的消息

 

 

 

 

 

很显然,这几点虽然是Smalltalk的设计宗旨,但它体现了面向对象的设计思想,也说明面向对象的设计是系统设计者从事物的角度去思考问题,而不是从操作或者使用功能的角度来思考问题。这种思考方式在某种程度上讲是一种系统的设计方式,而且如果能利用这种方式,并且应用到软件工程中去,可以很好的节省系统开发所需要的时间,降低系统的复杂性,最终减少开发所需要的开发成本和维护成本。

 

 

 

 

 

 

 

 

 

 

以面向对象的策略来开发系统:

 

 

 

 

 

和“过程型设计(procedural design)不同,OOP开发需要经历几个阶段,当然,这些阶段中的某些部分不是OOP开发中所特有的,它也包括了很多非常好的系统开发过程,可以说,这些过程是项目开发中必须的。

 

 

 

 

 

l      进行项目的需求分析,明确在项目开发过程中所要经历的哪些步骤,并对项目开发中可能会遇到的问题进行前瞻式思考,对项目开发时间进行客观的分配,简单说,必须在动手编写代码之前拟定一份周密而详细的计划。

 

 

 

 

 

l      让开发人员了解实现的系统最终是需要解决什么问题。很显然,这个过程可以只需要系统分析师和管理决策层清楚,让开发人员参与其中,是为了让他们对系统有个清晰的认识,可以让开发人员更清楚自己所做的工作,这对开发效率的提高是大有裨益的。

 

 

 

 

 

l      建立对象

 

 

 

 

 

对这个阶段,我们必须按照对象开发方式的几个步骤来进行

 

 

 

 

 

1.     面向对象的分析

 

 

 

 

 

以项目的需求作为基本的问题模型,分析,识别系统中的对象模型,描述它们之间的交互方式,利用CRCClass-Responsibility-Collaboration CRC)卡片来对即将使用的类进行描述,使之能够反映实际待解决问题中相关数据和操作。

 

 

 

 

 

2.     面向对象的设计

 

 

 

 

 

建立软件系统中面向对象的模型,在建模过程中,我们要充分考到对象的特性。B.E.提到的几个过程如下:

 

 

 

 

 

对象发现

 

 

 

 

 

对象装配

 

 

 

 

 

系统构造

 

 

 

 

 

系统扩充

 

 

 

 

 

对象重用

我将这几个过程简单的理解为:存在,开发,可持续开发,可继承式开发。当然,这些只要了解OOP语言的特性就可以得出的结论。在OOP 语言设计过程中,充分考虑到了这点。所以,如果能够真正的深入了解OOP语言提供的类,我们不难发现,语言本身也遵循着这中开发方式。

 

很多东西都需要我们自己考虑,自己实践,说白了,要做项目,要编码。只有在这个过程中,才能理解C++中的精髓,理解继承,多态。慢慢的,才会真正有软件工程的概念。

 

有很多人都想精通C++(包括我),C++的确太复杂了,要做到精通,很难。当然也比较简单,最需要的就是有耐性。候捷说过一句话,让我感想颇深――“勿在浮沙筑高台”。是啊,简简单单的一句话,道出了浮躁的后患:在浮沙上筑高台太危险。所以,更重要的,得先学会做一个不浮躁的人,这样,才会有条件不断的积累到深厚的文化和技术底蕴,否则,可能只能满足于编写简单代码的三角猫的功夫。

 

我不希望是这样的结局!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击