RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 555295
Accepted
faoxis
faoxis
Asked:2020-08-14 21:35:53 +0000 UTC2020-08-14 21:35:53 +0000 UTC 2020-08-14 21:35:53 +0000 UTC

封装是什么意思?

  • 772

我开始阅读一本关于模式的书。它不断包含像这样的句子

封装什么变化

封装是什么意思?我将这个词理解инкапсуляция为在某些代码部分的实现上隐藏数据以增加抽象级别。但是封装是什么意思还不是很清楚。。。想到这是一个隐藏实现数据的过程。但我的演讲并不总是与书中的上下文相符......

ооп
  • 4 4 个回答
  • 10 Views

4 个回答

  • Voted
  1. Best Answer
    Sergey Teplyakov
    2020-09-02T01:40:31Z2020-09-02T01:40:31Z

    在软件开发中,有两个相似的概念——封装和信息隐藏。有人认为这些是同义词,有人不认为,但这并不那么重要。

    一段历史:David Parnassus 在 1970 年的文章“On the Criteria To Be Used in Decomposing Systems into Modules”中首次引入了信息隐藏的概念作为一个关键的设计工具。这个原则听起来是这样的:将系统分解成模块不应该基于方框图或执行流程的分析。相反,每个模块都应该在内部隐藏一些设计决策,向其客户提供最少量的有关它的信息。

    这是一个小例子。

    假设您正在开发一个执行重要任务的企业应用程序。任何正常的应用程序通常都需要一些配置:好吧,数据库或服务器连接参数,以及其他有价值的信息。因此,经验丰富的架构师 (*) 和同样经验丰富的客户一起被要求从配置文件中读取配置。

    (*) 这不是打字错误,请勿编辑!

    在与他们交谈的过程中,您了解到没有人真正知道您为什么需要从文件中读取配置、它应该具有什么格式以及应该在那里存储什么。

    现在您面临一个选择:您可以在整个应用程序的偶数层中传播配置信息。每个需要一些参数的组件都将进入应用程序配置本身,从那里提取必要的数据,解析 xml 或 json 并准备好提供服务。另一方面,很明显,关于配置存储在何处以及以何种格式存储的决定在未来可能会发生变化。因此,一种更明智的解决方案是在一个模块中隐藏有关配置位置和格式的信息,例如,使用类Configuration和ConfigurationProvider. 在这种情况下,当(是的,准确地说是“何时”,而不是“如果”)需求发生变化时,只有类的实现会发生变化ConfigurationProvider该类别或配置的所有其他用户将保持不变。同样,当更改格式时,只有解析过程也会发生变化,而不会改变配置消费者。

    这个例子看似牵强附会,其实不然!我们经常遇到需求的可变性,但不幸的是我们使用以下两种方法之一:

    • 我们完全忽略需求变更的可能性,一切都是迎头而上或

    • 我们创建了一个具有十个间接级别的超级复杂解决方案,它必须在不更改代码的情况下承受任何方向的需求变化。

    一个更合理的方法位于中间的某个地方。每次我开始开发一个功能时,我都会考虑如果需求或实现细节发生重大变化,将不得不更改多少代码。话虽这么说,我不会尝试将更改数量减少到 1(好吧,就像,如果我们遵循 SRP,那么应该只有一个地方,以防需求发生变化)。我尽量让这些地方少而简单。

    其实,这就是信息隐藏及其妹妹——封装的本质。

    • 12
  2. Мистер Фикс
    2020-08-14T21:59:33Z2020-08-14T21:59:33Z

    这意味着您正在与其余代码分离,并且通过更改周围代码的工作方式,封装区域保持工作状态。

    通过将代码移动到一个单独的类中,您可以封装它。通过将代码移动到单独的方法或函数中,您还可以封装它。

    整个实现隐藏在接口后面并通过它们工作,将第三方人员变成他们无法选择(如果语言允许)或他们可以选择的“黑匣子”,但他们明白这样做是自担风险和风险。

    • 5
  3. Xambey
    2020-08-14T21:43:04Z2020-08-14T21:43:04Z

    封装意味着隐藏。封装背后的思想是通过为用户(和程序员)提供类的接口来对用户(和程序员)隐藏类的实现。它还意味着使用访问标识符(公共、私有、受保护)隐藏数据。例如,您是一名程序员,可以访问图书馆。也就是说,你包含了某个头文件,可以访问一些类的接口,并通过这个类的方法来操作这个类的对象。这消除了破坏工作代码的可能性。像这样的东西......

    • 4
  4. user207618
    2020-08-14T21:47:51Z2020-08-14T21:47:51Z

    有一个方法делатьСэндвич();。

    实现可能非常多变:

    добытьХлеб
        ржаной белый хлебРакфор
        прожарить?
        мякиш корочка
        ...
    

    这只是挖掘基础知识。不完整的版本。
    因此,至少有两个原因值得隐藏(封装,就像今天的年轻人所说):

    1. 不要用如此多样的界面吓到最终用户,因为这很吓人而且他不需要知道(简单是可用性的关键)。
    2. 为了不意外和/或故意破坏三明治工厂的逻辑。
    • 4

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5