zoukankan      html  css  js  c++  java
  • python学习笔记之--面向对象和面向过程

    首先,什么是面向对象?什么是面向过程?为什么要使用面向对象?函数与类的区别?

    面向过程:根据业务逻辑从上到下写垒代码

    函数式编程:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

    面向对象:对函数进行分类和封装,让开发"更快更好更强..."

    面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,
    开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处。

    while True:
        if cpu利用率 > 90%:
            #发送邮件提醒
            连接邮箱服务器
            发送邮件
            关闭连接
        if 硬盘使用空间 > 90%:
            #发送邮件提醒
            连接邮箱服务器
            发送邮件
            关闭连接
        if 内存占用 > 80%:
            #发送邮件提醒
            连接邮箱服务器
            发送邮件
            关闭连接

    随着时间的推移,开始使用了函数式编程,增强代码的重用性和可读性, 就变成了这样:

    def 发送邮件(内容)
        #发送邮件提醒
        连接邮箱服务器
        发送邮件
        关闭连接
        while True:
            if cpu利用率 > 90%:
                发送邮件('CPU报警')
            if 硬盘使用空间 > 90%:
                发送邮件('硬盘报警')
            if 内存占用 > 80%:
                发送邮件('内存报警')

    但是,函数不能存储数据,只能返回数据,每次数据使用之后就没有了,所以就有了类来管理数据:

    出一个场景:
    玩过一个游戏:主人公,进入了一个场景,有10个小怪物,每个怪物的模型是一样的:有攻击力,血(100格),皮肤,等;如果小怪物有多个数值需要管理,小怪物的血量、小怪物出现在屏幕的地点。
    {"blood":100,"location":"10,10"}
    [[100,(10,10)]]
    10 个小怪物。记住10个小怪物所有的变量在哪里,怎么操作?
    如果写一些函数,来操作这些数据。函数你实现的时候,你觉得需要实现哪些功能?
    10个方法:所有操作的数据的方法,而且10个小怪物需要写十组重复的代码来管理10个不同怪物的属性数据,代码很冗余也不方便维护。

    如果用类来管理这些数据,所有的方法放在类里来管理,10个小怪物生成10个实例化来操作

    函数实现:(如果有10个小怪物要写十个重复的这种代码,如果有更多呢?)

    add_blood():
        blood+=1
    minus_blood():
        blood-=1
    move():
        x-=10
        y-=10

    类来实现:

    class soldier(): #小怪物的类
    
        """小怪物的类"""
    
        def __init__(self,blood,location_x,location_y):
            self.blood = blood
            self.location_x = location_x
            self.lcoation_y = location_y
    
        def add_blood(self,num):
            if self.blood<=100:
                self.blood+=num
                if self.blood>100:
                    self.blood = 100
    
        def minus_blood(self,num):
            if self.blood>=0:
                self.blood-=num
                if self.blood<0:
                    self.blood = 0
    
        def tell_blood(self):
            return self.blood
    
    s1= soldier(100,10,10)
    s2= soldier(90,10,20)
    s3= soldier(80,10,30)
    
    print(s1.tell_blood())
    print(s2.tell_blood())
    print(s3.tell_blood())

    总结:
    ➢函数式编程的应用场景 --> 各个函数之间是独立且无共用的数据
    ➢面向对象编程的应用场景→各个函数公用一组数据

    函数式编程 和 面向对象 如何选择?

    须知:对于 C# 和 Java 程序员来说不存在这个问题,因为该两门语言只支持面向对象编程(不支持函数式编程)。

    而对于 Python 和 PHP 等语言却同时支持两种编程方式,且函数式编程能完成的操作,面向对象都可以实现;而面向对象的能完成的操作,函数式编程不行(函数式编程无法实现面向对象的封装功能)。

    所以,一般在Python开发中,全部使用面向对象 或 面向对象和函数式混合使用

    总结:面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象”来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

    ➢ 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
    ➢ 对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

    类和对象有什么不同?

    类描述了对象,它们就是创建对象的模板。

  • 相关阅读:
    敏捷开发
    Response.Write(js脚本)后 Response.redirect(...),为什么js脚本不执行,怎么解决!
    kaixin.com一波三折看SNS
    JavaScript数组的自定义 sort方法
    简单明了的SQL join解释
    [官方资料] 介绍 JSON
    SQL UNION 和 UNION ALL 操作符
    JavaScript frames 对象
    理解hasOwnProperty
    asp.net网站安全常见问题与防范
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11696824.html
Copyright © 2011-2022 走看看