Vous êtes sur la page 1sur 47

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 al crear
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.
9.
10.

Public Property FirstName() As String


Get
FirstName = firstNameValue

11.

End Get

12.

Set(ByVal value As String)

13.

firstNameValue = value

14.

End Set

15.

End Property

16.
17.
18.
19.

Public Property MiddleName() As String


Get
MiddleName = middleNameValue

20.

End Get

21.

Set(ByVal value As String)

22.

middleNameValue = value

23.

End Set

24.

End Property

25.
26.
27.
28.

Public Property LastName() As String


Get
LastName = lastNameValue

29.

End Get

30.

Set(ByVal value As String)

31.
32.

lastNameValue = value
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.
parte

Agregamos el siguiente cdigo de declaracin debajo de las otras declaraciones en la


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

Public Function FullName() As String

el

siguiente

cdigo

bajo

los

procedimientos

de

propiedad.

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

MsgBox(person1.FullName)

el

controlador

de

eventos

Button2_Click,

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

agregamos

lo

siguiente:

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

Public Function MiddleInitial() As String

el

siguiente

cdigo

debajo

de

los

mtodos

existentes.

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

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

el

controlador

de

eventos

Button4_Click,

agregamos

" " & person1.LastName)

Presionamos F5 para ejecutar el proyecto y mostrar el formulario.

el

siguiente

cdigo.

-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


el
cdigo
siguiente:

en

WithEvents person1 As New Persons.Persons

Agregamos el procedimiento siguiente a Form1. Este cdigo comprueba la edad calculada


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.

en

Hacemos clic en el botn Actualizar para establecer las propiedades de la clase y haga clic
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.
2.
3.

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


En el cuadro de dilogo Agregar nuevo proyecto, en el panel Plantillas, seleccionamos una
Aplicacin de Windows Forms.
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
siguiente
cdigo
en
el
controlador
de
eventos
Button1_Click.

el

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

21.

MsgBox(player2.Position & " " & player2.FullName & ", #" & _

cdigo.

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.

TUTORIAL VISUAL BASIC

En este sencillo tutorial, vamos a hacer que se muestre un cuadro de dilogo mostrndonos el
nombre que previamente hemos escrito en el cuadro de texto.
Lo primero que vamos a hacer es cargar el entorno de desarrollo del Visual Studio .NET, as que
vamos a Inicio - Programas - Microsoft Visual Basic 2008... y lo ejecutamos. En la pantalla de
inicio volvemos a seleccionar "Aplicacin de Windows Forms", como se ve en la imagen.

En el proyecto, se habr cargado un formulario que se te mostrar de forma automtica. Si no se


te mostrase nada y siguiera estando la pantalla de inicio,deja al pc pensar, ya que seguramente lo
estar cargando ya que es un entorno que consume muchos recursos y puede ser lento en la
carga de determinadas partes.
En caso de que despus de un rato no lo mostrase, fjate en el lado derecho de la pantalla, vers
que hay un "panel" o ventana en la que se indica el proyecto actual y se muestran los ficheros
que lo componen. Ese panel es el Explorador de Soluciones.

Para que veais todo cargado, la pantalla con todo el IDE activo ser esta:

Donde distinguimos en la parte izquierda el cuadro de herramientas, en el centro el formulario


principal y en la parte derecha las ventanas de propiedades y el explorador de soluciones.
Los controles son los elementos que insertamos dentro de un formulario y que nos va a permitir
interactuar entre el usuario y el cdigo: botones, cuadros de texto, etiquetas, cuadros
desplegables, cuadrculas de datos. En definitiva todos y cada uno de los elementos que vemos
en los formularios de todas las aplicaciones. La lista de controles bsicos disponibles la tenemos
a la izquierda, en el panel de herramientas.

Empezando con la aplicacin


Para aadir controles al formulario utilizaremos la barra de herramientas. Por ejemplo, para aadir
una etiqueta (Label) y una caja de texto (TextBox), simplemente haremos doble-clic sobre esos
elementos de la barra de herramientas y se aadirn al formulario o podemos tambien agarrarlos
y arrastrarlos hasta nuestro formulario.

Para nuestro ejemplo, aadiremos un botn (Button) y lo situaremos debajo del cuadro de texto
(Textbox). Luego aadimos una etiqueta (Label) para que quede de esta forma:

Como vemos, por defecto, el IDE pone unos nombres genricos a los controles, como label1,
textbox1, button1, es decir utiliza el tipo de control y lo va numerando tantas veces como
controles iguales tengamos en el formulario(label1, label2, label3,...). Es por ponerle un nombre
inicial, ya que siempre los controles deben tener un nombre nico.
Ahora vamos a cambiar el texto que contiene el botn "Button1". Para cambiarle este texto hay
que utilizar la ventana de propiedades (A la derecha-abajo), en esta ocasin el elemento que nos
interesa de esa ventana de propiedades es Text, escribimos en esta propiedad la palabra
"Mostrar" y cuando pulses Intro o el tabulador veremos que el texto del botn se ha actualizado.

Hacemos lo mismo con la etiqueta "Label", recuerdamos que hay que seleccionarla primero
haciendo clic para que se muestren las propiedades de la etiqueta. Escribimos "Nombre:" en Text
y pulsamos intro o el tabulador.

Fjate que en la parte superior de la ventana pone el control que estamos editando y de que tipo
es.

Escribir el cdigo
Ahora vamos a escribir el cdigo que se ejecutar cada vez que se haga clic en el botn que
hemos aadido. Para ello, selecciona el botn "Mostrar" y hacemos doble clic en l, se mostrar
una nueva ventana, en este caso la ventana de cdigo del botn, asociada con el formulario que
tenemos en nuestro proyecto. Nos mostrar:

Aqu empieza la programacin.


Que nosotros pulsemos doble clic en el botn y que aparezca un fragmento de cdigo significa lo
siguiente: VB .NET interpreta que quieres poner cdigo para realizar alguna accin cuando se
haga clic sobre el botn, por lo tanto te muestra ya el "procedimiento" o parte de cdigo que se va
a ejecutar cuando suceda esto. A esta forma de trabajar se le llama programacin orientada a
eventos. Es decir, cuando se produzcan el evento de pulsar el botn (click) ejecutas este cdigo.
Por lo tanto vemos que los controles adems de tener propiedades (que modifican su aspecto)
tambin atienden a una serie de eventos (clic, doble clic). Los eventos a los que atienden los
controles los podemos ver en la ventana de propiedades, seleccionando:

Hay otra forma de acceder a los eventos de los controles y es esta. Vete a la vista del cdigo del
formulario pulsando en el botn de codigo, que muestro en la imagen siguiente:

Llegaremos otra vez a la ventana del cdigo de antes, haz clic en el desplegable de arriba a la
izquierda y vers la siguiente imagen

Que son los objetos que hemos aadido en nuestro formulario. Selecciona "Button1" y fjate ahora
en el desplegable de la derecha y selecciona Click.

Volvemos a la pantalla del cdigo para el evento clic del botn

Esta pantalla nos est indicando en la parte superior, que estamos trabajando con "Form1.vb".
Debajo nos indica (a la izquierda) que estamos con el control llamado "Button1" y a la derecha
que estamos trabajando con el evento click.
Escribimos el siguiente cdigo en el hueco dejado por Visual Basic entre las lneas que hay entre
Private Sub... y End Sub

Pulsamos F5 para que se ejecute el cdigo que hemos escrito o pulsa en el botn "play" que est
en la barra de botones.
Cuando se presente el formulario escribe algo en el cuadro de texto, pulsa en el botn Mostrar y
veremos que se muestra un cuadro de dilogo dicindote Hola y a continuacin lo que hayas
escrito en el cuadro de texto (TextBox):

Ya tenemos nuestra aplicacin "Windows forms" funcionando, creada con Visual Basic .NET. Pero
no queda la cosa ahi, y por ltimo vamos a aadirle un boton, para cerrarlo. Ahora cambiaremos
las dos propiedades: Name para ponerle cmdCerrar, y Text para ponerle Cerrar.

Obviamente al ponerle esta vez un nombre al control, en lugar de llamarse Button2 se llamar
como le hemos indicado cmdCerrar y as lo veremos en el cdigo. Pulsamos doble clic en l para
escribir el cdigo que queremos que ejecute:

Y escribimos la instruccin en el hueco, como antes.


Me.close()
Y con este boton logramos que se cierre el formulario, y volvamos al entorno de desarrollo de
VB.NET. Rpido, algo sencillo, y para toda la familia.

Vous aimerez peut-être aussi