Языки программирования. Практический сравнительный анализ


Языки программирования. Практический сравнительный анализ - стр. 253


            function перечень_связей (узел: имя_узла) return BOOLEAN is

                                    . . . -- тело как обычно

            end перечень_связей;

           

   separate (управление_сетью)

            procedure вставить (узел: in  имя_узла) is

                                    . . . -- тело как обычно

            end вставить;

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

Итак, к вторичному модулю можно "добраться" только через его партнера. Поэтому в отличие от открытых библиотечных модулей их естественно называть закрытыми. Свойство закрытости обеспечено применением явной двусторонней связи.

Подчеркнем, что закрытые модули появились в Аде не случайно. Они, с одной стороны, естественное развитие разделения спецификации и реализации до уровня модульности (вспомните, модуль - материальное воплощение абстракции). С другой стороны, они обслуживают очень важный принцип конструирования языка Ада, который можно было бы назвать принципом защиты авторского права (языковыми средствами).

Дело в том, что тексты вторичных модулей можно вовсе не предоставлять пользователю при продаже програмных изделий, созданных на Аде. Ему передаются только спецификации - открытые модули и оттранслированные вторичные. Тогда пользователь никак не сможет незаконно добраться до вторичных модулей. При соответствующей защите от несанкционированного доступа он не только не сможет неправильно пользоваться ими, но не сможет и скопировать или употребить для построения других систем (отдельно от закупленных).

Замечание.

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


- Начало -  - Назад -  - Вперед -