Anda di halaman 1dari 40

Programacin Orientada a Objetos(POO) de Visual Basic.

NET, con la
utilizacin y creacin de clases, de una forma ms o menos, sencilla. Recuerda descargar
Visual Basic .NET y ver el tutorial bsico de Visual Basic .NET antes de empezar.
Primero har una explicacin 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 limitacin.
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. Public Property FirstName() As String
9. Get
10. 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. Get
19. 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. Get
28. 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. Get
11. Age = My.Computer.Clock.LocalTime.Year - birthYearValue
12. 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 = "J oe"
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.

Anda mungkin juga menyukai