Publicado el 8 de Octubre del 2019
1.084 visualizaciones desde el 8 de Octubre del 2019
97,0 KB
11 paginas
Creado hace 20a (01/01/2005)
1.1 Introducción.
La utilización normal de un objeto es la que se da cuando desde el programa se crea una instancia del
1. Clases, Eventos.
objeto y se usan los métodos del mismo.
programa, o dicho de otra forma, al revés.
Eso es lo habitual, pero se puede hacer al contrario, que sea el objeto el que active un evento del
Entonces lo que hay que ver es de que forma se puede definir un evento dentro de nuestro programa, o
de nuestra clase para que ésta sea la que llame al programa principal.
La definición de un evento se realiza utilizando la palabra reservada Delegate en la declaración del
procedimiento que se encarga de la gestión del evento.
Public Delegate Sub MiEvento (ByVal Argumento as Tipo)
1.2 Utilización del evento.
Vista la definición del evento dentro del código, su utilización ya depende de su declaración dentro de la
clase en la que deseemos utilizarla.
La utilización se divide en varios pasos.
Definición del evento.
Declaración del evento en la clase.
Escritura del procedimiento que alberga del código del evento.
Asociación del evento con el código que se va a ejecutar.
Lanzar el evento desde el sitio que proceda.
Definición
Public Delegate Sub MiEvento(ByVal MiArgu As Int16)
Declaración del evento en la clase.
' Declaración de uso del evento
Event Evento As MiEvento
Escritura del código del evento.
Sub CodigoDelEvento(ByVal Valor As Int16)
' Código a ejecutar en el evento,
' valor es el valor que se envía desde su generación
' con la instrucción RaiseEvent
Console.WriteLine("Texto desde eventillo {0} ", Valor)
End Sub
Asociación del evento al código del evento.
' Asociación del Evento de MiClase al código del evento.
AddHandler Evento, New MiEvento(AddressOf CodigoDelEvento)
En el ejemplo está en el constructor, New, pero también lo hemos probado en el Main y funciona.
Lanzar el evento.
RaiseEvent Evento(24)
Se han dado distintos valores en cada llamada, para poder observar desde donde se produce el evento.
1
En el ejemplo podemos ver el código completo.
Hemos probado a poner el código del evento en el Main, y también funciona, al final lo hemos dejado
todo en la clase porque parece que es como más organizado, cuando se aplique en la realidad, veremos que
es lo que debe ocurrir, si eso influye o no, pero lo anotamos.
' Definición del evento
Public Delegate Sub MiEvento(ByVal MiArgu As Int16)
Namespace Ambito
Public Class Ejemplo
' Declaración de uso del evento
Event Evento As MiEvento
Public Sub New()
' Asociación del Evento de MiClase al código del evento.
AddHandler Evento, New MiEvento(AddressOf CodigoDelEvento)
' Se lanza el evento, se provoca, en la generación
RaiseEvent Evento(22)
End Sub
Public Sub Inicio()
Console.WriteLine("Hola, lanzando el evento")
' Se lanza el evento, se provoca
RaiseEvent Evento(24)
End Sub
Public Sub Metodo()
Console.WriteLine("Hola desde método, lanzando otra vez el evento")
' Se lanza el evento, se provoca
RaiseEvent Evento(26)
End Sub
Sub CodigoDelEvento(ByVal Valor As Int16)
' Código a ejecutar en el evento,
' valor es el valor que se envía desde su generación
' con la instrucción RaiseEvent
Console.WriteLine("Texto desde el código del evento {0} ", Valor)
End Sub
End Class
End Namespace ' Ambito
Module Principal
Sub Main()
' Definición de la clase
Dim MiClase As Ambito.Ejemplo = New Ambito.Ejemplo
MiClase.Inicio()
MiClase.Metodo()
Console.ReadLine()
End Sub
End Module
Hay otra posibilidad, con el mismo resultado que antes, pero es más breve y quizás más clara.
Se quita la declaración de evento del principio, Public Delegate, y en la declaración del evento se realiza
directamente la declaración de los argumentos del mismo.
' Declaración de uso del evento
Event Evento(ByVal Valor As Int16)
2
En cuanto a la asociación, también hay un cambio, pero queda más claro, antes era
' Asociación del Evento de MiClase al código del evento.
AddHandler Evento, New MiEvento(AddressOf CodigoDelEvento)
Y ahora es
' Asociación del Evento de MiClase al código del evento.
AddHandler Evento, AddressOf CodigoDelEvento
Que es más sencillo y fácil de recordar.
El ejemplo final queda así.
' Definición del evento, ... desaparece ...
' Public Delegate Sub MiEvento(ByVal MiArgu As Int16)
Namespace Ambito
Public Class Ejemplo
' Declaración de uso del evento
Event Evento(ByVal Valor As Int16)
Public Sub New()
' Asociación del Evento de MiClase al código del evento.
AddHandler Evento, AddressOf CodigoDelEvento
' Se lanza el evento, se provoca, en la generación
RaiseEvent Evento(22)
End Sub
Public Sub Inicio()
Console.WriteLine("Hola, lanzando el evento")
' Se lanza el evento, se provoca
RaiseEvent Evento(24)
End Sub
Public Sub Metodo()
Console.WriteLine("Hola desde método, lanzando otra vez el evento")
' Se lanza el evento, se provoca
RaiseEvent Evento(26)
End Sub
Sub CodigoDelEvento(ByVal Valor As Int16)
' Código a ejecutar en el evento,
' valor es el valor que se envía desde su generación
' con la instrucción RaiseEvent
Console.WriteLine("Texto desde el código del evento {0} ", Valor)
End Sub
End Class
End Namespace ' Ambito
Module Principal
Sub Main()
' Definición de la clase
Dim MiClase As Ambito.Ejemplo = New Ambito.Ejemplo
MiClase.Inicio()
MiClase.Metodo()
Console.ReadLine()
End Sub
End Module
3
2. Como programar una clase.
2.1 Introducción.
No se puede negar que las clases son una evolución natural de la forma de programar, o sea que negar
la evidencia es del todo inútil
En principio es muy atrevido escribir un capitulo con éste tema, pero no se pretende decir a nadir como
tiene que hacer las cosas, sino simplemente indicar cuales son los criterios que se pueden seguir, o en que
orden se ejecutan los métodos y se usan las variables, propiedades, para a partir de ahí crear lo que podría ser
un orden más o menos adecuado, evidentemente desde lo que llevamos visto, el tiempo muchas veces te
desdice, o te reafirma.
Tampoco vamos a entrar en todas las posibilidades de las clases, sino se convertiría en un apartado muy
extenso, y la pretensión es la de sentar un punto de partida, para que a partir de ahí se siga progresando.
Tal como se ha desarrollado Studio Net el uso de clases escritas en otros lenguajes no debe resultar
ningún problema.
2.2 Utilización de las clases.
La utilización de las clases con los pequeños ejemplos que hemos visto quizás no queda muy clara, pero
hay que resaltar que su destino es el de crear objetos con las mismas, y que esos objetos son autónomos unos
con respecto a otros.
¿Cuando definir una clase?, en principio eso va a ser un problema, pero desde luego en Studio Net todo
esta agrupado o integrado por clases, otra cosa es el código que tengamos que escribir nosotros. Eso es otra
historia. Pero ya lo iremos aprendiendo con el tiempo.
En principio una clase sería práctico crearla cuando deseamos crear lo que anteriormente definíamos
como una librería.
También si deseamos crear una agrupación de código relacionado entre si, y que el fuente quede
protegido. Hay que tener en cuenta que las empresas de programación de esta forma pueden tener objetos
desarrollados que se reutilizan de una a otra aplicación, y que son o están depurados.
Una de las ventajas de las clases es que en contra de las librerías, o en algunos casos de las librerías,
según el lenguaje, el código no es accesible por el usuario de la misma.
Hay más casos en los que se puede definir una clase, como son las denominadas Interface, o las
equivalente a los tipos, que por cuestiones de rendimiento así se aconseja. Pero no es este el motivo principal
del tema, por lo que solo dejar constancia de dicha situación para que quien lo desee pueda buscar ampliar
dichos contenidos.
2.3 Como escribir una clase.
Cuando usamos una clase, lo que se hace es siempre seguir los siguientes pasos.
Declarar un objeto de esa clase.
Eso implica que se ejecute por defecto un método New, Constructor.
Por lo tanto los datos que nos interese controlar o las acciones a ejecutar
en esa fase deben estar escritas en ese método.
Asignar las características a las propiedades de la clase.
Pero puede que no se le asigne ninguna propiedad de las existentes.
Desarrollar los métodos de la clase.
Utilizar la clase con los objetos que se declaren de la misma.
Finalizar el uso del objeto.
Se ejecuta el método destructor de la clase, Finalize, y se liberan
recursos.
En base a esos pasos debemos programar el contenido de nuestra clase.
2.4 Declarar un objeto de esa clase.
Ese paso es el más sencillo de todos.
Dim Objeto as New ClaseDefinidaExistente
O bien se puede escribir
4
Dim Objeto as ClaseDefinidaExistente
Objeto = New ClaseDefinidaExistente
Cualquiera de las dos sintaxis es válida, aunque la más utilizada es la primera.
Ahora hay que escribir la clase, y hemos de escribir una clase eficiente y robusta contra el mal uso de la
misma.
escribamos.
Si por el motivo que fuese deseamos que no se pueda declarar un objeto de la clase que nosotros
escribimos sin que se ejecute el control adecuado en su creación hay que proteger el método New.
Para ello lo
Comentarios de: 1. Vb .Net 2005 - Clases, Eventos (0)
No hay comentarios