You are on page 1of 23

PROGRAMACIN

ORIENTADA A
OBJETOS CON
VB.NET
Ing. David Gutirrez Hernndez
ORIENTACIN A OBJETOS EN VB.NET
Breve repaso de POO
La programacin Orientada a objetos (POO) es una forma especial de programar, ms cercana a como
expresaramos las cosas en la vida real que otros tipos de programacin.
La POO no es difcil, pero es una manera especial de pensar, a veces subjetiva de quien la programa, de
manera que la forma de hacer las cosas puede ser diferente segn el programador. Aunque podamos hacer
los programas de formas distintas, no todas ellas son correctas, lo difcil no es programar orientado a objetos
sino programar bien.

Programar bien es importante porque as nos podemos aprovechar de todas las ventajas de la POO.
Pensar en trminos de objetos es muy parecido a cmo lo haramos en la vida real. Por ejemplo vamos a
pensar en un coche para tratar de modelizarlo en un esquema de POO.
Diramos que el coche es el elemento principal que tiene una serie de caractersticas, como podran ser el
color, el modelo o la marca. Adems tiene una serie de funcionalidades asociadas, como pueden ser ponerse
en marcha, parar o aparcar.
Pues en un esquema POO el coche sera el objeto, las propiedades seran las caractersticas como el color o
el modelo y los mtodos seran las funcionalidades asociadas como ponerse en marcha o parar.
Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar
y ellos mismos tambin son objetos. Es decir, el taller de coches ser un objeto que utilizar objetos coche,
herramienta, mecnico, recambios, etc.
Clases en POO
Las clases son declaraciones de objetos, tambin se podran definir como abstracciones de objetos.
Esto quiere decir que la definicin de un objeto es la clase.
Cuando programamos un objeto y definimos sus caractersticas y funcionalidades en realidad lo que estamos
haciendo es programar una clase.
Propiedades de las clases
Las propiedades o atributos son las caractersticas de los objetos.
Cuando definimos una propiedad normalmente especificamos su nombre y su tipo.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
2
Ing. David Gutirrez Hernndez
Nos podemos hacer a la idea de que las propiedades son algo as como variables donde almacenamos datos
relacionados con los objetos.
Mtodos de las clases
Son las funcionalidades asociadas a los objetos.
Los mtodos son como funciones que estn asociadas a un objeto.
Objetos en POO
Los objetos son ejemplares de una clase cualquiera.
Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crear.
Esta accin de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccin
de la palabra instace que en ingls significa ejemplar).
Para crear un objeto se tiene que escribir una instruccin especial que puede ser distinta dependiendo el
lenguaje de programacin que se emplee, pero ser algo parecido a esto.
miCoche = new Coche()
Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacin.
Dentro de los parntesis podramos colocar parmetros con los que inicializar el objeto de la clase coche.
Estados en objetos
Cuando tenemos un objeto sus propiedades toman valores.
Por ejemplo, cuando tenemos un coche la propiedad color tomar un valor en concreto, como por ejemplo
rojo o gris metalizado.
El valor concreto de una propiedad de un objeto se llama estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto.
miCoche.color = rojo
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
3
Ing. David Gutirrez Hernndez
El objeto es miCoche, luego colocamos el operador punto y por ltimo el nombre e la propiedad a la que
deseamos acceder.
En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple
asignacin.
Mensajes en objetos
Un mensaje en un objeto es la accin de efectuar una llamada a un mtodo.
Por ejemplo, cuando le decimos a un objeto coche que se ponga en marcha estamos pasndole el mensaje
ponte en marcha.
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del mtodo que deseamos imbocar
miCoche.ponerseEnMarcha( )
En este ejemplo pasamos el mensaje ponerseEnMarcha( ). Hay que colocar parntesis igual que cualquier
llamada a una funcin, dentro iran los parmetros.
Hay tres principios que permiten a los lenguajes de programacin orientada a objetos implementar el modelo
orientado a objetos:
- Encapsulacin.
- Herencia.
- Polimorfismo.
Encapsulacin
Es el mecanismo que permite al cdigo y los datos que maneja mantener los alejados de interferencias o
malos usos.
Es como un envoltorio protector que evita que otro cdigo pueda acceder al cdigo o a los datos.
Un objeto puede ocultar sus caractersticas y lo que hace del mundo exterior. Solo percibimos la interfaz del
objeto.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
4
Ing. David Gutirrez Hernndez
Herencia
Es el proceso mediante el cual un objeto adquiere las propiedades de otro.
De esta forma, estableciendo una clasificacin jerrquica, cada objeto slo tiene que definir aquellas
caractersticas que lo hacen nico pudiendo heredar sus caractersticas genricas de su clase padre.
Ejemplo:
Un objeto que pertenezca a la clase pastor Alemn tiene los atributos de la clase perro y, a su vez, de la clase
mamfero.
Polimorfismo
Permite a una interfaz ser utilizada por una clase general de acciones, es el compilador el que determina la
accin especifica que debe aplicar en cada situacin.
Por ejemplo, el concepto de comer de un ser humano puede ser polimrfico. Si vamos a comer algo liquido,
usaremos la cuchara. Si es algo slido, usaremos el tenedor. Utilizar un mtodo u otro depende del tipo de
conmina que recibamos.
Cuando se aplican estos tres aspectos adecuadamente, se puede generar un entorno de programacin que
admite el desarrollo de programas ms fciles de ampliar y tratar que los modelos basados en pro
Los elementos de una clase que contienen sus datos y definen su comportamiento, es decir, las propiedades
y mtodos, reciben adems el nombre de miembros de la clase, trmino que tambin utilizaremos a partir
de ahora.
P.O.O. en .NET
Definir la informacin de la clase
Existen dos formas de almacenar los datos o informacin en una clase: a travs de campos de clase y de
propiedades.
El uso de campos o propiedades para una clase es una cuestin de diseo, no pudiendo afirmar
categricamente que un tipo de almacenamiento de datos sea mejor que otro.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
5
Ing. David Gutirrez Hernndez
Propiedades
Una propiedad en la clase se define, por norma general, mediante dos elementos: una variable de propiedad
y un procedimiento de propiedad.
La variable de propiedad, tal y como su nombre indica, es una variable con mbito privado a nivel de la
clase, que se encarga de guardar el valor de la propiedad. Por su parte el procedimiento de propiedad o
Property, es el encargado de actuar de puente entre el cdigo cliente y la variable de propiedad, realizando
las operaciones de acceso y asignacin de valores a dicha variable.
Private customerName As String
Public Property Name( ) As String
Get
Return customerName
End Get
Set(ByVal Value As String)
customerName = Value
End Set
End Property
Pueden crearse propiedades de solo lectura o escritura
Public ReadOnly Property
Public WriteOnly Property
Propiedades virtuales
Otra de las ventajas del uso de propiedades reside en la posibilidad de definir propiedades virtuales; es
decir, una propiedad que no tenga una correspondencia directa con una variable de propiedad, ya que
podemos crear un procedimiento Property que no est obligatoriamente asociado con una variable.
Propiedades predeterminadas
Una propiedad predeterminada o por defecto, es aquella que nos permite su manipulacin omitiendo el
nombre.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
6
Ing. David Gutirrez Hernndez
Para establecer una propiedad como predeterminada en una clase, la variable de propiedad asociada deber
ser un array, pudiendo crear slo una propiedad predeterminada por clase.
Al declarar una propiedad por defecto, deberemos utilizar al comienzo de la sentencia de declaracin, la
palabra clave Default.
Para asignar y obtener valores de este tipo de propiedad, tendremos que utilizar el ndice del array que
internamente gestiona la propiedad.
Para crear un mtodo en una clase debemos escribir un procedimiento de tipo Sub o Function, en funcin
de si necesitamos devolver o no, un valor desde el mtodo.
La sobrecarga de mtodos, es una tcnica que consiste en crear varios mtodos con idntico nombre dentro
de la misma clase, distinguindose entre s por su lista de parmetros.
Para declarar un mtodo como sobrecargado, debemos utilizar la palabra clave Overloads despus
del modificador de mbito. Podemos sobrecargar mtodos de tipo Sub y Function.
Constructores
El primer mtodo que es ejecutado al instanciar un objeto de la clase se denomina constructor. Este tipo de
mtodo resulta til para tareas de configuracin iniciales sobre el objeto.
No es necesario escribir un mtodo constructor en la clase, ya que en el caso de que no exista, el compilador
se encarga de crearlo implcitamente.
VB.NET es la primera versin de este lenguaje que incorpora herencia, una caracterstica demandada por un
amplio colectivo de los programadores de esta herramienta; y es que, a pesar de haber sido incorporados
progresivamente aspectos de orientacin a objetos al lenguaje, este era el elemento fundamental que faltaba
para ser plenamente OOP.
Para crear una clase derivada, debemos declarar una nueva clase, especificando cul es su clase base
mediante la palabra clave Inherits.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
7
Ing. David Gutirrez Hernndez
Reglas de ambito
Public: dicho elemento ser accesible por todo el cdigo de la clase, clases heredadas y cdigo cliente.
Private, ese miembro slo ser accesible por el cdigo de la propia clase.
Protected Un miembro de clase declarado con este modificador, ser accesible desde el cdigo de su propia
clase y desde cualquier clase heredada.
Friend Un miembro de clase declarado con este modificador, ser accesible por todo el cdigo de su proyecto
o ensamblado.
Podemos sobrecargar mtodos existentes en una clase base dentro de una clase derivada, para ello
simplemente escribimos la implementacin del mtodo sobrecargado utilizando la palabra clave Overloads.
Acceso a los mtodos de la clase base MyBase:
Proporciona acceso a los miembros de una clase base desde su correspondiente subclase.
Esta tcnica consiste en la capacidad de crear, en una clase derivada, un mtodo que altere parcial o
totalmente, la implementacin ya existente de dicho mtodo en la clase base.
Una de las diferencias existentes con la sobrecarga de mtodos, estriba en que al sobrescribir, el mtodo en
la subclase puede tener el mismo nombre y lista de parmetros que el ya existente en la clase padre.
Podemos sobrescribir tanto mtodos como propiedades.
Para indicar en la clase base que un mtodo podr ser sobrescrito en una subclase, debemos declarar dicho
mtodo utilizando la palabra clave Overridable.
Posteriormente, cuando en una clase derivada queramos rescribir el mtodo de la clase base, lo declararemos
empleando la palabra clave Overrides.
Podemos deducir por lo tanto, que la reescritura de mtodos es un proceso que se debe realizar con el
consentimiento previo de la clase base.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
8
Ing. David Gutirrez Hernndez
Se puede utilizar cualquier mtodo de la clase padre usando la palabra clave MyBase.
Overridable puede ser sobreescrita
MustOverride deber ser sobreescrita en la clase derivada
Overrides replaza el mtodo de la clase padre
NotOverridable No puede ser sobreescrita(por defecto)
Herencia
Ocultamiento de miembros de una clase
Esta tcnica consiste en crear dentro de una clase derivada, miembros con el mismo nombre (y firma,en el
caso de mtodos) que los existentes en la clase base, pero ocultando el acceso a los miembros de la clase
base para los objetos instanciados de la subclase.
Utilizaremos la palabra clave Shadows, en la declaracin de aquellos miembros a esconder.
Overriding replaces the existing method based on the method name and signature. Shadowing effectively
hides the method in the base class, based solely on the method name. This means shadowing a method also
hides any overloaded methods within the base class. You can shadow a method regardless of whether the base
method is specified as overridable.
Podemos crear una clase base que implemente un constructor y una subclase sin l. En esta situacin, cuando
instanciemos un objeto de la subclase, se llamar implcitamente al constructor de la clase base para
ejecutar el cdigo de inicializacin.
Tambin es posible crear el constructor slo en la clase derivada.
Si ambas clases disponen de un constructor, en primer lugar se ejecutar el constructor de la clase base y
despus el de la clase derivada.
Realmente, el primer constructor ejecutado corresponde a la clase Object, y sucesivamente, se irn
ejecutando todos los constructores de la jerarqua de clases hasta llegar a la clase que origin la llamada.
El problema sobreviene cuando en la clase base creamos un constructor parametrizado, ya que ello obliga a
sus clases derivadas a crear tambin un mtodo constructor dentro del cul se haga una llamada al
constructor de la clase base.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
9
Ing. David Gutirrez Hernndez
Clases selladas:
Si no queremos que nuestra clase pueda ser heredada por otras, debemos declararla de forma que no permita
herencia; a este tipo de clase se le denomina clase no heredable o sellada (sealed).
Para definir una clase no heredable, debemos utilizar la palabra clave NotInheritable.
Clases abstractas o no instanciables
Una clase abstracta es aquella que no permite la instanciacin directa de objetos a partir de ella, siendo
necesario una clase derivada para acceder a sus miembros.
Aunque en una clase abstracta podemos escribir un mtodo constructor, slo ser accesible desde el
constructor de la subclase.
Para definir una clase abstracta utilizaremos la palabra clave MustInherit en el momento de su declaracin.
Palabras claves herencia
Inherits hereda de una clase base
NotInheritable no puede ser heredada
MustInherit No se pueden crear objetos de esa clase
Comprobacin del tipo de un objeto y moldeado
Usando Objetos Genericos(Object)
GetType( ) nos permite saber el tipo de objeto que es. Devuelve un objeto de la clase Type.
CType( ), que realiza un moldeado de la variable que contiene el objeto hacia un tipo determinado, y nos
permite acceder a los elementos del objeto.
Miembros compartidos (shared) de una clase
Podemos pues clasificar los miembros de una clase en dos categoras:
- Miembros de instancia (instance members). Son aquellos a los que accedemos a travs de un objeto
instanciado previamente de la clase.
- Miembros compartidos (shared members). Son aquellos a los que podemos acceder sin necesidad de
que exista un objeto creado de la clase.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
10
Ing. David Gutirrez Hernndez
Podemos declarar como compartidos los mtodos, propiedades y campos de una clase. Para ello deberemos
emplear la palabra clave Shared en la declaracin.
Para utilizar desde el cdigo cliente un miembro compartido, tan slo debemos poner el nombre de la clase
a la que pertenece, el punto y el nombre del miembro a utilizar.
Destruccin de objetos y recoleccin de basura
En VB6
La destruccin de objetos y liberacin de recursos en est basada en una tcnica que mantiene un contador
interno de las referencias que en el cdigo cliente hay establecidas hacia un objeto; cuando la ltima
referencia es eliminada, se ejecuta su evento Terminate( ).
Este sistema de destruccin se denomina finalizacin determinista, ya que nos permite saber el momento
preciso en el que un objeto es destruido.
En Net
no utiliza conteo de referencias, sino que en su lugar, implementa un sistema de bsqueda y eliminacin de
objetos que ya no estn siendo utilizados, denominado recoleccin de basura (garbage collection).
Como ya hemos mencionado, el recolector de basura funciona de modo automtico; no obstante, si en un
determinado momento queremos forzar su uso, la jerarqua de .NET nos provee de la clase GC (Garbage
Collector), que representa al objeto recolector, pudiendo manipularlo a travs de sus miembros compartidos.
Por ejemplo, si necesitamos que se efecte la recoleccin de objetos que no estn siendo utilizados
ejecutaramos el mtodo Collect( ) de este objeto.
Destruccin de objetos y recoleccin de basura.
En .NET Framework los objetos disponen de mtodos finalizadores. Para implementar este tipo de miembro
en nuestras clases, escribiremos un mtodo con el nombre Finalize( ), de mbito Protected, que sobrescriba
y llame al finalizador de su clase padre.
Cuando asignamos Nothing a un objeto, o la variable que lo contiene pierde su mbito y es eliminada,
transcurre un tiempo que no es posible determinar hasta que el objeto es definitivamente destruido.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
11
Ing. David Gutirrez Hernndez
Interfaces
Mientras que el interfaz no puede ser cambiado desde el momento en que sea implementado, la clase que
lo implementa se compromete a crear la lista de miembros en la misma forma que indica el interfaz.
Un interfaz proporciona, a modo de declaracin, una lista de propiedades y mtodos, que posteriormente
sern codificados en una o varias clases.
Debido a su naturaleza declarativa, un interfaz no contiene el cdigo de los miembros que expresa dicho
cdigo ser escrito en las clases que implementen el interfaz.
Clara relacin con el polimorfismo. El mismo interfaz, implementado en distintas clases, podr tener a su
vez cdigo distinto, con lo que los objetos de diferentes clases que implementen un interfaz comn, pueden
tener un comportamiento diferente.
Pasos:
Declaro Interface:
Public Interface miinte
miembros
End Interface
En las clases que vamos a utilizar las definiciones de la interfaz emplearemos despus de la declaracin de
la clase, la palabra clave Implements junto al nombre del interfaz que deseamos que implemente la clase.
Para implementar un miembro de un interfaz, en el momento de escribir su declaracin, utilizaremos la
palabra clave Implements, seguida del interfaz y miembro que implementa.
Eventos y Delegados
Un evento es una seal que comunica a una aplicacin que ha sucedido algo importante
dentro de una aplicacin, una notificacin lanzada por un objeto, que podr ser respondida por aquellos
otros objetos interesados en darle soporte.
El emisor de eventos
Un emisor de eventos, tambin denominado origen de eventos (event source o event sender), es un objeto
capacitado para generar y lanzar eventos al sistema, que puedan ser recuperados por otros objetos
preparados para realizar su tratamiento.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
12
Ing. David Gutirrez Hernndez
Para que un objeto pueda desencadenar eventos, en su clase debemos realizar dos tareas:
Declarar el propio evento usando la palabra clave Event, especificando si es necesario una lista de parmetros
que acompaan al evento.
Los eventos se declaran en clases, estructuras, mdulos e interfaces mediante la palabra clave Event, como
se muestra en el siguiente ejemplo:
Event AnEvent(ByVal EventNumber As Integer)
Dos tareas:
Lanzar el evento mediante la palabra clave RaiseEvent, seguida del nombre del evento a disparar. Si hemos
declarado el evento con parmetros, deberemos aadir los valores para cada uno de los parmetros en el
mismo orden en el que los hemos declarado.
En Visual Basic .NET, los eventos se producen con la instruccin RaiseEvent, como en el ejemplo siguiente:
RaiseEvent AnEvent(EventNumber)
Las clases derivadas (clases que heredan caractersticas de una clase base) pueden controlar eventos
provocados por su clase base mediante la instruccin Handles MyBase.
El receptor de eventos
Un receptor de eventos, tambin denominado manipulador de eventos (event receiver o event handler), es
aquella parte del cdigo cliente, que configuramos para que sea capaz de recibir los eventos generados por
un objeto emisor.
Conexin de un emisor de eventos con un manipulador de eventos
Existen dos medios para comunicar un evento con un manipulador de eventos:
mediante las palabras clave WithEvents y Handles. Esta tcnica tiene la ventaja de que permite escribir un
cdigo mucho ms legible, en cuanto a la manipulacin de eventos se refiere mediante la palabra clave
AddHandler.
La ventaja en este caso, es que podemos asociar procedimientos manipuladores de evento dinmicamente
durante el transcurso de la ejecucin del programa.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
13
Ing. David Gutirrez Hernndez
WithEvents y Handles.
Es el modo ms sencillo para implementar la conexin entre un evento y un procedimiento manipulador de
evento.
En primer lugar, declaramos una variable del tipo de objeto cuyos eventos queremos capturar, en la zona de
declaraciones del mdulo, clase, etc..., utilizando la palabra clave WithEvents.(no puede ser local)
A continuacin, tenemos que escribir el procedimiento manipulador, que ser invocado cada vez que se
dispare el evento.
Dicho procedimiento debe ser de tipo Sub, ya que un evento no puede devolver valores, por lo que no
podremos utilizar un Function.
Tambin debemos finalizar su declaracin con la palabra clave Handles, seguida del nombre de la variable
del objeto que hemos declarado en la zona de declaraciones, y el nombre del evento que el procedimiento
va a tratar.
El receptor de eventos AddHandler
El enlace dinmico de eventos a sus correspondientes manipuladores, tiene la ventaja de que nos permite
asociar el mismo evento a diferentes procedimientos manipuladores de dicho evento, durante el transcurso
de la ejecucin del programa.
El objeto sobre el que vamos a manipular sus eventos podemos declararlo tanto a nivel local como en la
zona de declaraciones, a diferencia del enlace esttico.
Para establecer un enlace dinmico entre un evento y un manipulador, utilizaremos la instruccin AddHandler.
Esta instruccin, recibe dos parmetros:
NombreObjeto.NombreEvento.
La direccin de entrada al procedimiento que deber ejecutar el evento, y que obtenemos a travs de la
instruccin AddressOf.
Definicin: es un objeto al que otros objetos ceden (delegan) la ejecucin de su cdigo. Tambin se conocen
como punteros a funcin con seguridad de tipos.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
14
Ing. David Gutirrez Hernndez
Los delegados son tiles en situaciones donde es necesario un intermediario entre el procedimiento que
realiza una llamada y el procedimiento que la recibe.
Al instanciar un delegado, se asocia con un mtodo de instancia o compartido de un objeto, y posteriormente,
durante la ejecucin, ser el delegado el que se encargue de ejecutar dicho mtodo y no el propio objeto.
Tambin se pueden asociar los delegados con procedimientos Sub o Function de mdulos.
Para declarar un delegado, debemos utilizar la palabra clave Delegate, seguida del tipo de mtodo (Sub o
Function) al que posteriormente deberemos asociar el delegado; y finalmente, el nombre del delegado con
la lista de parmetros y valor de retorno si es necesario.
El lugar de declaracin debe ser la zona de declaraciones de la clase o mdulo.
Creacin de delegados
Declaramos una variable correspondiente al tipo del delegado. A continuacin, conectamos el delegado con
el procedimiento que posteriormente deber ejecutar, empleando la palabra clave AddressOf, seguida del
nombre del procedimiento.
AddressOf devuelve el puntero o direccin de entrada al procedimiento, que ser lo que utilice el delegado
para saber la ubicacin del procedimiento que debe ejecutar.
Por ltimo, para ejecutar el procedimiento al que apunta el delegado, llamaremos a su mtodo Invoke( ).
Si delegamos un procedimiento que admite parmetros, a la hora de invocarlo con el delegado, debemos
pasar al mtodo Invoke( ) los valores de los parmetros, en el mismo orden que especifica el procedimiento.
En el caso de delegacin hacia funciones, cuando invoquemos el cdigo con el delegado, deberemos obtener
el valor de retorno de la funcin.
Crear componentes
Componentes:
Los componentes se crean a partir de las clases y deben implementar la interfaz Icomponent o tomar la clase
component situada en System.ComponentModel.Component
Obligatorio que la clase tenga el constructor por defecto.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
15
Ing. David Gutirrez Hernndez
Uso no visual:
Una vez compilada la clase crea una Dll.
Para usar una clase que tengamos en la Dll creada lo primero es en el explorador de soluciones, References
y aadir una referencia a la Dll creada.
En proyectos con formularios es ms prctico usar un componente en vez de la dll, es lo conseguimos
aadiendo las lineas anteriores.
En el proyecto debemos ir al cuadro de herramientas, personalizar elegir componentes de Net, examinar y
escoger el componente creado.
Aparacer en el cuadro de herramientas, establecer propiedades en la ventana.
Colecciones personalizadas
Gracias a la arquitectura orientada a objeto de la plataforma, podemos crear nuestras propias clases para
la manipulacin de arrays, heredando de las colecciones existentes o implementando los interfaces
necesarios.
Podemos hacerlo heredando de la clase de la coleccin que queremos heredar, esta tcnica tiene el
inconveniente de que no podemos modificar o eliminar ciertos comportamientos de la clase base.
Usando interface, La ventaja de implementar interfaces de coleccin en una clase, reside en que tenemos
control absoluto en cuanto al comportamiento que tendrn los objetos collection que instanciemos de dicha
clase.
Inconveniente, tenemos el hecho de que la implementacin de un interfaz, obliga a codificar todos los
miembros que vienen en la declaracin de dicho interfaz; respecto a esto ltimo, podemos escribir slo la
declaracin de algunos miembros y no su cdigo; de esta manera, para aquellos aspectos del interfaz en los
que no estemos interesados, no ser necesario codificar.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
16
Ing. David Gutirrez Hernndez
La programacin orientada a objetos en .NET
Qu es y para qu sirve la programacin orientada a objetos?
Cualquiera que haya programado un poco se dar cuenta de la importancia que tiene para el programador
la dichosa documentacin. Documentacin que le sirve tanto a l como a otras personas (todava no he
conocido a uno al que le guste realizar tan atractiva labor).
Pero la cosa no se queda ah, adems sin una buena documentacin un programador pierde el tiempo en hacer
rutinas o procedimientos que ya estaban hechos con anterioridad y que posiblemente l mismo hizo. Tambin
una aplicacin con mala documentacin es muy difcil de depurar y de corregir errores posteriores a su
implementacin.
y qu tiene esto que ver con la programacin orientada a objetos?
Este tipo de programacin consiste en agrupar en objetos aquel cdigo, rutinas, procedimientos, etc, que
tengan cosas en comn, de forma que cuando un programador las utilice sepa dnde encontrarlas. Un
nuevo concepto (entre comillas porque en realidad no es nuevo, pero bueno) que incluye la generacin
de aplicaciones autodocumentadas. Una vez generado o construido un objeto el programador, y los que
vengan detrs, podrn olvidarse por completo del objeto y sencillamente utilizarlo, al igual que hacemos con
los textbox, commands, grids, etc.
Argumentos a favor de la POO:
Imaginemos que queremos utilizar ventanas en nuestro proyecto.
Queremos que estas ventanas puedan hacer dos cosas, abrirse y cerrarse. Adems una ventana deber tener
una propiedad llamada estado que nos indique si est abierta o cerrada.
Con Visual Basic, sin utilizar la potencia de la POO escribiramos algo parecido a esto:
Sub Abrir()
estado = 1 Abrimos la ventana
End Sub
Sub Cerrar()
estado = 0 Cerramos la ventana
End Sub
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
17
Ing. David Gutirrez Hernndez
Si ahora otra persona, o incluso el mismo programador dentro de un mes, se pone a leer esto, estaris de
acuerdo conmigo en que no entender nada. No sabe qu es lo que abre ni lo que cierra. Cmo se va a dar
cuenta de que est manipulando una ventana?
Pero eso no es todo. Qu sucede si desea crear varias ventanas? Cmo distingue unas de otras? Definiendo
ms variables, como por ejemplo: estado1, estado2, etc?
Seguramente el programador hara algo as:
Sub Abrir (index as integer)
estado(index) = 0 Abrimos la ventana nmero index
End Sub
Sub Cerrar (index as integer)
estado(index) = 1 Cerramos la ventana index
End Sub
Es posible que haga esto, que se construya un Array de ventanas con sus correspondiente variables de estado.
La POO nos ofrece la posibilidad de una vez definida una clase (en este caso la clase ventana) poder crear
tantas instancias (objetos) de esa clase como necesitemos y dotarlas de un nombre propio.
Cmo se crea una clase?
Una clase se puede crear utilizando un mdulo de clase class module.
Para crear un objeto, previamente hay que crear una clase. Una clase define los mtodos de los objetos y
sus propiedades.
Vamos con un ejemplo:
Abrir un nuevo proyecto
En el men Insertar seleccionar mdulo de clase. Aparecer en la ventana de nuestro proyecto el nuevo
archivo Class1.
Analicemos el nuevo archivo:
Para poder acceder a sus propiedades seguramente no te baste con seleccionarlo en la ventana del proyecto
y pulsar F4 sino que tendrs que abrirlo haciendo doble Click sobre l y posteriormente pulsar F4.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
18
Ing. David Gutirrez Hernndez
Al hacer esto observamos que tiene tres propiedades:
- Propiedad Instancing. Nos indica, en caso de que queramos hacer pblica la clase (ya explicaremos
esto) si podremos crear cero, una o n instancias de la clase (objetos). De momento poner Not
Creatable.
- Propiedad Name. Con esta propiedad damos nombre a la clase que queremos crear. En nuestro
ejemplo el nombre ms apropiado sera ventana.
- Propiedad Public. Como ya intus con esta propiedad determinamos si hacemos o no pblica nuestra
clase (si queremos o no que otras aplicaciones puedan crear nuevos objetos de la clase ventana). De
momento poner False. Nota: al poner false en esta propiedad se ignora el valor de la propiedad
Instancing
Ya hemos creado la clase ventana.
Sigamos analizando el formulario de clase...
Dicho formulario tiene en principio dos mtodos: Initialize y Terminate. Abandonmoslos por ahora.
Ya estamos en disposicin de empezar a crear los mtodos y propiedades que van a definir la clase ventana.
Los mtodos de una clase se definen sencillamente implementando funciones o procedimientos en el
general del mdulo de tipo Public.
Las propiedades se definen definiendo variables tambin de tipo Public en el general del mdulo.
Siguiendo con nuestro ejemplo, nuestra ventana ha de poder abrirse y cerrarse adems de tener una
propiedad llamada estado que nos indique si est abierta o cerrada.
Para definir pues la propiedad estado basta con escribir en el general del mdulo de clase:
Public estado as integer 1 abierta, 0 cerrada
Para definir los mtodos abrir y cerrar:
Public Sub abrir()
estado = 1
End Sub
Public Sub cerrar()
estado = 0
End Sub
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
19
Ing. David Gutirrez Hernndez
Cmo se crea un objeto?
Siguiendo con el ejemplo creemos nuestro primer objeto ventana.
En el Form_Load del formulario del mismo proyecto (Form1) escribir lo siguiente:
Dim Ventana_salita As New ventana Creamos mi Ventana_salita
Ventana_salita.abrir Abramos la ventana de la salita
estado = Ventana_salita.estado comprobemos que efectivamente se ha abierto
Ventana_salita.cerrar Cerremos ahora la ventana
estado = Ventana_salita.estado
Ejecuta el cdigo paso a paso para ir viendo el valor que va tomando la variable estado.
Qu ocurre si ahora queremos crear otra ventana? Puedes crear tantas ventanas (instancias de la clase
ventana) como desees.
Por ejemplo creemos la ventana del bao.
Dim Ventana_bao As New ventana
Ventana_bao.abrir
Ventana_bao.cerrar
,etc

A partir de ahora el programador slo deber recordar que puede crear ventanas y que las ventanas se pueden
abrir y cerrar. Adems, si algn da desea revisar el cdigo asociado a los mtodos abrir o cerrar sabr dnde
encontrarlo sin dificultad; en la clase ventana.
A continuacin guardemos el proyecto con el nombre, por ejemplo, libreria.vbp (ms adelante entenderis
porqu le llamo as).
Al hacerlo observaris que se ha generado un archivo llamado ventana.cls. Este es el archivo de definicin
de la clase (por deformacin yo directamente le llamo: el objeto ventana, aunque no existe ningn objeto
hasta que no se crea una instancia de la clase, como ya sabis con la orden As New).
Si ahora queris utilizar el objeto ventana en nuevos proyectos basta con que en stos insertis el archivo
de clase ventana.cls
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
20
Ing. David Gutirrez Hernndez
Ya s lo que estis pensando, que valla chapuza. Cada proyecto que utilice el objeto ventana tendr que tener
insertado el archivo ventana.cls.
Esto ha de ser as porque no hemos dicho que la clase sea pblica.
A continuacin nos metemos con ese tema.
Cmo se crea una clase pblica?
Antes de meternos directamente con el procedimiento conviene tener una serie de conceptos claros. Para
que una aplicacin pueda servir a otras aplicaciones objetos ambas tienen que entenderse a travs de la
interfaz de Automatizacin OLE.
Una aplicacin hace de servidor OLE (servidor de objetos) y otra de cliente. Por ejemplo, cuando hacemos
unas tablas en Excel y las queremos pegar en Word, Excel hace de servidor OLE y Word es el cliente. Ambos
se entienden a travs de la interfaz de automatizacin OLE y Excel le proporciona a Word el objeto tabla
(en lugar de ventana).
As que, como habris intuido, para que nuestro proyecto pueda servir el objeto ventana (ya que queremos
que sea pblico) a otras aplicaciones deberemos convertir el proyecto en un servidor OLE.
Cmo se crea un servidor OLE? (slo disponible en la versin profesional y para empresas).
Nada ms sencillo :
Para que un proyecto con clases se convierta en un servidor OLE el proyecto deber contener adems de las
clases, un mdulo con el procedimiento Sub Main, aunque en ste no escribamos nada de cdigo. As que
manos a la obra:
Insertar un mdulo (normal) en el proyecto (module1)
Si queris podis borrar el formulario Form1, ya que para nuestros propsitos no nos es de utilidad.
Escribir en el mdulo el procedimiento Sub Main vaco.
Sub Main()
End Sub
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
21
Ing. David Gutirrez Hernndez
Acceder a las propiedades de la clase ventana y hacerla pblica. Para ello en la propiedad Public poner True.
Si queris que distintas aplicaciones puedan crear ms de una instancia (objeto) poner la propiedad Instancing
a Creatable MultiUse.
Guardar el proyecto.
Repasemos: En nuestro proyecto tenemos un archivo llamado ventana.cls que define la clase ventana.
Tambin tenemos un mdulo con un procedimiento Sub Main sin cdigo alguno. No tenemos nada ms. Adems
nuestra clase es pblica y multiuse.
Ya reunimos todos los ingredientes para hacer de nuestro proyecto un servidor OLE.
Acceder al men Archivo y seleccionar Crear archivo Ole dll (slo disponible en la versin profesional y para
empresas).
Dejar el nombre por defecto, que ser libreria.dll.
Si hemos llevado a cabo con xito la operacin se nos habr generado dicho archivo y adems se habr
registrado automticamente en el registro de Windows.
Es interesante que accedamos al registro para ver un par de cosillas. Para ello ir a Men Inicio, Ejecutar. Poner
regedit.
Una vez dentro del editor del registro de windows lo ms sencillo para localizar los parmetros
correspondientes a nuestro servidor OLE es que utilicemos el comando buscar, introduciendo como cadena
a buscar libreria.dll.
Una vez encontrada observemos el valor de las siguientes constantes:
InprocServer32 = c:\windows\escritorio\libreria.dll. Esta constante indica el camino hasta la dll que hemos
creado. Cada vez que queramos crear una instancia de una clase contenida en esta dll, el sistema la buscar
ah.
ProgID = project1.ventana. Este valor es muy importante. Ser la cadena que deberemos escribir cuando
desde nuestras aplicaciones queramos crear una instancia de ventana. project1 es la aplicacin que nos sirve
la clase ventana.
Una vez visto esto podemos salgamos del editor del registro de Windows e intentemos crear un objeto ventana
para utilizar en una aplicacin de Visual Basic.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
22
Ing. David Gutirrez Hernndez
Cmo se crea un objeto servido por un servidor OLE?
Abramos un nuevo proyecto con Visual Basic y escribamos las siguientes lneas de cdigo en el Form_Load
del formulario Form1.
Dim ventana_cocina As Object
Set ventana_cocina = CreateObject(proyect1.ventana)
Ya tenemos creado nuestro objeto sin necesidad de tener en el proyecto el archivo de clase ventana.cls.
Como antes, podemos hacer:
ventana_cocina.abrir
ventana_cocina.cerrar
,etc
Como ya se os habr ocurrido, sera til, a medida que hacemos aplicaciones, crear una especie de librera
de objetos (quiero decir clases) para ser utilizada en cualquier momento. Todos ellos dentro de, por ejemplo,
libreria.dll. De esta forma todo ser ms fcil de encontrar.
Los mtodos Initialize y Terminate son comunes a todas las clases. Simplemente decir que se suele utilizar
para reinicializar y comprobar parmetros comunes a la clase. Explicar cundo se producen ambos eventos
me ocupara varias lneas y no lograra expresarlo bien.
Lo mejor es que escribis cdigo en ellos y ejecutis paso a paso para daros cuenta del momento exacto en
el que se ejecutan. Baste decir que el evento Initialize se produce inmediatamente antes de referirnos al
objeto por primera vez y el evento Terminate se produce cuando se encuentra la primera lnea de cdigo que
ya no hace referencia al objeto.
Lgicamente el ejemplo de la ventana es totalmente ilustrativo. Nadie va a crearse un objeto para hacer algo
tan simple. Pero la potencia de la POO nos facilita mucho las cosas cuando debemos agrupar procedimientos
o cdigo que sea muy complejo y del que no nos queramos volver a acordar. Simplemente creamos una
instancia y la utilizamos.
PROGRAMACIN ORIENTADA A OBJETOS
CON VB.NET
23
Ing. David Gutirrez Hernndez

You might also like