面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。
Object
可以对其做事情的一些东西。一个对象有状态、行为和标识三种属性。
An object is a bundle of state and behavior
▪ State – the data contained in the object. – In Java, these are the fields of the object
▪ Behavior – the actions supported by the object – In Java, these are called methods – Method is just OO-speak for function – invoke a method = call a function
Class
一个共享相同结构和行为的对象的集合。类(Class)定义了一件事物的抽象特点。通常来说,类定义了事物的属性和它可以做到的(它的行为)。举例来说,“狗”这个类会包含狗的一切基础特征,例如它的孕育、毛皮颜色和吠叫的能力。类可以为程序提供模版和结构。一个类的方法和属性被称为“成员”。
Every object has a class – A class defines methods and fields – Methods and fields collectively known as members
▪ Class defines both type and implementation – type ≈ where the object can be used – implementation ≈ how the object does things
▪ Loosely speaking, the methods of a class are its Application Programming Interface (API) – Defines how users interact with instances
案例
nterface和Class: 定义和实现ADT
– 接口中只有方法的定义,没有实现
– 接口之间可以继承与扩展 – 一个类可以实现多个接口(从而具备了多个接口中的方法)
– 一个接口可以有多种实现类
封装(encapsulation):
第一层意思:将数据和操作捆绑在一起,创造出一个新的类型的过程。第二层意思:将接口与实现分离的过程。
I
继承:
类之间的关系,在这种关系中,一个类共享了一个或多个其他类定义的结构和行为。继承描述了类之间的“是一种”关系。子类可以对基类的行为进行扩展、覆盖、重定义。
组合:
既是类之间的关系也是对象之间的关系。在这种关系中一个对象或者类包含了其他的对象和类。
组合描述了“有”关系。
多态
类型理论中的一个概念,一个名称可以表示很多不同类的对象,这些类和一个共同超类有关。因此,这个名称表示的任何对象可以以不同的方式响应一些共同的操作集。
动态绑定:
也称动态类型,指的是一个对象或者表达式的类型直到运行时才确定。通常由编译器插入特殊代码来实现。与之对立的是静态类型。
静态绑定:
也称静态类型,指的是一个对象或者表达式的类型在编译时确定。
消息传递:
指的是一个对象调用了另一个对象的方法(或者称为成员函数)。
方法:
也称为成员函数,是指对象上的操作,作为类声明的一部分来定义。方法定义了可以对一个对象执行那些操作。