Saltar a contenido

Herencia Estructura

Herencia Estructura:

Al igual que los bloques de funciones, las estructuras se pueden ampliar. La estructura obtiene entonces las variables de la estructura básica además de sus propias variables.

Crear una estructura que extienda a otra Estructura:

1
2
3
4
5
6
7
TYPE ST_Base1 :
STRUCT
    bBool1: BOOL;
    iINT : INT;
    rReal : REAL;   
END_STRUCT
END_TYPE
1
2
3
4
5
6
TYPE ST_Sub1 EXTENDS ST_Base1:
STRUCT
    ttime :TIME;
    tton  : TON;
END_STRUCT
END_TYPE
1
2
3
4
5
TYPE ST_Sub2 EXTENDS ST_Sub1 :
STRUCT
    bBool2: BOOL; // No se podria llamar la variable bBool1 porque la tenemos declarada en la estructura ST_Base1
END_STRUCT
END_TYPE
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
PROGRAM MAIN
VAR
    stestructura1  : ST_Sub1;
    stestructura2  : ST_Sub2;
END_VAR

//Extensión de Estructura:
stestructura1.bBool1;
stestructura1.iINT;
stestructura1.rReal;
stestructura1.ttime;
stestructura1.tton(in:= TRUE, pt:=T#1S);

stestructura2.bBool1;
stestructura2.iINT;
stestructura2.rReal;
stestructura2.ttime;
stestructura2.tton(in:= TRUE, pt:=T#1S);
stestructura2.bBool2;

  • De esta forma de extender una Estructura por Herencia no se pueden repetir el mismo nombre de variable declarada con las estructuras extendidas.

  • Tambien sin usar EXTENDS para la Estructura podriamos realizarlo de la siguiente forma:

1
2
3
4
5
TYPE ST_2 :
STRUCT
    bBool : BOOL;
END_STRUCT
END_TYPE
1
2
3
4
5
6
TYPE ST_1:
STRUCT
    sStruct : ST_2;
    sstring : STRING(80);
END_STRUCT
END_TYPE
1
2
3
4
5
6
7
PROGRAM MAIN
VAR
    stestructura11 : ST_1;
END_VAR

stestructura11.sstring;
stestructura11.sStruct.bBool; //el resultado es que queda mas anidado

  • De esta forma si que se pueden declarar el mismo nombre de la variable en diferentes Estructuras, ya que al estar anidadas no existe el problema anterior.

  • No se permite la herencia múltiple de la siguiente forma:

1
2
TYPE ST_Sub EXTENDS ST_Base1,ST_Base2 :
STRUCT