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


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


subtype рабочий_день is день_недели range пн..пт ;

subtype операция_типа_сложения is 

                              код_операции range сложить..вычесть ;      

subtype операция_типа_умножения is

                              код_операции range умножить..разделить ;

subtype натуральный is INTEGER range 0..INTEGER'последний ;

subtype положительный is INTEGER range 1..INTEGER'последний ;

subtype буква is CHARACTER range `A'..`Z' ;

subtype цифра is CHARACTER range `0'..`9' ;

В качестве простого упражнения объявите подтип весенний_месяц, выходной_день, восьмеричная_цифра и т.п.

По внешнему виду объявление подтипа похоже на объявление производного типа. Однако это конструкты совершенно разного назначения. Разберемся с этим подробнее.

 

4.11.8. Подтипы и производные типы. Преобразования типа

Формально отличие производных типов от подтипов должно быть уже известно. Производный тип - это именно новый тип, характеризуемый классом значений и набором базовых операций.

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

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

Кроме того, производный тип в общем случае несовместим по присваиванию и передаче параметров как с родительским типом, так и с другими производными типами од­но­го ро­ди­тель­ского типа. Например

            type год is new INTEGER range 0..2099 ;

   type этаж is new INTEGER range 1..100 ;

                        A: год ;

                        B: этаж ;

                              ...

                        A := B ; -- недопустимо! Несовместимость типов, хотя

                                                       -- значения заведомо попадут в нужный

                  -- диапазон.




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