使用Python一年多了,做过一些小工具,也用它解决了不少项目问题,但总感觉有些概念还是比较模糊,对它的认识不够全面。《代码大全》说了,要“深入一门语言去编程,不浮于表面”,所以我打算仔细学习Python的方方面面。在该系列文章中,我将深入学习Python的面向对象编程技术。
首先从面向对象的重要概念学起。
一、抽象(Abstract)
首先从面向对象的重要概念学起。
一、抽象(Abstract)
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。
所有编程语言都提供抽象机制。汇编语言是对底层硬件的抽象,C语言是对汇编语言的抽象,但是它仍然是对计算机内部结构的抽象,而不是针对问题领域的抽象,因此程序员必须建立机器模型和实际待解决的问题模型之间的映射。建立这种映射是非常困难的,所以编程很难,维护代价高昂。面向对象语言通过向程序员提供表示问题领域中的元素的工具而更进了一步。程序可以通过添加新类型使自身适用于某个特定问题,因此,当你在阅读代码时,也是在阅读问题的描述。这是一种更为灵活和强大的抽象。
我们所能够解决的问题的复杂性直接取决于抽象的类型和质量。面向对象分析和设计的目标便是得到高质量的抽象。
二、对象(Object)
现实世界中的对象通常是指可见的、有具体形态的事物,如桌子、玩具、图形等。
软件开发世界中的对象是指一组数据以及与之相关的一系列行为。它能够表示的事物范围更广,更抽象。例如,流程、服务、算法等也可以作为对象。在面向对象的软件实现中一切都是对象。
每个对象都具有以下三种属性:
- 标识(Identity):
- 类型(Class):
- 值(Value):
三、继承(Inheritance)
继承是指子类自动获得父类属性和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
在类层次中,子类只继承一个父类的属性和方法,则称为单重继承。
在类层次中,子类继承了多个父类的属性和方法,则称为多重继承。
在目前的主流语言中,C++和Python支持多重继承,JAVA、VB.NET、Objective-C均仅支持单继承。
在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重用性。
四、多态(Polymorphism)
也称为动态绑定,是指在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。多态是面向对象的最核心特征,是使用大多数设计模式的前提,是代码解耦的重要工具。
五、OOA、OOD与OOP的区别
分析(Analysis)、设计(Design)、和编码(Pragramming)是软件开发的三个重要过程。加上OO(Object-Oriented),只是说明采用面向对象的方式完成这些过程。
- OOA(Object Oriented Analysis):
- OOD(Object Oriented Design):
- OOP(Object Oriented Programming):
实际开发中,这三个过程通常是迭代进行的,也是目前最流行的开发模型:迭代模型(Iterative Development Model)。
六、参考文档
《Python 3 Object Oriented Programming》
《Python 参考手册(第四版)》
《Pyhton 核心编程(第二版)》
《Java编程思想(第四版)》
《UML面向对象建模与设计》