Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
1. Introducción
Con Visual Basic .NET se pueden escribir tanto programas convencionales como
para Internet. Las aplicaciones podrán mostrar una interfaz gráfica al usuario, o
bien una interfaz de texto (denominada de consola).
Programa Código
escrito en .NET Compilador Código
Compilador Escrito en
(código fuente) MSIL
JIT máquina
• Editar el programa
• Compilarlo
• Ejecutarlo
• Depurarlo
2VBNET 1
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
www.microsoft.com/downloads
Solo falta un editor de código fuente. Es suficiente con un editor de texto sin
formato; por ejemplo el bloc de notas de windows.
Imports System
Public Module test
Public Sub Main()
Console.writeline("Buenos dias")
End Sub
End Module
Imports System
Esta línea permite tener directamente accesibles los elementos del Namespace
System. Sin ella, se tendrían que utilizar los nombres completos para todos los
elementos contenidos dentro del Namespace. En nuestro caso, deberíamos utilizar:
System.Console.writeline(“Buenos días”)
En Visual Basic, toda parte de código debe estar contenida dentro de un módulo o
clase.
Console.writeline(“Buenos días”)
Hay que destacar que Visual Basic no hace distinción entre minúsculas y
mayúsculas dentro de las instrucciones.
2VBNET 2
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Compilación
Inicio/Programas/Microsoft .NET framework SDK v2.0 /Símbolo del sistema del SDK
2VBNET 3
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Para aplicaciones mas complicadas suele ser útil especificar ciertas opciones para el
funcionamiento del compilador. El conjunto de las opciones disponibles se puede
obtener lanzando el comando vbc / ?.
El entorno de desarrollo integrado que más destaca es Microsoft Visual Studio .NET,
para aplicaciones empresariales ya que incorpora utilidades que facilitan mucho los
desarrollos más complejos.
El entorno Visual Basic 2005 Express (gratuito), permite escribir aplicaciones de
consola y aplicaciones con interfaz gráfica.
2VBNET 4
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Aplicación Windows
-System
-System.Data
-System.Drawing
-System.Windows.Forms
-System.Xml
Biblioteca de clases
Esta plantilla se puede utilizar para crear clases y componentes que podrán
compartirse con otros proyectos.
La plantilla añade al proyecto los siguientes elementos:
-System
-System.Data
-System.Xml
2VBNET 5
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Permite crear una biblioteca de clases utilizable en otros proyectos. Esta biblioteca
es más específica, ya que se dedica a crear controles utilizables en una aplicación
Windows.
La plantilla añade al proyecto los siguientes elementos:
-System
-System.Data
-System.Drawing
-System.Windows.Forms
-System.Xml
Aplicación de consola
Este tipo de aplicación debe ser ejecutada a partir de la línea de comandos de una
ventana de comandos. No tiene interfaz gráfica, y las entradas y salidas se realizan
a partir de la línea de comando y hacia la consola.
La plantilla añade al proyecto los siguientes elementos:
-System
-System.Data
-System.Xml
Servicios Windows
Está plantilla está pensada para la creación de aplicaciones que se ejecutan como
tareas del sistema.
Proyecto Vacío
2VBNET 6
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Module HolaMundo
'
' Punto de entrada al programa.
'
Sub Main()
System.Console.WriteLine("Hola mundo!!!")
System.Console.Readline()
End Sub
End Module
2VBNET 7
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
En este caso calculamos la suma, resta, producto, y la división de dos datos cuyo
valor son 20 y 10.
dentro de esa cadena podemos usar unos indicadores o marcadores en los que se
mostrarán los parámetros indicados en esos dos métodos de la clase Console.
{N [, M ][: Formato ]}
Console.WriteLine("---------- ----------")
Console.WriteLine("{0,10} {1,-10} {2}", 10, 15, 23)
Console.WriteLine("---------- ----------")
Console.WriteLine("{0,10:#,###.00} {1,10}", 10.476, 15.355)
2VBNET 8
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Console.WriteLine("--------------------")
Console.WriteLine("{0,20}", s)
Console.WriteLine("{0,20}", s1)
Console.WriteLine("--------------------")
2VBNET 9
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Ejemplo 3: Procedimientos
Module Aritmética
'
' Procedimiento sumar:
' parámetros x e y de tipo double
' devuelve x + y
'
Function sumar(ByVal x As Double, ByVal y As Double) As Double
Dim resultado As Double = 0
sumar = x + y
'resultado = x + y
'Return resultado
End Function
Sub Main()
Dim a As Double, b As Double, r As Double = 0
Console.WriteLine("Introduzca un numero: ")
a = Console.ReadLine()
Console.WriteLine("Introduzca un numero: ")
b = Console.ReadLine()
r = sumar(a, b)
System.Console.WriteLine("Suma = " & r)
End Sub
End Module
2VBNET 10
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Siguiendo con la analogía entre una clase y un plano de un edificio. Sabemos que
es posible construir diferentes edificios a partir del mismo plano. De la misma
manera, se pueden construir muchos objetos a partir de la misma clase.
3.1 Objetos.Clases
Los términos clase y objeto por lo tanto son diferentes. Una clase representa la
estructura de un elemento, mientras que el objeto es un ejemplar creado
basándose en el modelo de esta estructura. La modificación de un objeto no
cambia para los otros objetos creados a partir del mismo modelo (clase).En nuestro
ejemplo: añadir una parte a un edificio existente no cambia en los demás edificios
construidos siguiendo el mismo plano. Al revés, la modificación del plano(clase)
lleva una serie de modificaciones para todos los nuevos edificios (todos los nuevos
objetos).
Ejemplo 3:
2VBNET 11
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Los métodos representan las acciones que un objeto puede realizar. Se aplican
creando procedimientos o funciones en una clase.
Los eventos son informaciones que un objeto recibe o transmite desde o hacia otro
objeto o aplicación. Estos permiten que los objetos ejecuten ciertas acciones al
verificarse una situación especial (p.e. evento que puede venir cuando el usuario
realiza una acción con el ratón o teclado)
Cuenta01.Transferencia(cuenta02)
2VBNET 12
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Objeto
mensajes
atributos
métodos
Normalmente, los atributos, la estructura más interna del objeto, se ocultan a los
usuarios del objeto (encapsulación), manteniendo como única conexión con el
exterior los mensajes. Esto quiere decir que los atributos de un objeto solamente
podrán ser manipulados por los métodos del propio objeto. Este conjunto de
métodos reciben el nombre de interfaz: medio de comunicación con un objeto.
Vamos a crear la clase de objetos CCuenta que representa una cuenta bancaria.
Private nombre As String ' nombre del cliente del banco al que pertenece
Private cuenta As String ' número de cuenta
Private saldo As Double ' saldo actual de la cuenta
Private tipoDeInteres As Double ' tipo de interes en tanto por cien
End Class
Entre Class y End Class indicamos los atributos asociados a la clase cuenta.
2VBNET 13
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Dentro de los diferentes espacios de nombres hay uno que destaca por las clases
de propósito general que incluye: System en este encontraremos la clase console
que proporciona los métodos para manipular la entrada/salida estándar, la clase
string para manipular los métodos correspondientes para manipular cadenas, la
clase Math que proporciona los métodos correspondientes a las funciones
matemáticas de uso más frecuente, …
System.Windows
Contiene el conjunto de elementos que permiten la creación de interfaces para
usuarios de Windows.
System.Web
Contiene todos los recursos necesarios para crear aplicaciones Web, como por
ejemplo las clases de la tecnología ASP.NET o las clases usadas para crear servicios
Web XML.
System.Data
Contiene un conjunto de clases especializadas en el acceso a la base de datos, con
el soporte ADO.NET
System.Xml
El lenguaje XML está ahora por todas partes y este Namespace contiene las clases
que permiten la manipulación de documentos XML.
La entrada y salida queda reforzada con la clase System.IO, que a su vez, aporta
clases para el manejo de ficheros.
2VBNET 14
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Un método se escribe en una clase de objetos y determina cómo tiene que actuar el
objeto cuando recibe el mensaje vinculado con ese método. A su vez, un método
puede también enviar mensajes a otros objetos solicitando una acción o
información. Además los atributos definidos en la clase permitirán almacenar
información para dicho objeto.
El comportamiento queda definido por las acciones que se pueden realizar con la
clase CCuenta. Por ejemplo, de una cuenta de un cliente se puede:
2VBNET 15
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
End Sub
Se ha declarado el método como público para que pueda ser accesible para
cualquier otra clase o subclase que necesite utilizarlo.
PROGRAMA MAIN
Para poder crear objetos de esta clase y trabajar con ellos, tendremos que escribir
un programa. En un programa tiene que haber un módulo con un procedimiento
Main, puesto que éste es el punto de entrada y salida del programa.
2VBNET 16
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
De esta forma podemos decir que cuenta01, cuenta02 y cuenta03 son objetos
(instancias) de la clase CCuenta.
Module Test
Public Sub Main()
' declaramos los objetos de la clase cuenta
Dim cuenta01 As CCuenta = New CCuenta()
cuenta01.asignarNombre("Un nombre")
cuenta01.asignarCuenta("Una cuenta")
cuenta01.asignarTipoDeInteres(2.5)
cuenta01.ingreso(1000000)
cuenta01.reintegro(500000)
System.Console.WriteLine(cuenta01.obtenerNombre())
System.Console.WriteLine(cuenta01.obtenerCuenta())
System.Console.WriteLine(cuenta01.estado())
System.Console.WriteLine(cuenta01.obtenerTipoDeInteres())
System.Console.WriteLine()
System.Console.Readline()
End Sub
CONSTRUCTORES/DESTRUCTORES
End Sub
Como vemos es un constructor sin parámetros que no hace nada. Sin embargo, es
necesario porque será invocado cada vez que se construya un objeto sin especificar
ningún argumento, donde los valores predeterminados serán los indicados por el
sistema (numéricos ceros , alfanuméricos y referencias a objetos a nothing).
2VBNET 17
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
End Sub
Los constructores deben declararse siempre públicos para que sean invocados
desde cualquier parte.
Console.WriteLine(cuenta02.obtenerNombre())
Console.WriteLine(cuenta02.obtenerCuenta())
Console.WriteLine(cuenta02.estado())
Console.WriteLine(cuenta02.obtenerTipoDeInters())
Vemos que se ha definido en un clase dos métodos con el mismo nombre New,
cuando esto ocurre se define que el método está sobrecargado, esto es posible
si los dos métodos tienen un número parámetros distintos o con el mismo número
pero diferenciándose en al menos un párametro sea de tipo diferente.
Cuando una clase sobrecarga un método una o más veces , Visual Basic se fijará en
el número y tipos de argumentos en la llamada para saber cual de los métodos
tiene que ejecutar , por ello las instancias en el main() no da ningun error.
2VBNET 18
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
End Sub
La forma en que se destruyen los objetos pueden ser de dos formas: Porque los
destruyamos nosotros asignando un valor Nothing a la variable que lo referencia, o
bien porque el objeto esté fuera de ámbito, es decir, haya salido de su espacio de
ejecución, por ejemplo, si declaramos un objeto dentro de un método, cuando ese
método termina, el objeto se destruye, (hay algunas excepciones a esta última
regla, como puede ser que ese mismo objeto también esté referenciado por otra
variable externa al método.)
Si nuestra clase utiliza recursos externos, por ejemplo un fichero o una base de
datos, debemos definir un método que se encargue de liberarlos y a ese método
debemos encargarnos de llamarlo cuando ya no lo necesitemos. Por definición a
este tipo de métodos se les suele dar el nombre Close o Dispose, aunque este
último hay que tener cuidado.
Vamos a realizar otro ejemplo pero en este caso creando una aplicación windows.
Para ello vamos a crear un formulario de forma que al pulsar un botón me muestre
la información de la clase reloj que vamos a crear.
2VBNET 19
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
HERENCIA
La herencia es una características más importantes de POO porque permite que una
clase herede los atributos y métodos de otra clase (los constructores no se
heredan).
Esta carácterística garantiza la reutilización del código.
Con la herencia todas las clases están clasificadas en una jerarquía estricta. Cada
clase tiene una superclase (la clase superior en la jerarquía, también llamada clase
base), y cada clase puede tener una o más subclases( clases inferiores en la
jerarquía; también llamadas clases derivadas).
Clase CCuenta
2VBNET 20
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Las clases que están en la parte inferior en la jerarquía se dice que heredan de la
clase superior.
El término heredar significa que las subclases disponen de todos los métodos y
propiedades de su superclase. Este mecanismo proporciona una forma rápida y
cómoda de extender la funcionalidad de una clase. En Visual Basic cada clase sólo
puede tener una superclase(o clase base), lo que se denomina herencia simple.
Class CCuentaAhorro
Inherits CCuenta
End Class
System.Console.WriteLine(cuenta01.obtenerNombre())
System.Console.WriteLine(cuenta01.obtenerCuenta())
System.Console.WriteLine(cuenta01.estado())
System.Console.WriteLine(cuenta01.obtenerTipoDeInterés())
El resultado será:
2VBNET 21
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
' Atributo
Private cuotaMantenimiento As Double
' Métodos
Public Sub New() ' constructor sin parámetros
End Sub
Definimos al final del código (recuerda que la primera clase debe se la del
formulario) la definción de la nueva clase.
2VBNET 22
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Redefinir un método
En este caso cuando se haga referencia desde la subclase al método redefinido será
por defecto el definido en la subclase.
2VBNET 23
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Una vez escrita la clase CCuentaAhorro, vamos a ver como será la estructura de un
objeto de esta clase comparada con la clase CCuenta.
Atributos Métodos
Atributos Métodos
2VBNET 24
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Reintegro
Vemos que los constructores de la clase CCuenta no se heredan , puesto que cada
clase define el suyo por omisión, y que el método reintegro queda oculto por el
método del mismo nombre de la clase CCuentaAhorro. Se puede acceder al
miembro oculto con la siguiente sintaxis: MyBase.miembro_oculto.
Según los cuadros anteriores, mientras un posible objeto CCuenta contendría los
datos, nombre, cuenta , saldo y tipoDeInteres, un objeto CCuentaAhorro contiene
datos, nombre, cuenta , saldo ,tipoDeInteres y cuotaMantenimiento.
¿Cómo se crea un objeto de subclase CCuentaAhorro?. Si observamos el
constructor CCuentaAhorro con parámetros vemos que tiene cinco: los cuatro
pimeros proveen valores para los atributos heredados de CCuenta, y el quinto para
el nuevo atributo .
Para iniciar los atributos heredados de la clase base lo más sencillo es invocar al
constructor de la misma; esto se hace mediante la llamada MyBase.New seguida
de los argumentos correspondientes; esta llamada tiene que ser la primera
sentencia en el constructor de la subclase, como vemos en el ejemplo:
asignarNombre(nom)
asignarCuenta(cue)
ingreso(sal)
asignarTipoDeInterés(tipo)
asignarCuotaManten(mant)
End Sub
En modo de resumen, los siguientes puntos exponen las reglas a tener en cuenta
cuando se define una subclase:
2VBNET 25
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
3. Los miembros heredados por una subclase pueden, a su vez, ser heredados
por más subclases de ella. A esto se llama propagación de herencia.
Class relojanalogico
Inherits reloj
' declaramos un nueva variable
Private cuerdaalreloj As Boolean = False
' declaramos un nuevo método
darcuerdaalreloj = True
End Function
End Class
Sobrecarga de un método
2VBNET 26
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Vemos que nos indica que hay dos métodos con el mismo nombre el primero con
los tres parámetros y el segundo (si lo seleccionamos) con dos parámetros.
End Sub
2VBNET 27
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
EJERCICIO1 RESUELTO
- ¿encendido?
- ¿pantalla activa?
End Class
A continuación hay que pensar las acciones que se pueden realizar sobre un objeto
de la clase COrdenador, por ejemplo:
- encender el ordenador
- apagar el ordenador
- desactivar la presentación en pantalla
- activar la presentación en pantalla
- ver la información
Para definir estas acciones debemos realizar los métodos correspondientes. Vamos
a empezar con la primera acción: encender el ordenador
2VBNET 28
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
End Sub
Vamos a crear un nuevo método ver el estado del ordenador y sus propiedades.
Module MOrdenador
Public Sub Main()
Dim miordenador As COrdenador = New COrdenador()
End Sub
End Module
A continuación queremos dar valores a los atributos del ordenador y utilizar los
métodos para obtener la información que queramos.
miordenador.m_marca=”Toshiba”
2VBNET 29
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
¿A que es debido? ¿Por qué no aparecen los atributos de la clase?. Muy sencillo
porque se han definido como privates y por lo tanto solamente pueden acceder a
ellas los métodos definidas en la misma clase.
¿Cómo se puede solucionar? Mediante la definición de propiedades, ésta permiten
acceder a un atributo privado como si estuviera definido como publico. Para
implementar una propiedad se hace:
Con la sentencia get se obtiene el valor que tiene en ese momento el atributo en
nuestro caso m_marca para ello debemos añadir entre Get End Get la sentencia
return m_marca
Con la sentencia set asignamos el valor que se recibe a través del parámetro value
(en nuestro ejemplo le cambiamos de nombre y ponemos dato) al atributo en
nuestro caso m_marca.
Nosotros además vamos a añadir más código de forma que si el valor es vacio
indicaremos que la marca es desconocida y sino guardamos con el valor recibido.
2VBNET 30
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
Else
m_marca = dato
End If
End Set
End Property
2VBNET 31
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
EJERCICIO 2 RESUELTO
Vamos a realizar una clase que representa números racionales. Esta clase puede
ser útil porque muchos números no pueden ser representados exactamente
utilizando un número fraccionario. Por ejemplo, el número racional 1/3
representado como fraccionario sería 0,33333, valor mas facil de manipular pero a
costa de perder precisión.
Pensando un número racional como si fuera un objeto, deducimos que sus atributos
son : el numerador y el denominador. Y los métodos aplicables sobre los números
racionales son numerosos: suma, resta, multiplicación, …
Nosotros vamos añadir otros dos métodos: AsignarDatos, para establecer los
valores del numerador y el denominador; y otro, VisualizarRacional, para visualizar
un número racional.
Class CRacional
Private Numerador As Integer
Private Denominador As Integer
Module Racionales
Public Sub Main()
' Punto de entrada a la aplicación
Dim r1 As CRacional = New CRacional() ' crear un objeto CRacional
r1.AsignarDatos(2, 5)
r1.VisualizarRacional()
End Sub
End Module
2VBNET 32
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
EJERCICIOS
1. Crea un formulario con una clase que te represente, con propiedades que
describan el color de tu pelo, de tus ojos y tu fecha de nacimiento.
Crea dos métodos uno para obtener el día de la semana en que naciste y otro
para indicar la nacionalidad en función del color del pelo y de los ojos.
Utiliza la propiedad dayofweek del tipo de dato datetime para determinar el
día de la semana en que naciste. La propiedad devuelve un entero, conviértelo
al día de la semana.
2VBNET 33
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
2. Diseñar una clase CCoche que represente coches. Sus atributos serán marca,
modelo, coche y marcha; y los métodos deberan simular, enviando mensajes,
las acciones arrancar el motor, cambiar de velocidad, acelerar, frenar , parar
coche y describir el coche. De forma que cuando se ejecute la aplicación salga
de la siguiente forma:
Crea un formulario de forma que al pulsar el botón Mostrar datos muestre los datos
de una persona utilizando la clase persona. Un ejemplo:
2VBNET 34
Visual .NET
Microsoft Visual Studio 2005 Unidades Didáctica 21
2VBNET 35