C++, два класса с взаимными потребностями

Я преобразовал платформу научного моделирования с Java на C++. Я постарался максимально сохранить дизайн таким же, как в предыдущей реализации. В java из-за позднего связывания циклические зависимости разрешаются во время выполнения. Однако циклические зависимости создали в C++ адский беспорядок.

  1. Существует ли автоматизированный инструмент для анализа и составления списка включений и ссылок в циркуляре? (Visual Studio 2010 выдает только огромный список бессмысленных ошибок).

  2. Я пытался использовать прямые ссылки везде, где это было возможно. Однако в некоторых случаях оба класса нуждаются в функциональности другого класса (например, вызов методов, который делает невозможным использование прямой ссылки). Эти потребности существуют в Logic, и если я радикально изменю дизайн, они больше не будут представлять взаимодействия в реальном мире.

    Как мы могли бы реализовать два класса, которым нужны методы и статус друг друга? Можно ли реализовать их на C++?

Примеры:

  • Пример 1: У меня есть класс под названием «Мир», который создает объекты типа «Агент». Агенту необходимо вызвать методы World, чтобы получить информацию о своей среде. World также должен перебирать агентов и выполнять их метод «запуска» и получать их статус (обновление статуса может быть выполнено в обратном порядке, чтобы решить этот раздел проблемы, но не метод запуска).
  • Пример 2: Агенты создают набор своих «Намерений». Каждый агент должен перебирать свои намерения и выполнять/обновлять/читать статус намерения. Намерения также должны получить информацию об окружающей среде через Агента (если сделать это напрямую через «Мир», это снова создаст сложные круги), а также информацию о самом Агенте.

На диаграмме ниже показано подмножество классов, а также некоторые их методы и свойства:

sub-set of classes, and some of their methods and properties

12
задан wmac 11 June 2012 в 11:59
поделиться