lunes, 1 de septiembre de 2008

Eventos del objeto Connection

Clase

Un Objeto Visual Basic se crea a partir de una Clase, por lo tanto un objeto es una instancia de una clase. Para utilizar un objeto se debe mantener una referencia a este mediante una variable de objeto.

La Clase define las interfaces de un objeto y si este es público.

Las descripciones de las Clases se almacenan en bibliotecas de tipos y es posible verlas con el explorador de proyectos [Ctrl] + [R] o File/View/Project Explorer.

Interfaz

Una interfaz es el conjunto de propiedades y métodos de un objeto.

Public Class

Se declara una clase de tipo publica para poder cambiar los datos pertenecientes a un objeto mediante su interfaz (propiedades y métodos).

Private Class

Se declara una clase de tipo privada para ocultar los datos a el código que no pertenece al objeto.

Crear una Clase

Para crear una Clase en VB6 es necesario agregar un Módulo de Clase de la misma forma que agrega un formulario.

Los datos de cada instancia de un módulo de clase sólo existen durante la duración del objeto, es decir, se crean cuando se crea el objeto y se destruyen cuando se destruye el objeto.

Agregar propiedades y métodos a una clase

Las propiedades representan datos de un objeto y los métodos representan acciones que un objeto puede realizar definiendo su comportamiento, juntos representan la interfaz de la clase.

Propiedades

Agregar propiedades a una Clase significa agregar variables públicas al módulo de clase

 Public nombreVariable1 as tipo
Public nombreVariable2 as tipo
Public nombreVariable3 as tipo

Si las variables se declaran como Private significa que sólo podrán ser accesibles desde el código del módulo de la clase.

 Private nombreVariable4 as tipo
Private nombreVariable5 as tipo
Private nombreVariable6 as tipo

Cuando escriba el nombre del objeto y después el símbolo punto (.) se desplegaran únicamente las propiedades públicas del objeto, las privadas no se presentan.

Para acceder al valor de una propiedad se utiliza un procedimiento llamado Property Get, para establecer el valor de una propiedad se utiliza el procedimiento Property Let para el caso de propiedades de tipo objeto se utiliza Property Set.

 Public Property Let nombrePropiedad(ByVal nuevoValor as tipo)
nombrePropiedad
End Property

Propiedad de solo lectura

Para crear una propiedad de solo lectura, se debe omitir el procedimiento Property Let y para las variables de objeto el procedimiento Property Set.

Propiedades Predeterminadas

Una Propiedad Predeterminada es aquella propiedad del objeto que no necesita escribirse explícitamente para asignarle un valor tan sólo basta el nombre del objeto para asignarle valor, por ejemplo los controles Label y Text tienen propiedades predeterminadas por lo que es posible escribir:

 Label1 = "etiqueta"
Text1 = "Texto"

Lo anterior también es posible haciendo referencia explícita de la propiedad a la cual deseamos asignarle valor:

 Label1.Caption = "etiqueta"
Text1.Text = "Texto"

Agregar eventos a una clase

Los eventos se declaran mediante la palabra reservada Event, un evento puede tener argumentos ByVal y ByRef.

Las propiedades y métodos pertenecen a las interfaces entrantes y los eventos a las interfaces salientes.

Ejemplo de Clase

  • Agregue un módulo de clase, llamado Persona y agregue el siguiente código:

     Option Explicit

    Public sNombre As String
    Public nEdad As Integer
    Public dFechaNac As Date
    Private nSalario As Long
    Private nNomina As Long

    Property Let asignarNomina(nNumero)
    nNomina = nNumero
    End Property

    Property Get obtenerNomina() As Long
    obtenerNomina = nNomina
    End Property

    Property Let asignarSalario(nCantidad)
    nSalario = nCantidad
    End Property

    Property Get obtenerSalario() As Long
    obtenerSalario = nSalario
    End Property
  • Agregue los siguientes controles a un formulario:

    1. txtNombre
    2. txtEdad
    3. txtFechaNac
    4. lblNomina
    5. lblSalario
  • En el evento Load del formulario agregue el siguiente código:

     Option Explicit
    Dim cEmpleado As Persona
    Private Sub Form_Load()
    Set cEmpleado = New Persona
    cEmpleado.sNombre = "Gerardo Ángeles Nava"
    cEmpleado.nEdad = 33
    cEmpleado.dFechaNac = #9/21/1971#
    cEmpleado.asignarNomina = 90276094
    cEmpleado.asignarSalario = 54321

    txtNombre = cEmpleado.sNombre
    txtEdad = cEmpleado.nEdad
    txtFechaNac = cEmpleado.dFechaNac

    lblNomina = cEmpleado.obtenerNomina
    lblSalario = cEmpleado.obtenerSalario
    End Sub
  • Ejecute la aplicación [F5].

Polimorfismo

Los objetos Visual Basic pueden implementar interfaces adicionales para proporcionar polimorfismo, es decir, permite manipular diferentes tipos de objetos sin preocuparse del Tipo. Las interfaces múltiples permiten que los programas evolucionen con el tiempo, agregando nueva funcionalidad sin afectar el código existente.

El Polimorfismo significa que muchas clases pueden proporcionar la misma propiedad o el mismo método y quien invoca no tiene porque saber la clase a la que pertenece el objeto antes de llamar a la propiedad o método, por ejemplo suponga que existe la Clase Vehículo y las clases Automovil y Motocicleta, tanto Automovil como Motocicleta tienen en común el método Mover, estos objetos posiblemente son del tipo Vehículo.

En un Lenguaje Orientado a Objetos el Polimorfismo es posible a través de la Herencia, pero en el caso de Visual Basic que no es un Lenguaje Orientado a Objetos no utiliza la Herencia para proporcionar Polimorfismo, sino que lo proporciona mediante múltiples interfaces ActiveX. Una Interfaz es un conjunto de propiedades y métodos relacionados.

Al construir el método Mover puede ser que reciba como parámetro un objeto Mover(ByVal Distancia as Object) por lo que Visual Basic compila una parte de código adicional para preguntar si el objeto incorpora el método invocado o pueder ser que el método pertenece a la interfaz Vehículo y todas sus clases de Vehículo implementan esta interfaz para enlazarlos en tiempo de diseño Mover(ByVal Distancia as Vehículo).

Clase Abstracta

Una clase Abstracta es aquella que no tiene código de implementación, el propósito de que no tenga código es proporcionar una plantilla de interfaz que pueda agregar a otras clases, de esta manera se construye después el código requerido para cumplir un objetivo.

Visual Basic no puede crear realmente una clase Abstracta, ya que una clase Abstracta es una clase a partir de la cual no puede crear objetos, pero en Visual Basic es posible crear objetos de clases que no contengan código, por lo tanto deberá tener cuidado al tratar de simular este concepto.

Para que sea posible implementar una interfaz, por ejemplo Vehículo en la clase Automovil se debe emplear la palabra reservada Implements:

 Implements Vehículo 'Esto se escribe en la clase Automovil

Lo anterior significa que se compromete a implementar los métodos y propiedades de la interfaz Vehículo, por lo que será necesario anteceder al nombre del método o propiedad el nombre de la interfaz seguido de un guión bajo (_) y del nombre del método o propiedad.

 Private Sub Vehiculo_Mover(ByVal Distancia As Double)
rem código
End Sub

Si no implementa los métodos y propiedades entonces Visual Basic marcara un error indicando que es necesario hacer la implementación de métodos y propiedades.

Es necesario declarar los métodos y propiedades de tipo Private porque si se declararán como Public formarian parte de la interfaz Automovil o Motociclea y tendrian el mismo enlace original.

Ejemplo : Método que devuelve Valor

La clase abstracta Vehiculo contiene el código:

 Option Explicit
Public Function Mover(ByVal Distancia As Double) As Double
Rem Carece de Código
End Function

La clase Automovil implementa la clase Vehiculo:

 Option Explicit
Implements Vehiculo
Private Function Vehiculo_Mover(ByVal Distancia As Double) As Double
Vehiculo_Mover = Distancia
End Function

La clase Motocicleta implementa la clase Vehiculo:

 Option Explicit
Implements Vehiculo
Private Function Vehiculo_Mover(ByVal Distancia As Double) As Double
Vehiculo_Mover = 12.34
End Function

El código del formulario contiene:

 Option Explicit
Dim MotoCross As Motocicleta
Dim Porsche As Automovil
Dim V As Vehiculo

Private Sub Form_Load()
Set MotoCross = New Motocicleta
Set V = MotoCross
MsgBox "La Motocicleta se movio : " & V.Mover(5)

Set Porsche = New Automovil
Set V = Porsche
MsgBox "El automovil se movio : " & V.Mover(10)
End Sub

Ejemplo : Implementar Propiedades

Agregue una propiedad a la clase Abstracta Vehiculo:

 Public nVelocidad As Double

Visual Basic implementa las propiedades como parejas de procedimientos de propiedad:

    Get
    Let o Set

Por lo anterior es necesario implementar ambos procedimientos en las clases que implementan la clase Vehiculo:

 Implements Vehiculo
Private nVelMoto As Double

Private Property Get Vehiculo_nVelocidad() As Double
Vehiculo_nVelocidad = nVelMoto
End Property
Private Property Let Vehiculo_nVelocidad(ByVal nArgVelocidad As Double)
nVelMoto = nArgVelocidad
End Property

¿Que devuelve el siguiente código?

    Dim Byke As Motocicleta
Dim Veh As Vehiculo
Set Byke = New Motocicleta
Set Veh = Byke
MsgBox TypeName(Veh)

Salida: Motocicleta

Devuelve Motocicleta porque al asignar Byke a Veh Visual Basic internamente evalua si Motocicleta acepta la interfaz Vehiculo si no acepta la interfaz se genera un error, si acepta la interfaz el objeto se asigna a la variable y a través de esta solo se accede a los métodos y propiedades de la interfaz Vehiculo.

Procure no hacer uso para estos casos de un objeto genérico Object pues la variable declarada de este tipo solo accede a la última interfaz asignada.

Reutilización de Código

Es posible reutilizar código mediante las formas Binario y Origen.

Binario

La reutilización de código Binario es posible mediante la creación y uso de un objeto, por ejemplo los controles. COM es otro mecanismo para la reutilización de código binario, llamado agregación, la cual utiliza una interfaz completa sin modificaciones y quien proporciona la implementación es una instancia de la clase agregada, Visual Basic no acepta esta forma de reutilización de código. Los componentes ActiveX son otro mecanismo más en la reutilización de código y en la programación orientada a objetos.

Un objeto se destruye cuando se libera la última referencia al mismo, para ello Visual Basic efectua el seguimiento de referencias a objetos para saber cuando se libera la última referencia a un objeto, lo cual no es muy fiable, lo más fiable es la información que proporciona COM cuando el recuento de referencias es o no cero, esto sucede cuando se produce un error en el evento Terminate del objeto.

Por lo anterior se recomienda:

  • Declarar variables de objeto como tipos de clases en vez de As Object
  • No utilizar el objeto Collection por si solo, ya que las referecnias se almacenan en variables Variant que al igual que las variables declaradas As Object pueden contener referecnias a objetos de cualquier clase.
  • Cree sus propias clases de colección que acepten objetos de una única clase.
  • Organice los objetos de forma jerárquica, para realizar su recorrido.
  • No declare variables As New, si utiliza una variable así después de haberla establecido a Nothing, Visual Basic crea otro objeto.

Origen

La reutilización de código fuente es posible crearlo copiando y modificando el código origen.

Is

El operador Is se utiliza para comparar si dos variables hacen referencia al mismo objeto, ejemplo:

 Dim vLbl As Variant
Set vLbl = Label1
MsgBox vLbl Is Label1

Lo anterior regresa el valor True.

Friend

Además de declarar propiedades o métodos de tipo Public o Private, es posible declararlos como Friend, de esta manera actuan como miembros Public, es decir, parecen parte de la interfaz de una Clase pero no lo son.

Al no ser parte de la interfaz de un objeto las propiedades o métodos Friend los programas que utilizan los objetos del componente no pueden tener acceso a estos, pero son visibles para todos los demás objetos del componente, por lo que permiten una comunicación interna segura.

Parent

La propiedad Parent devuelve una referencia al contenedor del objeto. Cada propiedad Parent de un objeto hijo mantiene una referencia al objeto padre, por lo que no se podrá destruir ninguno de los objetos.

Para poder eliminar las referencias es posible establecer un método de limpieza del objeto padre, el cual establezca todas las propiedades de objeto a Nothing así como también los objetos Collection.

Cuando se destruye un objeto Collection Visual Basic establece todas las referencias de objeto que contenia a Nothing.

Tenga cuidado con los objetos que se compongan de otros objetos porque de nuevo no se podrán destruir los objetos, lo cual llevaria a tener más métodos de limpieza al nivel de los hijos.



Directorio de Blogs de México

1 comentarios:

Anónimo dijo...

Gracias por el aporte muy bueno