这节主要讲面对对象与面对过程两种编程思想的主要区别。
一. 简单对比
面向过程是一种基础的方法,它考虑的是实际的实现步骤,一般情况下,面向过程是自顶向下逐步求精,其最重要的是模块化的思想方法。
面向对象的方法主要是把事物给对象化,包括其属性和行为。在面对对象编程中,每个对象都可以接收其他对象发过来的消息,并处理这些消息。
一个栗子
'''假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个dict表示:'''
std1 = { 'name': 'Michael', 'score': 98 } std2 = { 'name': 'Bob', 'score': 81 }
而处理学生成绩可以通过函数实现,比如打印学生的成绩:
def print_score(std): print('%s: %s' % (std['name'], std['score']))
面向过程的侧重点是在如何和完成这件事,比如打印成绩表直接用print函数就可以。
如果采取面向对象的程序设计思路,我们首先思考的不是程序的实行流程,而是把student这种数据类型视为一个对象,对象中拥有name和score这两个属性(Property)。打印学生成绩,首先要创立学生这个对象,然后给对象发一个打一个成绩的命令,让对象自己将数据答应出来。
class Student(): def __init__(self,name,score): self._name=name self._score=score def print_score(self): print('姓名:{name},成绩:{score}'.format(name=self._name,score=self._score)) p1=Student('方方','91') p2=Student('小明','99') p1.print_score() p2.print_score()
我们是首先创立Student这个对象,即学生类,然后进行实例化。
面向对象的设计思想是从自然界中来的,因为在自然界中,类(Class)和实例(Instance)的概念是很自然的。Class是一种抽象概念(实际中并没有这个具体东西,只是一个概念),比如我们定义的Class——Student,只是一个学生的概念。而实例(Instance)则是一个个具体的Student,比如说p1,p2。所以,面向对象的设计思想是抽象出Class,根据Class创建Instance。
二.面向过程和面向对象的本质理解
1.面向过程就是分析出解决问题所需的步骤,面向对象则是把构成问题的事物分解成对象,抽 出对象的目的并不在于完成某个步骤,而是描述其再整个解决问题的步骤中的行为。
2.面向过程的思维方式是分析综合,面向对象的思维方式是构造。
3.面向过程的设计更具挑战性,技巧性,面向对象主要在于对象抽象的技术性,一旦完成抽象,任何人都可以做后面的工作了。
4.从代码层结构上来说的话,面向对象和面向过程的主要区别就是数据是单独存数还是与操作存储在一起。面向对象提供了数据的封装后,是的对某一操作而言,数据的访问变得可靠了。
5.面向过程就是将coding当做一件事,一步一步完成,面向对象就是将coding当做一件事物,需要做什么的时候由事物(对象)本身的行为去完成。
总的来说:
面向对象是将事物高度抽象化。
面向过程是一种自顶向下的编程
面向对象必须先建立抽象模型,之后直接使用模型就行了。
本文部分内容借鉴于:https://blog.csdn.net/lcore/article/details/8973786