一、概念python
核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么......基于面向过程设计程序就比如在设计一条流水线,是一种机械式的思惟方式。若程序一开始是要着手解决一个大的问题,面向过程的基本设计思路就是把这个大的问题分解成不少个小问题或子过程,这些子过程在执行的过程当中继续分解,直到小问题足够简单到能够在一小步骤范围内解决。linux
二、优势git
复杂的问题流程化,进而简单化(一个复杂的问题,分红一个个小的步骤去实现,实现小的步骤将会很是简单)程序员
举个典型的面向过程的例子, 写一个数据远程备份程序, 分三步,本地数据打包,上传至云服务器,测试备份文件可用性。shell
import os def data_backup(folder): print("找到备份目录: %s" %folder) print('正在备份......') zip_file='/tmp/backup20181103.zip' print('备份成功,备份文件为: %s' %zip_file) return zip_file def cloud_upload(file): print("\nconnecting cloud storage center...") print("cloud storage connected.") print("upload file...%s...to cloud..." %file) link='http://www.xxx.com/bak/%s' %os.path.basename(file) print('close connection.....') return link def data_backup_test(link): print("\n下载文件: %s , 验证文件是否无损" %link) def main(): #步骤一:本地数据打包 zip_file = data_backup("c:\\users\\alex\欧美100G高清无码") #步骤二:上传至云服务器 link=cloud_upload(zip_file) #步骤三:测试备份文件的可用性 data_backup_test(link) if __name__ == '__main__': main()
三、缺点编程
一套流水线或者流程就是用来解决一个问题,好比生产汽水的流水线没法生产汽车,即使是能,也得是大改,改一个组件,与其相关的组件都须要修改,牵一发而动全身,扩展性极差。服务器
好比咱们修改了步骤二的函数cloud_upload的逻辑,那么依赖于步骤二结果才能正常执行的步骤三的函数data_backup_test相关的逻辑也须要修改,这就形成了连锁反应,而这一弊端会随着程序的增大而变得愈加的糟糕,咱们程序的维护难度将会愈来愈大。函数
import os def data_backup(folder): print("找到备份目录: %s" %folder) print('正在备份......') zip_file='/tmp/backup20181103.zip' print('备份成功,备份文件为: %s' %zip_file) return zip_file def cloud_upload(file): #加上异常处理,在出现异常的状况下,没有link返回 try: print("\nconnecting cloud storage center...") print("cloud storage connected.") print("upload file...%s...to cloud..." % file) link = 'http://www.xxx.com/bak/%s' % os.path.basename(file) return link except Exception: print('upload error') finally: print('close connection.....') def data_backup_test(link): #加上对参数link的判断 if link: print("\n下载文件: %s , 验证文件是否无损" %link) else: print('\n连接不存在') def main(): #步骤一:本地数据打包 zip_file = data_backup("c:\\users\\alex\欧美100G高清无码") #步骤二:上传至云服务器 link=cloud_upload(zip_file) #步骤三:测试备份文件的可用性 data_backup_test(link) if __name__ == '__main__': main()
四、应用场景测试
面向过程的程序设计思想通常用于那些功能一旦实现以后就不多须要改变的场景, 若是你只是写一些简单的脚本,去作一些一次性任务,用面向过程的方式是极好的,著名的例子有Linux內核,git,以及Apache HTTP Server等。但若是你要处理的任务是复杂的,且须要不断迭代和维护 的, 那仍是用面向对象最方便了。设计
一、概念
核心是“对象”二字,要理解对象为什么物,必须把本身当成上帝,在上帝眼里,世间存在的万物皆为对象,不存在的也能够创造出来。程序员基于面向对象设计程序就比如如来设计西游记,如来要解决的问题是把经书传给东土大唐,如来并无考虑问题的解决流程,而是设计出了负责取经的师傅四人:唐僧,沙和尚,猪八戒,孙悟空,负责骚扰的一群妖魔鬼怪,以及负责保驾护航的一众神仙,这些全都是对象,而后取经开始,就是师徒四人与妖魔鬼怪神仙交互着直到完成取经任务。因此说基于面向对象设计程序就比如在创造一个世界,世界是由一个个对象组成,而你就是这个世界的上帝。
咱们从西游记中的任何一我的物对象都不难总结出:对象是特征与技能的结合体。好比孙悟空的特征是:毛脸雷公嘴,技能是:七十二变、火眼金睛等。
与面向过程机械式的思惟方式造成鲜明对比,面向对象更加注重对现实世界而非流程的模拟,是一种“上帝式”的思惟方式。
二、优势
解决了面向过程可扩展性低的问题,这一点咱们将在下小节中为你们验证,须要强调的是,对于一个软件质量来讲,面向对象的程序设计并不表明所有,面向对象的程序设计只是用来解决扩展性问题。
三、缺点
编程的复杂度远高于面向过程,不了解面向对象而当即上手并基于它设计程序,极容易出现过分设计的问题,并且在一些扩展性要求低的场景使用面向对象会徒增编程难度,好比管理linux系统的shell脚本程序就不适合用面向对象去设计,面向过程反而更加适合。
四、应用场景
固然是应用于需求常常变化的软件中,通常需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。