封装
也称作是信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(函数)访问内部的信息或者数据。
封装通常需要编程语言给予语法机制的支持,这种语法机制就是访问权限。
封装的意义
将数据进行隐藏,仅内部方法可以访问,外部不可访问,可以更好的维护和扩展。
预留部分访问接口,易用。
抽象
封装是信息隐藏,而抽象则是隐藏方法的具体实现。调用者仅仅关注于方法的主要功能,并不关心方法的具体实现。
面向对象编程中,通常会借助面向对象编程语言提供的接口类(Java的interface)或者抽象类(abstract),来实现抽象这一特性。但是抽象特性并不一定借助于接口类或者抽象类。比如:PictureStorage 的接口类为 IPictureStorage 类,并不一定要设计 IPictureStorage 接口类,PictureStorage本身的方法也是一种抽象,通过方法名称或者是文档了解方法的功能,不需要关注方法的实现。
为何有时面向对象仅有三大特性,不包含抽象这一特性?
抽象可以仅通过“函数”实现,并不需要面向对象编程语言语法机制的支持,它没有很强的特异性,因此有时会不包含在面向对象特性中。
抽象的意义