面向对象三大特征之一-------封装的意义
思考
封装的意义:
封装从形式上来说,它将数据和操作界定在了某个圈子内,如果外界想要访问数据,或者使用某个操作,必须通过特殊的手段向这个圈子申请。 这个圈子便是类,特殊的手段就是接口。
即假如外界想要访问类中的数据或者使用类中某个方法的具体操作,必须通过这个类事先提供的接口来访问,这个接口一般就是方法名。
一开始学封装时产生的疑惑是 为什么要将数据和操作封装起来,然后想要使用的时候再通过接口访问,这不是很麻烦吗?
是的,确实很麻烦。但麻烦归麻烦,它带来的好处是这小小的麻烦无法所抵抗的。
首先把封装所带来的的优点阐述一遍:
-
封装提高了了代码的复用性和可维护性。
封装为编程的模块化提供了基础,封装好的每一个类相当于就是一个小的模块。而模块化的好处就是分工明确外加可以重复利用(比如一个类实现一个小功能,当某些地方需要用到这个功能的时候,就可以很方便地调用它,不同自己花大代价去实现,另外分工明确的好处就是当某一个功能出了问题时,仅需要修改它自身就好,对其他的功能并不造成影响)。
-
封装提高了编程的安全性和灵活性。
封装的核心在于面向接口(这里的接口指的是方法名),什么叫做面向接口呢?即对于类的编写者和类的使用者来说,唯一不变的东西便是接口,接口是两方的中介。接口让类的实现者可以根据需求动态地修改封装内的东西却不影响外部的调用者,同时接口也让外部调用者清楚地认识到这个类哪些部分是对自己开放的,哪些地方不可以碰。
-
封装简化了编程。
因为封装的缘故,将会有大量事先被编好的具备各种功能的类,这些类组成了一个十分丰富的类库。当我们在编程的时候,需要实现某个功能的时候,可以选择从类库中找找,有没有符合自己需求的类,而不是绞尽脑汁去想办法从零去实现一个具体功能。
举个例子来更好地理解封装带来的好处,比如假如你需要一台电脑,如果没有封装的话,你需要从零开始造一台电脑(嗯,好像玩大了)。但有了封装的话,相当于你只要把一台电脑所需要的部件都买回来(每个部件相当于一个类),零件厂家就是类的编写者,它们将各种元器件封装制造成有相对独立功能的电脑部件(比如 cpu 电源 显卡 内存条 等等),每个电脑部件都有它的插口或者连接线可以顺利地插到或者连接到主板上。
在这里需要注意一下,这些插口和连接线以及在主板上的与它们对应卡槽、插槽、或者线槽就相当于是类提供的接口。所以从这个角度我们可以看出接口有着规范和契约的作用,回到实际例子上,电脑部件厂家们都遵循着这些规范有什么好处呢?好处就是这些厂家可以专心只生产某几个他们自家工厂有优势的零部件,而不需要生产一整台电脑。而作为我们消费者(也就是类的调用者),当我们想要升级电脑上某个部件(比如内存从4G升到8G)或者某个部件坏了,只需要到市面上买一根升级或者替换用的相应内存条,装到我们电脑上就可以,而不是重新买一台电脑。
这就是封装以及面向接口带来的好处,封装让模块化成为现实,面向接口降低模块间的耦合性,提高了整个系统的灵活性和可维护性。(囧 明明是讲封装的 谈着谈着就谈到了接口…..毕竟类中提供的接口并不是真正的接口…只是在功能性质上有些接近)
—
参考链接