Python进阶_面对对象面对过程

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

一. 简单对比

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

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

一个栗子

'''假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个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=nameself._score=scoredef 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

 

 

 

 

 

 

  

 

转载于:https://www.cnblogs.com/fangfang31140519/p/8636656.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

puppet 安装mysql_Puppet安装dashboard

Puppet安装dashboard安装依赖包[rootmaster ~]# sudo yum install -y mysql mysql-devel mysql-server ruby ruby-devel ruby-irb ruby-mysql ruby-rdoc ruby-ri启动mysql并设置开机启动[rootmaster ~]# service mysqld start [rootmaster ~]# chkconfig mysqld on下载并安装…

命令模式详解

原文链接:https://www.cnblogs.com/java-my-life/archive/2012/06/01/2526972.html 在阎宏博士的《JAVA与模式》一书中开头是这样描述命令(Command)模式的: 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Transaction)模…

JDK 8中几乎命名的方法参数

有时在Java中命名方法参数确实很不错,这看起来可能不会出现很长时间了,但是始终还有其他一些解决方法,例如使用构建器模式来获得类似的行为,这将为一点点。 在我看来,使用JDK 8中的Lambda支持可以使您获得非常接近的效…

深入解析jQuery中的延时对象的概念

首先我们需要明白延时对象有什么用?第一个作用,解决时序以及动态添加执行函数的问题。function a(){alert(1)};function b(){alert(2)};function c(){alert(3)};a();setTimeout(function(){b();},0);c();很明显函数执行顺序是a->c->b,而不是按照函…

c mysql5.7_CentOS7下MySQL5.7的三种安装方式详解

操作系统环境:CentOS 7.4最小化安装[rootnode3 src]# cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core)[rootnode3 ~]# uname -r3.10.0-693.5.2.el7.x86_64[rootnode3 ~]#安装版本为:MySQL 5.7.20一、编译安装MySQL5.71、下载源码包[rootno…

Struts2 学习之小白开始

Struts2 基础知识学习总结 Struts2 概述:Struts2 是一个用来开发 MVC 应用程序的框架,他提供了 Web 应用程序开发过程中的一些常见问题的解决方案,比如对于用户输入信息合法性的验证,统一的布局,国际化等,既…

机器学习的数学基础 - 信息论

机器学习的数学基础 - 信息论 信息论 信息论本来是通信中的概念,但是其核心思想“熵”在机器学习中也得到了广泛的应用。比如决策树模型ID3,C4.5中是利用信息增益来划分特征而生成一颗决策树的,而信息增益就是基于这里所说的熵。所以它的重要…

了解ElasticSearch分析器

令人遗憾的是,许多早期的互联网啤酒配方不一定采用易于消化的格式。 也就是说,这些食谱是通常在电子邮件或论坛帖子中最初组成的非结构化的方向和成分混合列表。 因此,尽管很难轻松地将这些配方放入传统的数据存储中(表面上看是为…

c++简单程序设计-2

1.验证性实验部分①函数声明和函数定义各自的作用及二者的区别:函数声明就是调用函数之前提示一下有这个函数函数定义就是写一个函数②什么是形参?什么是实参?函数参数和返回值在函数中起到什么作用?函数定义时写的参数叫做形参&a…

java 同步的方法_关于Java中的同步方法

我有一个关于Java中方法同步的问题.考虑一个具有3个同步方法的类.class MyClass{public synchronized void methodA(){ ... }public synchronized void methodB(){ ... }public synchronized void methodC(){ ... }}考虑myObject,myClass的一个实例.以下内容哪些是对的&#xf…

jQuery获取隐藏域和radio单项框的值

获得只有Name的隐藏Input的值$("input[typehidden][name隐藏Input的名称]").val() 或 $("input[name隐藏Input的名称]:hidden").val()radio设值$("input[typeradio][value值]").attr("checked",true);eg.$("input[typeradio][v…

Linux虚机安装配置Tomcat

d第一步:下载Tomcat包,网址http://tomcat.apache.org/ 选择tar.gz包下载,并传到虚机中 第二步:解压下载好的Tomcat包 命令:tar -zxvf apache-tomcat-8.0.53.tar.gz 第三步:配置环境变量 进入到Tomcat下bin包…

Java Comparable接口的陷阱

Java Comparable接口提供了一种对实现该接口的类进行自然排序的方法。 自然顺序对标量和其他非常简单的对象有意义,但是当我们使用面向业务的领域对象时,自然顺序就变得更加复杂。 从业务经理的角度来看,交易对象的自然顺序可以是交易的价值&…

mysql 创建视图

CREATE VIEW v_image_org_user_album AS--创建视图并命名v_image_org_user_album SELECT --先开from中表的命名 a.id AS imgid,--将a表中的id命名为新的表(视图)中的imgid字段,剩下的都一样,就是将之前的字段重新命名到…

jQuery.ajaxPrefilter()函数的使用

jQuery.ajaxPrefilter( [dataTypes ], handler(options, originalOptions, jqXHR) )返回: undefined 描述: 在每个请求之前被发送和 $.ajax()处理它们前处理,设置自定义Ajax选项或修改现有选项。 添加的版本: 1.5jQuery.ajaxPrefilter( [dataTypes ], handler(optio…

linux php自动执行_linux下实现定时执行php脚本

在linux中输入命令复制代码 代码如下:crontab -e然后使用vim的命令编辑打开的文件,输入复制代码 代码如下:0 * * * * /usr/bin/php -f /home/userxxx/update.php保存,退出,好了,现在系统会在每个0点自动执行update.php脚本&#x…

Nginx安装及配置详解

nginx概述 nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。 这里主要通过三个方面…

Gradle:我们需要另一个构建工具吗?

在Java开发的早期,我们要么没有太多的构建工具需求,要么就使用了其他环境中的工具。 我仍然记得构建shell脚本并创建用于开发Java的文件。 生成文件特别有趣,因为这是一个在设计时就没有考虑Java的工具。 迁移到不同的操作系统环境也很困难。…

servlet简单概括总结

最近在看java web的相关内容,不管是整体还是细节,要学习的知识有很多,所以有一个好的学习体系非常重要。在阅读学习一些博客和教程中关于servlet的内容后,现将知识体系和自己的总结体会进行梳理,希望在更深入理解的同时…

jquery学习之-查找父元素方法parent() parents() closest()的区别

parent()、parents()与closest()方法两两之间有类似又有不同&#xff0c;本篇简短的区分一下这三个方法。通过本篇内容&#xff0c;大家将会在以后使用.parent()、parents()和closest()时不会显得无从下手。 我们直接看例子来来说明一下这三个方法的使用区别&#xff1a; <u…