使用OOP以正确的方式访问类(或对象)父级

时间:2014-01-29 07:50:44

标签: oop

我需要知道这是否在正常的 OOP 行为中,或者如果不是,最常见的做法是什么(不是特定于某种语言)。

我在main上有一个类实例,名为 A ,里面已经将类 B 实例化为变量。当 A 调用 B 中的方法时, B 需要 A 中的某些方法才能正常工作。

为此,我必须通过参数绕过A引用本身,或者我必须始终使用特定于该语言的工具? OOP 给出了一些参考,或者它们的范围是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

  

我在main上有一个类实例,名为A,里面有   将B类作为变量实例化。当A调用B,B内的方法时   需要A的一些方法来工作。

这里的问题是,你的A类知道得太多了 - 它知道如何用其参数实例化另一个类,因此它也负责factory责任。因此,您最终打破了Single-Responsibility Principle

那么,让我们来看看你当前的类层次结构

class A
{
    private b;

    public void A()
    {
         b = new B();
    }
}

a = new A();

由于您没有注入B的实例,因此该实例也会绑定到类A

  • 由于BA紧密耦合,因此它非常难以进行单元测试(因为您无法注入B的模拟实例),即您无法测试孤立的班级A

  • 它引入了另一种形式的全局状态,因为B来自全球范围

这样做的正确方法是(通过遵守Dependency Injection):

class A
{
   private b;

   public void A(B bInstance)
   {
       b = bInstance;
   }
}

b = new B();
a = new A(b);