抽象与封装

问题描述 投票:0回答:1

这样说是否正确 抽象是通过抽象类实现的,抽象类只是继承抽象类的类的蓝图。因此,抽象基本上不仅仅是隐藏信息,而是一种设计要求,定义了继承的类或其函数应该如何实现。该术语所指的封装是将所有数据封装在一个类中,并使用访问修饰符保护数据。 那么,当概念本身源自“抽象”时,为什么抽象会被称为信息隐藏?“抽象”意味着软件方面的概念、想法或基础设施

解释抽象和封装。 我期待他们之间的区别。

oop
1个回答
0
投票

就像软件开发中的许多其他概念一样(服务单元测试组件等),抽象封装这两个词是模糊的;这些术语没有权威定义。

我对这些术语的解释基于 Bertrand Meyer 的《面向对象的软件构建》和 Robert C. Martin 的《敏捷原则、模式和实践》。 根据罗伯特·C·马丁的说法,

“抽象是消除不相关的内容并放大本质”

应注意不要将此概念与特定语言关键字(例如

abstract

)混淆。这是不一样的。你可以拥有“正常”的类和对象来完美地消除不相关的内容并放大本质的内容,并且你可以拥有
abstract

类来放大不相关的内容并消除本质的内容。

或者,正如 Dijkstra 在 1972 年图灵讲座中所说的那样 
谦虚的程序员:

“抽象的目的不是

变得模糊,而是创造一个新的语义层次,在这个层次上人们可以绝对精确”

“封装”这个词也是如此。我最早遇到这个想法可能是在 Meyer 的书中,他在书中讨论了“合约”。这里的想法是,合约描述了客户端如何并且应该如何与对象交互,而无需了解其实现细节。

这也是一个比面向对象编程更为基础的概念;它
也适用于函数式编程

虽然“封装”作为一个概念可能像八十年代中期一样“晚”,但我认为这个想法与 Parnas 1972 年关于“信息隐藏”的论文相关。我不知道迈耶是否受到了启发,但如果他不知道这一点,我会感到惊讶。

© www.soinside.com 2019 - 2024. All rights reserved.