Oop 这个'的定义是什么意思;协作';

Oop 这个'的定义是什么意思;协作';,oop,object,Oop,Object,将协作定义为: 对象A接收对其广告服务之一的请求 在满足该请求的过程中,它需要从对象B 对象B不可用 占用对象A实例变量之一的对象 在方法中声明的临时变量,对象a正在执行以满足原始请求 提供给对象A的对象,作为请求服务的消息的参数 对象B成为合作者,对象a的秘密助手 然而,我很难想象这样一个物体B 在下面的代码片段中,helper1、helper2或helper3都与上述定义不匹配,是吗? 我还假设它并不意味着调用B的静态方法 class A { B helper1 = new B(

将协作定义为:

  • 对象
    A
    接收对其广告服务之一的请求
  • 在满足该请求的过程中,它需要从对象
    B
  • 对象
    B
    不可用
  • 占用对象
    A
    实例变量之一的对象
  • 在方法中声明的临时变量,对象
    a
    正在执行以满足原始请求
  • 提供给对象
    A
    的对象,作为请求服务的消息的参数
  • 对象
    B
    成为合作者,对象
    a
    的秘密助手

    然而,我很难想象这样一个物体
    B

    在下面的代码片段中,
    helper1
    helper2
    helper3
    都与上述定义不匹配,是吗? 我还假设它并不意味着调用
    B
    的静态方法

    class A {
    
        B helper1 = new B();
    
        void service(B helper3) {
    
            B helper2 = new B();
    
            helper1.service();
            helper2.service();
            helper3.service();
    
        }
    
    }
    

    任何人都可以给我一个例子,说明这个定义在实践中是什么样子的?

    读过《对象思考》一书中的章节后,我认为这个例子如下:

    public class ObjectA
    {
        Service service;
    
        public ObjectA(Service service)
        {
            this.service = service;
        }
    
        public void ProvideService()
        {
            ObjectB objectB = this.service.DoSomething();
            objectB.DoSomethingElse();
        }
    }
    
    public class Service
    {
        public ObjectB DoSomething()
        {
            ...
            return objectB;
        }
    }
    
    public class ObjectB
    {
        public void DoSomethingElse()
        {
            ...
        }
    }
    
    这里,
    ObjectB
    是一个合作者

    在书中,作者提到这符合德米特定律。Demeter定律规定,类
    ObjectA
    的方法
    提供的设备
    只能调用以下方法:

    public void ProvideService()
    {
        this.service.DoSomething().DoSomethingElse();
    }
    
    • ObjectA
      本身
    • ProviderDevice创建的对象
    • 作为参数传递给
      ProviderDevice
    • ObjectA
    ObjectB
    不属于上述内容,因此可以归类为合作者

    上述方法
    providedevice
    违反了德米特法,正如作者所提到的,这种类型的合作应保持在最低限度。这通常会导致列车失事代码如下:

    public void ProvideService()
    {
        this.service.DoSomething().DoSomethingElse();
    }
    

    所以书的作者定义了一个合作者对象,说它不是什么?没有其他信息?你有没有理由认为作者不是指静态的?因为将
    B
    作为单例(但获取实例将使用静态)是合适的示例。不,没有明确的示例说明它是什么。根据书中的信息,我会认为我的
    helper1
    helper2
    是合作者。这就是为什么这个定义让我困惑的原因。我想作者不是指静态方法调用,比如
    B.staticService()
    ,因为在我看来,这与书中阐述的理念不符。如果将
    B
    定义为单例,IMO的意见将等同于我的
    helper2
    ,即一个临时变量
    B.getInstance().service()
    相当于
    B helper2=B.getInstance();B.service()
    。谢谢您的回答。但我不相信这是什么意思(我也不是说这不是什么意思,因为我不知道)。我不相信,因为在我看来,
    objectB
    是在对象a执行的方法中声明的临时变量,以满足原始请求。@Ward我认为要理解这一点,我们需要将“在方法中声明的临时变量”解释为“由方法创建的临时对象”。我相信,上面的例子是ObjectA和ObjectB可以直接交互的唯一方式,这不是Demeter定律所述的方式之一,即,它是通过引用或指向其他地方创建的对象的指针进行交互。遗憾的是,作者没有包括任何例子,因为这会使它更加清晰。不幸的是,正因为如此,我们不得不进行一些有根据的猜测。@Ward此外,作者还提到“它不是当前驻留在ObjectA封装屏障内的对象”,这也符合上面的代码示例。