Пакет |
Top Previous Next |
Модулем в AnyDynamics, как и в языке UML, является «пакет» (package).
Пакет — это контейнер для группы семантически связанных элементов, ограничивающий область их видимости.
Элементы, объявленные как «public», видимы извне под составным именем, включающим в качестве префикса имя пакета, например P. E, где P — имя пакета, а E — имя элемента в этом пакете. Остальные элементы видимы только внутри данного пакета. В описании элемента пакета видимы все остальные элементы этого же пакета. Пакет образует собственную область видимости и все элементы пакета должны иметь несовпадающие имена. Для того чтобы использовать экспортируемые компоненты пакета A в пакете B, необходимо в описании пакета B поместить указание импортирования пакета A.
Элементами пакета в AnyDynamics являются (рис.1): • активные динамические классы (Активный динамический объект); • определения типов данных (Типы данных); • глобальные константы (Константы): • глобальные параметры (Параметры); • глобальные переменные (Переменные): • глобальные алгоритмические функции и процедуры (Функции и процедуры, определяемые пользователем).
Классы, определенные на уровне пакета, будем называть "глобальными" или "внешними" в отличие от внутренних классов, определенных на уровне другого класса.
В пакете имеется предопределенный приватный класс «Model», который является по терминологии языка UML «синглетным», т. е. может иметь только один экземпляр. Этот единственный экземпляр с именем «model» и является выполняемой моделью, с которой проводится вычислительный эксперимент. Значение функции time() для этого объекта соответствует значению непрерывной составляющей глобального времени вычислительного эксперимента.
Указанное в определении глобального параметра значение может быть изменено в действиях начального перехода класса «Model» (если этот класс объявлен гибридным) с помощью предопределенной процедуры reinit. Таким образом, глобальный параметр – это «константа, которую можно менять только один раз». Использование глобальных параметров позволяет подобно использованию констант оптимизировать решение систем уравнений, оставляя в то же время возможность изменять значения импортируемых из других пакетов глобальных параметров согласно прикладной логике данного пакета.
Каждый элемент проекта имеет видимость, которая может быть private (закрытая) , public (открытая) или protected (полуоткрытая). Объявленные типы всегда имеют public видимость. Private элемент может использоваться только в своем пакете. Public элемент может использоваться как в своем, так и в других пакетах. Protected элемент может использоваться как в своем, так и в других пакетах, но в других пакетах не будет видно его "внутреннее устройство". Чтобы использовать public или protected элемент другого пакете, проект должен импортировать этот другой пакет. Импортируемый проект помещается в список импортируемых пакетов проекта. Все public элементы импортируемого пакета доступны для использования в импортирующем проекте. Импортированные элементы имеют составные имена с именем пакета в качестве префикса, например, SysLib.CSineGenerator. Проект, состоящий преимущественно из public элементов, предназначенных для использования в других проектах, обычно называется библиотекой. Хотя содержимое библиотеки предназначено для использования в других проектах, каждый проект-библиотека, как и любой другой проект, имеет класс Model. Класс Model проекта-библиотеки, как правило, либо является пустым, либо имеет наполнение, облегчающее тестирование элементов библиотеки.
Рис.1
|