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


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


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

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

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

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

  A,B : вектор_любой_длины (1..10) ;

  выходной : день_недели range сб..вс ;

  праздник : день_недели ;

  день_рождения : день_недели ;

  C,D : вектор_любой_длины (1..11) ;

  будний_день :  день_недели range пн..пт ;

  учебный_день : день_недели range пн..сб ;

Тогда присваивания

  A := B; B := A; праздник := день_рождения;

  день_рождения := будний_день;

  праздник := выходной;

  C := D; D := A;

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

Присваивания

  A := C; C := A; A := D; B := D; D := A; D := B;

  будний_день := выходной;

  выходной := будний_день;

также не требуют дополнительной динамической проверки - они всегда недопустимы, и обнаружить это можно статически, при трансляции.

А вот присваивания

     будний_день := учебный_день;

     будний_день := праздник;

     учебный_день := выходной;

     учебный_день := праздник;

нуждаются в динамической проверке (почему?).

 

4.11.6. Принцип целостности объектов

Вернемся к нашей процедуре "минус", вооруженные концепцией подтипа.


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