Anda di halaman 1dari 67

Visual .

Net

Or Cerrn Juan Jos


Rojas Zacaras Edgar
Visual .Net

Or Cerrn Juan Jos


Docente de la facultad de Ingeniera de Sistemas
Universidad Nacional del Centro del Per

Rojas Zacaras Edgar


Docente de la facultad de Ingeniera de Sistemas
Universidad Nacional del Centro del Per

Editor: Edgar Rojas Zacaras


erojasza@yahoo.es

II
Or Cerrn Juan Jos
Docente de la facultad de Ingeniera de Sistemas
Universidad Nacional del Centro del Per

Rojas Zacaras Edgar


Docente de la facultad de Ingeniera de Sistemas
Universidad Nacional del Centro del Per

Editor: Edgar Rojas Zacaras


erojasza@yahoo.es
Av. 28 de Julio 343 - Jauja

PRIMERA EDICION, 2008.

IMPRESO EN HUANCAYO, DICIEMBRE, 2008.

Hecho el Depsito Legal en la Biblioteca Nacional del Per N 2008-15594

CARIBET
Esquina de Calle Cuzco y Arequipa Huancayo Per

III
INDICE

Prlogo V
Dedicatoria VI
Introduccin VII
Agradecimiento VIII

CAPITULO I 6

PROGRAMACIN EN VISUAL BASIC A NIVEL CONSOLA 7

Inicio del Software Visual Studio a nivel de consola 8


1.1 SENTENCIAS SECUENCIALES 9
Programa N 01 10
Programa N 02 11
Programa N 03 13
Programa N 04 15
Programa N 05 15

1.2 SENTENCIAS REPETITIVAS 17


Programa N 06 18
Programa N 07 18
Programa N 08 20

1.3 SENTENCIAS SELECTIVAS Select Case 22


Programa N 09 22
Programa N 10 24
Programa N 11 26

1.4 FUNCIONES 28
Programa N 12 28
LEN (cadena) 29
MID (cadena, inicio, cantidad) 29

1.5 AMBITO DE VARIABLES 30


Programa N 13 31

1.6 PROGRAMACION PROCEDURAL 33


Programa N 14 34
Programa N 15 36
Programa N 16 37
Programa N 17 38
1.7 MAITRICES 39
Programa N 18 41
Programa N 19 42
Programa N 20 43
Programa N 21 45
Programa N 22 47

CAPITULO II 49
PROGRAMACION ORIENTADA A OBJETOS 49

2.1 Conceptos previos 49


2.2 mbitos con nombre 50
2.3 Clases 51
2.4 Campos de datos de la clase 52
2.5 Propiedades de la clase 53
2.6 Mtodos de la clases 54
2.7 Eventos de la clase 55
2.8 Constructores y Destructores 56
2.9 Clases anidadas 57
2.10 Jerarqua de clases 58
2.11 Herencia 58
2.12 Poliformismo 60

Aplicacin: Visualizacin de notas de exmenes parciales 62

Aplicacin: Visualizacin de la bibliografa existente en una Biblioteca especializada 63

Conclusiones 65
Bibliografa 66

IV
Prlogo

El hombre que ha dejado de aprender, no merece deambular libremente en


estos das tan peligrosos
M.M. Coady

El presente aporte es como parte del proceso de aprendizaje en las aulas


universitarias, dirigido a los estudiantes de ingeniera de sistemas y otras facultades
y/o escuelas profesionales.

La presentacin del presente texto se encuentra plasmado en la parte introductoria


del presente texto.

Los Autores

V
Dedicatoria

A la memoria de Francisco Or Alcntara

JJOC

A la memoria de mis Padres: Apolinario Rojas y Delfina Zacarias

ELRZ

VI
Introduccin

La mayora de textos de programacin abarcan demasiados aspectos tericos


y descuidan la parte prctica. En este libro le damos mayor importancia a la
parte prctica, desarrollando gran cantidad de programas, de modo tal que el
lector no se agobie con tanta teora.

En el capitulo uno se desarrollan la lgica de programacin a nivel de consola.

En el capitulo dos se desarrollan conceptos de programacin orientada a


objetos, que por lo general se hace difcil en entender a los alumnos.

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

Nuestros sinceros agradecimientos a los docentes de la facultad de Ingeniera


de Sistemas por las constantes recomendaciones para la mejora del presente
trabajo. As mismo, al encargado del Centro de Cmputo de la mencionada
Facultad por su gentileza en el apoyo con la tecnologa de informacin
correspondiente.

Los Autores

Or Cerrn Juan Jos


Docente de la facultad de Ingeniera de Sistemas
Universidad Nacional del Centro del Per. Con estudio de Maestra en Ingeniera de
Sistemas

Rojas Zacaras Edgar


Docente de la facultad de Ingeniera de Sistemas
Universidad Nacional del Centro del Per, Director pasante de la Oficina General de
Informtica de la UNCP. Con estudios de maestra en Administracin Mencin
Informtica para la Gestin

VIII
Capitulo 1

Programacin en Visual Basic 2005 a nivel de consola

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

Ing. Juan Jos Or Cerrn 6 Ing. Edgar Rojas Zacaras


Si Ud. Domina la programacin estructurada de algn software en particular le
sugiero que obvie este capitulo porque la idea es que con este capitulo el lector se
concentre en la lgica de programacin sin distraerse en la parte visual; pues bien no mas
palabras y al grano.

INICIO DEL SOFTWARE VISUAL STUDIO A NIVEL DE CONSOLA.

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

Donde podr seleccionar el icono de Aplicacin de consola y podr dar un nombre a su


proyecto en consola. Y al hacer clic en aceptar visualizaremos lo siguiente:

Ing. Juan Jos Or Cerrn 7 Ing. Edgar Rojas Zacaras


Ya estaremos listos para ingresar nuestro primer programa que consistir en calcular el
rea de un trapecio:

Base Menor

Area =
(basemayor + basemenor )* altura
h 2

Base Mayor

1.1 SENTENCIAS SECUENCIALES

Ing. Juan Jos Or Cerrn 8 Ing. Edgar Rojas Zacaras


PROGRAMA N01

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 ejecutar el cdigo pulse la tecla F5


El resultado de la consola ser el siguiente:
Nota: la ltima parte del cdigo: Console.Readline( ) se puede obviar y para ejecutar el
programa digite las teclas Ctrl. + F5

Ing. Juan Jos Or Cerrn 9 Ing. Edgar Rojas Zacaras


Qu le pareci?, sino le salio el mismo resultado con calma vuelva a intentarlo sino
prosiga

En el programa anterior si nos ceimos a la programacin estructurada solo


estamos haciendo uso de la ESTRUCTURA SECUENCIAL, ya que no utilizamos ni
sentencias condicionales ni repetitivas fjese que la programacin estructurada sigue
siendo vigente, a pesar que este software es orientado a objetos.

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

De la ventana seleccionamos el icono de modulo luego clic el botn agregar y se creara el


modulo2 donde ingresaremos las siguientes instrucciones

PROGRAMA N 02

Module Module2
Sub main()
'declaramos tres variables del tipo entero

Ing. Juan Jos Or Cerrn 10 Ing. Edgar Rojas Zacaras


Dim a, b, c As Integer
'ingresamos valores para las variables
'muestra ingrese numero uno en pantalla
Console.WriteLine("ingrese numero uno")
'almacena el valor ingresado en a
a = Console.ReadLine()
Console.WriteLine("ingrese numero dos")
b = Console.ReadLine()
Console.WriteLine("ingrese numero tres")
c = Console.ReadLine()
'ingresa una linea vacia
Console.WriteLine()
'si a es el numero mayor se imprimira y acabara el programa
If a > b And a > c Then
Console.WriteLine("el mayor es:")
Console.WriteLine(a)
End If
'si b es el numero mayor se imprimira y acabara el programa
If b > a And b > c Then
Console.WriteLine("el mayor es:")
Console.WriteLine(b)
End If
'si c es el numero mayor se imprimira y acabara el programa
If c > a And c > b Then
Console.WriteLine("el mayor es:")
Console.WriteLine(c)
End If
'Permite pausar para visualizar la pantalla
Console.ReadLine()
End Sub
End Module

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:

Ing. Juan Jos Or Cerrn 11 Ing. Edgar Rojas Zacaras


La siguiente aplicacin tiene que ver con una estructura condicional doble es decir con la
sentencia if - then else

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

If b < a And b < c Then 'si b es el menor que imprima b

Ing. Juan Jos Or Cerrn 12 Ing. Edgar Rojas Zacaras


Console.WriteLine(b)
If a < c Then 'luego compara a y c
Console.WriteLine(a)
Console.WriteLine(c)
Else
Console.WriteLine(c)
Console.WriteLine(a)
End If
End If

If c < a And c < b Then 'si c es el menor que imprima c


Console.WriteLine(c)
If a < b Then 'luego compara a y b
Console.WriteLine(a)
Console.WriteLine(b)
Else
Console.WriteLine(b)
Console.WriteLine(a)
End If
End If
End Sub
End Module

En este programa no encontramos la instruccin Console . Readline( ) por lo tanto


ejecutamos con Ctrl.+F5 y la ventana de consola tiene el siguiente aspecto:

Ing. Juan Jos Or Cerrn 13 Ing. Edgar Rojas Zacaras


PROGRAMA N 04

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:

La Tabla muestra la relacin de tipos de datos disponibles en el lenguaje.

Tipo de dato Tamao Rango de valores


en VB.NET
Bolean 1 byte True o False (Verdadero o Falso)
Byte 1 byte 0 a 255 (sin signo)
Char 2 bytes 0 a 65535 (sin signo)
Date 8 bytes 1 de enero de 1 a 31 de diciembre de 9999
Decimal 12 bytes +/- 79.228.162.514.264.337.593.543.950.335 sin punto decimal;
+/-7,9228162514264337593543950335 con 28 posiciones a la derecha
del signo decimal; el nmero ms pequeo distinto de cero es +/-
0,0000000000000000000000000001
Double 8 bytes -1,79769313486232E308 a -4,94065645841247E-324
(punto flotante para valores negativos; 4,94065645841247E-324 a
con precisin 1,79769313486232E308 para valores positivos

Ing. Juan Jos Or Cerrn 14 Ing. Edgar Rojas Zacaras


doble
Integer 4 bytes - -2.147.483.648 a 2.147.483.647
Long (entero 8 bytes -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
Largo)
Short 2 bytes -32.768 a 32.767
Single 4 bytes -3,402823E38 a 1,401298E-45 para valores negativos;
(punto flotante 1,401298E-45 a 3,402823E38 para valores positivos
con precisin
simple)
Object 4 bytes Cualquier tipo
String (cadena 10 bytes + Desde 0 a unos 2.000 millones de caracteres Unicote
de longitud (2 *
variable) longitud de
la cadena)
Estructura (tipo Suma de los Cada miembro de la estructura tiene un intervalo de valores
de dato definido tamaos de determinado por su tipo de datos e independiente de los intervalos de
por el usuario los valores correspondientes a los dems miembros
miembros
de la
estructura

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")

Ing. Juan Jos Or Cerrn 15 Ing. Edgar Rojas Zacaras


a = Console.ReadLine()
Console.WriteLine("ingrese la constante b")
b = Console.ReadLine()
Console.WriteLine("ingrese la constante c")
c = Console.ReadLine()
'la novedad es que se esta usando la expresion
'math.sqrt para calcular la raiz cuadrada
r1 = (-b + Math.Sqrt(b ^ 2 - 4 * a * c)) / 2 * a
r2 = (-b - Math.Sqrt(b ^ 2 - 4 * a * c)) / 2 * a
Console.WriteLine("Las raices son")
Console.WriteLine(r1)
Console.WriteLine(r2)
End Sub

Lo nico novedoso de este programa es el uso de la librera matematica: Math y su


sentencia Sqrt para calcular la raiz cuadrada

1.2. SENTENCIAS REPETITIVAS.

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

Ing. Juan Jos Or Cerrn 16 Ing. Edgar Rojas Zacaras


PROGRAMA N 06
Nuestro primer programa de sentencias repetitivas consiste en encontrar el numero mayor

Sub Main()

'este programa encuentra el numero


mayor
'de 10 numeros ingresados por
teclado
Dim m, i, n As Integer
m = 0
i = 1
Do While i <= 10

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

La serie de Fibonacci es la siguiente : 1;1;2;3;5;8;13 y as sucesivamente note que la


ley de formacin es sumar los dos nmeros consecutivos para encontrar el tercero

Ing. Juan Jos Or Cerrn 17 Ing. Edgar Rojas Zacaras


Sub main()
'este programa imprime los
'20 primeros(numeros)
'de la serie de fibonacci
Dim a, b, c, i As Integer
i = 1
a = 1
b = 1
Console.WriteLine(a)
Console.WriteLine(b)
Do While i <= 18
c = a + b
Console.WriteLine(c)
a = b
b = c
i = i + 1
Loop
End Sub

Y as se pueden hallar incluso ms de 18 nmeros, Luego pasemos a trabajar con la


sentencia For Next y la ventaja que se tiene frente al Do While es que ya no necesita
de un contador que controle las veces que se repetir el bucle sino que este se controla
automticamente, la sintaxis del FOR NEXT es

FOR i=1 TO n
Instrucciones
Instrucciones
Instrucciones
.
.
Instrucciones
Instrucciones
.
NEXT

Ing. Juan Jos Or Cerrn 18 Ing. Edgar Rojas Zacaras


PROGRAMA N 08
Haciendo uso de la sentencia repetitiva For Next imprimir en pantalla el texto UNCP
Sub main()
'Este programa escribe UNCP en la consola
Dim i, j As Integer
Console.Title = "SISTEMAS" 'titula sistemas a la consola
Console.BackgroundColor = ConsoleColor.Blue 'da fondo azul a la
consola
Console.ForegroundColor = ConsoleColor.Yellow 'color de letra
amarillo
'bucle para dar color el fondo de las letras
For j = 1 To 80
For i = 1 To 70
Console.SetCursorPosition(i, j)
Console.Write(" ")
Next
Next
'escribe lineas verticales
For i = 1 To 5
Console.SetCursorPosition(1, i)
Console.WriteLine("")
Console.SetCursorPosition(5, i)
Console.WriteLine("")
Console.SetCursorPosition(7, i)
Console.WriteLine("")
Console.SetCursorPosition(11, i)
Console.WriteLine("")
Console.SetCursorPosition(13, i)
Console.WriteLine("")
Console.SetCursorPosition(19, i)
Console.WriteLine("")
Next
'escribe lineas horizontales
For i = 1 To 5
Console.SetCursorPosition(i, 5)
Console.WriteLine("")
Console.SetCursorPosition(12 + i, 1)
Console.WriteLine("")
Console.SetCursorPosition(12 + i, 5)
Console.WriteLine("")

Ing. Juan Jos Or Cerrn 19 Ing. Edgar Rojas Zacaras


Console.SetCursorPosition(18 + i, 1)
Console.WriteLine("")
Console.SetCursorPosition(18 + i, 3)
Console.WriteLine("")
Next
'escribe una parte de la P
For i = 1 To 3
Console.SetCursorPosition(23, i)
Console.WriteLine("")
Next
'escribe la diagonal de la N
For i = 1 To 5
Console.SetCursorPosition(6 + i, i)
Console.WriteLine("")
Next
Console.ReadLine()
End Sub

En la consola se escribir del siguiente modo:

Fjese que ha variado el titulo de la ventana de la consola, el fondo de la pantalla y el color


de la letra. Es importante la instruccin Console.SetCursorPosition(c,f) ya que fija el lugar
donde se imprimir el texto; debemos tener en cuenta que ha diferencia del manejo de
matrices en matemtica; en el lenguaje Vb.net primero se da la columna luego la fila para
fijar coordenadas, en otra circunstancia se utilizara el una sentencia for para cada lnea de
cada una de las letras as en la letra U necesitara 3 sentencias for, 2 para las lneas
verticales y 1para la lnea horizontal inferior.

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.

Ing. Juan Jos Or Cerrn 20 Ing. Edgar Rojas Zacaras


1.3 SENTENCIAS SELECTIVAS
SENTENCIA SELECT CASE.

Estaba olvidando una sentencia condicional mltiple y ahora es un buen momento


para revisarlo es la ya tan conocida SELECT CASE; su sintaxis es:

SELECT CASE N 'Segn sea el valor de n se realizara una de las


'opciones
CASE 1
Instrucciones
No necesariamente puede
CASE 2 tomar el valor de 2 pueden ser
Instrucciones las expresiones; por ejemplo:
Is < 5.
CASE 3 2,3
Instrucciones 4 to 9
CASE N
Instrucciones
CASE ELSE
Instrucciones
END SELECT

Debe tener una mayor concentracin en los siguientes programas no son tan complicados
pero requiere de su concentracin

PROGRAMA N 09

Realizar un programa que transforme un nmero natural desde 1 hasta 99 en su


equivalente en nmeros romanos.
Comentario: Si acaso debera de conocer a todos los nmeros romanos desde 1 hasta 99,
AHORA se los presento:
1 I 11 XI 21 XXI 31 XXXI 41 XLI 51 LI 61 LXI 71 LXXI 81 LXXXI 91 XCI
2 II 12 XII 22 XXII 32 XXXII 42 XLII 52 LII 62 LXII 72 LXXII 82 LXXXII 92 XCII
3 III 13 XIII 23 XXIII 33 XXXIII 43 XLIII 53 LIII 63 LXIII 73 LXXIII 83 LXXXIII 93 XCIII
4 IV 14 XIV 24 XXIV 34 XXXIV 44 XLIV 54 LIV 64 LXIV 74 LXXIV 84 LXXXIV 94 XCIV
5 V 15 XV 25 XXV 35 XXXV 45 XLV 55 LV 65 LXV 75 LXXV 85 LXXXV 95 XCV
6 VI 16 XVI 26 XXVI 36 XXXVI 46 XLVI 56 LVI 66 LXVI 76 LXXVI 86 LXXXVI 96 XCVI

Ing. Juan Jos Or Cerrn 21 Ing. Edgar Rojas Zacaras


7 VII 17 XVII 27 XXVII 37 XXXVII 47 XLVII 57 LVII 67 LXVII 77 LXXVII 87 LXXXVII 97 XCVII
8 VIII 18 XVIII 28 XXVIII 38 XXXVIII 48 XLVIII 58 LVIII 68 LXVIII 78 LXXVIII 88 LXXXVIII 98 XCVIII
9 IX 19 XIX 29 XXIX 39 XXXIX 49 XLIX 59 LIX 69 LXIX 79 LXXIX 89 LXXXIX 99 XCIX
10 X 20 XX 30 XXX 40 XL 50 L 60 LX 70 LXX 80 LXXX 90 XC 100 C

Esto ensean en la primaria, sino se lo ensearon repase conmigo; bien lo ms


importante es tener un SELECT CASE para el digito de la unidades y otro para el de las
decenas, Ud analice lo que va dentro del CASE no le parece, existen muchas formas de
hacerlo si prefiere otra, adelante.

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,

Ing. Juan Jos Or Cerrn 22 Ing. Edgar Rojas Zacaras


'igual que las decenas
Select Case u
Case Is < 4
For i = 1 To u
Console.Write("I")
Next
Case 4
Console.Write("IV")
Case 5
Console.Write("V")
Case Is < 9
Console.Write("V")
For i = 1 To u - 5
Console.Write("I")
Next
Case 9
Console.Write("IX")
End Select
End Sub

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")

Ing. Juan Jos Or Cerrn 23 Ing. Edgar Rojas Zacaras


Case 5
Console.Write("D")
Case Is < 9
Console.Write("D")
For i = 1 To c - 5
Console.Write("C")
Next
Case 9
Console.Write("CM")
End Select
'Fijese que el residuo de la division anterior
'se convierte en el nuevo numero de 2 cifras
'cuyo desarrollo es exactamente igual al ejercicio anterior
n = r
d = n \ 10
u = n Mod 10

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

Ing. Juan Jos Or Cerrn 24 Ing. Edgar Rojas Zacaras


Case 4
Console.Write("IV")
Case 5
Console.Write("V")
Case Is < 9
Console.Write("V")
For i = 1 To u - 5
Console.Write("I")
Next
Case 9
Console.Write("IX")
End Select
End Sub

Al ejecutar con Ctrl.+ F5 se obtendr en la consola

PROGRAMA N 11

En este programa intente transformar un nmero en el sistema decimal al sistema binario

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

La solucin es bastante simple:

Ing. Juan Jos Or Cerrn 25 Ing. Edgar Rojas Zacaras


Sub main()
Dim n, c, r, i As Integer
Console.WriteLine("ingrese un numero en el sistema decimal")
n = Console.ReadLine()
Console.WriteLine("El numero en el sistema binario es:")
c = 3
i = 20
Do While c >= 2
c = n \ 2
r = n Mod 2
'controla la impresion en sentido inverso
Console.SetCursorPosition(i, 5)
Console.Write(r)
i = i - 1 'disminuye en uno la coordenada de la columna
n = c
Loop
Console.SetCursorPosition(i, 5)
Console.Write(n) 'el ultimo digito es en realidad el cociente
Console.ReadLine()
End Sub

La consola arroja este resultado:

Hasta la prxima sesin.

Ing. Juan Jos Or Cerrn 26 Ing. Edgar Rojas Zacaras


1.4 FUNCIONES.-

Normalmente se denomina funciones a subprogramas que sirven para realizar ciertos


clculos, lgicamente el cdigo no se puede ver solamente se invoca a travs de su nombre
que previamente se debe de saber, existen diversas funciones y estas se agrupan en:

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.-

Convierta un nmero binario al sistema decimal. Recuerde siempre analizar el problema


antes de intentar solucionarlo

1101 .= (1)*(2)^(3) + (1)*(2)^(2) + (0)*(2)^(1) + (1)*(2)^(0)

Para este ejemplo son 04 Sumandos y es igual a la cantidad de dgitos que tiene el
nmero binario.

El exponente va disminuyendo y el mayor es una unidad menos que la cantidad de


dgitos, termina en cero.

La base; es decir el numero 2 no cambia a menos que se desea convertir a una base
distinta.

Ing. Juan Jos Or Cerrn 27 Ing. Edgar Rojas Zacaras


Seguidamente haremos uso de dos funciones de cadena: LEN, que obtiene la longitud del
numero en binario que se ingrese y MID que obtiene una subcadena de acuerdo a los
parmetros que se le asigne: Su sintaxis es la siguiente.

1.- LEN(cadena)

Ejemplo:

LEN(sistemas)
Da como resultado la cantidad de
caracteres de la cadena es decir 8

2.- MID(cadena, inicio, cantidad)

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.

A continuacin se muestra el cdigo.

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

Ing. Juan Jos Or Cerrn 28 Ing. Edgar Rojas Zacaras


'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

Y resulta:

1.5 AMBITO DE VARIABLES:

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.

A continuacin le presento un modulo que contiene tres procedimientos que lgicamente


empieza por el procedimiento principal sub main( ) fjese que en esta ocasin se definen
variables que son validas para cualquiera de los dos procedimientos:

Ing. Juan Jos Or Cerrn 29 Ing. Edgar Rojas Zacaras


PROGRAMA 13.

Module Module1

Private r, n, m, i, longitud, s, c As Integer


Private bin, ban, j As String

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

Ing. Juan Jos Or Cerrn 30 Ing. Edgar Rojas Zacaras


Sub contrario()
'Ingresar un nombre completo de no mas de 4 palabras y retorna
'en sentido inverso
Dim a(3) As Integer
mbito de
Dim aa, bb, cc, dd As String
Procedimiento
Console.WriteLine("ingrese cadena")
bin = Console.ReadLine()
longitud = Len(bin)
s = 1
For i = 1 To longitud
'Comparo cada caracter con un espacio en blanco
'y las posiciones almaceno en un array
'Se inicia s=1 luego se incrementa s
'Si no hay espacios en blanco s no incrementara
If Mid(bin, i, 1) = " " Then
a(s) = i
s = s + 1
End If
Next
'extaremos cada palabra de la cadena ingresada
'recuerde que en el array se almacena la posicion
'de donde se quiere extraer
aa = Mid(bin, 1, a(1))
bb = Mid(bin, a(1) + 1, a(2) - a(1) - 1)
cc = Mid(bin, a(2) + 1, a(3) - a(2) - 1)
dd = Mid(bin, a(3) + 1, longitud - a(3))
'se imprime las variables dando espacios en blanco entre si
Console.WriteLine(dd + " " + cc + " " + bb + " " + aa)

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

Ing. Juan Jos Or Cerrn 31 Ing. Edgar Rojas Zacaras


1.6 PROGRAMACION PROCEDURAL.

Conjuntamente con la programacin estructurada se desarrollo la programacin procedural


es decir pequeos subprogramas en forma de procedimientos que ayudan de sobremanera
a la escritura de los programas y sobretodo a la correccin de errores; existen dos tipos de
procedimientos: los procedimientos propiamente dichos y las funciones que diramos son
procedimientos especiales, estos ltimos devuelven un valor al programa principal
mientras que los procedimientos no devuelve valor alguno pero si realizan diversas
operaciones que el programador vea conveniente.

Respecto a los procedimientos el autor Francisco Moreno2 dice lo siguiente:

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.

Ahora veamos un ejemplo que tenga que ver con procedimientos:

2
Titulo: Introduccin a la OOP. Versin 1.0.0 Grupo EIDOS

Ing. Juan Jos Or Cerrn 32 Ing. Edgar Rojas Zacaras


PROGRAMA 14.

Este programa realiza 4 operaciones aritmticas pero utilizando el concepto de


programacin procedural donde para cada operacin hay un procedimiento, as el
programa principal esta dentro del SUB MAIN( )

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()

Ing. Juan Jos Or Cerrn 33 Ing. Edgar Rojas Zacaras


End Sub
Sub RESTA()
Dim A, B, C As Single
A = Console.ReadLine()
B = Console.ReadLine()
C = A - B
Console.WriteLine(C)
End Sub

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

Fjese que al elegir la opcin 3 el programa pide 2 nmeros y devuelve el producto.

Ing. Juan Jos Or Cerrn 34 Ing. Edgar Rojas Zacaras


PROGRAMA 15.

Este ejemplo grafica el funcionamiento de la programacin usando funciones que es un


modo especial de procedimiento
Module ejem_funcion
Sub Main()
' en realidad retornamos un valor r a la
'variable j1 para notar su importancia
Dim j1, a, b, r As Integer
a = 4 : b = 5
a = a + b
j1 = prueba()
r = b + j1
Console.WriteLine(r)
End Sub

Function prueba()
Dim r As Integer
r = 19
Return r
End Function

End Module

Ing. Juan Jos Or Cerrn 35 Ing. Edgar Rojas Zacaras


PROGRAMA 16:

Utilizando un concepto de procedimientos podemos mostrar una matriz de 10 x 10 que


muestra el carcter que mas le gusta.

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

Sub mostrar(ByVal a As Integer)


Dim b(a, a), i, j As Integer
For i = 1 To a
For j = 1 To a
Console.SetCursorPosition(3 * j, i)
Console.WriteLine("")
Next
Next
End Sub

End Module

Ing. Juan Jos Or Cerrn 36 Ing. Edgar Rojas Zacaras


PROGRAMA 17.

La ltima utilizando funciones; trate de notar que la funcin devuelve un valor

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

Ing. Juan Jos Or Cerrn 37 Ing. Edgar Rojas Zacaras


1.7 MATRICES

Ciertamente esta parte de la programacin requiere de una concentracin mayor a la que


normalmente estamos acostumbrados, porque tenemos que pensar en ingresar datos en una
matriz, recuperarlos y lgicamente implementar algunos algoritmos de solucin como
encontrar la transpuesta de una matriz o el calculo de la determinante que realmente tiene
cierto grado de dificultad, pero no es mi intencin asustarlo mas bien incrementar sus
ganas de dominar esta parte de la programacin que pertenece a estructura de datos.
Existen matrices3 unidimensionales y matrices bidimensionales:

MATRIZ UNIDIMENSIONAL.
Conocido tambin como vector, normalmente es una matriz de una fila y n columnas. Por
ejemplo una matriz unidimensional es

Cada cuadrado representa un


espacio de memoria donde se
almacenara un dato que podr
a[1,1] ser entero, decimal, cadena,
etc.
a[1,2] Mientras la fila permanece
constante en 1 la columna se
a[1,3] va incrementando de uno en
uno hasta 5.
a[1,4] El nombre de cada casillero se
deja notar a travs de la flecha
a[1,5]

Se lee: matriz de una fila y 5 columnas

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

Ing. Juan Jos Or Cerrn 38 Ing. Edgar Rojas Zacaras


A(5)=A(0), A(1), A(2), A(3), A(4), A(5)

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.

Bueno a los ejemplos estos contendrn en su mayora Arrays bidimensionales y en


algunos casos programacin procedural.

Ing. Juan Jos Or Cerrn 39 Ing. Edgar Rojas Zacaras


PROGRAMA 18.

No podramos empezar sino con una simple suma de matrices de 3x3

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

Ing. Juan Jos Or Cerrn 40 Ing. Edgar Rojas Zacaras


PROGRAMA 19.

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

Ing. Juan Jos Or Cerrn 41 Ing. Edgar Rojas Zacaras


For j = 1 To 3
c(i, j) = a(i, z) * b(z, j) + a(i, z + 1) * b(z + 1, j)_
+ a(i, z + 2) * b(z + 2, j)
Console.SetCursorPosition(3 * j, i + 12)
Console.WriteLine(c(i, j))
Next
z = 1
Next
End Sub
End Module

PROGRAMA 20.

Ahora toca una operacin en matrices referente a la transpuesta de matrices.

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)

Ing. Juan Jos Or Cerrn 42 Ing. Edgar Rojas Zacaras


a(i, j) = Console.ReadLine()
'Este contador hace que se genere un espacio entre los elemetos de la
matriz
b = b + 3
Next
'Sirve para que la segunda fila de la matriz empieze en la posicion uno
de la pantalla
b = 1
Next

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

Ing. Juan Jos Or Cerrn 43 Ing. Edgar Rojas Zacaras


PROGRAMA 21.

Y este programita calcula la determinante de una matriz de 3x3.

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

Ing. Juan Jos Or Cerrn 44 Ing. Edgar Rojas Zacaras


'multiplica por la ley de sarrus
'y es el algoritmo principal
k = 0
p = 1
p1 = 0
For j = 1 To 3
For i = 1 To 3
k = k + 1
p = p * b(i, k)
Next
p1 = p1 + p
k = k - 2
p = 1
Next
Console.WriteLine(p1)
p = 1
k = 0
For j = 1 To 3
For i = 3 To 1 Step -1
k = k + 1
p = p * b(i, k)
Next
p2 = p2 + p
k = k - 2
p = 1
Next
Console.WriteLine(p2)
Console.WriteLine("la determinate es:")
Console.WriteLine(p1 - p2)
End Sub
End Module

Ing. Juan Jos Or Cerrn 45 Ing. Edgar Rojas Zacaras


PROGRAMA 22.
Para finalizar esta entrega realicemos un programa que grafica 4 ventanas

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

Ing. Juan Jos Or Cerrn 46 Ing. Edgar Rojas Zacaras


'Este ultimo for grafica la x que une a los cuadrados
For i = 20 To 30
Console.SetCursorPosition(i, i)
Console.WriteLine("@")
Console.SetCursorPosition(i, 30 - A)
Console.WriteLine("@")
A = A + 1
Next
Console.ReadLine()
End Sub
End Module

Ing. Juan Jos Or Cerrn 47 Ing. Edgar Rojas Zacaras


Capitulo 2

Programacin orientada a objetos

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.

Ing. Juan Jos Or Cerrn 48 Ing. Edgar Rojas Zacaras


Las principales novedades que incorpora son:

- La herencia, tan solicitada por miles de programadores.


- Desarrollo de programas con mltiples hilos de ejecucin.
- Control estructurado de excepciones.
- Inicializadores, que permiten establecer los valores iniciales de las variables.

2.1 MBITOS CON NOMBRE

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

Ing. Juan Jos Or Cerrn 49 Ing. Edgar Rojas Zacaras


End Class
End Namespace
End Namespace

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

Una alternativa a esta composicin de referencias cualificadas consiste en utilizar la sentencia


Imports, seguida del mbito cuya referencia no deseamos repetir continuamente. El resultado sera,
como se puede ver a continuacin, un cdigo ms legible.

Imports Espacio1.Espacio2
Class UsaHolaMundo
Shared Sub Main()
Dim MiHolaMundo As HolaMundo = New HolaMundo()
End Sub
End Class

2.2 CLASES

En la programacin orientada a objetos (POO), utilizamos los objetos para encapsular la


informacin asociada a las entidades con las que trabaja el programa. Una clase es un molde que
define los atributos y comportamientos de los objetos que se crean como instancias de esta clase.
En Visual Basic .NET, la definicin de clase es muy similar a la definicin de la misma en

Ing. Juan Jos Or Cerrn 50 Ing. Edgar Rojas Zacaras


cualquier lenguaje orientado a objetos. Esta versin .NET incluye como novedad que no es
necesario crear un mdulo independiente para cada clase.
Una clase puede ser base de otra, as como estar derivada de otra. En ella, puede definirse su
comportamiento -mtodos- , sus atributos -propiedades-, campos de datos y eventos, e incluso
anidar unas clases dentro de otras.

Public class ClaseBase


...
End class

2.4 CAMPOS DE DATOS DE LA CLASE

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.

Destacan al mismo tiempo otros modificadores:

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.

Public class ClaseBase


Dim AmbitoDefecto As Integer

Ing. Juan Jos Or Cerrn 51 Ing. Edgar Rojas Zacaras


Private AmbitoPrivado As Integer
Protected AmbitoProtegido As Integer
Friend AmbitoInterno As Integer
Protected Friend AmbitoProtegidoeInterno As Integer
Public AmbitoPublico As Integer
End class

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.

2.5 PROPIEDADES DE LA CLASE

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

Ing. Juan Jos Or Cerrn 52 Ing. Edgar Rojas Zacaras


Return Pnombre
End Get
End Property
// La propiedad Departamento puede leerse y escribirse, al igual que sucede con
Idempleado.
Public Property Departamento() As String
Get
Return Pdepartamento
End Get
Set (ByVal Value As String)
Pdepartamento = Value
End Set
End Property
End Class

2.6 MTODOS DE LA CLASE

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

Ing. Juan Jos Or Cerrn 53 Ing. Edgar Rojas Zacaras


ElseIf Pnombre = Jesus And Pdireccion = Salamanca Then
Pidempleado = 2
Departamento = AC
Else
Throw New Exception (Acceso incorrecto.)
End If
End Sub

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.

2.7. EVENTOS DE LA CLASE

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:

Public Event SalarioError (ByVal Error As String)


Una vez se le ha indicado a la clase la posibilidad de producirse un evento, es necesario
introducir el cdigo para producir el evento:
Public Property Salario( ) As Decimal
Get
Return Psalario
End Get
Set (ByVal Valor As Decimal)
If Valor >= 0 Then
Psalario = Valor
Else
RaiseEvent SalarioError ( Salario no puede ser
negativo.)
End If
End Set
End Property

Ing. Juan Jos Or Cerrn 54 Ing. Edgar Rojas Zacaras


2.8. CONSTRUCTORES Y DESTRUCTORES

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)

Obsrvese que el destructor es un procedimiento protegido, ya que no es accesible desde el


exterior de la clase y se ejecuta automticamente Visual Basic .NET permite el uso de miembros
compartidos que no pertenecen a un objeto en particular, sino a toda la clase, por lo que son
creados la primera vez que es utilizada la clase y no cada vez que se crea un objeto. Para ello
disponemos del concepto de constructor de clase, el cual no puede tomar parmetros y cuyo

Ing. Juan Jos Or Cerrn 55 Ing. Edgar Rojas Zacaras


nico modificador posible, obligatorio adems, es Shared. Este constructor nicamente se ejecuta
cuando se aloja la clase en memoria.

2.9 CLASES ANIDADAS

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

Ing. Juan Jos Or Cerrn 56 Ing. Edgar Rojas Zacaras


End Class
//Creamos una que contenga el Main()
Class Principal
Shared Sub Main()
Dim MiAgenda As Agenda = New Agenda()
Console.WriteLine(Objeto creado)
MiAgenda = Nothing
Console.WriteLine(Fin de la aplicacin)
End Sub
End Class

El resultado que se obtendra por pantalla sera:


Constructor de Agenda
Constructor de la Clase Anotacin
Constructor de Nueva Anotacin
Objeto creado
Fin de la aplicacin
Destructor de Anotacin

2.10 JERARQUA DE CLASES

La herencia es una de las funciones ms potentes y fundamentales de cualquier lenguaje de


programacin orientado a objetos, ya que es posible crear una clase base que encapsule las
propiedades y mtodos que sern necesarios en mltiples clases derivadas del mismo tipo. Otra de
estas caractersticas fundamentales es el polimorfismo, gracias al cual se pueden definir en una
clase base mtodos que sern implementados por las clases que se deriven de ella.

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:

Ing. Juan Jos Or Cerrn 57 Ing. Edgar Rojas Zacaras


Public Class Cuenta
Public PnumeroCuenta As Long
Public Property NumeroCuenta() As Long
Get
Return PnumeroCuenta
End Get
Set (ByVal Value As Long)
PnumeroCuenta = Value
End Set
End Property
Public Function HacerBalance () As Double
//Cdigo para obtener el balance de la cuenta de la base de datos.
End Function
End Class
Public Class CuentaCorriente
Inherits Cuenta
Private MinBalance As Double
Public Sub Retirar (ByVal Cantidad As Double)
//Cdigo para retirar dinero de la cuenta.
End Sub
End Class
Dim Ahorros As CuentaCorriente = New CuentaCorriente ()
Ahorros.NumeroCuenta = 2000
Ahorros.HacerBalance = () //Mtodo definido por la clase Cuenta heredado
//Por la clase CuentaCorriente.
Ahorros.Retirar (500) //Mtodo definido por la clase CuentaCorriente.

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.

Ing. Juan Jos Or Cerrn 58 Ing. Edgar Rojas Zacaras


Por defecto, todas las clases pueden tener herencia. Si no se tiene cuidado, es posible que
generemos cadenas de herencia muy complicadas que resultan difciles de administrar y depurar.
Utilizando el modificador NotInheritable, es posible crear clases con la total certeza de que no
darn lugar a clases derivadas. Este tipo de clases suele denominarse clase sellada o final.
Ejemplo:
Public NotInheritable Class 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.

Public Class Cuenta


Public Sub Retirar (ByVal Cantidad As Double)
//Cdigo de implementacin
End Sub
End Class
Public Class CuentaCorriente
Inherits Cuenta
Public Overloads Sub Retirar (ByVal Cantidad As Double,
ByVal MinnumBalance As Double)
//Cdigo de implementacin
End Sub
End Class

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.

Ing. Juan Jos Or Cerrn 59 Ing. Edgar Rojas Zacaras


Para poder reemplazar un mtodo heredado en la clase derivada, usamos la palabra clave

Overrides en la definicin del mismo.


Public MustInherit Class Cuenta
Public MustOverride Function ObtenerInfoCuenta () As String
End Class
Public Class CuentaCorriente Inherits Cuenta
Public Overrides Function ObtenerInfoCuenta () As String
Return Imprimiendo informacin de cuenta corriente
End Function
End Class
Public Class CuentaAhorro Inherits Cuenta
Public Overrides Function ObtenerInfoCuenta () As String
Return Imprimiendo informacin de cuenta de ahorros
End Function
End Class

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:

Public Interface ICuenta


Function ObtenerInfoCuenta () As String
End Interface
Public Class CuentaCorriente Implements ICuenta
Public Function ObtenerInfoCuenta () As String Implements
ICuenta.ObtenerInfoCuenta
Return Imprimiendo informacin de cuenta corriente
End Function
End Class
Public Class CuentaAhorro Implements ICuenta
Public Function ObtenerInfoCuenta () As String Implements
ICuenta.ObtenerInfoCuenta
Return Imprimiendo informacin de cuenta de ahorros
End Function
End Class

Ing. Juan Jos Or Cerrn 60 Ing. Edgar Rojas Zacaras


APLICACIN: VISUALIZACION DE NOTAS DE EXAMENES PARCIALES

Formulario al inicio de la consulta

Ingreso del Cdigo del Alumno

Visualizacin de la s Notas obtenidas por el alumno

Ing. Juan Jos Or Cerrn 61 Ing. Edgar Rojas Zacaras


APLICACIN: VISUALIZACION DE LA BIBLIOGRAFIA EXISTENTE EN LA
BIBLIOTECA ESPECIALIZADA

Formulario de los libros disponibles en la Biblioteca especializada.

Al seleccionar uno de los libros de la lista automticamente aparecen los datos


adjuntos del libro

Ing. Juan Jos Or Cerrn 62 Ing. Edgar Rojas Zacaras


Luego de registrar el libro el sistema le informa que la reserva fue un xito

Ing. Juan Jos Or Cerrn 63 Ing. Edgar Rojas Zacaras


BIBLIOGRAFIA

Francisco Charte Ojeda. Microsoft Visual Basic .NET Ediciones Anaya Multimedia
(Grupo Anaya, S.A.). 2001.

Dan Clark. Introduccin a la Programacin Orientada a Objetos con Visual Basic


.NET Ediciones Anaya Multimedia (Grupo Anaya, S.A.). 2003.

Luis Miguel Blanco. Programacin en Visual Basic .NET Editorial Eidos. 2002.

Luis Joyanes Aguilar Introduccin a la programacin Editorial Mc Graw Hill 2000

Web Site. http://guille.costasol.net/NET/cursoVB.NET

Ing. Juan Jos Or Cerrn 64 Ing. Edgar Rojas Zacaras

Anda mungkin juga menyukai