Управление видимостью
При построении большой модульной системы, существует необходимость в определении того, что должно быть видимым и того, что не должно быть видимым за пределами какого-либо модуля (пакет, тип или подсистема).
При этом, могут существовать различные промежуточные уровни видимости.
Предположим, что модуль является компонентом какой-либо большой системы.
В этом случае, ресурсы данного модуля могут быть не доступны вне системы.
Внутри системы, ресурсы модуля могут быть видимы для остальных частей общей системы, но допуская при этом частичную видимость, которая предоставляет некоторые компоненты или операции модуля только для выбранной группы модулей системы.
Необходимо обратить внимание на то, что данные проблемы подобны, вне зависимости от того - рассматриваем-ли мы типы, пакеты или классы наследования.
Таким образом, некоторые свойства могут быть:
публичные (public), то есть видимые всем
приватные (private), то есть видимые, но не для всех, а только для определенного круга "друзей", или наследников и дочерних модулей
внутренние (internal), то есть не видимы ни для кого, включая дочерние модули
В качестве примера, можно привести следующую аналогию: то что на фасаде дома - то видно всем (public), то что внутри дома - то видно только членам семьи (private), то что в чьем-либо теле - не видно никому (internal).
Благодаря существованию трех уровням видимости, существуют три уровня управления:
публичные (public) свойства описываются в интерфейсе (спецификация пакета)
приватные (private) свойства описываются в спрятанной части интерфейса (приватная часть спецификации пакета)
внутренние (internal) свойства описываются в части реализации (тело пакета)
Следует заметить, что различие между приватными и внутренними описаниями не требовалось в Ada 83.
Необходимость в таком различии появилась в Ada95, поскольку появилась новая концепция - концепция дочерних модулей, и сопутствующая ей необходимость в управлении уровнями видимости.