La jerarquía de clases, define implícitamente una herencia de clases. Una clase que es hijo de otra clase heredará las propiedades de su clase padre, mientras la propiedad en cuestión no haya sido modificada en el hijo. Es decir, cambios en una propiedad a nivel de una clase padre se reflejarán en los hijos a menos que esa propiedad haya sido modificada previamente en el hijo, por lo cual pierde la calidad de valor heredado.
Esta "herencia" busca brindarle al usuario mayores facilidades en la tarea del mantenimiento.
Por ejemplo si se define una clase para los controles Textblock “Titulo”. Si se quiere otra clase para los Textblock que sean subtítulos, probablemente se quiera que esta última clase tenga las mismas características que la anterior, salvo algunas excepciones, por ejemplo, el tamaño del font. Entonces, se crearía una clase hija de “Titulo” llamada “Subtitulo”. Por lo cual, cualquier cambio en la clase “Titulo” se refleja en la clase “Subtitulo” –salvo el tamaño del font-para el cual se perdió la herencia, y ese es precisamente el comportamiento que se espera.
Si por el contrario se quiere tener una clase para los textblocks dentro de una tabla (“TextInTable”), entonces se crearía como hija de la clase predefinida “Textblock”–independientemente de las otras (“Título” y “Subtítulo”). Porque los cambios en éstas se desea que sean completamente independientes a “TextInTable”.
NOTA:
No existe el concepto de herencia de “Tags HTML”. La jerarquía de los Tags HTML es para representar el contexto en el cual aplican las propiedades configuradas en los tags (el anidamiento de los tags en el HTML generado).
Se pueden crear clases derivadas a partir de las clases predefinidas; el proceso de definir una clase significa para el desarrollador asignarle un nombre y configurar las propiedades que le corresponden a esa clase.
Las clases hijas o derivadas quedan implícitamente vinculadas en una relación de herencia con las clases de las cuales derivan. Como consecuencia de esto, las modificaciones en las clases “padre” se verán reflejadas en las “hijas”, con algunas excepciones. Las modificaciones consisten en cambiar los valores de alguna de las propiedades de la clase.
La parte inferior del editor muestra el nombre de la propiedad, junto con una descripción de la misma. Además dirá “Inherited: True” o “Inherited: False según corresponda.
Si para una propiedad de una clase dice “Inherited: True”, significa que su valor es un reflejo del valor de la misma propiedad del padre. Es decir, cualquier cambio en la clase padre se traduce en un cambio en la misma propiedad en el hijo.
En cambio, "Inherited: False" implica que un cambio en la propiedad en la clase padre no se reflejará en la clase hija. La herencia en el valor de las propiedades se pierde cuando éstas son alteradas en las clases hijas.
En el caso de que una propiedad de una clase esté marcada como “Inherited:False”, es posible revertir la situación. Haciendo click con botón derecho sobre la propiedad correspondiente, aparece un menú “Inherit Value”. Seleccionando dicha opción, la propiedad pasará a heredar el valor de la misma propiedad del padre.
_archivos/image078.jpg)
Imagen 3-2: Gx Theme Editor.
La derivación de clases, y en particular la "herencia" le brinda al usuario facilidades en la tarea de mantenimiento de las Clases y claridad en el diseño. Por ejemplo si se define una clase “Bullet” derivada de Texblock, con el fin de definir las propiedades de los textos en listas con viñetas.
Supongamos que ahora se quiere tener otra clase para los textos anidados a aquellos que estan asociados a la clase “Bullet”, y se desea que tengan las mismas características que la clase “Bullet” a excepción de la indentación. Llamemos a esa clase “SubBullet” y creémosla como hija de “Bullet”. Esta clase solo difiere con su padre en la propiedad “TextIndent”. Por lo cual, esa es la única propiedad que no hereda, y la única propiedad que habiéndose modificado en el padre no se refleja en la clase “SubBullet”.