Языки программирования - концепции и принципы

и разрешить прямое именование компонентов,


    With-конструкция добавляет составные имена к пространству имен ком­пиляции; также можно включить use-конструкцию, чтобы открыть про­странство имен и разрешить прямое именование компонентов, встречающих­ся в спецификации:

with Airplane_Package;

use Airplane_Package;

procedure Air_Traffic_Control is

       A: Airplane_Data;                                             -- Непосредственно видима

       Index: Integer; begin

       New_Airplane(A, Index):                                  -- Непосредственно видима

end Air-Traffic-Control;

Одна трудность, связанная с use-конструкциями, состоит в том, что вы може­те столкнуться с неоднозначностью, если use-конструкции для двух пакетов открывают одно и то же имя или если существует локальное объявление с тем же самым именем, что и в пакете. Правила языка определяют, каким в случае неоднозначности должен быть ответ компилятора.

    Важнее, однако, то, что модуль, в котором with- и use-конструкции связа­ны с множеством пакетов, может стать практически нечитаемым. Такое имя, как Put_Element, могло бы исходить почти из любого пакета, в то время как местоположение Airplane_Package.Put_Element вполне очевидно. Ситуация аналогична программе, написанной на языке С, в которой много включаемых файлов: у вас просто нет удобного способа отыскивать объявления, и единст­венное решение — использовать внешний программный инструмент или со­глашения о наименованиях.

   Программистам, пишущим на языке Ada, следует использовать преимуще­ства самодокументирования модулей за счет with, a use-конструкции применять только в небольших сегментах программы, где все вполне очевид­но, а полная запись была бы чересчур утомительна. К счастью, можно поместить use-конструкции внутри локальной процедуры:

procedure Check_for_Collision is

      use Airplane_Package;

      A1: Airplane-Data;

begin

       Get_Airplane(1, A1);

end Check_for_Collision;

В большинстве языков программирования импортирующий модуль автомати­чески получает все общие (public) ресурсы импортированного модуля.

Содержание  Назад  Вперед