首页 技术 正文
技术 2022年11月15日
0 收藏 551 点赞 4,454 浏览 1870 个字

面向过程 VS 面向对象

面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。

优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。

缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。

应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。

面向对象的程序设计的

优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。

缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。

应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。

在python 中面向对象的程序设计并不是全部。

面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。

类:具有相同特征的一类事物(人、狗、老虎)

对象/实例:具体的某一个事物(隔壁阿花、楼下旺财)

实例化:类——>对象的过程(这在生活中表现的不明显,我们在后面再慢慢解释)

在python中,用变量表示特征,用函数表示技能,因而具有相同特征和技能的一类事物就是‘类’,对象是则是这一类事物中具体的一个。

类的两种作用: 属性引用 实例化
属性引用 (类名, 属性)

 class Person: #定义一个人类     role = 'person' #人的属性都是人     def walk(self): # 人会走路, 也就是有一个走路的方法         print('person is walking...') print(Person.role) # 查看人的role属性 print(Person.walk) # 查看人走路的方法 Person.walk(1)  # 调用人走路的方法  需要传一个值

实例化: 类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为没个实例定制自己的特征

 class Person:  #定义一个人类     role = 'person'  #人的属性为 人     def __init__(self, name):         self.name = name    # 每个人都有名字     def walk(self):     # 人都可以走路,也就是一个走路的方法         print('person can walking,,,') print(Person.role)  # 查看人的role属性 print(Person.walk)  # 引用人的走路方法,不是调用方法

实例化的过程就是类——>对象的过程

组合: 给一个类的对象封装一个属性,这个属性是另一个类的对象

 class GameRole:     def __init__(self, name, ad, hp):         self.name = name         self.ad = ad         self.hp = hp     def attack(self,p):         p.hp = p.hp - self.ad         print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))     def armament_weapon(self,wea):         self.wea = wea class Weapon:     def __init__(self,name,ad):         self.name = name         self.ad = ad     def fight(self,p1,p2):         p2.hp = p2.hp - self.ad         print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'\               % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp)) p1 = GameRole('大阳哥',20,500) p2 = GameRole('印度阿宁',50,200) axe = Weapon('三板斧',60) broadsword = Weapon('屠龙宝刀',100) # print(axe) p1.armament_weapon(axe)  # 给大阳哥 装备了三板斧这个对象. # print(p1.wea) # print(p1.wea.name) # print(p1.wea.ad) p1.wea.fight(p1,p2)
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,896
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,423
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,241
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,055
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,684
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,723