ГОСТ Р МЭК 61131-3—2016
LIGHT;= TRUE;//конкретная реализация
END_METHOD
END_CLASS
6.6.5.6 Динамическое связывание имен (OVERRIDE)
Связывание имен — это ассоциация имени метода с именем реализации. Привязка имени (на
пример. компилятором) до выполнения программы называется статической или «ранней» привязкой.
Привязка, выполняемая во время выполнения программы, называется динамической или «поздней»
привязкой.
В случае вызова внутреннего метода, свойство переопределения с ключевым словом OVERRIDE
приводит к различию между статической и динамической формой связывания имен:
- статическое связывание: ассоциирует имя метода с реализацией метода класса с вызовом вну
треннего метода, или содержит метод, выполняющий вызов внутреннего метода;
- динамическое связывание: ассоциирует имя метода с реализацией метода фактического типа
экземпляра класса.
Пример 1—Динамическое связывание имен
Переопределение с воздействием на связывание
// Объявление
CLASS CIRCLE
И Метод дает менее точное определение
METHODPUBLICPI: LREAL
PI Pl:= 3.1415;
END_METHOD
METHODPUBLIC CF: LREAL
//Метод вычисляет длину окружности
VARJNPUT DIAMETER: LREAL; END_VAR
CF:- THIS.PIQ *DIAMETER;// Внутренний вызов метода:
END_METHOD // используя динамические связывания PI
END_CLASS
CLASS CIRCLE2EXTENDS CIRCLE
// Класс с методом, переопределяющим PI
ИМетод выдает болееточное значение PI
METHOD PUBLIC OVERRIDEPI: LREAL
Pl:= 3.1415926535897;
END_METHOD
END_CLASS
PROGRAM TEST VAR
//Экземпляр CIRCLE
//Экземпляр CIRCLE2
CIR1:CIRCLE;
CIR2:CIRCLE2;
CUMF1: LREAL;
CUMF2:LREAL;
DYNAMIC: BOOL;
END VAR
//Вызов метода CIR1
ИВызов метода CIR2
//Динамическое связывание приводит к значению True
CUMF1.-CIR1.CF(1.0);
CUMF2:- CIR2.CF(1.0);
DYNAMIC:= CUMF1 <> CUMF2;
END PROGRAM
121