“那怎么理解面向对象编程的三大特征?”李庆丰又问道。
“面向对象编程主要有三大特征:封装性、继承性和多态性。”章岩答道,“封装性比较好理解,就是把过程和数据包围起来,对数据的访问只能通过已定义的界面进行。也可以说是把能够实现某一特定功能的一组组代码打包,形成一个个可以完成某种特定操作的固定模块,这个做法就是封装。
就像现在市场上的快食面、茶包、便捷菜等产品一样。快食面里面有面条、调味包、汤包、油包,茶包里面有泡袋、茶叶、绳子,便捷菜里面是烹制好的各色菜肴,这些产品的生产过程就类似面向对象编程的封装过程。
而这些产品最大的特点就是,你需要的话拿来就能用。而无需每次都要自己从到市场购买原材料回来进行清洗、斩切、调味、烹饪。
我们可以把一包这样的产品看做是一个对象。我们要调用这个对象,需要选择特定的方法。比食用如快食面,我们是用开水泡汤吃还是浸泡之后做成捞面或者炒面来吃,那就随各人喜欢了。
在享用的时候我们还可以自己加入辣、香等调味料和青菜、瓜果、鲜肉等辅料,这些可以看成是变量。
我们可以这样来概括,面向对象的程序设计最突出的特点是,它建立在对象和类的基础上,把要解决的问题所对应的现实世界中的事物抽象成对象或类,并建立对象之间的关系。
每个对象或类不仅包含描述其特征的属性或数据结构,而且还包含对这些数据结构的操作。
这些操作可能是以某种方式处理数据,或者是执行某个计算,或者是监督一个对象控制事件的发生。”
“这比较容易理解。”黄华山点点头。
“继承性也不复杂。”章岩继续说,“通俗地说,就是一种产品不管由什么材料加工而成,它除了具有自己的特点外,还会拥有从生产它所使用的各种原材料中继承下来的特点。
比如说快食面,除了拥有自己的特点外,必然会拥有制作快食面所用的面条的特点,也会拥有生产面条所用的面粉的特点,可以说是继承了上辈乃至祖辈材料的主要特点,这就是继承性。
在面向对象编程中,衍生类和基类存在继承关系,子类与祖先类也存在继承关系。”
“这样的比喻通俗易懂。”贺俊明有一种豁然开朗的感觉。
“至于多态性,就是不同类的对象对同一消息作出响应,或者说同一操作(也可以说是方法)作用于不同的对象时,可以有不同的解释,产生不同的执行结果。”章岩继续说,“比如,同样是加法运算,把两个时间加在一起和把两个整数加在一起,计算方法和结果肯定完全不同。
又比如,同样进行复制和粘贴操作,在字处理程序和绘图程序中会有不同的效果。