"Адское" программирование Ada-95 -Компилятор GNAT

         

Контекст и видимость



Контекст и видимость

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

Каждая инструкция и/или каждая конструкция языка имеет объемлющий контекст.Обычно, контекст легко увидеть в исходном тексте, поскольку контекст имеет какую-либо точку входа (описательная часть declare, идентификатор подпрограммы,



идентификатор составного типа, идентификатор пакета...) и какую-либо явную точку завершения.Как правило, явная точка завершения контекста обозначается с помощью соответствующей инструкции end.Таким образом, как только мы обнаруживаем в исходном тексте какую-либо инструкцию end, мы понимаем, что она является точкой завершения какого-нибудь контекста.Контекст может быть вложенным.Например, одна процедура может быть описана внутри другой процедуры.

Несколько иначе выглядит ситуация, когда спецификатор совместности контекста with помещает в контекст какой-либо библиотечный модуль.В этом случае в контекст помещаются все ресурсы указанного библиотечного модуля, но при этом, спецификатор with не делает эти ресурсы непосредственно видимыми.

В Аде, какой-либо ресурс может находиться в контексте (scope) и при этом он не будет непосредственно видимым.Эта концепция больше характерна для Ады чем для других хорошо известных языков программирования.Для того чтобы соответствующие ресурсы были непосредственно видимыми, необходимо использовать соответствующие средства:

спецификатор использования
use
делает непосредственно видимыми все публично доступные ресурсы пакета
спецификатор использования
use type
 -  делает непосредственно видимыми все публично доступные знаки операций для указанного типа
полная точечная нотация  -  ресурс указанный с помощью полной точечной нотации становится непосредственно видимым
локальное переименование операций и знаков операций  -  обычно, является лучшим средством обеспечения непосредственной видимости для операций и знаков операций

В процессе разработки, сообщения об ошибках, получаемые от Ада-компилятора, могут указывать, что некоторые ресурсы не видимы в том месте где они используются.Следует заметить, что подобные проблемы видимости наиболее часто возникают со знаками операций.Для того, чтобы сделать ресурс непосредственно видимым, можно использовать какой-либо из перечисленных выше способов.



Содержание раздела








Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий