gpt4 book ai didi

oop - 违反了哪些 SOLID 原则?

转载 作者:行者123 更新时间:2023-12-04 06:59:02 26 4
gpt4 key购买 nike

简介

我在写关于继承问题的硕士论文并解决了一些问题
表明存在继承问题的指标。

像下面的例子:

示例

public static String getAnimalNoise(Animal animal) {
if (animal instanceof Dog)
return "Woof";
if (animal instanceof Cat)
return "Miau";
return "";
}

该方法返回字符串 "Woof"如果给定的 Animal 实例是 Dog"Miau"如果是 Cat .空弦,因为有些动物根本不发出声音。

因此,正确的解决方案应该是使用带有 getNoise 的多态性Animal 类中的方法。

我分析了继承问题的不同指标,想说如果
其中一些违反了 SOLID Principle .

我认为上面的例子违反了:
  • 单一职责原则 (SRP)
  • 开闭原则(OCP)
  • 里氏替代原则 (LSP)
  • 依赖倒置原则(DIP)

  • 但我不确定这是否适用于所有人。

    我想:

    违反原则

    违反 SRP

    因为条件语句根本违反了 SRP,因为就像 switch
    case 语句或多个 if-else 语句被认为是多个责任。

    它存在两种情况,因此更改方法的原因不止一个。

    违反OCP

    因为如果添加了新动物,则必须在方法中添加新案例
    所以该方法不适合修改。

    LSP违规

    每个分支根据动物子类型执行不同的操作。
    我认为这违反了 LSP ?!
    我知道矩形和正方形以及 getArea 的示例,但是这些
    我认为也适用于违规的示例。

    浸入违规

    条件语句具有依赖性,这意味着语句依赖于细节而不是违反 DIP 的抽象。

    问题:

    所以问题是,对于给定的例子,给定的原则是否真的违反了,推理是否正确?

    最佳答案

    SRP Because conditional statements at all violates the SRP, because like the switch case statement or more than one if-else statement are consider more than one responsibility.It exists two cases so there are more than one reason to change the method.


    我强烈反对。 SRP 意在用少许盐来解释。阅读 Uncle Bob's article on it here - 他创造了这个原则。
    我将引用重要的部分:

    What defines a reason to change?

    This principle is about people.

    When you write a software module, you want to make sure that when changes are requested, those changes can only originate from a single person, or rather, a single tightly coupled group of people representing a single narrowly defined business function. You want to isolate your modules from the complexities of the organization as a whole, and design your systems such that each module is responsible (responds to) the needs of just that one business function.

    [...] as you think about this principle, remember that the reasons for change are people. It is people who request changes. And you don't want to confuse those people, or yourself, by mixing together the code that many different people care about for different reasons.



    OCP Because if a new animal is added a new case must be added to the method so the Method is not close for modifications.


    正确的。该方法假定一组特定的实现,并且在不修改的情况下将无法处理新的实现。

    LSP Each branch executes different actions dependent of the animal sub type. Which i think violates the LSP ?!


    它违反了 LSP,但原因不同。如果我要传入长颈鹿,我会得到一个意想不到的结果,一个空字符串。这意味着该方法对于 Animal 的任何子类型都不正确.

    DIP The conditional statements take dependency that means the statements are dependent on details and not on abstractions which violates the DIP.


    从技术上讲是正确的,但这只是违反上述其他两个原则的副作用。这并不是问题的真正核心。

    请记住,原则不是规则,因此在解释它们时不要太严格/字面意思。务实和理解为什么需要一个原则是关键。

    关于oop - 违反了哪些 SOLID 原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30616660/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com