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