Documente Academic
Documente Profesional
Documente Cultură
NET
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.
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."
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.
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.
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.
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
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:
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:
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:
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.
En el Explorador de soluciones, seleccionamos Persons.vb y en el men Ver
elegimos Cdigo.
1.
2.
3.
4.
5.
6.
7.
End Get
8.
9.
firstNameValue = value
10.
End Set
11.
End Property
12.
13.
14.
15.
16.
End Get
17.
18.
middleNameValue = value
19.
End Set
20.
End Property
21.
22.
23.
24.
25.
End Get
26.
27.
lastNameValue = value
28.
End Set
End Property
Quedar as:
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:
Agregamos el siguiente cdigo de declaracin debajo de las otras
declaraciones en la parte superior del mdulo de clase.
1.
2.
3.
birthYearValue = value
4.
End Set
5.
End Property
6.
7.
8.
9.
Get
Age = My.Computer.Clock.LocalTime.Year birthYearValue
10.
End Get
End Property
& lastNameValue
Else
FullName = firstNameValue & " " &
lastNameValue
End If
End Function
Age = CalcAge(birthYearValue)
End Get
End Property
Antes, el cdigo era as:
RaiseEvent AgeCalculated(Age)
End Function
With person1
.FirstName = Textbox1.Text
.MiddleName = Textbox2.Text
.LastName = Textbox3.Text
.BirthYear = Textbox4.Text
.Married = CheckBox1.Checked
End With
MsgBox(person1.FullName)
End If
Mtodos sobrecargados
Para crear un mtodo sobrecargado, agregamos dos o ms procedimientos Sub
o Function a la clase, cada uno con el mismo nombre.
El siguiente ejemplo muestra un mtodo con dos sobrecargas, una que acepta
una String y la otra que acepta un Integer como argumentos.
End Function
Handles person1.AgeCalculated
End If
End Sub
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.
Inherits Persons
Agregamos tambin el siguiente cdigo para definir las dos nuevas
propiedades.
Get
Number = numberValue
End Get
numberValue = value
End Set
End Property
Get
Position = positionValue
End Get
positionValue = value
End Set
End Property
1.
1.
With player1
2.
.FirstName = "Wyrm"
3.
.LastName = "Garcia"
4.
.Number = 13
5.
.Position = "Shortstop"
6.
End With
7.
With player2
8.
.FirstName = "Joe"
9.
.LastName = "Black"
10.
.Number = 51
11.
.Position = "Catcher"
End With
12.
MsgBox(player1.Position & " " & player1.FullName &
", #" & _
13.
MsgBox(player2.Position & " " & player2.FullName &
", #" & _