lunes, 1 de septiembre de 2008

Class module o Módulo de clase

Un Módulo de Clase es un tipo de código-módulo Visual Basic, su extensión es .cls y es similar a un módulo standard en cuanto a que contiene funcionalidad que puede ser utilizada por otros módulos dentro de la aplicación. La diferencia principal es que un módulo de clase provee la funcionalidad en la forma de un objeto, cada módulo de clase define un tipo de objeto, por lo que puede existir más de un módulo de clase en una aplicación.

Para utilizar un módulo de clase en la aplicación, es necesario crear una instancia de la clase, para acceder a las propiedades, métodos y eventos del objeto definido en la clase.

 Dim miCasa As Casa 'declaracion de la variable tipo Casa
Set miCasa = New Casa 'instancia

Es posible crear un módulo de clase y agregar métodos, propiedades y eventos manualmente:

   Dim empleado As Persona

Set empleado = New Persona
empleado.edad = 33
empleado.estado = True
empleado.nombre = "Gerardo"

También es posible utilizar el Class Builder Add-In para automatizar el proceso de agregar métodos, propiedades y eventos a una clase.

Si se definen las variables como Private sólo son visibles para el módulo de clase en sí.

Es posible crear propiedades por default para un objeto, estas propiedades son las que se establecen si el usuario no provee el valor de la propiedad cuando trabaja con el objeto.

Para crear un método, se crea un procedimiento o función dentro del módulo de clase:

   Public Function nombre_Funcion(parámetros) As tipoDato
'instrucciones
nombre_Funcion = valorRegreso
End Function

Para crear un evento se siguen dos pasos:

  1. Declarar el evento en la sección de declaraciones generales (General Declarations) de un módulo de clase.

    Public Event nombre_Evento(parametros)

  2. Levantar el evento, es decir, cuando se desea que el evento ocurra se utiliza la sentencia RaiseEvent y pasar el nombre del evento y cualquier argumento que el evento utilice.
     Public Sub nombreMetodo()
    RaiseEvent nombre_Evento(argumentos)
    End Sub

Es posible disparar mensajes de error al crear módulos de clase, para ello se utiliza el método Raise del objeto Err:

ERR.Raise Numero, fuente, descripción, archivoAyuda, contextoAyuda

Una vez que se termina de trabajar con la clase es conveniente liberar los recursos que la clase utilizo a través del empleo de la sentencia Nothing:

Set nombreIntanciaClase = Nothing

Class Builder Add-In

Seleccione del menú principal:

  • Add-Ins » Add-In Manager
  • VB 6 Class Builder Utility
  • Load Behavior » Loaded/Unloaded

Una vez cargado Class Builder, seleccione de nuevo del menú principal:

  • Add-Ins » Class Builder

La accion anterior abre la ventana Class Builder donde es posible definir las propiedades, métodos y eventos de la clase.

Los módulos de clase tienen dos eventos built-in:

  1. Initialize, ocurre cuando una instancia de una clase es creada pero antes de la inicialización de cualquier propiedad. Utilice este evento para inicializar culquier dato utilizado por la clase.
  2. Terminate, ocurre cuando la variable objeto está fuera del ámbito o se establece con el valor Nothing. Utilice este evento para almacenar información, descargar formas o realizar tareas que deban ocurrir cuando la clase termina.

Para indicar que una propiedad es la propiedad por default estando activa la ventana de Clase se puede hacer a través del Class Builder o seleccionar del menú principal:

  • Tools » Procedure Attributes » Advanced
  • Seleccionar la propiedad a establecer como propiedad por default
  • Seleccionar de la lista Procedure ID
  • el valor (Default)

Por ejemplo es posible crear un módulo de clase el cual es un objeto de fuente de datos:

  1. Seleccionar del menú principal Project » Add Class Module
  2. Cambiar el nombre del módulo de clase por un nombre descriptivo
  3. Cambiar la propiedad DataSourceBehavior al valor 1 - vbDataSource
  4. Seleccionar del menú principal Project » References
  5. Seleccionar Microsoft ActiveX Data Objects 2.0 Library
  6. En la sección General Declarations del módulo de clase definir:
    • Una variable tipo Connection
    • Una variable tipo Recordset
    •  Option Explicit
      Private cnProducts As Connection
      Private rsProducts As Recordset
    • Escribir el siguiente código para el evento Initialize:
       Private Sub Class_Initialize()
      Set cnProducts = New Connection
      Set rsProducts = New Recordset
      cnProducts.Provider = "Microsoft.Jet.OLEDB.4.0"
      cnProducts.Open "Data Source=NWIND.MDB"
      rsProducts.Open "SELECT * FROM Products", cnProducts, adOpenStatic
      End Sub
    • Escribir el siguiente código para el evento GetDataMemeber:
       Private Sub Class_GetDataMember(DataMember As String, Data As Object)
      Set Data = rsProducts
      End Sub

    --- Agregar la funcionalidad de la clase (métodos) ---

    • Método para moverse al registro siguiente:
       Sub registroSiguiente()
      rsProducts.MoveNext
      End Sub
    • Método para moverse al registro anterior:
       Sub registroAnterior()
      rsProducts.MovePrevious
      End Sub
  7. Agregar a la forma un TextBox y un CommandButton (txtProduct, cmdObtenerDatos)
  8. Seleccionar del menún principal Project » References
  9. Seleccionar Microsoft ActiveX Data Binding Collection
  10. En la sección General Declarations de la forma definir:
    • Una variable del tipo de la clase creada CProducts
    • Una variable tipo BindingCollection
    •  Option Explicit
      Dim clProducts As CProducts
      Dim bcProducts As BindingCollection
    • Agregar el siguiente código para el botón cmdObtenerDatos:
       Private Sub cmdObtenerDatos_Click()
      Set clProducts = New CProducts
      Set bcProducts = New BindingCollection
      Set bcProducts.DataSource = clProducts
      bcProducts.Add txtProduct, "Text", "ProductName"
      bcProducts.Add frmProducts, "Caption", "ProductID"
      End Sub
  11. Agregar a la forma dos CommandButton (cmdRegistroSiguiente, cmdRegistroanterior):
    • Para el código del boton cmdRegistroAnterior escribir:
       Private Sub cmdRegistroAnterior_Click()
      clProducts.RegistroAnterior
      End Sub
    • Para el código del boton cmdRegistroSiguiente escribir:
       Private Sub cmdRegistroSiguiente_Click()
      clProducts.RegistroSiguiente
      End Sub

0 comentarios: