【发布时间】:2015-06-03 09:52:58
【问题描述】:
简介
我正在写关于继承问题的硕士论文并解决了一些问题 指示存在继承问题的指标。
像下面的例子:
示例
public static String getAnimalNoise(Animal animal) {
if (animal instanceof Dog)
return "Woof";
if (animal instanceof Cat)
return "Miau";
return "";
}
如果给定的 Animal 实例是 Dog,则该方法返回字符串 "Woof",如果是 Cat,则返回 "Miau"。空弦,因为有些动物根本不发出声音。
因此,正确的解决方案应该是在 Animal 类中使用带有 getNoise 方法的多态性。
我分析了继承问题的不同指标,想说如果 其中一些违反了SOLID Principle。
我认为上面的例子违反了:
- 单一责任原则 (SRP)
- 开闭原则 (OCP)
- 里氏替换原则 (LSP)
- 依赖倒置原则(DIP)
但我不确定这是否适用于所有人。
我想:
违反原则
SRP 违规
因为条件语句完全违反了SRP,因为像switch case 语句或多个 if-else 语句被认为是多个责任。
存在两种情况,所以改变方法的理由不止一个。
OCP 违规
因为如果添加了新动物,则必须将新案例添加到方法中 因此该方法不适合修改。
LSP 违规
每个分支根据动物子类型执行不同的操作。 我认为这违反了 LSP ?! 我知道矩形和正方形以及 getArea 的示例,但是这些 我认为也适合违规的示例。
DIP 违规
条件语句具有依赖关系,这意味着语句依赖于细节,而不是违反DIP的抽象。
问题:
所以问题是,对于给定的例子,给定的原则是否真的被违反了,推理是否正确?
【问题讨论】:
-
这可能是 Programmers.SE 上的更多主题。
标签: oop inheritance solid-principles design-principles