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


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


                  год        этаж       летний_месяц  весенний_месяц

                              |

                          нижний_этаж

 

                         Рис. 4.2

где

            type нижний_этаж is new этаж range 1..3 ;

            type летний_месяц is new месяц range июнь..август ;

            type весенний_месяц is new месяц range март..май ;

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

 

4.11.8.2. Родственные типы и преобразования между ними

Типы из одного дерева в лесу типов называются РОДСТВЕННЫМИ. В Аде допустимы явные преобразования между родственными типами, которые указываются с помощью имени так называемого целевого типа, т.е. типа, к которому следует преобразовать данное. Каждое определение производного типа автоматически (по умолчанию) вводит и операции преобразования родственных типов (но применять эти операции нужно явно!). Например, можно написать

A := год(B) ;

а также

B := этах(A);

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

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

Например, в задаче моделирования учреждения может появиться тип "сотрудник", характеризуемый целой анкетой атрибутов и набором базовых операций ("загружен_ли", "выполнить_задание", "включить_в_группу" и т.п.). Есть и

            type рук_группы is new сотрудник ;

со своими базовыми операциями ("дать_задание", "подготовить_план_работы", "где_сотрудник" и т.п.).




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