2011-04-01 3 views
0

У меня есть 3 объекта:Могут ли объекты-экземпляры узнать текущие состояния друг друга?

  • Parser
  • ParserState - состояние машины, которая отслеживает текущее состояние и переходы между состояниями
  • ParserDefinitions - он считывает из файла JSON и передает регулярные выражения данного состояния , а также некоторые другие правила, которые регулируют, как анализатор работает

ParserState и ParserDefinitions оба подклассы (?) от Parser и определяются как Parser :: ParserState и Parser :: ParserDefinitions. Было бы замечательно, если бы объект ParserState мог иметь доступ к текущему экземпляру ParserDefinitions и наоборот. Возможно ли это или подразумевается, что они должны быть объединены в один класс?

Btw, я использую Ruby, поэтому, если возможно, что они обмениваются информацией об экземплярах между ними, было бы замечательно, если бы Ruby-код мог использоваться.

ответ

1
  1. Это не подклассы, они просто именуются под классом. Это не обеспечивает связи между объектами класса.

  2. Способ, которым объект A получает доступ к состоянию объекта B, путем вызова методов объекта B и просмотра возвращаемых значений. Кажется, что единственная проблема здесь заключается в том, как сделать объект A знанием об объекте B.

  3. Вы заглавили имена этих объектов, как если бы они были модулями или классами, но вы, похоже, ссылаетесь на них как на экземпляры. Являются ли эти одноэлементные объекты или, например, (например) экземпляром Parser, создают экземпляры ParserStart и ParserDefinitions? Если предположить, что последний случай:

    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 
    

    Учитывая вышеизложенное, где каждый «ребенок» объект знает о его «родителя» и родителем выставляет аксессоров к детям, все объекты могут разговаривать друг с другом.

+0

Огромное спасибо. –

Смежные вопросы