如果您有一个从两个不同的类继承的类,这是否意味着您的子类自动(至少)自动做2件事,每个超类都做一件?
我相信,如果您有多个接口继承,也没有什么区别。
编辑:明确地说,我认为如果子类化多个类违反了SRP,则实现多个(非标记或基本接口(例如,可比较)接口)也违反了SRP。
如果您有一个从两个不同的类继承的类,这是否意味着您的子类自动(至少)自动做2件事,每个超类都做一件?
我相信,如果您有多个接口继承,也没有什么区别。
编辑:明确地说,我认为如果子类化多个类违反了SRP,则实现多个(非标记或基本接口(例如,可比较)接口)也违反了SRP。
Answers:
从狭义上讲,答案是“是”:假设您的基类或接口是为单一目的而设计的,则继承它们两者的确会创建一个具有多个职责的类。但是,是否“不好”取决于您继承的类或接口的性质。
您可以将类和接口划分为两个主要的组-解决系统基本复杂性的组和解决系统意外复杂性的组。如果从多个“基本复杂性”类继承,那就不好了。如果您从一个“基本”类和一个或多个“偶然”类继承,则可以。
例如,在开票系统中,您可以具有用于表示发票和开票周期的类(它们可以解决基本的复杂性),以及用于持久化对象的类(可以解决意外的复杂性)。如果你这样继承
class BillingCycleInvoice : public BillingCycle, public Invoice {
};
这很不好:您BillingCycleInvoice
负有混合的责任,因为这与系统的基本复杂性有关。
另一方面,如果您这样继承
class PersistentInvoice : public Invoice, public PersistentObject {
};
您的课程没问题:从技术上讲,它可以同时处理两个问题,但是由于只有一个是必不可少的,因此您可以注销继承意外事件作为“经商成本”。