Вы находитесь на странице: 1из 52

Programacin orientada a objetos en Visual Basic

.NET
En ste tutorial vamos a ver la Programacin Orientada a
Objetos(POO) de Visual Basic.NET, con la utilizacin y creacin de
clases, de una forma mas o menos, sencilla. Recuerda descargar
Visual Basic .NET y ver el tutorial bsico de Visual Basic .NET antes
de empezar.
Primero har una explicacion sobre la POO , y veremos un poco lo
bsico. Luego empezaremos a usar lo aprendido poco a poco.
Todo .NET Framework est basado en clases (u objetos). A
diferencia de las versiones anteriores de Visual Basic, la versin
.NET de este lenguaje basa su funcionamiento casi exclusivamente
en las clases contenidas en .NET Framework, adems casi sin
ningn tipo de limitacion.
La POO es una evolucin de la programacin por procedimientos
llamada tambin estructurada. Se basaba en funciones y
procedimientos y el cdigo que controlaba el flujo de las llamadas a
estos. En Visual Basic, sobre todo en versiones anteriores se sigue
programando mucho as. A veces por desconocimiento y otras por
"miedo" no se da el salto a la POO, aunque un programador con
experiencia en VB puede hacer magnficas aplicaciones sin utilizar
la POO (y sin aprovecharse de sus ventajas) , y sobre todo, en un
tiempo relativamente reducido.

Los tres pilares de la Programacin Orientada a


Objetos
Todos los lenguajes basados en objetos, deben cumplir estos tres
requisitos:

Herencia
Encapsulacin
Polimorfismo

Nota: Algunos autores aaden un cuarto requisito: la abstraccin, pero


este ltimo est estrechamente ligado con la encapsulacin.

Herencia

Esta es la caracterstica ms importante de la POO. Segn la propia


documentacin de Visual Studio .NET:
"La herencia permite crear nuevas clases a partir de clases
existentes. La herencia puede simplificar el diseo de la aplicacin
proporcionando una estructura de relaciones entre las distintas
clases. Tambin admite la reutilizacin de cdigo porque slo se
debe codificar el comportamiento de clases nuevas o distintas.".
Una relacin de herencia es una relacin en la que un tipo (el tipo
derivado) se deriva de otro (el tipo base), de tal forma que el
espacio de declaracin del tipo derivado contiene implcitamente
todos los miembros de tipo no constructor del tipo base.
"La herencia es la capacidad de una clase de obtener la interfaz y
comportamiento de una clase existente."
Resumiendo: Gracias a la herencia podemos ampliar cualquier
clase existente, adems de aprovecharnos de todo lo que esa
clase haga.
Encapsulacin

Segn Visual Studio.NET:


"La encapsulacin es la capacidad de contener y controlar el acceso
a un grupo de elementos asociados. Las clases proporcionan una
de las formas ms comunes de encapsular elementos."
Cuando usamos las clases, stas tienen una serie de caractersticas
(los datos que manipula) as como una serie de comportamientos
(las acciones a realizar con esos datos). La encapsulacin es esa
capacidad de la clase de ocultarnos sus interioridades para que slo
veamos lo que tenemos que ver, sin tener que preocuparnos de
cmo est codificada para que haga lo que hace... simplemente nos
debe importar que lo hace.

Resumiendo: Establece la separacin entre la interfaz del objeto


y su implementacin.
Polimorfismo

Segn la documentacin de Visual Studio.NET:


"El polimorfismo se refiere a la posibilidad de definir mltiples clases
con funcionalidad diferente, pero con mtodos o propiedades
denominados de forma idntica, que pueden utilizarse de manera
intercambiable mediante cdigo cliente en tiempo de ejecucin."
Dicho de otra manera, puede tener mltiples clases que se pueden
utilizar de forma intercambiable, si bien cada clase implementa las
mismas propiedades o los mismos mtodos de maneras diferentes.
El polimorfismo es importante en la programacin orientada a
objetos puesto que permite usar elementos que tienen el mismo
nombre, independientemente del tipo de objeto que se est
utilizando en ese momento.
Resumiendo: Determina que el mismo nombre de mtodo
realizar diferentes acciones segn el objeto sobre el que se ha
aplicado.

Qu es una clase?
Los programas de Visual Basic se generan con objetos como
formularios y controles. Los objetos tambin se pueden utilizar para
representar cosas reales como personas, equipos informticos o
incluso algo ms abstracto, como una cuenta bancaria.
Una clase es simplemente una representacin de un tipo de objeto.
Pensad en ella como un plano que describe el objeto. As como un
plano puede utilizarse para construir varios edificios, una clase
podemos usarla para crear varias copias de un objeto.
Aunque puede que no os hayis dado cuenta, ya hemos utilizado
las clases en otros tutoriales de VB que hay por Cristalab, como por
ejemplo,en el tutorial bsico de Visual Basic .NET o alcrear

aplicaciones con .NET y las seguiremos viendo en los


prximos Tips o Tutoriales que vengan.
Por ejemplo, el control TextBox lo define una clase TextBox, que
define su aspecto y sus funciones. Cada vez que arrastramos un
control TextBox a un formulario, realmente est creando una nueva
instancia de la clase TextBox.
Cada control TextBox es una copia exacta, aunque distinta, de la
clase que lo define, la clase TextBox. Puesto que cada objeto es
una "instancia" independiente de una clase, la accin de crear una
clase se denomina creacin de instancias.
Hasta ahora hemos agregado los controles TextBox a su formulario
arrastrndolos desde el Cuadro de herramientas, pero tambin
puede crear instancias de un objeto TextBox en su cdigo si utiliza
la palabra clave New.
Dim Textbox1 As New TextBox

Qu hay dentro de una clase?


Todos los objetos tienen propiedades que describen sus atributos,
mtodos que definen sus acciones y eventos que definen sus
respuestas. Igualmente, la clase que define un objeto tiene sus
propias propiedades, mtodos y eventos ( a veces llamados
miembros) que se pasan a todas las instancias de esa clase.
Por ejemplo, una clase que representa una cuenta bancaria podra
tener propiedades como AccountNumber o AccountBalance,
mtodos como CalculateInterest y eventos como BalanceChanged.
Una vez creada la instancia de un objeto de cuenta bancaria, puede
tener acceso a sus propiedades, mtodos y eventos de igual
manera que si se tratara de un objeto TextBox.
Algunos miembros de una clase son privados; slo se tiene acceso
a ellos mediante cdigo dentro de la clase. Por ejemplo, una clase
de cuenta bancaria puede tener un mtodo para calcular un saldo.

Lo lgico es permitir que un programa lea ese balance pero no que


pueda cambiarlo directamente.
Puede ocultar los miembros de una clase si los declara
como Private o exponerlos si los declara como Public. Tambin
puede permitir el acceso a una propiedad y a la vez impedir que el
programa cambie su valor declarndolo como ReadOnly.
El cdigo siguiente muestra cmo podra ser una clase
BankAccount, por ejemplo:
'Declaramos la clase BlankAccount
Class BankAccount
'La hacemos privada
Private AccountNumber As String
Private AccountBalance As Decimal
'Y la ponemos publica para que calcule el balance
Public Sub UpdateBalance()
End Sub
ReadOnly Property Balance() As Decimal
Get
Return AccountBalance
End Get
End Property
End Class

Crear la primera clase

Una de las mejores razones para utilizar clases es que una vez que
ha creado una clase para cierto tipo de objeto, se puede reutilizar
esa clase en cualquier proyecto.
Por ejemplo, muchos de los programas que escribimos pueden
involucrar personas: Un programa de administrador de contactos
para los contactos comerciales o un programa para realizar un
seguimiento de empleados. Aunque los programas pueden ser
considerablemente diferentes, los atributos que se aplican a cada
persona seran los mismos. Todas tienen nombre, edad, direccin,
nmero de telfono, etc.
Para empezar a ver mejor crear clases,y usarlas crearemos una
clase que represente a una persona;
Podemos guardar esta clase y utilizarla en otros programas que
escribamos en el futuro.
Las clases se pueden crear de tres maneras: como parte del cdigo
en un mdulo de formulario en un proyecto de aplicacin para
Windows, como un mdulo de clase separado agregado a un
proyecto de aplicacin para Windows o como un proyecto de
bibliotecas de clase independiente.
Crear clases

Si habis seguido los tutos de Visual Basic de Cristalab, o sabis de


ello, sabris que al hacer doble clic en un formulario y abrir el Editor
de cdigo se vea algo parecido a lo siguiente:
Public Class Form1
Private Sub Form1_Load...

End Sub
End Class

Pues mirad, el formulario realmente es una clase, marcada por


instrucciones Class y End Class y cualquier cdigo que se haya
escrito entre las dos instrucciones es parte de la clase. Aunque de
manera predeterminada un mdulo de formulario contiene slo una
clase nica, puede crear mdulos adicionales agregando cdigo
debajo de la instruccin End Class, tal como se ilustra a
continuacin:
Public Class Form1
' El cdigo de vuestro Form AQUI
End Class
Public Class MyFirstClass
' El cdigo de vuestra clase AQUI
End Class

La desventaja de crear clases de esta manera es que slo estn


disponibles dentro del proyecto donde se crearon. Si deseamos
compartir una clase con otros proyectos, puede colocarla en un
mdulo de clase.
Mdulos de clase

Un mdulo de clase es un archivo de cdigo, separado del resto,


que contiene una o ms clases. Como es un archivo independiente,
se puede reutilizar en otros proyectos.
Los mdulos de clase se pueden crear de dos maneras:

Como un mdulo agregado a un proyecto de aplicacin para


Windows.
Como un proyecto de bibliotecas de clase independient
Puede agregar un nuevo mdulo de clase a un proyecto existente
seleccionando Clase en el cuadro de dilogo Agregar nuevo
elemento, disponible en el men Proyecto. Para trabajar en durante

el tutorial, crearemos un proyecto de bibliotecas de clases


independientes.
Vamos a ver cmo crear un proyecto de de biblioteca de clases:

En el men Archivo, seleccionamos Nuevo proyecto.


En el panel Plantillas, del cuadro de dilogo Nuevo proyecto,
hacemos clic en Biblioteca de clases.

En el cuadro Nombre, escribimos Persons y hacemos clic en


Aceptar.

Se abrir un nuevo proyecto de bibliotecas de clase y el Editor de


cdigo mostrar el mdulo de clase Class1.vb.

En el Explorador de soluciones, hacemos clic con el botn


secundario del ratn en Class1.vb y seleccionamos Cambiar
nombre y, a continuacin, cambiamos el nombre a "Persons.vb".

Observamos que el nombre en el Editor de cdigo tambin cambia a


Persons.vb.

En el men Archivo, elegimos Guardar todo.


En el cuadro de dilogo Guardar proyecto, hacemos clic en
Guardar.
Nota: En lugar de guardar el proyecto en la ubicacin
predeterminada, podramos crear un directorio en el cual podemos
almacenar todas las clases para reutilizarlas mas tarde. se puede
especificar esa carpeta en el campo Location del cuadro de
dilogo Guardar proyecto antes de guardar.

De momento, mantendremos el proyecto abierto, porque lo


utilizaremos durante todo el tutorial, e iremos ampliando la
informacin.
Agregar propiedades a una clase

Ahora, aprenderemos a agregar propiedades a la clase que


creamos en la seccin anterior.
Todos los objetos tienen atributos y las propiedades representan
atributos. Antes, hicimos la clase "Persons", que representa a una
persona; las personas tienen atributos como el nombre y la edad,
por lo que la clase Persons necesita propiedades que representen
dichos atributos.
Se pueden agregar propiedades a una clase de dos maneras:

Como campo.
Como procedimiento de propiedad.
Tambin podemos determinar cmo funciona una propiedad
utilizando los modificadores Public, ReadOnly o WriteOnly.
Campos y procedimientos de propiedad

Los campos son variables pblicas dentro de una clase que se


pueden establecer o leer desde fuera de la clase. Resultan de
utilidad para propiedades que no se tienen que validar, por ejemplo,
un valor "Boolean" (True o False).
En el caso de la clase Persons, se puede tener una propiedad
Boolean denominada Married, que especifica si una persona est
soltera o casada, puesto que hay slo dos valores posibles.
Para agregar un campo a una clase, el cdigo podra ser como el
que sigue.
Public Married As Boolean

La mayora de las propiedades, sin embargo, son ms complejas;


en la mayor parte de los casos utilizaremos procedimientos de
propiedad para agregar una propiedad a una clase.
Los procedimientos de propiedad tienen tres partes:

Una declaracin de una variable privada para almacenar el valor de


la propiedad.
Un procedimiento Get que expone el valor.
Un procedimiento Set que, como indica su nombre, establece el
valor.
Por ejemplo, un procedimiento de propiedad para una propiedad
Name, de la clase Persons, podra ser como el que sigue:
Private nameValue As String
Public Property Name() As String
Get
Name = nameValue
End Get
Set(ByVal value As String)
nameValue = value
End Set
End Property

La primera lnea de cdigo declara una variable String privada,


nameValue que almacenar el valor de la propiedad. El
procedimiento de propiedad en s comienza con Public Property y
termina con End Property.
El procedimiento Get contiene el cdigo que se ejecutar cuando
desee leer su valor; por ejemplo, si lee la propiedad Persons.Name,
el cdigo devolver el valor almacenado en la variable nameValue.

El procedimiento Set contiene cdigo que se utiliza para asignar un


nuevo valor a la variable nameValue usando un valor pasado como
argumento value. Por ejemplo, si escribimos el cdigo
Persons.Name = "Wyrm", el valor String Wyrm se pasar como
argumento value; el cdigo del procedimiento Set lo asignar a la
variable NameValue para su almacenamiento.
Por qu complicarnos tanto, en lugar de utilizar un campo que
represente la propiedad Name? En el mundo real, hay ciertas reglas
para los nombres: por ejemplo, los nombres normalmente no
contienen nmeros. Puede agregar cdigo al procedimiento Set
para comprobar el argumento value y devolver un error si contiene
nmeros.
Siguiendo con la Clase Persons, ahora agregaremos un campo y
tres propiedades:
1. Abrimos el proyecto Persons que hicimos en la seccin anterior. Si
no lo guardaste, primero debers regresar a la seccin anterior,
crear la primera clase, y realizar hasta el final los procedimientos de
esa seccin.
2. En el Explorador de soluciones, seleccionamos Persons.vb y en el
men Ver elegimos Cdigo.

3. Agregamos el siguiente cdigo de declaracin debajo de la lnea


Public Class Persons.
4. Private firstNameValue As String
5. Private middleNameValue As String
6. Private lastNameValue As String

Public Married As Boolean

7. Agregamos los siguientes procedimientos de propiedad debajo del


cdigo de declaracin anterior.
8. Public Property FirstName() As String
9.
10.

Get
FirstName = firstNameValue

11.

End Get

12.

Set(ByVal value As String)

13.

firstNameValue = value

14.

End Set

15. End Property


16.

17. Public Property MiddleName() As String


18.
19.

Get
MiddleName = middleNameValue

20.

End Get

21.

Set(ByVal value As String)

22.

middleNameValue = value

23.

End Set

24. End Property


25.
26. Public Property LastName() As String
27.
28.

Get
LastName = lastNameValue

29.

End Get

30.

Set(ByVal value As String)

31.

lastNameValue = value

32.

End Set

End Property

Quedar as:

33.
En el men Archivo, elegimos Guardar todo para guardar el
trabajo.

Propiedades de slo lectura y escritura

A veces una propiedad se establece una vez y no cambia nunca


mas durante la ejecucin del programa.
Por ejemplo, una propiedad que representa un nmero de empleado
nunca debe cambiar, de modo que otro programa si lo pueda leer,
pero no se permitir que ese programa cambie su valor.
La palabra clave ReadOnly se utiliza para especificar que un valor
de propiedad se pueda leer pero no modificar.
Nota: Si intentamos asignar un valor a una propiedad ReadOnly,
aparecer un error en el Editor de cdigo.
Para crear una propiedad de slo lectura, deberemos crear un
procedimiento de propiedad con un procedimiento Get, pero sin
procedimiento Set, como se muestra a continuacin.
Private IDValue As Integer
ReadOnly Property ID() As Integer
Get
ID = IDValue
End Get
End Property

De igual forma, la palabra clave WriteOnly permite establecer un


valor de propiedad pero no permite que se lea; por ejemplo, no
permite que otros programas lean una propiedad de contrasea.
Podemos utilizar ese valor para realizar acciones dentro de la clase,
pero desear que sigan siendo privadas.
Para crear una propiedad de slo escritura, se crear una propiedad
con un procedimiento Set pero sin procedimiento Get, como a
continuacin:
Private passwordValue As String

WriteOnly Property Password() As String


Set(ByVal value As String)
passwordValue = value
End Set
End Property

Los procedimientos de propiedad ReadOnly y WriteOnly tambin


son tiles cuando deseamos tomar un valor de propiedad y
convertirlo en un valor diferente. Por ejemplo, pensemos en la edad
de una persona. A diferencia del nombre, la edad cambia con el
tiempo, si ha asignado la edad a una clase y la lee de nuevo un ao
despus, sera incorrecta.
En la clase Persons, podemos evitarlo agregando dos propiedades:
una propiedad "WriteOnly BirthYear" que representa el ao de
nacimiento, que nunca cambia, y una propiedad "ReadOnly Age"
que devuelve un valor calculando la diferencia entre el ao en curso
y el ao de nacimiento.
Siguiendo con la Clase Persons, ahora agregaremos propiedades
ReadOnly y WriteOnly a la clase:
1. Agregamos el siguiente cdigo de declaracin debajo de las otras
declaraciones en la parte superior del mdulo de clase.

Private birthYearValue As Integer

2. Introducimos los siguientes procedimientos de propiedad debajo del


cdigo de declaracin.
3. WriteOnly Property BirthYear() As Integer
4.

Set(ByVal value As Integer)

5.

birthYearValue = value

6.

End Set

7. End Property
8.
9. ReadOnly Property Age() As String
10.
11.
12.

Get
Age = My.Computer.Clock.LocalTime.Year - birthYearValue
End Get

End Property

13.
En el men Archivo, elegimos Guardar todo para guardar el
trabajo.

Agregar mtodos a una clase

Agregaremos mtodos a una clase, para que puedan realizar


acciones. Vimos que la mayora de los objetos tienen acciones que
pueden realizar; estas acciones se conocen como mtodos.
La clase Persons que creamos en la seccin anterior,tiene muchas
acciones que pueden realizar las personas y, estas acciones se
pueden expresar como mtodos de clase.
Mtodos de una clase

Los mtodos de una clase son simplemente procedimientos Sub o


Function, declarados en la clase.
Por ejemplo, una clase Account puede tener un procedimiento Sub
denominado Recaculate, que actualizar el balance o un
procedimiento Function denominado CurrentBalance para devolver
el ltimo balance.
El cdigo para declarar esos mtodos puede ser similar al siguiente:
Public Sub Recalculate()
'Aqui el codigo para recalcular Account.
End Sub
Public Function CurrentBalance(ByVal AccountNumber As Integer) As Double
'Codigo para volver a Balance
End Function

Si bien la mayora de los mtodos de clase son pblicos, tambin se


pueden agregar mtodos que slo la clase en s puede utilizar. Por
ejemplo, la clase Persons puede tener su propia funcin para
calcular la edad de una persona. Si declara la funcin como Private,
no se puede ver o llamar desde fuera de la clase.
El cdigo para una funcin privada puede ser similar a ste otro:

Private Function CalcAge(ByVal year As Integer) As Integer


CalcAge = My.Computer.Clock.LocalTime.Year - year
End Function

Ms tarde podremos cambiar el cdigo que calcula el valor


CalcAge y el mtodo seguir funcionando bien sin cambiar ningn
cdigo que utilice el mtodo. Ocultar el cdigo que realiza el
mtodo, se conoce como la "encapsulacin", ya explicada al
comienzo.
Ahora, para agregar un mtodo a la clase Persons, hacemos lo
siguiente:

Abrimos el proyecto Persons(si no lo tenemos abierto ya de antes)


que hicimos en las secciones anteriores. Si no lo guardaste, o no lo
creaste, primero debers volver a las seccines anteriores, agregar
propiedades a la clase, y completar los procedimientos.
En el Explorador de soluciones, seleccionamos Persons.vb y, en el
men Ver, hacemos clic en Cdigo.
Agregamos el siguiente cdigo bajo los procedimientos de
propiedad.
Public Function FullName() As String
If middleNameValue <> "" Then
FullName = firstNameValue & " " & middleNameValue & " " _

& lastNameValue
Else
FullName = firstNameValue & " " & lastNameValue
End If

End Function

Private Function CalcAge(ByVal year As Integer) As Integer


CalcAge = My.Computer.Clock.LocalTime.Year - year
End Function

Modificamos el cdigo en el procedimiento de la propiedad Age para


utilizar la funcin privada:

ReadOnly Property Age() As String

Get

' Age = My.Computer.Clock.LocalTime.Year - birthDateValue

Age = CalcAge(birthYearValue)

End Get

End Property

Antes, el cdigo era as:

ReadOnly Property Age() As String


Get
Age = My.Computer.Clock.LocalTime.Year - birthYearValue
End Get
End Property

En el men Archivo, hacemos clic en Guardar todo para guardar el


trabajo.
Agregar eventos a una clase

Un programa puede responder a eventos externos, como por


ejemplo, un usuario que hace clic en un botn. En esta seccin,
obtendremos informacin sobre cmo agregar eventos a una clase.

Primero, debemos declarar el evento.


A continuacin, debemos provocarlo.
Provocar un evento significa que estamos sealizando la aparicin
del evento. Para agregar un evento a una clase, lo declaramos con

la instruccin Event. sto indica que el objeto puede provocar el


evento que especificamos.
Por ejemplo, quizs deseemos agregar un evento AgeCalculated a
la clase Persons que hicimos. Podemos provocar a continuacin el
evento en el mtodo CalcAge. Despus de hacer esto, cuando se
llama al mtodo, podemos ejecutar algn cdigo adicional en cuanto
se haya calculado la edad de la persona.
Para agregar un evento a la clase Persons

Abrimos el proyecto Persons.


En el Explorador de soluciones, seleccione Persons.vb y, en el
men Ver, hacemos clic en Cdigo.
Agregamos el siguiente cdigo encima de los procedimientos de
propiedad.

Public Event AgeCalculated(ByVal Age As Single)

En el mtodo CalcAge, reemplazamos el cdigo existente por el


siguiente cdigo para provocar el evento.

Private Function CalcAge(ByVal year As Integer) As Integer

Dim Age = My.Computer.Clock.LocalTime.Year - year

RaiseEvent AgeCalculated(Age)

CalcAge = My.Computer.Clock.LocalTime.Year - year

End Function

En el men Archivo, hacemos clic en Guardar todo para guardar el


trabajo.
Probar una clase

Creamos una clase llamada "Persons" y le proporcionamos


propiedades, mtodos y eventos. Lo que hemos hecho hasta ahora
es agregar cdigo, ahora es el momento de utilizar la clase Persons
y asegurarse de que funciona segn lo esperado.
Crear una instancia de una clase

Los formularios y controles son en realidad clases; cuando


arrastramos un control Button a un formulario, estamos creando
realmente una instancia de la clase Button.
Tambin podemos crear instancias de cualquier clase en el cdigo
utilizando una declaracin con la palabra clave New. Por ejemplo,
para crear una nueva instancia de la clase Button, agregaremos el
cdigo siguiente.

Dim aButton As New Button

Para utilizar y probar la clase Persons, debemos crear primero un


proyecto de prueba y agregar una referencia al mdulo de clase.
Para crear un proyecto de prueba para la clase Persons

Abrimos el proyecto Persons que creamos en las secciones


anteriores.
En el men Archivo, elegimos Agregar y, a continuacin, hacemos
clic en Nuevo proyecto.

En el panel Plantillas, en el cuadro de dilogo Nuevo proyecto,


hacemos clic en Aplicacin de Windows Forms.
En el cuadro Nombre, escribimos PersonsTest y hacemos clic en
Aceptar.

Se agregar un nuevo proyecto de Windows Forms al Explorador de


soluciones y aparecer un nuevo formulario.

En el Explorador de soluciones, seleccionamos el proyecto


PersonsTest y, en el men Proyecto, hacemos clic en Establecer
como proyecto de inicio.

En el Explorador de soluciones, seleccionamos el proyecto


PersonsTest y, en el men Proyecto, hacemos clic en Agregar
referencia.
Aparecer el cuadro de dilogo Agregar referencia.

Hacemos clic en la ficha Proyectos, seleccionamos Personas y


hacemos clic en Aceptar.

Hacemos doble clic en el formulario para abrir el editor de cdigo y


escribimos la siguiente declaracin justo debajo de la lnea Public
Class Form1.

Dim person1 As New Persons.Persons

Esto declara una nueva instancia de la clase Persons.


Quizs os preguntis por qu tuvimos que escribir dos veces Persons, pues
porque la primera instancia es el mdulo de clase Persons.vb y la segunda
instancia es la clase Persons de ese mdulo.

En el men Archivo, hacemos clic en Guardar todo.

El siguiente paso es agregar una interfaz de usuario y un cdigo que


utilice la clase Persons.
Agregaremos cuadros de texto donde el usuario especificar los
valores para cada una de las propiedades (excepto la propiedad de
slo lectura "Age"), una casilla para el campo "Married" y botones
para probar cada uno de los mtodos pblicos.
Para probar la clase Persons:

En el Explorador de soluciones, seleccionamos Form1 y, en el men


Ver, hacemos clic en Diseador.
En el Cuadro de herramientas, arrastramos cuatro controles
TextBox, un control CheckBox y dos controles Button al formulario.
Seleccionamos el primer control Button y, a continuacin, en la
ventana Propiedades establecemos la propiedad Text en Update.
Seleccionamos el segundo control Button y en la ventana
Propiedades establecemos la propiedad Text en Full Name.
Hacemos doble clic en el primer botn (Update) para abrir el Editor
de cdigo y en el controlador de eventos Button1_Click, agregamos
el siguiente cdigo:
With person1

.FirstName = Textbox1.Text

.MiddleName = Textbox2.Text

.LastName = Textbox3.Text

.BirthYear = Textbox4.Text

.Married = CheckBox1.Checked

End With

En el controlador de eventos Button2_Click, agregamos lo siguiente:

MsgBox(person1.FullName)

MsgBox(CStr(person1.Age) & " years old")

If person1.Married = True Then


MsgBox(person1.FirstName & " is married")
Else
MsgBox(person1.FirstName & " is single")

End If

Presionamos F5 para ejecutar el proyecto y mostrar el formulario:

-En el primer cuadro de texto, escribimos nuestro nombre.


-En el segundo cuadro de texto, escribimos nuestro segundo
nombre.
-En el tercer cuadro de texto, escribimos nuestro apellido.
-En el cuarto cuadro de texto, escribimos el ao de nuestro
nacimiento con cuatro dgitos (por ejemplo, 1983).
-Activamos la casilla de si estamos casados/as.

Hacemos clic en el botn "Update" para establecer las propiedades


de la clase y clic en el botn "Full Name".
Se muestran tres cuadros de mensaje. Estos cuadros de mensaje
muestran su nombre completo, edad y estado civil.

En el men Archivo, hacemos clic en Guardar todo.


Mtodos sobrecargados

Para crear un mtodo sobrecargado, agregamos dos o ms


procedimientos Sub o Function a la clase, cada uno con el mismo
nombre.
En las declaraciones de procedimiento, el conjunto de argumentos
para cada procedimiento debe ser distinto o se producir un error.
El siguiente ejemplo muestra un mtodo con dos sobrecargas, una
que acepta una String y la otra que acepta un Integer como
argumentos.
Public Sub TestFunction(ByVal input As String)
MsgBox(input)
End Sub

Public Sub TestFunction(ByVal input As Integer)


MsgBox(CStr(input))
End Sub

Si se debe llamar a este mtodo desde el cdigo y pesarle una


cadena, se ejecutara la primera sobrecarga y un cuadro de
mensaje mostrara la cadena; si se le pas un nmero, se ejecutara
la segunda sobrecarga y el nmero se convertira en una cadena y
aparecera en el cuadro de mensaje.
Podemos crear tantas sobrecargas como sean necesarias y cada
una de ellas puede contener un nmero diferente de argumentos.
En la clase Persons, agregaremos un mtodo con dos sobrecargas
para devolver la inicial del segundo nombre de una persona; una
slo con la inicial y la otra con la inicial seguida por un punto.
Probar los mtodos sobrecargados en la clase Persons

Abrimos el proyecto Persons que creamos en la secciones


anteriores.
En el Explorador de soluciones, seleccionamos Persons.vb y, en el
men Ver, elegimos Cdigo.
Agregamos el siguiente cdigo debajo de los mtodos existentes.

Public Function MiddleInitial() As String

MiddleInitial = Left$(middleNameValue, 1)
End Function

Public Function MiddleInitial(ByVal period As Boolean) As String


MiddleInitial = Left$(middleNameValue, 1) & "."

End Function

En el Explorador de soluciones, seleccionamos Form1 y, en el men


Ver, hacemos clic en Diseador.
En el Cuadro de herramientas, arrastramos dos controles ms de
Button al formulario.
Seleccionamos el tercer control Button y en la ventana Propiedades
establecemos su propiedad Text en With.
Seleccionamos el cuarto control Button y en la ventana Propiedades
establecemos su propiedad Text en Without.
Hacemos doble clic en el primer botn (With) para abrir el Editor de
cdigo y escribimos el siguiente cdigo en el controlador de eventos
Button3_Click.
MsgBox(person1.FirstName & " " & person1.MiddleInitial(True) & _

" " & person1.LastName)

En el controlador de eventos Button4_Click, agregamos el siguiente


cdigo.

MsgBox(person1.FirstName & " " & person1.MiddleInitial & _

" " & person1.LastName)

Presionamos F5 para ejecutar el proyecto y mostrar el formulario.

-En el primer cuadro de texto, escribimos nuestro nombre.


-En el segundo cuadro de texto, escribimos nuestro segundo
apellido.
-En el tercer cuadro de texto, escribimos nuestro tercer apellido.
-En el cuarto cuadro de texto, escribimos el ao de nuestro
nacimiento con cuatro dgitos (por ejemplo, 1983).
-Activamos la casilla si est casado/a.

Hacemos clic en el botn Actualizar para establecer las propiedades


de la clase y hacemos clic en el botn With.
Se abrir un cuadro de mensaje. Muestra nuestro nombre con un
punto tras la inicial del primer apellido.

Hacemos clic en el botn Without.


Se abrir un cuadro de mensaje. Muestra nuestro nombre sin el
punto tras la inicial del primer apellido.

En el men Archivo, hacemos clic en Guardar todo.


Probar controladores de eventos

Si deseamos escribir cdigo que responda a un evento (o que


controle un evento), debemos asociar ese evento a un controlador
de eventos. Podemos hacerlo mediante la instruccin Handles o
Add Handler.
La instruccin Add Handler permite asociar los eventos a los
controladores en tiempo de ejecucin, mientras que la instruccin
Handles slo asocia los eventos a los controladores en tiempo de
compilacin. La instruccin Handles se puede agregar al final de
cualquier subrutina que tenga la misma firma que el evento.
Por ejemplo, antes, agregamos un evento denominado
"AgeCalculated" que toma un parmetro de tipo "Integer". La
subrutina que crea para controlar el evento tambin debe tomar un
parmetro Integer, como se observa en el cdigo siguiente.
Private Sub person1_AgeCalculated(ByVal Age As Integer) _
Handles person1.AgeCalculated

El objeto person1 se debe crear con la instruccin WithEvents para


que se pueda tener acceso al evento AgeCalculated. Al usar la
instruccin Add Handler, puede asociar dinmicamente los eventos
a controladores en tiempo de ejecucin.
Probamos el controlador de eventos en la clase Person

En el Explorador de soluciones, seleccionamos Form1 y, en el men


Ver, hacemos clic en Cdigo.
Agregamos la instruccin WithEvents antes de la declaracin
person1, como se muestra en el cdigo siguiente:

WithEvents person1 As New Persons.Persons

Agregamos el procedimiento siguiente a Form1. Este cdigo


comprueba la edad calculada y muestra un mensaje basado en el
resultado.

Private Sub person1_AgeCalculated(ByVal Age As Integer) _

Handles person1.AgeCalculated

If Age > 18 Then


MsgBox("You have been over 18 for " & Age - 18 _
& " years.")
Else
MsgBox("You will be 18 in " & 18 - Age & " years")
End If

End Sub

Presionamos F5 para ejecutar el proyecto y mostrar el formulario.


-En el primer cuadro de texto, escribimos nuestro nombre.
-En el segundo cuadro de texto, escribimos nuestro segundo
apellido.
-En el tercer cuadro de texto, escribimos nuestro tercer apellido.
-En el cuarto cuadro de texto, escribimos el ao de nuestro
nacimiento con cuatro dgitos (por ejemplo, 1983).
-Activamos la casilla si est casado/a.
Hacemos clic en el botn Actualizar para establecer las propiedades
de la clase y haga clic en el botn Full Name.
Un cuadro de mensaje muestra su nombre completo. Si tiene ms
de 18 aos, otro cuadro de mensaje muestra informacin sobre
cunto tiempo hace que cumpli los 18 aos. Si tiene menos de 18
aos, aparece un cuadro de mensaje que muestra informacin
sobre cunto tiempo queda hasta que cumpla los 18 aos. A
continuacin, otro cuadro de mensaje muestra su edad.

En el men Archivo, hacemos clic en Guardar todo.

Generar una clase a partir de una clase existente:


Herencia de clases
Ahora veremos cmo utilizar la herencia de clases para crear una
clase basada en una clase existente.
Muchos objetos de la vida real tienen atributos y comportamientos
en comn, por ejemplo, todos los coches tienen ruedas y motores, y
pueden avanzar y detenerse. Sin embargo, algunos automviles
tienen atributos que no son comunes, por ejemplo, un descapotable
tiene una parte superior que se puede subir/bajar electrnica o
manualmente.
Si se cre un objeto para representar un automvil, se pueden
incluir propiedades y mtodos para todos los atributos y
comportamientos comunes, pero no se podran agregar atributos
como la cubierta de un descapotable, puesto que dicho atributo no
es generalizable a todos los automviles.
Mediante el uso de la herencia, se puede crear una clase
"descapotable" que deriva de la clase "automvil". sta hereda
todos los atributos de la clase automvil y puede agregar los
atributos y comportamientos que son nicos de un auto
descapotable.

Heredar a partir de una clase existente

La instruccin Inherits se utiliza para declarar una nueva clase,


denominada clase derivada, basada en una clase existente
conocida como clase base. Las clases derivadas heredan todas las
propiedades, los mtodos, los eventos, los campos y las
constantes definidos en la clase base.
El siguiente cdigo muestra la declaracin de una clase derivada.
Class DerivedClass
Inherits BaseClass
End Class

Se pueden crear instancias de la nueva clase DerivedClass, se


puede tener acceso a sus propiedades y mtodos como BaseClass
y se pueden agregar nuevas propiedades y mtodos que son
especficos de la nueva clase. Para ver un ejemplo, nos fijaremos en
la clase Persons que tenemos creada.
Supongamos que deseamos tener una clase que represente
jugadores de bisbol: los jugadores del bisbol tienen todos los
atributos definidos en la clase Persons, pero tambin tienen
atributos nicos, como su nmero y posicin. En lugar de agregar
esas propiedades a la clase Persons, se crear una nueva clase
derivada que se hereda de Persons, a la que se agregaran las
nuevas propiedades.
Para crear una clase derivada de la clase Persons:

Abrimos el proyecto Persons que llevamos todo el tutorial usando.


En el Explorador de soluciones, seleccionamos el nodo del proyecto
Persons.
En el men Proyecto, elegimos Agregar clase.

En el cuadro de dilogo Agregar nuevo elemento, escribimos


Players en el cuadro Nombre, a continuacin, hacemos clic en
Agregar.

Se agregar un nuevo mdulo de clase al proyecto.

En el Editor de cdigo, agregamos lo siguiente justo debajo de la


lnea Public Class Players.

Inherits Persons

Agregamos tambin el siguiente cdigo para definir las dos nuevas


propiedades.

Private numberValue As Integer

Private positionValue As String

Public Property Number() As Integer

Get
Number = numberValue

End Get

Set(ByVal value As Integer)

numberValue = value

End Set

End Property

Public Property Position() As String

Get
Position = positionValue

End Get

Set(ByVal value As String)

positionValue = value

End Set

End Property

En el men Archivo, hacemos clic en Guardar todo.


Probar la clase Players

Hemos creado una clase Players, derivada de la clase


Persons.Ahora haremos una nueva aplicacin para probar la clase
Players.
Para crear un proyecto de prueba para la clase:
1. En el men Archivo, elegimos Agregar y, a continuacin, hacemos
clic en Nuevo proyecto.
2. En el cuadro de dilogo Agregar nuevo proyecto, en el panel
Plantillas, seleccionamos una Aplicacin de Windows Forms.
3. En el cuadro Nombre, escribimos PlayerTest y hacemos clic en
Aceptar.

4. Se agregar un nuevo proyecto de Windows Forms al Explorador de


soluciones y aparecer un nuevo formulario.

5. En el Explorador de soluciones, seleccionamos el proyecto


PlayerTest y, en el men Proyecto, hacemos clic en Establecer
como proyecto de inicio.
6. En el Explorador de soluciones, seleccionamos el proyecto
PlayerTest y, en el men Proyecto, haga clic en Agregar referencia.

7. Se abrir el cuadro de dilogo Agregar referencia.


8. Hacemos clic en la ficha Proyectos, elegimos Persons y hacemos
clic en Aceptar.

9. Hacemos doble clic en el formulario para abrir el Editor de cdigo y


escribimos la siguiente declaracin justo debajo de la lnea Public
Class Form1.
10. Dim player1 As New Persons.Players

Dim player2 As New Persons.Players

Esto declara dos nuevas instancias de la clase Players.

11.

En el men Archivo, hacemos clic en Guardar todo.

Para probar la clase derivada:

1. En el Explorador de soluciones, seleccionamos Form1 en el


proyecto PlayerTest y, a continuacin, en el men Ver, hacemos clic
en Cdigo.

2. En el Editor de cdigo, agregamos el siguiente cdigo al


procedimiento de evento Form1_Load.
3. With player1
4.

.FirstName = "Wyrm"

5.

.LastName = "Garcia"

6.

.Number = 13

7.

.Position = "Shortstop"

8. End With
9. With player2
10.

.FirstName = "Joe"

11.

.LastName = "Black"

12.

.Number = 51

13.

.Position = "Catcher"

End With

14.
En el Explorador de soluciones, seleccionamos Form1 en el
proyecto PlayerTest y, a continuacin, en el men Ver, hacemos clic
en Diseador.

15.
En el Cuadro de herramientas, arrastramos dos controles
Button al formulario.
16.
Seleccionamos el primer control Button y en la ventana
Propiedades establecemos su propiedad Text en At Bat.
17.
Seleccionamos el segundo control Button y en la ventana
Propiedades establecemos su propiedad Text en On Deck.
18.
Hacemos doble clic en el primer botn (At Bat) para abrir el
Editor de cdigo y escribimos el siguiente cdigo en el controlador
de eventos Button1_Click.
19. MsgBox(player1.Position & " " & player1.FullName & ", #" & _

CStr(player1.Number) & " is now at bat.")

Observamos que estamos utilizando el mtodo FullName que se hered de


la clase base Persons.

20.
En el controlador de eventos Button2_Click, agregamos el
siguiente cdigo.
21. MsgBox(player2.Position & " " & player2.FullName & ", #" & _

CStr(player2.Number) & " is on deck.")

22.
Presionamos F5 para ejecutar el programa. Hacemos clic en
cada botn para ver los resultados.
Clic al Boton1(At Bat):

Clic al Boton2(on Deck):

23.

En el men Archivo, elegimos Guardar todo.

Y aqui, finalizando probar una clase derivada, acabamos con el


tutorial sobre la POO y sus clases en Visual Basic.NET.
Hemos visto, qu son y cmo crear clases, agregarle propiedades,
mtodos y eventos, las hemos heredado, etc. Espero que no se os
haya hecho demasiado largo, ni muy tostonazo, pero la mejor forma
de aprender y de que las cosas se entiendan, es hacindolo uno
mismo...
Espero que las explicaciones hayan estado claras, y que a quien le
haya gustado este tema, no dude en profundizarlo un poco mas, yo
solo he levantado la primera capa de todo lo que hay debajo.
Suerte!!
PD: El archivo del tutorial contiene todo lo que hemos ido haciendo
desde el principio del tutorial, para ver los tres ejemplos, debereis
hacer Clic en "Establecer como proyecto de inicio", como ya hicimos
durante el tuto.

Вам также может понравиться