面向对象编程
面向对象编程踩上了进化的步伐,增强了结构化编程,实现了数据与动作的融合:数据层和逻#辑层现在由一个可用以创建这些对象的简单抽象层来描述。现实世界中的问题和实体完全暴露了本#质,从中提供的一种抽象,可以用来进行相似编码,或者编入能与系统中对象进行交互的对象中。#类提供了这样一些对象的定义,实例即是这些定义的实现。
二者对面向对象设计(object-oriented#design,OOD)来说都是重要的,OOD 仅意味来创建你采用面向对象方式架构来创建系统。##
1.1 面向对象设计与面向对象编程的关系#面向对象设计(OOD)不会特别要求面向对象编程语言。事实上,OOD 可以由纯结构化语言来实#现,比如C,但如果想要构造具备对象性质和特点的数据类型,就需要在程序上作更多的努力。当一#门语言内建OO 特性,OO 编程开发就会更加方便高效。##另一方面,一门面向对象的语言不一定会强制你写OO 方面的程序。例如C++可以被认为“更好#的C”;而Java,则要求万物皆类,此外还规定,一个源文件对应一个类定义。然而,在Python 中,#类和OOP 都不是日常编程所必需的。尽管它从一开始设计就是面向对象的,并且结构上支持OOP,但#Python 没有限定或要求你在你的应用中写OO 的代码。OOP 是一门强大的工具,不管你是准备进入,#学习,过渡,或是转向OOP,都可以任意支配。
1.2 现实世界中的问题#考虑用OOD 来工作的一个最重要的原因,在于它直接提供建模和解决现实世界问题和情形的途#径。比如,让你来试着模拟一台汽车维修店,可以让你停车进行维修。我们需要建两个一般实体:#处在一个“系统”中并与其交互的人类,和一个修理店,它定义了物理位置,用于人类活动。因为#前者有更多不同的类型,我将首先对它进行描述,然后描述后者。在此类活动中,一个名为Person#的类被创建以用来表示所有的人。Person 的实例可以包括消费者(Customer),技工(Mechanic),还#可能是出纳员(Cashier)。这些实例具有相似的行为,也有独一无二的行为。比如,他们能用声音进#行交流,都有talk()方法,还有drive_car()方法。不同的是,技工有repair_car()方法,而出纳#有ring_sale()方法。技工有一个repair_certification 属性,而所有人都有一个drivers_license#属性。##最后,所有这些实例都是一个检查(overseeing)类RepairShop 的参与者,后者具有一个叫#operating_hours 的数据属性,它通过时间函数来确定何时顾客来修车,何时职员技工和出纳员来上#班。RepairShop 可能还有一个AutoBay 类,拥有SmogZone,TireBrakeZone 等实例,也许还有一个叫#GeneralRepair 的实例。##我们所编的RepairShop 的一个关键点是要展示类和实例加上它们的行为是如何用来对现实生活#场景建模的。同样,你可以把诸如机场,餐厅,晶蕊,医院,其至一个邮订音乐公司想像为类,它#们完全具备各自的参与者和功能性。