面向对象编程

面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。

名词解释

面向对象程序设计中的概念主要包括:对象(Object)、类(Class)、数据抽象、继承、动态绑定、数据封装(Encapsulation)、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。

  • 对象:可以对其做事情的一些东西。一个对象有状态、行为和标识三种属性。
  • :一个共享相同结构和行为的对象的集合。 类定义了一件事物的抽象特点。通常来说,类定义了事物的属性和它可以做到的(它的行为)。举例来说,“狗”这个类会包含狗的一切基础特征,例如它的孕育、毛皮颜色和吠叫的能力。类可以为程序提供模版和结构。一个类的方法和属性被称为“成员”。
  • 封装:第一层意思:将数据和操作捆绑在一起,创造出一个新的类型的过程。第二层意思:将接口与实现分离的过程。
  • 继承:类与类之间的关系,在这种关系中,一个类共享了一个或多个其他类定义的结构和行为。继承描述了类之间的“是一种”关系。子类可以对基类的行为进行扩展、覆盖、重定义。
  • 组合:既是类与类之间的关系也是对象与对象之间的关系。在这种关系中一个对象或者类包含了其他的对象和类。组合描述了“有”关系。
  • 多态:类型理论中的一个概念,一个名称可以表示很多不同类的对象,这些类和一个共同超类有关。因此,这个名称表示的任何对象可以以不同的方式响应一些共同的操作集合。
  • 动态绑定:也称动态类型,指的是一个对象或者表达式的类型直到运行时才确定。通常由编译器插入特殊代码来实现。与之对立的是静态类型。
  • 静态绑定:也称静态类型,指的是一个对象或者表达式的类型在编译时确定。
  • 消息传递:指的是一个对象调用了另一个对象的方法(或者称为成员函数)。
  • 方法:也称为成员函数,是指对象上的操作,作为类声明的一部分来定义。方法定义了可以对一个对象执行那些操作。

不同语言间的对比

Java JavaScript
静态类型 动态类型
使用类,接口和枚举来定义类型 使用函数和原型来定义类型
在运行时类型无法改变 类型可以在运行时变更
需要给所有变量声明类型(强类型校验) 声明变量时不需要指定类型(弱类型校验)
构造器时特殊的方法 构造器也是一个函数,与其他函数没有区别
类和对象是不同的实体 包括构造器,函数原型在内的一切都是对象
支持静态方法和实例 不直接支持静态方法和实例
通过抽象类和接口支持抽象类型 不直接支持抽象类型
通过 privatepackageprotectedpublic 定义对象的作用域 只支持 public 成员
提供丰富的继承机制 通过原型实现继承
支持方法级的重写和重载机制 不直接支持重写和重载
提供丰富的反射特性 具有一些反射特性
提供包提供模块化支持 没有直接的模块化支持