“那怎么理解面向对象编程的三大特征?”李庆丰又问道。
“面向对象编程主要有三大特征:封装性、继承性和多态性。”章岩答道,“封装性比较好理解,就是把过程和数据包围起来,对数据的访问只能通过已定义的界面进行。也可以说是把能够实现某一特定功能的一组组代码打包,形成一个个可以完成某种特定操作的固定模块,这个做法就是封装。
就像现在市场上的快食面、茶包、便捷菜等产品一样。快食面里面有面条、调味包、汤包、油包,茶包里面有泡袋、茶叶、绳子,便捷菜里面是烹制好的各色菜肴,这些产品的生产过程就类似面向对象编程的封装过程。
而这些产品最大的特点就是,你需要的话拿来就能用。而无需每次都要自己从到市场购买原材料回来进行清洗、斩切、调味、烹饪。
我们空庋的产品看做是一个对象。我们要调用这个对象,需要选择特定的方法。比食用如快食面,我们是用开水泡汤吃还是浸泡之后做成捞面或者炒面来吃,那就随各人喜欢了。
在享用的时候我们还可以自己加入辣、香等调味料和青菜、瓜果、鲜肉等辅料,这些可以看成是变量。
我们可以这样来概括,面向对象的程序设计最突出的特点是,它建立在对象和类的基础上,把要解决的问题所对应的现实世界中的事物抽象成对象或类,并建立对象之间的关系。
每个对象或类不仅包含描述其特征的属性或数据结构,而且还包含对这些数据结构的操作。
这些操作可能是以某种方式处理数据,或者是执行某个计算,或者是监督一个对象控制事件的发生。”
“这比较容易理解。”黄华山点点头。
“继承性也不复杂。”章岩继续说,“通俗地说,就是一种产品不管由什么材料加工而成,它除了具有自己的特点外,还会拥有从生产它所使用的各种原材料中继承下来的特点。
比如说快食面,除了拥有自己的特点外,必然会拥有制作快食面所用的面条的特点,也会拥有生产面条所用的面粉的特点,可以说是继承了上辈乃至祖辈材料的主要特点,这就是继承性。
在面向对象编程中,衍生类和基类存在继承关系,子类与祖先类也存在继承关系。”
“这样的比喻通俗易懂。”贺俊明有一种豁然开朗的感觉。
“至于多态性,就是不同类的对象对同一消息作出响应,或者说同一操作也可以说是方法作用于不同的对象时,可以有不同的解释,产生不同的执行结果。”章岩继续说,“比如,同样是加法运算,把两个时间加在一起和把两个整数加在一起,计算方法和结果肯定完全不同。
又比如,同样进行复制和粘贴操作,在字处理程序和绘图程序中会有不同的效果。
多态性使用虚方法和抽象方法来编程,更符合面向对象编程的思想,并且可以大幅提升代码的可读性和减少冗余的代码,能够用更少的代码实现相同的功能。
多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享等多种优势,很好的解决了应用程序函数同名问题。
封装可以隐藏实现细节,使得代码模块化继承可以扩展已存在的代码模块类,它们的目的都是为了所谓的代码重用或代码共用。而多态则是为了接口重用或接口共用。”
“接口重用?这里面的接口是什么?”贺俊明对接口这个概念并不陌生,但在对面向对象编程中接口认识上有些模糊,此刻趁机向章岩讨教。
“接口泛指实体把自己提供给外界的一种抽象化物可以为另一实体,用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。”章岩解释说,“用通俗的话来说,接口就是在不同部件、不同系统或不同模块之间建立联系、交换信息、相互通信的方法,一般分为硬件接口和软件接口。
在计算机中,接口是计算机系统中两个独立的部件进行信息交换的共享边界。这种交换可以发生在计算机软、硬件,外部设备或进行操作的人之间,也可以是它们的结合。
面向对象编程中的接口指的就是软件接口,是指对协定进行定义的引用类型,或者说是通过对象关系可以明确对象之间的消息,通过定义每个对象所能够接收的消息以及对象接收消息时执行的相应操作,同时还可以描述对象的私有部分即对象的内部属性或数据结构以及操作的过程细节,以保证它们支持某些操作。
与类相似,接口可以包含方法、属性、索引器和事件作为成员。
当然,这些只是理论上的东西,要真正理解接口,必须通过大量的代码编写、接口设计、软件调试等工作,不断加深对接口的认知并积累编程经验。”
“编程语言经历了很多代,现在最流行的就是面向对象编程语言,它到底有什么独特的优势?”李庆丰接着问。
“面向对象编程具有很多突出的优点。一是易维护。采用面向对象思想设计的结构,各种功能都是通过模块去实现的,可读性高,逻辑性强。同时,由于继承的存在,即使需要对软件作出改变,也只需要在局部模块中进行修改,所以维护起来是非常方便和低成本的。
二是质量高。可以重用现有经过验证的模块,特别是在以前的项