080❤面向过程编程
一、 面向过程思想
1.1 面向过程的概念
“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。
面向过程的编程思想:
- 核心是"过程"二字,过程即流程,指的是做事的步骤:先什么、再什么、后干什么
- 基于该思想编写程序就好比在设计一条流水线
面向过程其实是最为实际的一种思考方式,就算是的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法。它考虑的是实际地实现。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。对比面向过程,面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。比如拿学生早上起来这件事说明面向过程,粗略的可以将过程拟为:
- 起床
- 穿衣
- 洗脸刷牙
- 去学校
而这4步就是一步一步地完成,它的顺序很重要,你只需要一个一个地实现就行了。而如果是用面向对象的方法的话,可能就只抽象出一个学生的类,它包括这四个方法,但是具体的顺序就不一定按照原来的顺序。
1.2 优缺点
- 优点:复杂的问题流程化、进而简单化
- 缺点:扩展性非常差
1.3 应用场景解析
1、不是所有的软件都需要频繁更迭:比如编写脚本
2、即便是一个软件需要频繁更迭,也不并不代表这个软件所有的组成部分都需要一起更迭
面向过程编程是解决问题的一种思想,相当于武林门派,武林门派之间没有好坏之分,因此它与我们之后学习的面向对象编程其实没有好坏之分。
面向过程编程,核心是编程二字,过程指的是解决问题的步骤,即先干什么、后干什么、再干什么、然后干什么……
基于该思想编写程序就好比在设计一条流水线,面向对称编程其实是一种机械式的思维方式。
当我们写登录功能,我们首先需要输入账号、密码,然后认证两次密码是否相同,然后从数据库中读取密码验证用户密码输入是否正确,然后输入验证码……之后,我们就能够实现登录功能。这样把登录功能问题流程化,进而是解决问题的思路非常清晰。
二、面向过程编程案例
2.1 注册功能
2.1.1 接受用户输入用户名,进行合法性校验,拿到合法的用户名
def check_username():
username = input('username>>>').strip()
if username.isalpha():
return username
else:
print('用户名必须为字母,傻叉')
2.1.2 接受用户输入密码,进行合法性校验,拿到合法的密码
def check_pwd():
while True:
pwd = input('password>>>').strip()
if len(pwd) < 5:
print('密码长度至少五位')
continue
re_pwd = input('re_password>>>').strip()
if pwd == re_pwd:
return pwd
else:
print('两次输入密码不一致')
2.1.3 将合法的用户名和密码写入文件
def insert(username, pwd, path='57.txt'):
with open(path, 'a', encoding='utf8') as fa:
fa.write(f'{username}:{pwd}\n')
2.1.4 注册
def register():
username = check_username()
pwd = check_pwd()
insert(username, pwd)
print(f'{username}注册成功')
register()
Copyusername>>>nick
password>>>12345
re_password>>>12345
nick注册成功
如果现在我们需要校验用户的年龄,因此我们需要增加一个check_age()方法,并且其他有牵连的地方都需要修改,因此它的扩展性极差。
2.1.5 封装文件读写功能
# def register():
# while True:
# username = input('username>>>').strip()
# # 检测用户是否重复,如果重复则重新输入
# with open('db.txt', 'r', encoding='utf8') as fr:
# for line in fr:
# info = line.strip('\n').split(':')
# if username == info[0]:
# print('用户名已经存在')
# break
# else:
# # 用户名不存在
# # 跳出循环,不用重复输入用户名字
# res =
# def tell_info():
# username = input('username>>>').strip()
# with open('db.txt', 'r', encoding='utf8') as fr:
# for line in fr:
# info = line.strip('\n').split(':')
# if username == info[0]:
# return info
数据处理层
def select(username):
with open('db.txt', 'r', encoding='utf8') as fr:
for line in fr:
info = line.strip('\n').split(':')
if username == info[0]:
return info
def tell_info():
username = input('username>>>').strip()
info = select(username)
print(info)
用户功能层
def register():
while True:
username = input('username>>>').strip()
# 检测用户是否重复,如果重复则重新输入
res = select(username)
if res:
print('用户名已经存在')
else:
break
while True:
pwd = input('password>>>').strip()
re_pwd = input('re_password>>>').strip()
if pwd != re_pwd:
print('两次输入密码不一致,请重新输入')
else:
break
把注册功能分开之后,功能与功能直接解耦合,复杂的问题流程化,更加清晰。
2.2 分层实现功能
- 用户功能层:实现用户具体的功能。
- 接口层:连接数据处理层和用户功能层。
- 数据处理层:处理数据后把结果交给接口层。
分层实现功能的好处:当我们需要实现web端和app端的软件,我们只要把数据处理层和接口层写好,然后实现不同的用户功能层即可,web端使用web端的用户功能层,app端使用app端的用户功能层,但是接口层和数据处理层是通用的。

浙公网安备 33010602011771号