1.面向过程的程序设计&面向对象的程序设计

面向过程的程序设计

核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么…,基于面向过程设计程序就好比在设计一条流水线,是一种机械式的思维方式。若程序一开始是要着手解决一个大的问题,面向过程的基本设计思路就是把这个大的问题分解成很多个小问题或子过程,这些子过程在执行的过程中继续分解,直到小问题足够简单到可以在一个小步骤范围内解决。
优点:
复杂的问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将会非常简单)
缺点:
一套流水线或者流程就是用来解决一个问题,比如生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,与其相关的组件都需要修改,牵一发而动全身,扩展性极差。
应用:
面向过程的程序设计思想一般用于那些功能一旦实现之后就很少需要改变的场景, 如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程的方式是极好的,著名的例子有Linux內核,git,以及Apache HTTP Server等。但如果你要处理的任务是复杂的,且需要不断迭代和维护 的, 那还是用面向对象最方便了。

利用面对对象的思想可以将用户登录账户这件事分为三个部分,首先用户需要输入信息,再对用户的信息正确性进行核对,最后对用户注册的信息进行存储

import json
def interactive():
    name=input("name:").strip()
    pwd=input('pwd:').strip()
    return {
        'name':name,
        'pwd':pwd
    }

def check(info):
    is_valid=True
    if len(info['name'])<=0:
        print('wrong username')
        is_valid=False
    if len(info['pwd'])<6:
        print('the length of pwd is short')
        is_valid=False
    return {
        'info':info,
        'is_valid':is_valid
    }

def register(info_check):
    if info_check['is_valid']:
        with open('info.json','w',encoding='utf-8') as f:
            json.dump(info_check['info'],f)

info=interactive()#输入信息
info_check=check(info)#核对用户输入信息的合法性
register(info_check)#保存用户的账户信息

#运行结果
# name:sunwukong
# pwd:5201314
#info.json文件内容:
#{"name": "sunwukong", "pwd": "5201314"}

面向对象的程序设计

核心是“对象”二字,要理解对象为何物,必须把自己当成上帝,在上帝眼里,世间存在的万物皆为对象,不存在的也可以创造出来。程序员基于面向对象设计程序就好比如来设计西游记,如来要解决的问题是把经书传给东土大唐,如来并没有考虑问题的解决流程,而是设计出了负责取经的师傅四人:唐僧,沙和尚,猪八戒,孙悟空,负责骚扰的一群妖魔鬼怪,以及负责保驾护航的一众神仙,这些全都是对象,然后取经开始,就是师徒四人与妖魔鬼怪神仙交互着直到完成取经任务。
所以说基于面向对象设计程序就好比在创造一个世界,世界是由一个个对象组成,而你就是这个世界的上帝。
我们从西游记中的任何一个人物对象都不难总结出:对象是特征与技能的结合体。比如孙悟空的特征是:毛脸雷公嘴,技能是:七十二变、火眼金睛等。
与面向过程机械式的思维方式形成鲜明对比,面向对象更加注重对现实世界而非流程的模拟,是一种“上帝式”的思维方式。
优点:
面向对象的程序设计只是用来解决扩展性问题,使程序更加容易扩展
缺点:
编程的复杂度远高于面向过程,不了解面向对象而立即上手并基于它设计程序,极容易出现过度设计的问题,而且在一些扩展性要求低的场景使用面向对象会徒增编程难度,比如管理linux系统的shell脚本程序就不适合用面向对象去设计,面向过程反而更加适合。
应用:
当然是应用于需求经常变化的软件中,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值