关于封装的三个最伟大的段落

定义。

封装不是性感的。 这是软件设计的特许会计。 功能性Java编程? 配方freakin'之一。 混合云计算? 固体助推火箭在午夜的发射台上爆炸。 但是封装? 但是,请不要将这种缺乏活力与重要性相混淆。 宝贵的无形支持系统围绕着我们。 尝试一周不抽水。 还是电。 再加上其令人遗憾的PR封装在第二个负担(含糊不清)下吟。 每个程序员对封装是什么都有自己的定义。 大多数彼此相似,许多重叠,但有些只不过反映了随机获得的习惯。

但是,如果我们要讨论三个最重要的封装段落,那么我们当然需要定义。 您可能不同意这一点,但至少应能够判断这些段落与该定义的符合程度。 那么,我们如何解决这种歧义呢? 最好有一个国际标准的封装定义来构建我们的调查,但要是这种情况,就需要一个国际标准化组织,而这个国际标准化组织则必须定义“封装, ”以某种有意义的方式。

好吧-您相信吗? –实际上有这样一个国际标准化组织。 它被称为“国际标准化组织”。 这些好人正式将封装(在ISO / IEC 10746-3中 )定义为:

封装 :(转鼓)属性,对象中包含的信息只能通过对象支持的接口上的交互来访问(cy崩溃!)。

(作者添加的声音效果。)

是的,是的,这不是您的定义。 它提出了各种各样的问题。 它用其他同样模糊的概念来定义概念。 但是,要求您不要用上面的内容随意替换您自己的定义,而只是认为在本文持续时间内是合理的。 可以使用它作为工具来破解段落的外壳,然后根据需要将其扔到一边。 毕竟,这是由食品卫生法规确保您今天早上吃的早餐相对安全的人们所决定的。 让我们把它们的耳朵借给他们听,即使我们在完成它们后把它们取回。

关注点分离。

您仍然可以在电影院中看到“教父:第二部分”,保罗·安卡(Paul Anka)屈居美国音乐排行榜的首位,而内华达州沙漠则尖叫着,两百公斤爆炸会将其放射性碎片撒在其玻璃化的沙子上。

同时,在荷兰,埃德斯·迪克斯特拉(Essger Dijkstra)教授通过输入另一篇论文来完成本周的学习。 Dijkstra在计算机界享有盛誉,并在几年前获得著名的AM Turing奖。十年来,Dijkstra撰写了有关计算的有见地的论文,其中一些(例如臭名昭​​著的Go to声明被认为有害 )在发烧友中引起了极大的敌意尊重。

今天的论文叫做《科学思想的作用》 。 它也许有点罗word,有些曲折,却蕴藏着深刻的才华。 在关于封装的三个最伟大的段落的第一段中,该文本不需要其周围论文的上下文就可以使自己理解:

“让我尝试向您解释,我的品味是所有明智思维的特征。 就是说,一个人愿意出于自身的一致性而独立地深入研究其主题的一个方面,一直都知道一个人只在其中一个方面中占据一席之地。 我们知道一个程序必须是正确的,我们只能从那个角度研究它; 我们也知道它应该是有效的,可以这么说,我们可以在另一天研究它的效率。 在另一种情况下,我们可能会问自己,是否这样做:为什么,该程序是理想的。 但是什么也没有得到-相反! 同时解决这些各个方面。 这就是我有时所说的“关注点分离”,即使不是完全可能,这也是我所知道的唯一有效地整理人的思想的技术。

在这里,Dijkstra第一次低语了“关注分离”一词,却几乎不知道他的声音仍会在将近40年后在我们的数字回廊中回荡。

对于谁没有听说过关注点分离的问题? 谁会梦想通过将其消耗在一个强大的大脑中而不是将其切成薄片来剖析其个别需求,其功能,其软件包或子结构来理解任何不平凡的源代码?

但是,Dijkstra没有专门讨论封装,因此这怎么可能是封装方面最伟大的段落之一? 这是封装的一部分,因为它可以承接封装的声明,即对象的信息与其接口是分开的。 的确,封装仅仅是庆祝和利用了这种可分离性,没有它,它就会崩溃,失去好奇心。

今天,我们认为这一切显而易见。 有什么大不了的? 这就是一个好主意的印记:很难想象这个主意不起作用的世界。 我们将再次遇到这种困境。

信息隐藏。

迪克斯特拉(Dijkstra)的可笑之处使他的杰作失传了两年,加拿大的戴维·帕纳斯(David Parnas)已经点燃了自己的一颗宝石。 (我们的旅程沿着概念抽象的轴而不是按时间顺序下降。)

与大学讲师Dijkstra一样,Parnas于1972年12月发表了他的《 关于将系统分解为模块的标准》

帕纳斯(Parnas)在他的论文中描述了如何构建软件系统,并以我们三个最伟大的段落的第二段作了总结:

“我们试图通过这些示例来证明,根据流程图开始将系统分解为模块几乎总是不正确的。 相反,我们建议从一系列困难的设计决策或可能会改变的设计决策开始。 然后,每个模块的设计都将其他决策隐藏起来。”

见证信息隐藏的诞生,再也不奇怪Java的private修饰符从何而来。 如果有人怀疑Dijkstra的贡献是否恰当,这就是封装的本质。 是什么原因限制了对接口的访问,但是从某种意义上说,对象的信息是隐藏的,而接口却不是?

就像关注点分离一样,对于我们来说,信息隐藏对我们来说似乎是平凡的,就像摩天大楼建造者们的钢铁一样。 很少有铆钉钉牢铁器时代的思想。 当然,编程没有这么长的寿命,但是四十年的搜索未能产生出信息隐藏的后继者。

涟漪效应。

我们的第三个也是最后一个最伟大的段落不是来自一个灵魂,而是来自三个灵魂。 W. Stevens,G。Myers和L. Constantine在为IBM Systems Journal撰写的题为《 结构化设计 》的论文中,向1974年的计算机世界介绍了许多非凡的想法。(孕育了这种创新的70年代是什么?耀斑?车把的胡须?褐色?)

尽管关注点和信息隐藏的分离提供了实现封装的基本机制,但《 结构化设计》论文却明确了可以判断这些机制是否部署的标准。 再次,由于反复使用而使他们感到惊讶,这些单词的过度熟悉掩盖了它们的意义:

“模块之间的连接越少越简单,就越容易理解每​​个模块而无需参考其他模块。 最小化模块之间的连接还可以最大程度地减少更改和错误传播到系统其他部分的路径,从而消除灾难性的“涟漪效应”,其中一个部分的更改会引起另一部分的错误,从而需要在其他地方进行其他更改,从而产生新的错误等。”

本文通过介绍耦合和内聚的概念来详细阐述这些观点,从而为第四和第五个最大的封装段落提供了强有力的竞争者,但是以上示例证明了封装表现良好,而且更令人遗憾的是,它表现得很差。 当面对结构不良的源代码时,我们倾向于从无数依赖在整个系统中无方向地辐射的角度来内向地退缩。 直到今天,史蒂文斯(Stevens)等人确定的涟漪效应。 每年我们的行业花费数亿美元,考虑到这里三篇论文所提供的工具,这是很奇怪的。

摘要。

即使在首次发表时,这里介绍的论文都没有完全独具匠心。 文学碎片预示了一切。 但是,这些段落巩固了并在很大程度上进行了创新,这些关键原则是当今继续构建所有优秀软件的关键原则。 他们的作者应被视为计算机领域的佼佼者。 概念不断发展。 七十年代编写软件的世界现在已经不在我们视窗之外。 也许某天的软件将不会由单个的,相互影响的部分组成,因此关注点,信息隐藏和涟漪效应的分离将从程序员的词汇中消失。 但是,这一天尚未到来。


翻译自: https://www.javacodegeeks.com/2013/04/the-three-greatest-paragraphs-ever-written-on-encapsulation.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值