Модульная разработка
Проект состоит из элементов, но в функциональном смысле он разделен на изолированные части, каждая из которых может использоваться в других частях проекта.
Стандартно внутри одной подсистемы вы можете использовать только элементы этой подсистемы. Элементы других подсистем недоступны вам без дополнительных действий.
Чтобы элементы подсистемы Б использовать в подсистеме А, выполните следующие действия:
- В подсистеме Б установите видимость у элементов и языковых конструкций, которые вы хотите использовать «снаружи» подсистемы.
- В подсистеме А используйте подсистему Б (или дополнительно импортируйте в элементы/модули подсистемы А пространства имен из подсистемы Б).
Область видимости элемента проек та
У любого элемента проекта есть свойство ОбластьВидимости со значениями:
- ВПодсистеме — элемент виден внутри своей подсистемы во всех пакетах. Значение по умолчанию;
- ВПроекте — элемент виден во всех подсистемах своего проекта;
- Глобально — элемент виден в других проектах.
Стандартно элемент виден только внутри своей подсистемы (ВПодсистеме) и недоступен в других подсистемах. Если вам хочется использовать этот элемент в других подсистемах или в других проектах, нужно установить у него область видимости в значение ВПроекте или Глобально.
Тем самым вы сделаете элемент публичным, т. е. он может быть доступен в других подсистемах.
Видимость языковых конструкций
Переменным, методам, перечислениям, структурам, исключениям вы тоже можете задать в модуле область видимости. Для этого используйте аннотации видимости, которые могут принимать следующие значения:
- @Локально — конструкция видна только в своем модуле (значение по умолчанию);
- @ВПодсистеме — конструкция видна только в подсистеме, которой принадлежит модуль;
- @ВПроекте — конструкция видна только в проекте, которому принадлежит модуль;
- @ВТипе — конструкция видна в данном типе и его наследниках;
- @Глобально — конструкция видна в других проектах.
Например:
Квалифицированное имя элемента
Все элементы проекта порождают типы встроенного языка. Данные типы принадлежат пространству имен, совпадающему с именем подсистемы и пакета, в которых они были созданы.
Для обращении к типу вы можете использовать следующие форматы имен:
- Полное квалифицированное имя:
Поставщик::ИмяПроекта::Подсистема[::Пакет]::ИмяТипа
. - Частичное квалифицированное имя:
Подсистема[::Пакет]::ИмяТипа
. - Краткое, неквалифицированное, имя:
ИмяТипа
.
Частичные квалифицированные имена используются при обращении к типам из используемых подсистем текущего проекта. Для обращения к типу из другого проекта или библиотеки необходимо указать полное квалифицированное имя. Например, для типа ПолучателиСообщений
из библиотеки Рассылки и уведомления полное имя будет выглядеть следующим образом: e1c::РассылкиИУведомления::Основное::ПолучателиСообщений
. Если вы хотите обращаться к типам по их краткому имени, необходимо выполнить импорт пространств имен.
Рассмотрим пример. Пусть у нас есть проект вида:
Имена, которые вы даете элементам проекта, участвуют в создании системы типов встроенного языка. По этой причине в одном пространстве имен (в одной подсистеме или в одном пакете) не может быть двух элементов с одинаковыми именами.
Разрешение имен
Во время компиляции модуля все неквалифицированные имена разрешаются в квалифицированные. С ка ждым модулем связан контекст пространства имен, который определяет, какие типы, свойства и методы доступны с указанием или без указания пространства имен.
Если какое-либо имя доступно в нескольких пространствах (в том числе в стандартном, собственном или импортируемом) без указания пространства имен, то при разрешении имени используются приоритеты пространств имен. Пространства имен перечислены в порядке убывания приоритета:
-
пространства имен пакетов текущей подсистемы;
примечаниеЕсли несколько пакетов содержат тип с одинаковым именем, то выдается ошибка неоднозначности.
-
пространства имен текущего проекта;
-
пространства имен остальных проектов;
-
стандартное пространство имен (
Стд
).
Использование подсистем
У подсистемы есть свойство Использование. В этом свойстве вы можете перечислить подсистемы, публичные элементы которых вы хотите использовать в данной подсистеме. К типам таких элементов вы сможете обращаться по квалифицированному имени, например:
Импорт пространств имен
В любые элементы проекта и в модули вы можете импортировать другие пространства имен.
В элементе проекта они перечисляются в свойстве Импорт, а в модуле для этого используется инструкция импорт
.
Например, в некотором модуле:
После того как вы выполнили импорт пространств имен, вы можете использовать элементы проекта и конструкции языка с областью видимости @ВПроекте или @Глобально по их неквалифицированному имени, как будто это собственные элементы текущей подсистемы.
Импорт, выполненный в элементе проекта, не влияет на его модули. То есть пространства имен, импортированные в элемент проекта, не становятся автоматически доступны в модулях этого элемента. Если эти же пространства имен нужны вам и в модулях, то в каждый модуль их нужно импортировать отдельно.