Thinking in C++ (1-1)

来源:互联网 发布:携程抢票软件下载 编辑:程序博客网 时间:2024/05/22 03:31

今天考了专业英语,睡不着也不想学习!翻一段Thinking in C++玩一玩

 1: 初识对象


计算机革命的起源来自一台机器。而我们的编程语言的起源看上去与那台机器很相像。


但是计算机并不是并不像我们常见的那些机器那样,他们是延伸人类思维的工具(就像斯蒂夫•乔博常喜欢说的“思维的自行车”),同时还是一种不同的表达媒体。于是,计算机开始越来越不像那些机器,而像我们思维的一部分。 以及其他的诸如写作,绘画,雕刻,卡通片,和电影制作等表达媒体。面向对象编程就是将计算机作为一种表达媒这一运动的一部分。

这一章将会为你介绍面向对象编程(object-oriented programming (OOP))的基本概念,包括对OOP开发方法的概观。这一章中,乃至整本书,假设你已经有一门的过程编程语言的经验,但并不是说必须得是C。如果你觉得在阅读这本书前你需要更多的C语言的语法和编程经验的话,你可以学习本书的课程CD ROM:“Thinking in C: Foundations for C++ and Java”,同时你也可以在 www.BruceEckel.com订购到。

这一章的主要内容是背景知识和增补材料,许多朋友可能会对毫无任何大体印象而唐突的开始学习面向对象编程感到不适应 。像这样,本章所介绍的大量概念可以给你一个对OOP的具体的概观。 然而,也有许多朋友只有在首先了解一定的实现方法只有才可能了解OOP的全貌,如果手中没有一定的代码,他们可能会有陷入泥沼的感觉 。如果你属于后边着一群体,并且很渴望得到这门语言的细节,你可以放心大胆的跳过这一章——在这里并不会阻碍你写程序或学习语言。但是,你仍需要回到这里补充一些知识,这样才能更深入的了解对象的重要性以及它们的设计方法。
 

抽象的过程

 
所有的编程语言都提供抽象机制。可以这样说,抽象的种类和质量直接决定着你所能够解决问题的复杂度。“种类”我是指“你正在抽象什么东西?”汇编语言是对机器语言的很小规模的抽象。而后出现的很多所谓“命令式”语言(比如Fortran,BASIC,C)是对汇编语言的抽象。这些语言在汇编语言的基础上有了长足的进步,但是它们的主要的抽象过程仍然需要你考虑计算机的结构而不是你所尝试解决的问题的结构。编程人员必须在机器模型(位于“解空间”中,就是你对问题建模的地方,比如说计算机)和正在解决的问题的模型(位于“问题空间”,就是问题所在的地方)之间建立起联系。进行这种映射是费力的,同时这一关系本身就不是编程语言所能解决的问题,使得程序难以编写,维护费用昂贵,它也是“编程方法”工业产生的一个侧面因素。
 
另一种对机器的建模的方法是对你所要解决的问题建模。早期的语言比如LISP和APL选择了一种特殊的看待世界的方法(“所有的问题最终都可化为表”或者“所有的问题都是算法”)。PROLOG把所有问题转变成决策链。此时还产生了约束编程语言和独特的采用图形符号编程的语言(后者的限制性过强已被证实)。这些方案对于它们当初被设计时所要解决的特定问题有着良好的效果,但在其它领域,它们就变得力不从心。

面向对象的方案通过为程序员提供描述问题空间中的元素的工具,而获得了长足的进步。这种描述极为通用,使得程序员并不局限在某一特定类型或问题的领域,我们将问题空间中的元素以及在解空间中对他们的描述称作“对象”。(当然,你也许需要其它的没有解空间的对象)这种思想是:程序通过添加新种类的对象,以实现对外来问题的自适应。所以当你阅读描述这一解决方案的代码时,你也阅读了对这一问题的描述。这是一个前所未有的更加灵活和强大的语言抽象。像这样,OOP允许你根据某一问题来描述问题,而不是根据运行解的计算机。但它仍然与计算机存在着联系。每个对象看上去或多或少都有点像一台小的计算机;它拥有状态,和你可以调用的操作。然而,它们与现实世界中的对象并不存在太多不同,因为它们都有特征和行为。

一些语言设计者断言面向对象编程本身并不能完整的解决所有的编程问题,同时,他们呼吁将不同的方式集成到多范型语言中。

Smalltalk是第一个成功的面向对象编程语言,它是C++所基于的语言之一,阿兰•卡伊总结出Smalltalk的五个基本特征,这些特征描述了一个纯粹的面向对象的编程观念:

1. 一切皆对象。把对象视为神奇的变量;它可以存储数据,而且你可以对该对象“提出请求”,要求它对它自己做出操作。从理论上讲,你可以使用你要解决的问题的任一组成部分(小狗,小屋,服务,等等),同时在你的程序中描述为一个对象

2. 一个程序是几个对象的集合,它们通过发送消息来告诉对方该干什么。你可以通过“发送一个消息”来请求一个对象。更具体地说,你可以把消息想成是请求调用一个特定对象中的函数。

3. 每个对象都有为其它对象所建立的存储空间。也就是说,你可以通过使用一个包含有现有对象的包来创建了一个新的对象种类。像这样,你可以构建复杂的体系,同时隐藏在对象的简单性的背后。

4. 每个对象都有一个类型(type)。借用一个常用的说法,每个对象是一个类(class)的实例(instance),“类”是“类型”的同义词。类的最重要的特征就是“你可以发送什么消息给它?”。

5. 所有的特定类型的对象可以收到同样的消息。这着实是一句含意丰富的话,你在以后将会看出。因为类型“圆”的对象同样也是类型“形状”的对象,一个圆肯定能够接受形状的消息。这意味着你编写了与形状交互的代码,这些代码可以自动的解决与形状的描述相吻合的一切事物。这一可替代性(substitutability)是OOP最强大的概念之一。

============
 PostScript
============
 
困了该睡了,我有两个体会:
一,翻书是件很艰苦,枯燥,而又要求很高的事,我翻得很差呀,很多出八哥的地方。就这两千来字就把我弄得头晕脑胀的,更别说人家大家们翻整本整本的书的了,向他们致敬!
二,如果学过英语的话,还是读原版的书吧,不是崇洋媚外,外国教材思路清晰缜密,这是很多国内教材所没有做到的,就是大家也不可否认。不管译者怎样努力,译本还是一定会有很多的意思缺失的。
 
路漫漫其修远兮,吾将上下而求索

My way ahead is a long long one oh,

I will seek my Beauty high and low.

原创粉丝点击