这个OOP概念叫什么?

时间:2011-01-30 19:44:27

标签: oop terminology

有人可以给我以下OOP概念的名称(如果它确实是OOP概念!):

我有两个班:A& B.两人都说,每种方法都有2种(全部不同)。现在我创建了第三个类,C。现在我想要公开所有的A& B的方法是C.这是一种示范:

class A
    int method_in_A_one() {
    }

    int method_in_A_two() {
    }
end

class B
    int method_in_B_one() {
    }

    int method_in_B_two() {
    }
end

class C
    C() {
        A an_instance_of_a;
        B an_instance_of_b;
    }
}

Now I want to be able to do this:

C instance_of_c = new C;

insance_of_c.method_in_A_one();
insance_of_c.method_in_A_two();
insance_of_c.method_in_B_one();
insance_of_c.method_in_B_two();

我还没有真正使用它,但我确信这是一个特定的概念来处理它。先谢谢你,

3 个答案:

答案 0 :(得分:3)

这大约是object compositiondelegation

  • 对象组合是指您的班级由其他班级组成(在示例中 - CAB组成)
  • 委托是在拥有类中有一个方法,委托到组合类的方法

在我所知的语言中,委托是手动完成的 - 你必须在C中声明方法并调用底层对象的相应方法。

请注意,还有另一种方法可以实现这一目标 - 多重继承,尽管您的示例并未完全显示。这意味着C同时为AB。有些语言虽然禁止这样做,但对象构图无论如何都被认为是更好的做法。

答案 1 :(得分:3)

所以这里有一些事情发生。您的C类型是由A和B类型的组合创建的,这是子类化的常见替代方法。

如果C的目的是为A和B提供更简单的界面,那就是 facade 模式的一个例子。

如果C为其包装对象提供了额外的功能(比如,通过让method_in_A_one的实现在包装对象上调用它之前做一些额外的工作),这将是装饰器模式的一个例子。

如果C将A / B中的概念转换为另一个库所期望的形式(例如:在NSDictionary子类中包装C ++ std :: map以便在Cocoa中使用),那就是适配器图案。

答案 2 :(得分:0)

听起来像是多重继承,或者是一个通用的界面。但不完全像在C中封装A和B,而不是作为基类暴露。