一、面向过程

  1、面向过程核心是过程二字,过程指的是解决问题的步骤,好比如设计一条流水线,是一种机械式的思维方式。

     就是程序从上到下一步步执行,一步步从上到下,从头到尾的解决问题 。基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个小问题或子过程,这些子过程再执行的过程再继续分解直到小问题足够简单到可以在一个小步骤范围内解决。

  2、优缺点

       优点:将复杂的问题流程化,进而简单化。

       缺点:扩展性差

  3、实例:面向过程式的登录注册程序  

import json,re
def login():
'''
用户输入
:return:
'''
usename = input('用户名:').strip()
pwd = input('密码:').strip()
tel = input('电话:').strip()
mail = input('邮箱:').strip()
return {
'usename':usename,
'pwd':pwd,
'tel':tel,
'mail':mail }
def authentication(use_info):
'''
判断用户名和密码等信息是否合法
:return:
'''
is_valid = True # 默认合法
if len(use_info['usename'])==0:
print('用户名不能为空!')
is_valid = False
if len(use_info['pwd'])< 6:
print('密码长度不得小于6位!')
is_valid = False
if len(re.findall('1[0-9]{10}',use_info['tel']))==0:
print('电话格式不对!')
is_valid = False
if not re.search(r'@.*?.com$',use_info['mail']).group(): # 使用Python的r前缀,就不用考虑转义的问题,'*'加个?就可以让'.'采用非贪婪匹配
print('邮箱格式不对')
is_valid = False return {
'valid':is_valid,
'info':use_info
}
def register(auth):
'''
若输入信息合法则注册,写入文件或数据库
:param auth:
:return:
'''
if auth['valid']==True:
with open('data.json','w',encoding='utf-8') as f:
json.dump(auth['info'],f)
def main():
'''
主逻辑程序
:return:
'''
use_info = login()
auth = authentication(use_info)
register(auth)
if __name__=='__main__': # 直接调用时执行下列程序,被调用时不执行
main()

  注意:一般认为, 如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程的方式是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护 的, 那还是用面向对象最方便。

二、面向对象

  1、面向对象:核心是对象二字,特征和技能的结合体。

  2、优缺点:

      优点:可扩展性高

      缺点:编程复杂度高

  3、应用场景:用户需求经常变化,互联网应用,游戏,企业内应用等。

  4、关于面向对象的几个名词解释   

    类:一个类即是对一系列对象相似的特征和技能的结合体,如同一个模板。在类中定义了这些对象的都具备的属性,共同的方法。

    属性:人类包含很多特征,把这些特征用程序来描述的话,叫做属性,比如年龄、身高、性别、姓名等都叫做属性,一个类中,可以有多个属性。

    方法:人类不止有身高、年龄、性别这些属性,还能做好多事情,比如说话、走路、吃饭等,相比较于属性是名词,说话、走路是动词,这些动词用程序来描述就叫做方法。

    实例(对象):一个对象即是一个类的实例化后的实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同。

    实例化:把一个类转变为一个对象的过程就叫实例化。

  5、简单实例

# 现实世界中的对象:
'''
对象1
特征
职业:学生
姓名:王二
性别:男
年龄:22
技能
学习
打游戏
对象2
特征
职业:学生
姓名:张三
性别:男
年龄:20
技能
学习
打游戏
看书
对象3
特征
职业:学生
姓名:婉婉
性别:女
年龄:18
技能
学习
打游戏
看书
现实中的类:
特征:
职业:学生
技能:
学习
打游戏
看书
在程序中:
'''
# 先有类
class School_learn:
job = 'student'
def study(self):
print('study hard!')
def play_game(self):
print('play games as little as you can')
def read(self):
print('read books more and more') # 再调用类产生对象
student1 = School_learn()
student2 = School_learn()
student3 = School_learn()
print(student1) # <__main__.School_learn object at 0x000002B70F8D7588> 对象
print(student2)
print(student3)

  6、面向对象三大特性

    <1>封装(Encapsulation):在类中对数据的赋值、内部调用对外部用户来说是透明不可见的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法。

    <2>继承(Inheritance):一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承。

    <3>多态(Polymorphism):多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态。

注意:这里只是简单说明下几大特性,后续我们会深入探讨的的。

  

  
 
 

Python之面向过程和面向对象的区别的更多相关文章

  1. Net基础篇_学习笔记_第十一天_面向对象(面向过程与面向对象的区别/类的概念)

    1.面向过程-----> 面向对象 面向过程:面向的是完成这件事儿的过程,强调的是完成这件事儿的动作. 把大象塞进冰箱里1.打开冰箱门2.把大象塞进去,亲下大象的屁股3.关闭冰箱门 孙全 瘦小 ...

  2. essential C++中关于面向过程和面向对象的说明

    昨天在阅读essential C++中看到了一个关于面向过程和面向对象的区别的例子,感觉挺好的.记录下来.... 这个例子是关于照相机的.照相机有三个性质,一个是控制位置:通常使用3个浮点数据来表示其 ...

  3. python 面向过程和面向对象比较

    面向过程 VS 面向对象 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是:复杂度 ...

  4. python基础(23):面向过程与面向对象的优劣、初识面向对象

    1. 面向过程与面向对象的优劣 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程 ...

  5. 面向过程 vs 面向对象

    从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...

  6. JS是面向过程、面向对象还是基于对象?面向对象的代码体现

    一.问题 javascript是面向对象的,还是面向过程的?基于对象是什么意思? 对象: 指的是对某一类事物进行抽象,抽象出这一类事物共同的特征以及行为(也就是属性和方法),那些拥有这一共同属性和方法 ...

  7. PHP面向过程和面向对象

    php程序编写分为面向过程和面向对象.两者在功能实现上没有区别,但是在代码编写上区别很大,面向过程的代码很乱,不易管理,而面向对象把常用的功能封装为一个类,这样代码清楚多了. 下面举个小例子说明一下: ...

  8. C语言学习系列(二)面向过程和面向对象

    一.基本定义 (一).面向过程(procedure oriented programming POP) 面向过程是分析解决问题的步骤,然后用函数把这些步骤一步一步的实现,然后在使用的时候一一调用则可. ...

  9. PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理

    相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析  PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理 介绍 mysqli是PHP程序与mysql数据库进行数据交互的桥梁, ...

随机推荐

  1. Node.js 问题集合

    使用node合并多个接口, 最后获取数据慢的问题                暂时没解决方法 pm2 访问 ip 记录到日志                                      ...

  2. xhtml html

    xhtml是用xml语言重写了html,相比html更规范了, XHTML是HTML像XML的一个过渡语言,它比HTML严谨性会高点,然后基本语言都还是沿用的HTML的标签,只不过废除了部分表现层的标 ...

  3. Mongodb 补充

    1 mongodb 概述 启动mongo 1 数据库操作 没有数据的 集合 和 数据库不会显示 db 查看当前的数据库名称: 所有物理上存在的数据库 db.stats() 查看当前的数据库信息: sh ...

  4. Could not find a valid gem 'rails' (>= 0), here is why

    很长一段时间之前 Ruby Rails入门--windows下搭建Ruby Rails Web开发环境 ,由于后来将Ruby的安装文件从 C 盘移动到了 D 盘,也修改了 Path 环境变量,ruby ...

  5. windows ubuntu Android studio安装好启动没反应解决方法

     参考:http://blog.csdn.net/qq305013720/article/details/8934152 目前有三种解决方案,都是针对执行studio.bat出现错误导致andro ...

  6. [置顶] 【机器学习PAI实践四】如何实现金融风控

    (本文数据为虚构,仅供实验) 一.背景 本文将针对阿里云平台上图算法模块来进行实验.图算法一般被用来解决关系网状的业务场景.与常规的结构化数据不同,图算法需要把数据整理成首尾相连的关系图谱.图算法更多 ...

  7. Android 仿淘宝属性标签页

    直接看效果图相信这样的效果很多,我之前在网上找了很久没找到自己想要的! <?xml version="1.0" encoding="utf-8"?> ...

  8. HAWQ取代传统数仓实践(十六)——事实表技术之迟到的事实

    一.迟到的事实简介 数据仓库通常建立于一种理想的假设情况下,这就是数据仓库的度量(事实记录)与度量的环境(维度记录)同时出现在数据仓库中.当同时拥有事实记录和正确的当前维度行时,就能够从容地首先维护维 ...

  9. 洛谷 P2879 [USACO07JAN]区间统计Tallest Cow

    传送门 题目大意: n头牛,其中最高身高为h,给出r对关系(x,y) 表示x能看到y,当且仅当y>=x并且x和y中间的牛都比 他们矮的时候,求每头牛的最高身高. 题解:贪心+差分 将每头牛一开始 ...

  10. 阿里云接口异常-Can not find endpoint to access

    最近在做公司的资产盘点,需要请求阿里云的接口获取公司的云服务器信息.在获取实例列表的过程中,通过异常机制捕获了 Can not find endpoint to access 这个错误.经过多次排查, ...