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

    一、什么是面向过程?

      核心是过程,过程指的是解决问题的步骤,即按部就班,先干什么再干什么....面向过程的设计好比一条流水线,是一种机械式的思维方式。

      优点:复杂的问题流程化,逻辑清晰,从而简单化,分成固定步骤去实现

      缺点:扩展性差,不便于维护和修改

      使用场景:对扩展性要求较低的程序:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,计算器等

    记住:不是所有程序都要面向对象,得分析具体需求  

    二、什么是面向对象?

      面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计思想。

      它是将对象作为程序的基本单元,将数据和处理的程序封装到对象中去

      面向对象的例子:

      1、把大象装进冰箱如何实现

      2、要开一家公司

      优点:扩展性强,灵活性,重用性(复用性)

      缺点:程序的复杂程度提高了:无法准确的预知结果

      使用场景:对扩展性要求较高的程序,通常是直接面向用户的,列如:微信 QQ 大型网游等

    三、类与对象

      1、什么是类?

      类和对象是面向对象编程中最核心的两个概念

        类就是类型,类别,种类;是一系列对象中相似特征与技能的结合体,比较抽象的概念,如人类是不具体的

      2、对象是什么?

        对象是特征与技能的结合体:

          如:演员张一山,姓名和职业是他的特征,演戏是他的行为,按照这样的定义,生活中到处都是对象

        在程序中:用变量来表示对象的特征,用函数来表示对象的技能

        将这些变量和函数结合在一起,形成一个整体,就是对象,这是面向对象的精髓所在!

      3、对象和类的关系:

        类包含一系列对象,对象属于某个类,在生活中是先有对象再有类的

        而在程序中是先有类才能有对象的,我们必须先告诉计算机这类的对象有什么特征有什么行为;

    总结出一个结论:在使用面向对象编程的时候,第一步就是思考需要什么样的对象,对象具备什么样的特征和行为

    从而根据这些信息总结出需要的类型

    四、创建类和对象:

      1、定义类的固定语法:

        定义类通过class关键字:class后面紧接着是类名

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

    2、创建对象的语法: 

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

     

     3、属性的写法

      属性可以写在类中,类中的属性就是对象公共的

      如果类中和对象中存在同样的属性,先访问对象,如果没有再访问类

    class Teacher:
        school="oldboy" # 公共属性
    
    t1=Teacher()
    t1.name="JAMES"
    t1.age=20 
    #  定义了三个属性

       

    4、属性的增删查改

    增加属性:
        对象变量名称.属性名称=属性值
        t1.name=18
    
    删除属性:
        del 对象的变量名称.属性名称
    修改属性:
        对象.属性=新的值
         t1.name=18
         t1.name=20
    查看属性:访问的是对象的所有属性
    
    print(对象.——dict——)
    # print(Person.__dict__)
    
    访问对象的类信息
    print(对象.__class__)
        

    五、初始化方法:__init__

      什么是初始化?

      用于为对象的属性设置初始值的函数

    class Student:
    
        def __init__ (self,name):
    
            print("init run")
    
            self.name = name  # 等价于内置 学生的属性

      __init__函数要求第一个参数必须是self,该参数表示需要初始化的对象本身,这样就可以将name属性绑定到对象上

      def __init__(self,)  self不能修改,且不能为空,必需传参

      练习:创建一个类具备几个属性,通过初始化方法来给他设置属性?

    class Dog:
        def__init__(self,kind,color,age):
                self.kind=kind
                self.kind=color
                self.age=age
    
    di=Dog("哈士奇",“黑白”,1.5)
    d2=Dog("泰迪",“棕色”,2)
    
    
    
    注意:该函数不能有任何返回值/.... 只能是None  规定如此..(即不带有retur

    小结:

    • init函数用于为对象属性设置初始值
    • 在创建对象时会自动调用
    • 自动传入对象本身

    六、 属性的查找顺序

      如果类中和对象中存在同样的属性,先访问对象,如果没有再访问类

     优先查找对象自己的名称空间,如果没有则在类中找,如果类中也没有则到父类中找,直到找到为止,如果父类中也没有则抛出异常

     
    class Student:
        school = "Tsinghua" #数据属性
    def say_hello(self):#函数属性

    print("hello i am a student")
    def __init__ (self,name): #初始化函数 self.name = name

    属性查找顺序:对象->类->父类

    七、对象的绑定关系:

      一:绑定方法

      1.绑定到对象的方法:没有被任何装饰器装饰的方法。

      在类中定义的函数默认都是绑定到对象的方法

      特点:参数的第一个必须是self 表示当前对象本身,使用对象来调用,调用时会自动传入对象

      2.绑定到类的方法:用classmethod装饰器装饰的方法。

      特点:参数的第一个必须是cls表示当前类本身,使用类名来调用,调用时会自动传入类

      

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

      当使用对象调用该函数时会自动传入对象本身,作为第一个参数,当使用类名来调用时它就是一个普通的函数,有几个就的传几个参数

      练习:写一个学生类,具备一个打招呼的技能 要能输出自己的名字信息

    class Student:
        def __init__(self,name):
            self.name=name
    
        def say_hi(self):
                print("hello my name is %s" %self.name)
    
    stu1=Student("jsaon")
    stu1.say_hi()
    
    Student.say_hi(stu1)  #相互之间的传参
    
    结果:
    >>hello my name is jsaon >>hello my name is jsaon #绑定到对象的方法

       2、类的绑定关系:

      类绑定的方法用@classmethod 来装饰   

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

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

    class OldBoyStudent:
        school = "oldboy"
        def __init__(self,name):
            self.name = name
        @classmethod
        def show_school(cls):
            # print(self.school)
            print(cls)
        @staticmethod
        def print_hello():
            print("hello world")
     

    二、非绑定方法(了解)

     

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

    语法:@staticmethod

    不常用

    class OldBoyStudent:
        school = "oldboy"
        def __init__(self,name):
            self.name = name
        @classmethod
        def show_school(cls):
            # print(self.school)
            print(cls)
        @staticmethod
        def print_hello():
            print("hello world")

     

      

      

      

      

      

      

      

     

      

  • 相关阅读:
    JAVA规范
    JMS开发指南
    JMS异步消息机制
    大型系统中使用JMS优化技巧–Sun OpenMQ
    02.MyBatis配置文件详解
    elasticsearch.yml配置文件
    04.ActiveMQ与Spring JMS整合
    01.MyBatis入门
    03.JMS深入
    02.JMS基础
  • 原文地址:https://www.cnblogs.com/Gaimo/p/11240227.html
Copyright © 2011-2022 走看看