面向过程 VS 面向对象
面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。
优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。
缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。
应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。
面向对象的程序设计的
优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。
应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。
在python 中面向对象的程序设计并不是全部。
面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。
类:具有相同特征的一类事物(人、狗、老虎)
对象/实例:具体的某一个事物(隔壁阿花、楼下旺财)
实例化:类——>对象的过程(这在生活中表现的不明显,我们在后面再慢慢解释)
在python中,用变量表示特征,用函数表示技能,因而具有相同特征和技能的一类事物就是‘类’,对象是则是这一类事物中具体的一个。
类的两种作用: 属性引用 实例化
属性引用 (类名, 属性)
1 class Person: #定义一个人类 2 role = 'person' #人的属性都是人 3 def walk(self): # 人会走路, 也就是有一个走路的方法 4 print('person is walking...') 5 6 print(Person.role) # 查看人的role属性 7 print(Person.walk) # 查看人走路的方法 8 Person.walk(1) # 调用人走路的方法 需要传一个值
实例化: 类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为没个实例定制自己的特征
1 class Person: #定义一个人类 2 role = 'person' #人的属性为 人 3 4 def __init__(self, name): 5 self.name = name # 每个人都有名字 6 7 def walk(self): # 人都可以走路,也就是一个走路的方法 8 print('person can walking,,,') 9 10 print(Person.role) # 查看人的role属性 11 print(Person.walk) # 引用人的走路方法,不是调用方法