zoukankan      html  css  js  c++  java
  • 面向对象

    面向对象编程思想

    什么是面向对象

      面向对象是一种编程思想,是前辈们总结出的经验,知道程序员如何编写出更好的程序

      核心是对象 城西就是一系列对象的集合体  程序员负责调度控制这些对象来交互这完成任务

    为了更好的理解面向对象  那就来几个案例吧!!!

    案例一   把大象装冰箱    分为面向对象和面向过程分别解释

        面向过程  
    首先将这个事情分析一下,要想把大象装冰箱,大致分为几步
    1 首先打开一个冰箱门 2 将大象装入冰箱 3 最后将冰箱门关闭 这样子就是注重过程的方式, 所以也叫面向过程,事情的操作步骤一步一步都做出来
        

        面向对象
    这个说起来就简单多了,因为不需要自己手动操作,而是去直接寻找一个会将面向过程中三个步骤做出来的人就可以了
    这个人 就是我们所说的 '对象' 这个对象首先是一个具体存在的 而且可以帮助我们完成我们想完成的事情

    注意 这里的对象不是凭空产生的 是需要我们自己设计

    案例二  西天取经

    故事设这样子滴,从前,有一个老头,叫如来,他自己的书柜里面书太多了,
    但是呢,对自己又没有一点实际作用,所以就想将这些破书传达给世人,
    但是他心想,我TM这么NB的一个糟老头子,还能亲自去送不行,就想这么
    将这些书送给世人,刚好在想的同事同时,他的大弟子在听他受经的时候打瞌睡
    ,正好 ,那就你去吧,如来将他打入人间,并且给了他三只宠物和一只坐骑,
    同时还给他们设定了那么一点点游戏的体验,强行将他们5个历经九九八十一难又回到天竺,
    最后取到那一堆破书,再发放到世人手中,追后加官进爵,把他们收入囊中,以后再用 这个故事中 如来就扮演者一个上帝角色,只是找到了他们5个,让他们凑在一起,而他在途中只负责调度控制他们5个 而且其中真假美猴王 也可以看出 最后如来收了一只猴子 其实我们也不知道他到底收了真的假的
    有可能是真猴子太不负管教 如来只能自己创建一个对象 辅助自己完成任务 但是这一过程 不管收了谁 貌似对其他任何一个对象都没影响 所以 在面向对象编程时候 如果某个对象发生变化 也不会影响其他的对象及扩展性

    面向对象优,缺点,使用场景

     三大优点:

      1 扩展性

      2 灵活性

      3 重用性

        缺点:

      1 程序的复杂度提高了

      2 无法准确预知结果

      使用场景:

      对扩展性要求较高的程序,通常是直接棉线用户的   例如   QQ   VX

    面向过程编程思想

    面向过程的核心是什么   当然是过程    过程是什么    就是一步一步需要的执行步骤    说白了就是先干哈在干哈

      优点:

        逻辑清晰, 复杂问题简单化,流程化

           缺点:

        扩展性差,可维护性差

      使用场景:

        对扩展性要求低的程序    例如   系统内核,git,计算器

      

    注意    不是所有的程序都要面向对象编程    要看具体需求

    类和对象

    这两个是OOP中最核心的两个概念

    类   类别  是一种抽象的概念   类是一系列具备相同特征的相同行为的对象的集合

    对象  是一个具体存在的一个事物  具有自己的特征的行为    对象是特征和技能的结合体


    类和对象的关系

    创建类和对象

    定义类的语法

    class 类的名称:    

    # 类中的内容 描述属性和技能    
    #描述属性用变量    
    #描述行为用函数
    ​#类名称 书写规范 首先是见名知意 名称是大驼峰命名法  
    #驼峰就是单词首字母大写 , 大驼峰是第一个字母大写,小驼峰是第一个字母小写​

    创建对象的语法:

    class Person:
        pass
    
    #创建对象 
    p = Person()

    属性的写法:

    属性可以写在类中 
    类中的属性,是所有对象公共的 
    
    也可以写在对象中 
    对象中的属性,是每个对象独特的(不一样的)
    
    
    如果类中和对象中存在同样的属性,先访问对象 如果没有在访问类 
    
    
    练习: 描述一个老师类 需要包含 一个公共属性和 一个独特的属性 
    
    class Teacher:
        school = "oldboy"
        
    t1 = Teacher()
    t1.name = "jack"
    t1.age = 28

    属性的增删改查

    增加属性 
    对象变量名称.属性名称 = 属性值
    
    删除属性
    del 对象的变量名称.属性名称 
    
    修改 
    对象.属性 = 新的值 
    
    查看属性  访问的是对象的所有属性 
    print(对象.__dict__)
    
    访问对象的类信息
    print(对象.__class__)

    __init__方法

    叫做初始化方法,本质上就是一个函数

    特点1: 当实例化 对象时,会自动执行init方法

    特点2:会自动将对象作为第一个参数传入,参数名称位self ,self可以是别的名字,但不建议改


    功能:用户给对象赋初始值

    # 练习:创建一个类具备几个属性,通过初始化方法来给他设置属性 
    
    
    
    class Dog:
        def __init__(self,kind,color,age):
            self.kind = kind
            self.color = color
            self.age = age
    
    d1 = Dog("二哈","黑白",1)
    d1 = Dog("泰迪","棕色",2)
    
    
    # 注意:该函数不能有任何返回值/.... 只能是None  规定如此..
    练习

    对象的绑定方法

    默认情况下类中的方法都是对象绑定方法

    其特殊之处在于,

    当使用对象调用该函数时会自动传入对象本身,作为第一个参数

    当使用类名来调用时他就是一个普通函数,有几个参数就得传几个参数

    写一个学生类,具备一个打招呼的技能 要能输出自己的名字信息
    
    class Student:
        
        def __init__(self,name):
            self.name = name
         
        def say_hi(self):
            print("hello my name is %s" % self.name)

    类绑定方法与非绑定方法

    绑定方法

    类绑定方法用@classmethod来装饰

    特殊之处:不管用类还是对象调用,都会自动传入类本身,作为第一个参数

     

    什么时候绑定给对象:当函数逻辑需要访问对象中的数据时

    什么时候绑定给类:当函数逻辑需要访问类中的数据时

     

     

    非绑定方法

    或叫做静态方法,就是即不需访问类的数据,.也不需要访问对象的数据

    语法:@staticmethod

    不常用

     

  • 相关阅读:
    C#---将数据库数据转换为json格式
    ASP.NET ---根据值让树中某一节点选中
    SQL---查询树中某个节点及其所有子节点
    CSS---相对定位笔记
    CSS---绝对定位笔记
    滑雪
    Self Numbers
    Lotto
    Parencodings
    Robot Motion
  • 原文地址:https://www.cnblogs.com/xuzhaolong/p/11240308.html
Copyright © 2011-2022 走看看