这节主要讲面对对象与面对过程两种编程思想的主要区别。

一. 简单对比

  面向过程是一种基础的方法,它考虑的是实际的实现步骤,一般情况下,面向过程是自顶向下逐步求精,其最重要的是模块化的思想方法。

  面向对象的方法主要是把事物给对象化,包括其属性和行为。在面对对象编程中,每个对象都可以接收其他对象发过来的消息,并处理这些消息。

一个栗子

'''假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个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('方方','')
p2=Student('小明','')
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

  

Python进阶_面对对象&面对过程的更多相关文章

  1. Python 进阶_生成器 & 生成器表达式

    目录 目录 相关知识点 生成器 生成器 fab 的执行过程 生成器和迭代器的区别 生成器的优势 加强的生成器特性 生成器表达式 生成器表达式样例 小结 相关知识点 Python 进阶_迭代器 & ...

  2. python进阶_浅谈面向对象进阶

    python进阶_浅谈面向对象进阶 学了面向对象三大特性继承,多态,封装.今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数. 一.isinstance和issubclass  class F ...

  3. Python进阶_类与实例

    上一节将到面对对象必须先抽象模型,之后直接利用模型.这一节我们来具体理解一下这句话的意思. 面对对象最重要的概念就是类(class)和实例(instance),必须牢记类是抽象的模板,比如studen ...

  4. Python进阶:自定义对象实现切片功能

    2018-12-31 更新声明:切片系列文章本是分三篇写成,现已合并成一篇.合并后,修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔接做了大量改动.原系列的单篇就不删除了,毕竟也是 ...

  5. Python进阶8---面向对象基础1

    面向对象 语言的分类 Python的类 定义 class ClassName: pass class MyCalss: """A example class"& ...

  6. Python 进阶_闭包 & 装饰器

    目录 目录 闭包 函数的实质和属性 闭包有什么好处 小结 装饰器 更加深入的看看装饰器的执行过程 带参数的装饰器 装饰器的叠加 小结 装饰器能解决什么问题 小结 闭包 Closure: 如果内层函数引 ...

  7. Python进阶07 函数对象

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函数也是一个对象 ...

  8. Python进阶06 循环对象

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 这一讲的主要目的是为了大家在读Python程序的时候对循环对象有一个基本概念. 循 ...

  9. Python 进阶 之 函数对象

    Python的世界里,万物皆对象,函数当然也是: 首先要定义一个函数: def add(a,b): print a+b 其次定义一个字典来引用该函数: dic = {"add":a ...

随机推荐

  1. 基础--Linux环境下一键部署 lnmp

    1. 通过x-shell 或者 putty 登录服务器 2. 下载lnmp一键安装包 >wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz  # ...

  2. Hbase配置java客户端

    1.修改windows配置文件 C:\WINDOWS\system32\drivers\etc\hosts 将远程hbase和zookeeper主机的IP地址加进去 54.0.88.53      H ...

  3. ERROR 1045 (28000): Access denied for user xxx & ERROR 1449 (HY000): The user specified as a definer xxx does not exists

    今天在一个修改过权限的MySQL数据库遇到了"ERROR 1045 (28000): Access denied for user 'xxx'@'xxx.xxx.xxx.xxx' (usin ...

  4. NLP+词法系列(一)︱中文分词技术小结、几大分词引擎的介绍与比较

    笔者想说:觉得英文与中文分词有很大的区别,毕竟中文的表达方式跟英语有很大区别,而且语言组合形式丰富,如果把国外的内容强行搬过来用,不一样是最好的.所以这边看到有几家大牛都在中文分词以及NLP上越走越远 ...

  5. PyCharm 2017.3 下载与安装

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.下载 (1).下载链接: https://www.jetbrains.com/pycharm ...

  6. js数组使用JSON.stringify()和toString()的区别,JSON.parse

    JSON.stringify()中的<br><br>var arr = [1,2,3,4]; console.log(arr.toString()); // 1,2,3,4 a ...

  7. jquery 动态获得主机地址

    var curWwwPath=window.document.location.href; alert("curWwwPath"+curWwwPath); curWwwPath  ...

  8. 一次日语翻译的Chrome插件开发经历

    序言 去年7月刚过了日语N2,想着今年考个N1,为了加深日语文化的了解,还有学习日语,平时免不了经常上日语网站. 但是毕竟水平有限,所以不免遇到不认识的单词,日语单词的一个特点就是很多单词你知道是什么 ...

  9. hadoop第二课

    1.1为什么需要Hadoop  (1)数据分析者面临的问题 – 数据日趋庞大,读写都出现性能瓶颈: – 用户的应用和分析结果,对实时性和响应时间 要求越来越高: – 使用的模型越来越复杂,计算量指数级 ...

  10. kubernetes Auto Install Guide

    1.概念&架构 Kubernetes is an open-source system for automating deployment, scaling, and management o ...