Net
II
Or Cerrn Juan Jos
Docente de la facultad de Ingeniera de Sistemas
Universidad Nacional del Centro del Per
CARIBET
Esquina de Calle Cuzco y Arequipa Huancayo Per
III
INDICE
Prlogo V
Dedicatoria VI
Introduccin VII
Agradecimiento VIII
CAPITULO I 6
1.4 FUNCIONES 28
Programa N 12 28
LEN (cadena) 29
MID (cadena, inicio, cantidad) 29
CAPITULO II 49
PROGRAMACION ORIENTADA A OBJETOS 49
Conclusiones 65
Bibliografa 66
IV
Prlogo
Los Autores
V
Dedicatoria
JJOC
ELRZ
VI
Introduccin
Esperamos que este aporte sea el inicio de de una serie de acciones que
permitan que el estudiante entienda bien el concepto de programacin.
LOS AUTORES
VII
Agradecimiento
Los Autores
VIII
Capitulo 1
Hace algn tiempo un viejo amigo me dijo: que aquella persona que sabia
programar en un lenguaje en particular normalmente no tendra problema para programar
en cualquier otro, por mas orientado a objetos que sea. Particularmente quiero compartir
con Ud. Amigo lector que los lenguajes de programacin desde el lenguaje mquina
pasando por el 1ensamblador y as sucesivamente toda la evolucin que sufrieron los
lenguajes de alto nivel tienen una caracterstica comn y es que: A medida que van
saliendo nuevas versiones, estas siempre van a ser mas fciles de programar es decir
estarn mas cerca al usuario.
Tengo que pensar tambin que as como ahora esta de moda el software visual
Studio.net (lo de net es porque esta orientado fuertemente a aplicaciones que corran en
Internet) en tiempos futuros dejara de ser una de las herramientas mas potentes y habrn
otras que superen a este software.
1
Ensamblador es equivalente a Assembly Lenguaje: Luis Joyanes Aguilar; Fundamentos de programacin
Hacer clic en el men Inicio \ Microsoft Visual Studio 2005 \ Microsoft Visual Studio
2005
Cuando en la pgina de inicio realice clic en nuevo proyecto se abrir la siguiente ventana
Base Menor
Area =
(basemayor + basemenor )* altura
h 2
Base Mayor
Module Module1
Sub Main()
'calculo del area de un paralelogramo
'declaramos 4 variables del tipo decimal
Dim bmayor, bmenor, altura, area As Single
'Pedimos un determinado valor para cada variable con writeline
'y lo almacenamos en la respectiva variable con readline
Console.WriteLine("Ingrese base mayor del paralelogramo")
bmayor = Console.ReadLine()
Console.WriteLine("Ingrese base menor del paralelogramo")
bmenor = Console.ReadLine()
Console.WriteLine("Ingrese altura del paralelogramo")
altura = Console.ReadLine()
'Se realiza el calculo del area
area = ((bmayor + bmenor) * altura) / 2
'Ingresamos una linea vacia en la pantalla
Console.WriteLine()
'mostramos un mensaje en pantalla y a continuacion el area
Console.WriteLine("EL AREA DEL PARALELOGRAMO ES:")
Console.WriteLine(area)
'congela la imagen de la consola para poder visualizar
'el resultado
Console.ReadLine()
End Sub
End Module
Para el segundo programa haremos uso de una sentencia condicional simple es decir
sin usar la instruccin else solo el if-then, pero antes debemos hacer clic derecho en el
nombre PRIMER PROYECTO del menu contextual seleccionar: Agregar \ modulo
PROGRAMA N 02
Module Module2
Sub main()
'declaramos tres variables del tipo entero
De seguro que al digitar Ctrl. + F5 se ejecuta el modulo 1, pues bien debe hacer clic en el
men: Proyecto \ Propiedades del primer proyecto, y en la parte de la ventana donde dice
objeto inicial cambiar por el modulo 2; muy bien ahora si con F5 saldr:
PROGRAMA N 03
Module Module3
Sub main()
'programa que ordena en forma ascendente tres numeros ingresados
Dim a, b, c As Integer
Console.WriteLine("ingrese primer numero")
a = Console.ReadLine()
Console.WriteLine("ingrese segundo numero")
b = Console.ReadLine()
Console.WriteLine("ingrese tercer numero")
c = Console.ReadLine()
Console.WriteLine()
'estamos anidando un if-then-else dentro de un if-then
If a < b And a < c Then
Console.WriteLine(a) 'si a es el menor que imprima a
If b < c Then 'luego compara b y c
Console.WriteLine(b)
Console.WriteLine(c)
Else
Console.WriteLine(c)
Console.WriteLine(b)
End If
End If
Module Module4
Sub main()
'este programa es una suma simple cambia
'la declaracion de variables a tipo decimal
Dim a, b, c As Decimal
a = 2.5
b = 6.5
c = a + b
Console.WriteLine(c)
End Sub
End Module
Y se obtendra lo siguiente:
Aca hacemos un alto para estudiar los tipos de variables que posee el
visual studio 2005:
PROGRAMA N 05
Este programa es un clsico que se encuentra en todos los libros, el clculo de las races de
una ecuacin cuadrtica. Sea la ecuacin cuadrtica
ax 2 + bx + c = 0
Solucion : Nota: Esta ecuacin se resuelve solamente si la (discriminante) es
mayor o igual cero para que la solucin se encuentre dentro de los
b + b 4ac
2
nmeros reales.
X1 =
2a = b 2 4ac
b b 2 4ac
X2 =
2a
Sub main()
'este programa calcula las raices reales
'de una ecuacin cuadratica
'ingresando las constantes de la ecuacin
Dim a, b, c, r1, r2 As Single
Console.WriteLine("ingrese la constante a")
Estas sentencias son de gran ayuda ya que realizan un trabajo repetitivo la cantidad de
veces que sea necesario las sentencias en Vb.net son: Do While Loop y For- Next.
He aqu un ejemplo utilizando Do-While Loop cuya sintaxis es:
DO WHILE (Condicin)
Instrucciones
c=c+1 Contador de la condicin
LOOP
Sub Main()
Console.WriteLine("Ingrese
numero")
n = Console.ReadLine()
If m < n Then
m = n
End If
i = i + 1
Loop
Console.WriteLine("El
numero mayor es")
Console.WriteLine(m)
End Sub
de 10 nmeros ingresados por teclado, utilizando la sentencia Do-While-Loop
PROGRAMA N 07
FOR i=1 TO n
Instrucciones
Instrucciones
Instrucciones
.
.
Instrucciones
Instrucciones
.
NEXT
El texto pertenece a las iniciales de la Universidad Nacional del Centro del Per mi
alma mater, lgicamente usted puede programar otras iniciales de su Universidad,
Instituto, de mam o en todo caso de su enamorada total ya sabe como hacerlo.
Debe tener una mayor concentracin en los siguientes programas no son tan complicados
pero requiere de su concentracin
PROGRAMA N 09
Sub Main()
Dim n, i, d, u As Integer
'transforma un numero natural en un numero romano
'nota solo ingresar desde 1 al 99 otro no convierte
Console.WriteLine("ingrese un numero")
n = Console.ReadLine()
'almacena la parte entera de la division
d = n \ 10
'almacena el residuo de la divisin
u = n Mod 10
'sentencia condicional multiple que transforma la parte
'de las decenas, observe que existe 4 posibilidades
Select Case d
Case Is < 4
For i = 1 To d
Console.Write("X")
Next
Case 4
Console.Write("XL")
Case 5
Console.Write("L")
Case Is < 9
Console.Write("L")
For i = 1 To d - 5
Console.Write("X")
Next
Case 9
Console.Write("XC")
End Select
'sentencia condicional multiple que transforma la parte
'de las unidades, observe que existe 4 posibilidades,
PROGRAMA N 10
Con la base anterior convierta un nmero natural a romano dentro del intervalo 1al 999
Sub main()
Dim n, i, d, u, c, r As Integer
'transforma un numero natural en un numero romano
'nota sola ingresar 1 al 999
Console.WriteLine("ingrese un numero")
n = Console.ReadLine()
c = n \ 100
r = n Mod 100
Console.WriteLine("EL NUMERO EN ROMANO ES:")
Console.WriteLine("======================")
Select Case c
Case Is < 4
For i = 1 To c
Console.Write("C")
Next
Case 4
Console.Write("CD")
Select Case d
Case Is < 4
For i = 1 To d
Console.Write("X")
Next
Case 4
Console.Write("XL")
Case 5
Console.Write("L")
Case Is < 9
Console.Write("L")
For i = 1 To d - 5
Console.Write("X")
Next
Case 9
Console.Write("XC")
End Select
'sentencia condicional multiple que transforma la parte
'de las unidades, observe que existe 4 posibilidades,
'igual que las decenas
Select Case u
Case Is < 4
For i = 1 To u
Console.Write("I")
Next
PROGRAMA N 11
451 2
Este es el mtodo de conversin por
1 225 2
divisiones sucesivas hasta que el cociente
1 112 2 sea un nmero menor que 2, la respuesta se
0 56 2 coge desde el ltimo cociente hasta el primer
0 28 2
residuo.
Asi: 451=1110000112
0 14 2
0 7 2
1 3 2
1 1
Funciones matemticas
Funciones de cadena
Funciones de Fecha y hora
No quiero pretender describir cada una de las funciones ya que este es un texto netamente
practico mas bien le recomendara cualquier libro o en todo caso en Internet existe
bastante informacin al respecto, lo que queremos es realizar algunos ejercicios con estos
conceptos.
PROGRAMA 12.-
Para este ejemplo son 04 Sumandos y es igual a la cantidad de dgitos que tiene el
nmero binario.
La base; es decir el numero 2 no cambia a menos que se desea convertir a una base
distinta.
1.- LEN(cadena)
Ejemplo:
LEN(sistemas)
Da como resultado la cantidad de
caracteres de la cadena es decir 8
MID(juanjose,1,6)
Da como resultado Juanjo; el
numero 1 indica a partir de que
posicin extraer y el numero 6
cuantos caracteres extraer.
decimales()
Dim i, longitud, s, As Integer
Dim bin As String
Console.WriteLine("ingrese numero binario")
bin = Console.ReadLine()
'asignamos a la variable longitud la cantidad de caracteres del #
'binario
longitud = Len(bin) 'Uso de la funcion LEN
s = 0
'como es una sucecion de sumas se usa un acumulador;s
'Uso de la variable mid para extarer cada digito del numero
Y resulta:
Existen 3 mbitos de variables: mbito de bloque que se declara dentro de una sentencia
repetitiva; mbito de procedimiento valido dentro de los procedimientos y por ltimo
mbito de modulo cuando la variable se define dentro de este bloque es valido para todos
los procedimientos dentro del modulo y estas variables pueden ser declaradas usando las
palabras preestablecidas DIM o PRIVATE; ojo si se declara como PUBLICO estas
variables sern validas para todos los mdulos dentro del proyecto.
Module Module1
Sub Main()
Console.WriteLine("elija una opcion")
Console.WriteLine("1.-binario a decimal")
Console.WriteLine("2.-invierte cadenas")
n = Console.ReadLine()
Select Case n
Case 1
decimales() mbito de
Case 2 Modulo
contrario()
End Select
Console.ReadLine()
End Sub
Sub decimales()
Console.WriteLine("ingrese numero binario")
bin = Console.ReadLine()
'asignamos a la variable longitud la cantidad de caracteres del
'# binario
longitud = Len(bin) 'Uso de la funcion LEN
s = 0
'como es una sucecion de sumas se usa un acumulador;s
'Uso de la variable mid para extarer cada digito del numero
'se antepone val porque es cadena y tiene que convertirse a
'valor
For i = 1 To longitud
s = s + Val(Mid(bin, i, 1)) * 2 ^ (longitud - i)
Next
Console.WriteLine("el numero es:")
Console.WriteLine(s)
End Sub
End Sub
End Module
Tiene que notar ademas que varios mdulos forman un proyecto. Hasta ac todos los
programas que tengan que ver con programacin estructurada, en adelante trataremos el
fascinante mundo de la programacin orientada a objetos, iniciado en la dcada de los 80s
Un concepto que nos permite abarcar programas ms amplios con menor esfuerzo: es el de
funcin. La idea es muy simple: muchas veces realizo procesos que se repiten y en los que
slo cambia algn factor, si trato ese proceso como un subprograma al que llamo cada vez
que lo necesito, y cada vez que lo llamo puedo cambiar ese factor, estar reduciendo el
margen de error, al reducir el nmero de lneas que necesito en mi programa, ya que no tengo
que repetir todas esas lneas cada vez que quiera realizar el proceso, con una sola lnea de
llamada al subprograma ser suficiente; adems, de haber algn fallo en este proceso el
error queda circunscrito al trozo de cdigo de la funcin.
As, las funciones podemos entenderlas como unas cajas negras, que reciben y devuelven
valores. Solo tengo que programarlas una vez, las puedo probar por separado y comprobar
que funcionan correctamente, una vez terminadas puedo olvidarme de cmo las hice y usarlas
siempre que quiera.
2
Titulo: Introduccin a la OOP. Versin 1.0.0 Grupo EIDOS
Module procedimientos
Sub MAIN()
'El programa principal presenta un menu para
'seleccionar una de las cuatro alternativas
'de las operaciones aritmeticas
Dim N As Integer
Console.WriteLine("1.- SUMA")
Console.WriteLine("2.- RESTA")
Console.WriteLine("3.- MULTIPLICACION")
Console.WriteLine("4.- DIVISION")
N = Console.ReadLine()
Select Case N
Case 1 'el case 1 llama al procedmiento suma
SUMA()
Case 2 'el case 2 llama al procedmiento resta
RESTA()
Case 3 'el case 3 llama al procedmiento multiplicacion
MULTIPLICACION()
Case 4 'el case 4 llama al procedmiento division
DIVISION()
End Select
End Sub
Sub SUMA()
'este es el proc. suma que se llama desde el
'programa principal
Dim A, B, C As Single
A = Console.ReadLine()
B = Console.ReadLine()
C = A + B
Console.WriteLine(C)
Console.ReadLine()
Sub MULTIPLICACION()
Dim A, B, C As Single
A = Console.ReadLine()
B = Console.ReadLine()
C = A * B
Console.WriteLine(C)
End Sub
Sub DIVISION()
Dim A, B, C As Single
A = Console.ReadLine()
B = Console.ReadLine()
C = A / B
Console.WriteLine(C)
End Sub
End Module
Function prueba()
Dim r As Integer
r = 19
Return r
End Function
End Module
Module mostrar_matrices_de_diferente_indice
Sub main()
'este programa muestra corazones en una matriz
'que definide la cantidad de filas y columnas
Dim a As Integer
a = Console.ReadLine()
mostrar(a)'fijese que al procedimiento le asignamos la variable a
End Sub
End Module
Module Module1
'Este programita solo muestra 2 numeritos
Dim x, y, z As Integer
Sub Main()
Dim a, d, p As Integer
a = 5
p = proc()
d = a + p
Console.WriteLine(d)
End Sub
Function proc()
Dim x, y As Integer
x = 5
y = 6
z = x + y
Console.WriteLine(z)
Return z
End Function
End Module
MATRIZ UNIDIMENSIONAL.
Conocido tambin como vector, normalmente es una matriz de una fila y n columnas. Por
ejemplo una matriz unidimensional es
Las matrices unidimensionales normalmente se representan con un solo valor dentro de los
parntesis, as A(5) donde A reprenda el nombre de la matriz y 5 la cantidad de columnas
que posee, que para el caso es 6 y son los siguientes:
3
Las Matrices tambin se conocen como Arrays o arreglos
Se da cuenta que una matriz siempre comienza por el valor 0 por tal motivo siempre
almacena la cantidad que se puede leer en el argumento mas uno.
Module suma_matriz
Sub Main()
Dim a(3, 3), i, j, b(3, 3), c(3, 3) As Integer
'ingresar datos en una matriz A
Console.WriteLine("Matriz A")
For i = 1 To 3
For j = 1 To 3
Console.SetCursorPosition(3 * j, i + 1)
a(i, j) = Console.ReadLine()
Next
Next
'ingresar datos en una matriz B
Console.WriteLine("Matriz B")
For i = 1 To 3
For j = 1 To 3
Console.SetCursorPosition(3 * j, i + 6)
b(i, j) = Console.ReadLine()
Next
Next
'Suma de matrices A+B
Console.WriteLine("Matriz C = A + B")
For i = 1 To 3
For j = 1 To 3
c(i, j) = a(i, j) + b(i, j)
Console.SetCursorPosition(3 * j, i + 12)
Console.WriteLine(c(i, j))
Next
Next
End Sub
End Module
Les presento el producto de dos matrices de 3x3, si UD. Maneja un algoritmo mas
eficiente adelante yo pens en este.
Module producto_matrices
Sub main()
Dim a(3, 3), i, j, b(3, 3), c(3, 3), z As Integer
'ingresar datos en una matriz A
Console.WriteLine("Matriz A")
For i = 1 To 3
For j = 1 To 3
Console.SetCursorPosition(3 * j, i + 1)
a(i, j) = Console.ReadLine()
Next
Next
'ingresar datos en una matriz B
Console.WriteLine("Matriz B")
For i = 1 To 3
For j = 1 To 3
Console.SetCursorPosition(3 * j, i + 6)
b(i, j) = Console.ReadLine()
Next
Next
'Prodcuto de matrices A x B
Console.WriteLine("Matriz C = A x B")
z = 1
For i = 1 To 3
PROGRAMA 20.
Module transpuesta
Sub Main()
'Este programa halla la transpuesta de una matriz de 3x2
Dim a(2, 3), t(3, 2) As Char
Dim i, j, b As Integer
b = 1
Console.WriteLine("ingrese la matriz")
For i = 1 To 2
For j = 1 To 3
'b indica los espacios a la izquierda e i espacios hacia arriba
Console.SetCursorPosition(b, i)
For i = 1 To 2
For j = 1 To 3
t(j, i) = a(i, j)
Next
Next
Console.WriteLine("Esta es la matriz transpuesta")
b = 1
For i = 1 To 3
For j = 1 To 2
Console.SetCursorPosition(b + 10, i + 10)
Console.WriteLine(t(i, j))
b = b + 3
Next
b = 1
Next
Console.ReadLine()
End Sub
End Module
RESPUESTA
Module determinante
Sub main()
'Este programa calcula la determinante de una matris de 3x3
'me costo sangre sudor y lagrimas
'lo demas sera una variante de esto
Dim i, j, k, a(3, 3), b(3, 5), z, p, p1, p2 As Integer
z = 1
For j = 1 To 3
For i = 1 To 3
Console.SetCursorPosition(z, i)
a(i, j) = Console.ReadLine()
Next
z = z + 3
Next
For j = 1 To 3
For i = 1 To 3
b(i, j) = a(i, j)
Next
Next
For j = 4 To 5
For i = 1 To 3
b(i, j) = a(i, j - 3)
Next
Next
z = 1
For j = 1 To 5
For i = 1 To 3
Console.SetCursorPosition(z, i + 5)
Console.WriteLine(b(i, j))
Next
z = z + 3
Next
Module Module1
Sub Main()
'Este programa dibuja 4 ventanas unidas por una x
Dim i, j, A As Integer
For j = 0 To 20 Step 5
For i = 0 To 20
Console.SetCursorPosition(i, j)
Console.Write("*")
Console.SetCursorPosition(j, i)
Console.Write("*")
Next
Next
For j = 30 To 50 Step 5
For i = 30 To 50
Console.SetCursorPosition(i, j)
Console.Write("*")
Console.SetCursorPosition(j, i)
Console.Write("*")
Next
Next
For j = 30 To 50 Step 5
For i = 0 To 20
Console.SetCursorPosition(i, j)
Console.Write("*")
Console.SetCursorPosition(j, i)
Console.Write("*")
Next
Next
For j = 0 To 20 Step 5
For i = 30 To 50
Console.SetCursorPosition(i, j)
Console.Write("*")
Console.SetCursorPosition(j, i)
Console.Write("*")
Next
Next
A = 0
2 CONCEPTOS PREVIOS
Visual Basic es un descendiente de Basic, que ha existido durante varias dcadas. BASIC (el
acrnimo de BeginnersAll-Purpose Symbolic Instruction Code) fue originariamente desarrollado
por la Dartmouth University en 1964 como lenguaje para programadores principiantes. BASIC se
convirti en el primer lenguaje que la mayora de los programadores aprenda para familiarizarse
con los fundamentos de la programacin antes de pasar a lenguajes ms potentes. Visual Basic
apareci en mayo de 1991 y supuso una revolucin en la metodologa de desarrollo de
aplicaciones, ya que permita la creacin de programas arrastrando y soltando componentes en
lugar de tener que codificar manualmente los elementos. Desde muchos punto de vista Visual
Basic .NET supone la madurez de ese proyecto que naci hace mas de diez aos. La nueva
versin, Visual Basic .NET, incorpora caractersticas de orientacin a objetos de tal manera que
podra considerarse un lenguaje totalmente diferente a sus predecesores y totalmente orientado a
objetos, ya que en versiones anteriores Visual Basic era considerado un lenguaje de programacin
con sintaxis de objetos, pero no un verdadero lenguaje orientado a objetos.
En una aplicacin participan un buen nmero de componentes mediante los cuales se facilita el
acceso a bases de datos, la conectividad en redes, comunicacin con otras aplicaciones, etc. La
existencia de tantos componentes puede causar conflictos si hay coincidencias de nomenclatura, y
por ello, la plataforma .NET ha optado por el uso de espacios o mbitos de nombre.
Un mbito con nombre, del ingls namespace, es un mbito delimitado explcitamente al que se ha
asignado un identificador. En su interior es posible incluir tanto definiciones de tipos como otros
mbitos con nombre, creando una anidacin que dar lugar a una jerarqua. Para crear un mbito
con nombre, incluyendo en l las definiciones que nos interesen, se utiliza la palabra clave
Namespace. Hay que tener en cuenta que todas las definiciones incluidas en su definicin slo
existen dentro del espacio con nombres. Por ejemplo:
Namespace Espacio1
Namespace Espacio2
Public Class HolaMundo
Public Shared Sub Main()
System.Console.WriteLine(Hola desde Espacio1.Espacio2)
End Sub
End Class
End Namespace
End Namespace
Namespace Espacio1.Espacio2
Public Class HolaMundo
Public Shared Sub Main()
System.Console.WriteLine(Hola desde Espacio1.Espacio2)
End Sub
En ambos casos tenemos un mbito con nombre, llamado Espacio1, que contiene en su interior
otro, denominado Espacio2. Al haberse definido la clase HolaMundo como pblica, es posible
crear un objeto de dicha clase desde otro programa, siempre y cuando se componga una referencia
completa que permitiese al compilador identificarla de manera unvoca. Esto significara anteponer
al nombre de la clase el del mbito o mbitos con nombre donde se encuentra definida, como se
hace en este ejemplo:
Class UsaHolaMundo
Shared Sub Main()
Dim MiHolaMundo As Espacio1.Espacio2.HolaMundo = New
Espacio1.Espacio2.HolaMundo()
End Sub
End Class
Imports Espacio1.Espacio2
Class UsaHolaMundo
Shared Sub Main()
Dim MiHolaMundo As HolaMundo = New HolaMundo()
End Sub
End Class
2.2 CLASES
Los campos de datos son variables con un mbito de visibilidad reducido a la clase. El acceso a
dichas variables, por parte del usuario de la clase, puede ser directo o bien a travs de mtodos o
propiedades, todo dependiendo de la visibilidad del campo. En su declaracin, podemos controlar
su visibilidad mediante unos modificadores, que no slo pueden aplicarse a la definicin de
variables, sino tambin de clases, mtodos, estructuras...
Por defecto, los miembros de una clase tienen visibilidad pblica o privada dependiendo de
su tipo. Si a una variable le anteponemos la palabra Dim sin ningn modificador, ser privada a la
clase. Por el contrario, si hacemos esto mismo a un mtodo, ste ser pblico. Para resaltar la
privacidad de un miembro, usaremos la palabra Private, asegurando que nicamente podr ser
manipulado dentro de la propia clase, en el cdigo de los mtodos y propiedades, pero nunca fuera,
ni siquiera en clases derivadas. Por otro lado, si queremos presentar las variables en modo pblico,
antepondremos la palabra Public, y as podrn usarse tanto dentro de la clase como fuera, ya sea
por clases derivadas u otras que no tengan parentesco alguno.
Protected: Son accesibles internamente, y tambin por aquellas clases que hayan derivado de
sta.
Friend: Permite el acceso desde cualquier punto del proyecto al que pertenece la clase.
Protected Friend: Los miembros son visibles en el proyecto actual y en las clases derivadas,
aunque estn en otro proyecto.
Desde cualquier mtodo que pertenezca a la clase ClaseBase se puede acceder a todas las variables
independientemente de su modificador. Si tuvisemos una clase derivada, la cual heredara todas
las variables, no podra acceder a las dos primeras por tener un mbito privado. Si tuvisemos una
clase totalmente ajena a ClaseBase, slo podramos acceder a las tres ltimas variables.
Las clases almacenan informacin que, en muchas ocasiones, no slo es para uso interno sino que
tambin puede interesar al programador que las utilice. Si, por ejemplo, se desea que el valor de
una cierta variable pueda ser ledo externamente pero no modificado, o bien que cada vez que se
modifique su valor ste pueda ser controlado para saber si es vlido, es adecuado definir una
propiedad. Una propiedad es una variable que tiene vinculado internamente unos mtodos de
acceso que son los que controlan la lectura o asignacin de valores. Dentro del bloque de cdigo
de propiedades existe un bloque Get, que devuelve al usuario de la clase el valor de la instancia
privada de la variable; y un bloque Set, que asigna el valor indicado por el cdigo cliente a la
correspondiente instancia privada de la variable. Al mismo tiempo, es posible restringir el acceso a
las propiedades utilizando el comando ReadOnly, y eliminando el bloque Set, para convertirla en
una propiedad de slo lectura; o utilizar el comando WriteOnly y eliminar el bloque Get, para
convertir la propiedad en una propiedad de slo escritura. Por ejemplo:
Class Ficha
Private Pnombre As String
Private Pdireccion As String
Private Pdepartamento As String
Private Pidempleado As Integer
//La propiedad Nombre slo puede leerse, al igual que sucede con Direccion
Public ReadOnly Property Nombre() As String
Get
Los mtodos definen el comportamiento de las clases. Son bloques de cdigo delimitados, a los
cuales se les asigna un identificador para poder efectuar una o ms llamadas y ejecutar el cdigo
las veces necesarias. En un mtodo hay dos posibilidades, que devuelva algn dato, o que por el
contrario no devuelva nada. Si del primer caso se trata se antepone la palabra Function, para el
segundo caso se usa la palabra Sub. Los parmetros que recibe el mtodo pueden estar pasados por
valor o por referencia:
-Valor: El mtodo recibe una copia del valor almacenado en la variable original. El paso por valor
se usa por defecto, pero si queremos resaltarlo se antepone la palabra ByVal.
-Referencia: El mtodo recibe una referencia a esa variable, lo cual permite modificarla. Para
indicar que el paso es por referencia se antepone la palabra
ByRef.
Public Sub asignacion ( ByVal Pnombre As String, ByVal
Pdireccion As String)
If Pnombre = David And Pdireccion = Santa Marta Then
Pidempleado = 1
Departamento = IS
En cuanto a la devolucin de parmetros desde un mtodo, lo nico que hay que hacer es sustituir
la palabra Sub, que hemos puesto delante del nombre del mtodo, por Fuction y aadir al final la
palabra Al seguida del tipo que corresponda. En el cuerpo del mtodo usaramos la sentencia
Return acompaada del valor a devolver.
Se entiende por evento una seal generada por un objeto o componente. Esta seal puede
conectarse a un gestor de evento, un mtodo que se ejecutara automticamente al recibir esa seal.
Los eventos proporcionan una forma de que un objeto ejecute el cdigo escrito por el usuario del
objeto. El objeto desencadena el evento mediante un controlador de eventos. Para declarar un
evento se utiliza la palabra clave Event, que indica a la clase el nombre del evento:
Las clases definidas en Visual Basic .NET pueden contar con unos mtodos especficos para
controlar la construccin y destruccin de objetos. Una misma clase puede contar con mltiples
constructores, siempre que cuenten con diferentes listas de parmetros; mientras que destructor
slo puede haber uno por clase. Los constructores tienen por nombre New(), no cuentan con valor
de retorno, pueden tomar o no parmetros segn interese, y pueden inicializar las propiedades del
objeto instancia o establecer una conexin con una base de datos. El destructor tiene por nombre
Finalize(), no cuenta con valor de retorno y no pueden tomar parmetro alguno. Al crear un objeto
de una clase, utilizando para ello el operador New, se ejecuta automticamente el constructor que
corresponda segn los parmetros facilitados. Sin embargo, el destructor, se ejecuta
automticamente para un cierto objeto cuando ya no hay ninguna referencia hacia l, es decir, no
necesitamos destruir los objetos explcitamente, de esto se encarga el sistema de recogida de
basura de la plataforma .NET. La recogida de objetos no tiles se efecta en momentos concretos
en los que no hay ninguna otra actividad pendiente.
Class Agenda
Public Sub New() //Constructor sin parmetros
End Sub
Public Sub New (ByVal Parametro As String) //y con un parmetro
End Sub
Protected Sub Finalize() //Destructor
End Sub
End Class
//Creacin de un objeto sin entregar ningn parmetro
Dim MiAgenda As Agenda = New Agenda()
//Creacin de un objeto facilitando una cadena
Dim Miagenda As Agenda = New Agenda(Parmetro)
Consiste bsicamente en definir otras clases en el interior de una clase, esto es til cuando una
cierta clase tan solo va a ser necesaria en el interior de otra, nunca fuera. Al anidar una clase en
otra es tambin una forma de ocultarla, ya que si no se la hace publica, seria imposible usarla
desde el exterior aun poniendo una referencia completa. Conseguimos la encapsulacin de una
clase dentro de otra.
Class Agenda
Class Anotacin
Shared Sub New()
Console.writeLine(Constructor de la clase
anotacin)
End Sub
Public Sub New()
Console.writeLine(Constructor de anotacin)
End Sub
Public Sub New(ByVal Parametro As String)
Console.writeLine(Constructor {0},parmetro)
End Sub
Protected Sub Finalize()
Console.writeLine(Destructor de anotacin)
End Sub
End class
//Las siguientes declaraciones pertenecen a la clase agenda
Private MiAnotacion As Anotacion
Private Sub New()
Console.writeLine(Constructor agenda)
Mianotacion = New Anotacin (Nueva anotacin)
End Sub
Protected Sub Finalize()
Console.writeLine(Destructor agenda)
Mianotacion = Nothing
End Sub
2.11 HERENCIA
Gracias a la herencia podemos crear clases base en las que se encapsulen las funciones ms
comunes. Posteriormente, podemos crear otras clases que se deriven de las clases base. Las clases
derivadas heredan las propiedades y mtodos de las clases base y pueden ampliar o complementar
sus funciones para adaptarse a los requerimientos del programa. Para crear una clase derivada en
Visual Basic .NET se incluye en su definicin el comando Inherits junto con el nombre de la clase
base. Por ejemplo:
En ciertas ocasiones, interesa que no se tenga autorizacin para crear instancias de una clase base,
forzando que el acceso a los mtodos y propiedades de la clase se realice a travs de una clase
derivada. En este caso, construiramos la clase base utilizando el modificador MustInherit. En el
siguiente cdigo se muestra la definicin de la clase Cuenta con el modificador MustInherit:
Public MustInherit Class Cuenta Esta definicin convierte a Cuenta en una clase abstracta, ya que
define las interfaces de los mtodos y propiedades que sern heredadas por las clases derivadas.
As, para poder acceder al mtodo HacerBalance ser necesario crear una instancia de la clase
derivada CuentaCorriente.
2.12. POLIMORFISMO
El polimorfismo es la habilidad que tienen objetos basados en diferentes clases para responder a la
misma llamada de mtodo utilizando sus propias implementaciones. Los mtodos heredados por
las clases derivadas pueden someterse a sobrecarga, para ello utilizamos la palabra clave
OverLoads. La signatura de mtodo de la clase sobrecargada debe utilizar el mismo nombre que el
mtodo sobrecargado, pero la lista de parmetros debe ser diferente. Es exactamente lo mismo que
sobrecargar mtodos de la misma clase, excepto la palabra clave Overloads es opcional y,
normalmente, se omite.
En el siguiente ejemplo, se realizar una iteracin a travs de la coleccin de clases de tipo cuenta,
y el compilador determinar en tiempo de ejecucin qu implementacin concreta de tipo cuenta
debe ejecutar. De este modo, no hay que preocuparse de a qu tipo de clase estamos haciendo
referencia, pues los tipos de clase implementan las mismas interfaces de mtodo. As, nos interesa
que todas las clases de cuentas contengan un mtodo ObtenerInfoCuenta con la misma definicin
de interfaz, pero con diferentes implementaciones que dependern del tipo de cuenta.
Tambin se puede obtener un resultado similar utilizando una interfaz, que definir las firmas de
los mtodos. En lugar de heredar de una clase base Cuenta, definiremos una interfaz ICuenta, y las
clases que la implementen deben aportar el cdigo de implementacin de todos los mtodos
definidos por ella:
Francisco Charte Ojeda. Microsoft Visual Basic .NET Ediciones Anaya Multimedia
(Grupo Anaya, S.A.). 2001.
Luis Miguel Blanco. Programacin en Visual Basic .NET Editorial Eidos. 2002.