.NET Tutorial 1. Herencia y polimorfismo (Parte I)

En esta primera entrega de esta serie de tutoriales os mostraré una técnica que puede ser realmente interesante. Aunque el nombre pueda sonar un poco "chungo" no temáis. Tito Olly está aquí para que hasta el más burro pueda entenderlo.

Hoy aprenderemos a "heredar" formularios. Alguno de vosotros se estará preguntando, ¿Y esto para que oño sirve? Pues la respuesta es muy simple y fácil: ¿Si tengo 30 formularios que hacen una tarea "parecida", por qué demonios voy a repetir un código "parecido" 30 veces?. Además, veremos que se puede modificar, crear o eliminar un elemento, procedimiento, función del formulario "heredado" y dicho elemento "repercutirá" AUTOMÁTICAMENTE en todos los formularios "heredados".

El ejemplo que os mostraré a continuación no hace nada en especial, pero lo importante es el concepto. Así que sin más dilación, empecemos.

 

Lo primero que crearemos será un nuevo proyecto. Cambiaremos el nombre del formulario por defecto y lo llamaremos FrmMain. Éste será el formulario que se ejecurará primero al iniciar nuestra aplicación.

No añadiremos de momento ningún código al formulario FrmMain, lo haremos más adelante.

Bien, añadiremos otro formulario a nuestra aplicación. Lo llamaremos FrmBASE. Este formulario será el que vamos a heredar.

A este  formulario le meteremos dos botones, tal y como se ve en la figura anterior.

Bien, aquí empieza la "magia". En el código del formulario FrmBASE incluiremos lo siguiente:

Cómo veis hay un procedimiento "Overridable" que básicamente lo único que hace es mostrar un texto.
El botón 1 muestra el mensaje "Este mensaje 1 está en el FrmBASE"
El botón 2 muestra el mensaje que se ha pasado al procedimiento "Overridable"

Bien, pues ahora comienza lo bueno. Añadimos un nuevo formulario, que llamaremos Form1pero ojo, no cómo un formulario "normal", sino que será un formulario "heredado":

El asistente nos preguntará que formulario queremos heredar. En nuestro caso heredaremos el formulario FrmBASE.

Al crearse este formulario vereis que AUTOMÁTICAMENTE nos ha colocado los dos botones que tenemos en el FrmBASE. Además observamos que no podemos hacer "click" en estos botones.

Añadimos una etiqueta con el texto "FORM1" a este formulario

Observar que en este formulario NO VAMOS A ESCRIBIR ninguna línea de código.

Añadimos otro formulario, Form2, del mismo modo que Form1, es decir, heredado del FrmBASE.

Después de añadir una etiqueta con el texto "FORM2" iremos al código y escribieremos esto:

Aquí podeis ver que se hace hace una llamada al procedimiento "Overridable" que estaba en el formulario FrmBASE, con la particularidad de que en un formulario que hereda a otro se especifica como "Overrides".

Lo que hace es "cambiar" el argumento del prodecimiento Mensaje. Luego lo vereis mejor.

Volvemos a nuestro formulario principal, FrmMain. Añadimos dos botones:

En el código del formulario FrmMain, para cada botón llamamos al Form1 y al Form2 respectivamente:

Pues bien, llegó el gran momento, vamos a compilar y ejecutar esta "mega" aplicación.

Se muestra el formulario FrmMain. Pulsamos sobre el botón "Form1". Se muestra el Form1. Pulsamos sobre el botón "Mensaje 1" y obtenemos esto:

Al pulsar sobre el botón "Mensaje 2" vemos lo siguiente:

WTF!!!. ¿Cómo oño es esto posible si el Form1 NO TIENE NADA DE CÓDIGO?

La explicación corta: Herencia.

La explicación "larga": Cómo recordareis cuando creamos el Form1 le dijimos que era un formulario heredado de FrmBASE. Pues bien, la gracia de la herencia es esa. Form1 ha "heredado" todos los compartamientos de FrmBASE. Por lo tanto, si hacemos "click" en el botón "Mensaje 1" del Form1 es como si realmente estuviesemos haciendo "click" en el botón "Mensaje 1" del FrmBASE.

Bien, vamos a acabar de "liarla parda". Pulsamos sobre el botón "Form2". Se muestra el Form2. Pulsamos sobre el botón "Mensaje 1" y obtenemos esto:

Cómo veis se muestra el mismo mensaje que se mostraba en el Form1. Lo cachondo es que en el Form2 tampoco tenemos ningún código para el "click" del botón del "Mensaje 1". Se hereda de FrmBASE.

Y ahora lo realmente lo bueno. Si pulsamos el botón del "Mensaje 2" vemos lo siguiente:

WTF!!!. ¿Cómo oño es esto posible si el Form2 NO TIENE NADA DE CÓDIGO para el "click" del botón "Mensaje 2"?

La explicación corta: Polimorfismo.

La explicación "larga": Al igual que el Form1, el Form2 se ha heredado del FrmBASE. Si recordais, dentro del FrmBASE teniamos un procedimiento "Overridable". Este procedimiento se llamaba al hacer "click" en el botón del "Mensaje 2". Pues bien, lo que hemos hecho nosotros en nuestro Form2 ha sido "cambiar" este procedimiento "Overridable" y pasarle un argumento particular para el Form2.

Para finalizar, deciros que si ahora me da por cambiar, no sé, el color de fondo del formulario FrmBASE y dejarlo así:

Al ejecutar de nuevo el programa, Y SIN TOCAR NI UNA LÍNEA DE CÓDIGO, tanto el Form1 como el Form2 están de color verde, gracias a la "Herencia"

 

COROLARIO.
Cómo comenté al principio esta aplicación "no hace nada", pero lo importante es la idea, el concepto.
Imaginaos por un momento que teneis no dos formularios, sino cuarenta.
Imaginaos que esos 40 formularios son formularios de "altas" de productos, de clientes, de proveedores, de empleados, etc. Básicamente todos esos formularios son "iguales", en uno se da de "alta" (en una base de datos, por ejemplo) productos, en otro se dan de "alta" clientes, en otro proveedores, etc.
Podemos tener un formulario "base" que se encarga de INSERTar los datos en la base de datos, con un procedimiento "Overridable" que en función de uno u otro formulario cargue la sentencia SQL adecuada: Un formulario usará un "Overrides" para el alta de productos, otro para el alta de clientes, etc.

Además, imaginaos que a posteriori quereis que en esos cuarenta formularios exista una opción para borrar un determinado producto, un determinado cliente, un determinado proveedor, etc. Pues bien, con solo añadir un botón eliminar y un "Overridable" para hacer un DELETE de la base de datos, automáticamente se "propagará" a los cuarenta formularios.

O yo que sé, que a tu jefe le da por decir, "Oye, quiero un logotipo todo chulo en esos cuarenta formularios", esas letras las quiero azules, aquí esto lo quiero en negrita, alli lo quiero de color verde, etc, etc. Pues fácil y rápido, Metes el logotipo en el formulario "Base" o lo que sea y ha correr que es gerundio….¿o no era así el refran? 😉

 

Saludos.
mov eax,ollydbg; Int 13h

 

Descargar proyecto .NET Tutorial 1
(74 Kb. Visual Studio 2008)