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

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


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 · Последние изменения: 2019/07/24 14:58 — caufman