一、对象的综述
面向对象编程(OOP)具有多方面的吸引力。对管理人员,它实现了更快和更廉价的开发与维护过程。对分析与设计人员,建模处理变得更加简单,能生成清晰、易于维护的设计方案。对程序员,对象模型显得如此高雅和浅显。此外,面向对象工具以及库的巨大威力使编程成为一项更使人愉悦的任务。每个人都可从中获益,至少表面如此。
所有编程语言的最终目的都是解决企业又或者人在现实生活中所遇到的问题,最初我们的程序可能长这样“11111100001”,相信大家都不会陌生,只是大家没这么子去敲过代码。再后来出现了汇编语言,汇编语言便是对基础机器语言(二进制)的少量抽象,再到后来出现了许多“命令式”语言(如FORTRAN、BASIC和C),这些语言便是对汇编语言的一种抽象。这些语言都有了长足的进步,但它们的抽象原理依然要求我们着重考虑计算机的结构,而考虑的不是要解决的问题的本身结构。在机器与实际要解决的问题之间,程序员必须建立起一种联系,这个过程要求人们付出较大的精力,使得程序代码很难编写,写出来的代码又很难理解,要花较大的代价进行维护。
面向对象的程序便很好的解决了这一问题,程序员可利用程序来表达实际问题中的元素,我们便将这些元素在程序中的表示称为“对象”。我们可以根据现实中的问题来灵活配置对象,以便与特定的问题配合。与之前的语言相比,这无疑是一种更加灵活、更加强大的语言抽象。总之OOP允许我们根据问题来描述问题,而不是根据问题在机器中的方案。与现实世界中的“对象”或者“物体”相比,编程对象与它们也存在共通的地方:它们都有自己的特征和行为。
二、什么是对象
通过上面的文字或许大家已经有些明白什么是对象了吧?而上面的文字也是对对象的一种比较深入的理解,而我们最常见的理解方式无非是:对象(object)是任何看得见、摸得着、感觉得到,可以获得的东西,有自己的标识的任何东西。对象是某一类的事物的具体个例。比如这辆汽车、这个人、这间房子、这张桌子、这株植物、这张支票、这件雨衣,概括来说就是:万物皆对象。
在这里给大家摘录一些句子,希望看过的人能够花时间去思考一下:
①“对象一般以域的形式包含数据,通常称作属性;以程序的形式包含代码,通常称作方法”。
②“对象在域中储存自身状态并通过方法暴露自身行为”。
③“每个对象就如一个小型电脑——它有状态,并且它提供操作,你可以调用执行”。
④“一个类包含了存放数值的数据域和操作数值的的方法”。
⑤“一个对象就是储存某些类型的值的内存空间”。
⑥“一个对象包含一些私有内存空间和一些操作”。
三、面向对象程序设计方法
(1)所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。理论上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象。
(2)程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个对象“发送一条消息”。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程或函数。
(3)每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。
(4)每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。一个类最重要的特征就是“能将什么消息发给它?”。
(5)同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法。由于类型为“圆”(Circle)的一个对象也属于类型为“形状”(Shape)的一个对象,所以一个圆完全能接收形状消息。这意味着可让程序代码统一指挥“形状”,令其自动控制所有符合“形状”描述的对象,其中自然包括“圆”。这一特性称为对象的“可替换性”,是OOP 最重要的概念之一。
(6)一些语言设计者认为面向对象的程序设计本身并不足以方便解决所有形式的程序问题,提倡将不同的方法组合成“多形程序设计语言”。
四、对象的使用
下面让我们以电灯泡为例: