AI基础入门:如何提高代码逻辑性和可复用性案列

5 阅读3分钟

如何做到逻辑性强,可复用性高呢?

  • 第一阶段是函数式编程

    依据高内聚,低耦合的思想,把部分逻辑代码封装到函数里边,可以在不同的地方去调用

  • 第二阶段是面向对象编程

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

    了解一些名词:类、对象、实例、实例化

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

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

    实例化:类——>对象的过程

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

    面向对象三要素, 封装、继承、多态。

    封装就是事物抽象为类,把对外接口暴露,将实现和内部数据隐藏。

    继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或“超类”。

    多态是指一类事物有多种形态, 多态性是指在不考虑实例类型的情况下使用实例。

    以王者荣耀中的角色去举例

    首先我们创建一个父类,把一些属性和方法封装进去

    class Role:
        speed = 10			# 走路速度
       	health = 100		# 生命值
        
        def run(self):		# 走的方法
            pass
        
        def attack(self):  # 攻击的方法
            pass
        
        def skill1(self):  # 技能1
            pass
        
        def skill2(self):  # 技能2
            pass
        
        def skill3(self):  # 技能3
            pass
        
        def skill4(self):  # 技能4
            pass
        
        def is_dead(self):        # 判断是否死亡
            if self.health <= 0:
                return True
            return False
    

    然后我们创建几个角色类别的类 去继承父类

    class Warrior(Role):
        category = '战士'
        health = 1000
        
    class Shooter(Role):
        category = '射手'
        health = 500
        
    class Master(Role):
        category = '法师'
        health = 500
    

    然后我们创建具体角色的类 去继承类别的类

    class YaSe(Warrior):
        name = '亚瑟'
        
        def skill1(self):
            pass
        
        def skill2(self):
            pass
        
        def skill3(self):
            pass
        
        def skill4(self):
            pass
        
    class Liyuanfang(Shooter):
        name = '李元芳'
        
        def skill1(self):
            pass
        
        def skill2(self):
            pass
        
        def skill3(self):
            pass
        
        def skill4(self):
            pass
    

    比如你这把选了英雄

    player = Yase() # 选了亚瑟
    # 或者
    player = Liyuanfang()  # 选了李元芳
    

    当控制角色走的时候, 调用

    player.run()
    

    当要放技能时, 调用

    player.skill1()
    player.skill2()
    player.skill3()
    player.skill4()
    

    通过is_dead方法去判断角色是否死了

    player.is_dead()
    

    我们在游戏控制器中封装一个统一的接口,不关心是哪个角色,只调用角色的run方法

    def run(obj):
    	obj.run()
    

    比如有一个亚瑟和李元芳的实例

    yase = Yase()
    liyuanfang = Liyuanfang()
    

    那么在调用他们各自的run方法时,直接调用接口, 无需考虑其他东西, 这叫多态性

    run(yase)
    run(liyuanfang)