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

    什么是面向过程编程?
    面向过程:
        是一种编程思想,就是前辈程序员发现的一种比较好的编程方法
    过程指的是: 先干什么 再干什么,完成一个事情所有的具体步骤;
    优点:把复杂的问题流程化,简单化,降低开发难度
    缺点:扩展差, 再当前这种情况下 用户需求千变万化 对扩展性要求非常高
    使用场景:不需要扩展,或是对扩展性要求不高,例如linux内核,shell 脚本 案例: 把大象装进冰箱 需要几步
    1.打开冰箱 2.装进大象 3.关闭冰箱

    面向过程中我们关注的点是,完成这个任务,具体的步骤 一步一步去完成
     
    什么是面向对象编程?
    面向对象:
        也是一种编程思想
    核心是对象,什么是对象?
    ·····对象:再现实生活中实实在在存在的,具备自己的特征和行为的事物 反过来说 对象就是 特征和行为(技能)的结合体
    如何来区分:如果能够准确的找到一个事物,它就是一个对象 例如:龚程的女朋友 面向对象编程:我们关注的点是.使用什么样的对象可以完成我的任务 例如:把大象装进冰箱,什么样的对象可以帮我完成这个任务,只要找到这个对象,命令它来做事情即可 你从一个操作者 变成了指挥者, 例如:西游记中的如来,他要完成一个传经,要把经书传到东土大唐取, 本来要自己去,但是太麻烦,所以找了唐僧师徒五个对象,来帮他完成这个任务 优势:
    1.对于指挥者(程序员)来说,不需要再关心具体步骤 2.扩展性,一个单独的个体的特征或行为发生变化时 不会影响到别人 缺点: 1.程序的复杂度变高,你得需要设计这个些对象,注意要避免过度设计得问题 2.程序得执行结果可控性低

     

    类与对象:

    类与对象
        类就是分类 类型的意思
        定义:一堆具备相同特征和行为的事物的抽象概念,不实际存在
        先有类还是先有对象:
            生活中:
            生活中类怎么来的,是通过对象的特征和行为抽取而来,
            所以是先有对象才有了类
    
            编程中:
            必须是先有类 才能有对象,因为你必须先告诉程序,你这个对象有什么样的特征和行为
    
        类的作用:用于描述该类的对象具备什么样的特征和行为

     

    实例:

    '''实现下面输出
    小明 ,10, 男 , 上山砍柴
    小明 ,10, 男 , 开车去东北
    小明 ,10, 男 , 最爱大保健
    老李 ,90, 男 , 上山砍柴
    老李 ,90, 男 , 开车去东北
    老李 ,90, 男 , 最爱大保健
    '''
    #函数式 表达
    def kuancai(x):
        print('%s ,%s, %s , 上山砍柴'%(x['name'],x['age'],x['mondx']))
    
    def kaiche(x):
        print('%s ,%s, %s , 开车去东北'%(x['name'],x['age'],x['mondx']))
    
    def dabaojian(x):
        print('%s ,%s, %s , 最爱大保健'%(x['name'],x['age'],x['mondx']))
    name1 = ['小明','10','']
    name2 = ['老李','90','']
    kuancai(name1)
    kaiche(name1)
    dabaojian(name1)
    kuancai(name2)
    kaiche(name2)
    dabaojian(name2)
    # 面向对象 表示:
    class ZhuangBi:
        def __init__(self,name,age,gender):
            self.name = name
            self.age = age
            self.gender = gender
        def kanchai(self):
            print('%s ,%s, %s , 上山砍柴' % (self.name, self.age, self.gender))
        def kaiche(self):
            print('%s ,%s, %s , 开车去东北' % (self.name,self.age,self.gender))
        def dabaojian(self):
            print('%s ,%s, %s , 最爱大保健' % (self.name, self.age, self.gender))
    
    name1 = ZhuangBi('小明',10,'')
    name2 = ZhuangBi('老李',90,'')
    name1.kanchai()
    name1.kaiche()
    name1.dabaojian()
    name2.kanchai()
    name2.kaiche()
    name2.dabaojian()
    # 上述对比可以看出,如果使用函数式编程,需要在每次执行函数时传入相同的参数,如果参数多的话,
      又需要粘贴复制了... ;
    # 而对于面向对象只需要在创建对象时,将所有需要的参数封装到当前对象中,之后再次使用时,
    通过self间接去当前对象中取值即可。

     

    类与对象的简介:

    类与对象:
        类就是分类 类型的意思

    定义:一堆具备相同特征和行为的事物的抽象概念,不实际存在
    先有类还是先有对象? 例(生活中): 生活中类怎么来的,是通过对象的特征和行为抽取而来,所以是先有对象才有了类 编程中: 必须是先有类 才能有对象,因为你必须先告诉程序,你这个对象有什么样的特征和行为
    类的作用:用于描述该类的对象具备什么样的特征和行

     

    简单的使用:

    class beidaStudent:
        # 如果每个对象的这个属性都相同 才应该定义到类中 比如所有人的学校都是 北大

    school = "北大xxx" # 创建对象 # 语法: 在类名后加括号 与调用函数写法相同 stu = beidaStudent() # 访问对象的属性 print(stu.school) print(beidaStudent.school) # 修改属性的值 stu.school = "清华xxx" print(stu.school) # 增加属性 stu.room_num = "A4B4" print(stu.room_num) # 删除属性 del stu.room_num print(stu.room_num)
    ps:# 对象的属性查找顺序
        # 对象自己的名称空间 -> 类的名称空间

    绑定方法:*****

    class Person:
        country = "China"
    
        def __init__(self,name,age,gender):
            self.name = name
            self.age = age
            self.gender = gender
    
        def sleep(self):
            print("sleeping")
            print(self)
    
        def eat(self):
            print("eating")
    """
    # 类调用与对象调用的区别
    # 对于类而言 sleep就是一个普通函数
    # 对对象而言 sleep是一个绑定方法
    
    # 绑定方法是什么?
    # 是对象与类中的某个函数的绑定关系 
    例如:就像生活中 我们都会吃饭 我吃饭你不会饱,那么吃饭就是我自己的绑定方法
    
    # 为什么要把函数进行绑定? 
    #  因为对象的行为 通常都需要访问这个对象的数据 或是修改这个对象的数据 
    #  如果没有对象 直接调用函数是没有意义的 在函数中访问不到对象的数据 
    #  所以将对象和函数进行绑定
    
    # 特殊之处
    #  在使用绑定方法时  不需要关心self参数 会自动将这个对象本身传进来 
    # 对象调用绑定方法时 最后执行的还是类中的那个函数
    """

    __init__函数:*******

        # __init__称之为初始化函数  它会在创建对象的时候自动执行
        # 创建对象时
        # 1.创建一个空对象
        # 2.执行__init__函数 并且自动传入了这个对象
    # 该函数的作用,就是为对象的属性赋初始值
    #1. 使用场景 需要为每个对象定制不同的属性值
    #2.__init__在创建对象后自动执行
    #3.第一个self参数 指的是这个对象本身 不需要手动传值

     eg: a = A('小明',18)

    这是的a 是 A的实例对象,同时A中__init__会执行,

    假如 

    class A:
        def __init__(self,name,ageg):
            self.name = name
            self.age = age

    需要注意的是: 上面的self 指的是 a,此时的 a 只是一个没有任何东西的 变量,当执行__init__方法的时候 把 变量 a 传入 self (可以理解为self = a) ,那么self.name ==  a.name,self.age ==  a.age

    把A()参数传入 __init__,就有了   a.name = '小明' , a.age = 18.

     
  • 相关阅读:
    [转]C#里 泛型Where和 new()的使用
    测试
    C#中的static、readonly与const的比较
    将字符串格式化变为两位
    在VS中对字段进行包装
    安装mysql的心得
    关于mysql数据库的乱码问题
    timestamp的两个属性:CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP
    解决向数据库mysql插入double数据小数点不显示问题
    JDBOOK
  • 原文地址:https://www.cnblogs.com/TF511/p/9831903.html
Copyright © 2011-2022 走看看