Python中的面向对象编程的一些基本概念总结

一、一些专有词汇的定义

 

  • 面对对象编程(OOP:object oriented programming): 是一种程序设计范型,同时也是一种程序开发的方法,实现OOP的程序希望能够在程序中包含各种独立而又相互调用的对象,没一个对象又都应该能够接受数据、数据处理并将数据传达给其他对象,因此每一个对象都可以被看做一个小型的机器,而整个程序块系统就是由这些小的机器相互协助、组合构建起来的。
  • 面对对象分析(OOA:objecet ariented analysis):即根据抽象关键的问题域来分解系统
  • 面对对象设计(OOD:object oriented design):是一种提供符号设计系统的面向对象的实现过程,他用非常接近时机领域属于的方法吧系统构造成现实世界的对象。
  • 类(class):告诉Python创建新类型的东西。
  • 对象(object):两个意思,即最基本的东西,或者某样东西的实例
  • 实例(instance):这是让Python创建一个类时得到的东西
  • def:这是在类里面边定义函数的方法
  • self:在类的函数中,self指代被访问的对象或者实例的一个变量
  • 继承(inheritance):指一个类可以继承另一个类的特性,和父子关系的类似。
  • 组合(composition):指一个类可以将别的类作为他的部件构建起来,有点像车子和车轮的关系
  • 属性(attribute):类的一个属性,它来自于组合,而且通常是一个变量
  • 多态:就是指不同的实例(对象)都拥有相同的属性和方法,而这些相同的属性和方法在不同情形有着不同的表现
  • 多态性:指出了对象如何通过他们共同的属性和动作来操作及访问,而不需考虑他们具体的类
  • 封装:描述了对数据信息进行隐藏的观念,他对数据属性提供接口(接口函数)和访问方法
  • 是什么(is-a):用来描述继承关系
  • 有什么(has-a):用来描述某个东西是由另外一些东西组成的,或者某些东西有某些特征。
  • 公有属性:类内外都可以被访问
  • 私有属性:只能被类内函数调用,以'__'开头
  • 内置属性:系统在定义类时默认的添加,命名格式为'__X__'
  • 实现继承:子类的属性和方法完全继承于父类
  • 可视继承:子类继承父类的外观方法
  • 接口继承:子类的属性明和方法名继承于父类,但是具体的属性值和方法实现由子类重写
  • 多重继承:即组合继承,在java和c#中使用接口概念来实现多重继承的效果,而Python中定义类的时候,可以直接继承多个弗雷来实现多重继承。在实现多重继承时,如果继承的多个父类中均有名称相同的方法时,需要注意继承的顺序。
  • 泛化:表示所有子类与其父类及祖先类有着一样的特点
  • 特化:描述所有得子类的自定义,也就是说,什么属性让它与其父类一同。
  • 子类(派生类):通过继承来创建的新类叫子类
  • 父类(基类,超类):被继承的类称为“基类”、“父类”或“超类”
  • 自省、反射:自省也称作反射,这个性质展示了某对象是如何在运行期取得自身信息的。如果传一个对象给你,你可以查出它有什么能力,这是一项强大的特性。

 二、是一些代码以及用来描述代码的句子

  • class X(Y):创建一个叫X的类,它是Y的一种
  • class X(object):def __init__(self, J):类X有一个__init__,他接受self和J作为参数。
  • class X(object):def M(self, J):类X有一个名为M的函数,它接受self和J作为参数。
  • foo = X(): 将foo设为类X的一个实例
  • foo.M(J):从foo中找到M函数,并使用self和J参数调用它。
  • foo.K = Q:从foo中获取K属性,并将其设为Q

三、来进行详细的解释 

1、对象(object)
对象是数据和操作数据的方法的结合
对象的状态(数据):一个对象用数据值来描述他的状态,也称为对象属性
对象的行为(操作):对象的行为用于改变对象的状态,也称为对象方法
对象的唯一性(句柄):即对象名称,每一个对象都有自身唯一的标识,通过这种标识,可以找到相应的对象。在对象的整个生命周期中,他的标识都不会改变。
对象之间的通信:对象之间进行通信的结构叫做消息,当一个消息发送给某个对象时。消息应该包含下面几种信息:

①接收消息的对象名(目的对象名)

② 接受对象去执行某种操作的信息(调用方法名)

③发送给该对象参数,参数可以使该对象有的变量名,或者是所有对象都知道搜的全局变量名

④发送给该对象的消息名(源消息名)

2、类(class)
对象的抽象是类,类的具体个性化就是对象
类的属性:他是对象的状态的抽象,用数据结构来描述该类的属性,也称为成员属性
类的方法:他是对象行为的抽象,用操作名和实现该操作方法来描述,也成为成员方法
类的结构:在客观世界中有若干类,这些类之间有一定的结构关系,通常有下面两种主要结构关系:

①一般/具体结构称为分类结构,也可以说是is-a关系。用来描述在继承中子类与弗雷的关系,即一个派生类的实例化对象是其副类的一个例子,所以是is-a关系

②整体与部分结构称为组装结构,他们之间的关系是has a 关系。组合是是实现继承的方式之一,在组合继承中,一个子类可以有多个父类,即一个自类has a 一个父类

3、OOP的有三个基本特征:封装、继承、多态
封装:描述了对数据信息进行隐藏的观念,他对数据属性提供接口(接口函数)和访问方法。在类的设计时,微数据提供此相应的接口,一面客户程序通过不规范的操作来存取封装的属性。
封装的目的:就是把客观事物抽象并封装成类,封装好的每一个类都是独立的,而由实例化创建的对象也是如此。对象之间只能通过消息这种通信结构来实现通讯。这样能够实现:累自己的数据和方法只让可信的类或者对象操作,对不可信操作的进行信息隐藏。为类和对象中的方法、属性提供了安全的保障。
封装的作用:一个类就是一个封装了数据以及操作这些数据的方法的逻辑实体。在一个对象的内部,某写方法或者属性可以私有的(实例化对象将类定义的私有属性和方法个性化),他们不能被外界访问。通过封装,为对象内部的数据提供了不同级别的保护,一方程序中无关的部分意外的改变或错误的使用了对象的私有部分。即隐藏了类的功能实现细节,使代码模块化(松耦合,高内聚)。
封装的意义:一般的,我们会认为程序=数据结构+算法,在OOP中,因为封装的村子啊,我们会将这条等式转化为程序=对象+消息

继承

继承令不同类之间拥有了一定的结构与关系。

类之间的关系:①通过继承创建的新类称为“子类”或“派生类”

                         ②被继承的类称为“基类”、“父类”或“超类”

通过继承得来的子类能够保留父类中所有需要的数据和行为,同事允许修改或者其他自定义的操作,这些都不会影响到父类。换句话说,继承的新类(子类),能够使用被继承(父类)的所有功能,并且继承后的子类能够在无需重写这些属性和方法的情况下对父类的功能进行扩展。所以说,继承就是从一般(父类)到特殊(子类)的过程。所以继承最明显的好处在于代码的复用。
泛化:表示所有子类与其父类及祖先类有着一样的特点
特化:描述所有得子类的自定义,也就是说,什么属性让它与其父类一同。
实现继承的方式:可以通过继承和组合来实现,其中继承又有实现继承和可视继承,组合又有接口继承和纯虚类
实现继承:子类的属性和方法完全继承于父类
可视继承:子类继承父类的外观方法
接口继承:子类的属性明和方法名继承于父类,但是具体的属性值和方法实现由子类重写
多重继承:即组合继承,在java和c#中使用接口概念来实现多重继承的效果,而Python中定义类的时候,可以直接继承多个弗雷来实现多重继承。在实现多重继承时,如果继承的多个父类中均有名称相同的方法时,需要注意继承的顺序。

多态
多态概念指出了不同对象如何通过他们共同的属性动作来操作以及访问,而不需要考虑他们的具体的类,多态表明了动态绑定(运行时)的存在,允许重载及运行时类型确定的验证。
多态就是指不同的类实例(对象)都拥有相同的方法和属性,而这些相同的方法和属性在不同的情况有着不同的表现形式。多态机制使用不同的对象可以共享相同的外部接口(属性明、方法名)。这意味着,虽然针对不同对象的具体操作(方法实现)不同,但通过一个公共的类,他们可以通过相同的方式(属性名、变量名)给予调用。即在不同的对象中可以定义同名属性或方法,但是属性值或方法实现却是各部相同的。
多态的作用:实现接口的重用,保证了在类发生继承或派生时,我们仍然能正确调用这些相关类的实例化对象的属性和方法。

参考:

  1. https://blog.csdn.net/Jmilk/article/details/50700583
  2. 《Learn PYTHON 3 the HARD WAY》第二版

 

 

你可能感兴趣的:(Python学习笔记)