Documentos de Académico
Documentos de Profesional
Documentos de Cultura
http://
alarcos.inf--cr.uclm.es/
http://alarcos.inf
cr.uclm.es/per/
per/fruiz/
fruiz/cur/
cur/vbn/
vbn/vbn.htm
3 Orientacin a Objetos en
Visual Basic .NET
Francisco Ruiz
Manuel Serrano
alarcos.infalarcos.inf-cr.uclm.es
3. 2
Programaci
Programacin con Visual Basic .NET
Contenidos sesin 3
Orientacin a Objetos.
Encapsulacin.
Polimorfismo.
Espacios de Nombres.
Herencia.
Interfaces.
Estructuras.
Eventos.
Clases Predefinidas.
3. 3
Orientaci
Orientacin a Objetos.
Module Pagos
Public Sub TransfNomina(ByVal liIDEmpleado As Integer,
Integer,
ByVal _ ldbImporte As Double)
Double)
' ......
End Sub
Public Sub MostrarEmpleado(ByVal liIDEmpleado As
Integer)
Integer)
' ......
End Sub
' otros procedimientos del m
mdulo
' ......
End Module
Variables p
pblicas en los m
mdulos
Demasiados procedimientos
Cdigo disperso
Dif
Difcil mantenimiento
3. 4
Orientaci
Orientacin a Objetos.
Estructuras de cdigo
Conjunto de procedimientos e informaci
informacin que ejecutan una
serie de procesos destinados a resolver un grupo de tareas
con un denominador com
comn.
Habr
Habr tantas estructuras de c
cdigo como aspectos del
programa sea necesario resolver.
Los procedimientos y los datos que contenga la estructura s
slo
podr
podrn acceder y ser accedidos por otros procedimientos y
datos bajo una serie de reglas.
estructuras de cdigo
objetos
3. 5
Orientaci
Orientacin a Objetos.
Objetos
3. 6
Orientaci
Orientacin a Objetos.
Clases
clase
UCLM-ESI. Programacin con Visual Basic .NET
objeto
3. 7
Orientaci
Orientacin a Objetos.
3. 8
Orientaci
Orientacin a Objetos.
Abstraccin
Identificaci
Identificacin de objetos a trav
travs de sus aspectos
conceptuales.
{Porsche 911, Opel Astra,
Astra, Seat 600} Coche
Encapsulacin
Separaci
Separacin entre el interfaz del objeto y su
implementaci
implementacin.
Ventajas:
3. 9
Orientaci
Orientacin a Objetos.
Polimorfismo
Varios m
mtodos con el mismo nombre pueden
realizar acciones diferentes.
Pelota.Tirar()
Herencia
VasoCristal.Tirar()
3. 10
Orientaci
Orientacin a Objetos.
Herencia (ejemplos)
Coche (Motor, Ruedas, Volante, Acelerar)
CocheDeportivo ( + ABS, Turbo)
Empleado (DNI, FechaNacimiento, Fichar,
CogerVacaciones)
CyberEmpleado( + email, EncriptarDatos)
3. 11
Orientaci
Orientacin a Objetos.
Jerarquas de clases
3. 12
Orientaci
Orientacin a Objetos.
www.uml.org
UCLM-ESI. Programacin con Visual Basic .NET
3. 13
Orientaci
Orientacin a Objetos.
3. 14
Orientaci
Orientacin a Objetos.
Creacin de clases
3. 15
Orientaci
Orientacin a Objetos.
3. 16
Orientaci
Orientacin a Objetos.
3. 17
Encapsulacin
El cdigo de una clase debe permanecer
3. 18
Encapsulaci
Encapsulacin
3. 19
Encapsulaci
Encapsulacin
3. 20
10
Encapsulaci
Encapsulacin
3. 21
Mtodos (i)
WithEnd With
Dim loEmp As Empleado = New Empleado()
With loEmp
.Nombre = "Ana"
.Apellidos = "Naranjo"
.MostrarDatos()
MostrarDatos()
End With
3. 22
11
Mtodos (ii)
Me / MyClass
Public Class Empleado
Public piID As Integer
Private msNombre As String
Public Sub VerDatos()
VerDatos()
' utilizamos Me y MyClass en este m
mtodo para tomar el valor de la variable
' piID que est
est en esta misma clase, y para llamar al m
mtodo NombreMay()
NombreMay()
' que tambi
tambin est
est en la clase
Console.WriteLine("C
digo del empleado: {0}", Me.piID)
Console.WriteLine("C
Me.piID)
Console.WriteLine("Nombre
Console.WriteLine("Nombre del empleado: {0}", MyClass.NombreMay())
MyClass.NombreMay())
End Sub
Public Function NombreMay()
NombreMay() As String
Return UCase(msNombre)
UCase(msNombre)
End Function
End Class
3. 23
Polimorfismo.
Varios mtodos con idntico nombre dentro de
Overloads
3. 24
12
Polimorfismo.
Ejemplo.
' m
mtodos sobrecargados
Public Overloads Sub Sueldo()
' aqu
aqu mostramos en consola el importe del sueldo formateado
Console.WriteLine("El
Console.WriteLine("El sueldo es {0}", Format(Me.Salario,
Format(Me.Salario, "#,#.##"))
Console.ReadLine()
Console.ReadLine()
End Sub
Public Overloads Function Sueldo(ByVal liDia As Integer)
Integer) As String
' aqu
aqu mostramos la fecha del mes actual en la que se realizar
realizar la transferencia
' del sueldo al banco del empleado
Dim ldtFechaActual As Date
Dim lsFechaCobro As String
ldtFechaActual = Now()
Now()
lsFechaCobro = CStr(liDia)
CStr(liDia) & "/" & CStr(Month(ldtFechaActual))
CStr(Month(ldtFechaActual)) & "/" & _
CStr(Year(ldtFechaActual))
CStr(Year(ldtFechaActual))
Return lsFechaCobro
End Function
3. 25
3. 26
13
3. 27
3. 28
14
3. 29
3. 30
15
3. 31
Espacios de Nombres.
3. 32
16
Espacios de Nombres.
3. 33
Mtodos constructores.
Public Class Empleado
Private mdtFechaCrea As Date
Public Property FechaCrea()
FechaCrea() As Date
Get
Return mdtFechaCrea
End Get
Set(ByVal Value As Date)
mdtFechaCrea = Value
End Set
End Property
' m
mtodo constructor
Public Sub New()
New()
' asignamos un valor inicial a una variable de propiedad
Me.FechaCrea = Now
End Sub
End Class
UCLM-ESI. Programacin con Visual Basic .NET
3. 34
17
Herencia.
' crear clase derivada en dos llneas
Public Class Administrativo
Inherits Empleado
3. 35
Herencia.
3. 36
18
Herencia.
Module Module1
Sub Main()
Main()
' con una instancia del objeto Empleado
'o Administrativo no podemos acceder al
' m
mtodo VerFecha()
VerFecha() ya que es Protected
Dim loEmp As Empleado = New Empleado()
loEmp.psNombre = "Pedro Peral"
Dim loAdmin As New Administrativo()
loAdmin.piID = 567
loAdmin.psNombre = "Juan Iglesias"
loAdmin.pdtFecha = "5/9/2002"
loAdmin.AsignarDNI("11223344")
loAdmin.AsignarDNI("11223344")
loAdmin.DatosAdmin()
loAdmin.DatosAdmin()
Console.Read()
Console.Read()
End Sub
End Module
Public Class Empleado
Public psNombre As String
Public pdtFecha As Date
' los dos siguientes miembros s
slo ser
sern visibles
' dentro de esta clase o en sus clases derivadas
3. 37
Herencia.
3. 38
19
Herencia.
3. 39
Herencia.
Imports ClassLibrary1
Module Module1
Sub Main()
Main()
Dim loEmplea As Empleado = New Empleado()
' al acceder a las propiedades del objeto
' desde este proyecto, no est
est disponible
' el miembro mdbSueldo ya que est
est declarado
' como Friend en la clase Empleado
loEmplea.piID = 70
loEmplea.Nombre = "Alicia Mar"
loEmplea.VerDatos()
loEmplea.VerDatos()
Console.Read()
Console.Read()
End Sub
End Module
3. 40
20
Herencia.
3. 41
Herencia.
3. 42
21
Herencia.
Selladas: NotInheritable
Public NotInheritable Class NombreClase
Abstractas: MustInherit
Public MustInherit Class NombreClase
3. 43
Casting.
Module Module1
Public Sub Main()
Main()
Dim loEmple As New Empleado()
loEmple.piID = 58
loEmple.psNombre = "Elena Peral"
ManipularVarios(loEmple)
ManipularVarios(loEmple)
Dim loFac As New Factura()
loFac.pdtFecha = "25/2/2002"
loFac.piImporte = 475
ManipularVarios(loFac)
ManipularVarios(loFac)
Console.Read()
Console.Read()
End Sub
3. 44
22
Interfaces.
Proporcionan, a modo de declaracin, una lista
3. 45
Interfaces.
Ejemplo.
' las clases que implementen este interfaz deber
debern crear la propiedad
' Longitud y el m
mtodo ObtenerValor(); la codificaci
codificacin de dichos
' miembros ser
ser particular a cada clase
Public Interface ICadena
ReadOnly Property Longitud() As Integer
Function ObtenerValor()
ObtenerValor() As String
End Interface
Public Class Empleado
Implements ICadena
'....
'....
End Class
UCLM-ESI. Programacin con Visual Basic .NET
3. 46
23
Estructuras.
Public Structure DatosBanco
Public IDCuenta As Integer
Public Titular As String
Public Saldo As Integer
End Structure
3. 47
Estructuras.
La estructura DateTime
DateTime.Today
DateTime.Today
devuelve la fecha actual
(a
o, mes)
DateTime.DaysInMonth
DateTime.DaysInMonth(a
devuelve el n
nmero de d
das que tiene el mes de un a
ao
(fecha1,, fecha2)
DateTime.Compare
DateTime.Compare(fecha1
compara dos fechas
(dias))
objetoDateTime.AddDays
objetoDateTime.AddDays(dias
aade a la fecha tantos d
das como se indiquen
(meses))
objetoDateTime.AddMonths
objetoDateTime.AddMonths(meses
()
objetoDateTime.ToLongDateString
objetoDateTime.ToLongDateString()
formatea la fecha
UCLM-ESI. Programacin con Visual Basic .NET
3. 48
24
Estructuras.
Enumeraciones
Public Enum Musicas As Integer
Rock ' 0
Blues ' 1
NewAge ' 2
Funky ' 3
End Enum
3. 49
Eventos.
Suceso o situaci
situacin que acontece en una ubicaci
ubicacin de
espacio y tiempo no predecible.
predecible.
3. 50
25
Eventos.
Emisin de eventos.
Public Class Empleado
' declaramos el evento
Public Event LimiteSueldo(ByVal _
ldbImporte As Double)
Double)
Private msNombre As String
Private mdbSueldo As Double
Public Property Nombre() As String
Get
Return msNombre
End Get
Set(ByVal Value As String)
String)
msNombre = Value
End Set
End Property
3. 51
Eventos.
Recepcin de eventos.
Module Module1
Private WithEvents moEmple As Empleado
'......
'......
Public Sub moEmple_LimiteSueldo(ByVal ldbImporte As Double)
Double) _
Handles moEmple.LimiteSueldo
Console.WriteLine("Se
Console.WriteLine("Se ha sobrepasado para {0} el llmite" & _
" establecido de sueldo", moEmple.Nombre)
moEmple.Nombre)
Console.WriteLine("El
Console.WriteLine("El importe {0} no es v
vlido", ldbImporte)
ldbImporte)
Console.ReadLine()
Console.ReadLine()
End Sub
'
End Module
3. 52
26
Clases Predefinidas.
CTS: Sistema Com
Comn de Tipos
3. 53
Clases Predefinidas.
3. 54
27
Clases Predefinidas.
"
'"
Hola .NET"
' "Hola .NET
"
' "Hola .NET"
'"
Hola"
' "HolaWWWWWW
"HolaWWWWWW""
3. 55
Clases Predefinidas.
' "Estamprogramando
"Estamprogramando""
' True
' False
3. 56
28
Clases Predefinidas.
' "bosqu"
'3
' 21
3. 57
Clases Predefinidas.
3. 58
29
Clases Predefinidas.
La clase Convert
Dim lsCadena As String
lsCadena = Convert.ToString
(150)
Convert.ToString(150)
Dim liNum As Integer
liNum = Convert.ToInt32
Convert.ToInt32((lsCadena)
lsCadena)
' "150"
' 150
3. 59
Clases Predefinidas.
3. 60
30
Clases Predefinidas.
3. 61
Clases Predefinidas.
3. 62
31
Clases Predefinidas.
3. 63
Clases Predefinidas.
Console.WriteLine("Introducir
Console.WriteLine("Introducir n
nmero para averiguar su signo")
liSigno = Console.ReadLine()
Console.ReadLine()
Select Case Math.Sign
(liSigno))
Math.Sign(liSigno
Case -1
Console.WriteLine("El
Console.WriteLine("El n
nmero es negativo")
Case 0
Console.WriteLine("El
Console.WriteLine("El n
nmero es cero")
Case 1
Console.WriteLine("El
Console.WriteLine("El n
nmero es positivo")
End Select
' Round():
Round(): redondea el n
nmero pasado como par
parmetro
ldbRedondear = Math.Round
(28.3215)
Math.Round(28.3215)
Console.WriteLine("Redondear
Console.WriteLine("Redondear 28.3215 -->
--> {0}", ldbRedondear)
ldbRedondear)
ldbRedondear = Math.Round(28.63215)
Math.Round(28.63215)
Console.WriteLine("Redondear
Console.WriteLine("Redondear 28.63215 -->
--> {0}", ldbRedondear)
ldbRedondear)
Console.ReadLine()
Console.ReadLine()
End Sub
3. 64
32
Clases Predefinidas.
Formateo de Fechas.
Sub Main()
Main()
Dim ldtFecha As Date
Dim lsListaFormatos()
lsListaFormatos() As String = {"d", "D", "g", "G", "t", "T", "m", "y"}
Dim lsFormato As String
ldtFecha = Date.Now()
Date.Now()
For Each lsFormato In lsListaFormatos
Console.WriteLine("Formato:
Console.WriteLine("Formato: {0}, resultado: {1}", lsFormato,
lsFormato, ldtFecha.ToString(lsFormato))
ldtFecha.ToString(lsFormato))
Next
End Sub
Sub Main()
Main()
Dim ldtFecha As Date
ldtFecha = Date.Now()
Date.Now()
' array para obtener todos los formatos de fecha del sistema
Dim lsListaFormatos()
lsListaFormatos() As String
lsListaFormatos = ldtFecha.GetDateTimeFormats()
ldtFecha.GetDateTimeFormats()
Dim lsFormato As String
For Each lsFormato In lsListaFormatos
Console.WriteLine(lsFormato)
Console.WriteLine(lsFormato)
Next
Console.ReadLine()
Console.ReadLine()
End Sub
UCLM-ESI. Programacin con Visual Basic .NET
3. 65
Clases Predefinidas.
Arrays.
Sub Main()
Main()
' declarar un array de tipo String,
String, el n
nmero de elementos es el indicado en la declaraci
declaracin m
ms
' uno, porque la primera posici
posicin de un array es cero
Dim sNombres(3)
sNombres(3) As String
' asignar valores al array
sNombres(0)
sNombres(0) = "Ana" : sNombres(1)
sNombres(1) = "Pedro" : sNombres(2)
sNombres(2) = "Antonio" : sNombres(3)
sNombres(3) = "Laura"
' pasar un valor del array a una variable
Dim sValor As String
sValor = sNombres(2)
sNombres(2)
' mostrar en la consola el valor pasado a una variable y un valor
valor directamente desde el array
Console.WriteLine("Valor
Console.WriteLine("Valor de la variable sValor:
sValor: {0}", sValor)
sValor)
Console.WriteLine("Valor
Console.WriteLine("Valor del array,
array, posici
posicin 1: {0}", sNombres(1))
sNombres(1))
Console.ReadLine()
Console.ReadLine()
End Sub
UCLM-ESI. Programacin con Visual Basic .NET
3. 66
33
Clases Predefinidas.
Sub Main()
Main()
' 1) estableciendo el n
nmero de elementos
Dim sNombres(2)
sNombres(2) As String
' 2) asignando valores al array al mismo tiempo que se declara
Dim sEstaciones()
sEstaciones() As String = {"Ana", "Pedro", "Luis"}
' 3) indicando el tipo de dato pero no el n
nmero de elementos
Dim iValores()
iValores() As Integer
' 4) indicando el tipo de dato y estableciendo una lista vac
vaca de elementos,
Dim iDatos()
iDatos() As Integer = {}
' 5) instanciando el tipo de dato, estableciendo el n
nmero de elementos al instanciar,
instanciar,
' e indicando que se trata de un array al situar las llaves
Dim iCantidades()
iCantidades() As Integer = New Integer(20)
Integer(20) {}
' 6) declarar primero la variable que contendr
contendr el array,
array, asignar valores al array al mismo tiempo que se instancia
Dim iNumeros()
iNumeros() As Integer
iNumeros = New Integer()
Integer() {10, 20, 30, 10, 50, 60, 10, 70, 80}
End Sub
UCLM-ESI. Programacin con Visual Basic .NET
3. 67
Clases Predefinidas.
3. 68
34
Clases Predefinidas.
Recorrer el contenido
Sub Main()
Main()
Dim sNombres()
sNombres() As String = {"Ana", "Luis", "Pablo"}
Dim iContador As Integer
Dim sUnNombre As String
' modo tradicional
Console.WriteLine("Recorrido
Console.WriteLine("Recorrido del array con LBound()
LBound() y UBound()")
UBound()")
For iContador = LBound(sNombres
LBound(sNombres)) To UBound(sNombres
UBound(sNombres))
Console.WriteLine("
Posicion:: {0} - Valor: {1}", iContador,
Console.WriteLine("Posicion
iContador, sNombres(iContador))
sNombres(iContador))
Next
Console.WriteLine()
Console.WriteLine()
' con bucle For Each
Console.WriteLine("Recorrido
Console.WriteLine("Recorrido del array con bucle For Each")
Each")
For Each sUnNombre In sNombres
Console.WriteLine("Nombre
Console.WriteLine("Nombre actual: {0}", sUnNombre)
sUnNombre)
Next
Console.WriteLine()
Console.WriteLine()
UCLM-ESI. Programacin con Visual Basic .NET
3. 69
Clases Predefinidas.
3. 70
35
Clases Predefinidas.
3. 71
Clases Predefinidas.
Arrays Multidimensionales
3. 72
36
Clases Predefinidas.
Arrays Multidimensionales
Array.Rank()
Devuelve el n
nmero de dimensiones.
Array.GetLength(dimension)
Devuelve el n
nmero de elementos de una dimensi
dimensin.
Array.GetLowerBound(dimension)
Devuelve el n
nmero de ndice inferior de una dimensi
dimensin.
Array.GetUpperBound(dimension)
Devuelve el n
nmero de ndice superior de una dimensi
dimensin.
3. 73
Clases Predefinidas.
Colecciones.
ArrayList
Hashtable
SortedList
Queue
Stack
3. 74
37
Clases Predefinidas.
3. 75
Clases Predefinidas.
ArrayList.GetRange
ArrayList.GetRange (posicion,
posicion, n)
Obtiene un subarray comenzando por posicion y tomando n elementos.
ArrayList.FixedSize
ArrayList.FixedSize (arraylist)
arraylist)
ArrayList.Repeat
ArrayList.Repeat (valor, cantidad)
ArrayList.ToArray
ArrayList.ToArray ()
3. 76
38
Clases Predefinidas.
ArrayList.Remove
ArrayList.Remove (valor)
Elimina un elemento.
ArrayList.RemoveAt
ArrayList.RemoveAt (posicion)
posicion)
ArrayList.RemoveRange
ArrayList.RemoveRange (posicion,
posicion, n)
ArrayList.Clear
ArrayList.Clear ()
3. 77
Clases Predefinidas.
Sub Main()
Main()
' declarar colecci
coleccin Hashtable
Dim htCliente As Hashtable
htCliente = New Hashtable()
Hashtable()
' a
aadir valores
htCliente.Add
("ID", 22)
htCliente.Add("ID",
htCliente.Add
("Nombre", "Pedro")
htCliente.Add("Nombre",
htCliente.Add
("Apellidos", "Naranjo")
htCliente.Add("Apellidos",
htCliente.Add("Domicilio",
htCliente.Add("Domicilio", "C/Rio
"C/Rio Bravo, 25")
htCliente.Add("Edad",
htCliente.Add("Edad", 35)
htCliente.Add("
Credito",
", 250)
htCliente.Add("Credito
' mostrar el n
nmero de elementos que contiene
Console.WriteLine("El
Console.WriteLine("El objeto Hashtable tiene {0} elementos", htCliente.Count
htCliente.Count))
Console.WriteLine()
Console.WriteLine()
UCLM-ESI. Programacin con Visual Basic .NET
3. 78
39
Clases Predefinidas.
3. 79
Clases Predefinidas.
Hashtable.ContainsValue
Hashtable.ContainsValue(valor)
(valor)
Comprueba que un valor est
est en la tabla
Hashtable.Remove
Hashtable.Remove(clave)
(clave)
Elimina un valor de la tabla
Hashtable.Clear
Hashtable.Clear()
Elimina todos los valores de la tabla
Hashtable.Keys
Hashtable.Keys()
Devuelve un array con los nombres de las claves de la tabla
Hashtable.Values
Hashtable.Values()
Devuelve un array con los nombres de los valores de la tabla
3. 80
40
Clases Predefinidas.
3. 81
Clases Predefinidas.
3. 82
41
Clases Predefinidas.
3. 83
Clases Predefinidas.
3. 84
42
Clases Predefinidas.
3. 85
Clases Predefinidas.
3. 86
43
Clases Predefinidas.
3. 87
Ejercicio
3. 88
44