Está en la página 1de 68

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 35 -

PRACTICA 2 PROGRAMACION ORIENTADA A OBJETOS

End Sub
End Module
10 Tablas de Verdad
Module Module1
Dim p As Integer
Dim q As Integer
Sub Main()
Console.WriteLine(" p q
And Or Xor Not p")
For p = 0 To 1
For q = 0 To 1
Console.WriteLine(" {0} {1} {2}
Next
Next
Console.ReadLine()
End Sub
End Module

{3} {4}

{5}", p, q, p And q, p Or q, p Xor q, Not p)

11 Ejercicio de While...End While


Se trata del tipo ms sencillo, ejecuta las lneas de cdigo que contiene, mientras que
la expresin situada junto a While devuelva Verdadero.

Module Module1
Sub Main()
Dim Valor As Integer
Dim Contador As Integer
Console.Write("Introducir un nmero")
Valor = Console.ReadLine()
Console.WriteLine("Mostrar en consola todos los nmeros desde 1 hasta el
introducido ")
While Contador < Valor
Console.Write("-" & Contador)
Contador += 1
End While
Console.ReadLine()

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 36 -

End Sub
End Module
12 Aplicacin de do while
Option Strict On
Module Module1
Sub Main()
Dim i As Integer = 5
Do While i > 0
Console.WriteLine(i)
i -= 1
Loop
Console.Read()
End Sub
End Module
13 For Each...Next
Se trata de una variante de la estructura For...Next, y su misin consiste en ejecutar un
bloque de cdigo por cada uno de los elementos existentes en un array o coleccin.
Module Module1
Sub Main()
' crear un array y rellenarlo con valores
Dim lsColores() As String = {"Azul", "Verde", "Marino", "Violeta"}
Dim lsColor As String
' en cada iteracin se obtiene un elemento
' del array lsColores, y se guarda en la variable lsColor
For Each lsColor In lsColores
Console.WriteLine(lsColor)
Next
Console.ReadLine()
End Sub
End Module
1 - Funciones para el tratamiento de cadenas
A continuacin las mas importantes de ellas.
1.1 - Funcin Lcase y Ucase
La funcin Lcase cambia o convierte una cadena de texto a minscula
La funcin Ucase convierte el contenido de una cadena a maysculas.

Module Module1

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 37 -

Sub Main()
Dim cadena As String
Console.Write("Ingrese una cadena ")
cadena = Console.ReadLine
Console.WriteLine("Cadena en Mayusculas {0} ", UCase(cadena))
Console.WriteLine("Cadena en Minusculas {0} ", LCase(cadena))
Console.ReadLine()
End Sub
End Module
1.2 - Funcin Trim, LTrim y RTrim
Estas tres funciones se utilizan para eliminar los espacios vacos de una cadena.
LTrim elimina los espacios vacos de la parte izquierda de la cadena, RTrim de la parte
derecha y Trim de ambas partes.
1.3 - Funcin Len
La funcin Len nos permite conocer la cantidad de caracteres que tiene una
determinada cadena. O sea que esta funcin nos devuelve un nmero.

Module Module1
Sub Main()
Dim cadena As String
cadena = " HOLA PERU "
Console.WriteLine("Cadena en original {0} len {1}", cadena, Len(cadena))
Console.WriteLine(" LTrim(cadena) {0} len {1} ", LTrim(cadena),
Len(LTrim(cadena)))
Console.WriteLine(" RTrim(cadena) {0} len {1}", RTrim(cadena),
Len(RTrim(cadena)))
Console.WriteLine(" Trim(cadena) {0} len {1}", Trim(cadena), Len(Trim(cadena)))
Console.ReadLine()
End Sub
End Module
1.4 - Funcin Asc y Chr
La funcin Asc nos permite obtener el cdigo ASCII de un de terminado caracter.
La Funcin Chr acta a la inversa de la funcin Asc, esto quiere decir, que a partir de
un determinado nmero nos devolver el caracter ASCII.
Module Module1
Dim letra As Char
Dim num As Integer
Sub Main()

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 38 -

Console.Write("Ingrese una letra")


letra = Console.ReadLine
Console.WriteLine("el codigo de la letra es {0}", Asc(letra))
Console.Write("Ingrese un numero")
num = Console.ReadLine
Console.WriteLine("el caracter asociado es {0}", Chr(num))
Console.ReadLine()
End Sub
End Module
1.5 - Funcin InsTr
La funcin InStr se utiliza para buscar una cadena o parte de una cadena dentro de
otra cadena.
Si la funcin encuentra la cadena a buscar devuelve un nmero que representa la
posicin donde encontr la cadena, si no la encuentra devuelve un 0.
Los parmetros que lleva esta funcin son:
InStr (comienzo, Cadena donde buscar , La Cadena a buscar)

Module Module1
Dim posicion As Integer
Sub Main()
posicion = InStr(3, " El perro salta {0}", "salta")
Console.WriteLine("posicion de la subcadena {0}", posicion)
Console.ReadLine()
End Sub
Funcin Left, Right y Mid
Estas funciones son utilizadas para extraer partes de una cadena.
La funcin Left: tiene 2 parmetros: El primero es la cadena de la cual se extraern
caracteres, y el segundo un nmero desde el cual comenzar a extraer caracteres desde
la parte izquierda.
Funcin Right: Es igual que la funcin Left pero comienza a extraer caracteres desde
el lado derecho de la cadena.
La funcin Mid: Tiene la misma funcin que las anteriores pero posee tres
parmetros.
Su sintaxis es: Mid (cadena, inicio, longitud)

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 39 -

El parmetro cadena es la cadena a extraer caracteres. El parmetro Inicio es donde


comenzar y el parmetro longitud, es la cantidad de caracteres a extraer de la cadena
de caracteres

Module Module1
Dim posicion As Integer
Sub Main()
Dim Cadena As String = "INGENIERIA INDUSTRIAL"
Console.WriteLine(" cadena original {0} :", Cadena)
Console.WriteLine(" 5 caracteres a la izqueirda {0} :", Left(Cadena, 5))
Console.WriteLine(" 5 caracteres a la derecha {0} :", Right(Cadena, 5))
Console.WriteLine(" mid( cadena, 5,4 ) {0} :", Mid(Cadena, 5, 4))
Console.ReadLine()
End Sub
End Module
1.6 - Funcin Str y Val
La funcin Val convierte una cadena en un nmero y la funcin Str un nmero en una
cadena.
Module Module1
Dim cadena As String
Dim cadena2 As String
Sub Main()
cadena = "123456"
Cadena = Val(Cadena)
cadena2 = 123456
cadena2 = Str(cadena2)
Console.ReadLine()
End Sub
End Module

'Ahora cadena vale 123456


'Ahora cadena2 vale "123456"

2 - Funciones para el tratamiento de nmeros


2.1 - Funcin Round
La funcin Round se utiliza para redondear un nmero decimal, a un nmero de
decimales especificados

Module Module1
Sub Main()
Dim pi As Single = 3.1416
Console.WriteLine("round (3.1416 2 ={0} ", Math.Round(pi, 2))

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 40 -

Console.WriteLine("round (3.1416 3={0} ", Math.Round(pi, 3))


Console.ReadLine()
End Sub
End Module
Round posee un parmetro opcional por si queremos incluir los dgitos decimales.
2.2 - Rnd y Randomize - Nmeros aleatorios
Para generar nmeros aleatorios, Visual Basic incluye 2 funciones: Rnd y Randomize.
La funcin Rnd devuelve un nmero aleatorio, y esta posee un solo parmetro.
En el ejemplo se genera numeros aleatorios entre dos limites
Module Module1
Sub Main()
Dim LimiteInferior As Integer = 20
Dim LimiteSuperior As Integer = 40
Randomize()
Console.WriteLine(LimiteInferior + Int((LimiteSuperior LimiteInferior + 1) * Rnd()))
Console.ReadLine()
End Sub
End Module

Funciones matemticas
Las principales funciones matemticas provistas por Visual Basic son:
Abs: Devuelve el valor absoluto de una expresin numrica.
Atn: Devuelve el arco tangente de un nmero.
Cos: Devuelve el coseno de un ngulo.
Exp: Devuelve el nmero "e" elevado a una potencia.
Log: Devuelve el logaritmo natural de un nmero.
Sgn: Devuelve un valor indicando el signo de un nmero.
Sin: Devuelve el seno de un ngulo.
Sqr: Devuelve la raz cuadrada de un nmero.
Tan: Devuelve la tangente de un ngulo.
Ejemplo de funciones matematicas
Calcule la raiz cuadrada cubica de los primeros 10 nmeros
Module Module1
Dim x As Single
Sub Main()
Console.WriteLine(" Nro Raiz cuadrada raiz cubica ")
For x = 1 To 10
REM Console.WriteLine(Format("##.##", x))
Console.WriteLine("
{0}
{1}
{2}", Format(x,
"0#"), Format(Math.Sqrt(x), "#0.00"), Format(x ^ 0.333, "#0.0000"))
Next
Console.ReadLine()
End Sub
End Module

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 41 -

3 - Funciones de formato
Visual Basic posee varias funciones para darle formato a distintos tipos de datos e
informacin. A continuacin se ve algunos ejemplos de las principales funciones:

FormatCurrency: Esta funcin se utiliza para trabajar con nmeros con formato
en dinero. Ejemplo: si tenemos un nmero 3 y utilizamos la funcin nos
devolvera "$3".
FormatPercent: Esta funcin es utilizada para trabajar con porcentajes. Ejemplo
: si tendramos un nmero 321, nos devolvera: "32,1%" .
FormatDateTime: Esta funcin trabaja con fechas y horas.
FormatNumber: Formatea expresiones nmeros

Module Module1
Dim resultado As Object
Sub Main()
resultado = FormatPercent(321) 'devuelve: "32.100,00%"
Console.WriteLine("fomato % {0} ", resultado)
resultado = FormatCurrency(3) 'devuelve: "$3,00"
Console.WriteLine("fomato Currency {0} ", resultado)
resultado = FormatDateTime("6-8-1978") 'La funcin devolvera: "06/08/1978"
Console.WriteLine("fomato fecha {0} ", resultado)
resultado = FormatCurrency(325, 3) 'Devuelve: "$325,000"
Console.WriteLine("fomato currency {0} ", resultado)
Console.ReadLine()
End Sub
End Module
NumDigitsAfterDecimal: Parmetro de tipo opcional. Este indicar cuantos nmeros
decimales devolver la funcin:
Ejemplo de la funcin FormatDateTime

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 42 -

Esta funcin, en el primer parmetro se le debe pasar la fecha u hora a formatear, y el


segundo parmetro es el tipo de formato, pueden ser 5 tipos.
vbGeneralDate, vbLongDate, vbShortDate, vbLongTime y vbShortTime.
Funcin Format:
La funcin Format es mas completa que las anteriores funciones, porque puede
manejar mas tipos de datos, y no devuelve solo cadenas, esta tambin puede devolver
nmeros y fechas.
La funcin Format posee dos parmetros:
Format (Expresin, formato)
En el primero debemos colocar cualquier expresin vlida. El segundo es opcional y a
continuacin veremos una descripcin de los formatos de VB:

GeneralNumber: Devuelve el nmero sin formato.


Currency: Devuelve el nmero en formato moneda, con el smbolo "$" y 2
decimales a las derecha.
Fixed: Devuelve como mnimo un dgito a la izquierda y 2 ala derecha del
decimal.
Standar: Similar a Fixed pero incluye un separador de miles.
Percent: Multiplica el nmero por cien y le agrega el smbolo "%"
True/False: Devuelve Verdadero para un valor distinto de 0,y Falso para 0.
On/OFF: Devuelve "Activado" para un valor distinto de 0, y "Desactivado" para 0.

La forma de pasar el parmetro es entre comillas.


Ejemplo:
Module Module1
Dim resultado As Object
Sub Main()
resultado = Format(75, "Currency") ' Devolvera: "$75,00"
Console.WriteLine(resultado)
Console.ReadLine()
End Sub
End Module
Nota: Si ingresamos un nmero decimal, debemos utilizar el "." y no la coma "," ya que
la coma determina el comienzo de otro parmetro dentro de la funcin y Visual basic
dara error de sintaxis
4 - Funciones de formato para fechas y hora
Ejemplos de los principales Formatos con nombre para el manejo de Fechas y Horas:

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 43 -

Module Module1
Dim resultado As Object
Sub Main()
Dim cadena As String
cadena = Format("06/08/78", "General Date") ' Devuelve: "06/08/1978"
Console.WriteLine(cadena)
cadena = Format("19/08/79", "Long Date") ' Devuelve : "Jueves 19 de Agosto de 1979".
Console.WriteLine(cadena)
cadena = Format("19/8/79", "Medium Date") ' Devuelve: "19-Ago-1979"
Console.WriteLine(cadena)
cadena = Format("17:08", "Short Time") ' "05:08"
Console.WriteLine(cadena)
cadena = Format("17:08", "Medium Time") ' "05:08 PM"
Console.WriteLine(cadena)
cadena = Format("17:08", "Long Time") ' "05:08:00 PM"
Console.WriteLine(cadena)
Console.ReadLine()
End Sub
End Module
FUNCIONES DE FECHA Y HORA

TimeString,, regresa la hora actual del sistema.

DateString, regresa la fecha actual del sistema.

Now, regresa un valor codificado que representa la hora y fecha actual del
sistema.

Hour(hora), regresa el nmero de hora actual del sistema.

Minute(hora), regresa el nmero de minuto actual del sistema.

Second(hora), regresa el nmero del segundo actual del sistema.

Day(fecha), regresa el nmero del da actual del sistema.

Month(fecha), regresa el nmero de mes actual del sistema.

Year(fecha), regresa el ao actual del sistema.

Weekday(fecha), regresa el nmero que representa el da de la semana. (1 =


Domingo, 2 = Lunes, ...).

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 44 -

Module Module1
Sub Main()
Console.WriteLine(" Timestring {0} ", TimeString)
Console.WriteLine(" DateSring {0} ", DateString)
Console.WriteLine(" DateSring {0} ", DateString)
Console.WriteLine(" Now {0} ", Now)
Console.WriteLine(" Hour(Now) {0} ", Hour(Now))
Console.WriteLine(" Minute(Now) {0} ", Minute(Now))
Console.WriteLine(" Second(Now) {0} ", Second(Now))
Console.WriteLine(" day text {0} ", Microsoft.VisualBasic.DateAndTime.Day(Now))
Console.WriteLine(" Month(Now) {0} ", Month(Now))
Console.WriteLine(" Year(Now) {0} ", Year(Now))
Console.WriteLine(" weekday(Now) {0} ", Weekday(Now))
Console.ReadLine()
End Sub
End Module
ARREGLOS
1-Inicializar un arreglo y luego mostrarlo
Module Module1
Dim n As Integer = 2
Dim i As Integer
Dim nombres() As String = {"Pepe", "Juan", "Luisa"}
Sub Main()
Console.WriteLine(" los nombres son ")
For i = 0 To n
Console.Write(" {0}", nombres(i))
Next
Console.ReadLine()
End Sub
End Module
1. Arreglo de dos dimensiones
Module Module1
Dim nombres(,) As String = {{"Juan", "Pepe", "Carlos"}, {"Ana", "Eva", "Maria"}}
Dim fila As Integer
Dim col As Integer
Sub Main()

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca


Console.WriteLine(" los nombres en la matriz son ")
For fila = 0 To 1
Console.WriteLine()
For col = 0 To 2
Console.Write(" {0}", nombres(fila, col))
Next
Next
Console.ReadLine()
End Sub
End Module

2. Ingresar n nmeros a un arreglo y luego mostrarles


a) Sin funciones
Module Module1
Dim Vector(10) As Single
Dim i As Integer
Dim n As Integer = 0
Dim nro As Single
Sub Main()
Console.Write(" ingrese cantidad de numeros ")
n = Console.ReadLine()
Console.Write(" ingrese{0} numeros ", n)
For i = 1 To n
nro = Console.ReadLine()
Vector(i) = nro
Next
Console.WriteLine(" los numeros ingresados son ")
For i = 1 To n
Console.Write(" {0} ", Vector(i))
Next
Console.ReadLine()
End Sub
End Module

- 45 -

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 46 -

b) Con funciones
Module Module1
Sub ingresar(ByRef a() As Single, ByRef n As Integer)
Dim i As Integer
Dim nro As Single
Console.Write(" ingrese cantidad de numeros ")
n = Console.ReadLine()
Console.WriteLine(" ingrese {0} numeros ", n)
For i = 1 To n
nro = Console.ReadLine()
a(i) = nro
Next
End Sub
Sub mostrar(ByVal a() As Single, ByVal n As Integer)
Dim i As Integer
For i = 1 To n
Console.Write(" {0} ", a(i))
Next
End Sub
Sub Main()
Dim Vector(10) As Single
Dim i As Integer
Dim n As Integer = 0
ingresar(Vector, n)
Console.WriteLine(" los numeros ingresados son ")
mostrar(Vector, n)
Console.ReadLine()
End Sub
End Module
3. Modificacin de tamao en arreglos
ReDim no toma el array existente y modifica su nmero de elementos, sino que
internamente crea un nuevo array con el nmero de elementos indicado, por lo que se
pierden los valores del array previo.
Para solucionar este inconveniente, debemos utilizar junto a ReDim, la palabra clave
Preserve.

Module Module1
Dim i As Integer
Sub Main()
' array con 4 elementos: de 0 a 3
Dim Nombres(3) As String
' asignar valores al array
Nombres(0) = "Ana"

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 47 -

Nombres(1) = "Pedro"
Nombres(2) = "Antonio"
Nombres(3) = "Laura"
' ampliamos el array con 6 elementos: de 0 a 5
ReDim Preserve Nombres(5)
For i = 1 To 5
Console.Write(" {0} ", Nombres(i))
Next
Console.ReadLine()
End Sub
End Module
5 Ingrese los vrtices del un tringulo, muestre los puntos ingresados y el centro
Module Module1
Dim x1 As Integer, y1 As Integer
Dim x2 As Integer, y2 As Integer
Dim x3 As Integer, y3 As Integer
Dim xmed As Integer, ymed As Integer
Sub Main()
Console.Write("Ingrese Coordenada x1 y1 ")
x1 = Console.ReadLine()
y1 = Console.ReadLine()
Console.Write("Ingrese Coordenada x2 y2 ")
x2 = Console.ReadLine()
y2 = Console.ReadLine()
Console.Write("Ingrese Coordenada x3 y3 ")
x3 = Console.ReadLine()
y3 = Console.ReadLine()
xmed = (x1 + x2 + x3) / 3
ymed = (y1 + y2 + y3) / 3
Console.BackgroundColor = ConsoleColor.Yellow
Console.ForegroundColor = ConsoleColor.Blue
Console.CursorLeft = x1
Console.CursorTop = y1
Console.Write("*")
Console.CursorLeft = x2
Console.CursorTop = y2
Console.Write("*")
Console.CursorLeft = x3
Console.CursorTop = y3
Console.Write("*")
Console.BackgroundColor = ConsoleColor.Green
Console.ForegroundColor = ConsoleColor.Red
Console.CursorLeft = xmed
Console.CursorTop = ymed
Console.Write("*")
Console.ReadLine()
End Sub
End Module
ARCHIVOS

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 48 -

1. Escritura de un archivo
Imports System.IO
Module Module1
Sub Main()
Dim swEscritor As StreamWriter
' creamos un stream de escritura, y al mismo tiempo un
' nuevo archivo para escribir texto sobre l
swEscritor = New StreamWriter("C:\MISDATOS\NOTAS.txt")
' escribir lneas
swEscritor.WriteLine("esta es la primera lnea")
swEscritor.WriteLine("segunda lnea de texto")
' ahora escribimos texto pero sin provocar un salto de lnea
swEscritor.Write("Juan y Luna ")
swEscritor.Write("van de paseo")
swEscritor.Write(swEscritor.NewLine) ' esto introduce el salto de
lnea
swEscritor.WriteLine("con esta lnea cerramos")
' cerrar el stream y el archivo asociado
swEscritor.Close()
End Sub
End Module

2 Lectura de un Archivo
Imports System.IO
Module Module1
Sub main()
' leer lnea a lnea mediante un bucle
Dim srLector As StreamReader = New
StreamReader("C:\MISDATOS\NOTAS.txt")
Dim Linea As String
Dim ContadorLin As Integer = 1
Console.WriteLine("lectura de archivos")
LInea = srLector.ReadLine()
Do While Not (Linea Is Nothing)
Console.WriteLine("Lnea: {0} - Contenido: {1}", ContadorLin, Linea)
ContadorLin += 1
Linea = srLector.ReadLine()
Loop
Console.ReadLine()
End Sub
End Module

FUNCIONES DE VARIABLES DE POO


1 La funcin compareTo

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca


Module Module1
Sub Main()
Dim i As Integer = 0
Dim j As Integer = 1
Dim r As Integer
r = i.CompareTo(j)
Console.WriteLine(r)
Console.Read()
End Sub
End Module
R = 1 se i>J
R=0 si I=j
R=-1 si I>j
2

La funcin equal

Option Strict On
Module Module1
Sub Main()
Dim i As Integer = 8
Dim j As Integer = 10
Dim r As Boolean
r = i.Equals(j)
Console.WriteLine(r)
Console.Read()
End Sub
End Module
False
3 Gettype : indica el tipo de objeto
Minvalue : minimo valor
Maxvalue: mximo valor
Module Module1
Sub Main()
Dim i As Integer = 10
Console.WriteLine(" i es de tipo de dato {0}", i.GetType)
Console.WriteLine(" su maximo valor es {0}", i.MaxValue)
Console.WriteLine(" Su minimo valor es {0}", i.MinValue)
Console.WriteLine(" Su valor actual es {0}", i)
Console.Read()
End Sub
End Module

- 49 -

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 50 -

4 FUNCION PARSE
Convierte una cadena que representa un nmero entero a un entero
Module Module1
Sub Main()
Dim i As Integer
Dim valor As String = "31000"
i = Integer.Parse(valor)
Console.WriteLine(" opcion 1 = {0}", i)
i = i.Parse(valor)
Console.WriteLine(" opcion 2 = {0}", i)
Console.Read()
End Sub
End Module

Convertir una cadena a un nmero real


Module Module1
Sub Main()
Dim X As Single
Dim valor As String = "3.1416"
X = Single.Parse(valor)
Console.WriteLine(" opcion 1 = {0}", X)
X = X.Parse(valor)
Console.WriteLine(" opcion 2 = {0}", X)
Console.Read()
End Sub
End Module

5 ToString Convierte un numero a cadena ( los nmeros tambien pueden ser reales)
Module Module1
Sub Main()
Dim i As Integer = 45
Dim valor As String
valor = i.ToString()
Console.WriteLine(" El valor de cadena es {0}", valor)
Console.Read()
End Sub
End Module

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 51 -

6 EJEMPLO DE PARAMETROS OPCIONALES


Module Module1
Function sumar(Optional ByVal n1 As Single = 2, Optional ByVal n2 As Single = 3) As
Single
Return n1 + n2
End Function
Sub Main()
Dim n1 As Single = 10, n2 As Single = 20
Console.WriteLine("funcion sin parametros {0} ", sumar())
Console.WriteLine("funcion con un parametro {0} {1} ", n1, sumar(n1))
Console.WriteLine("funcion con dos parametros {0} {1} {2} ", n1, n2, sumar(n1, n2))
Console.ReadLine()
End Sub
End Module

Se ingresa dos numeros separados por comas (conversin de cadenas)

Module Module1
Dim cadena As String
Dim x1 As Single
Dim y1 As Single
Dim pos As Integer
Sub Main()
Console.Write("ingrese x1,y1 ")
cadena = Console.ReadLine
pos = InStr(cadena, ",")
x1 = Mid(cadena, 1, pos - 1)
y1 = Mid(cadena, pos + 1, Len(cadena))
Console.Write(" x= {0} y ={1}", x1, y1)
Console.CursorLeft = x1
Console.CursorTop = y1
Console.Write("*")
Console.ReadLine()
End Sub
End Module

PROGRAMACION ORIENTADA A OBJETOS (OOP)

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 52 -

Vb . Net es un lenguaje orientado a objetos.


Las ventajas de la programacin orientada a objeto
una evolucin de la programacin procedural basada en funciones, que permite
agrupar elementos de cdigo (rutinas y datos) con funcionalidades similares, bajo un
sistema unificado de manipulacin y acceso a dichos elementos.
Objetos
Un objeto es una agrupacin de cdigo, compuesta de propiedades y mtodos, que
pueden ser manipulados como una entidad independiente.
Las propiedades definen los datos o informacin del objeto, permitiendo consultar o
modificar su estado; mientras que los mtodos son las rutinas que definen su
comportamiento.
Un objeto es una pieza que se ocupa de desempear un trabajo concreto dentro de
una estructura organizativa de nivel superior, formada por mltiples objetos, cada uno
de los cuales ejerce la tarea particular para la que ha sido diseado.
Clases
Una clase no es otra cosa que el conjunto de especificaciones o normas que definen
cmo va a ser creado un objeto de un tipo determinado; algo parecido a un manual de
instrucciones conteniendo las indicaciones para crear el objeto.
Los trminos objeto y clase son utilizados en OOP con gran profusin y en contextos
muy similares, por lo que para intentar aclarar en lo posible ambos conceptos, diremos
que una clase constituye la representacin abstracta de algo, mientras que un
objeto constituye la representacin concreta de lo que una clase define.
Instancias de una clase
El proceso por el cul se obtiene un objeto a partir de las especificaciones de una clase
se conoce como instanciacin de objetos.
Caractersticas bsicas de un sistema orientado a objeto
Para que un lenguaje o sistema sea considerado orientado a objeto, debe cumplir las
caractersticas de los siguientes apartados.
Abstraccin
La abstraccin es aquella caracterstica que nos permite identificar un objeto a travs
de sus aspectos conceptuales.
Encapsulacin
Encapsulado.- Ocultar detalles
La encapsulacin establece la separacin entre el interfaz del objeto y su
implementacin,
Polimorfismo

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 53 -

El polimorfismo determina que el mismo nombre de mtodo, realizar diferentes


acciones segn el objeto sobre el que sea aplicado.
Ovirridable.- permite anular una propiedad o mtodo de un clase dentro de una
clase derivada
Ovirrides. Anula una propiedad o mtodo ovirridable definida en la clase base
Nota OVIRRIDE. Obliga a un clase derivada anular la propiedad o mtodo
Herencia
Se trata de la caracterstica ms importante de la OOP, y establece que partiendo de
una clase a la que denominamos clase base, padre o superclase, creamos una nueva
clase denominada clase derivada, hija, o subclase. En esta clase derivada
dispondremos de todo el cdigo de la clase base, ms el nuevo cdigo propio de la
clase hija, que escribamos para extender sus funcionalidades.
A su vez podemos tomar una clase derivada, creando una nueva subclase a partir de
ella, y as sucesivamente, componiendo lo que se denomina una jerarqua de clases,
Existen dos tipos de herencia: simple y mltiple. La herencia simple es aquella en la
que creamos una clase derivada a partir de una sola clase base, mientras que la
herencia mltiple nos permite crear una clase derivada a partir de varias clases base.
El entorno de .NET Framework slo permite utilizar herencia simple.
Relaciones entre objetos
Los objetos existentes en una aplicacin se comunican entre s mediante una serie de
relaciones que describimos a continuacin.
Herencia
La herencia es la capacidad de crear nuevas clases a partir de una clase existente.
Clase base
Clase derivada
Inherits
Para anular la herencia de la clase
Public NotInheritable Class Conttacto
Para reconocer si existe esta relacin entre dos objetos, debemos realizar un anlisis
sintctico sobre la misma usando la partcula es un.
Pertenencia
Los objetos pueden estar formados a su vez por otros objetos. Un objeto Factura puede
estar compuesto por objetos CabeceraFactura, LineaFactura, etc. Se dice en este
caso que hay una relacin de pertenencia, puesto que existe un conjunto de objetos
que pertenecen a otro objeto o se unen para formar otro objeto. A este tipo de relacin
se le denomina tambin Contenedora.

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 54 -

Para reconocer si existe esta relacin entre dos objetos, debemos realizar un anlisis
sintctico sobre la misma usando la partcula tiene un. As, por ejemplo, la frase Un
objeto Factura tiene un objeto LineaFactura devolvera verdadero.
Utilizacin
Hay situaciones en que un objeto utiliza a otro para realizar una determinada tarea, sin
que ello suponga la existencia de una relacin de pertenencia entre dichos objetos.
Reutilizacin
Un objeto bien diseado, puede ser reutilizado en otra aplicacin de modo directo o
creando una clase derivada a partir de l. Este es uno de los objetivos perseguidos por
la OOP, aprovechar en lo posible el cdigo ya escrito, ahorrando un considerable
tiempo en el desarrollo de programas.
Constructores y herencia
Mtodos constructores
El primer mtodo que es ejecutado al instanciar un objeto de la clase se denomina
constructor. Este tipo de mtodo resulta til para tareas de configuracin iniciales sobre
el objeto.
Para escribir nuestros propios constructores de clase, crearemos un mtodo con el
nombre New( ),
Al igual que ocurre en un mtodo normal, New( ) admite parmetros; esto nos sirve
para asignar valores de inicio al objeto en el momento de su instanciacin. La
denominacin para este tipo de mtodos es constructor parametrizado
Reglas de mbito especficas para clases
Las normas de mbito que ya conocemos, establecen que cuando declaramos un
miembro de clase con el modificador de mbito Public, dicho elemento ser accesible
por todo el cdigo de la clase, clases heredadas y cdigo cliente; mientras que si lo
declaramos con Private, ese miembro slo ser accesible a los miembros de la clase
Protected
Un miembro de clase declarado con este modificador, ser accesible desde el cdigo
de su propia clase y desde cualquier clase heredada.
Friend
Un miembro de clase declarado con este modificador, ser accesible por todo el cdigo
de su proyecto o ensamblado.
Protected Friend
Los miembros de clase declarados al mismo tiempo con Protected y Friend, obtendrn
una combinacin de ambos modificadores; por lo tanto, sern accesibles desde el
cdigo de su clase, clases derivadas, y por todo el cdigo que se encuentre dentro de
su ensamblado.
MyBase, acceso a los mtodos de la clase base

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 55 -

Esta palabra clave proporciona acceso a los miembros de una clase base desde su
correspondiente subclase.
Uso de Me y MyClass para llamar a los miembros de la propia clase
Cuando desde el cdigo de una clase queremos hacer referencia a un miembro de la
propia clase: campo, propiedad o mtodo, podemos utilizar las palabras clave Me y
MyClass para manipular dicho elemento
Qu es un Namespace?
Introduccin:
Un Namespace es una forma de agrupar clases (tipos) que estn relacionadas de
alguna forma.
El uso de los espacios de nombres nos permitir tener nuestros ensamblados
agrupados segn la tarea para la que los hemos programado. De esta forma, si
escribimos ensamblados que accedern al disco, los podemos agrupar para tenerlos
en sitio diferente a los que, por ejemplo, accedan a una base de datos. Eso mismo es
lo que se hace en las clases base de .NET Framework y por esa razn existen los
espacios de nombres System.IO y System.Data, por poner slo dos.
Cada vez que creamos un proyecto con Visual Studio .NET de forma automtica se
crea un espacio de nombres para nuestra aplicacin. Por tanto todos los tipos (clases,
estructuras, enumeraciones, etc.) que definamos en dicho proyecto estarn incluidos
dentro de ese espacio de nombres.
Dnde define el IDE de Visual Studio el espacio de nombres usado en nuestro
proyecto?
El Visual Studio define el espacio de nombres "predeterminado" de nuestro proyecto en
las propiedades del proyecto. As que si quieres cambiar el Namespace
predeterminado del proyecto, puedes hacerlo modificando dicho valor. Para poder
hacer esto, muestra las propiedades del proyecto:
-Selecciona el proyecto en el explorador de soluciones (Solution Explorer)
-En el men Proyecto, selecciona Propiedades

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 56 -

-En la ficha General (que ser la que se muestre por defecto), el espacio de nombres
estar en: Espacio de nombres de la raz (Root namespace) tal como podemos ver en
la figura 1.

Figura 1: El espacio de nombres predeterminado de un proyecto de VB .NET


Qu finalidad tiene el uso de los Namespace?

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 57 -

El escribir nuestro cdigo dentro de un bloque Namespace tiene por finalidad, el poder
mantener una especie de jerarqua. Para que nos entendamos mejor, podramos
comparar los espacios de nombres con los directorios de un disco. ses, etc.) de otros.
Anidar espacios de nombres:
Espacios de nombres dentro de otros espacios de nombres
Siguiendo con el ejemplo de los directorios, es habitual que dentro de un directorio
podamos tener otros directorios, de forma que tengamos ficheros que estando
relacionados con el directorio principal no queremos que se mezclen con el resto de
ficheros.
Pues con los Namespace ocurre lo mismo, podemos declarar bloques Namespace
dentro de otro bloque existente. Esto se consigue definiendo un bloque dentro de otro
bloque.
Por ejemplo:
Namespace CursoGuille
Namespace Entrega16
Module Module1
Sub Main()
End Sub
End Module
End Namespace
End Namespace
En este cdigo, tenemos dos espacios de nombres anidados, el espacio de nombres
Entrega16 est dentro del espacio de nombres CursoGuille.
Cmo acceder a los tipos declarados dentro de un Namespace?
De igual forma que para acceder a los ficheros de un directorio debemos indicar el
"path" en el que se encuentran, con los espacios de nombres ocurre lo mismo, aunque
como veremos (en breve, supongo) existen formas abreviadas de realizar ese acceso.
Por ejemplo, si queremos usar la clase StringBuilder que se encuentra declarada en el
espacio de nombres System.Text, tendremos que indicar el espacio de nombres en el
que se encuentra:
Dim sb As New System.Text.StringBuilder()
Es decir, debemos indicar el "path" completo de la clase, para poder acceder a ella.
En teora si declaramos un mtodo dentro del mdulo Module1, (mostrado en el cdigo
anterior), deberamos llamar a dicho mtodo usando el espacio de nombres completo,
pero cuando estamos dentro de un espacio de nombres, no hace falta indicar el
nombre completo, ocurre lo mismo que cuando estamos dentro de en un directorio, no
tenemos que indicar el path completo para acceder a un fichero de ese mismo
directorio, pero si queremos tambin podemos hacerlo, tal como se muestra en el
siguiente cdigo:
Namespace CursoGuille
Namespace Entrega16
Module Module1
Sub Main()
CursoGuille.Entrega16.Module1.Prueba16()
End Sub
Public Sub Prueba16()

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 58 -

Console.WriteLine("Saludos desde el Sub Prueba16")


End Sub
End Module
End Namespace
End Namespace
Por tanto, para acceder a los miembros declarados dentro de un espacio de nombres,
debemos usar la sintaxis: Espacio_de_nombres Punto Nombre_de_la_clase Punto
Nombre_Del_Mtodo
Es decir, siempre debemos indicar los espacios de nombres en los que se encuentran
las clases, salvo que la clase (o tipo) est definido en el mismo espacio de nombres
desde el que se va a usar.
Cmo abreviar la escritura de nuestro cdigo?
Para no tener que especificar siempre los espacios de nombres en los que estn
declaradas las clases.
Pues adems de no tener que especificar los espacios de nombres cuando la clase (o
tipo) est definido en el mismo en el que queremos usarla, podemos usar lo que se
llama importaciones de espacios de nombres, de esa forma podemos acortar el cdigo
que tenemos que escribir.
Las importaciones de los espacios de nombres se hacen mediante la instruccin
Imports (using en C#). Dicha instruccin se usar al principio del fichero de cdigo y lo
que realmente hace es indicarle al compilador que si no encuentra una clase en el
espacio de nombres actual, la busque en el espacio de nombres que hemos importado.
Por ejemplo, la clase Console est definida en el espacio de nombres System, si
usamos una importacin de System en nuestro cdigo (el Visual Studio lo hace de
forma automtica) no tendremos que indicar la "ruta" completa de dicha clase:
System.Console, sino que podemos usarla indicando simplemente Console.
La instruccin Imports se usa de la siguiente forma:
Imports System
Si queremos importar un espacio de nombres que est "anidado" en otro, lo haremos
as: Imports System.Text
Por tanto el uso de Imports lo que hace es indicarle al compilador dnde buscar la
definicin de los tipos que estamos usando en nuestro cdigo, para as ahorrarnos la
escritura de los espacios de nombres que habitualmente usamos.
Nota:
Una cosa que no hay que confundir son las importaciones de espacios de
nombres y las referencias.
Las referencias son las que le indican al compilador dnde encontrar las clases
(y espacios de nombres) que queremos usar en nuestro proyecto, mientras
que las importaciones simplemente hacen que no tengamos que escribir los
espacios de nombres importados.

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 59 -

Un detalle que es interesante, al menos en Visual Basic .NET, es que si hacemos una
importacin de un espacio de nombres, podemos acceder no slo a las clases (tipos)
definidos en ese espacio de nombres, sino tambin a otros espacios de nombres
anidados.
Por ejemplo si queremos acceder a la clase StringBuilder que, como hemos visto, est
definida en System.Text, es decir, en el espacio de nombres Text que a su vez est
definido dentro de System, en Visual Basic podramos hacerlo as:
Dim sb As New Text.StringBuilder()
Al menos si tenemos la importacin del espacio System (que es el espacio de nombres
raz de .NET).
Para terminar con el tema de las importaciones de espacios de nombres, vamos a ver
otra forma de usar la instruccin Imports, de forma que podamos "medio" importar un
espacio de nombres.
Crear "alias" a los espacios de nombres
Un alias es una forma abreviada de usar algo. En el caso de las importaciones de
espacios de nombres, podemos crear un alias para un espacio de nombres, de forma
que en lugar de escribir todo el espacio de nombres (y subespacios) simplemente
usemos ese alias.
Por ejemplo, imagina que quieres acceder a las clases del espacio de nombres
System.IO pero no quieres realizar una importacin completa, con idea de que al
escribir dicho alias te muestre todas las clases y dems tipos relacionadas con ese
espacio de nombres. En ese caso, podramos crear un alias al espacio de nombres
System.IO de esta forma:
Imports fic = System.IO
A partir de ese momento podemos acceder a los tipos definidos en dicho espacio de
nombres usando el alias que hemos creado: fic.
Por ejemplo, si escribimos un punto despus de fic, el IDE de Visual Studio nos
mostrar las clases que podemos usar (las incluidas en ese espacio de nombres), tal
como vemos en la figura

Figura 4: Los tipos definidos en el "alias" de System.IO

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 60 -

Nota: Los alias tambin se pueden usar en C#, (using fic = System.IO;), en los que
puede ser incluso ms prcticos que en VB, ya que en VB, por ejemplo no
necesitaramos crear un alias a System.IO, ya que podramos usar directamente IO
seguido de un punto para acceder a las clases que contiene.
Ejemplos de cmo usar los Namespace
En el ejemplo que vamos a usar, vamos a definir dos espacios de nombres y en cada
uno de ellos declararemos algunas una clase, con idea de que veamos cmo usarlos
desde cada uno de esos espacios de nombres.
El cdigo sera el siguiente:
Namespace Entrega16
Module Module1
Sub Main()
' declarar una clase del espacio de nombres ClaseUno
Dim c1 As New ClasesUno.PruebaA("Pepe", "Ruiz")
'
' declarar una clase del espacio de nombres ClaseDos
Dim c2 As New ClasesDos.PruebaB("Maria", "Snchez")
'
Console.WriteLine("c1 = {0}", c1)
Console.WriteLine("c2 = {0}", c2)
'
Console.ReadLine()
End Sub
End Module
End Namespace
'
Namespace ClasesUno
Public Class PruebaA
Private _nombre As String
Private _apellidos As String
'
Public Sub New()
End Sub
Public Sub New(ByVal nombre As String, ByVal apellidos As String)
Me.Nombre = nombre
Me.Apellidos = apellidos
End Sub
'
Public Property Nombre() As String
Get
Return _nombre
End Get
Set(ByVal value As String)
_nombre = value
End Set
End Property
Public Property Apellidos() As String
Get
Return _apellidos
End Get

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 61 -

Set(ByVal value As String)


_apellidos = value
End Set
End Property
'
Public Overrides Function ToString() As String
Return Apellidos & ", " & Nombre
End Function
End Class
End Namespace
'
Namespace ClasesDos
Public Class PruebaB
Inherits ClasesUno.PruebaA
'
Public Sub New()
End Sub
Public Sub New(ByVal nombre As String, ByVal apellidos As String)
Me.Nombre = nombre
Me.Apellidos = apellidos
End Sub
End Class
End Namespace
Es este cdigo tenemos tres espacios de nombres:
- Entrega16 que es donde est declarado el mdulo que se usar para iniciar la
aplicacin.
-ClasesUno en el que se define la clase PruebaA
-ClasesDos en el que se define la clase PruebaB, la cual simplemente hereda (o se
basa en) la clase definida en ClasesUno.
Para poder acceder a las clases desde Main, tenemos que indicar en que espacio de
nombres est cada una de las clases, esto es as porque el mdulo que contiene el
mtodo Main est declarado dentro de un espacio de nombres diferente.
Lo mismo ocurre con la instruccin Inherits ClasesUno.PruebaA de la clase PruebaB,
ya que cada una de las clases est dentro de un espacio de nombres distinto y si no
indicamos expresamente ese espacio de nombres, el compilador no sabr donde
localizar la clase PruebaA. Por supuesto, si hacemos una importacin del espacio de
nombres ClasesUno, podramos acceder a la clase ClaseA sin necesidad de indicar el
espacio de nombres que la contiene.
Resumiendo un poco:
En un proyecto (ensamblado) podemos definir varios espacios de nombres.
Un espacio de nombres puede estar definido en varios ensamblados y todas las clases
(tipos) definidos se podrn acceder como si estuviesen en el mismo proyecto.
Podemos importar espacios de nombres para que el compilador sepa dnde buscar las
clases.

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 62 -

Implementar la clase circulo


1. Ingresar a Visual Basic 2008
2. Men archivo\Nuevo proyecto \ aplicacion de consola
3. En el men proyecto\Add class aparecera el siguiente cuadro

4. Ponga el nombre de la clase circulo

5. Usando el menu ver\ explorador de soluciones se puede ver los sisguientes


elementos del proyecto

Hacer doble cli c en la clase CIRCULO.VB Y digite el siguiene cdigo

Public Class Circulo


Protected Radio As Single
Protected A As Single

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 63 -

Public Sub IngresarRadio()


Console.Write(" Ingrese Radio ")
Radio = Console.ReadLine()
End Sub
Public Function Area() As Single
A = 3.1416 * Radio * Radio
Return A
End Function
End Class
7 hacer doble clic en el modulo y digite el siguiente codigo
Module Module1
Dim objeto1 As Circulo
Dim objeto2 As Circulo
Sub Main()
objeto1 = New Circulo
objeto2 = New Circulo
objeto1.IngresarRadio()
Console.WriteLine(" Area del circulo 1 es {0} ", objeto1.Area())
objeto2.IngresarRadio()
Console.WriteLine(" Area del circulo 2 es {0} ", objeto2.Area())
Console.ReadLine()
End Sub
End Module

Circulo
Cilindro
Radio
IngresarRadio

10

Radio
IngresarRadio

10
A
314.16

A
Area

314.16

Diagrama de la clase circulo y cilindro

Area
IngresarAltura

Volumen

1
314.16

HERENCIA :
6: Derive la clase cilindro de la clase crculo y encuentre el rea y el volumen del
cilindro
Pasos

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 64 -

1. ingrese al visual basic 2008\nuevo proyecto\ aplicacion de consola


2. adicione la clase circulo con proyecto\adicionar clase
3. escriba el codigo de la clase circulo
Public Class Circulo
Protected Radio As Single
Protected A As Single
Public Sub IngresarRadio()
Console.Write(" Ingrese Radio ")
Radio = Console.ReadLine()
End Sub
Public Function Area() As Single
A = 3.1416 * Radio * Radio
Return A
End Function
End Class
4. Adicione la clase cilindro con proyecto \adicionar clase
5. Escriba el siguiente cdigo en la clase cilindroi
Public Class Cilindro
Inherits Circulo
Private Altura As Single
Private V As Single
Public Sub IngresarAltura()
Console.WriteLine(" Ingrese altura del cilindro")
Altura = Console.ReadLine()
End Sub
Public Function Volumen() As Single
V = 3.1416 * Radio * Radio * Altura
Return V
End Function
End Class
6. Con el explorador de soluciones se puede ver la estructura de del proyecto

8 hacer doble clic en el modulo y escriba el siguiente cdigo


Module Module1
Dim objeto1
Dim objeto2
Dim Objeto3
Sub Main()
objeto1

As CIRCULO
As CIRCULO
As CILINDRO
= New Circulo

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 65 -

objeto2 = New Circulo


Objeto3 = New Cilindro
objeto1.IngresarRadio()
Console.WriteLine(" Area del circulo 1 es {0} ",
objeto1.Area())
Objeto3.IngresarRadio()
Console.WriteLine(" Area de base de cilindro es 2 es {0} ",
Objeto3.Area())
Objeto3.IngresarAltura()
Console.WriteLine(" El volumen es {0} ", Objeto3.Volumen())
Console.ReadLine()
End Sub
End Module

Nota- se puede agrupar la clase cilindro y la clase circulo en una sola clase

PROPIEDADES METODOS Y EVENTOS


7.Definir propiedades y mtodos de la clase circulo
Public Class Circulo
Protected Radio1 As Single
Protected A As Single
Public Sub IngresarRadio()
Console.Write(" Ingrese Radio ")
Radio = Console.ReadLine()
End Sub
Public Function Area() As Single
A = 3.1416 * Radio1 * Radio1
Return A
End Function
Property Radio() As Single
Get
Radio = Radio1
End Get
Set(ByVal valor As Single)
Radio1 = valor
End Set
End Property
Public ReadOnly Property VerArea()
Get
Return A
End Get
End Property
End Class

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca


Module Module1
Dim objeto1 As Circulo
Dim objeto2 As Circulo
Sub Main()
objeto1 = New Circulo
objeto2 = New Circulo
objeto1.Radio = 10
Console.WriteLine("el area es {0}", objeto1.Area())
Console.WriteLine("El Area es {0}", objeto1.VerArea)
Console.ReadLine()
End Sub
End Module
La propiedades tambin puede ser de solo escritura
Public Write Property Nombre as string
Set SomeName=
End Set End Property
TAREA.- Defina la clase Operacion que tiene los siguientes miembros
Propiedades
Nro1: Propiedad para modificar el primer nmero
Nro2: propiedad para modificar el segundo nmero
Res: resultado de la operacin propiedad de solo lectura
Mtodos
Ingresar : permite ingresar dos nmeros reales
Sumar.- funcin que permite sumar los nmeros ingresados
Restar.- funcin que permite restar los nmeros ingresados
Public Class OPERACION
Private N1 As Single
Private N2 As Single
Private R As Single
Public Sub Ingresar()
Console.Write("ingrese nro 1")
N1 = Console.ReadLine
Console.Write("ingrese nro 2")
N2 = Console.ReadLine
End Sub
Public Function Sumar() As Single
R = N1 + N2
Return R
End Function
Public Function Restar() As Single
R = N1 - N2
Return R
End Function
Property Nro1()
Get
Return N1
End Get
Set(ByVal value)
N1 = value

- 66 -

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 67 -

End Set
End Property
Property Nro2()
Get
Return N2
End Get
Set(ByVal value)
N2 = value
End Set
End Property
Public ReadOnly Property Res()
Get
Return R
End Get
End Property
End Class
Cdigo del mdulo
Module Module1
Dim objeto As OPERACION
Sub Main()
objeto = New OPERACION
objeto.Ingresar()
Console.WriteLine(" la suma es {0}", objeto.Sumar())
Console.WriteLine(" la resta es {0}", objeto.Restar())
objeto.Nro1 = 100
objeto.Sumar()
Console.WriteLine(" El resultado es {0}", objeto.Res)
Console.ReadLine()
End Sub
End Module

El objeto llamado Operacin debera tener los siguientes mtodos y propiedades

IMPLEMENTAR EVENTOS

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 68 -

Eventos. Qu es un evento?
Un evento es un suceso o situacin, que acontece en una ubicacin de espacio y tiempo no
predecible.
Programacin basada en eventos
Esquema bsico de un sistema orientado a eventos
Un sistema conducido por eventos basa su funcionamiento en dos pilares fundamentales: un
emisor y un receptor de eventos.
El primero genera y lanza el evento al sistema, mientras que el segundo, si est interesado en
tratar el evento lanzado, lo captura y le da respuesta. Si un objeto receptor no necesita
gestionar eventos, simplemente no lo obtiene. Ver Figura 206.

Figura 206. Esquema de generacin y captura de eventos.


El emisor de eventos
Un emisor de eventos, tambin denominado origen de eventos (event source o event sender),
es un objeto capacitado para generar y lanzar eventos al sistema, que puedan ser recuperados
por otros objetos preparados para realizar su tratamiento.
Para que un objeto pueda desencadenar eventos, en su clase debemos realizar dos tareas:

Declarar el propio evento usando la palabra clave Event, especificando si es necesario


unalista de parmetros que acompaan al evento.

Lanzar el evento mediante la palabra clave RaiseEvent, seguida del nombre del evento
a disparar. Si hemos declarado el evento con parmetros, deberemos aadir los valores
para cada uno de los parmetros en el mismo orden en el que los hemos declarado.

IMPLEMENTAR LA CLASE CIRCULO CON EVENTOS


Implementar dos eventos para la clasecrculo
Evento 1. Sedispara cuandoel radio es negativo
Evento 2 Se dispara cuando el radio es mayor que 100
Public Class CIRCULO
Protected Radio1 As Single
Protected A As Single
Public Event Evento1(ByVal Valor As Single)
Public Event Evento2(ByVal Valor As Single)

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 69 -

Property Radio() As Single


Get
Radio = Radio1
End Get
Set(ByVal value As Single)
Select Case value
Case Is < 0
RaiseEvent Evento1(value)
Case value > 0 To 100
Radio1 = value
Case Is > 100
RaiseEvent Evento2(value)
End Select
End Set
End Property
Public ReadOnly Property Area()
Get
A = Math.PI * Radio1 ^ 2
Area = A
End Get
End Property
End Class
Codigo del modulo1
Module Module1
Private WithEvents Ecirculo As CIRCULO
Sub Main()
Ecirculo = New CIRCULO()
Ecirculo.Radio = -4 ' provoca el evento 1
Ecirculo.Radio = 200 ' provoca el evento 2
Ecirculo.Radio = 30 ' no provoca ningun evento
Console.WriteLine(" radio {0} ", Ecirculo.Radio)
Console.ReadLine()
End Sub
Private Sub Ecirculo_Evento1(ByVal Valor As Single) Handles Ecirculo.Evento1
Console.WriteLine("{0} no se permite radios negativos", Valor)
End Sub
Private Sub Ecirculo_Evento2(ByVal Valor As Single) Handles Ecirculo.Evento2
Console.WriteLine("{0} no se permite valores superiores a 100", Valor)
End Sub
End Module

VEA LA AYUDA DE Visual basic tuturial declarar y provocar eeventos


Tarea
1 Se tiene la clase factorial derivar la clase combinatoria,implemente su propeidades y
mtodos de cada clase

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 70 -

2. Se ingresa cdigo y nombres de n alumnos usando POO elabore una aplicacin que
permita ingresar, mostrar, datos, buscar, grabar, recuperar datos, etc.
3. Implemente una clase llamada estadstica que deber tener los siguiente miembros
Propiedades
N: Nmero de datos ( propiedad de lectura y escritura
Suma, promedio, mediana, moda , mayor, menor desviacion tipica etc.( propiedades de
solo lectura
Mtodos
Ingresar. permite ingresar n datos a un arreglo
Procesar. Procesa y encuentra los valores de Suma, promedio,mediana, moda, el
mayor , el menor , desviacin tipica, etc
PROGRAMACION ORIENTADA A OBJETOS EN PROGRAMACION VISUAL
1. Ingrese a File New Proyect\Windows aplicacation
2. Aparecera el siguiente cuadro ponga de nombre PROBARCIRCULO

3.agregue una clase con poryecto\agregar clase ponga de nombre Circulo


4.Tipee le siguiente codigo
Public Class CIRCULO
Protected Radio1 As Single

Protected A As Single
Public Event Evento1(ByVal Valor As Single)
Public Event Evento2(ByVal Valor As Single)
Public Sub IngresarRadio()
Console.Write(" Ingrese Radio ")
Radio = Console.ReadLine()
End Sub
Public Function Area() As Single
A = 3.1416 * Radio1 * Radio1
Return A
End Function
Property Radio() As Single

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca


Get

Radio = Radio1
End Get
Set(ByVal value As Single)
If value < 0 Then
' se lanza el evento 1
RaiseEvent Evento1(value)
Else
If value > 100 Then ' se lanza el evento 2
RaiseEvent Evento2(value)
Else
Radio1 = value
End If
End If
End Set
End Property
Public ReadOnly Property VerArea()
Get
Return A
End Get
End Property
End Class

3 Puede ver los conponentes de la clase Circulo F2

- 71 -

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 72 -

6 Disee en el formulario lo siguiente

7 continuacin proceda a establecer las propiedades segn se indica:


Objeto
Form1
Label1
Label2
Text1
Text2
Button 1

Propiedad
Text
Text
Text
Nombre
Text
Nombre
Text
Namee
Text

Valor
Propiedades metodos y eventos clase circulo.
Radio
Area
TxtRadio
TxtArea
BtnPropiedades
Propiedades

8 Grabe con el nombre de circulo

9 Escriba el siguiente codigo en el formulario


Public Class Form1
Private WithEvents Ecirculo As CIRCULO
Private Sub Ecirculo_Evento1(ByVal Valor As Single) Handles
Ecirculo.Evento1
MsgBox(" no se permite radios negativos",
MsgBoxStyle.MsgBoxHelp, Valor.ToString)
End Sub
Private Sub Ecirculo_Evento2(ByVal Valor As Single) Handles
Ecirculo.Evento2

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca


MsgBox(" el radio debe ser menor queo igual que
MsgBoxStyle.Critical, Valor.ToString)
End Sub

- 73 100 ",

Private Sub BtnPropiedades_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles BtnPropiedades.Click
Ecirculo = New CIRCULO()
If IsNumeric(txtradio.Text) Then
Ecirculo.Radio = txtradio.Text
TxtArea.Text = Ecirculo.Area
Else
MsgBox("INGRESE VALORESW NUMERICOS")
End If
End Sub
End Class

Al ingresar un de radio superior a 100 se dispara el evento 2 y si es le radio es


negativo se disparar el evento 1

SEGUNDA FORMA 2 DE TRABAJAR CON CLASES


Paso 1 file\ New proyect\Class library de nombre ponga circulo

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 74 -

2 CON EL menu view\solution explorer se puede ver la siguiente estructura

3. Doble clic en circulo Vb Agregue el codigo de la clase circulo


4 Agregue un nuevo proyecto con el nombre de probar circulo

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 75 -

5 Con el explorador de soluciones se debera ver la siguiente estructura

6 En el explorador de soluciones selecciones proyecto probar circulo dar click


establecer como proyecto inicial

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 76 -

7 En el explorador de soluciones seleccione proyecto probarCirculo dar click


derecho y seleccione agregar referencia y luego OK

8 En el explorador de soluciones , seleccione un formualario y luego en el menu


ver seleccione diseador y Establece los siguientes controles para el formulario

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 77 -

9 A continuacin proceda a establecer las propiedades segn se indica: en las


pagina anteriores
Public Class CIRCULO
Protected Radio1 As Single
Protected A As Single
Public Event Evento1(ByVal Valor As Single)
Public Event Evento2(ByVal Valor As Single)
Property Radio() As Single
Get
Radio = Radio1
End Get
Set(ByVal value As Single)
Select Case value
Case Is < 0
RaiseEvent Evento1(value)
Case value > 0 To 100
Radio1 = value
Case Is > 100
RaiseEvent Evento2(value)
End Select
End Set
End Property
Public ReadOnly Property Area()
Get
A = Math.PI * Radio1 ^ 2
Area = A
End Get
End Property
End Class

10. agregue el siguiente codigo al formulario


Public Class Form1
Private WithEvents Ecirculo As CIRCULO
Private Sub Ecirculo_Evento1(ByVal Valor As Single) Handles
Ecirculo.Evento1
MsgBox(" no se permite radios negativos",
MsgBoxStyle.MsgBoxHelp, Valor.ToString)
End Sub
Private Sub Ecirculo_Evento2(ByVal Valor As Single) Handles
Ecirculo.Evento2

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca


MsgBox(" el radio debe ser menor queo igual que
MsgBoxStyle.Critical, Valor.ToString)
End Sub

- 78 100 ",

Private Sub BtnPropiedades_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles BtnPropiedades.Click
Ecirculo = New CIRCULO()
If IsNumeric(txtradio.Text) Then
Ecirculo.Radio = txtradio.Text
TxtArea.Text = Ecirculo.Area
Else
MsgBox("INGRESE VALORESW NUMERICOS")
End If
End Sub
End Class

CLASES CON CONSTRUCTORES


11 Agregue el siguiente constructor a la clase circulo
Public Sub New(Optional ByVal r As Integer = 10)
Radio = r
End Sub
12 Modifique la clase Form1 del proyecto Probarcirculo a ( agregue un cuadro
de lista al diseador) y escriba el siguiente codigo
Public Class Form1
Private WithEvents objeto1 As New CIRCULO.CIRCULO
Private WithEvents objeto2 As New CIRCULO.CIRCULO(20)
Private WithEvents objeto3 As New CIRCULO.CIRCULO
Private Sub Ecirculo_Evento1(ByVal Valor As Single) Handles
objeto1.Evento1, objeto2.Evento1, objeto3.Evento1
MsgBox(" no se permite radios negativos",
MsgBoxStyle.MsgBoxHelp, Valor.ToString)
End Sub
Private Sub Ecirculo_Evento2(ByVal Valor As Single) Handles
objeto1.Evento2, objeto2.Evento2, objeto3.Evento2
MsgBox(" el radio debe ser menor queo igual que 100 ",
MsgBoxStyle.Critical, Valor.ToString)
End Sub
Private Sub BtnPropiedades_Click_1(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles BtnPropiedades.Click
ListBox1.Items.Clear()
Objeto3.Radio = TxtRadio.Text
TxtArea.Text = Objeto3.VerArea
ListBox1.Items.Add("Radio De Objeto 1 " & objeto1.Radio)
ListBox1.Items.Add("Radio De Objeto 2 " & objeto2.Radio)
ListBox1.Items.Add("Radio De Objeto 3 " & Objeto3.Radio)
End Sub
End Class

13 Ejecute la aplicacin y ver lo siguiente

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 79 -

El primer objeto circulo est inicializado implicitamente con radio = 10


El segundo objeto crculo et inicilizado explicitamente con radio =20
El tercer objeto circulo esta incializado mediante la caja de texto es este caso = 5
ARREGLO DE OBJETOS
14 Modifique la clase Form1 para que trabaje con arreglo de objetos
Public Class Form1
Dim A(10) As CIRCULO.CIRCULO
Private Sub BtnPropiedades_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnPropiedades.Click
Dim i As Integer
ListBox1.Items.Clear()
For i = 0 To 9
A(i) = New CIRCULO.CIRCULO(i)
A(i).Radio = i * 10
ListBox1.Items.Add("Radio Objeto " & i & " =" & A(i).Radio)
Next
A(0).Radio = TxtRadio.Text
TxtArea.Text = A(0).Area
End Sub
End Class

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 80 -

Tareas
Implementar las propeidades metodos y eventos de las clases
1. Operacion
2. Factorial de un numero
3. Clase estadistica
HERENCIA
Heredar la clase cilindro de la clase Circulo
1. File\New Proyect\ Windows Aplication luego grabe el proyecto
2. Adicione la clase circulo con proyect\add clases y escriba el siguiente codigo

Namespace CLASES
Public Class CIRCULO
Protected Radio1 As Single
Protected A As Single
Public Event Evento1(ByVal Valor As Single)
Public Event Evento2(ByVal Valor As Single)
Property Radio() As Single
Get
Radio = Radio1
End Get
Set(ByVal value As Single)
Select Case value
Case Is < 0
RaiseEvent Evento1(value)
Case value > 0 To 100
Radio1 = value
Case Is > 100
RaiseEvent Evento2(value)
End Select
End Set
End Property
Public ReadOnly Property Area()
Get
A = Math.PI * Radio1 ^ 2
Area = A
End Get
End Property
End Class
Public Class cilindro
Inherits CIRCULO
Private Altura1 As Single
Public Property Altura() As Single
Get
Altura = Altura1
End Get
Set(ByVal value As Single)

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 81 -

Altura1 = value
End Set
End Property
ReadOnly Property AreaLateral() As Single
Get
AreaLateral = 2 * 3.1416 * Radio1 * Altura1
End Get
End Property
ReadOnly Property AreaTotal() As Single
Get
AreaTotal = AreaLateral + 2 * Area()
End Get
End Property
ReadOnly Property volumen() As Single
Get
volumen = Area() * Altura1
End Get
End Property
End Class
End Namespace

Para que el dato miembro radio1 de la clase base circulo se puede heredar a la clase
cilindro modifique de tipo privado a privado a protegido
Private Radio1 As Single a
Protected Radio1 As Single
Para probar las clase derivadas
1. En el explorador de soluciones seleccione el formulario del proyecto
pruebacilindro y luego en el men ver diseador y disee el siguiente formulario
En el editor de cdigo adicione el siguiente cdigo
Public Class Form1
Private WithEvents Objeto1 As CLASES.CIRCULO
Private WithEvents Objeto2 As CLASES.cilindro
Private Sub Objeto_Evento1(ByVal Valor As Single) Handles Objeto1.Evento1,
Objeto2.Evento1
MsgBox(" no se permite radios negativos", MsgBoxStyle.MsgBoxHelp, Valor.ToString)
End Sub
Private Sub objeto_Evento2(ByVal Valor As Single) Handles Objeto1.Evento2,
Objeto2.Evento2
MsgBox(" EL RADIO DEBE SER MAYOR O IGUAL QUE 100 ", MsgBoxStyle.Critical,
Valor.ToString)
End Sub
Private Sub BtnPropCirculo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnPropCirculo.Click
Objeto1 = New CLASES.CIRCULO
ListBox1.Items.Clear()
If IsNumeric(TextBox1.Text) Then
Objeto1.Radio = TextBox1.Text
ListBox1.Items.Add("PROPIEDADES DE LA CLASE CIRCULO")
ListBox1.Items.Add("RADIO = " & Objeto1.Radio)
ListBox1.Items.Add("AREA = " & Objeto1.Area)
Else
MsgBox("INGRESE UN NUMERO EN LA CAJA DE TEXTO")
End If
End Sub

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca


Private Sub BtnPropCilindro_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnPropCilindro.Click
Objeto2 = New CLASES.cilindro
If IsNumeric(TextBox2.Text) And IsNumeric(TextBox2.Text) Then
objeto2.Radio = TextBox1.Text
objeto2.Altura = TextBox2.Text
ListBox1.Items.Clear()
ListBox1.Items.Add("PROPIEDADES DE LA CLASE CILINDRO")
ListBox1.Items.Add("RADIO = " & objeto2.Radio)
ListBox1.Items.Add("ALTURA = " & objeto2.Altura)
ListBox1.Items.Add("AREA DE LA BASE = " & objeto2.Area)
ListBox1.Items.Add("AREA LATERAL = " & objeto2.AreaLateral)
ListBox1.Items.Add("AREA TOTAL = " & objeto2.AreaTotal)
ListBox1.Items.Add("VOLUMEN = " & objeto2.volumen)
Else
MsgBox(" ingrese numeros en la cajas de texto")
End If
End Sub
End Class

- 82 -

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 83 -

2. Ejecute el programa para ver las propiedades del objeto del tipo circulo y de tipo
cilindro
Nota. El objeto de la clase circulo y cilindro muestra todos estos miembros

Tarea.agregue las siguientes propiedades a la clase CIRCULO


X coordenda X
Y coordenda Y
Mtodos
DibujarCirculo Dibuja el circulo con coordendas X, Y y radio especificado
Agregue a la clase cilindro
El metodo dibujar cilindro que dibujo un cilindro con cordenadas X,Y y, altura y radio
especificados
Disee el formulario de la siguiente manera. Los puntos x e y tambien puede ser
obtenidos haciendo click con el ratn el control picturebox1
PRACTICAS DEL JUEVES 02 DE DICIEMBRE DEL 2008
1. INGRESE a Visual basic 2008, archvivo/ nuevo proyecto , aplicacin Windows
Form
2. Proyecto agregar clase ponga de nombre clases
3. Modifique el siguientete codigo de la clase
CODIGO DE LA CLASE
Imports System.Drawing
Imports System.Drawing.Drawing2D
Namespace CLASES
Public Class CIRCULO
Protected Radio1 As Single

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 84 -

Protected Px1 As Integer


Protected Py1 As Integer
Protected A As Single
Public Event Evento1(ByVal Valor As Single)
Public Event Evento2(ByVal Valor As Single)
Sub DibujarCirculo(ByVal control As Control) ' modificar byval
Dim Lienzo1 As Graphics = control.CreateGraphics
Dim ColorRelleno As New SolidBrush(Color.Blue)
Dim x1 As Integer = X - Radio
Dim y1 As Integer = Y - Radio
Dim ancho As Integer = Radio * 2
Dim alto As Integer = Radio * 2
Dim rect As New Rectangle(x1, y1, ancho, alto)
Lienzo1.FillEllipse(ColorRelleno, rect)
End Sub
Public Sub New(Optional ByVal X1 As Integer = 100, Optional
ByVal Y1 As Integer = 100, Optional ByVal r As Integer = 10)
Px1 = X1
Py1 = Y1
Radio = r
End Sub
Property X() As Single
Get
X = Px1
End Get
Set(ByVal value As Single)
Px1 = value
End Set
End Property
Property Y() As Single
Get
Y = Py1
End Get
Set(ByVal value As Single)
Py1 = value
End Set
End Property
Property Radio() As Single
Get
Radio = Radio1
End Get
Set(ByVal value As Single)
Select Case value
Case Is < 0
RaiseEvent Evento1(value)
Case value > 0 To 100
Radio1 = value
Case Is > 100
RaiseEvent Evento2(value)
End Select
End Set
End Property
Public ReadOnly Property Area()
Get
A = Math.PI * Radio1 ^ 2
Area = A
End Get
End Property

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 85 -

End Class
Public Class cilindro
Inherits CIRCULO
Private Altura1 As Single
Sub DibujarCilindro(ByVal control As Control)
Dim i As Integer
Dim Lienzo1 As Graphics = control.CreateGraphics
Dim ColorRelleno As New SolidBrush(Color.FromArgb(0, 255, 0))
Dim x1 As Integer = X - Radio
Dim y1 As Integer = Y - Radio
Dim ancho As Integer = Radio * 2
Dim alto As Integer = Radio * 2
Dim rect As Rectangle
For i = 1 To Altura / 2
rect = New Rectangle(x1 + i, y1 - i, ancho, alto)
Lienzo1.FillEllipse(ColorRelleno, rect)
Next i
End Sub
Public Sub New(Optional ByVal h As Integer = 10)
Altura1 = h
End Sub
Public Property Altura() As Single
Get
Altura = Altura1
End Get
Set(ByVal value As Single)
Altura1 = value
End Set
End Property
ReadOnly Property AreaLateral() As Single
Get
AreaLateral = 2 * 3.1416 * Radio1 * Altura1
End Get
End Property
ReadOnly Property AreaTotal() As Single
Get
AreaTotal = AreaLateral + 2 * Area()
End Get
End Property
ReadOnly Property volumen() As Single
Get
volumen = Area() * Altura1
End Get
End Property
End Class
End Namespace

DISEO DEL FORMULARIO

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 86 -

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 87 -

CODIGO DEL FORMULARIO


Imports System.Drawing
Imports System.Drawing.Drawing2D
Public Class Form1
Private WithEvents Objeto1 As CLASES.CIRCULO
Private WithEvents Objeto2 As CLASES.cilindro
Private Sub Objeto_Evento1(ByVal Valor As Single) Handles
Objeto1.Evento1, Objeto2.Evento1
MsgBox(" no se permite radios negativos", MsgBoxStyle.MsgBoxHelp,
Valor.ToString)
End Sub
Private Sub objeto_Evento2(ByVal Valor As Single) Handles
Objeto1.Evento2, Objeto2.Evento2
MsgBox(" EL RADIO DEBE SER MENOR O IGUAL QUE 100 ",
MsgBoxStyle.Critical, Valor.ToString)
End Sub
Private Sub BtnPropCirculo_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles BtnPropCirculo.Click
Objeto1 = New CLASES.CIRCULO
ListBox1.Items.Clear()
If IsNumeric(TextBox3.Text) Then
Objeto1.X = TextBox1.Text
Objeto1.Y = TextBox2.Text
Objeto1.Radio = TextBox3.Text
ListBox1.Items.Add("PROPIEDADES DE LA CLASE CIRCULO")
ListBox1.Items.Add("RADIO = " & Objeto1.Radio)
ListBox1.Items.Add("AREA = " & Objeto1.Area)
Objeto1.DibujarCirculo(PictureBox1)
Else
MsgBox("INGRESE UN NUMERO EN LA CAJA DE TEXTO")
End If
End Sub
Private Sub BtnPropCilindro_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles BtnPropCilindro.Click
Objeto2 = New CLASES.cilindro
If IsNumeric(TextBox3.Text) And IsNumeric(TextBox4.Text) Then
Objeto2.X = TextBox1.Text
Objeto2.Y = TextBox2.Text
Objeto2.Radio = TextBox3.Text
Objeto2.Altura = TextBox4.Text
ListBox1.Items.Clear()
ListBox1.Items.Add("PROPIEDADES DE LA CLASE CILINDRO")
ListBox1.Items.Add("RADIO = " & Objeto2.Radio)
ListBox1.Items.Add("ALTURA = " & Objeto2.Altura)
ListBox1.Items.Add("AREA DE LA BASE = " & Objeto2.Area)
ListBox1.Items.Add("AREA LATERAL = " & Objeto2.AreaLateral)
ListBox1.Items.Add("AREA TOTAL = " & Objeto2.AreaTotal)
ListBox1.Items.Add("VOLUMEN = " & Objeto2.volumen)
Objeto2.DibujarCilindro(PictureBox1)
Objeto2.DibujarCirculo(PictureBox1)
Else
MsgBox(" ingrese numeros en la cajas de texto")
End If
End Sub

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 88 -

Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btnLimpiar.Click
PictureBox1.Image = Nothing
End Sub
End Class

TAREA.- Elabore la siguiente aplicacin ( use visual Basic 2010,clases , objetos,


propiedades, mtodos, eventos, namespaces, etc)
1. GRAFICA EN 3D
Se requiere una aplicacin similar a la mostrada donde los puntos se pueden de puntos
de un escaner y representarlo en 3D
La aplicacin debe tener en modelos de alambre lo siguiente
a) Rotaciones en los ejes x,y, e z
b) traslaciones eje x , y e z
c) escalado de x,y y z
tambin se debe realizar sombreados plano, Gouraud y Phong
realizar otras operaciones como torno, extrusin, Grafica de funciones 3D, slidos de
revolucin, etc
Dibujo de primitivas como esfera, caja, piramide, cono, cilindro, etc..

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 89 -

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 90 -

CONTROL DEL USUARIO


QUE ES UN CONTROL DE USUARIO
Un control de usuario es similar a cualquier otra clase que se pueden reutilizar en
proyectos mltiples, pero con la capacidad agregada de ser colocados en la caja de
herramientas y de ser mostrado en un formulario
Donde un mdulo de la clase tiene solamente cdigo, un modulo de control de usuario
tiene cdigo y un diseador: el diseador de control de usuario es similar al diseador
de formulario, tiene caractersticas para controlar el aspecto y el comportamiento del
control del usuario
CREAR UN CONTROL DE USUARIO
Para ello realiza los siguiente:
1. En el men archivo da clic en nuevo proyecto Windows form aplicacin
2. Agregar un control de usuario

3. En el Men de plantillas seleccione Control de usuario y dar clic en aceptar

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 91 -

Se muestra la siguiente pantalla de diseo de control de usuario

4. Adems el control de usuario creado se mostrar en el explorador de soluciones


ADICIONAR CONTROLES A UN CONTROL DE USUARIO
El tipo ms comn del control de usuario es un control compuesto es decir uno que se
componga de uno o ms controles estndares del formulario del Windows Los
controles se pueden agregar a una plantilla de control del usuario arrastrndolos de la
caja de herramientas al diseador del control del usuario
Cada vez que usted haya agregado un control , puedes clasificarlo segn el tamao y
moverlo en el diseador , y puedes fijar sus propiedades en la ventana de
propiedades
Para ello realiza lo siguiente.
1. Dibuja los controles deseado para formar tu objeto de usuario. Puedes crear
diferentes objetos de usuario : entre ellas tenemos

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 92 -

2. Cambie el nombre de los controles TextBox1 a TxtRadio , TextBox2 a TxtArea,


Button1 a Calcular y del formulario su propiedad Autosize a True
3. Ingrese el siguiente cdigo a la clase control del usuario

Public Class UserControl1


Protected Radio1 As Single
Protected A As Single
Public Event Evento1(ByVal Valor As Single)
Public Event Evento2(ByVal Valor As Single)
Property Radio() As Single
Get
Radio = Radio1
End Get
Set(ByVal value As Single)
Select Case value
Case Is < 0
RaiseEvent Evento1(value)
Case value > 0 To 100
Radio1 = value
TxtRadio.Text = Radio1
Case Is > 100
RaiseEvent Evento2(value)
End Select
End Set
End Property
Public ReadOnly Property Area()
Get
Area = A
End Get
End Property

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 93 -

Private Sub Calcular_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Calcular.Click
Radio = TxtRadio.Text
A = Math.PI * Radio ^ 2
Txtarea.Text = A
Calcular.BackColor = Color.FromArgb(255, 100, 100)
End Sub
Private Sub UserControl1_Evento1(ByVal Valor As Single) Handles Me.Evento1
MsgBox(" no se permite radios negativos")
End Sub
Private Sub Calcular_MouseLeave(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Calcular.MouseLeave
Calcular.BackColor = Color.FromArgb(100, 100, 255)
End Sub
Private Sub UserControl1_Evento2(ByVal Valor As Single) Handles Me.Evento2
MsgBox(" no se permite radios superiores a 100")
End Sub
End Class
4. Para que el nuevo control quede construido da clic en el men generar y luego en
nombre de la aplicacin , en este caso generar ejemplo2

5. Luego de haber sido generado seleccione un formulario y dibuje el nuevo control de


usuario que creaste (userControl1) , el cual se encuentra en el cuadro de
herramientas

6. Agregue un nuevo formulario con Proyecto \Agregar Windows Form


7. Arrastre su componente creado al formulario1
8 Puede ver sus propiedades con F4 al tratar de ingresar un radio negativo se genera
el evento 1 y muestra el siguiente mensaje

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 94 -

9 Al escoger el objeto UserControl se puede ver todos los eventos que responde y
tambin el evento1 y evento 2 creado

10 Escriba el siguiente cdigo en el formulario


Public Class Form1
Private Sub UserControl11_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles UserControl11.Click
Me.UserControl11.BackColor = Color.FromArgb(255, 0, 0)
Me.Text = "HIZO CLIK EN EL CONTROL DEL USUARIO"
End Sub
Private Sub UserControl11_MouseEnter(ByVal sender As Object, ByVal e As
System.EventArgs) Handles UserControl11.MouseEnter

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 95 -

Me.BackColor = Color.FromArgb(0, 255, 0)


Me.Text = "EL MOUSE ENTRO EN EL CONTROL DE USUARIO"
End Sub
Private Sub UserControl11_MouseLeave(ByVal sender As Object, ByVal e As
System.EventArgs) Handles UserControl11.MouseLeave
Me.BackColor = Color.FromArgb(255, 255, 0)
Me.UserControl11.BackColor = Color.FromArgb(100, 100, 100)
Me.Text = "EL MOUSE SALIO DEL CONTROL DE USUARIO"
End Sub
End Class
11. Ejecute el programa y ingrese el mouse al control de usuario, y luego salga y
haga clic y vea los resultados

COLECCIONES
Visual Basic tiene un tipo especial de objeto llamado coleccin que se pueda utilizar
para almacenar y para recuperar grupos de objetos.
Cada articulo en una coleccin tiene un ndice que se puede utilizar para identificar
ese artculo . Adems cada artculo en una coleccin tiene una clave , un valor de la
secuencia que se puede utilizar para identificar el artculo . la ventaja a usar una clave
es que no necesita recordar el ndice de un articulo ; en lugar de ello puedes referirle
que use un nombre significativo
Crear una coleccin
Las colecciones son tiles un programa utiliza instancias mltiples de la misma clase
El primer paso en crear una coleccin es crear una instancia de una coleccin de
objetos, segn lo demostrado en la declaracin siguiente.
Dim Profesionales as New colection
Una vez que se crea crea la coleccin , puedes adicionar o quitar artculos
Profesionales.Add (objetoTrabajador, Nombre de trabajador)

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 96 -

Al quitar un articulo , utiliza la llave para especificar el artculo para quitar


Profesionales.remove(Nombre de Trabajador)

Instruccin For Each...Next (Visual Basic)


Repite un grupo de instrucciones para cada elemento de una coleccin.
For Each element [ As datatype ] In group
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
Partes
element

Se requiere en la instruccin For Each. Es opcional en la instruccin

Next. Variable. Se utiliza para recorrer en iteracin los elementos de la coleccin.


datatype

Es obligatorio, a menos que element no se haya declarado ya. Tipo de

datos de element.
group

Obligatorio. Variable de objeto. Hace referencia a la coleccin sobre la

que se debe repetir la ejecucin de statements.


statements

Opcional. Una o ms instrucciones entre For Each y Next que se

ejecutan en cada elemento de group.


Exit For

Opcional. Transfiere el control fuera del bucle For Each.

Next

Obligatorio. Termina la definicin del bucle For Each.

Ejemplo liste los controles usando for each

Public Class Form1


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim ncontroles As Integer = Me.Controls.Count

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca


ListBox1.Items.Add("Name

- 97 -

Text")

For Each Control As Control In Me.Controls


ListBox1.Items.Add(Control.Name & "
" & Control.Text)
Next Control
ListBox1.Items.Add("nro controles " & ncontroles)
End Sub
End Class

Para crear una coleccin de objetos realiza los siguiente

Se tiene la clase persona con los siguientes propiedades


Codigo
Nombre
Clase alumno

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 98 -

Colecciones en Visual Basic


En trminos generales, una coleccin es un objeto utilizado para agrupar y administrar
objetos relacionados. Por ejemplo, cada formulario Form tiene una coleccin de controles.
(Puede tener acceso a esta coleccin a travs de la propiedad Controls del formulario.) Esta
coleccin es un objeto que representa todos los controles de ese formulario. Le permite
recuperar un control de la coleccin utilizando su ndice y recorrer en iteracin los elementos
de la coleccin utilizando una Instruccin For Each...Next (Visual Basic).
Sin embargo, hay varios tipos de colecciones y se diferencian entre s de varias maneras.

Disee un formulario como la siguiente

CODIGO DE LAS CLASES


Namespace MISCLASES
Public Class Personas
Protected Codigo1 As String
Protected Nombre1 As String
Public Property Codigo() As String
Get
Codigo = Codigo1
End Get
Set(ByVal value As String)

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 99 -

Codigo1 = value
End Set
End Property
Public Property Nombre() As String
Get
Nombre = Nombre1
End Get
Set(ByVal value As String)
Nombre1 = value
End Set
End Property
End Class
Public Class Alumnos
Inherits Personas
Private Nota1 As Single
Public Property Nota() As Single
Get
Nota = Nota1
End Get
Set(ByVal value As Single)
Nota1 = value
End Set
End Property
End Class
Public Class Profesores
Inherits Personas
Private Sueldo1 As Single
Public Property Sueldo() As Single
Get
Sueldo = Sueldo1
End Get
Set(ByVal value As Single)
Sueldo1 = value
End Set
End Property
End Class
End Namespace
CODIGO DEL FORMULARIO
Public Class Form1
Dim Persona1 As New MISCLASES.Personas
Dim Alumno1 As New MISCLASES.Alumnos
Dim profesor1 As New MISCLASES.Profesores
Dim CPersonas As New Collection
Dim CAlumnos As New Collection
Dim CProfesores As New Collection
Private Sub AlumnosListar_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles AlumnosListar.Click
Dim Alu As New MISCLASES.Alumnos
ListBox1.Items.Clear()
For Each Alu In CAlumnos
ListBox1.Items.Add(Alu.Codigo & "
" & Alu.Nombre & "
" &
Alu.Nota)
Next
ListBox1.Items.Add("Cantidad de Elementos" & " " &
CAlumnos.Count)
End Sub

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 100 -

Private Sub AlumnosEliminar_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles AlumnosEliminar.Click
Dim Alu As New MISCLASES.Alumnos
Dim nombre As String
nombre = InputBox("Ingrese Nombre Alumno", "Nombre alumno", "juan")
CAlumnos.Remove(nombre) ' puede eliminarse tambien por
posicion
CAlumnos.Remove(1)
MsgBox("OK")
End Sub
Private Sub AlumnosMostrar_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ALumnosMostrar.Click
Dim Alu As New MISCLASES.Alumnos
Dim nombre As String
nombre = InputBox("Ingrese Nombre Alumno", "Nombre alumno", "juan")
Alu = CAlumnos.Item(nombre) ' puede ser tambien por el lugar
del alumno
ListBox1.Items.Clear()
ListBox1.Items.Add(Alu.Codigo & "
" & Alu.Nombre & "
" &
Alu.Nota)
End Sub
Private Sub AlumnosAgregar_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles AlumnosAgregar.Click
Dim Alu As New MISCLASES.Alumnos
Dim Codigo As String, nombre As String
Dim Nota As Single
Codigo = InputBox("Ingrese Codigo del Alumno", "Codigo
alumno", "Ax")
nombre = InputBox("Ingrese Nombre Alumno", "Nombre alumno", "juan")
Nota = InputBox("Ingrese Nota del alumno", "Nota del alumno", "14")
Alu.Codigo = Codigo
Alu.Nombre = nombre
Alu.Nota = Nota
CAlumnos.Add(Alu, Alu.Nombre)
End Sub
Private Sub ProfesoresListar_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ProfesoresListar.Click
Dim Prof As New MISCLASES.Profesores
ListBox1.Items.Clear()
For Each Prof In CProfesores
ListBox1.Items.Add(Prof.Codigo & "
" & Prof.Nombre & "
" & Prof.Sueldo)
Next
ListBox1.Items.Add("Cantidad de Elementos" & " " &
CProfesores.Count)
End Sub
Private Sub PersonasListar_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles PersonasListar.Click
Dim pers As New MISCLASES.Personas
ListBox1.Items.Clear()
For Each pers In CPersonas
ListBox1.Items.Add(Persona1.Codigo & "
" & pers.Nombre)
Next

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca


ListBox1.Items.Add("Cantidad de Elementos" & "
CPersonas.Count)
End Sub

- 101 " &

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
With Persona1
.Codigo = "P1"
.Nombre = "JUAN"
End With
With Alumno1
.Codigo = "A1"
.Nombre = "PEDRO"
.Nota = 14
End With
With profesor1
.Codigo = "PR1"
.Nombre = "CARLOS"
.Sueldo = 2400
End With
CPersonas.Add(Persona1, Persona1.Nombre)
CAlumnos.Add(Alumno1, Alumno1.Nombre)
CProfesores.Add(profesor1, profesor1.Nombre)
End Sub
Private Sub PersonasMostrar_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles PersonasMostrar.Click
Dim Pers As New MISCLASES.Personas
Dim nombre As String
nombre = InputBox("Ingrese Nombre persona", "Nombre Persona", "JUAN")
Pers = CPersonas.Item(nombre) ' puede ser tambien por el lugar
del alumno
ListBox1.Items.Clear()
ListBox1.Items.Add(Pers.Codigo & "
" & Pers.Nombre)
End Sub
Private Sub PersonasAgregar_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles PersonasAgregar.Click
Dim Pers As New MISCLASES.Personas
Dim Codigo As String, nombre As String
Codigo = InputBox("Ingrese Codigo de la persona", "Codigo
Persona", "Px")
nombre = InputBox("Ingrese Nombre Persona", "Nombre persona", "JOSE")
Pers.Codigo = Codigo
Pers.Nombre = nombre
CPersonas.Add(Pers, Pers.Nombre)
End Sub
Private Sub PersonasEliminar_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles PersonasEliminar.Click
Dim pers As New MISCLASES.Personas
Dim nombre As String
nombre = InputBox("Ingrese Nombre persona", "Nombre persona",
"juan")
CPersonas.Remove(nombre)
MsgBox("OK")
End Sub
End Class

GUIA DE PRACTICAS DE SI2010A PARTE 1 \Ismael Vliz Vilca

- 102 -

EJECUCION

2. CONTROLADOR DE EVENTOS PAG 94


VARIOS CONTROLADORES
Public Class Form1
Private Sub Button1_Click(ByVal sender As
System.EventArgs) Handles Button1.Click
Me.BackColor = Color.FromArgb(255, 0,
End Sub
Private Sub Button1_Enter(ByVal sender As
System.EventArgs) Handles Button1.MouseEnter
Button1.BackColor = Color.FromArgb(0,

System.Object, ByVal e As
0)
Object, ByVal e As
255, 0)

End Sub
Private Sub Button1_Leave(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button1.MouseLeave
sender.BackColor = Color.FromArgb(0, 0, 255)
End Sub
End Class

UN EVENTO PARA VARIOS CONTROLES

También podría gustarte