第一章 什么是对象之抽象

132 阅读4分钟

原文: 所有编程语言都提供抽象机制。从某种程度上来说,问题的复杂度直接取决于抽象 的类型和质量。

我们在日常的工作中会遇到各种各样的问题,而问题有多复杂,取决于抽象的类型和质量,那么问题来了,什么是抽象的类型和质量?

类型一般指的是抽象的内容,也就是我们是把什么进行了抽象,早期的编程语言一般是把计算机结构本身进行了抽象比如:汇编语言是对底层机器进行了轻微的抽象,C语言是是对汇编语言的抽象,但问题在于这些语言只是对机器本身进行了抽像,所以,在用机器去解决实际问题(编码)的过程中,工作起来十分困难

质量指的是把内容抽象到了什么程度,汇编语言只是对机器底层做了轻微的抽象,所以基本上等同于一比一描述了机器结构,C语言是抽象了汇编语言,这也就是这两门语言为什么难学,因为基本等同于你要去理解机器的每一个细节,而现如今的高级语言(如Java Python是对c语言的抽象)可以让人们不再特别关心机器底层是怎么运行的细节,所以用来解决问题时会更得心应手

原文: 程序员必须要在机器模型(“解决方案空间”)和实际解决的问题模型(“问题空间”) 之间建立起一种关联。

所以怎么用手里的编程语言去描述并解决现实问题,是一件非常掉头发的事情,OOP(面向对象编程)应运而生。

OOP主要有以下几个优势

  1. 程序员可以将实际问题中的元素在机器中表示为“对象”
  2. 可以添加新的对象类型,用来适应特定的问题,因此这种表示方式具有很大的普遍性

因为这几个优势,如果一个程序员对OOP理解到位,那么代码的表达就可以近乎于对问题本身的描述,也就是说程序员可以根据问题去编写代码,而不是较劲脑汁的用机器的方式去描述问题

面向对象设计方法有下面几个特征:

  1. 万物皆对象。你可以将对象想象成一种特殊的变量。它存储数据,但可 以在你对其 “发出请求” 时执行本身的操作。理论上讲,你总是可以从 要解决的问题身上抽象出概念性的组件,然后在程序中将其表示为一 个对象。
  2. 程序是一组对象,通过消息传递来告知彼此该做什么。要请求调用一个 对象的方法,你需要向该对象发送消息。
  3. 每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现 有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在程 序中却可达到任意高的复杂程度。
  4. 每个对象都有一种类型。根据语法,每个对象都是某个 “类” 的一个 “实 例”。其中,“类”(Class)是 “类型”(Type)的同义词。一个类最重要 的特征就是 “能将什么消息发给它?”。
  5. 同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法, 大家不久便能理解。由于类型为 “圆”(Circle)的一个对象也属于类型 为 “形状”(Shape)的一个对象,所以一个圆完全能接收发送给 “形状” 的消息。这意味着可让程序代码统一指挥 “形状”,令其自动控制所有 符合 “形状” 描述的对象,其中自然包括 “圆”。这一特性称为对象的 “可替换性”,是 OOP 最重要的概念之一。

对象可以描述为:

原文:一个对象具有自己的状态,行为和标识。这意味着对象有自己的内部数据 (提供状态)、方法 (产生行为),并彼此区分(每个对象在内存中都有唯一的地址)。

结合上面所说的,在面向对象设计思想中,抽象就是将实际问题合理的拆解为元素,然后将元素以代码进行表达,元素在代码中的表达叫做对象,程序就是N多个对象的有机结合