chzhiyi / -KnowledgeShare

6 stars 1 forks source link

20190403 - 面向对象的思想 - huasheng #46

Open huashengcaicai opened 5 years ago

huashengcaicai commented 5 years ago

写在开头,这篇的主要是自己对面向对象解决问题的思想的,一个学习思考总结,这里面的语言使用的是python

面向过程,函数式编程,面向对象这几种的区别

面向过程

面向对象,面向对象更多的是先提取一个抽像的类,给这个类设置变量和方法,然后实例对象 -面向对象呢,对于初学者可能有点抽象,随着经验的积累,慢慢就会掌握这种解题思想

对于当今社会,分工越来越明细,各有所长,求专求精,很多生产生活的问题,不用去亲自去解决,只需要选择能够解决相应问题的服务商就可以,不用关心她具体是怎么做,只关心结果就好,其实就是面向对象的思想

下面通过一些列子来说明,面向过程

1.这个是解决一个资源消耗过高,需要发邮件报警的功能,面向过程呢 就将所有的逻辑从上到下进行编写,执行

while True:
    if cpu利用率 > 90%
#发送邮件
    链接邮件服务器
    发送邮件
    关闭链接

while True:
    if 硬盘利用率 > 90%
    链接邮件服务器
    发送邮件
    关闭链接

while True:
    if 内存利用率 > 90%
    链接邮件服务器
    发送邮件
    关闭链接

函数式编程

1.函数式编程呢,相对来说更简洁一些了,提取了一些共用的功能,封装到一个函数 例如,发邮件这个功能是三种报警情况都会用的,所有可以写成一个函数

while True:
    if cpu利用率 > 90%
            def 发送邮件(cpu报警):
while True:
    if 硬盘利用率 > 90%
        def 发送邮件(硬盘报警):

while True:
    if 内存利用率 > 90%
        def 发送邮件(内存报警):

面向对象编程

1.接下来用一个实例来说一下,面向对象编程 先来两个方法 init str 这是python中的魔法方法,一个是用来初始化数据的,一个是用来打印字符串的 他的特点是,对象不需要去调用这个方法,这个方法是默认调用的

## __init__ 方法
class Animal():
    def __init__(self):
        self.name = '旺财'
        self.age ='2'
    def eat(self):
        print('吃饭')

dog = Animal()
print(dog.name)

## __str__ 方法
class Car(object):
    def __str__(self):
        return '我是魔法方法'

    def getself(self):
        print(self)
        print('self=%s'%id(self))
bwm = Car()

面向对象编程思想,设计一个拳皇这样的小游戏,然后考虑都需要哪些元素

1.首先考虑一下里面的元素,有哪些? 肯定少不了游戏人物,技能,血量这些元素 2.然后我们用面想对象思想来映射 面向对象要素:类和对象,其中的类呢又有属性和方法 结合实际考虑,至少有一个类,可以把玩家创建一个类,现在英雄联盟比较火, 可以创建一个英雄类hero ,然后英雄有哪些属性呢,肯定有名字吧name ,然后还有一个重要的属性就是血量blood ,然后还需要哪些呢,很显然,要打斗就会有伤害技能,映射到面向对象就是方法,比tongren,qiangji,kanren等,然后可以把血量恢复一下,再加一个吃血的技能chiyao,然后就是给类实例化一下,创建几个玩家对象,然后使用对应的方法技能就能实现,简单的游戏场景 下面用代码实现一下:

class Hero(object):
    def __init__(self, name):
        self.name = name
        self.blood = 100
    def tong(self, enemy):
        enemy.blood -= 10
        print('%s 捅了%s一刀' % (self.name, enemy.name))
    def kanren(self, enemy):
        enemy.blood -= 15
        print('%s 砍了%s一刀' % (self.name, enemy.name))
    def kaiqiang(self, enemy):
        enemy.blood -=20
        print('%s 击中%s了一枪' % (self.name, enemy.name))
    def chiyao(self):
        self.blood += 10
        print('%s 吃了一颗药,加了10滴血' % (self.name))
    def __str__(self):
        return '%s 还剩余血量 %s' % (self.name,self.blood)

huasheng = Hero('花生')
baijing = Hero('白鲸')
print(huasheng)
print(baijing)
huasheng.tong(baijing)
# huasheng.tong(baijing)
# huasheng.tong(baijing)
baijing.kanren(huasheng)
huasheng.chiyao()
huasheng.tong(baijing)