Главная » Просмотр файлов » В.Ш. Кауфман - Языки программирования - концепции и принципы (1990)

В.Ш. Кауфман - Языки программирования - концепции и принципы (1990) (1160787), страница 39

Файл №1160787 В.Ш. Кауфман - Языки программирования - концепции и принципы (1990) (В.Ш. Кауфман - Языки программирования - концепции и принципы (1990)) 39 страницаВ.Ш. Кауфман - Языки программирования - концепции и принципы (1990) (1160787) страница 392019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 39)

входы задач (вспомните, вызов входа по форме ничем не отличается от вызова

процедуры). Для краткости будем в этом разделе называть имена всех указанных

категорий перекрываемыми именами.

Профилем перекрываемого имени (и соответствующего объявления)

называется кортеж, составленный в естественном порядке из формальных

параметров и результата соответствующей подпрограммы (указываются имена и

типы параметров и результата, если он имеется).

Два объявления одинаковых имен называются омографами, когда их профили

совпадают, либо когда одно из имен не относится к классу перекрываемых.

Основное ограничение : омографы в одной области локализации в Аде

запрещены. Вместе с тем во вложенной области локализации имя может быть

закрыто только омографом, а не просто объявлением такого же имени.

Пример:

procedure P is

function F (X : FLOAT) return INTEGER ;

I : INTEGER ;

...

procedure P1 is

function F (X : INTEGER ) return INTEGER ;

...

begin

I := F(1.0); -- эквивалентно I:= P.F(1.0)

...

I := F(1); -- эквивалентно I := P1.F(1)

end P1;

...

end P;

10.7.4. Область непосредственной видимости

Какие же объявления непосредственно видимы из данной точки программы?

Начнем с проблемы видимости для простых имен: определить область

(непосредственной) видимости - множество имен, (непосредственно) видимых

(доступных без уточнений с помощью разделителя ".") из некоторой точки

программы.

Область видимости в некоторой точке компилируемого модуля

конструируется по следующей схеме из последовательно объемлющих друг друга

частей (буквы на схеме соответствуют перечисленным ниже частям области

видимости).

{--д--{--г--{--в--{--б--{--а--}--б--}--в--}--г--}--д--} , где

а) объявления, текстуально входящие в рассматриваемый модуль и видимые

из рассматриваемой точки по традиционным правилам блочной структуры (с

учетом Ада-обобщения этого понятия на области локализации - вспомните циклы,

объявления комбинированных типов и т.п.);

б) объявления из предопределенного пакета STANDARD, не закрытые

объявлениями из части (а);

в) контекст модуля, задаваемый двусторонними связями с программной

библиотекой; другими словами, рассматриваются объявления родительских

модулей, если рассматриваемый модуль - вторичный, и в область видимости

добавляются только те из них, которые не закрываются частями (а) и (б);

г) имена библиотечных модулей, упомянутых в указателе контекста

рассматриваемого модуля;

д) объявления из видимой части тех пакетов, имена которых перечислены в

видимых указателях сокращений и оказались не закрытыми на предыдущмх этапах.

Пример:

package P is -- первичный библиотечный пакет

I : INTEGER ;

end P;

with P; use P;

procedure Q is -- какова область видимости здесь?

package R is

B : BOOLEAN ;

end R; -- а здесь?

use R;

begin

B := TRUE;

I := 1;

end Q;

Вопрос. Зачем на схеме указаны две компоненты каждой из частей

(б)..(д)? Каким объявлениям они могут соответствовать?

Подсказка. Не все объявления предшествуют использованию.

10.7.5. Идентификация простого имени

Итак, область видимости построена. Теперь нужно выбрать подходящее

объявление. Если имя перекрыто, получаем несколько вариантов объявления и,

чтобы отобрать нужное, необходимо исследовать контекст использующего

вхождения имени. Тут много дополнительных правил, на которых останавливаться

не будем. Если в конечном итоге контекст позволяет отобрать ровно одно

объявление, то перекрытие считается разрешенным, а имя - полностью

идентифицированным; в противном случае имеет место нарушение языковых

законов.

10.7.6. Идентификация составного имени

Идентификация составного имени сводится к последовательной

идентификации простых имен и вычислению соответствующих компонент

структурных объектов при движении по составному имени слева направо.

Пример:

with PACK; use PACK;

procedure P is

package Q is

type T is record

A : T1;

B : T2; -- T1 и T2 объявлены в PACK

end record ;

end Q;

use Q;

X : T;

Y : T1;

procedure PP is

X : FLOAT;

...

begin

P.X.A.:= Y; -- все правильно (почему?)

end PP;

end P;

Заметим, что перекрытие может "тянуться" ( и "множиться"!) при анализе

вдоль имени. Например, перекрытое имя функции может соответствовать двум

(или нескольким) потенциальным результатам, каждый из которых может иметь

сложную структуру. Это заставляет анализировать каждый из них. Но при этом

анализе для продвижения по полученным структурам может снова потребоваться

учитывать потенциальные результаты перекрытых функций и т.д. Конечно, так

программировать нельзя (ненадежно!), но язык позволяет.

Упражнение. Придумайте соответствующие примеры перекрытий.

10.8. Недостатки именования в Аде

Основные принципы именования в языке Ада рассмотрены. Очевидно, что

идентификация достаточно сложно устроенного имени оказывается

нетривиальной. Но не это самое страшное. Оказывается, что именование в Аде

не удовлетворяет одному из основных требований к этому языку - надежности.

Основных источников ненадежности два. Во-первых, пространство имен

компилируемого модуля может формироваться неявно (вспомните об операциях

производных типов). Во-вторых, смысл указателя сокращений определен столь

неестественно, что оказался нарушенным принцип целостности абстракций.

Упражнение. Попробуйте найти эту неестественность, не читая пока

дальше.

Вспомните, указатель сокращений действует так, что в точке, где он

расположен, становятся непосредственно видимы имена из видимой части

перечисленных в нем пакетов. Но (с учетом порядка построения области

непосредственной видимости) не все такие имена, а только такие, которые не

закрыты именами, непосредственно видимыми в этой точке без указателя

сокращений. Здесь самое главное в том, что "не все". Обоснование у авторов,

конечно, имеется, однако оказывается нарушенным важнейший принцип - принцип

целостности. Действительно, если пакет - логически связанная совокупность

ресурсов, или, иными словами, модель мира, то указатель сокращений, по

основной идее, "вскрывая" пакет, позволяет удобно работать с этой моделью.

Однако в том то и дело, что пакет может быть вскрыт не полностью и тогда

целостность модели оказывается нарушенной.

Пример:

package P is -- модель мира:

type T1 is range 1..10; -- типы,

...

type T10 is ...

procedure P1 ... -- процедуры,

...

procedure P10 ...

I1 : T1; -- переменные

...

I10 : T10;

end P;

with P; use P; -- работа в модели мира P

procedure K is

-- нет объявлений имен T1-T10, P1-P10, I1-I10

begin

I1 := 1: -- I1 - компонента модели

...

declare -- блок, область локализации

type T1 is range -10..10;

I1 : INTEGER;

... -- работа не в модели

use P; -- казалось бы, снова нужна модель P

begin -- но I1 будет не то !! целостность

I1 := 1; -- I1 не из модели !! модели нарушена

I2 := 1; -- I2 снова в модели !!

...

Упражнение. Постарайтесь найти доводы в пользу адовской семантики

указателя сокращений. Ведь зачем-то она определена именно так!

Подсказка. Авторы отдавали приоритет явным объявлениям перед неявными

(разумно, если не противоречит более важным принципам).

Еще более запутанные ситуации возможны при сочетании указателя

сокращений с неявными объявлениями операций для производных типов. Ведь

такие объявления равноправны с явными объявлениями!

Упражнение. Придумайте соответствующие ситуации (например, когда имя из

модели мира становится недоступным из-за наследуемой операции, объявленной в

весьма "отдаленном" пакете).

Итак, доказана неформальная теорема о свойствах аппарата именования в

Аде: именование в Аде сложное и в определенных сочетаниях опасное,

нарушающее важнейшие общеязыковые принципы. Вместе с тем этот аппарат по

сложности и выразительной мощи в значительной степени согласован с

аналогичными характеристиками языка в целом.

11. Обмен с внешней средой

11.1. Специфика обмена

До сих пор мы занимались внутренним миром исполнителя, игнорировали

одну из важнейших технологических потребностей - потребность управлять

обменом данными между исполнителем и внешней средой (управлять, как часто

говорят, вводом-выводом данных). Настало время поговорить о связи

исполнителя с внешним миром.

Конечно, можно считать, что такая связь обеспечивается соответствующими

базисными операциями исполнителя; они имеются в каждом исполнителе

(почему?). Управление обменом состоит в указании подходящей

последовательности таких базисных операций. Казалось бы, никаких особых

проблем.

На самом деле управление обменом обладает целым рядом особенностей,

создающих специфические проблемы на всех уровнях проектирования - от

создания аппаратуры до создания конкретных прикладных программ.

Источник всех таких проблем - в потенциально неограниченной сложности,

изменчивости и непредсказуемости внешней среды, исключительном разнообразии

требований к обмену с ее стороны. Коротко говоря, внутренний мир исполнителя

обычно несравненно беднее и определеннее, чем его внешний мир.

Конечно, проектировать связь исполнителя с внешним миром в каждом

конкретном случае удается только за счет построения моделей внешнего мира, с

нужной степенью подробности отражающих его особенности. Базовый ЯП должен

содержать средства для построения таких моделей. Другими словами, в нем

должны быть подходящие средства абстракции и конкретизации. Вместе с тем

возможны и встроенные в язык готовые модели, которые авторы ЯП посчитали

особо значимыми.

И то, и другое есть в Аде. Перечислим специфические особенности

внешнего мира с точки зрения обмена, дадим общую характеристику

соответствующего аппарата абстракции-конкретизации, а затем продемонстрируем

его реализацию в Аде.

1. Внешние объекты и их относительная независимость от исполнителя.

Первая особенность в том, что объекты внешней среды и связи между ними, в

отличие от внутренних объектов исполнителя, не находятся под его контролем

полностью. Такие объекты могут возникать вне программы, взаимодействовать и

изменяться, а также исчезать совершенно независимо от действий исполнителя.

С точки зрения ЯП это означает принципиальную невозможность полностью

зафиксировать в языке смысл взаимодействия исполнителя с любым мыслимым

внешним объектом. Для области встроенных систем, характеризуемой

исключительным разнообразием внешних объектов, это означает необходимость

иметь в базовом ЯП средства описания взаимодействия с объектами заранее

неизвестной природы.

Например, в Аде это уже знакомые нам средства определения новых типов

вместе с детальным управлением конкретным представлением объектов (вплоть до

программирования в терминах другого ЯП).

Характерное проявление относительной независимости внешних объектов -

невозможность определить в ЯП единый метод их именования. Поэтому в базовом

ЯП должен быть специальный способ представления внешних имен, причем

подробности этого представления по необходимости должны зависеть от

конкретной внешней среды. Например, в Аде внешнее имя представляется строкой

символов, заключенной в кавычки. Детали зависят от конкретной среды (строго

говоря, "определяются реализацией").

2. Разнообразие периферийных (внешних) устройств. Вторая особенность

тесно связана с первой и состоит в исключительном разнообразии и

изменчивости набора устройств, выступающих во внешней среде партнерами

исполнителя по обмену (взаимодействию). В сущности, такое разнообразие -

прямое следствие все более широкого внедрения компьютеров в самые различные

сферы деятельности.

Таким образом, с точки зрения набора устройств внешний мир исполнителя

изменяется весьма интенсивно. Причем меняется и в зависимости от рыночной

конъюнктуры, и от прикладной области, и в зависимости от решаемой задачи, и

от конкретных условий ее решения, и, наконец, динамически изменяется в

процессе самого решения.

Например, зависимость от предметной области проявляется в том, что для

числовых расчетов может оказаться достаточным ввода с перфокарт и вывода на

печать; для игр нужно вводить с клавиатуры (или применять специальные

манипуляторы) и выводить на экран (желательно цветной); для управления

объектами в реальном времени нужно получать информацию от датчиков и

выдавать управляющие сигналы органам управления объектами и т.п.

Зависимость от решаемой задачи проявляется, например, в том, что при

подготовке книги к изданию с помощью компьютера первоначальный набор текста

удобнее вести без применения специальных манипуляторов (типа "мышь",

Характеристики

Тип файла
Документ
Размер
1,26 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6374
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее