Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 面向对象的开/闭原理_Java_Oop - Fatal编程技术网

Java 面向对象的开/闭原理

Java 面向对象的开/闭原理,java,oop,Java,Oop,打开/关闭原则规定“软件实体(类、模块、函数等)应为扩展而打开,但为修改而关闭” 假设我有一个遗留域类,并且要求在域类中添加一个新字段,因此它是否违反了OOP的打开/关闭原则。如果是这样,我们如何在不违反打开/关闭原则的情况下实现这一要求?打开/关闭原则是“打开以扩展,关闭以修改” 其思想是,您可以设计系统,以便维护人员可以通过添加新类(通常是子类化或实现接口)来添加功能,而不必修改现有类 在您的场景中,如果您需要通过添加字段来修改域类,这是违反开放/关闭原则的设计的一个很好的例子 如果您可以通

打开/关闭原则规定“软件实体(类、模块、函数等)应为扩展而打开,但为修改而关闭”


假设我有一个遗留域类,并且要求在域类中添加一个新字段,因此它是否违反了OOP的打开/关闭原则。如果是这样,我们如何在不违反打开/关闭原则的情况下实现这一要求?

打开/关闭原则是“打开以扩展,关闭以修改”

其思想是,您可以设计系统,以便维护人员可以通过添加新类(通常是子类化或实现接口)来添加功能,而不必修改现有类

在您的场景中,如果您需要通过添加字段来修改域类,这是违反开放/关闭原则的设计的一个很好的例子

如果您可以通过添加一个新类(可能扩展域类或扩展一些接口)来满足需求,那么域类是按照开放/封闭原则设计的。是否可以这样做取决于域类是否为此而设计


如果您必须修改域类,则可以考虑重构域类,这样可以通过添加类而不是修改域类来进行将来的更改。

开/闭原理是“打开扩展,但关闭以修改”。 其思想是,您可以设计系统,以便维护人员可以通过添加新类(通常是子类化或实现接口)来添加功能,而不必修改现有类

在您的场景中,如果您需要通过添加字段来修改域类,这是违反开放/关闭原则的设计的一个很好的例子

如果您可以通过添加一个新类(可能扩展域类或扩展一些接口)来满足需求,那么域类是按照开放/封闭原则设计的。是否可以这样做取决于域类是否为此而设计


如果您必须修改域类,则可以考虑重构域类,这样可以通过添加类而不是修改域类来进行将来的更改。

系统总是在改变。我们应该改变我们的软件以适应新的需求。我们需要一些:

  • 新领域
  • 某些方法中的新代码行
  • 新方法
  • 新课程
  • 新包装
  • OCP说:

    Mayer(1988年首次定义,):

    如果模块可用于扩展,则称其为打开。对于 例如,应该可以将字段添加到数据结构中 包含,或它执行的函数集的新元素

    如果某个模块可供其他用户使用,则该模块将被称为关闭 模块。这假设模块已得到定义良好的, 稳定的描述(信息隐藏意义上的接口)。 在编程语言模块的情况下,闭合模块就是一个 可以编译并存储在库中,供其他人使用。在里面 设计或规范模块的情况,仅关闭模块 意味着获得管理层的批准,并将其添加到项目的 公认软件项的官方存储库(通常称为 项目基线),并为 其他模块设计者

    但它有点模糊。(也许已经过时——基于罗伯特·C·马丁)

    Robert C.Martin在2014年发表了关于OCP的评论:

    仔细想想。如果所有模块的行为 在您的系统中,可以在不修改它们的情况下进行扩展,然后 可以在不修改任何旧代码的情况下向该系统添加新功能。 这些特性将通过编写新代码来添加

    因此
    : 如果我们可以在不更改现有代码的情况下向现有源代码添加新字段(仅添加新代码),我们就不会违反OCP

    但是如果我们在源代码中添加一个新字段,并且在接下来的步骤中我们强制更改现有代码的某些部分,那么我们违反了OCP

    例如,为了评估我们的项目OCP值,我们可以说:我们强制更改的代码行数(在添加新字段中)显示了我们项目的OCP值


    最后:为了回答您的问题,源代码的所有部分都应可用于评估OCP值。

    系统总是在变化。我们应该改变我们的软件以适应新的需求。我们需要一些:

  • 新领域
  • 某些方法中的新代码行
  • 新方法
  • 新课程
  • 新包装
  • OCP说:

    Mayer(1988年首次定义,):

    如果模块可用于扩展,则称其为打开。对于 例如,应该可以将字段添加到数据结构中 包含,或它执行的函数集的新元素

    如果某个模块可供其他用户使用,则该模块将被称为关闭 模块。这假设模块已得到定义良好的, 稳定的描述(信息隐藏意义上的接口)。 在编程语言模块的情况下,闭合模块就是一个 可以编译并存储在库中,供其他人使用。在里面 设计或规范模块的情况,仅关闭模块 意味着获得管理层的批准,并将其添加到项目的 公认软件项的官方存储库(通常称为 项目基线),并为 其他模块设计者

    但它有点模糊。(可能已经过时——基于