VBParte3 - Gobierno de Canarias

Anuncio
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Tema 4. Fundamentos de programación de VB .NET
Estructura de un programa en VB .NET
Como muestra el diagrama, una aplicación está formada por uno o más ficheros de código, que
a su vez contienen módulos de código o clases, dentro de los que se escriben procedimientos
que son los elementos que contienen el código base.
Cuando creamos una aplicación usando VS.NET, es el propio IDE quién se encarga de crear por
nosotros la estructura básica del programa: crea un fichero de código conteniendo un módulo
que tiene el procedimiento de entrada, sólo falta el código del programador.
Procedimiento de entrada de un programa - Main ()
Todo programa necesita una rutina o procedimiento de entrada, que sea el primero que se
ejecute. En VB.NET ese procedimiento recibe el nombre especial Main( ), y debe estar contenido
dentro de un módulo de código.
En el caso de una aplicación de consola creada desde VS.NET, se crea un módulo de forma
automática que contiene un procedimiento Main( ) vacío. Dentro de este procedimiento
escribiremos el código.
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Tipos de Datos
Los tipos de datos que podemos usar en Visual Basic 2005 son los mismos tipos de
datos definidos en .NET Framework y por tanto están soportados por todos los
lenguajes que usan esta tecnología (C#, J#, C++,…). Estos tipos comunes se conocen
como el Common Type System, (CTS), que traducido viene a significar el sistema de
tipos comunes de .NET. El hecho de que los tipos de datos usados en todos los
lenguajes .NET estén definidos por el propio Framework nos asegura que
independientemente del lenguaje que estemos usando, siempre utilizaremos el mismo
tipo interno de .NET, si bien cada lenguaje puede usar un nombre (o alias) para
referirse a ellos. Esto es una gran ventaja, ya que nos permite usarlos sin ningún tipo
de problemas para acceder a ensamblados creados con otros lenguajes, siempre que
esos lenguajes sean compatibles con los tipos de datos de .NET.
Tipos primitivos
En la siguiente tabla se muestra la equivalencia de los tipos de datos definidos en .NET
Framework y los usados en Visual Studio 2005.
Las últimas filas de la tabla son tipos especiales que si bien son parte del sistema de
tipos comunes (CTS) no forman parte de la Common Language Specification (CLS), es
decir la especificación común para los lenguajes “compatibles” con .NET, por tanto, si
queremos crear aplicaciones que puedan interoperar con todos los lenguajes de .NET,
esos tipos no debemos usarlos como valores de devolución de funciones ni como tipo
de datos usado en los argumentos de las funciones, propiedades o procedimientos.
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Variables y Constantes
Siempre que tengamos que indicar un valor constante, deberíamos usar una constante
en lugar de un valor literal, de esta forma si ese valor lo usamos en varias partes de
nuestro código, si en un futuro decidimos que dicho valor debe ser diferente, nos
resultará más fácil realizar un solo cambio que cambiarlo en todos los sitios en los que
lo hemos usado, además de que de esta forma nos aseguramos de que el cambio se
realiza adecuadamente y no tendremos que preocuparnos de las consecuencias
derivadas de no haber hecho el cambio en todos los sitios que deberíamos.
Para declarar una constante lo haremos de la siguiente forma:
Para declarar una variable usamos la instrucción Dim seguida del nombre de la
variable y del tipo de datos que esta contendrá. Por ejemplo:
•
Declarar una variable de tipo entero
•
Declarar tres variables de tipo entero en la misma línea
•
Declarar una variable y asignarle un valor inicial
Nota: En Visual Basic 2005 el valor de una cadena no inicializado NO es una cadena vacía sino
un valor nulo (Nothing)
En Visual Basic 2005 podemos declarar valores de tipo Char (carácter Unicode). El
problema que podemos encontrarnos es a la hora de indicar un carácter literal.
Podemos convertir un valor número en su correspondiente carácter o viceversa.
Según el tipo de dato de la variable, puede ser necesario el uso de delimitadores para encerrar
el valor que vamos a asignar.
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
☺ Tipos numéricos. Las variables de tipos de datos numéricos no necesitan delimitadores, se
asigna directamente el número correspondiente. Si necesitamos especificar decimales,
utilizaremos el punto ( . ) como carácter separador para los decimales.
☺ Cadenas de caracteres. En este caso es preciso encerrar la cadena entre comillas dobles
(").
☺ Fechas. Al asignar una fecha a una variable de este tipo, podemos encerrar dicho valor
entre el signo de almohadilla ( # ) o comillas dobles ( " ). El formato de fecha a utilizar
depende del delimitador. Cuando usemos almohadilla la fecha tendrá el formato
Mes/Día/Año; mientras que cuando usemos comillas dobles el formato será Día/Mes/Año.
Las fechas pueden contener además información horario que especificaremos en el formato
Hora:Minutos:Segundos FranjaHoraria. En el caso de que no indiquemos la franja horaria
(AM/PM) y si estamos utilizando el signo almohadilla como separador, el entorno insertará
automáticamente los caracteres de franja horaria correspondientes.
☺ Tipos lógicos. Las variables de este tipo sólo pueden tener el valor True (Verdadero) o
False (Falso).
Además de asignar valores como acabamos de explicar, podemos asignar el contenido de una
variable a otra o el resultado de una expresión.
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Obligar a declarar las variables con el tipo de datos
Visual Basic 2005 nos permite, (lamentablemente de forma predeterminada), utilizar
las variables y constantes sin necesidad de indicar el tipo de datos de estas, pero
podemos obligar a que nos avise cuando no lo estamos haciendo, ya que es una buena
costumbre indicar siempre el tipo de datos que tendrán nuestras variables y
constantes.
Esa obligatoriedad la podemos aplicar a todo el proyecto o a un módulo en particular,
para ello tenemos que usar la instrucción Option Strict On, una vez indicado, se
aplicará a todo el código, no solo a las declaraciones de variables, constantes o al tipo
de datos devuelto por las funciones y propiedades, sino también a las conversiones y
asignaciones entre diferentes tipos de datos.
No debemos confundir Option Strict con Option Explicit, este
siempre tengamos que declarar todas las variables, mientras
hace es obligarnos a que esas declaraciones tengan un tipo de
la otra tienen dos estados: conectado o desconectado
agreguemos On u Off respectivamente.
último, sirve para que
que el primero lo que
datos. Tanto una como
dependiendo de que
Para configurarlo en general (para cualquier proyecto) iríamos a Herramientas Î
Opciones Î Proyectos y Soluciones Î Valores predeterminados de Visual Basic.
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Para configurarlos a nivel de proyecto, seleccionaríamos el proyecto Î botón derecho
Î propiedades Î Compilar. Desde esta pantalla también podemos indicar que nos
avise cuando tenemos declarada una variable que no hemos usado.
En el ejemplo siguiente se muestra como el compilador nos marca un error por no
haber declarado una variable. Además podemos ver como aplicar restricciones a un
módulo en concreto.
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Práctica de Formatos de Fecha
1. Realizar una nueva aplicación de tipo consola “FormatoFecha”.
a. Debe pedir el día, el mes y el año y mostrar la fecha con el formato
mes/día/año.
b. Se debe quedar a la espera de una pulsación de teclado mientras el
usuario comprueba los datos que se muestran.
c. A continuación deberá pedir el día, mes, año, hora, minutos y segundo y
mostrarlo en el formato día/mes/año hora:minutos:segundos.
d. El proyecto debe tener activado el Strict on e indicarnos los errores de
declaración si existieran.
Enumeraciones
Una enumeración es una serie de constantes que están relacionadas entre sí. La
utilidad de las enumeraciones es más manifiesta cuando queremos manejar una serie
de valores constantes con nombre, es decir, podemos indicar un valor, pero en lugar
de usar un literal numérico, usamos un nombre, ese nombre es, al fin y al cabo, una
constante que tiene un valor numérico.
En Visual Basic 2005 las enumeraciones pueden ser de cualquier tipo numérico
integral, incluso enteros sin signo, aunque el valor predefinido es el tipo Integer.
Podemos declarar una enumeración de varias formas:
1- Sin indicar el tipo de datos, por tanto serán de tipo Integer:
Enum Colores
Rojo
Verde
Azul
End Enum
2- Indicando el tipo de datos que realmente tendrá:
Enum Colores As Long
Rojo
Verde
Azul
End Enum
3- Indicando el atributo FlagsAttibute, (realmente no hace falta indicar el sufijo
Attribute cuando usamos los atributos) de esta forma podremos usar los valores de la
enumeración para indicar valores que se pueden "sumar" o complementar entre sí,
pero sin perder el nombre.
<Flags()> _
Enum Colores As Byte
Rojo = 1
Verde = 2
Azul = 4
End Enum
El nombre de los miembros de las enumeraciones
Tanto si indicamos o no el atributo Flags a una enumeración, la podemos usar de la
siguiente forma, con lo que podemos sumar los valores definidos en la enumeración:
Dim c As Colores = Colores.Azul Or Colores.Rojo
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Las enumeraciones son constantes con nombres, pero en Visual Basic 2005 esta
definición llega más lejos, de hecho, podemos saber "el nombre" de un valor de una
enumeración, para ello tendremos que usar el método ToString, (el cual se usa para
convertir en una cadena cualquier valor numérico). Por ejemplo:
Dim s As String = Colores.Azul.ToString
‘ La variable s contendrá la palabra "Azul" no el valor 4.
¿Qué ocurre cuando sumamos valores de enumeraciones que tienen el atributo Flags?
Enum Colores As Byte
Rojo = 1
Verde = 2
Azul = 4
End Enum
Dim c As Colores = Colores.Azul Or Colores.Rojo
Dim s As String = c.ToString
El contenido de la variable s será "5", es decir, la representación numérica del valor
contenido: 4 + 1, ya que el valor de la constante Azul es 4 y el de la constante Rojo
es 1.
¿Y a las que no se lo hemos aplicado?
<Flags()> _
Enum Colores As Byte
Rojo = 1
Verde = 2
Azul = 4
End Enum
Dim c As Colores = Colores.Azul Or Colores.Rojo
Dim s As String = c.ToString
El contenido de la variable s será: "Rojo, Azul", es decir, se asignan los nombres de
los miembros de la enumeración que intervienen en ese valor, no el valor "interno".
Los valores de una enumeración no son simples números
Como hemos comentado, los miembros de las enumeraciones realmente son valores
de un tipo de datos entero (en cualquiera de sus variedades). Por tanto, podemos
pensar que podemos usar cualquier valor para asignar a una variable declarada como
una enumeración, al menos si ese valor está dentro del rango adecuado.
En Visual Basic 2005 esto no es posible, al menos si lo hacemos de forma "directa" y
con Option Strict conectado, ya que recibiremos un error indicándonos que no
podemos convertir, por ejemplo, un valor entero en un valor del tipo de la
enumeración. En el siguiente código se puede ver el error que nos daría el IDE al
intentar asignar el valor 3 a una variable del tipo Colores (definida con el tipo
predeterminado Integer) y que solución nos propone.
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
CType es una de las formas que nos ofrece Visual Basic 2005 de hacer conversiones
entre diferentes tipos de datos, en este caso convertimos un valor entero en uno del
tipo Colores.
Si compilamos y ejecutamos la aplicación, ésta funcionará correctamente. Aunque
sabemos que es posible que usando CType no asignemos un valor dentro del rango
permitido. En este caso, el valor 3 podríamos darlo por bueno, ya que es la suma de 1
y 2 (Rojo y Verde), pero ¿que pasaría si el valor asignado es, por ejemplo, 15? En
teoría no deberíamos permitirlo.
Estas validaciones podemos hacerlas de dos formas:
1- Con la clásica solución de comprobar el valor indicado con todos los valores
posibles.
2- Usando funciones específicas del tipo Enum. Aunque en este último caso, solo
podremos comprobar los valores definidos en la enumeración.
En el siguiente ejemplo podemos hacer esa comprobación.
Sub mostrarColor(ByVal c As Colores)
' comprobar si el valor indicado es correcto
' si no está¡ definido, usar el valor Azul
If [Enum].IsDefined(GetType(Colores), c) = False Then
c = Colores.Azul
End If
Console.WriteLine("El color es {0}", c)
End Sub
Este código lo que hace es comprobar si el tipo de datos Colores tiene definido el valor
contenido en la variable c, en caso de que no sea así, usamos un valor
predeterminado.
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Arrays
Al declarar un array, todos sus valores son del mismo tipo de dato. Si necesitamos que dichos
valores sean de tipos diferentes, debemos declarar el array como tipo Object, ya que al ser este,
el tipo de dato genérico en el entorno de .NET, nos permitirá asignar valores de distintos tipos al
array.
Asignar y obtener valores de un array
Para asignar y obtener valores de los elementos de un array, actuaremos igual que para una
variable normal, pero empleando además el índice para indicar qué posición queremos
manipular.
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Modificar el tamaño de un array
Para modificar el tamaño o número de elementos de un array, emplearemos la instrucción
ReDim, seguida del array a modificar y el nuevo tamaño.
ReDim no toma el array existente y modifica su número de elementos, sino que internamente
crea un nuevo array con el número 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. Con ello, los valores existentes en el array a modificar son conservados.
Array bidimensional
En este código tendríamos un array bidimensional con los siguientes valores:
nombres(0,0)= Juan
nombres(0,1)= Pepe
nombres(1,0)= Ana
nombres(1,1)= Eva
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Como podemos ver en la declaración anterior, si definimos arrays con más de una dimensión,
debemos indicarlas usando una coma para separar cada dimensión, o lo que es más fácil de
recordar: usando una coma menos del número de dimensiones que tendrá el array. En los
valores a asignar, usaremos las llaves encerradas en otras llaves, según el número de
dimensiones.
Nota: Para continuar líneas de código usamos el guión bajo (_)
Eliminar el contenido de un array
Una vez que hemos declarado un array y le hemos asignado valores, es posible que
nos interese eliminar esos valores de la memoria, para lograrlo, podemos hacerlo de
tres formas:
1. Redimensionando el array indicando que tiene cero elementos, aunque en el
mejor de los casos, si no estamos trabajando con arrays de más de una
dimensión, tendríamos un array de un elemento, ya que en los arrays de .NET
el índice inferior es cero.
2. Usar la instrucción Erase. La instrucción Erase elimina totalmente el array de la
memoria.
3. Asignar un valor Nothing al array. Esto funciona en Visual Basic 2005 porque los
arrays realmente son tipos por referencia.
Los arrays son tipos por referencia
Los tipos por referencia realmente lo que contienen son una referencia a los datos
reales no los datos propiamente dichos. Veamos el siguiente ejemplo:
Dim nombres() As String = {"Juan", "Pepe", "Ana", "Eva"}
Dim otros() As String
otros = nombres
nombres(0) = "Antonio"
En este ejemplo definimos el array nombres y le asignamos cuatro valores. A
continuación definimos otro array llamado otros y le asignamos lo que tiene
nombres. Por último asignamos un nuevo valor al elemento cero del array nombres.
Si mostramos el contenido de ambos arrays nos daremos cuenta de que realmente
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
solo existe una copia de los datos en la memoria, y tanto nombres(0) como otros(0)
contienen el nombre "Antonio".
¿Qué ha ocurrido?
Que debido a que los arrays son tipos por referencia, solamente existe una copia de los
datos y tanto la variable nombres como la variable otros lo que contienen es una
referencia (o puntero) a los datos.
¿Cómo solucionarlo?
Si realmente queremos tener copias independientes, debemos hacer una copia del
array nombres en el array otros, esto es fácil de hacer si usamos el método CopyTo.
Éste método existe en todos los arrays y nos permite copiar un array en otro
empezando por el índice que indiquemos. El único requisito es que el array de destino
debe estar inicializado y tener espacio suficiente para contener los elementos que
queremos copiar.
Dim nombres() As String = {"Juan", "Pepe", "Ana", "Eva"}
Dim otros() As String
ReDim otros(nombres.Length)
nombres.CopyTo(otros, 0)
nombres(0) = "Antonio"
Recorrer un array
Para recorrer todos los elementos de un array emplearemos la estructura de control
For...Next, que ejecuta un bloque de código un número determinado de veces, y la
función del lenguaje Ubound( ), que devuelve el número de elementos del array
pasado como parámetro.
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Práctica de EnumeracionesArrays
2. Crear una nueva aplicación de tipo consola “EnumMusicas”
a. Crear una enumeración a la que pertenecen los siguientes elementos:
Rock, Blues, NewAge y Funky.
b. Para obtener los valores de las constantes de la enumeración se usa
GetValues() y los nombres con GetNames(). Se trata de métodos de la
clase Enum y reciben como parámetro una variable de enumeración de
la que debe obtenerse el tipo ejecutando su método GetType(). Ambos
devuelven un array con los datos pedidos. Por ejemplo:
listaValores = System.Enum.GetValues(mivariable.GetType())
c. Se requiere que se muestre por pantalla el siguiente mensaje “Valor –
Nombre” y a continuación se deben mostrar los valores y nombres de
cada uno de los elementos de la enumeración previamente declarada.
Para ello deberemos recorrer los arrays que contienen los valores y los
nombres.
d. A continuación pedir por pantalla un nombre y comprobar si está dentro
de la enumeración. Para ello has de usar el método IsDefined. Busca en
la ayuda como poder usarlo. Si está definido dentro de nuestra
enumeración se mostrará el siguiente mensaje “Elemento dentro de mi
lista” en caso contrario, el mensaje sería “Este elemento no lo conozco”.
e. Para hacer la comparación hay que usar un condicional del estilo:
If
condición
Then
instrucciones
Else
intrucciones
End if
Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos
Operadores
Operaciones matemáticas
Op. Abreviados de asignación
Suma
+
+=
Resta
-=
Multiplicación
*
*=
División real
/
/=
División de entero
\
\=
Módulo
mod
No existe
Potenciación
^
^=
Asignación
=
Resto
mod
Concatenación
&: Concatena cadenas. También puede usarse el símbolo + pero no es
recomendado ya que nos puede llevar a confusiones. El operador abreviado de
asignación sería: &=
Comparación
Podemos utilizar los operadores de comparación antes descritos para comparar
también cadenas de caracteres. La instrucción Option Compare, junto a sus
modificadores Binary/Text, nos permite definir el modo en que se realizarán las
comparaciones entre expresiones que contengan cadenas.
☺ Option Compare Binary. Las comparaciones se realizan en base a los valores
binarios internos de los caracteres. Esta es la opción por defecto.
☺ Option Compare Text. Las comparaciones se realizan en base a los valores
textuales de los caracteres.
Podemos configurar Option Compare a nivel de proyecto y de fichero de código. En el
caso de configurar a nivel de proyecto, deberemos abrir la ventana de propiedades del
proyecto, y en su apartado Compilar, establecer el valor correspondiente en la lista
desplegable “Option Compare”. Si configuramos a nivel de fichero de código,
escribiremos la siguiente instrucción en la cabecera del fichero con el modificador
oportuno: Option Compare Binary
Practica Operadores Básicos
1. Crear un nuevo proyecto de tipo consola denominado “OperadoresBasicos”:
a. Para cada operación aritmética mostrada en la pantalla anterior, se han de
pedir dos números y mostrar el resultado.
b. A continuación se han de pedir dos letras por pantalla y realizar las
comparaciones de cadena anteriores. Se mostrará un mensaje del estilo: La
comparación X < Y da como resultado VERDADERO” (esto es un ejemplo).
Descargar