Инструменты пользователя

Инструменты сайта


bb:redbook:210

Различия

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

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
bb:redbook:210 [2019/07/24 10:07]
caufman [2. Абстрактные типы]
bb:redbook:210 [2019/07/24 10:20]
caufman [4. Ограниченные типы]
Строка 50: Строка 50:
 ==== 3. Расширяемые типы ==== ==== 3. Расширяемые типы ====
 Расширяемые типы чем-то похожи на абстрактные. Отличие состоит в том, что тип, описанный как расширяемый, может быть использован сразу: без необходимости наследовать его, прежде чем, создать экземпляр типа. Пример использования представлен ниже: Расширяемые типы чем-то похожи на абстрактные. Отличие состоит в том, что тип, описанный как расширяемый, может быть использован сразу: без необходимости наследовать его, прежде чем, создать экземпляр типа. Пример использования представлен ниже:
-  +  MODULE Test_extensible; 
- +   
 +  TYPE 
 +      tVector = EXTENSIBLE RECORD 
 +          x: REAL; 
 +          y: REAL; 
 +      END; 
 +   
 +      tMyVector1 = RECORD (tVector) 
 +          z: REAL; 
 +      END; 
 +   
 +  VAR 
 +      v: tVector; 
 +      v1: tMyVector1; 
 +   
 +  BEGIN 
 +  END Test_extensible.
 Абстрактный тип, также может расширяться в типах-потомках, но не может быть реализован. Далеко не всегда в качестве базового типа необохдимо использовать абстрактный тип. Да и гораздо чаще возникает необходимость расширить существующий тип, чем создавать тип с чистого листа. Стоить отметить, что раз введено такое семантическое свойство, как "расширяемый тип", очевидно, что без ключевого слова EXTENSIBLE тип расширить нельзя. Это поведение типа по умолчанию (как и сокрытие данных). [↑] Абстрактный тип, также может расширяться в типах-потомках, но не может быть реализован. Далеко не всегда в качестве базового типа необохдимо использовать абстрактный тип. Да и гораздо чаще возникает необходимость расширить существующий тип, чем создавать тип с чистого листа. Стоить отметить, что раз введено такое семантическое свойство, как "расширяемый тип", очевидно, что без ключевого слова EXTENSIBLE тип расширить нельзя. Это поведение типа по умолчанию (как и сокрытие данных). [↑]
   
Строка 59: Строка 75:
  
 Пример приводится ниже: Пример приводится ниже:
-  +  MODULE Test_limited; 
-  +   
- +  TYPE 
 +      tVector = LIMITED RECORD 
 +          x: REAL; 
 +          y: REAL; 
 +      END; 
 +   
 +      tMyVector1 = RECORD (tVector) 
 +          z: REAL; 
 +      END; 
 +   
 +  VAR 
 +      v: tVector; 
 +      v1: tMyVector1; 
 +   
 +  BEGIN 
 +  END Test_limited.
 Как видно в примере, при попытке его скомпилировать, возникла ошибка. Так как тип-потомок также должен наследовать атрибут ограничения. Как видно в примере, при попытке его скомпилировать, возникла ошибка. Так как тип-потомок также должен наследовать атрибут ограничения.
  
 Исправленный пример ниже: Исправленный пример ниже:
-  +  MODULE Test_limited; 
- +   
 +  TYPE 
 +      tVector = LIMITED RECORD 
 +          x: REAL; 
 +          y: REAL; 
 +      END; 
 +   
 +      tMyVector1 = LIMITED RECORD (tVector) 
 +          z: REAL; 
 +      END; 
 +   
 +  VAR 
 +      v: tVector; 
 +      v1: tMyVector1; 
 +   
 +  BEGIN 
 +  END Test_limited.
 И как видно, никаких вопросов у компилятора к программисту не возникает. [↑] И как видно, никаких вопросов у компилятора к программисту не возникает. [↑]
   
bb/redbook/210.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)