Вы не можете написать собственный агент (как обычный Java-класс), который включает элементы в пользовательском интерфейсе моделирования модели AnyLogic, если это то, что вы имеете в виду (плюс, если вы пишете свой собственный Java-класс, который расширяет агент, вы должны знать правильные подписи для использования для двух требуемых конструкторов, которые вы можете видеть, глядя на код, созданный для других агентов).
Но в AnyLogic 7 вы можете визуально визуализировать агента, а затем использовать ограниченную форму наследования для создания подклассов этого Агента. (См AnyLogic справки по Agent наследования по моделированию Агентного.) Наследование ограниченно в том, что:
- вы можете переопределить/методы перегрузки (функцию) --- то есть, определить один с тем же именем в подклассе --- но вы не можете сделать то же самое для полей (переменные/параметры), даже если они являются частными в суперклассе (так что даже в тех случаях, когда это не будет скрывать/затенять поле в смысле Java);
- Вы не можете использовать такой агент подкласса в качестве агента верхнего уровня в своей модели.
[спасибо nikolaj за указание, что переопределения функций возможны. Я мог бы поклясться, что попробовал это в исходной версии AnyLogic 7 и имел такое же ограничение, как и для параметров/переменных; возможно, он был изменен в одном из релизов версии 7.0.x?]
Оба они могут быть довольно ограничительными в зависимости от обстоятельств, но в вашем примере это было бы хорошо: иметь агента, который имеет/'is' кнопку (с параметрами AnyLogic для цвета, имени и т. д.).
Обратите внимание, что ваш псевдокод onPress является проблематичным для агента многократного использования, если вы не делаете что-то вроде наличия List<? extends Person>
в качестве параметра для вашего Агента (так, чтобы при создании он имел общую ссылку на то, что позволяет ему циклически через агентов с функцией tryToEscapeBuilding
).
Что такое «пользовательский модификатор»? Я никогда не слышал этого термина в отношении AnyLogic. –
А, интересно; Мне нужно играть с этим. (Вы все еще пропустите такие вещи, как абстрактные методы, хотя вы можете приблизиться к нему с помощью метода (функции) суперкласса, который создает исключение, говорящее, что его нужно переопределить.) Я уверен, что вы не можете теневые поля, хотя (это не позволит вам добавлять поля с тем же именем), хотя это в целом менее полезно. –
@monsieurRigsby, я не уверен, что вы подразумеваете под «теневыми полями», но вы можете переопределить: методы, параметры, переменные и т. Д. С тем же именем в суперклассе –