《OOD启思录》—第1章1.1节革命家、改革家与面向对象范型

简介:

本节书摘来自异步社区《OOD启思录》一书中的第1章1.1节革命家、改革家与面向对象范型,作者【美】Arthur J.Riel,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第1章 面向对象编程的动因
OOD启思录
1.1 革命家、改革家与面向对象范型
在学习面向对象范型以及相关知识的过程中,你首先必须知道我们社区中的很多对立观点。每组对立观点意味着两个或者多个阵营,他们对自己的观点一般都具有宗教般的热情。最重要的对立观点之一是革命家与改革家之争。革命家相信,有一群开发者某一天在凌晨3点醒来,并发现以前我们一直都在用错误的方式开发软件。他们相信,他们找到了解决软件危机的方法,并且把这种方法叫做“面向对象编程”。或许读者已经猜到,我是属于改革家阵营的。

改革家认为,面向对象编程不是软件开发领域的革命,而是使得开发者远离底层机器细节的持久进步中顺其自然的一步。软件危机的来源并不是我们在用错误的方法开发软件,而是因为我们的编程范型已经不足以应付我们所需解决问题的日益增加的复杂性了。在处于只有8条指令和1KB内存(而且这1KB中90%还被操作系统占据了)的年代,用八进制或者十六进制操作码来写程序是天经地义的。我使用这种编程方法毫无障碍,因为只要记8条指令,要写的代码也不过30行。而当硬件变得更加强健,我开始遇到需要64KB内存的问题,这样一来记忆操作码就变得复杂,超出了我的掌控能力。于是,我开始使用汇编语言助记符。助记符范型非常完美,直到有一天我的问题再次超越它能容忍的复杂性上限。于是我改用高级语言来编程。高级语言的每条指令都能替换很多条汇编语言助记符,这样我就能在更高层次上思考。除了减少语言复杂性,我也在寻找思考问题的更好方式。我不是把一串串的指令塞进小的函数再把这些函数拼成程序,而是用一种结构化的方法来把问题分割成小的子问题,每个子问题的复杂性都在可管理的范围之内。

目前,软件开发的发展又到达了临界点。对于今天的硬件所能处理的问题的复杂性,结构化的、自顶向下的设计方法已经不足以应付了。我们需要找到一种软件开发范型,它要可以应付增加的复杂性。几年以前,菜单驱动的系统还广为使用;今天的软件系统已经必须具有图形用户界面,否则在市场上会乏人问津。在未来的几年,消费者会期望可以与他们对话并显示动态视频的多媒体应用程序。作为一种应付更复杂的应用程序的方法,面向对象范型为什么会引起那么多关注呢?

最主要的原因之一是,迁移到面向对象范型可以让开发者以更接近现实世界的模型来开发复杂的应用程序。在日常生活中,什么是大家公认的特别复杂的东西呢?我们发现,很多以分布的方式彼此交互的机器构成了复杂的系统。并没有中央控制机制来要求所有成员都汇报工作、听取命令、完成命令并回来等着分配更多的工作。结构化方法是按照中央控制的思路设计的。而分布构架的优点在于,任何问题都只会影响应用软件的一个部分。在好的设计中,这个部分和其他部分应该是松耦合的。这样,如果系统的一个部分出了问题,或者我们想扩展该部分,改变所带来的影响就被局限在那个部分,而不会影响全局。既然分布的方式让现实世界接受了这一切复杂性的存在,并且这些复杂的事物都得以顺利运作,那么为什么我们不能以同样方式来应对软件问题的复杂性呢?

对象技术的初学者可能会遇到这样的建议:“当你成为一个真正的面向对象开发者之前,你需要承受一次范型迁移(paradigm shift)。”虽然这似乎有些耸人听闻,但“范型迁移”的说法有其内在真理。软件开发者需要用分布的方式来思考,而不再遵照传统结构化方法的集中控制方式。因为成功的现实世界实体是以分布的方式交互的。我认为,这一范型迁移不仅有其学习曲线,还有其遗忘曲线。你需要忘记你以前学到的面向动作(action-oriented)型软件开发所依赖的集中控制的方式。

关于面向对象编程,无论你支持革命家的观点还是改革家的观点,你学习面向对象范型会遇到的第一件烦恼事就是充斥该领域的时髦词语。例如,我们在本书中要讨论的一个相当简单的概念叫做“多态”(polymorphism),一个具有希腊语词根的单词隐藏了一个简单的概念。而且,这个概念还有很多同义词,比如动态绑定(dynamic binding)、运行时类型识别(runtime-type discrimination[1])。而且还有很多用于修饰这些单词的形容词,比如“纯的”(pure)多态、“真正的”(true)多态。面对这些,你很容易坠入迷惘之网。在新生领域,时髦词语是一种流行病,因为待到技术逐渐成熟至能够用标准语汇来准确表达该技术的概念,还需要相当长的时间。在面向对象领域中,这个问题更为严重,因为计算机科学的很多不同子领域不约而同地在向对象范型迁移,而每个子领域都有它们自己的一套术语。可能一个领域的人很高兴地谈论包含关系和继承关系,另一个领域的人已经把这些概念分别称作“has-a”和“a-kind-of”关系了。我估计,在不久的将来,时髦词语的问题还会常伴我们左右,但等到这个领域成熟了,这个问题也就不复存在了。在这个过渡时期中,我将避免在本书中使用同义词,除非我需要向用户强调一些东西。

相关文章
|
3月前
|
Serverless 对象存储 C++
第十三章:C++面向对象编程思想详解
第十三章:C++面向对象编程思想详解
34 0
|
9月前
|
存储 人工智能 测试技术
软工视频——面向对象技术(OOA、OOD、OOP、OOT)
面向对象的技术是当前计算机界所关心的重点,,面向对象的概念和应用已经扩展到很宽的范围,如面向对象的数据库系统、面向对象的系统分析与设计、CAD 技术、人工智能以及其他广泛的应用范围。
|
10月前
|
存储 设计模式 安全
【Java设计模式 面向对象设计思想】七 面向对象分析、面向对象设计和面向对象编程
【Java设计模式 面向对象设计思想】七 面向对象分析、面向对象设计和面向对象编程
120 0
|
11月前
|
关系型数据库
面向对象的设计(OOD)原则了解一下
面向对象的设计(OOD)原则了解一下
125 0
|
Oracle Java 关系型数据库
初识面向对象第三特征-多态 | 带你学《Java面向对象编程》之四十七
本节主要介绍了面向对象的第三大特征-多态性,并简要说明了实现方法多态性的实现模式,介绍了对象多态性这个概念。
面向对象的特征之三:多态
1、多态性,可以理解为一个事物的多种表现形态        1> 方法的多态性:重载与重写        2>子类对象的多态性:父子类对象的转换                        ①、父类的引用指向子类对象(即向上转型),当调用方法时,实际上执行的是子类重写父类已有的方法。
1044 0
|
存储 iOS开发 测试技术
iOS 开发之 OOA (面向对象分析) & OOD (面向对象设计)& OOP (面向对象编程)
OOA OOA 基本概念 OOA 全称 Object-Oriented Analysis 面向对象分析 指的是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。
4502 0