Oop 作文,你怎么知道什么时候停止?
有一句古老而明智的谚语“价值构成胜于继承”。在我参与的最后两个项目中,我一直在尝试将此应用于其他OOP和设计模式 在大多数情况下,它运行良好,看起来有点正确。但我注意到有些时候,只有2到3个类真正从中获得了最好的效果,而其他10+类突然变成了简单的委托人,只是细节有了细微的变化 有时,我试图通过使用一个抽象类来解决这个问题,该抽象类具有不变的细节,将不同的细节委托给具体的实现,但感觉有些不太对劲Oop 作文,你怎么知道什么时候停止?,oop,design-patterns,composition,Oop,Design Patterns,Composition,有一句古老而明智的谚语“价值构成胜于继承”。在我参与的最后两个项目中,我一直在尝试将此应用于其他OOP和设计模式 在大多数情况下,它运行良好,看起来有点正确。但我注意到有些时候,只有2到3个类真正从中获得了最好的效果,而其他10+类突然变成了简单的委托人,只是细节有了细微的变化 有时,我试图通过使用一个抽象类来解决这个问题,该抽象类具有不变的细节,将不同的细节委托给具体的实现,但感觉有些不太对劲 你如何平衡这一点,同时遵循这句老话?我做错什么了吗?我想你的问题可能是你试图遵循“老话”。您可能比任
你如何平衡这一点,同时遵循这句老话?我做错什么了吗?我想你的问题可能是你试图遵循“老话”。您可能比任何通用指南更了解应用程序的需求 一旦你积累了一些构建应用程序的经验,你应该对如何做事情有一种自然的感觉。这些指南只是帮助你理解一个概念的指南。它们本身并不是规则。“价值构成重于继承”是一句老话,即使在今天仍然有效。 组合和继承意味着增加可重用性&减少重复代码。继承还有其他好处 组合意味着如果您有属于2个或更多类层次结构的泛型方法,则将其作为新类分离出来,并让类层次结构将此新类作为组合的一部分。有了它,您还不必触及类层次结构,就可以获得可重用代码的好处
class Aves { ... }
class Hawk: Aves { ... }
class Mammal { ... }
class Bat: Mammal { ... }
在上面的示例中,所有鸟类都会飞(),(像企鹅或渡渡鸟这样不会飞的鸟类仍然可以使用禁飞来实现Fly()。
但是蝙蝠作为哺乳动物也能飞
现在,您可以将Fly()作为一个单独的类拉出,并支持组合而不是继承(包括将Fly()作为Aves的一部分)
例如,FlyBehavior可以是具有ShortFlightBehavior和LongFlightBehavior的类层次结构
我希望我没有进一步把你弄糊涂:)听起来你在把启发式智慧变成绝对智慧。它不是告诉你“永远”不要使用继承。如果您处于继承或组合都同样有效的情况下,那么就使用组合。简单。什么时候停止?不要再专注于作文了。如果你专注于其他规则,它会自然而然地出现 关注“is-a”和SRP以获得适当的继承 检查SRP类的最简单方法是尝试将每个方法名与类名关联
class Vehicle
{
private void WriteLog(string message) {}
public void Start();
}
WriteLog
方法实际上无法与车辆关联。打破它,通过构造器(组合和依赖项注入)来实现它。有趣。那么,在这种情况下,您会将Log
对象传递给Vehicle的构造函数吗?你如何调用它?您仍然需要WriteLog()
方法,该方法依次调用Log
对象上的Write()
方法。是吗?请注意,WriteLog
方法是私有的。如果把它作为公众
,情况会更糟。因此,在内部使用它并不是一个真正的问题。只使用该字段。没有注意到该方法是私有的。我的错误。谢谢你的解释。或者你可以为任何可能需要这个功能的对象实现一个接口,iLogable。
class Vehicle
{
private void WriteLog(string message) {}
public void Start();
}