- •3. Объекты данных в языках программирования
- •3.1. Имена
- •3.2. Константы
- •3.3. Переменные
- •4. Механизмы типизации
- •4.1. Статические и динамические типы данных
- •Механизмы типизации
- •4.2. Слабая типизация
- •4.3. Строгая типизация
- •4.4. Производные типы
- •Var temp_weight, sum_weight: integer;
- •I: integer;
- •Var temp_weight, sum_weight: weight;
- •I: index;
- •4.5. Эквивалентность типов
- •4.6. Наследование атрибутов
- •4.7. Ограничения
- •4.8. Подтипы
4.7. Ограничения
Для повышения надежности языка обычно ограничивают не только множество операций, наследуемое от базового типа, но и наследуемое множество значений.
Пример: Ограничение диапазона включено непосредственно в определение производного типа: type index = 1..100;
Ограничение множества значений, наследуемого производным типом, до множества необходимых значений повышает ясность и надежность программы и оптимизирует результирующую программу за счет исключения проверок принадлежности значений переменных заданному диапазону.
sum:=0;
for i:=1 to 100 do sum:=sum+a[i];
4.8. Подтипы
Подтип позволяет ограничить диапазон значений объектов из заданного класса без изменения их статуса как членов этого класса.
Пример: в языке Ада подтип shortint определяется как
sybtype shortint = integer range -128… 127
Отличие производного типа и подтипа заключается в том, что производный тип вводит совершенно новый класс объектов, отличный от всех остальных, в то время как подтип просто накладывает ограничения на некоторый тип.
4.9. Анонимные типы и подтипы
Анонимный тип предоставляет возможность не использовать имена типов (подтипов) при объявлении.
Пример: в языка Ада
var stud_answer, etalon: (yes, no);
или
var stud_answer: (yes, no);
etalon: (yes, no);
При структурной эквивалентности типов оба объявления переменных stud_answer и etalon являются синтаксически корректными.
В случае именной эквивалентности второе описание ведет к некорректному присваиванию
stud_answer:=etalon;
Пример:
var j: integer 1..10;
k: integer 1..10;
В случае именной эквивалентности типов имеет место неоднозначность объявлений переменных j и k, поскольку специфицируемые для j и k типы могут интерпретироваться либо как производные типы с ограничениями, либо как подтипы с ограничениями.
Именная эквивалентность существенно ограничивает использование на практике анонимных типов и заставляет программистов вводить новые типы в тех случаях, когда можно было бы обойтись без них.