Я преобразовал платформу научного моделирования из Java в С++. Я попытался сохранить дизайн как можно больше, как и в предыдущей реализации. В java из-за позднего связывания циклические зависимости разрешаются во время выполнения. Однако круговые зависимости создали адский беспорядок на С++.
-
Есть ли автоматизированный инструмент, который анализирует и перечисляет круговые включения и ссылки? (Visual Studio 2010 выпускает огромный список ошибок бессмысленности).
-
Я старался использовать прямые ссылки везде, где это возможно. Однако в некоторых случаях оба класса нуждаются в функциональности другого класса (т.е. Вызов методов, которые делают невозможным использование прямой ссылки). Эти потребности существуют в логике, и если я радикально изменил дизайн, они больше не будут представлять взаимодействия реального мира.
Как мы можем реализовать два класса, которым нужны друг другу методы и статус? Возможно ли реализовать их на С++?
<сильные > Примеры:
- Пример 1: У меня есть класс под названием "Мир", который создает объекты типа "Агент". Чтобы получить информацию о своей среде, агенту необходимо вызвать методы World. World также необходимо выполнить итерацию через агентов и выполнить их метод "запуска" и получить их статус (обновления состояния могут быть сделаны обратными, чтобы решить этот раздел проблемы, но не метод запуска).
- Пример 2: Агенты создают коллекцию своих "Намерений". Каждому Агенту необходимо выполнить итерацию по своим намерениям и запустить/обновить/прочитать статус намерения. Намерения также должны получить информацию об окружающей среде через Агента (если сделать непосредственно через "Мир", он снова создаст сложные круги), а также информацию о самом Агенте.
Ниже диаграммы показан подмножество классов, а также некоторые их методы и свойства: