Введение

В информатике, акторное моделирование — это форма моделирования программного обеспечения, ориентированная на программных акторов. Акторное моделирование наиболее часто используется для раннего моделирования требований, что позволяет понять, кто является пользователями и заинтересованными сторонами системы и каковы их интересы и потребности относительно этой системы. Растущая сложность современных систем делает этот подход более целесообразным, чем традиционный, более механистический подход. Рассматривая систему с точки зрения пользователей и их потребностей, легче понять, для чего она предназначена. Этот подход также помогает пользователям сформулировать требования к системе. Акторное моделирование обычно комбинируется с моделированием целей и задач для более глубокого понимания контекста пользователя. Существуют различные языки моделирования, поддерживающие акторное моделирование, например i* и EEML.

Роли

Роли позволяют представить актора в обезличенном виде. Возможно смоделировать роль и связать ее с актером, который ее исполняет. Если актер, исполняющий роль, прекращает это делать по какой-либо причине, его можно легко заменить другим актером, который с этого момента будет исполнять эту роль; это может быть временная или долгосрочная замена. Кроме того, существующему актеру можно назначить новые и/или другие роли. Преимущество этого подхода заключается в том, что сама модель не требует изменений; необходимо лишь перенастроить связи между актерами и ролями.

Ограничения модели актера

Использование акторов снижает вероятность возникновения гонок данных, но не устраняет их полностью. Го́нки данных возможны, если сообщения или базовая логика, с которыми работают объекты-акторы, включают изменяемые общие объекты. Реализация действительно параллельных структур данных – непростая задача. Модель акторов улучшает некоторые аспекты этой проблемы, но не решает её полностью. Возможны взаимоблокировки (дедлоки) в различных ситуациях. Модель акторов реализует передачу сообщений актору, но не предоставляет возможности отправить запрос и получить конкретный статус или ответ на него. Синхронные ответы требуют использования блокирующей логики. Информацию об объектах, обеспечивающих подобное поведение, можно найти в разделе о "futures" (обещаниях).