对象实例能够了解彼此的当前状态吗?

时间:2011-04-01 15:25:18

标签: ruby oop

我有3个对象:

  • 分析器
  • ParserState - 跟踪当前状态和状态之间转换的状态机
  • ParserDefinitions - 它从json文件读取并提供给定状态的正则表达式,以及控制解析器如何操作的其他一些规则

ParserState和ParserDefinitions都是Parser的子类(?),定义为Parser :: ParserState和Parser :: ParserDefinitions。如果ParserState对象可以访问ParserDefinitions的当前实例,反之亦然,那将是很好的。这是可能的,还是暗示它们实际上应该合并为一个类?

顺便说一下,我正在使用Ruby,所以如果它们可能在它们之间共享实例信息,那么如果可以使用Ruby代码就会很棒。

1 个答案:

答案 0 :(得分:1)

  1. 这些不是子类,它们只是在类下面命名空间。这不提供类对象之间的链接。

  2. 对象A访问对象B状态的方式是通过调用对象B上的方法并查看返回值。似乎这里唯一的问题是如何使对象A了解对象B.

  3. 您已将这些名称大写,就像它们是模块或类一样,但您似乎将它们称为实例。这些单例对象或(例如)Parser实例是否同时创建了ParserStartParserDefinitions个实例?假设后者是这样的:

    class Parser
      attr_accessor :states, :defns
      def initialize
        self.states = ParserStates.new( self )
        self.defns  = ParserDefinitions.new( self )
      end
    end
    
    class Parser::ParserStates
      attr_accessor :parser
      def initialize( parent_parser )
        self.parser = parent_parser
      end
      def defns
        parser.defns
      end
    end
    
    class Parser::ParserDefinitions
      attr_accessor :parser
      def initialize( parent_parser )
        self.parser = parent_parser
      end
      def states
        parser.states
      end
    end
    

    鉴于上述情况,每个“孩子”对象都知道其“父”,父母公开子女的访问者,所有对象都可以互相交谈。