万能的OOP语言都不知道,你还想学开发?——还是早点洗洗睡吧!

万能的OOP语言都不知道,你还想学开发?——还是早点洗洗睡吧!

OOP简介

OOP全称 Object Oriented Programming——面向对象的程序设计。

所谓"对象"在显式支持面向对象的语言中,一般是指类在内存中装载的实例,具有相关的成员变量和成员函数。面向对象的程序设计完全不同于传统的面向过程程序设计,它大大地降低了软件开发的难度,使编程就像搭积木一样简单,是当今电脑编程的一股势不可挡的潮流。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息;OOP主要有以下的概念和组件:

  • 组件:数据和功能一起在运行着的计算机程序中形成的单元,组件在 OOP 计算机程序中是模块和结构化的基础。

  • 抽象性:程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。

  • 封装:也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。

  • 多态性:组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型。

  • 继承性:允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性。典型地来说就是用类来对组件进行分组,而且还可以定义新类为现存的类的扩展,这样就可以将类组织成树形或网状结构,这体现了动作的通用性。

万能的OOP语言都不知道,你还想学开发?——还是早点洗洗睡吧!

OOP思想

  1. 抽象

  2. 封装

  3. 继承

  4. 多态

万能的OOP语言都不知道,你还想学开发?——还是早点洗洗睡吧!

抽象与封装

  • 对象是现实世界中的一个实体,类是对一组具有共同属性特征和行为特征的对象的抽象。类与对象之间的关系就是抽象与具体的关系。对象是类的实例。

  • 封装就是将数据的表现方式和对数据的操作细节隐藏起来,用户可以通过接口对数据进行操作,而不必要知道数据是如何表示的,怎么对数据操作的这些细节。封装是面向对象的基本特征之一。封装的优点如下:

  1. 允许类的客户不必关心类的工作机理就可以使用它。就象驾驶员不必了解发动机的工作原理就可以驾驶汽车一样,类的客户在使用一个类时也不必了解它是如何工作的,而只需了解它的功能即可。

  2. 所有对数据的访问和操作都必须通过特定的方法,否则便无法使用,从而达到数据隐藏的目的。

万能的OOP语言都不知道,你还想学开发?——还是早点洗洗睡吧!

继承

子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承的优点:继承的方法允许在不改动原程序的基础上对其进行扩充,这样使得原功能得以保存,而新功能得以扩展。有利于减少重复编码,提高软件的开发效率。

例:实现继承了几种方式:

原型链继承

万能的OOP语言都不知道,你还想学开发?——还是早点洗洗睡吧!

组合方式继承

万能的OOP语言都不知道,你还想学开发?——还是早点洗洗睡吧!

这种方式虽然实现了每个实例之间相互隔离,但是执行了两次构造函数P1。

优化继承

万能的OOP语言都不知道,你还想学开发?——还是早点洗洗睡吧!

这种方式是最优化的继承方式。不仅继承了父类的原型链,同时也明确了自己的构造函数。

多态

多态性就是一个事物有多种形态,换个角度说,就是指相同的动词作用到不同类型的对象上。


多态性有两种表现形式:

  • 不同的对象在收到相同的消息是,产生不同的动作;

  • 同一对象收到相同的信息却产生不同的函数调用;

实现多态,有以下二种方式:

  1. 覆盖:是指子类重新定义父类的虚函数的做法。

  2. 重载:是指允许存在多个同名函数,而这些函数的参数表不同。

万能的OOP语言都不知道,你还想学开发?——还是早点洗洗睡吧!

重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。假如有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确定了,是静态的。也就是说,它们的地址在编译期就绑定了,因此,重载和多态无关!真正和多态相关的是“覆盖”。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的。因此,这样的函数地址是在运行期绑定的。

万能的OOP语言都不知道,你还想学开发?——还是早点洗洗睡吧!


分享到:


相關文章: