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.
Una interfaz es el conjunto de propiedades y métodos de un objeto.
Se declara una clase de tipo publica para poder cambiar los datos pertenecientes a un objeto mediante su interfaz (propiedades y métodos).
Se declara una clase de tipo privada para ocultar los datos a el código que no pertenece al objeto.
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.
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
Para crear una propiedad de solo lectura, se debe omitir el procedimiento Property Let
y para las variables de objeto el procedimiento Property Set
.
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"
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.
- 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:
- txtNombre
- txtEdad
- txtFechaNac
- lblNomina
- 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].
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)
.
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.
Es posible reutilizar código mediante las formas Binario
y Origen
.
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 variablesVariant
que al igual que las variables declaradasAs 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 aNothing
, Visual Basic crea otro objeto.
La reutilización de código fuente es posible crearlo copiando y modificando el código origen.
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
.
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.
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:
Gracias por el aporte muy bueno
Publicar un comentario