面向对象编程的基本知识

面向对象与面向过程

面向过程:一开始是为了科学计算而出现的(就像算数学题一样,就是一步一步解题的过程)。编程的方法是自顶向下。代码的主体:程序=数据(变量)+算法(函数/过程)(这感觉就像在刷题的时候遇到的那些题)。通过函数/过程操纵表现世界的数据与状态。

面向对象:后来软件应用领域的扩张,是为了模拟现实世界的(现实世界就像人与人的交往一样)。编程方法是自底向上。代码的主体:程序=对象+交互(实际项目中才会有那么多的对象和交互吧)。把世界描绘成具有主动性的对象之间交互。

对象

对象可以指自然界中的任何事物;计算机为解决某个领域问题所使用的事物(自然界中的事物的模型化);事物(对象)具有自身的特征或能力;计算机中的对象具有解决问题所需的特征或能力。

对象的特征

封装:将模型的特征和能力打包在一起;模型的改变由模型自身来完成,就像自然界的事物一样;隐藏模型的细节,外界只能使用它,而不必/不能改变他。

继承:符合自然界的分类规律;快速的代码重用。

多态:子类可以继承父类的特征与能力,还可以自定义修改其特征与能力;鸭子类型(后面补充)。

组合:一个模型可以由其他模型组成

练习去:

一款简单自动运行小游戏模拟:在一维的地图上,有一只虫子和一只蚂蚁。
每一次他们都走过一个-3,-2,2,3个随机单位的距离(选定走法,若达
到地图边界则放弃移动)。当蚂蚁、虫子处于同一位置时,蚂蚁吃掉虫子,
程序结束。

面向过程:

import random

class Sprite:

    step = [-2,+2,-3,+3]

    def __init__(self,gm,point=None):
        self.gm = gm
        if point is None:
            self.point = random.randint(0,20)
        else:
            self.point = point

    def jump(self):
        astep = random.choice(Sprite.step)
        if 0 <= self.point + astep <= 20:
            self.point += astep

class Ant(Sprite):

    def __init__(self,gm,point=None):
        super().__init__(gm,point)
        self.gm.set_point('ant',self.point)

    def jump(self):
        super().jump()
        self.gm.set_point('ant',self.point)

class Worm(Sprite):

    def __init__(self,gm,point=None):
        super().__init__(gm,point)
        self.gm.set_point('worm',self.point)

    def  jump(self):
        super().jump()
        self.gm.set_point('worm',self.point)

class GameMap:
    def __init__(self):
        self.ant_point = None
        self.worm_point = None

    def catched(self):
        print('ant:',self.ant_point,'worm:',self.worm_point)
        if self.ant_point is not None and self.worm_point is not None and self.ant_point == self.worm_point:
            return True

    def set_point(self,src,point):
        if src == 'ant':
            self.ant_point = point
        if src == 'worm':
            self.worm_point = point

if __name__ == '__main__':
    gm = GameMap()
    worm = Worm(gm)
    ant = Ant(gm)
    while not gm.catched():
        worm.jump()
        ant.jump()

面向对象:

import random

ant_point = random.randint(0,20)
worm_point = random.randint(0,20)
print('ant_point:',ant_point,' worm_point:',worm_point)

step = [-2,+2,-3,+3]

while ant_point != worm_point:
    astep = random.choice(step)
    if 0 <= ant_point + astep <= 20:
        ant_point += astep

    astep = random.choice(step)
    if 0 <= worm_point + astep <= 20:
        worm_point += astep
    print('ant_point:',ant_point,' worm_point:',worm_point)

写的又全又好:python 面向对象全面详解_日入上万-CSDN博客_python面向对象

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值