在面向对象编程中,经常会遇到许多的术语,下面就以C++(虽然不是纯种面向对象,但大多数术语基本差不多)为例总结一下。

   先简单说一下面向对象程序设计(Object Oriented Programming,OOP)吧。

  • OOP是一种计算机编程架构。

  • OOP的一条基本原则:计算机程序是由单个能够起到子程序作用的单元或对象组合而成。

  • OOP达到了软件工程的三个目标:重用性、灵活性、扩展性。

  • OOP的三个特点:封装性(Encapsulation)、继承性(Inheritance)、多态性(Polymorphism)。


   下面就入正题,说一下OOP中主要的术语:

  • 封装性(Encapsulation)——简单说就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。其实,我认为在OOP中,封装性主要是用类来实现的。类便体现了封装性。

  • 继承性(Inheritance)——即一个类可以从另外一个类继承,从而得到这个类的一些属性。继承的类称为子类,被继承的称为父类。有的语言(如C++)支持多重继承,即一个子类可以同时有多个父类。而有的编程语言中,一个子类只能继承自一个父类,比如Java,但是Java用接口技术实现了与多重继承相似的效果。

  • 多态性(Polymorphism)——多态性是一个相对于前两个复杂一点的概念。多态性的定义是:同一操作作用于不同类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。多态性也包括编译时的多态性(静态多态性)和运行时的多态性(动态多态性)。静态多态性是指定义在一个类或一个函数中的同名函数,他们根据参数表(类型以及个数)区别语义,并通过静态联编实现,例如,在一个类中定义的不同参数的构造函数。动态多态性是在定义在一个类层次的不同类中的重载函数,他们一般具有相同的函数,因此要根据指针指向的对象所在类来区别语义,它通过动态联编实现。多态性就是多种表现形式,具体来说,可以用“一个对外接口,多个内在实现方法”表示。

  • 函数重载(Overload)——刚才在多态性里面举得不同构造函数就属于一个重载的例子。重载的条件是:函数的参数类型参数个数不同,才能构成函数的重载。要注意:只有函数的返回值类型不同是不能构成函数的重载的。

  • 函数覆盖(Override)——覆盖和隐藏是两个非常难区分的概念。构成函数覆盖的条件为:基类函数必须是虚函数(使用Virtual关键字进行声明);发生覆盖的两个函数要分别位于派生类和基类中;函数名称和参数列表必须完全相同。在函数覆盖的情况下,编译器会在运行时根据对象的实例类型来确定要调用的函数。

  • 函数隐藏——所谓隐藏,是指派生类中具有和基类同名的函数(不考虑参数列表是否相同),从而在派生类中隐藏了基类的同名函数。区别覆盖和隐藏只要记住一点就可以了:函数的覆盖是发生在派生类和基类之间,两个函数必须完全相同,并且都是虚函数。除此以外的,就是隐藏。