Контекст и видимость
Контекст и видимость
Ошибочное понимание разницы между контекстом (scope) и видимостью (visibility) может вызвать трудности у многих программистов, которые знакомятся с языком программирования Ада.Следует учесть, что понимание этого различия имеет важное значение при использовании Ады для разработки программного обеспечения.Спецификатор совместности контекста with помещает соответствующий библиотечный модуль в контекст, однако, ни один ресурс этого модуля не становится непосредственно видимым для клиента.Это является основным различием от директивы #include семейства языков C или директивы uses в реализации Паскаль-системы фирмы Borland.Ада предоставляет множество способов обеспечения непосредственной видимости различных ресурсов, после того как они помещены в контекст.Разделение контекста и видимости является важным концептом разработки программного обеспечения.Однако, следует заметить, что этот концепт редко реализовывается в различных языках программирования.Примечательно также, что идея пространства имен namespace, принятая в C++, подобна концепции контекста и видимости Ады.
Каждая инструкция и/или каждая конструкция языка имеет объемлющий контекст.Обычно, контекст легко увидеть в исходном тексте,
поскольку контекст имеет какую-либо точку входа
(описательная часть declare,
идентификатор подпрограммы,
идентификатор составного типа,
идентификатор пакета...)
и какую-либо явную точку завершения.Как правило, явная точка завершения контекста обозначается с помощью
соответствующей инструкции end.Таким образом,
как только мы обнаруживаем в исходном тексте какую-либо инструкцию end,
мы понимаем, что она является точкой завершения какого-нибудь контекста.Контекст может быть вложенным.Например, одна процедура может быть описана внутри другой процедуры.
Несколько иначе выглядит ситуация, когда спецификатор совместности контекста with помещает в контекст какой-либо библиотечный модуль.В этом случае в контекст помещаются все ресурсы указанного библиотечного модуля, но при этом, спецификатор with не делает эти ресурсы непосредственно видимыми.
В Аде, какой-либо ресурс может находиться в контексте (scope) и при этом он не будет непосредственно видимым.Эта концепция больше характерна для Ады чем для других хорошо известных языков программирования.Для того чтобы соответствующие ресурсы были непосредственно видимыми, необходимо использовать соответствующие средства:
спецификатор использования use |
- | делает непосредственно видимыми все публично доступные ресурсы пакета |
спецификатор использования use type |
- | делает непосредственно видимыми все публично доступные знаки операций для указанного типа |
полная точечная нотация | - | ресурс указанный с помощью полной точечной нотации становится непосредственно видимым |
локальное переименование операций и знаков операций | - | обычно, является лучшим средством обеспечения непосредственной видимости для операций и знаков операций |
В процессе разработки, сообщения об ошибках, получаемые от Ада-компилятора, могут указывать, что некоторые ресурсы не видимы в том месте где они используются.Следует заметить, что подобные проблемы видимости наиболее часто возникают со знаками операций.Для того, чтобы сделать ресурс непосредственно видимым, можно использовать какой-либо из перечисленных выше способов.