zoukankan      html  css  js  c++  java
  • 面向对象(一)-初步认识

    一 面向对象和面向过程

    什么面向过程,什么是面向对象,二者之间有什么区别?

    答:这是两种不同的开发代码的模式.

    • 面向过程开发(Procedure Oriented Programming,POP):按照业务的逻辑顺序,通过函数来实现某一功能,从上到下逐一调用函数的过程,比较适合功能变化不多的场景,C语言编写操作系统。

    • 面向对象设计(Object Oriented Programming,OOP):将数据与对数据的操作看做一个整体即对象,以对象为中心的编程思想,以对象的⻆度去处理问题,通过对象之间的操作完成任务。这种编程理念更符合我们人的逻辑思维。使用面向对象编程可以提高我们的开发速度和代码的重用率,适合于变化多,场景复杂情况。

    通俗理解:

    ​ 面向过程----老板自己独自作战----所有的事情都需要自己去玩,亲力亲为

    ​ 面向对象---老板雇佣员工---老板分配职责,发号施令

    二 面向对象的相关概念

    (一)类和对象概念

    1 类和对象

    类:将多个对象共同具有的特征和行为抽象出来,定义一个名字

    示例:物以类聚,人以群分

    对象:具有特征和行为的一个具体概念,强调具体

    2 类和对象之间的关系
    • 对象通过类来创建产生
    • 一个类可以有多个对象
    • 一个对象只能属于某一个类
    3 区分类和对象
    笔记本   # 类
    ThinkPad笔记本   # 类
    t440s ThinkPad笔记本  # 类
    编号为123123的t440s笔记本  # 对象
    
    
    汽车  # 类
    宝马汽车  # 类
    5系宝马  # 类
    楼下停着的那辆5系宝马车  # 对象
    

    (二) 属性和方法

    • 属性:描述一个对象具有的特征,一个名词性概念,静。
    • 方法:描述一个对象具有的行为,一个动词,动。

    三 如何实现类

    #类的定义格式
    class 类名:
        def __init__(self):
            """定义属性:描述特征"""
            self.属性1 = 属性值1
            self.属性2 = 属性值2
            ...
        
        def 方法1(self):
            """具体描述的行为1"""
            pass
        
        def 方法2(self):
            """描述的行为2"""
            pass
        
        ...
    
    # 通过类创建对象,如果init函数中有参数则需要传入
    对象名 = 类名()
        
    # 对象调用具体属性和方法
    # 调用属性
    对象名.属性名
    # 调用方法
    对象名.方法名()   # 传参时不需要给self传
    

    说明:

    • class:关键字,用于声明一个类。
    • 类名:标识符,遵循标识符规则,使用大驼峰命名法:每个单词的首字母大写
    • 描述对象特征:在__init__方法中定义对象的属性
    • 描述行为:在类中定义方法,同函数。
    • 每一个方法都需要一个固定的参数,self。

    面向对象设计

    面向对象程序设计开发,是一种成熟的程序设计开发方式,有固定的开发步骤,通常包含如下四个环节:

    • 面向对象分析(OOA:Object-Oriented Analysis):从用户需求出发,分析项目中需要解决的问题,抽象项目中的功能和互相依赖的关系,确定功能开发过程中的限制条件

    • 面向对象设计(OOD:Object-Oriented Design):根据分析得到的具体的问题,抽取参与解决问题的对象

    • 面向对象编程(OOP:Object-Oriented Programming)

    • 编程对象测试(OOT:Object-Oriented Testing)

    四 self的作用

    self谁调用我,我就是谁-----哪个对象调用某个方法,那么该方法的self就是该对象

    class Person:
        def __init__(self,name,age,height):
            """描述一个人的特征"""
            self.name = name
            self.age = age
            self.height = height
    
        def eat(self):
            """描述吃饭行为"""
            print(f"self的内存地址是{id(self)}")
            print(f"{self.name}中午吃的是阿明煲仔饭,吃出了头发~")
    
    
        def sleep(self):
            print(self.age)
    
    zs = Person('zs',20,180)
    ls = Person('ls',22,175)
    
    print(f"zs的内存地址是{id(zs)}")
    zs.eat()
    print('======================')
    print(f"ls的内存地址是{id(ls)}")
    ls.eat()
    

    属性和变量区别

    属性:self.属性名 = 值,可以在整个类的内部任何方法中使用。

    变量: 变量名= 值,变量只能够在某个函数内起作用。是一个局部变量

    五 属性和方法

    实例属性和方法都是描述具体某一个对象的。

    实例属性:指在__init__方法中定义的属性

    实例方法:指方法中具有一个参数self.

    六 对象的创建过程

    对象创建过程:__new__方法创建对象并将对象返回给__init__方法,__init__方法对该对象进行初始化操作

    问题:__new__和__init__方法哪个先执行?

    _new_ 方法

    class Person:
        def __new__(cls, *args, **kwargs):
            """创建一个对象"""
            print("执行了new方法")
            return object.__new__(cls)
    
        def __init__(self,name):
            """实例初始化方法"""
            print("执行了init方法")
            self.name = name
    
    
        def eat(self):
            print('eat')
    
    
    
    ls = Person('ls')
    print(ls)
    ls.eat()
    

  • 相关阅读:
    Autodesk vasari Design better buildings
    NOOK2刷机成功
    使用DirectPlay进行网络互联(2)
    程序员的灯下黑:不要忘记你的目标
    【ZT】中西医的区别
    D3D中公告板的使用示例
    使用DirectPlay进行网络互联(1)
    使用DirectPlay进行网络互联(4)
    计算几何常用算法概览
    DirectX9.0教程之ID3DXSprite篇[转载]
  • 原文地址:https://www.cnblogs.com/duxiangjie/p/14097119.html
Copyright © 2011-2022 走看看