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

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


bb:redbook:211

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
bb:redbook:211 [2019/07/24 14:57]
caufman [5. Атрибут EXTENSIBLE]
bb:redbook:211 [2019/07/24 14:58]
caufman [6. Супер-вызов]
Строка 142: Строка 142:
  
 Пример использования супер-вызова приведён ниже: Пример использования супер-вызова приведён ниже:
- +  MODULE Test_super_method; 
 +   
 +  IMPORT Log; 
 +   
 +  TYPE 
 +      tVector = POINTER TO EXTENSIBLE RECORD 
 +          x*: REAL; 
 +      END; 
 +       
 +      tMyVector = POINTER TO RECORD (tVector) 
 +          y*: REAL; 
 +      END; 
 +   
 +   
 +  VAR 
 +      v: tVector; 
 +      v1: tMyVector; 
 +   
 +  PROCEDURE (v: tVector)Log*(), NEW, EXTENSIBLE; 
 +  BEGIN 
 +      Log.Real(v.x); Log.Ln 
 +  END Log; 
 +   
 +  PROCEDURE (v: tMyVector)Log*(); 
 +  BEGIN 
 +      Log.String("Привет, мир!"); Log.Ln; 
 +      Log.Real(v.y);v.Log^; 
 +      Log.String("-------------"); Log.Ln; 
 +  END Log; 
 +   
 +  PROCEDURE Start*; 
 +  BEGIN 
 +      v.Log; 
 +      v1.Log 
 +  END Start; 
 +   
 +  BEGIN 
 +      NEW (v); 
 +      NEW (v1); 
 +  END Test_super_method. 
 + 
 +  (!)Test_super_method.Start 
 +   
 +  компилируется "Test_super_method"   200   8 
 +  старый модуль Test_super_method выгружен 
 +   0.0 
 +  Привет, мир! 
 +   0.0 0.0 
 +  -------------
 В примере хорошо видно, что супер-вызов оформлен в виде инструкции v.Log^. Вместо того, чтобы заново переписывать всю логику в методе, было дописано лишь часть кода до и после супер-вызова. Кроме того, часто бывает так, что у программиста нет возможности внести изменения в базовый класс (например, модуль получен в виде уже готового исполняемого машинного кода). [↑] В примере хорошо видно, что супер-вызов оформлен в виде инструкции v.Log^. Вместо того, чтобы заново переписывать всю логику в методе, было дописано лишь часть кода до и после супер-вызова. Кроме того, часто бывает так, что у программиста нет возможности внести изменения в базовый класс (например, модуль получен в виде уже готового исполняемого машинного кода). [↑]
   
bb/redbook/211.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)