Escolar Documentos
Profissional Documentos
Cultura Documentos
Felipe Ramírez
Facultad de Contadurfa Pública y Administración,
Universidad Autónoma de Nuevo León, México.
Revisión técnica:
Francisco Salazar
Facultad de Contaduría Pública y Administración,
Universidad Autónoma de Nuevo León, México.
Datos catalográficos
Ramírez, Felipe
Aprenda Practicando Visual Basic usando Visual
Studio 2012
Primera Edición
Alfaomega Grupo Editor, S.A. de C.V., México
ISBN: 978-607-707-717-6
Formato: 17 x 23 cm Páginas: 372
ISBN: 978-607-707-717-6
Nota importante:
La información contenida en esta obra tiene un fin exclusivamente didáctico y, por lo tanto, no está
previsto su aprovechamiento a nivel profesional o industrial. Las indicaciones técnicas y programas
incluidos, han sido elaborados con gran ctúdado por el autor y reproducidos bajo estrictas normas
de control. ALFAOMEGA GRUPO EDITOR, S.A. de C.V. no será jurídicamente responsable
por: errores u omisiones; daños y perjuicios que se pudieran atribuir al uso de la información
comprendida en este libro, ni por la utilización indebida que pudiera dársele.
Edición autorizada para venta en México y todo el continente americano.
Impreso en México. Printed in Mexico.
Contenido
Generales
Acerca del autor ............................................................................................................................................ XV
..
Dedicatoria ...................................................................................................................................................... XVll
Contex·to del curso ....................................................................................................................................... .XVlll
Requerimientos del curso ......................................................................................................................... XIX
Descripción de las unidades .................................................................................................................... . XX
Resumen de Unidades ................................................................................................................................. XXI
Cómo utilizar el libro .................................................................................................................................. . XXll
Alfaomega V
Aprenda Practicando Visual Basic usando Visual Studio 2012
•
VI Alfaomega
Contenido
4: Namespaces y librerías
4.1. Espacios de nombres (Namespaces) ................................................................................................... 77
4.1.1 Sistema de nomenclatura para los espacios de nombres .................................................... 78
4.1.2 Uso de espacios de nombres ........................................................................................................... 79
4.1.3 Creación de espacios de nombres ................................................................................................. 80
4.1.4 Estableciendo alias para los espacios de nombres ................................................................. 81
4.1.5 Estableciendo referencias a una librería .................................................................................... 82
~ Lab.04.01: Creación y consumo de una librería (DLL) basada en Namespace ...................... 83
a) Creando una librería DLL ................................................................................................................... 84
b) Estableciendo una referencia a una librería desde Solution Explorer ................................ 85
e) Consumiendo una librería programáticamente .......................................................................... 86
~ Lab.04.02: Tareas de depuración con Visual Studio ........................................................................ 87
a) Estableciendo un punto de interrupción (breakpoínt) ............................................................. 88
b) Ejecución línea por línea (Code Stepping) .................................................................................... 88
e) Modificación de programas en tiempo de ejecución .................................................................. 91
d) Habilitando e inhabilitando puntos de interrupción ................................................................. 91
e) Eliminando los puntos de interrupción (breakpoint) ................................................................ 91
f) Puntos de interrupción condicionales .............................................................................................. 92
••
Alfaomega VIl
Aprenda Practicando Visual Basic usando Visual Studio 2012
5: Manejo de Operadores
5.1 Operadores aritméticos ........................................................................................................................... 103
5.2 Operadores de asignación ...................................................................................................................... 104
5.2.1 Expresión .............................................................................................................................................. 104
5.2.2 Operadores de asignación incluyente ........................................................................................ 105
5.3 Operadores comparativos ...................................................................................................................... 106
5.3.1 Consideraciones relativas al código ASCII ............................................................................... 107
5.3.2 Option Compare ................................................................................................................................. 108
5.3.3 Operadores l s~ IsNot y Type0f...................................................................................................... l09
5.3.4 Operador Like ..................................................................................................................................... 11 O
5.4 Operadores lógicos .................................................................................................................................... l ll
5.4.1 Operadores lógicos de circuito corto ......................................................................................... 114
5.5 Prioridad entre operadores ................................................................................................................... 115
5.5.1 Uso de paréntesis para otorgar preferencia de ejecución ................................................. 117
~ Lab.OS.01: Utilización general de operadores de Visual Basic ................................................... 117
a) Comentando bloques de código ...................................................................................................... 119
b) Uso de C/ípboard Ríng ........................................................................................................................ 119
e) Selección basada en bloques de código (Block Selection) ...................................................... 120
~ Lab.OS.02: Representando con operadores casos de la vida real. ............................................ 121
...
VIII Alfaomega
Contenido
•
Alfaomega IX
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
8: Procedimientos y Funciones
8.1 Procedimientos ........................................................................................................................................... 171
8.1.1 ¿Cuándo definir procedimientos y funciones? ....................................................................... 171
8.1.2 Forma de agregar procedimientos a un programa ............................................................... 172
8.1.3 Forma de mandar llamar a ejecución un procedimiento ................................................... 173
8.1.4 Argumentos .......................................................................................................................................... 173
8.1.4.1 Especificación ByVa/ .................................................................................................................. 173
8.1.4.2 Especificación ByRef .................................................................................................................. l7 4
8.1.5 Valores de retorno ............................................................................................................................. 174
8.2 Codificación de procedimientos y funciones .................................................................................. 174
8.2.1 Procedimientos ................................................................................................................................... 174
8.2.2 Funciones .............................................................................................................................................. l75
~ Lab.08.01: Procedimiento que no utiliza argumentos .................................................................. 177
~ Lab.08.02: Procedimiento que declara argumentos pero no retorna valores ..................... 179
~ Lab.08.03: Procedimiento que declara argumentos y retorna valores................................... 182
~ Lab.08.04: Uso de ByVal y ByRef ...........................................................................................................185
~ Lab.08.05: Procedimientos multihilos y procesamiento asíncrono......................................... 187
~ Lab.08.06: Decidiendo el uso de procedimientos y funciones ................................................... 191
X Alfa omega
SYNAPS PREMIUM
Contenido
Alfa omega xi
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
xiv Alfaomega
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfa omega XV
SYNAPS PREMIUM
1
Generales
Dedicatoria
Este libro va dedicado a Don Gilberto, mi padre, a quien quiero enormemente porque
ha sabido estar con las palabras adecuadas en los momentos de más necesidad.
Me enseñó que en la vida va a pasar lo que tiene que pasar, y que un hombre, más allá
de arropar en su conciencia la certeza de haber actuado siempre correctamente, al menos
debe tener la claridad y la obstinación en sus decisiones, en la inteligencia de que bastante
pronto llegarán las consecuencias de sus actos y palabras.
Alfaomega xvii
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
...
XVIII Alfaomega
SYNAPS PREMIUM
Generales
http://libroweb.alfaomeg a.com.mx
XX Alfaomega
SYNAPS PREMIUM
Generales
DI WBVBVS2012.XX.YY- Descripción.wmv
Resumen de Unidades
Las unidades de este libro hacen que tenga un grado de complejidad que va
de un grado básico a uno avanzado:
..
XXII Alfaomega
SYNAPS PREMIUM
Generales
•••
Alfa omega XXIII
SYNAPS PREMIUM
Unidad de aprendizaje 1
Competencias:
l. Saber qué es Microsoft .NET y cómo ha
ido evolucionando con el paso del
tiem po.
2. Conoce r la forma en que .NET
interpreta, compila y ejecuta los
programas.
3. Conocer las pa rticularidades de la
biblioteca de clases de .NET y la form a
en que se organiza.
4. Conocer en qué consiste la capacidad
mult ilenguaje de la plataforma .NET.
1. Exposición que
convenza a un staff
técnico de cambiar, de Evidencia de
otro ambiente de aprendizaje:
desarrollo, a 1. Capacidad de explicar a
Microsoft .NET. Microsoft .NET como
2. Analizar un caso producto y como sistema,
práctico en donde se haciendo hincapié en sus
requieran diferentes elementos fundamentales y
aplicaciones y se en el proceso que lleva del
tengan diversos código fuente al código
ambientes, y hacer un ejecuta ble.
diagnóstico en donde 2. Capacidad de evaluación de
se sugiera los una situación del mundo rea l,
productos .NET a y sugerir una adecuada
instalar y adquirir. ambientación en productos
Microsoft.NET
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
2 Alfa omega
SYNAPS PREMIUM
Unidad 1: La Plataforma Microsoft .NET
Cada vez que Microsoft libera o actualiza un sistema operativo, éste aporta nuevas capaci-
dades de funcionamiento y desempeño. Con cada una de estas liberaciones o actualizacio-
nes, Microsoft .NET Framework se actualiza también, a fin de poder brindar mecanismos
que permitan aprovechar las mejoras que fue ron hechas al sistema operativo; recordemos
que Microsoft .NET Framework generalmente se preinstala como un componente del siste-
ma operativo. Obviamente, al haber una nueva versión de Microsoft .NET Framework, se
requiere también una versión nueva de Microsoft Visual Studio que permita aprovechar las
nuevas características del Framework En resumen, un nuevo sistema operativo nos lleva a
un nuevo Framework, que a su vez nos lleva a un nuevo Visual Studio.
Esta es la historia:
Alfaomega 3
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
work; el otro caso es que las versiones 3.5 y 4.0 de Microsoft .NET Framework fueron dis-
tribuidas para los mismos sistemas operativos (Windows 7, Windows Server 2008 R2).
¿Para qué nos puede servir conocer estos datos históricos? Para dos cosas: a) Estar cons-
cientes que un cambio en sistema operativo puede conducir a un cambio en nuestro Micro-
soft .NET Framework y nuestro Microsoft Visual Studio, y que podemos experimentar pro-
blemas de compatibilidad, y b) Estar conscientes de que las nuevas versiones permiten
aprovechar nuevas características del entorno operativo; en ese sentido, actualizar las ver-
siones de Microsoft .NET Framework y Microsoft Visual Studio tiene sentido si las aplica-
ciones creadas funcionarán en un entorno operativo capaz de aprovechar las nuevas capa-
cidades.
Las versiones de .NET son acumulativas, es decir, cada nueva versión tiene la funcionalidad
de la anterior, más nuevas características adicionales.
Conocer las versiones de .NET nos lleva a preguntarnos, ¿qué necesitamos instalar, para
tener un ambiente adecuado a nuestras necesidades?
Primeramente debe preguntarse si realizará labores de desarrollo o no: En caso de que en
la empresa se desarrollen aplicaciones, es altamente conveniente que cada desarrollador
posea una instalación de Microsoft Visual Studio; es importante mencionar que Microsoft
Visual Studio tiene costo.
En caso de que no realice labores de desarrollo, no requiere de Microsoft Visual Studio. Tan
solo requiere tener instalado Microsoft .NET Framework en el equipo que ejecute los pro-
gramas .NET. Generalmente estará preinstalado como parte del sistema operativo, aunque
deberá asegurarse de que tiene la versión correcta de Microsoft .NET Framework, en fun-
ción a la versión utilizada para desarrollar las aplicaciones que ha de utilizar.
Por ejemplo, si tiene una máquina que tiene preinstalado Microsoft .NET Framework 3.0,
pero le instalan una aplicación que fue desarrollada con la versión 4.0, deberá instalar esta
última. No hay problema por tener las dos versiones instaladas en su equipo: .NET sabrá
diferenciar las versiones, y subordinará las aplicaciones a la versión que les corresponda.
La buena noticia es que Microsoft .NET Framework no tiene costo.
En el caso de aplicaciones Windows, cada cliente deberá tener instalado Microsoft .NET
Framework, a fin de que los programas .NET puedan ser ejecutados. Tome en cuenta que
puede haber servidores de procesamiento o de datos que, aún y cuando no sean operados
directamente, brindan servicio a ciertas aplicaciones, y por tanto requieren ejecutar módu-
los o clases.
En el caso de aplicaciones Web, Microsoft .NET Framework sólo debe estar instalado en el
servidor Web: los clientes no necesitan instalar nada.
4 Alfa omega
SYNAPS PREMIUM
Unidad 1: La Plataforma Microsoft .NET
Es importante que sepa que, en el caso de Jos smartphones, se ofrecen versiones compact de
Microsoft .NET Framework para cada versión, a fin de que puedan invocar aplicaciones y
ejecutarlas desde dichos dispositivos. Tal vez no sobra decir que las versiones compact son
considerablemente más limitadas, por lo que deberá investigarse cuál es la funcionalidad
que soportan.
Para entender bien Jos componentes de Microsoft .NET Framework es altamente recomen-
dable conocer, de una manera simplificada, cómo es que trabaja la plataforma.
Partamos del supuesto que todos Jos esfuerzos de desarrollo tienen como objetivo desarro-
llar programas de código fuente que, después de pasar por un proceso, terminan siendo
código máquina que el sistema operativo podrá interpretar como órdenes. Siendo así, con
.NET tendríamos lo siguiente:
Figura 01.01
Proceso en .NET,
del código a los x.vb~ Vbc.exe
ejecutables.
119119
1 191991
x.cs Csc.exe
Alfaomega 5
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Una vez que conocemos a grandes rasgos el funcionamiento de la plataforma, no nos serán
extraños sus componentes.
Entender las capas internas de Microsoft .NET Framework puede intimidar un poco, dado
que hay muchos conceptos por entender, pero nada que no se pueda entender si se analiza
con la mente abierta.
Cuando vea una referencia como la que sigue, significa que es altamente recomendable que
revise el video que se encuentra en su CD de compañía, para la mejor comprensión de los
temas.
,.....
DI WBVBVS2012.01.01 - La composición de la plataforma .NET.wmv
Figura 01.02
Capas de la
plataforma .NET.
6 Alfa omega
SYNAPS PREMIUM
Unidad 1: La Plataforma Microsoft .NET
Alfaomega 7
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
3. Soporte operativo. La capa de soporte operativo es la capa compuesta por las he-
rramientas que se integran al sistema operativo al momento de instalar Microsoft
.NET Framework en un equipo, con lo cual el sistema operativo se ve modificado para
ser capaz de interpretar y ejecutar aplicaciones .NET de forma nativa. Esta capa per-
mite que el sistema operativo detecte cuando un programa de extensión .exe es en
realidad código intermedio, cediéndole el control a Microsoft .NET Framework para
que realice la compilación en tiempo de ejecución, y genere código máquina, y pro-
duzca realmente resultados.
8 Alfa omega
SYNAPS PREMIUM
Unidad 1: La Plataforma Microsoft .NET
A continuación ilustramos el típico programa Hola mundo, que generalmente se utiliza para
mostrar la estructura básica de un programa en un lenguaje determinado, mostrando un
mensaje cualquiera.
El programa Hola Mundo en C# sería de la siguiente manera (HolaMundo. es):
1 using System;
2 class HolaMundo
3 {
4 static void Main()
5 {
6 Console.WriteLine{"Hola Mundo");
8 }
9 }
Alfaomega 9
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
1 Imports System
2 CliiSS HoliiMundo
3 Sub Mili n()
4 Console.Writeline("Hola Mundo")
5 End Sub
6
End CliiSS
Vea cómo el código es sorprendentemente parecido. Todos los lenguajes en .NET compar-
ten el mismo origen (CLS), y difieren solamente en la forma estructural de la codificación,
determinada por el estilo del lenguaje.
Por otra parte, ninguno de los lenguajes tiene uso exclusivo de la librería de objetos de
.NET: está disponible para todos. Este hecho es bastante significativo ya que todos los
lenguajes pueden hacer uso de las mismas clases, y por tanto, podrán servir para lo mismo.
Anteriormente, los programadores de C++ podían presumir de conocer un lenguaje que les
permitía manejar los recursos de la computadora de una manera más profunda, y subesti-
maban a los programadores de Visual Basic por utilizar una herramienta "tan limitada"; si
un programador de Visual Basic 6.0 deseaba desarrollar programas con la misma funciona-
lidad que C++, era necesario que aprendiera el manejo del API (Application Programming
Interface) de Windows, y dicha opción podía ser bastante compleja. Ahora eso ha cambia-
do, ya que con todos los lenguajes en .NET se podrán hacer las mismas cosas.
Uno de los mayores beneficios que se obtiene al disponer de una misma biblioteca de clases
para su uso en varios lenguajes, es que el programador aprende un solo lenguaje, y al mis-
mo tiempo aprenderá todos los demás, en términos generales.
Compare el código HolaMundo.cs (C#) y HolaMundo.vb (Visual Basic); estando codifica-
dos en diferentes lenguajes, ambos utilizan un mismo espacio de nombres System, una
misma clase Console, y un mismo type (método de la clase), llamado Writeline(). La
forma de invocar a las clases y los types en todos los lenguajes .NET es uniforme, obede-
ciendo una sintaxis de separación punteada ( dotted), que diferencia espacios de nombres,
clases y types (estos últimos, opcionales en algunos casos):
Namespace.Class[ .Type]
Además, todos los lenguajes de desarrollo son soportados por un mismo entorno integrado
de desarrollo: Microsoft Visual Studio, con el cual podremos estar codificando al mismo
tiempo múltiples proyectos en múltiples lenguajes.
10 Alfa omega
SYNAPS PREMIUM
Unidad 1: La Plataforma Microsoft .NET
Realizar esto antes de .NET era impensable. El desarrollador debía aprender las palabras
reservadas de cada uno de los lenguajes que aprendiera. Cada lenguaje poseía su propia
biblioteca de clases (C/ass Foundation), tenía sus propias jerarquías y su propia sintaxis de
invocación. La experiencia que ganaba con un lenguaje no le servía de mucho al intentar
desarrollar en otro. Si a eso le sumamos que cada lenguaje tenía su propia herramienta de
desarrollo, llegaríamos a la conclusión de que el programador consumía todo su tiempo en
aprender las herramientas de desarrollo y las diferencias en Jos lenguajes, quedándote muy
poco tiempo para ocuparse de los problemas reales de programación, como sería la lógica
de negocios.
La plataforma .NET reduce la curva de aprendizaje y favorece los equipos de desarrollo, ya
que la especialización se dará ahora sobre las ramas del conocimiento involucrados en los
problemas que se pretenden resolver, y no en las herramientas de desarrollo para resolver-
los; con ello se aumenta la rentabilidad de los programadores y el retorno de la inversión en
programas y en capacitación.
Alfaomega 11
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Sí usted consume páginas Web desarrolladas en .N ET, usted no necesita instalar nada en su
equipo, pues el procesamiento de programas y páginas no sucede en el equipo cliente, sino
en el servidor.
La siguiente figu ra pone en perspectiva qué versión es la más recomendable para los am-
bientes que posee.
Finura 01.03
Versiones de .NET y ASP.NET Windows ADO.NET
tecnologías incluidas.
Services Application Services Services
Cll
2.0 ~
Card
WPF WCF WF 3.0 1
Space
ADO.NET Entity
LINQ 3.5
Framework
~ ~
Task Parallel
Parallel LINQ 4.0
library
~
z•
.NET API for
Metro Style 4.5
Tome en cuenta que lo mínimo que debe esperar es utilizar la parte core de la plataforma,
cosa que se obtiene trabajando con la versión 2.0 o posterior de Microsoft .NET Framework.
Posteriormente, dependiendo de los modelos de programación que desee utilizar, así como
su plataforma operativa, deberá seleccionar la versión más adecuada.
12 Alfa omega
SYNAPS PREMIUM
Unidad 1: La Plataforma Microsoft .NET
Alfaomega 13
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Desarrollador
SIO Desarrollador
SICOM
Servidor de Aplicaciones y
Objetos de Negocios Servidor Web
••
Servidor de Bases
de Datos
Usuario SICOM
UsuarloSIO UsuanoSlO UsuarioSIO Usuario SICOM UsuariO SICOM
14 Alfa omega
SYNAPS PREMIUM
Unidad 1: La Plataforma Microsoft .NET
Alfaomega 15
SYNAPS PREMIUM
Unidad de aprendizaje 2
Competencias:
1. Conocer el concepto de organización
de trabajo en Visual Studio, basado
en soluciones y proyectos.
2. Conocer la mecánica para la creación
de aplicaciones usando Visua l
Studio.
3. Conocer el uso de las herramientas
¡ básicas de partida: Solution Explorer,
los diseñadores, y Cede Editor.
4. Conocer el proceso de construcción
y depuración de aplicaciones en
Visual Studio.
Evaluacl6n:
l . Proporcionar un
algoritmo en donde
sólo se muestre Evidencia de
información, y aprendizaje:
verificar que se es l. Capacidad de crear una
capaz de crear una Solución, e integrarle
solución y un diferentes tipos de proyectos
proyecto para usando Visual Studio.
manejarla; se 2. Capacidad para crear una
verificará también aplicación, desde la creación
que se utilizan las de una solución y un
herramientas de Code proyecto, pasando por la
Editor, y que se codificación usando Code
depura la aplicación. Editor, y la depuración del
programa en Visual Studio.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
18 Alfa omega
SYNAPS PREMIUM
Unidad 2: Ambiente de trabajo usando Visual Studio 2012
Alfaomega 19
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Solution 1
20 Alfa omega
SYNAPS PREMIUM
Unidad 2: Ambiente de trabajo usando Visual Studio 2012
Figuro 02.02
Agregando un
4 ~$,~;. ÑIK
Wrdowt
,..........
_._ "'~"** IJIWfoK~
nuevo proyecto a
una solución.
...-"11
....
~ ~;¡ o.u ""'"
WCF ~~· '""""',........."Y
v.~u.~ C1t
Vt,WIC••
Visu.lf1
_..
&_ J
.
EMpty PrOJEct
SQl Str.~
L•glttSto.llkh
Ot!\cr ltfOJtd l)'ptS
Modt .,9 Pro,tets
~i WPf Curtom Conbolllbwy
Sampfft
...
6!'
c::l WPFUsa C011trolli!Yttl)' Vi'$11.11Btslc
-.. 1
·]
./ Cl\ftl._ .,eruwyfonetklbort
Add 10 lOU'C:f: CO'Itrol
1 0K (e-,¡
Alfaomega 21
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Dependiendo lo que hayamos seleccionado, Visual Studio nos generará de forma automática un
conjunto de archivos fuente a partir de los cuales podremos comenzar a trabajar.
22 Alfa omega
SYNAPS PREMIUM
Unidad 2: Ambiente de trabajo usando Visual Studio 2012
Imagine que está desarrollando una aplicación que contiene lo siguiente: a) Un módulo basado
en Windows Forms Application, que permitirá la captura de información (WIN); b) Un módulo
basado en ASP.NET Web Forms Application, que permitirá consultar la información capturada
(WEB), y e) Una librería de clases que permitirá el registro y la explotación de los datos captura-
dos (CLASS), y es utilizada tanto por WIN como por WEB.
Suponga que un equipo de desarrolladores (E1) se encargará del desarrollo de WIN y también de
CLASS; de hecho, comprobará el funcionamiento de CLASS utilizando la clase desde WIN; por
otro lado, otro equipo de desarrolladores (EZ) se encargará de generar WEB.
Si E1 quiere desarrollar y construir WIN y CLASS juntos, sin que ello afecte el trabajo que realiza
EZ, pero al final se desea construir toda la aplicación (WIN, WEB y CLASS juntas) para garantizar
su convivencia ¿Cuál sería una buena estrategia de construcción?
Tome en cuenta algo importante: un proyecto puede formar parte de varias soluciones, por lo
que es posible organizar la forma en que se depuran y construyen los proyectos a través del uso
de varias soluciones. Una posible solución sería la siguiente:
, - - WIN - - -- - - - - - . . , .
Figura 02.03
,...,
l-.J \•,~ndows Forms Appliutton
Solution M
Organización de
proyectos en una
o varias
soluciones.
CLASS
r - WEB - -- - - - - - - . ,
En este escenario, se desarrollan 3 proyectos. Los proyectos WIN y CLASS se asocian a Solution
E1, mientras que el proyecto WEB queda en Solution EZ. Cada equipo hace su trabajo y depura
los desarrollos sin afectar al otro; el equipo E1, al tener a WIN y CLASS en la misma solución,
puede construir la solución completa, con lo cual se pueden hacer revisiones de convivencia en-
tre el exe que generará WIN y el dll que generará CLASS. Por otro lado, EZ trabaja de manera
o o
autónoma, sin verse afectado por los trabajos de depuración de E1. Cabe aclarar que al construir
Alfaomega 23
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Solution El y Solution E2, se hace en modo Debug, y se deberán corregir Jos proyectos hasta que
no existan errores.
Cuando finalmente todos los proyectos están validados, se genera una nueva solución, que actua-
rá como solución maestra (Solution M). A esta solución se asociarán todos los proyectos. Prime-
ramente se construye en modo Debug, a fin de garantizar la convivencia; en caso de errores, se
corrigen. Cuando ya no hay errores, se procede a construir Solution Men modo Release, y nues-
tro aplicativo quedará listo para su implementación.
Las decisiones relacionadas con el número adecuado de soluciones y la manera en cómo deben
ser realizados los procesos de Build, dependen de la distribución del trabajo entre los equipos de
desarrollo, así como las verificaciones de convivencia que se deseen entre los proyectos.
La idea central es que al momento de llegar a los editores, casi todo esté hecho.
A continuación se explican brevemente cada uno de los tipos de herramienta, a reserva de que se
comprenderán mejor al momento de realizar ejercicios que los utilicen.
24 Alfa omega
SYNAPS PREMIUM
Unidad 2: Ambiente de trabajo usando Visual Studio 2012
2.2.1 Diseñadores
En Visual Studio los diseñadores son herramientas que permiten crear interfaces y elementos de
aplicativo de forma gráfica, logrando que la herramienta codifique por nosotros lo que visual-
mente estamos diseñando de manera sencilla e intuitiva.
Los diseñadores permiten elaborar interfaces de todo tipo (Windows, Web, Mobile, etcétera), y se
apoyan mucho en Toolbox, que provee los elementos que pueden agregarse en la interfaz (lla-
mados controles, o controls), y de Properties Window, que permite modificar el comportamien-
to y apariencia de los elementos que son diseñados.
Prácticamente hay tantos diseñadores como tipos de aplicativo: Windows Designer , para aplica-
ciones Windows; Web Designer, para aplicaciones Web; WPF Design er , para aplicaciones WPF,
,
y ast.
Dentro de las operaciones más importantes que se pueden hacer con los diseñadores está la de
agregar elementos. Esto se hace en conjunto con Toolbox, de la siguiente manera:
1. Modo inserción. Se hace doble die sobre un control en Toolbox, con lo cual un objeto
se agregará al área de diseño.
2. Modo arrastre. Se arrastra un control, de Toolbox, al área de diseño, y el objeto se
agrega.
3. Modo de trazo. Se hace un die sobre un control en Toolbox, y luego se traza el espa-
cio que deberá ocupar el control dentro del área de diseño, y este se agrega.
Se debe tomar en cuenta que, cuando se agregan elementos a un área de diseño, todo lo que agre-
guemos se convierte en un objeto, mismo que tiene un identificador y que podrá ser manipulado
de manera individual a través de las ventanas.
En Visual Stu dio los diseñadores varían bastante, dependiendo lo que nos ayuden a diseñar: crear
una interfaz Windows puede ser muy distinto a diseñar una clase abstracta. Más allá de eso, po-
demos ver un diseñador de forma muy similar a esta:
Alfaomega 25
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Toolbox
-
fock
•
f
.
So-«01. -
Figura 01.04
Herramientas de
;
\ ,_
4 AIW~foes • • tl
diseño de Visual
r "'',_.._
" ~..'l.... Área de
=._
i
Studio. 101 ~
diseño
Co_n_tr_o_le-s ""'r-~- ~
(í-
!f.1 Colodloolog
il , _
El C....-...&op
.Q'! D•taGnd'llrw
iJ D•tolc!
i5 04tduncP!(k.cf
rn o,rtct()()'(tltl)'
P D•rKtorySurchtt
[] D"'"•~UpOow"
O EnotPtov•c:kt
1!1 !w>t1ccJ
m filtSystcm'Wftchtr
!j fb..t.tyoi4Ptl\rl
¡;] fold<ts.-!l•log
Gl f<otllwlog
CJ GroopBoet
2.2.2 Ventanas
En Visual Studio las ventanas son herramientas que permiten modificar los elementos sobre los
que estamos trabajando, o crear nuevos elementos. Las más típicas son las siguientes:
1. Solution Explorer (CTRL+ALT+L). Permite administrar los proyectos y elementos de
proyecto que componen una solución.
2. Server Explorer (CTRL+ALT+S). Permite visualizar los servidores con los cuales se
puede interactuar desde la aplicación. Generalmente se trata de servidores de base de
datos con los cuales se pueden establecer conexiones.
3. Object Browser (CTRL+ALT+J). Permite explorar y analizar los elementos que com-
ponen los objetos definidos en nuestro desarrollo.
4. ToolBox (CTRL+ALT+X). Permite ver los controles gráficos que pueden ser incluidos
en una interfaz de usuario. Muy útil al diseñar aplicaciones Windows y Web.
5. Properties Window (F4). Permite modificar las propiedades de elementos incluidos
en una interfaz de usuario.
26 Alfa omega
SYNAPS PREMIUM
Unidad 2: Ambiente de trabajo usando Visual Studio 2012
Es común que las ventanas tengan encabezado, y generalmente tienen los siguientes elementos:
Auto·
M en u
Search
Es importante mencionar también que dentro de las ventanas hay un tipo especial, que son las
ventanas informativas; su característica principal es que sólo aparecen cuando se está realizando
un proceso determinado, y permiten observar evidencia de Jo que Visual Studio está haciendo.
Este es el caso de Output Window, Task List, etcétera.
2.2.3 Editores
En Visual Studio los editores son editores especializados que permiten crear documentos aten·
diendo reglas sintácticas específicas. Por ejemplo, XML Editor está preparado para detectar si un
documento está siendo construido adecuadamente, atendiendo las reglas de XML; por otro lado,
Code Editor vigilará si las reglas de sintaxis del lenguaje elegido se están cumpliendo, y así.
Dentro de algunas funcionalidades que Jos editores proporcionan, están los siguientes:
1. Branching. Identifica bloques de código que tienen inicio y fin, y permite extenderlos o
colapsarlos.
2. Auto-Complete. Agrega de forma automática líneas de código que por sintaxis deben
incluirse.
Alfaomega 27
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
28 Alfa omega
SYNAPS PREMIUM
Unidad 2: Ambiente de trabajo usando Visual Studio 2012
En este ejercicio generará una solución en Visual Studio y verá la manera en que se pueden
agregar proyectos y elementos de proyecto para el desarrollo de una aplicación.
·-·-•c.--
Q • lól tJ' • MKh- • Jfi
,.._,_ •••
p.
• 1 X
.-.,...o-.,.,_ ....
"'ft•,.-~*~·
........................
2. A esta página inicial se le llama Start Page, y es la página de inicio para los trabajos.
Desde ella se pueden crear nuevos desarrollos, abrir desarrollos existentes, además de
obtener información reciente relacionada con el producto, misma que es obtenida
desde Internet.
3. En Start Page haga die en New Project, y aparecerá la ventana New Project, que
permite la creación de un nuevo proyecto.
Alfaomega 29
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
~~::~~=====:.ill~"""'-T....-
•,...,.a*c•......,,.....,.,__....-•
Y....... C.
.........
V~tWIC••
\!Wflf•
IQI.S...•
l..,.S..-tcft :! D•• .,,ftdrowl Ser...u
-
Othtt 'IOJt« l)'ptf
lductt~NJ ~IKb
g1."J Y.WCustomC«~t~ollb.-y
••!.
o -. ..~· 'lt'Pf u~ COI'Itrolltbr"'Y
•
•••
VIWOII811ftC
30 Alfa omega
SYNAPS PREMIUM
Unidad 2: Ambiente de trabajo usando Visual Studio 2012
114 ~~ l(.w..Q P - e •
_. tr11 ..., NCIIkt M.t llliWG """ SQL fc:.et~ ;ccu rm ........a¡cna ..,.,as ....,. ..,
-......• . .;;:. .
d· ~Ww" • -· 4.~ 01eo.t • ,
. ...........
.....
•• • ¡,_,..,._ •. .,
p.
=--~~ --·t.-_.
• ...... ' 'M
.." .....
r ...,••, *'"
~ .... "'ff'' ...
.............
CZI CNOb
( ............
"" '-
11 ·
11 -"OIIIr9
( .........
1ft r.••t.Mfto ...
Ql C'olfSC
a Or.lo1....,d•
~·"""'
p ....
Cl _
a .......- •••-
o ........
• lotNl...
Q ·-~'"'""......
" floool.~..,tf
Windows Designer
"·-
;, ........o...
b. En Toolbox se colocan todos los controles que pueden ser integrados a una aplicación
de interfaz de usuario Windows.
Alfaomega 31
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
7. Visto así, parecería que sólo se puede trabajar con un proyecto al mismo tiempo, lo cual
no es cierto. Haga lo siguiente:
a. En la barra Search de Solution Explorer, escriba «Sol».
b. Vea cómo se realiza la búsqueda dinámica, mostrando los elementos que cumplen con
el texto de búsqueda.
c. En este caso, aparece el nodo que se ocultó al momento de crear el proyecto Windows.
d. Seleccione el nodo, y utilizando el menú de contexto, seleccione Add - New Project.
,
e. En Add New Project, en el Arbol de Tipo de Plantillas seleccione Installed - Visual
Basic - Web.
f. En Plantillas, seleccione ASP.NET Empty Web Application.
g. En Name asigne HolaMundoWeb.
h. Presione Ok.
1. Elimine lo que escribió en la barra Search de Solution Explorer, a fin de que el
contenido de la ventana no se filtre.
j. Aparecerán entonces los dos proyectos que están contenidos en la solución.
32 Alfa omega
SYNAPS PREMIUM
Unidad 2: Ambiente de trabajo usando Visual Studio 2012
...
12. Cuando se selecciona una pestaña, el diseñador o editor correspondiente toma control
del espacio de trabajo.
13. Cuando no se quiera tener un elemento disponible en el área de trabajo, basta con
hacer die en el ícono de cerrado. En cualquier momento que necesitemos nuevamente
el elemento, podemos agregarlo haciendo die sobre él en Solution Explorer.
a. En la Barra de pestañas de archivo, seleccione Forml. vb, haciendo die sobre la
pestaña que tiene su nombre.
b. 13 Cierre ese elemento, haciendo die en el ícono de cerrado.
c. En Solution Explorer identifique el nodo de Forml. vb, y haga doble die en él, para
que se cargue el elemento en el espacio de trabajo.
14. Ciertamente, el nombre del programa Forml. vb no es muy ilustrativo. Para renombrar
el nombre del elemento desde Solution Explorer, lo que debe hacer es lo siguiente:
a. Seleccione el nodo Forml. vb que se encuentra en el proyecto HolaMundoWin.
b. Seleccione la opción Rename del menú de contexto.
c. Coloque como nuevo nombre HolaMundoWinForm. vb
d. Aparecerá un mensaje preguntando si desea actualizar las referencias al nombre de
elemento, a lo que contesta afirmativamente.
Alfaomega 33
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
d) Comprobando Auto-Hide
15. En monitores que no son muy grandes el espacio de trabajo puede volverse crítico. En
algún momento se puede desear que una ventana que no está siendo ocupada
desaparezca de nuestra vista. Esto es posible a través de la capacidad de Auto-Hide de
las ventanas de Visual Studio.
16. lil En Solution Explorer, haga die en el ícono de Auto-Hide, hasta que aparezca
apaisado o acostado. Podrá darse cuenta que la ventana desaparece.
17. Al mismo tiempo, en el área de pestañas perimetrales, aparece una pestaña para
Solution Explorer. Haga die en dicha pestaña en múltiples ocasiones, y vea cómo la
ventana aparecerá y desaparecerá. Si ocupa más espacio, basta con que haga
desaparecer la ventana, y ya está.
18. IJ Para que la ventana esté permanentemente en su espacio de trabajo, haga die en
Auto-Hide hasta que el ícono aparezca en modo vertical.
19. Agregar elementos de proyecto es muy sencillo. Basta seleccionar el nodo principal del
proyecto, y en el menú de contexto elegir Add - New Item, o presionando
CTRL+SHIFT+A.
a. Seleccione el nodo principal de HolaMundoWeb.
b. Presione CTRL+SHIFT +A, con lo que aparecerá la ventana Add New /te m.
,
c. En el Arbol de Tipo de Plantilla, seleccione lnstalled- Visual Basic - Web.
d. En Plantillas seleccione Web Form .
e. En Name escriba HolaMundoWebForm. aspx
f. Presione Ok.
g. Con ello aparecerá Web Designer permitiéndonos editar la página Web que acabamos
de crear.
20. De esta forma es posible agregar elementos a cualquier proyecto, obviamente, variando
el tipo de elemento de acuerdo a lo que necesitemos agregar a nuestros proyectos, y
tomando en cuenta que hay algunos elementos de proyecto que no tienen cabida en
ciertos proyectos, como podría ser una Windows Form en un proyecto Web, que Visual
Studio no podría resolver.
21. Pruebe sus conocimientos: Agregue al proyecto HolaMundoWin, un elemento de
proyecto basado en la plantilla Windows Form, que se llame Nuevo. vb
34 Alfa omega
SYNAPS PREMIUM
Unidad 2: Ambiente de trabajo usando Visual Studio 2012
22. Es probable que en un momento dado no sólo quiera agregar elementos, sino
eliminarlos. Para ello, basta seleccionarlos en Solution Explorer, y elegir la opción
Delete del menú de contexto.
a. En Solution Explorer seleccione el nodo Nuevo. vb del proyecto HolaMundoWin.
b. Elija la opción Delete del menú de contexto.
c. Confirme la eliminación permanente del archivo.
f) Guardando el trabajo
b. .JA Si deseamos guardar todo Jo que no esté guardado, hacemos die en el icono Save
All de la Barra de herramientas, o presionamos CTRL+SHIFT+S.
24. Guarde todas las modificaciones que haya realizado hasta el momento en sus proyectos.
FIN DEL EJERCICIO*
Alfaomega 35
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
•
iiCG..-Q o·~·..,,
Module "uduld + D1visor de
• páneles
Sub Main(}
End Sub
1End ~ ule
1 •
Divisiun de prucedunienlus
Colorinq
Branching Para mostrar y ocultar partes de código. Al ocultar partes del código que no queremos ver,
podemos concentrarnos en los contenidos que si
queremos modificar.
Barras de Para desplazarnos rápidamente dentro del contenido Se arrastran las barras de desplazamiento en el
desplazamiento editado. sentido que queremos mostrar.
Coloring Para diferenciar los contenidos de forma visual. Ver los colores que asigna el editor nos ayuda a
distinguir cómo es que están siendo interpretadas las
palabras que colocamos, o si estamos utilizando
indebidamente palabras reservadas.
División de Para identificar claramente dónde comienza un En códigos muy largos resulta muy útil para
procedimientos procedimiento y donde termina otro. diferenciar divisiones importantes en el código.
Divisor de Para dividir la pantalla en dos, y poder estar viendo Se arrastra el Divisor de páneles hacia el centro, con
páneles dos partes diferentes del código, en forma simultánea. lo cual divide el área de edición, haciéndolas
independientes.
36 Alfa omega
SYNAPS PREMIUM
Unidad 2: Ambiente de trabajo usando Visual Studio 2012
Selector de Permiten seleccionar de forma jerárquica los Se selecciona en el Selector de elementos un objeto
elementos y sub· contenidos, a fin de trasladar el cursor a las partes contenedor o base, y posteriormente se selecciona en
elementos. seleccionadas sin tener que identificarlas visualmente. el Selector de sub-elementos, el elemento asociado a
él que queremos ubicar.
lntellisense Capacidad del editor de intuir y autocompletar lo que Al estar escribiendo una palabra que el editor detecta
queremos escribir. como objeto o palabra reservada, la propone en
forma de menú. Si vemos que ha adivinado lo que
queremos escribir, no nos molestamos en escribir el
resto de la palabra, sino el carácter que le seguiría.
Sugerencia de En el caso de funciones y métodos que tienen Al tener una función o método con diferentes
parámetros polimorfismo y aceptan diferentes parámetros y implementaciones, al intentar proporcionarle
dependiendo de ello realizan diferentes cosas, el parámetros, nos sugiere el escenario más común, los
editor sugiere los diferentes escenarios de uso, con tipos de dato requeridos, y la acción que se realizara.
una breve explicación de tipos y utilidad. Usando flechas hacia arriba y hacia abajo, podemos
explorar los diferentes escenarios posibles que
permite la función o método.
Auto-Complete Cuando el editor detecta que se está utilizando una Escriba el código de inicio de un bloque o estructura
estructura o instrucción de bloque, completa el código de código, y el editor automáticamente proporciona
automáticamente. el código que falta.
Error Detection Señala visualmente las partes de código que causan Prestar atención en código subrayado por el editor,
error. Si se pone el cursor sobre el código señalado revisar el mensaje de error, y corregirlo.
con error, se muestra una descripción del error
detectado.
2. Edite el código en orden, de tal manera que quede como sigue. Trate de utilizar las
funcionalidades de Code Editor, prestando atención en los siguientes momentos:
a. En la línea 4, cuando haya escrito «Con so», lntellisense le sugerirá la palabra completa,
que es «Consol e». En lugar de escribir la «1», escriba el «.» que es Jo que seguiría de la
palabra completa. lntellisense le sugerirá «Wri teline», por lo cual usted ya no se
molesta en escribirla, y escribe lo que seguiría, que es « ( ».
b. En la misma línea 4, al escribir el paréntesis, aparecerá un tool tip de sugerencia de
parámetros. Utilizando la flecha hacia abajo del teclado, busque la implementación en
donde value sea String. Analice la explicación, y termine de escribir la línea.
c. Cuando escriba la línea 7 se generará un error, porque se está invocando un
procedimiento que no existe. Vea cómo al poner la línea, el editor pone en
funcionamiento su característica de Error Detection, y subraya la línea de código
Alfaomega 37
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
indicando un error. Coloque el puntero del ratón sobre la línea que marca error y vea el
mensaje de error que aparece en forma de tool ti p.
d. Utilice la funcionalidad de Error Correction Options, haciendo die en el ícono de error.
Aparecerán las soluciones propuestas. Seleccione una haciendo die (aparecerá un tool
tip que dice Apply Fix), con lo que se agregará el procedimiento que hace falta.
e. Modifique el código para que quede exactamente como sigue.
1 Module Module1
2
3 Sub Main ( )
4 Console .Write li ne( "Presione INTRO" )
S Console .Readl i ne()
6 Console . Wr ite l i ne( ''Hola Mundo'' )
7 Espera()
8
9 End Sub
1€1
11 Sub Espera()
12 Console .Writeline( " ... " )
13 Console .Readline()
14 End Sub
15 End Module
f. Juegue un poco con Code Editor. Compruebe Branching, analice Coloring, Divida en
páneles el área de trabajo, vea las divisiones de procedimientos, seleccione elementos y
sub-elementos, etcétera.
e) Depurando aplicaciones
38 Alfa omega
SYNAPS PREMIUM
Unidad 2: Ambiente de trabajo usando Visual Studio 2012
Output • J X
Show output from: 81.1ld •
·····- 8ulld started: Project: HolaMUndoCon, Confi¡uration: Debuc Any CPU ······ •
Hol~ndoCon ·> C:\Ustrs\ft~pe\docuoents\visual studio 2912 ,Projects\Ejtrclclos\1
•••••••••• Build: 1 succeeded 1 e f ailed 1 e up-to-date 1 e skipped ••••••••••
¡;
•
•
"' •
Ho<.lundoCon.txuorl'9
HoloMundoCol\l(lb
Holot.lundoCon.Y1ho>t.cn
f. Se ejecuta en modo de depuración, seleccionando HoliMundoCon."host eu.coofig
HoloMundoCon."'hosi,.•.J!Wlilat
Debug - Set new instance. HoloMundoCo""""l
~ --- oOj
O App~onfog
g. Con ello el programa se ejecuta. ~ .w Modulcl.vb
Alfaomega 39
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
40 Alfa omega
SYNAPS PREMIUM
Unidad de aprendizaje 3
Competencias:
1. Conocer qué son las variables y
los arreglos de memoria, y cómo
funcionan en .NET.
2. Conocer cómo se declaran las
variables de memoria,
especificando su alcance y
accesibilidad.
3. Conocer los tipos de datos
soportados por la plataforma
.NET y la forma en que se
realizan conversiones entre
datos.
Evaluaci6n:
l. Proporcionar un
algoritmo en donde se
plantee un problema Evidencia de
que requiera el uso de aprendizaje:
variables y arreglos, y 1. Capacidad de crear
validar que se está en aplicaciones en donde se
condiciones de utilizan arreglos y variables de
desarrollar el programa memoria, con un manejo de
correspondiente, tipos adecuado.
considerado strong -.-~......, 2. Capacidad de especificar
typing. alcances y accesibilidad, de tal
2. Proporcionar un manera que las variables
programa que deberá estén disponibles en el
ser analizado, para momento que son requeridas,
efecto de especificar el sin causar conflictos de
alcance y accesibilidad colisión.
adecuados para no
provocar error.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
42 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
Alfaomega 43
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Recomendamos ampliamente que busque que el identificador de las variables sea: a) lo más
corto posible, b) significativo, y e) poco propenso a ambigüedades. Por ejemplo, si desea
guardar un número de mes, el nombre nm puede ser demasiado corto y ambiguo, Numero-
DeMes puede ser innecesariamente largo, mientras que NumMes es bastante balanceado.
Siendo así, para nuestro ejemplo, el dominio de tipo sería números enteros sin signo, entre
O y 255, mientras que el domino de regla de negocio sería entero mayor a cero y menor o
igual a 21, y además, que no sea 13.
Al momento de crear variables, deberá seleccionar un tipo de dato, cuidando que el tipo
seleccionado tenga un dominio de tipo suficiente para almacenar sus datos con el menor
consumo de memoria.
44 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
Para una adecuada selección del tipo de dato, consulte la siguiente tabla que muestra Jos
tipos de datos que Visual Basic soporta:
Alfaomega 45
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
3.3.1Conversión de datos
En muchas ocasiones requerirá realizar conversiones de tipos de datos, principalmente de
datos String a otros tipos. Se conoce como conversión de datos al hecho de cambiar el tipo
de dato de un valor por otro. Se tienen tres formas de conversión de datos en Visual Basic.
46 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
En este caso, se declara una variable llamada Edad, de tipo Integer, a la cual se le asigna el
valor de 30. Después se declara una variable llamada EdadTexto que tomará la representa-
ción String de la variable Edad, es decir "30".
Alfaomega 47
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Hacen lo siguiente:
1. La línea 1 declara una variable Object.
2. La línea 2 declara una variable lnteger.
3. La 3 es exactamente igual a la línea 2, ya que Integer es la referencia a Sys-
tem.Int32 de .NET Framework.
4. La línea 4, además de declarar la variable, le asigna un valor de inicio.
S. La línea S demuestra que se pueden declarar varias variables de un mismo tipo,
separando los identificadores por comas.
6. La línea 6 demuestra que Dim soporta la declaración de dos o más variables de un
mismo tipo, y de dos o más tipos.
48 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
3.4.2 Constantes
Se conoce como constantes a las variables que sólo cambiarán su valor una vez en su tiempo
de vida. Para definirlos se utiliza la siguiente sintaxis.
3.4.3 literales
Si se menciona un número 4, no tenemos suficiente información para saber si el número es
Byte, Integer, Double, Decimal, dado que 4 puede ser de cualquiera de esos tipos. Lo mis-
mo ocurriría con "A", dado que no sabríamos si se trata de un dato String o Char.
Se tienen literales que permiten definir un valor, liberándolo de las ambigüedades de tipo
que pudiera tener.
Las literales son las siguientes:
Type Literal ~emplo de uso
Boolean True True
False False
Char e "AJJC
Decimal D 3.14160
Double R 3.1416R
Integer I 18I
Long L 18L
Short S 185
Single F 3 .14F
String u u
"AJJ
Alfaomega 49
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
50 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
Alfaomega 51
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
52 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
Es lo mismo que:
Static Edad As I nteger
3.7 Arreglos
Se conoce como arreglos (arrays), también llamados matrices en algunos casos, a un conjun-
to de posiciones en memoria que son referidas por un mismo identificador.
La forma de acceder a un dato almacenado en una posición de memoria dentro de un arre-
glo es a través de un subíndice, que es la posición secuencial de cada elemento dentro de la
colección. Los subíndices, como en todos los lenguajes de .NET, son de base cero, es decir,
que inician de cero en adelante.
En Visual Basic, los arreglos tienen un tratamiento de colecciones, por lo cual los subíndices
siempre se especifican entre paréntesis. Las colecciones son conjuntos de objetos lógica-
mente relacionados, diferenciados por un subíndice.
En su calidad de colecciones, pueden ser explorados con la instrucción For Each, cuya sin-
taxis es la siguiente.
Alfaomega 53
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Donde Arreglo es el identificador del arreglo; su nombrado sigue las mismas reglas que las
variables. MáximoSubíndice es el número mayor de subíndice del arreglo, y TipoDato es el
tipo de dato de los elementos del arreglo.
Ejemplo.
Dim VentaMensual(ll) As Integer
En este caso se tiene un arreglo de 12 posiciones (O a 11), donde los elementos son de tipo
Integer.
En caso de que no se especifique un número determinado de elementos, el arreglo será de
un número indeterminado de elementos.
A este tipo de arreglos se les llama arreglos unidimensionales, pues únicamente es necesario
especificar un subíndice para tener acceso a una posición en memoria del arreglo.
También es posible asignar valores al momento de declarar un arreglo. En ese caso, no se
deberá especificar número de elementos, ya que el número de elementos se calculará au-
54 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
Donde Arreglo es el nombre del arreglo, TipoDato es el tipo de dato de los elementos, y Se-
rie Valores es la serie de valores que asumirán los elementos; los valores deberán estar se-
parados por comas.
Ejemplo.
Dim Numeras() As Int eger - {1e,2e,4e,1ee}
Numeros
Donde Arreglo es el identificador del arreglo; su nombrado sigue las mismas reglas que las
variables. MSl es el número mayor de subíndice para la dimensión 1, MS2 es el número ma-
Alfaomega 55
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
yor de subíndice para la dimensión 2, y así hasta definir todas las dimensiones. TipoDato es
el tipo de dato de Jos elementos del arreglo.
Ejemplo.
Dim VentaTrim(2,3) As Integer
A este tipo de arreglos se les llama arreglos multidimensionales, pues sólo es necesario es-
pecificar un subíndice para tener acceso a una posición en memoria del arreglo.
También es posible asignar valores al momento de declarar un arreglo. En ese caso, no se
deberá especificar número de elementos, ya que el número de elementos se calculará au-
tomáticamente considerando el número de valores que se especifiquen entre llaves ({}),
separados por comas (,). Cada llave constituye la serie de valores para una dimensión. La
sintaxis sería la siguiente.
Donde Arreglo es el nombre del arreglo, TipoDato es el tipo de dato de los elementos, y Se-
rieValores1 y SerieValores2 es la serie de valores que asumirán los elementos; los valores
deberán estar separados por comas.
Ejemplo.
56 Alfaomega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
VentaTrim
30000
Donde Arreglo es el identificador del arreglo; su nombrado sigue las mismas reglas que las
variables. Dependiendo el número de arreglos que se desee incluir, se deberán agregar pa-
res de paréntesis con posterioridad al nombre de variable. TipoDato es el tipo de dato que
tienen los elementos en los arreglos.
Ejemplo.
Dim Numeras()() As Byte
En este caso se tiene un arreglo que almacenará dos arreglos, donde los elementos son de
tipo Byte.
También es posible asignar valores al momento de declarar un arreglo. En ese caso, los va-
lores son definiciones de arreglos.
Donde Arreglo es el nombre del arreglo, TipoDato es el tipo de dato de los elementos, y
Arreglol y Arreglo2 son arreglos con elementos que son TipoDato; los arreglos deberán es-
tar separados por comas.
Ejemplo.
Alfaomega 57
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Numeros
Numeros1
En este caso, Numeras (e) ( 3) tendrá el valor de 11. Estaríamos extrayendo, del arreglo O, el
elemento 3. El primer subíndice proporcionado indica el número de arreglo del que se trata,
mientras que el segundo subíndice indica el o los subíndices del elemento que queremos
extraer. Un arreglo escalonado puede contener arreglos unidimensionales o multidimen-
sionales.
Los arreglos escalonados no son lo mismo que los arreglos multidimensionales; estos últi-
mos pueden llegar a consumir cantidades muy grandes de memoria. Por ejemplo, si se quie-
re almacenar en un arreglo el número de identificación de 1000 empleados y S números de
categorías de empleados, un arreglo multidimensional ocuparía 1000 x S posiciones de
memoria, es decir, SOOO; un arreglo escalonado, por el contrario, requeriría sólo 1000 + S,
es decir, 100S. Si el arreglo fuera de datos Long (8 bytes), la diferencia en consumo de me-
moria sería de 31,960, que bien podría economizar.
Una cosa importante a tomar en cuenta es que los arreglos escalonados no forman parte de
CLS, por lo que sólo trabajarán adecuadamente en implementaciones Microsoft, y no en
otras plataformas que implementen considerando CLS como base.
58 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
Afortunadamente, .NET provee una clase denominada String, que posee el método For-
mat.
Su sintaxis básica es la siguiente:
String.Format("{0:formato} », v)
El número entre llaves es un índice de valor, formato es un carácter que indica el formato
deseado, mientras que ves el valor a darle formato. En nuestro ejemplo:
String.Format("{0:C}», 404567.00) -+ $484,567.08
Es posible manejar varios valores. Sólo basta colocar después de la expresión inicial, la serie
de valores separados por comas. El primer valor de la lista será el índice O, el segundo 1, y
así. Cabe aclarar que el orden de los valores no necesariamente implica el orden en el que
los índices de valor deben aparecer.
String.Format("{l:C} de {0:C} es el {2:P}», 200, 20, (20/200) )
-+ $20.00 de $200.00 es el 10.00%
Los códigos más comunes de formato son los siguientes (para expresiones de tipo numéri-
co):
e Currency
D Decimal
E Scientific
F Fixed point
G General (Default, si se omite formato {v})
N Number
p Percent
R Round-trip
X Hexadecimal
Alfaomega 59
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Los códigos más comunes de formato son los siguientes (para expresiones de tipo fecha):
d Short date
D Long date
t Short time
T Long time
f Full date/short time
F Full date/long time
g General date/short time (Default, si se omite formato {v})
G General date/long time (Default, si se omite formato {v})
M Month
R RFC1123
S Sortable
u Universal sortable
u Universal sortable
y Year
60 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
1 Module Module1
2
3 Sub Main()
4 Const Titulo As String = " Rectángulo "
5 Dim Base As Integer
6 Dim Altura As Single = 0
7 Dim Resultado As Single , Entrada As String
8
9 Console .Writeline(Titulo)
10 Console .Write( ''Base: '' )
11 Entrada = Console .Readline()
12 Base = Cint (Entrada)
13 Console .Write( ''Altura: '' )
14 Entrada = Console .Readline()
15 Altura = CType(Entrada, Single )
16
17 Resultado = (Base * Altura)
18 Console .Writeline( ''Resultado: '' & Resultado.ToString())
19
20 Console .Writeline( ''Pulse Intro'' )
21 Console .Readline() End Sub
22
23 End Module
Alfaomega 61
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
62 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
1 Option Explicit On
2 Option Strict On
3
4 Module Modulel
S Dim Textol As String - "Alcance módulo"
6
7 Sub Main()
8 Console .Writeline(Textol)
9 Dim Texto2 As String = ''Alcance procedimiento''
19 If Texto2 <> '''' Then
11 Console .Writeline(Texto2)
12 Dim Texto3 As String = ''Alcance block''
13 Console .Writeline(Texto3)
14 End If
15 Procedimiento!{)
16 Procedimiento!{)
17 Procedimiento!{)
18 Procedimiento2{)
19 Console .Writeline( '' '' )
29 Console .Write{ "Pulse INTRO para continuar" )
21 Console .Readline()
22 End Sub
23
24 Sub Procedimiento!()
25 Static Texto4 As String
26 Texto4 = "Valor + " & Texto4
27 Dim TextoS As String = "Texto 5"
28 Console .Writeline( ''--Procedimiento 1 ----'' )
29 Console .Writeline( "Texto 1: " & Textol)
39 Console .Writeline( "Texto 4: " & Texto4)
31 Console .Writeline( "----------------------" )
32 End Sub
33
34 Sub Procedimiento2{)
35 Console .Writeline( ''--Procedimiento 2 ----'' )
36 If Texto1 <> '''' Then
37 Dim Textol As String = "Shadow"
38 Console .Writeline( "Texto 1: " & Textol)
39 End If
49 Console .Writeline( "Texto 1: " & Textol)
41 Console .Writeline( ''----------------------'' )
42 End Sub
43
44 End Module
Alfaomega 63
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
64 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
e)¿ Qué valor posee Textol, cuando es desplegada en la consola en la línea 40?
Alfaomega 65
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
12. Modifique la línea 21, sustituyendo el estatuto de declaración Static por Dim.
Ejecute el programa nuevamente, y explique qué sucede:
66 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
1 Option Explicit On
2 Option Strict On
3
4 Module Module1
S
6 Sub Main()
7 Dim i As Integer
8
9 Console .Writeline( ''Arreglo unidimensional 1:'' )
10 Dim Uni1() As Integer = {22, 49, 2e, 4e}
11 For Each i In Uni1
12 Console .Writeline(i)
13 Next
14 Console .Writeline( ''Arreglo unidimensional 2:'' )
15
16 Dim Uni2() As Integer = {55, 66, 77}
17 For Each i In Uni2
18 Console .Writeline(i)
19 Next
20
21 Console .Writeline( ''Arreglo multidimensional:'' )
22 Dim Multi(,) As Integer = {{92, 49}, {44, 2e}, {10, 48}}
23 Console .Writeline( _
24 String .Format( ''Fila e: {e},{1} '' , Multi{e, e), Multi{e, 1)))
25 Console .Writeline( _
26 String .Format( ''Fila 1: {e},{1} '' , Multi{1, e), Multi{1, 1)))
27 Console .Writeline( _
28 String.Format( ''Fila 2: {e},{1} '' , Multi{2, 0), Multi{2, 1)))
29
30 Console .Writeline( ''Arreglo escalonado:'' )
31 Console .Writeline( ''Arreglo 1, posición 2'' )
32 Dim Esca()() As Integer = {Uni1, Uni2}
33 Console .Writeline(Esca(1)(2))
34
35 Console .Write( ''Presione INTRO'' )
36 Console .Readline()
37 End Sub
38
39 End Module
Alfaomega 67
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
En la línea 11 se inicia una estructura For Each que permitirá hacer una lectura
de los valores almacenados en el arreglo. La estructura utilizará la variable i que
es de tipo lnteger, para trabajar cada uno de Jos elementos del arreglo Unil. La
estructura For Each comenzará una lectura secuencial de todos los elementos,
desde el subíndice O hasta el 3; i asumirá el valor del elemento que se esté
leyendo en el momento, por Jo que trabajar con i es como estar trabajando con el
elemento del arreglo. La línea 12 provoca que se vea en la consola el contenido de
cada una de las posiciones en memoria.
8. La línea 16 declara un arreglo unidimensional de tres posiciones, llamado Uni2,
que será utilizado junto con Unil más adelante. El proceso para el mostrado de
contenido se repite con Uni2. Sus valores son los siguientes.
··--·- ---····-·----·,
SS j
....·····-- ............................................._.
66 1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .J
! 77 ¡'
1
''
I ....................................................... ..J ''
441 20 1
¡··-······-············-·····-+-----------~
1
1
!1............_ .. ___________________:.__
10 i 48 •i:
68 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
Alfaomega 69
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
11. Vea el siguiente ejemplo, y coloque las referencias que hacen falta.
c. Utilizando Multi.10 = _ _ _ _ _ _ __
70 Alfa omega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
Alfaomega 71
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
72 Alfaomega
SYNAPS PREMIUM
Unidad 3: Variables, Arreglos y Tipos de Datos
Alfaomega 73
SYNAPS PREMIUM
Unidad de aprendizaje 4
Namespaces y librerías
Competencias:
l. Conocer qué son los
Namespaces.
2. Conocer el sistema jerárquico
de Namespaces nativos de la
plataforma.
3. Conocer el concepto de
nombres ca lificados y su
utilización.
4. Conocer la forma de crear
Namespaces propios y la
manera de consumirlos desde
programas.
5. Conocer las técnicas y
herramientas de depuración
Evaluacl6n: disponibles en Visual Studio.
1. Proporcionar
diferentes clases de
.NET Framework, y
verificar que se puede
determinar su
jerarqufa y el Evidencia de
Namespace para su aprendizaje:
l. Capacidad de ubicar clases de .NET
utilización.
Framework dentro de la jerarquía de
2. Proporcionar un caso clases de BCL.
de desarrollo de 2. Capacidad de programar
Namespace, Namespaces de usuario, y
validando que se consumirlos como librerías desde
otros programas.
utilizan en el proceso 3. Capacidad de depurar programas
de depuración las usando las herramientas de Visual
herramientas de Studio.
Visual Studio para tal
efecto.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
76 Alfa omega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
Alfaomega 77
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
78 Alfa omega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
Es posible que utilice todas las clases disponibles de .NET Framework a través de sus nom-
bres calificados, pero eso no es del todo práctico en ocasiones, pues sus nombres pueden
ser bastante largos.
Una forma de obviar la escritura del nombre calificado completo es importando los espacios
de nombres. Para ello se utiliza la instrucción Imports.
Basta con que coloque al principio de su programa, lo siguiente:
Imports EspacioNombre
Donde EspacioNombre es la parte del nombre calificado que desea estar obviando al mo-
mento de programar. En Visual Basic se puede incluir hasta el nombre de la clase de BCL,
con lo que el código puede llegar a simplificarse bastante.
Puede darse el caso de que en dos o más ensamblados se repita el nombre de clases, refe-
rencias o métodos; en ese caso, la ambigüedad debe eliminarse a través de nombres califi-
cados, ya que no podríamos saber a qué origen de los recursos nos referimos.
Los siguientes dos programas funcionarían de la misma forma.
Sin uso de instrucción Imports.
Module Modulel
Sub Main()
System.Console.Write( "Presione INTRO" )
System.Console.Readline()
System. Console.Writeline( ''Hola mundo." )
End Sub
End Module
Alfaomega 79
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Imports System.Console
Module Modulel
Sub Main()
Write( "Presione INTRO" )
Readline()
Writeline( ''Hola mundo." )
End Sub
End Module
Salvo casos muy excepcionales, no deberá preocuparse por colocar las sentencias Import si
desarrolla con Visual Studio. La herramienta se encarga de invocar los elementos más usua-
les de manera automática.
80 Alfa omega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
4. Es opcional utilizar nombres calificados o no, una vez que se establece la referen-
.
c1a.
La sintaxis para crear un espacio de nombres es la siguiente:
Namespace EspacioNombre
'Codigo de elementos
End Namespace
Donde EspacioNombre es el nombre a través del cual se referirán los elementos contenidos
en espacio de nombres que se genera.
Una cosa importante a tomar en cuenta es que para crear una jerarquía dentro de un espa-
cio de nombres es posible anidarlos, por lo cual una declaración Namespace puede estar
definida dentro de otra, creando el efecto EspacioNombrel. EspacioNombre2. Type.
Alfaomega 81
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Donde EspacioNombres será el nombre del espacio de nombres que será referido a través
de Alias.
. . . . . ¡_ - - - -
. )(
~
P·
• [!) "''09'"'
• [iJ HolloV.PfApp
Figura 04.01
• [01 HoloM.JndoCOfl
Solution Explorer • ti Hoi>MundoW<b
• [. Hoi>MundoW"'
• }> My P-cj«<
~ Q Refete11t.H
•• S)it.n
•. Sylltm (ON
~· Syslwn-0...
•• ,.~em.o ... o.-.~
•• ~('fft~
•• ,. tf'fft.Or"""t
• • ~!ctn, \\ 1ncicMVorms
.. ""'•• s, ..-
....,~
··
ó) App <onl!g
• ..-.~~"""""'b
Las referencias pueden establecerse fácilmente desde Visual Studio. Lo primero que hay
que saber es que cada proyecto tiene sus propias referencias. Al crear un proyecto desde
Visual Studio, la herramienta establece las referencias más usuales para el tipo de aplica-
o ,
CIOn.
82 Alfa omega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
_1 il-¡
Figura 04.02 ~~i~~~~~~~~---ji.T~~Kfl~ti
1 ¡t 11:1 :,1 Vtn.on •
-
N¡me
Reference b:msoons
e
A<<<SSibióy <.MJI
Manager (urtt)mt.ll~ <.M O
• SoUK!n
~ .... <Jl.Oj) 1
11
.""""'
Mtcroscft.Aaiviies.Buld <.MJI
• co.., """0\Cft.&ild <J)j)j) '-"
Mtc:ro$Cit.&,.id.C~.Y4D <J)j)j)
Microsoft.Build.Engin.e U.OJI
Mktosoft.&Jiild.Franwwoott •D.DD
Mic:r~;~~.BfJIIId.losb.v4.0 <II.DD
Mk:rosoft.&.ld.Utilit•e:s,\-4.0 <J)IJj)
Microsoft.CSharp •.OJJJ)
Mi<rcJ.Oft.JSc:ript IOD-0.0
Microsoft.V.sua!BaSK IOJIJI.O
Microsoft.V.sua!Baúc.CompatitHiity IODD.O
Micro~.Vi-su~IB.mc:.Complllib.lity 011t• IOJIM
Micros.ott.Visual( IOJI.O.O
Microsoft.Visua!C.STLCLR l.O.OJI
mscodib 'O.OD
Preserrt11bon8ulldt.nks 4.0.0.0
PresentationCore UOJI
Pr~~ntationftaml'work •O.OD
Pr~tSC:ntlbonfr¡~mcwolt.AtrO <OJIJI
Presentationframework.Aero1 <JIJ)j)
Pres;entationframewOtk..Aetolite •ODD
PresentiltJOnfrilmcwork.Cins•c <ODD
Preserrtat10nframe.wortc.Lun• <.OJIJ)
La ventana muestra una jerarquía de opciones. En Assemblies pueden ubicarse las librerías
de .NET Framework, tanto nativas como extensiones que hayan sido instaladas. También se
pueden buscar las librerías contenidas en la solución donde estamos trabajando (Solution),
en recursos COM (COM 1 Component Object Model), o sencillamente examinar diferentes
fuentes (Browse), como pueden ser librerías . DLL puestas a disposición por terceros para la
interacción con otros recursos.
En cualquiera de las pestañas se pueden seleccionar los componentes, posicionándonos en
la librería que queremos referir y haciendo die en el botón Ok, a fin de que las referencias
queden establecidas.
Alfaomega 83
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
84 Alfaomega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
d. Expanda el nodo bin del proyecto MisUtilerias, Juego expanda Debug, y vea
cómo ya ha sido generada la librería físicamente.
~ :!!f Mrslt!itNs
• 1- My Pro¡•a
~ ~ Rtferences
.. Sy<tem
. . System.Oitl.
H System.D.~taDataSEtblensions
•.• System.Xml
•·• S)lstem-Xmll•nq
4 e bln
4 tJ Oebug
:::: MisUtilerias.dn
:.. MisUtilenas.pdb
¡-· M1slhilerias.xml
1> 1' " obJ
~...
1> w Classl.vb
Alfaomega 85
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
P·
Mame Polith NMnr.
Alance C,\lkM\fftptldoc_ _ _ lOI M~
~J'(ts
Attai!«tingulo C,\lktn\Fttip<'.- ..."·""" <luello 201
t COM An«jlos C:\Usm'J tiipe' docl.Wienb\~ISWI 1>lu6o 201
HdaMunclc>ú>n C,\U>m\fdP<'docum_l_,., >tudoo 201
's._.. HolaMundoWeb C.'\U>m\fdoP<' documenb1'1Suol m.doolOI
HolaMundo\\lr~ C.'\lkm'J••P<'·documeom\"'uol audoolOl
' --------~
'L---------~"~ •
1 Brow•¡::-)1 01( J[ Cone<l J
DI WBVBVS2012.04.03 - References.wmv
86 Alfaomega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
Alfaomega 87
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
·rModule llodule1
88 Alfa omega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
" -'
1 ~ •
tooports SystN .
.. •
~ <,j!.:
O.::!
·e -
I.ports MisUtíl•rías.Funciones
"~ t •.. l t ~
··~~'"~-J!.~~-~~~--....!
"'~--!!
g ·.; O
. .... _ • 1 X
p
1llodul• o Drbt IJ ff': . .91"• .,.. ~lbOft;. "'""' Mocbd
&:> .... ,_ ......_...,.....,. .............. ,
o ~ub Mlin()
Wríttlint( "..nsajt dtsd• •1 procr.-.")
. EspordNTRO()
1
End Sub
End Modult •
,,..• .
Alfaomega 89
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
~ Continue •
90 Alfa omega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
4. Para eliminar un punto de interrupción que hemos agregado, basta hacer die
en el punto rojo que se agregó en el lado izquierdo de Code Editor, con lo cual
desaparecerá dicho punto, y con ello el punto de interrupción.
S. Si deseamos eliminar todos los puntos de interrupción agregados, hay que ir
al menú Debug - Delete All Breakpoints (CRTL-SHIFT -F9). Aparecerá una
ventana de confirmación, que debe responder afirmativamente en caso de
que desee eliminar los puntos de interrupción.
6. Elimine todos los puntos de interrupción que tiene su programa.
Alfaomega 91
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Srealcpo<nt Condobon
When the breakpoint location tS re.ached, the expresS<on IS evaluated and the breakpoont
os hot only if the expression is true or has changed.
J Condítion;
da...,.
Clnt(Entra-, )< , -- - - -
- =70 1-
o ls true
• Haschanged
OK jL Cancel ~
--
92 Alfa omega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
locals Cal! Stack Data Tools Operations Immediate Window Command Window Output Errar L1st
Alfaomega 93
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
a) Loca/s Window
Option Explicit On
Option Strict On
EModule Modulel •
• J Public Textol As String = "Alcance módulo"
8 Sub ~lain()
Console .Writel ine(Textol)
Oim Texto2 As String = "Alcance procedimiento"
If Texto2 <> "" Then
o ~onsole .~rriteline(Texto2)
Oi11 Texto3 As String = "Alcance block"
Con so le . ~rri teline(Texto3)
End If
Procedimientol()
Procedimiento1()
ProrPdimiPotn1()
UlO o/. • ~
louls • Q X
Value Type ,.
"Aic6nc~ prou:dimu:nto' ~. Strin9
Nothing Q, • Strin9
l ocals Call Stadc: Data Tools Operations Immediate Windo·11 <ommand Wiodow Ot.rtput Ertcr lirt
94 Alfa omega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
11. Siga con Step Into, y cuando llegue a la línea End If, seleccione la
herramienta Call Stack que se encuentra en las pestañas perimetrales.
12. Vea cómo por el momento aparece como única llamada la del procedimiento
Main().
13. Siga con Step lnto, hasta que se traslade la ejecución a la línea donde inicia la
declaración del procedimiento Procedimientol ().
14. Vea cómo Call Stack detecta la llamada a un nuevo procedimiento, y lo
reporta como el principal, sin olvidar de dónde ha venido, que es Main ( ) .
~ ~~~--------~~-----
.. 6> -----~· Pfocedlmlento l
Procedimientol()
Procedimientol{) •
Procedimient o2()
( on>ole . ~Jriteline( " ")
C.onsole: .l-Jrite( ·Pulse ItHRO para continuar•)
Console . Readline()
fnd Sub
•
o ~ Sub PI'OCedi•ientol ()
Static Texto4 As String
Texto4 ~ "Valor + • & Texto4
¡¡¡. TextoS As String : "Texto S"
r 1 --~~ - )
.o1e .Writeline( · --Prc<ed~ iento
( .Writeline("Texto 1: • & Textot)
.Writeline("Texto 4: • &Texto4)
l . •ole .Writeline("---- ---- --- ----- ------ ")
End Sub
<> Ak..nc.e._or.Ak..tttc.~,,oc.tólttl,tntclO LM le
Alunc:~nt-"u:rct.lrl1oct..d.Mall'l() l~n~r U .. OJó bytes
((rtt-.~ Codc:l
e) Watch Window
15. Como pudo ver, Locals muestra variables de forma dinámica, en función a su
alcance. Sin embargo, en ocasiones deseamos darle seguimiento particular a
una variable o elemento, sin perderle la pista en ningún momento.
16. Para esto utilizamos la herramienta Watch.
a. Invoque la herramienta, seleccionando la opción de menú Debug -
Quick Watch, o presionando SHIFT+F9.
b. En Expression, escriba Textol
Alfaomega 95
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
_, WBVBVS2012.04.06- Watch.wmv
e) lnte/liTrace
20. Anteriormente, si se deseaba analizar el comportamiento de un programa,
era necesario depurarlo una y otra vez. Lo ideal era poder regresar a ver algo
que ya había pasado. Sin embargo, la forma secuencial en la que trabajaban
las herramientas de depuración no lo permitían.
21. Ahora con lntelliTrace, es posible que volvamos sobre nuestros pasos.
a. En lntelliTrace, seleccione la tercer entrada Debugger (hace
referencia a la línea 7) .
Dim Texto2 As String = "Alcance procedimiento" O Deb<Jgger. Step Recorded: Main, Modulel.vb line8
If Texto2 <> "" Then O Deb<Jgger. Step Recorded: Main, Modulel.vb line 9
Console .Writeline{Texto2) lntelliTface Solution Explorer
96 Alfa omega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
• ~ X
~..... lypc ..
e M•.n Modulel.Mall'l0
G f St<p R«ord•d Toto2 : Nott.ing
~ TMo2 Noth•ng
•
locals Watch 1 Cal! St•ck. Brukpo.nts Ott. To<:~ls OpcrttiCns lmmcdiate: w·mdow Ccmmand Win-dow Output E.tror L,st
Aunque más adelante verá el estatuto condicional If, aquí lo usaremos para
ejecutar una sola línea.
Alfaomega 97
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Su sintaxis es:
Donde Condición es una condición lógica, y Línea, una línea común del lenguaje.
a) Creando Namespace
98 Alfa omega
SYNAPS PREMIUM
Unidad 4: Namespaces y Librerías
Alfaomega 99
SYNAPS PREMIUM
Unidad de aprendizaje 5
Manejo de Operadores
Competencias:
Objetivo: 1. Conocer cuáles son los operadores
de asignación, aritméticos, lógicos
Aprender el manejo de y de comparación, soportados por
operadores la plataforma .NET.
aritméticos, lógicos, de 2. Conocer cuál es la prioridad de
ejecución de los operadores, y
asignación, y de cómo manejar la prioridad
.,
comparac1on. utilizando paréntesis.
Evidencia de
Evaluaci6n: aprendizaje:
1. Proporcionar 1. Capacidad de traducir
diferentes casos de fórmulas a su representación
análisis, a efecto de codificada.
que sean 2. Capacidad de construir
representados de condiciones para la toma de
forma codificada. decisiones basadas en datos.
3. Capacidad para estructurar
árboles de decisión, e
implementarlos.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
5: Manejo de operadores
5.1 Operadores aritméticos ........................................................................................................................... 103
5.2 Operadores de asignación ...................................................................................................................... 104
5.2.1 Expresión ..............................................................................................................................................104
5.2.2 Operadores de asignación incluyente ........................................................................................ 105
5.3 Operadores comparativos ...................................................................................................................... 106
5.3.1 Consideraciones relativas al código ASCII ............................................................................... 107
5.3.2 Option Compare ................................................................................................................................. 108
5.3.3 Operadores ls, lsN ot y TypeOf...................................................................................................... 109
5.3.4 Operador Like ..................................................................................................................................... 110
5.4 Operadores lógicos .................................................................................................................................... 111
5.4.1 Operadores lógicos de circuito corto ......................................................................................... 114
5.5 Prioridad entre operadores ................................................................................................................... 115
5.5.1 Uso de paréntesis para otorgar preferencia de ejecución ................................................. 117
~ Lab.05.01: Utilización general de operadores de Visual Basic ................................................... l17
a) Comentando bloques de código ...................................................................................................... 119
b) Uso de Clipboard Riny ........................................................................................................................ 119
e) Selección basada en bloques de código (Block Se/ection) ...................................................... 120
~ Lab.05.02: Representando con operadores casos de la vida real. ............................................ 121
Los operadores son los elementos de que se vale un lenguaje de programación para la trans-
formación de expresiones, ya sea mediante cálculos o comparaciones.
Los operadores principales tienen la siguiente clasificación:
1. Aritméticos
2. De asignación
3. Comparativos
4. Lógicos
Expresión1 y Expresión2 serán siempre datos numéricos. Resultado será siempre numérico.
Operador es el operador aritmético utilizado.
Alfaomega 103
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Se debe tomar en cuenta que Resultado puede no ser del mismo tipo que las expresiones,
por ejemplo, la suma de dos Integer, 2,000,000,000 y 2,000,000,000, no será Integer, y la
división de un Integer 3, entre 2, no dará un número Integer.
Ejemplo.
Variable = Valor
Donde Variable es una variable o propiedad que puede recibir valores, y Valor, una expre-
sión válida para el tipo de dato de Variable.
5.2.1 Expresión
Una expresión es un valor, existente o derivado; es valor existente si corresponde a una lite-
ral válida para un determinado tipo de dato, o una variable que la contenga; es valor deriva-
do, cuando es el resultado de someter varios valores existentes, sean éstos variables o lite-
rales, a la acción de operadores.
Vea los ejemplos siguientes de expresiones.
10 3 varl \= var2 3
10 3 varl += var2 13
uABC" uDEF" var1 &= var2 uABCDEF"
10 3 var1 -= var2 7
Alfaomega 105
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Expresión1 y Expresión2 pueden ser cualquier tipo de expresiones comparables entre sí.
Resultado será siempre lógico (True, False), o nulo (Null). Operador es el operador utili-
zado para la comparación.
Algunos ejemplos del uso de estos operadores son.
«A" = «s" Retorna False
1 > 0.5 Retorna True
2 >= 2 Retorna True
Retorna True
Tome en cuenta que las letras mayúsculas, para efectos de comparación, tienen un valor en
código ASCII menor a las minúsculas, y por tanto, son menores. Adicionalmente, la "A" es
menor que la "Z".
65 al 90 <<A" a la uzn
97 al 122 <<a" a la uz"
225 , 233, 237, ((áJJ ((é" , ((í" ,
'
243, 250, 241 ((ó", ((ú", (( ñJJ
Algunas personas, sobre todo aquellas que no tienen su teclado configurado adecuadamen-
te, saben que presionando la tecla ALT, y sin soltar dicha tecla, se escribe con el teclado
numérico un código ASCII, éste aparecerá. Para ello es necesario que el teclado numérico
esté activado (teniendo el BLOQ NUM 1 NUM LOCK Activado).
Alfaomega 107
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Visual Basic, por otro lado, tiene funciones que permiten obtener la representación simbóli-
ca de un código ASCII, así como de obtener el código ASCII a partir de una representación
simbólica. Las funciones que lo permiten son Chr( ) y Ase( ), respectivamente.
Sintaxis.
Chr(CódigoASCII )
Ase(rccaraeter")
Ejemplos.
Chr( 64 ) ~ re@''
Ase ( re@'' ) ~ 64
Option Compare debe especificarse al inicio de los programas, antes de cualquier línea de
código. Si se omite la especificación, el esquema de comparación será case-sensitive (Bi-
nary).
Expresiónl y Expresión2 deben ser variables de tipo reference type. Resultado será siempre
lógico (True, False).
Is retornará verdadero (True) si las variables comparadas refieren a la misma posición de
memoria, y retornará falso (False) si refieren a posiciones distintas de memoria.
En ocasiones lo que se desea saber es si un objeto no referencia la misma posición que otro.
Anteriormente, la tarea se debía realizar combinando los operadores Not e ls, de la siguien-
te forma.
I f Not Objetol Is Objeto2 Then Writeline("Diferentes '')
Dado que esta expresión es poco natural en su lectura, Visual Basic incluye el operador
IsNot, que retorna True en caso de que dos objetos no refieran a la misma posición de
•
memona.
La línea de código quedaría como sigue.
If Objetol IsNot Objeto2 Then Wr ite l ine("Diferentes'')
Alfaomega 109
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Expresiónl debe ser expresiones String. Expresión2 es un patrón String que se pretende
reconocer como existente en Expresiónl. Resultado será siempre lógico (True, False).
Like retornará verdadero (True) si el patrón a buscar es reconocido dentro del dato
String base de la comparación, y falso (False) en caso de que no se reconozca.
El patrón a buscar, llamado patrón nominado, es una literal conformada por caracteres es-
peciales que representan el contenido de caracteres a buscar; a continuación una tabla que
muestra dichos caracteres y su significado.
Caracter de Significado
patrón
)
• Cualquier caracter
Recomendamos que utilice Jos patrones para determinar la validez de formatos mixtos de
datos, por ejemplo claves de cuatro letras y tres números.
Si lo que va a evaluar son formatos más estándar, como números o fechas, recomendamos
otras funciones más sofisticadas, como IsNumeric () o IsDate( ).
Alfaomega 111
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Cuando una expresión lógica se compone por una sola comparación, se dice que es una ex-
presión lógica simple, debido a que sólo se resolverá en un tiempo; si involucra dos o más
comparaciones, o la utilización de un operador lógico, se dice que es una expresión lógica
compuesta, debido a que la expresión lógica deberá resolverse en dos o más tiempos (se
resuelve la comparación, y luego se resuelve dentro del contexto en que se encuentra). Una
expresión lógica compuesta siempre se compone de expresiones lógicas simples, afectadas
por operadores lógicos que las obligan a resolverse como una sola expresión lógi-
ca.Ejemplos.
ccAJJ - uB" or 1 > e.s Es True, porque al menos una condición es True. 1
En caso de que tenga más de dos condiciones conjuntas, entra en operación lo que se cono-
ce como preferencia, que consiste en determinar el orden en que las condiciones u opera-
ciones se han de resolver.
Ejemplo.
uAJJ = ccB" OR 1 > e.S ANO 2 >= 2 ANO ccsn > uS11
-··-- -··-
Figura "A" - i ~
"B" oRI 1 > O. S.' ANO ' 2 >= 2 IANO "s" > " s "
05.01
Resolución de
.,
?
False
•
OR True i ANO
•
True ANO False
una expreswn
con múltiples Tr ue ANO TrUe ¡ANO False
'
condiciones
1
'~..-- __ --~~~
T~ue
......,
. ·Fa1se .1
Li~J.:~
Alfaomega 113
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
¿Cómo cambiaríamos la condición, mediante el uso de paréntesis, para que el resultado fue-
ra verdadero? A continuación una solución.
(uS" < us" OR ( 2 >= 2 ANO 1 > e.S And uA" = uB"))
De esta forma forzamos que en primera instancia se resuelva el paréntesis de mayor pro-
fundidad, que contiene la segunda, tercera y cuarta expresión (True And True And Fal-
se, retrona False), el resultado se resuelve con la primera condición, por ser el paréntesis
de mayor profundidad que sigue (True Or False, resuelve True).
Considere como regla que siempre que abra paréntesis los tiene que cerrar.
Una inadecuada colocación de condiciones puede arrojar resultados erróneos; le recomen-
damos que aunque de forma predefinida existe una preferencia, usted determine claramen-
te qué preferencia desea, utilizando paréntesis cuando tenga más de una condición por re-
solver.
~
·
·
Or
................- ....... .. ..
,_ , ,, ,_,_,_,_,
True
-·-·- False
....·-·-·-·...-............-........-...·-·-·-·-................ ··-·- ·-··-·- ·-·- ·-·- ·-··-··-·····-··-·-··-·- ·-·- ·-··-·····-·····-··-·- ·-··-·-..-· .....-..............._,_,_,_,... ..,_.......
~
True _.,., ,_,_,_,_,_,_,_,_,_,,_,,_,_,,_,_
Or
~··-··-··-··-··-··-··-··-·-··-·-··-··-·-·
False True True
r.............·-·-·-·-..................................- .......................... ··-··-·-··-·-··-·- ·-··-·····-··-·-··-··-·-··-·-··-··-·-··-·····-··-·-··-·- ·-............ ..................................,_........-..........................-...·-·-··-·····-··-·-··-··-
Or False False False
Xor
......................................................
True
...............................................................................-......... ..-True False
...............................................................................................- ............... -·-··-·-··-········-·-·-·-·..................................................................-.......
Xor True False
-·-··-·-·-··-·-·-·-·-·-·-·-·-·-· -·-·-·-·-·--·--·-·-··-·-·-·-·-·-·-·-·-·-·-·-·-··-· ·-·- ·-··-·- ·-·- ·-··-·- ·-··-·-··-··-·- ·-·- ·-··-·- ·-·····-··-·- ·-·-·--·-·-· -·-·-·-·-·-·-·-·-·-·-·--·-·-··-·-·-··-·-·-·-·-·-·-·-·-·-··-·-·-··-
True
Xor False True
·-·-··-··-·-··-·-·--·-·--·--·-· ¡¡_.-·---·--·------·-·-·-·-·-·-··-··-·-·-·--· ·-··-·-··-·-·-·-·-·-··-·-·-·-·-·-·-·-·-·-·-·-·-·-·--·-·--·--·-·-· r--·--------·--·---·-·-··-·-·-·-·-·-·-··-·-·-·-·-·- -
True
Xor False False False
'-·---·---·-----·---· L~.rue
AndA! so True True
·---·-----·------ ··-- ··- ---
AndA! so - True False False
AndA! so False Ni siquiera se evalúa False
AndA! so False Ni siquiera se evalúa False
OrE! se True Ni siquiera se evalúa True
OrE! se True Ni siquiera se evalúa True
OrE! se False True True
OrE! se False False False
115
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
No podemos resolver la expresión que implica el operador comparativo (>),sí antes no re-
solvemos las expresiones que involucran el operador de suma (+). El procesador no resuel-
ve operaciones a nivel abstracto.
Cuando hay expresiones que contienen operadores de más de una categoría (aritméticos, de
comparación y lógicos), se resuelven en este orden.
l. Las expresiones que tienen operadores aritméticos.
2. Las expresiones que tienen operadores de comparación.
3. Las expresiones que involucran operadores lógicos.
Esto tiene sentido si tomamos en cuenta que la materia prima para los operadores aritméti-
cos son generalmente expresiones numéricas o expresiones String, y con ellos se genera
una nueva expresión numérica o expresión String.
Los operadores de comparación, por su parte, tienen como materia prima dos expresiones
numéricas o expresiones String, y con ellos se determina un valor lógico.
Por último, los operadores lógicos permiten generar una expresión lógica de dos expresio-
nes lógicas.
Los operadores de comparación tienen la misma prioridad, es decir, se evalúan de izquierda
a derecha, en el orden en que aparecen. Los operadores se evalúan en el siguiente orden de
prioridad.
Comparación Lógicos
Aritméticos
Igualdad ( =) Not
Exponenciación (")
Desigualdad ( <>) And
Negatividad de expresión (-)
Menor que ( <) Or
Multiplicación y división ( *, !)
Mayor que ( >) Xor
División de enteros ( \)
Menor o igual que ( <=)
Módulo aritmético ( Mod)
Adición y substracción ( +, -) Mayor o igual que ( >=)
1 Module Modulel
2 Sub Main()
3 Dim Numerol As Integer = 5
4 Dim Numero2 As Single = 2
Alfaomega 117
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
~
12. 1 1 Presione el botón Uncomment out the selected fines, en la barra de
herramientas, o seleccione Edit - Advanced - Uncomment Selection, o presione la
secuencia de teclas CTRL+K. CTRL+U. Se debieron haber removido los apóstrofes
de las líneas comentadas.
DI WBVBVS2012.05.01- Comments.wmv
13. Una de las funciones más usuales con un editor de textos es copiar y pegar código,
a lo que conocemos como Copy-Paste.
a. Generalmente realizamos operaciones de Clipboard usando CTRL+C o CTRL+X
para copiar o mover el contenido seleccionado al Clipboard del equipo, que es la
memoria temporal de trabajo en el ambiente Windows.
b. Una vez que tenemos algo en Clipboard, podemos pegar su contenido en un lugar
determinado, presionando CTRL+V.
c. Existe la creencia generalizada que sólo se mantiene en Clipboard lo último que
copiamos.
14. El Clipboard en Visual Studio realmente almacena hasta las últimas 20 cosas, que
haya copiado o movido en él, y pueden ser extraídos utilizando CTRL+MAYUS-V.
Al reunirse 20 contenidos en Clipboard y tratar de agregar uno más, el contenido
Alfaomega 119
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
20. Vaya a la línea después de Sub Main( ), y presione CTRL+SHIFT+V, cuatro veces.
a. Vea cómo a medida que va presionando la combinación de teclas, van apareciendo
los diversos valores que fueron almacenados.
21. Presione CTRL+SHIFT+V, tres veces.
22. Presione CTRL+SHIFT+V, dos veces.
23. Presione CTRL+SHIFT+V, una vez.
24. Su código ha quedado como al principio.
25. Imagine las posibilidades de almacenar en Clipboard los nombres de las variables
de uso más común en un proceso, y estarlas invocando de manera rápida en
nuestra edición.
26. Viendo nuestro código nos podemos dar cuenta que Console se repite en
múltiples ocasiones. Se puede simplificar el código agregando un Import al inicio
del programa, eliminando el nombre de la clase Console en todo nuestro código.
El problema es quitar Console de las líneas, dado que tendríamos que quitarlo
líne por línea.
Imports System.Console
32. Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) e inicie la
depuración de su programa (FS).
FIN DEL EJERCICIO *
~ lab.OS.02: Representando con operadores casos de la vida
real.
En este ejercicio deberá representar con operadores Jos siguientes casos. Analícelos, y
utilice los operadores que crea convenientes.
1. El Teorema de Pitágoras establece que en todo triángulo rectángulo, el
cuadrado de la hipotenusa (el lado de mayor longitud del triángulo
rectángulo) es igual a la suma de Jos cuadrados de los catetos (los dos lados
menores del triángulo, es decir, los que conforman el ángulo recto).
Alfaomega 121
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
3. En ese sentido:
Ap= (
)
FIN DEL EJERCICIO*
Alfaomega 123
SYNAPS PREMIUM
Unidad de aprendizaje 6
Competencias:
l. Conocer el manejo de los
procesos condicionales con
ejecución en el sentido
afirmativo y en el sentido
negativo.
2. Utilizar Select Case para
ejecutar procesos mutuamente
excluyentes, dependiendo de
un valor.
3. Conocer el manejo de las
estructuras de control para
manejar procesos iterativos.
Evaluación:
l . Proporcionar un caso
en donde se deban Evidencia de
aplicar estructuras de aprendizaje:
decisión y de control Capacidad de identificar la
1.
para obtener un necesidad de aplicar
resultado. estructuras de decisión y
control, a partir de un caso.
2. Capacidad de implementar
estructuras de decisión y
control en programas.
3. Capacidad de analizar código
que incluye est ructuras de
decisión y control, y
determinar problemas típicos.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Sólo en caso de que ExpresiónLógica derive en un valor de True, Instrucción será ejecutada; esta
sintaxis de If controla sólo la ejecución en el sentido afirmativo de la condición.
Esta forma de If es muy útil para asignar valores a las variables, en caso de que una condición
se cumpla.
Un bloque de código es un conjunto de líneas de código que tienen su propio alcance de ejecución,
y que están siempre delimitadas. Si la ejecución de un bloque de código depende del cumplimien-
to de una condición, es necesario que se delimite la estructura de decisión; el bloque de código
será entonces todo lo que se encuentre entre el estatuto If y el estatuto End If.
If ExpresiónLógica Then
1nstrucciones
End If
Alfaomega 127
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
If es un estatuto de bloque, por lo que si inicia un bloque tendrá que concluirlo. Un error muy
común es que se abren estructuras de decisión, pero no se cierran; es de mucha utilidad darle
organización al código, proporcionando diferente alineación tabulada a las líneas inicio y fin de la
estructura de decisión, y al bloque de código controlado por dicha estructura. Vea nuestros ejem-
plos: If y End If nunca se encuentran con el mismo margen izquierdo que el bloque de código
que controlan; no trate de ser original al respecto, pues con ello sólo logrará que la gente se dé
cuenta que es un programador novato y poco organizado.
Es posible que If controle al mismo tiempo la ejecución en el sentido afirmativo y en el sentido
negativo, a través de la especificación El se. Vea la sintaxis.
If ExpresiónLógica Then
lnstruccionesAfirmatívo
El se
lnstruccionesNegativo
End If
Ejemplo.
Select Case es una estructura de decisión que permite ejecutar procesos mutuamente exclu-
yentes, en función a comparaciones realizadas sobre un mismo valor de referencia.
Su sintaxis se encuentra a continuación:
Select Case ExpresiónAEvaluar
Case {Condición 1 Else}
Instrucciones
End Select
Donde ExpresiónAEvaluar es una expresión de cualquier tipo, que será tomada como referencia.
Condición sirve para especificar una condición relacionada con ExpresiónAEvaluar, que en caso de
presentarse, motiva la ejecución de Instrucciones.
Se va construyendo un árbol de decisión basado en una ExpresiónAEvaluar. Se pueden agregar
tantas sentencias Case como se deseen, e incluso las estructuras Select Case se pueden anidar.
Si al momento de evaluar Condición, un determinado valor de ExpresiónAEvaluar cumple en dos
casos, se ejecutará para la primera que se encuentre. Case Else aplica cuando el valor de Ex-
presiónAEvaluar no cumpla para ninguno de los casos anteriores, dentro de la estructura.
Para ver cómo funciona este estatuto, imagínese la siguiente situación hipotética: Una compañía
tiene 35 categorías de empleados; cada categoría tiene un ingreso determinado, en donde las ca-
Alfaomega 129
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
tegorías de número más alto son las de mayor ingreso por salario, existiendo una relación direc-
tamente proporcional entre categoría y sueldo.
Se acaba de autorizar un aumento de sueldo general en la compañía, bajo las siguientes políticas:
el personal de alto nivel (categoría superior a 19) no tendrá aumento; las categorías 18, 17 y 14
recibirán el15% de aumento; de la categoría 8 a la 13, recibirán ellO% de aumento, a excepción
de la categoría 10, que es la categoría más rezagada con respecto al salario, pues recibirá el 25%.
Al resto del personal, se le dará un 5% de aumento.
¿Cómo se codificaría una estructura Select Case que atendiera esta necesidad? Veamos.
Select Case Categoria
Case Is > 19
Aumento = e
Case 18, 17, 14
Aumento - e.15
Case 1e
Aumento - e.25
Case 8 To 13
Aumento = e . 1
Case Else
Aumento = e . S
End Select
Vea cómo se especificaron las condiciones y aplique la sintaxis en aquellos casos que lo requiera.
Es importante que se dé cuenta que todas las condiciones giran con relación a la ExpresiónAEva-
luar (en nuestro ejemplo, Categoria ), ya que si no hace uso de dicha expresión, no son conside-
radas. Usted puede agregar como instrucción la línea con una condición Case que se resuelva
True, pero que no involucre a Categoria; en ese caso, el código dependiente de dicho Case nun-
. ,
ca se e¡ecutara.
Se analizarán los elementos del lenguaje que nos permiten codificar cada una de estas variantes.
Donde Variable es una variable de memoria de tipo entero, que permitirá controlar las repeticio-
nes del proceso. Valorlnicial es el valor inicial a partir del cual el incremento o decremento se
llevará a cabo. ValorMáximo es el valor al cual el contador podrá llegar. Incremento es la constan-
te entera que marcará la cantidad de incremento o decremento que sufrirá Variable en cada repe-
tición del proceso.
Ejemplos.
1
Cuenta del 1 al lB
For i = 1 To 1e
Console . Writeline(i)
Next i
1
Serie del S
For i = e To se Step S
Console.Writeline(i)
Next i
1
Decremento del 10 al 1
For i = 10 To 1 Step -1
Console.Writeline(i)
Next i
Alfaomega 131
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
6.2.2 While
While ejecuta un bloque de código un tiempo infinito de veces, mientras una condición al inicio
del bloque se cumpla por verdadero (True).
La sintaxis es la siguiente.
While Expresiónlógica
Instrucciones
End While
Ejemplo.
Donde ExpresiónLógica es un valor de tipo Boolean (Truej False), casi siempre una compara-
ción, que de ser verdadera al inicio del ciclo de ejecución, provoca la ejecución de Instrucciones.
Como recordará, los tipos de datos Byte sólo pueden almacenar valores desde Oa 255; en nues-
tro ejemplo, While ejecutará un incremento de 1 para la variable Prueba, mientras sea menor a
255. Si dejáramos que el ciclo fuera más allá de 255, el programa generaría error, pues es impo-
sible que una variable de tipo Byte asuma un valor fuera de su rango.
Al igual que For Next, While tiene una sentencia para interrumpir en cualquier momento el pro-
ceso: Exi t While.
Una de las formas más útiles de While es el ciclo infinito, en donde ninguna operación o variable
dentro del proceso influye en la condición que gobierna la estructura. Simple y llanamente, se
proporciona el valor de True como ExpresiónLógica, y no hay forma que deje de ejecutarse el ci-
clo.
While True
Instrucciones
End While
Ejemplo.
While True
Console.WriteLine("Qué número estoy pensando")
If Console.ReadLine() = 8 Then
Console.WriteLine(''Efectivamente: 8'' )
Exit While
End If
End While
En este caso, es indispensable que provea a su programa de algún momento en el proceso para
ejecutar Exi t While, ya que de otra manera, nunca concluirá la ejecución del programa, a lo que
se le conoce como ciclo infinito. En caso de que, por error, el programa produzca un ciclo infinito,
éste se puede romper presionando CTRL+ENTER, o ESC.
En el ejemplo que pusimos, mientras no teclee un 8, el programa seguirá pidiendo números.
6.2.3 Do loop
Do Loop ejecuta un bloque de código un tiempo infinito de veces, hasta que una condición se
cumpla por verdadero (True). Esta instrucción brinda más flexibilidad que While, en el sentido
que se puede controlar la evaluación de las condiciones al inicio o al final de la estructura. Usan-
do Do Loop se pueden hacer estructuras que se ejecutan al menos una vez, de una forma más
sencilla que utilizando While.
La sintaxis es la siguiente.
e Evaluación al inicio
Do {While/Until} ExpresiónLógica
Instrucciones
Loop
e Evaluación al final
Do
Instrucciones
Loop {While/Until} ExpresiónLógica
Alfaomega 133
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Donde ExpresiónLógica es un valor de tipo Boolean (Truej False), casi siempre una compara-
ción. Instrucciones son las instrucciones que se están gobernando en el bucle.
Si se utiliza Do con While (mientras), el ciclo se repite hasta que ExpresiónLógica sea falsa.
Si se utiliza Do con Until (hasta), el ciclo se repite hasta que la condición sea verdadera. Sólo se
puede implementar While o Until, pero no ambas. También tiene que decidir si la evaluación de
las condiciones es al inicio o al final de la estructura, pero no ambas.
Ejemplos.
i = e
Do While i <= LimiteMaximo
WriteLine(i)
i += 1
Loop
i = e
Do Until i > LimiteMaximo
WriteLine(i)
i += 1
Loop
i = e
Do
WriteLine(i)
i += 1
Loop While i <= LimiteMaximo
i = e
Do
WriteLine(i)
i += 1
Loop Until i > LimiteMaximo
Do tiene una sentencia para interrumpir en cualquier momento el proceso: Exi t Do.
Alfaomega 135
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
1 Option Explicit On
2 Option Strict On
3
4 Imports System. Console
S
6 Module Module!
7 Sub Main()
8 Dim Precio As Double
9 Dim FactorDesc As Decimal
te Wri te( "Precio del producto:" )
11 Precio = CDbl (ReadLine())
12 If Precio = e Then
13 Writeline( ''Nada que calcular'' )
14 Else
15 Writeline( "Membresía:" )
16 Writeline( "l.- Diamante" )
17 Writeline( ''2.- Premium'' )
18 Writeline( ''3.- Clásica'' )
136 Alfaomega
SYNAPS PREMIUM
Unidad 6: Estructuras de Decisión y Control
Alfaomega 137
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
En este ejercicio se utilizará una aplicación de consola para comprobar el funcionamiento de For
Next.
Alfaomega 139
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
1 Option Explicit On
2 Option Strict On
3
4 Imports System. Console
S
6 Module Module1
7
8 Sub Main()
9 Dim LimiteMaximo As Integer =4
1e Dim LimiteMinimo As Integer = e
11 Dim i As Integer
12
13 WriteLine( ''Mostrando con For Next incremental'' )
14 For i = LimiteMinimo To LimiteMaximo
15 WriteLine(i)
16 Next i
17
18 WriteLine( ''Muestra usando For Next invertido'' )
19 For i = LimiteMaximo To LimiteMinimo Step -1
2e WriteLine(i)
21 Next i
22
23 WriteLine( ''Mostrando con While'' )
24 i =e
25 While i <= LimiteMaximo
26 Writeline(i)
27 i += 1
28 End While
29
3e WriteLine( ''Muestra usando Do Loop inicial While'' )
31 i =e
32 Do While i <= LimiteMaximo
33 Writeline(i)
34 i += 1
35 Loop
36
37 WriteLine( ''Muestra usando Do Loop inicial Until'' )
38 1 =e
39 Do Until i > LimiteMaximo
4e Writeline(i)
41 i += 1
42 Loop
43
Alfaomega 141
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
e
1
2
3
4
Muestra usando Do Loop inicial While
e
1
2
3
4
Muestra usando Do Loop inicial Until
e
1
2
3
4
Muestra usando Do Loop final While
e
1
2
3
4
Muestra usando Do Loop final Until
e
1
2
3
4
Presione INTRO para continuar
8. Modifique las asignaciones de las líneas 24, 31, 38, 45 y 52. En lugar de asignar e, asigne
1e. Se proporciona ese valor porque no es válido para las condicionales While y Until
del programa. Compruebe cómo las estructuras con evaluación al final se ejecutan al
menos una vez.
Si todo transcurrió bien, la pantalla mostrará lo siguiente:
Mostrando con For Next incremental
e
1
2
3
4
Muestra usando For Next invertido
4
3
2
1
e
Mostrando con While
Muestra usando Do Loop inicial While
Muestra usando Do Loop inicial Until
Muestra usando Do Loop final While
1e
Muestra usando Do Loop final Until
1e
Presione INTRO para continuar
9. Hay una herramienta en Visual Studio que permite crear y administrar tareas, con el fin
de no olvidar pendientes que puedan tenerse respecto al desarrollo en el que
participamos. Esta herramienta tiene el nombre de Task List.
10. En Task List se pueden manejar dos categorías de registros: Tareas de usuario y
comentarios de tarea.
a. Las tareas de usuario son tareas que el usuario registra, estableciéndoles prioridad
(alta, media, baja) y un indicador de estado, que indica si la tarea ya ha sido concluida
(completed).
b. Los comentarios de tarea son comentarios en el código que tienen significado para
Visual Studio, y que provocan un registro en Task List. Estos comentarios de tarea son:
TODO, para señalar cosas por hacer; HACK, para anotar recordatorios de cosas
relacionadas con el desarrollo; y UNDONE, para deshacer cosas que temporalmente se
colocaron, pero que hay que eliminar antes de liberar el programa en producción.
11. Para ver Task Listes necesario ir a la opción View- Other Windows- Task List (CTRL+
o, T). Con ello aparecerá la ventana Task List.
Alfaomega 143
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
15. En la línea anterior en donde se inicia la comprobación de While (línea 22) agregue el
siguiente comentario.
' TODO Cambiar los l e por ceros, para que funcione normalmente.
16. Existen comentarios que Visual Studio reconoce y gestiona. Dichos comentarios son
llamados comentarios administrados, y son aquellos que inician con cualquiera de Jos
siguientes prefijos: TODO 1 HACK 1 UNDONE . Cuando uno los coloca, se agrega un registro a
Task List, en donde se especifica el archivo y la línea en la que se realizó la anotación.
a. En Catgories de Task List, seleccione Comments.
b. Aparecerá el comentario que agregamos, el programa, y el número de lfnea.
17. Mueva el cursor de lugar. Vaya al principio del programa (línea 1).
18. En Task List haga doble die sobre el comentario que acaba de agregar, y vea cómo el
control del programa se traslada a donde se encuentra el comentario. Esto puede
agregarle mucha navegabilidad a sus trabajos.
19. Guarde todos los cambios en su solución.
2)
3)
For i =1 to 1e
X *= i
If x > 3e Then
Console.WriteLine(''Limite de treinta o
más")
Exit For
Next i
End If
Alfaomega 145
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Tips:
• La tasa que se captura es anualizada, por lo que se debe determinar la tasa diaria,
que es ( (Tasa/365 )/lee). Si se captura le, por ejemplo, la tasa diaria será
e.ee2739
• El incremento diario será el acumulado por la tasa diaria.
• El nuevo acumulado será el acumulado más el incremento.
• Al usar String . Format, esta variante puede ser útil: colocar {e, le: C}, quiere
decir que el primer argumento (e), será expresado en ancho constante de diez
(le) posiciones, con un formato Currency (C).
Alfaomega 147
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Competencias:
1. Conocer el manejo de
excepciones, utilizando el bloque
Try Catch Fina lly .
2. Conocer como f iltra r de manera
específi ca las excepciones, a fi n
de controlar las respuestas de las
aplicaciones f rent e a
im previstos.
3. Conocer a disparar excepciones
generadas por el usuario.
Evaluacl6n:
1. Proporcionar a los
programas ya
desarrollados hasta el Evidencia de
momento, de un aprendizaje:
esquema de manejo 1. Capacidad de proteger código,
estructurado de utilizando Try Catch Finally.
excepciones. 2. Capacidad de implementar
2. Verificar que al esquemas de manejo
estableces manejo preventivo de excepciones
estructurado de usando Error List.
•
excepciones, se 3. Capacidad de filtrar
practica el filtrado de excepciones.
excepciones, y el 4. Capacidad de lanzar
lanzado de excepciones definidas por el
excepciones definidas usuario.
por el usuario.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfaomega 151
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Estos bloques son una serie de estatutos que comienzan con la palabra reservada Catch,
seguida de un tipo determinado y reconocido de excepción, así como la acción que deberá
realizarse en caso de que la excepción sea detectada.
Estas son las particularidades del bloque Catch:
l. Se puede utilizar uno o varios bloques Catch para manejar las excepciones.
2. Se recomienda manejar de manera separada las excepciones que provoquen acciones
distintas, a fin de mantener la secuencia lógica del programa.
3. Es posible capturar excepciones predefinidas en .NET Framework, o bien crear nues-
tras propias excepciones.
4. Se puede utilizar el estatuto When para comparar una excepción que ocurre, con aque-
llas reconocidas por .NET Framework, utilizando para ello el número único de excep-
ción.
Alfaomega 153
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
En caso de que ocurra una excepción en el bloque de código protegido, el control del pro-
grama se trasladará a la línea Catch, capturará la excepción y la almacenará en una instan-
cia de la clase System . Exception que se declara en la misma línea Cate h.
En nuestro ejemplo, VariableExcepción sería la variable objeto en donde estaría almacenada
la información del problema ocurrido.
En su calidad de objeto, VariableExcepción tendría las propiedades y los métodos de la clase
que le dio origen, es decir, System . Exception .
Algunas de las propiedades más relevantes de System. Exception son las siguientes.
Propiedad Descripción
Message Contiene la información de aquello que causó la excepción. 1
StackTrace Antecedente de ejecución; muestra primeramente la línea que
causó el error (en su formato interno de ejecución), sigue con el
procedimiento, capítulo, etcétera. Esto permite ubicar, en el con-
texto modular del programa, a la excepción.
1
HResult
Muestra el nombre calificado de la excepción, el mensaje,
anidamiento de exceQ_ciones,~ y el antecedente de ejecución.
Código numérico específico a la excepción_gue ha ocurrido.
4 1
Los calificadores de excepción son los nombres reconocidos internamente por .NET, para
cada una de las excepciones que pueden ocurrir. Generalmente el calificador de excepción
nos proporciona una muy clara idea de lo que está sucediendo. Si vemos un calificador que
dice:
System .D ivideByZeroException.
¿A alguien le queda duda que se trata de una excepción determinada por la clase System,
que tiene que ver con una división entre cero?
Las excepciones que existen pueden ser muchas; hay dos formas de conocerlas: que suce-
dan (lo que no es muy recomendable), o bien, revisando la ayuda de Visual Basic, en donde
cada clase refiere las excepciones que pueden ocurrir en el uso de los objetos basados en
ellas. Por ejemplo, la clase System tiene las siguientes excepciones importantes, entre
otras:
l. DivideByZeroException
2. DLLNotFoundException
3. IndexOutOfRangeExcept ion
4. InvalidCastException
5. OutOfMemoryException
6. OverFlowException
7. PlataformNotSupported Exception
8. UnauthorizedException
Cada clase tendrá las suyas, y habrá que investigarlas de manera particular.
Alfaomega 155
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
El objeto Err sí puede utilizarse en el manejo estructurado de excepciones. Esto es muy útil
cuando se desea trabajar con números de error, en lugar de calificadores de excepción, uti-
lizando la propiedad Number.
1 Option Explicit On
2 Option Strict on
3
4 Imports System. Console
5
6 Module Modulel
7
8 Sub Main()
9
19 Try
11 Writeline( ''Prueba de manejo de Excepciones'' )
12 Dim N1, N2, Resultado As Decimal
13 Write( ''Dame el dividendo:'' )
14 N1 = coec (Readline())
15 Write( ''Dame el divisor:'' )
16 N2 = CDec (Readline())
17 Resultado = N1 1 N2
18 Writeline( "Resultado:" & Resultado. ToString)
19 Catch eProblema As Exception
29 Writeline( ''> Origen:'' )
21 Writeline(eProblema.Source )
22 Writeline( ''> Mensaje:'' )
23 Writeline(eProblema.Message)
24 Writeline( ''> Antecedente de ejecución:'' )
25 Writeline(eProblema.StackT race)
26 Writeline( ''> Text o completo:'' )
27 Writeline(eProblema.ToStri ng)
28 Finally
29 Write( ''Pulse INTRO para continuar'' )
39 Readline()
31 End Try
32
33 End Sub
34
35 End Module
Alfaomega 157
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfaomega 159
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
!nO< l"' • q X 1
15. En Error List se muestran Jos errores que contiene el programa, el archivo físico
en donde se encuentra el problema, la línea de código en la que se encuentra, la
línea, la columna y el proyecto al que pertenece. En la parte superior aparecen
pestañas en las que se puede seleccionar lo que queremos ver, sean errores
(errors), alertas (warnings) o mensajes (messages). En nuestro caso sólo tenemos
2 errores, mismos que son reportados en Error List.
16. Error List mostrará Jos errores de toda la solución, por lo que es especialmente
útil cuando modificamos librerías, en donde nos podemos dar cuenta de los
efectos que tendrán nuestras modificaciones en otros programas que las
consumen.
17. Si se hace doble clic en un error, Visual Studio trasladará el control a la posición
en donde se encontró el error, lo que facilita enormemente la navegación en el
código.
18. Haga doble die en el error 2. Compruebe que se ha trasladado a la línea y la
posición en donde se encontró el error.
19. Otra funcionalidad importante es que, si selecciona un error de la lista, puede
invocar el menú de contexto y seleccionar Show Error Help, con lo cual será
direccionado hacia la ayuda en Internet que le ayude a entender y corregir el
problema.
20. Modifique la línea 12 de su código, y corrija el nombre de la variable que está
ocasionando el problema. Cambie N3 por N2.
21. Visual Basic proporciona más herramientas para evitar los problemas de
codificación. Una de ellas es la actualización preventiva en cascada.
a. Vuelva a la línea 12.
b. Colóquese en la variable N2, y selecciónela.
c. Intente cambiar el nombre N2 por N3, y vea cómo Visual Studio detecta los
problemas, y pone una marca roja en la parte baja.
d. Al hacer clic en esa marca, sugiere el cambio de N2 por N3, pero en todo el
programa.
e. Haga clic en la marca y sugiera Rename N2 to N3.
f. Vea cómo todas las veces que se utiliza N2, es remplazado por N3.
22. Este recurso puede utilizarlo cuando, por alguna causa, desea modificar el nombre
de una variable ya definida y utilizada, de manera rápida y sencilla.
Alfaomega 161
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
162 Alfaomega
SYNAPS PREMIUM
Unidad 7: Manejo Estructurado de Exepciones
Alfaomega 163
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfaomega 165
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
1 Option Explicit On
2 Option Strict On
3
4 Imports System. Console
S
6
7 Module Modulel
8
9 Sub Main()
1e Try
11 Writeline( ''Prueba de manejo de Excepciones'' )
12 Dim Nl, N2, Resultado As Decimal
13 Write( ''Dame el dividendo:'' )
14 Nl = CDec (Readline())
15 Write( ''Dame el divisor:'' )
16 N2 = CDec (Readline())
17 If N2 = e Then
18 Throw New Exception ( "Divisor no puede ser cero" )
19 End If
2e Resultado = Nl 1 N2
21 Writeline( ''Resultado:'' & Resultado.To5tring)
22 Catch eProblema As Excepti on
23 Writeline( ''> Problema: '' & eProblema.Message)
24 Finally
25 Write( ''Pulse INTRO para continuar'' )
26 Readline()
27 End Try
28
29 End Sub
3e
31 End Module
Alfaomega 167
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Sin embargo siempre puede haber descuidos, o en ocasiones el uso malintencionado de las
aplicaciones son las que causantes de funcionamientos anormales.
Esto pasa en la realidad: es típico que un usuario escucha que cierta aplicación causa
problemas, y no se toma la molestia de utilizarla, pero sí de propagar la noticia de que la
aplicación falla. Esa mala publicidad nunca ayuda a la estabilidad de las aplicaciones y su
uso en las organizaciones.
Una forma de garantizar que cualquier usuario que asegure que la aplicación falla
realmente haya experimentado una falla, es creando un código de error que deba
proporcionar en caso de levantar un reporte.
l. En la Unidad 3 desarrolló un programa denominado AreaRectangulo.
2. Modifíquelo, de tal manera que quede con manejo estructurado de excepciones.
3. Las acciones a realizar en caso de excepción, es agregar lo siguiente:
Dim Cuando As String
Cuando= String .Format( "{e}.{1}{2}" , Day(Now), Hour(Now), Month(Now))
Console .Writeline( ''El sistema ha experimentado un error." )
Console .Writeline( "Favor de comunicarse con soporte técnico en la" )
Console .Writeline( ''extensión 2e1, mencionando el siguiente código'' )
Console .Writeline( ''que ayudará a la solución del problema:'' )
Consol .WriteLine(String. Format( ''{e}-{1}'' , ex.HResult, Cuando))
4. Haga pruebas.
S. Ahora cambie de estrategia, y trate de filtrar las excepciones si se tratan de tipos de
dato erróneo.
6. Haga las modificaciones para que, si se proporciona cero (e) en algunos de Jos
valores solicitados, se lance una excepción definida por el usuario, ya que no
provocará excepción de tipo inválido, pero el valor Ono es correcto.
7. FIN DEL EJERCICIOI*
Procedimientos y Funciones
Competencias:
1. Conocer qué son los
procedimientos Y las
f unciones, y la forma en que se
def inen y ejecutan.
2. Conocer los métodos de
desarrollo de procedimientos Y
f unciones, con manejo de
argumentos o sin ellos, Y con
manejo de valores de retorno
o si n ellos.
Evaluacl6n: Evidencia de
1. Proporcionar un caso
práctico en donde se
aprendizaje:
1. Capacidad de aislar procesos
tenga que determinar
específicos en abstracto,
el aislamiento de
pensando en la reutilización Y
tareas, que
la atomicidad de procesos.
posteriormente sean
2. Capacidad de desarrollar
automatizadas a
procedimientos y funciones
través de
en sus diferentes escenarios
procedimientos v
de manejo de argumentos Y
funciones.
valores de retorno.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
8 Procedimientos y Funciones
8.1 Procedimientos........................................................................................................................................... 171
8.1.1 ¿Cuándo definir procedimientos y funciones? ....................................................................... 171
8.1.2 Forma de agregar procedimientos a un programa ............................................................... 172
8.1.3 Forma de mandar llamar a ejecución un procedimiento ................................................... 173
8.1.4 Argumentos .......................................................................................................................................... 173
8.1.4.1 Especificación ByVa/ .................................................................................................................. 173
8.1.4.2 Especificación ByRef .............................................................................................................. ....l7 4
8.1.5 Valores de retorno ............................................................................................................................. 174
8.2 Codificación de procedimientos y funciones ..................................................................................174
8.2.1 Procedimientos ................................................................................................................................... 174
8.2.2 Funciones .............................................................................................................................................. 175
~ Lab.08.01: Procedimiento que no utiliza argumentos .................................................................. 177
~ Lab.08.02: Procedimiento que declara argumentos pero no retorna valores ..................... 179
~ Lab.08.03: Procedimiento que declara argumentos y retorna valores................................... 182
~ Lab.08.04: Uso de ByVal y ByRef ...........................................................................................................185
~ Lab.08.05: Procedimientos multihilos y procesamiento asíncrono......................................... 187
~ Lab.08.06: Decidiendo el uso de procedimientos y funciones ................................................... 191
8.1 Procedimientos
La reutilización de código es la práctica de programación que consiste en escribir una sola
vez un bloque de código, con la flexibilidad e independencia suficiente como para que pueda
ser utilizado en múltiples programas y procesos, sin ser modificado.
Las principales formas para hacerlo es a través de los procedimientos y funciones.
Los procedimientos son bloques de código nominados que pueden ser mandados llamar a
ejecución. Las funciones son un tipo de procedimiento que típicamente retorna valores.
Cuando se tiene una tarea grande de programación se puede decidir utilizar procedimien-
tos para dividirla en otras tareas más pequeñas; la realización de todas las pequeñas tareas
particulares implican la ejecución de la tarea general que conforman.
Los procedimientos tienen como objetivo principal crear bloques de código que realizan
una labor independiente, a fin de que puedan ser reutilizados. Por sí mismos, los procedi-
mientos no constituyen un programa formal, sino que operan a manera de soporte con res-
pecto a un programa que los manda ejecutar (programa, interfaz, clase, etcétera).
Alfaomega 171
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Sub NombreProcedimiento( )
Instrucciones
End Sub
NombreProcedimiento()
8.1.4 Argumentos
Los argumentos, también llamados parámetros, son aquellas expresiones o referencias a
objetos que se le proporcionan a un procedimiento para que realice su tarea con base en
ellos. Los argumentos siempre se declaran dentro de los paréntesis en la línea de encabeza-
do del procedimiento.
Se conocen como argumentos implícitos aquellos que son obligatorios para un determinada
estructura del lenguaje -por ejemplo los eventos de algunas clases-; la particularidad que
tienen es que además de ser requeridos para una funcionalidad dada, los valores de dichos
parámetros son asignados por CLR en tiempo de ejecución, por lo que el programador no
tiene mucho control sobre ellos.
Cuando se especifica un argumento, es importante saber que tienen dos modalidades: By Val
yByRef
Para entender bien este concepto, es necesario que recordemos el concepto de variables.
Como sabemos, las variables son una referencia lógica a una posición física de memoria.
Esto es, cada variable nos permite disponer y modificar el contenido de la memoria que re-
fiere.
En el caso de los argumentos declarados como ByVal, si al argumento se le proporciona
como valor una variable, el argumento define su propia variable de trabajo y refiere su pro-
pia posición en memoria, y copia ahí el valor de la variable original. A partir de ese momen-
to, variable y argumento son independientes, de tal manera que si se modifica el valor del
argumento, el valor de la variable permanece sin cambios.
Utilice ByVal cuando el objetivo de la función no sea modificar o transformar el valor con-
tenido en una variable u objeto.
Alfaomega 173
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Contrario a lo que pasa con ByVal, los argumentos definidos como ByRef no reservan su
espacio de memoria, sino que utilizan el mismo de la variable de origen. De esta manera,
tenemos que la variable y el argumento apuntan a la misma posición de memoria. Esto tiene
como consecuencia que, si modificamos el valor del argumento, el cambio también afectará
a la variable.
Utilice ByRef cuando el objetivo de la función sea modificar o transformar el valor conteni-
do en una variable u objeto.
8.2.1 Procedimientos
Si el procedimiento no declara argumentos ni retorna valores, la cosa es muy sencilla:
Sub NombreProcedimiento()
Instrucciones
End Sub
Ejemplo:
Sub Despliega()
Console.Writeline("Pru eba de procedimientos»)
End Sub
174 Alfaomega
SYNAPS PREMIUM
Unidad 8: Procedimientos y Funciones
Ejemplo de ejecución:
Despliega()
Si el procedimiento utiliza argumentos, estos deberán declararse entre los paréntesis que
aparecen después del nombre del procedimiento; pueden declararse tantos argumentos
como se deseen, separándose por comas. Cada uno de ellos deberá especificar si se trata de
una expresión (ByVal) o una referencia (ByRef) a un objeto, seguido por el nombre del
argumento, y la correspondiente declaración de tipo:
Ejemplo:
Sub Despliega(ByVal Mensaje As String)
Console . Writeli ne(Mensaje)
End Sub
Ejemplo de ejecución:
Despliega(''Programa de prueba de procedimientos")
8.2.2 Funciones
Si el procedimiento retorna valores, se trata de una función; a diferencia de los procedi-
mientos, en lugar de Sub, debe utilizarse la palabra reservada Function. Para retornar el
valor de una función, se utiliza la orden Return, seguida del valor que se desea retornar.
Function NombreFuncion() As Tipo
Instrucciones que producen el valor a retornar
Return ValorTipo
End Function
Alfaomega 175
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Ejemplo:
Function DiaDeHoy() As String
Return "Hoy es " & Now.ToString()
End Function
Ejemplo de ejecución:
Console.Writeline(DiaDeHoy())
Ejemplo:
Function Dia(ByVal FechaDada As Date) As String
Return "La fecha proporcionada es " &
FechaDada.ToString()
End Function
Ejemplo de ejecución:
Console.Writeline(Dia(Now))
Alfaomega 177
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
21 End Sub
22
23 End Module
Alfaomega 179
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
1 Module Module1
2 Dim dtmFechaPago As Date
3
4 Sub Main()
S Console .Writeline( ''Hoy:'' & Now.ToShortDateString)
6 FechaPago(Now)
7 Console .Writeline( ''Fecha de pago:'' & dtmFechaPago.ToShortDateString)
8 Esperaintro()
9 End Sub
10
11 Sub FechaPago( ByVal FechaBase As Date)
12 dtmFechaPago = DateAdd( Dateinterval .Day, 90, FechaBase)
13 If DatePart( Dateinterval .Weekday, dtmFechaPago) = 1 Then
14 dtmFechaPago = DateAdd(Dateinterval .Day, 1, FechaBase)
15 End If
16 End Sub
17
18 Sub Esperaintro()
19 Con sole . Wri teline( "Pulse INTRO para continuar" )
20 Console .Readline()
21 End Sub
22
23 End Module
Alfaomega 181
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Utilizaremos el mismo caso hipotético del ejercicio anterior, con una pequeña
variante: se prohíbe utilizar la variable dtmFechaPago, que veníamos utilizando
como apoyo para la salida del procedimiento.
S. Edite el programa Modulel . vb del proyecto, de tal manera que quede como
•
s1gue.
1 Module Module1
2
3 Sub Main()
4 Console .Writeline( ''Hoy:'' & Now.ToShortDateString)
5 Console .Writeline( ''Fecha de pago:'' & FechaPago(Now))
6 Esperaintro()
7 End Sub
8
9 Function FechaPago( ByVal FechaBase As Date ) As String
10 FechaBase = DateAdd( Dateinterval .Day, 90, FechaBase)
11 If DatePart( Dateinterval .Weekday, FechaBase) = 1 Then
12 FechaBase = DateAdd( Dateinterval .Day, 1, FechaBase)
13 End If
14 Return FechaBase.ToShortDateString
15 End Function
16
17 Sub Esperaintro()
18 Con sole . Wri teline ( "Pulse INTRO para continuar" )
19 Console .Readline()
20 End Sub
21
22 End Module
Alfaomega 183
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfaomega 185
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
1 Imports System.Diagnostics
2 Imports System.Threading
3 Imports System.Threading. Tasks
4
S Module Module!
6 Sub Main()
7 Dim TiempoTranscurrido As Stopwatch = Stopwatch .StartNew()
8
9 Dim PrimerTarea = Tareal()
10 Dim SegundaTarea = Tarea2()
11 Dim TercerTarea = Tarea3()
Alfaomega 187
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
12
13 Console .WriteLine( ''Operación concluida en {a} segundos'' , -
14 TiempoTranscurrido.ElapsedMilliseconds 1 1aaa.a)
15 Console .Writeline( ''Presione <ENTER> para terminar'' )
16 Console .Readline()
17 End Sub
18
19 Prívate Function Tarea1() As Integer
28 Console .WriteLine( ''Ejecutando Tarea1 . . . ")
21 Thread .Sleep( 3aaa)
22 Console .WriteLine( ''Tarea1 Concluida." )
23 Return 1
24 End Function
25
26 Private Function Tarea2() As Integer
27 Console .WriteLine( "Ejecutando Tarea2 .. . " )
28 Thread .Sleep(8aaa)
29 Console .WriteLine( ''Tarea2 Concluida." )
38 Return 1
31 End Function
32
33 Private Function Tarea3() As Integer
34 Console .Writeline( ''Ejecutando Tarea3 ... " )
35 Thread .Sleep(3aaa)
36 Console .Writeline( "Tarea3 Concluida." )
37 Return 1
38 End Function
39 End Module
6. Ejecute el código recién capturado y tome nota del tiempo total utilizado.
Note que los procedimientos de cada tarea simulada se invocan de manera
secuencial.
1 Imports System.Diagnostics
2 Imports System.Threading
3 Imports System.Threading.Tasks
4
S Module Module1
6 Sub Main()
7 Dim TiempoTranscurrido As Stopwatch - Stopwatch .StartNew()
8
9 Dim PrimerTarea = -
10 Task (Of Integer ).Factory.StartNew( Function () Tarea1())
11 Dim SegundaTarea = _
12 Task (Of Integer ).Factory.StartNew( Function () Tarea2())
13 Dim TercerTarea =
14 Task (Of Integer ).Factory.StartNew( Function () Tarea3())
15
16 Task .WaitAll(PrimerTarea, SegundaTarea, TercerTarea)
17
18 Console .Writeline( ''Operación concluida en {0} segundos'' , -
19 TiempoTranscurrido.ElapsedMilliseconds 1 1eee.e)
20 Console .Writeline( ''Presione <ENTER> para terminar'' )
21 Console .Readline()
22 End Sub
23
24 Prívate Function Tarea1() As Integer
25 Console .Writeline( ''Ejecutando Tarea1 ... ")
26 Thread .Sleep(3eee)
27 Console .Writeline( ''Tarea1 Concluida." )
28 Return 1
29 End Function
30
31 Prívate Function Tarea2() As Integer
32 Console .Writeline( ''Ejecutando Tarea2 ... " )
33 Thread .Sleep(6eee)
34 Console .Writeline( ''Tarea2 Concluida." )
35 Return 1
36 End Function
37
38 Prívate Function Tarea3() As Integer
39 Console .Writeline( ''Ejecutando Tarea3 ... " )
40 Thread .Sleep(1eee)
41 Console .Writeline( "Tarea3 Concluida." )
42 Return 1
43 End Function
44 End Module
Alfaomega 189
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
8. Ejecute este nuevo código y tome nota del nuevo valor para el tiempo total
utilizado, a continuación explicaremos el código contenido en el ejemplo
actual.
Si la clave es
ajE91B8
El programa debe mostrar la siguiente información:
Clave: ajE91B8
Detalle : a-j-E-cero-uno-B-ocho
Alfaomega 191
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
representación letra por letra, separados por guiones, donde los dígitos sean
llamados por su nombre (l=uno, 2=dos, y así).
a. Para leer letra por letra la composición de Clave, sugerimos que
agregue un For Next, de i=l, al ancho de Clave (Len (Clave)), lo
que le permitirá recorrer todas las posiciones de la Clave.
Len "Hola" = 4
Alfaomega 193
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Competencias:
l. Conocer los término s
fundamentales de la
programación orientada a
objetos : cla ses, objetos, campos,
propiedades, métodos y eventos .
2. Conocer en qué consist e el
encapsulamiento, la herencia y el
poli morfismo.
3. Conocer las t écnicas de
implementación de objetos
mediante programación y
herramientas de Visual Studio.
Evaluacl6n:
1. Proporcionar un caso
en el cual se decida el
desarrollo de una Evidencia de
clase y los miembros aprendizaje:
que debe tener. 1. Capacidad de analizar cuándo una
2. Proporcionar un caso clase puede ser implementada,
en el cual se determinando sus métodos y
desarrolle una clase propiedades.
• • 2. Capacidad de implementar clases
que provea serv1c1os a
que incluyan métodos y
otros programas.
propiedades.
3. Capacidad de consumir clases
desde otros programas.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Una clase es una definición formal de un tipo de objeto. La clase define qué datos formarán
parte de un objeto, qué tareas desarrollará el objeto, y de qué manera interactuará el objeto
con el usuario y con otros objetos.
Los objetos son instancias de una clase. Por instancia podemos entender una copia funcional
de la clase. A la acción de generar un objeto a partir de una clase, se le denomina instancia-
ción.
Al procedimiento o código que realiza la instanciación se le denomina constructor. Al pro-
cedimiento o código que destruye a un objeto, liberando los recursos que éste consumía, se
le llama destructor. En los lenguajes .NET no es necesario codificar destructores, debido a la
existencia del garbage collector, que es el elemento de CLR que se encarga de eliminar obje-
tos no utilizados, a fin de liberar los recursos que utilizan.
Alfaomega 197
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Los métodos son los comportamientos predefinidos que puede presentar un objeto. En cier-
ta forma, los métodos representan las acciones que el objeto podrá realizar. La manera en
que se pueden definir los métodos es agregando procedimientos y funciones a una clase; al
momento de generar una instancia de dicha clase, los procedimientos y funciones que le
codificamos a la clase formarán los métodos disponibles para el objeto.
Un evento es el resultado de la interacción que un usuario o programa tiene con un objeto,
en una circunstancia dada, que desencadena la ejecución de un procedimiento o método.
La interacción que tiene el usuario o programa con un objeto, provoca internamente una
interacción de dicho objeto con otros, misma que puede ser bidireccional, ya sea que el ob-
jeto reciba una petición de un objeto o aplicación, o bien, que realice una petición a otro
objeto o aplicación.
A las propiedades, métodos y eventos también suele llamárseles miembros (members), que
son el conjunto de elementos declarados por una clase.
Figura
09.01
Estructura de un objerc
Miembros
Objeto
r~
r Eventoe
9.1.3.1 Encapsulamiento
9.1.3.2 Herencia
La herencia describe la habilidad de crear una nueva clase basada en una clase existente.
La clase existente a partir de la cual se generará la nueva clase recibe el nombre de clase
base (base class); la nueva clase, llamada clase derivada (derived class), hereda todas las
propiedades, métodos y eventos de la clase base, y a partir de ahí, puede agregársele las
propiedades y métodos particulares que la hacen especial.
Las ventajas que proporciona la herencia a los programadores de software son las siguien-
tes:
1. Reuso de código. La mayor ventaja de la herencia es que el código se reutiliza de una
forma más eficiente, pues las clases parten de otras clases más generales; esto garantiza
que de inicio las clases ya tienen la funcionalidad de otras anteriormente creadas. Sólo
se estará desarrollando nueva funcionalidad, evitándose el código redundante.
2. Jerarquía de clases. Es posible realizar una jerarquía que distinga procesos generales y
específicos.
Alfaomega 199
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
9.1.3.3 Polimorfismo
9.2.1 Identidad
La identidad del objeto es su capacidad de tener un nombre que lo identifica y lo diferencia
de los demás objetos. No podemos crear ningún objeto sin asignarle un nombre para su
identificación, pues de ser así generaríamos un elemento al cual no podríamos invocar de
ninguna manera, o lo que es lo mismo, no sería referenciable.
En Visual Basic los objetos poseen una propiedad llamada Name, a través de la cual se mani-
fiesta la identidad de los objetos. A la propiedad Name también se le conoce como propiedad
de identidad.
9.2.2 Estado
El estado de un objeto es la situación de forma y capacidad de comportamiento que tiene el
objeto en un momento determinado, en tiempo de ejecución.
El estado está determinado por el juego de valores que tienen las propiedades del objeto;
como sabemos, las propiedades son las características particulares del objeto, y especifican
su nombre, su posición, su apariencia, y hasta sus capacidades de interacción con el usuario
y con otros objetos.
Si cambiamos el valor de cualquiera de las propiedades, como podría ser incrementar el
ancho del objeto de 10 a 20 pixels, ello representa una modificación de estado.
Tome en cuenta que la identidad del objeto también forma parte del estado del mismo, pues
Name es una propiedad, al igual que las de posición, apariencia, y otras.
9.2.3 Comportamiento
El comportamiento es la capacidad del objeto para funcionar de una determinada manera.
Como respuesta a la interacción del usuario, de otros objetos, o incluso del mismo sistema,
el objeto podrá comportarse de diferente forma.
El comportamiento de un objeto se presenta por la posibilidad de mandar llamar a ejecu-
• 1
CIOn:
l. Los métodos.
2. Los procedimientos de evento.
3. Los procedimientos y funciones definidas por el usuario.
Los métodos, como sabe, son los comportamientos predefinidos que un objeto puede pre-
sentar, y que se encuentran definidos por la clase de la cual el objeto deriva.
Los procedimientos de evento son aquellos procedimientos que le suceden a un objeto, como
respuesta a la interacción que tienen con el usuario o con otros objetos. El objeto tiene un
conjunto de eventos que reconoce, y usted como desarrollador lo único que hace es decirle
a su programa (a) que quiere que un objeto determinado sea sensible a los eventos que le
sucedan (especificación Wi thEvents al momento de la declaración), (b) elaborar un pro-
cedimiento, y (e) especificarle a dicho procedimiento que será ejecutado en caso de que le
suceda el evento a alguno de los objetos que maneje (Handles). En este tipo de procedi-
mientos generalmente se tienen argumentos implícitos.
Los argumentos implícitos son aquellos que son declarados por Visual Basic de manera au-
tomática, y forman parte de la estructura misma de la clase; la diferencia entre los argu-
mentos y los argumentos implícitos es quién le provee los datos: en el caso de estos últimos,
Alfaomega 201
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
CLR es el que se encarga de proveerles los datos de forma dinámica y automática cuando se
ejecuta el programa (tiempo de ejecución). Un ejemplo de ello es el procedimiento de evento
que percibe el movimiento del puntero de ratón sobre los objetos (MouseMove); en tiempo
de ejecución, el procedimiento tendrá dos argumentos (X, Y) que mantienen las coordena-
das del puntero del ratón; si se mueve el puntero, CLR actualiza Jos datos en tiempo real, sin
que el desarrollador se deba preocupar por determinar la posición y asignarlo a los argu-
mentos.
Cada evento podrá exigir la presencia de los argumentos implícitos que necesita para traba-
jar; cuando nosotros declaramos un objeto especificando que queremos que sea sensible a
eventos (Wi thEvents), también le estamos diciendo al programa que queremos que Vi-
sual Basic se encargue de actualizar, en tiempo de ejecución, los datos de los argumentos
implícitos de cada uno de los eventos aplicables al objeto. Nosotros no determinamos el
valor que tendrán los argumentos implícitos; es el CLR, en tiempo de ejecución, quien de-
termina qué valores tendrán.
Los procedimientos definidos por el usuario y las funciones definidas por el usuario, son los
procedimientos y funciones que usted codifica, respectivamente; no dependen de los even-
tos que pueden sucederle al objeto, ni requieren estar predefinidos en ninguna clase: son la
forma más pura de codificación.
Los procedimientos y funciones definidas por el usuario son la parte más especializada de
las aplicaciones, ya que contienen los bloques de código que han de realizar aquello que el
lenguaje por sí mismo no puede. En ocasiones se dice que los procedimientos y funciones
definidas por el usuario, son las reglas de negocio, para la aplicación.
Donde NombreC/ase es el nombre a través del cual la clase puede ser invocada. La instancia-
ción de la clase se deberá llevar a cabo por medio de este nombre. CódigoC/ase es el conte-
nido de la clase; como sabemos, el contenido de la clase se compone de datos (propiedades)
y comportamiento (métodos y funciones).
Por esa razón debemos definir dentro de la clase los siguientes elementos. principalmente:
l. Procedimientos (sub - End sub)
2. Funciones (Function - End Function)
3. Propiedades(Property - End Property)
Una clase, como ya sabe, es la definición formal de un objeto. Las clases por sí mismas no
pueden ser utilizadas. Es necesario crear unidades funcionales de las clases, es decir, obje-
tos. Para ello debemos recurrir a un constructor, que es el código que genera la instancia de
una clase:
Alfaomega 203
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfaomega 205
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
C&Hil W'b' • X
• ii~D«tontiom~
End Class
3. Tome en cuenta una cosa: Cada propiedad requiere una variable de trabajo
que servirá para manejar Jos datos al interior de la clase; al exterior de la
clase, la propiedad podrá ser utilizada, pero la variable de trabajo será
inaccesible.
4. La variable de trabajo es conocida como campo (field). El campo y la
propiedad deben llamarse diferente, pero deberán tener el mismo datatype.
S. Suponga que queremos crear las propiedades para el cálculo del área de un
rectángulo. Lo más lógico es que existiera una propiedad llamada Base, y otra
que se llame Altura, que son de tipo Decimal. Tomamos la decisión de que
las variables de trabajo tengan el mismo nombre que las propiedades, con la
diferencia que les antepondremos una letra «p». En resumen, las propiedades
Base y Altura se apoyarán en las variables pBase y pAl tura.
6. En el código agregado por el Code snippet, seleccione newPropertyValue
haciendo doble die en la palabra.
a. Esta variable es la variable de trabajo que utilizará la propiedad.
b. Vea cómo se selecciona el elemento en todos los lugares en donde es
utilizado.
c. Sustituya newPropertyValue con pBase, y presione TAB.
d. Al presionar TAB ocurrirán dos cosas: a) Se sustituirá el nombre de la
variable en todo el código, y b) Se trasladará el control al siguiente
elemento de código, que es el datatype que la variable de trabajo y la
propiedad compartirán.
e. Sustituya Sting por Decimal, y presione TAB.
Alfaomega 207
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
208 Alfaomega
SYNAPS PREMIUM
Unidad 9: Programación Orientada a Objetos
6 End Get
7 Set (ByVal value As Decimal )
8 pBase = value
9 End Set
1e End Property
11
12 Private pAltura As Decimal
13 Public Property Altura() As Decimal
14 Get
15 Return pAltura
16 End Get
17 Set (ByVal value As Decimal )
18 pAltura = value
19 End Set
28 End Property
21 Function Rectangulo() As Decimal
22
23 Return (Base * Altura)
24 End Function
25
26 Function Triangulo() As Decimal
27
28 Return ((Base * Altura) 1 2)
29 End Function
38
31 End Class
b) Class Diagram
14. Sin duda alguna, Code snippet es una facilidad sorprendente para agilizar el
código, pero no es la única opción. Para aquellos que deseen una alternativa
más gráfica, se puede utilizar los diagramas de clases (Ciass Diagra m).
15. Agregaremos la funcionalidad para calcular el área de un círculo, utilizando
Class Diagra m.
16. En Solution Explorer seleccione el nodo principal del proyecto Areas, y en
el menú de contexto seleccione Vi ew Class Diagr am.
a. Aparecerá el diagrama de la clase contenida en el proyecto. Tome en
cuenta que pueden aparecer más elementos definidos por Visual
Studio.
b. Dentro del espacio de trabajo, seleccione la clase Areas, y arrástrela a
un espacio menos congestionado del área de trabajo, de tal manera
que se pueda extender y contraer sin obstrucciones.
Alfaomega 209
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Expander 1 Contraer
( Areas
ll Class
)1
17. Haga die en el botón Expander 1 Contraer, para que vea cómo aparecen y se
ocultan los miembros de la clase.
18. En la parte superior de la clase, invoque el menú de contexto y seleccione
Class Details, que permitirá ver de manera detallada los miembros de la
clase.
..
\1
N..,.
•
"V
;1
• 0
G
lNf19Uio
~-.:Id'~•
•
..• "' .......
" . .rtin
"'"""' ......
...... •
,.
·-. ..
~ a...
.&t """'"''~
""""'
" · po:.ll.....
.... ,t.uc
Oo<~ul ......
,.,,...,
tdd fot'Ctlo """"" ""''"
Alfaomega 211
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
e) Class View
26. En ocasiones no quiere modificar las clases, sino ver qué miembros tiene.
27. Para hacer esto, puede invocar la herramienta Class View, seleccionando la
opción de menú View - Other Windows - Class View, o bien, presionando
CTRL+SHIFT+C.
28. Invoque Class View, y vea cómo en la parte superior aparecen los objetos
definidos en los proyectos de la solución, y en la parte baja, los miembros que
dichas clases poseen.
29. Si hacemos doble clic en cualquiera de los elementos, Visual Studio nos
llevará a la línea de código de definición del elemento. Esto es muy útil, ya que
en muchas ocasiones, sobre todo cuando trabajamos en equipo, desearemos
ver cómo se codificó una clase a fin de entenderla de una mejor manera.
30. Cierre Class View.
36. Revise el código resultante, que deberá haber quedado como sigue.
1 Public Class Areas
o o o
2 <summary>
3 o o o Variable de paso para base
4 o o o </summary>
9 ooo </summary>
26 o o o </summary>
Alfaomega 213
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
f) Consumiendo la clase
Alfaomega 215
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
10 'Crea el hash
11 Hash = ServicioSHA1.ComputeHash(bCadena)
12
13 ' Retorna como una cadena codificada en base64
14 Dim CodigoHash As String
15 CodigoHash = Convert .ToBase64String(Hash)
16
17 Return CodigoHash
18
19 End Function
Alfaomega 217
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
36 Next
37
38 Return Resultado
39 End Function
Competencias:
1. Aprenderá los términos
fundamentales necesarios para
entender la herencia y el
polimorfismo entre clases.
2. Aprenderá las formas de herencia
entre clases, y la manera de
establecer relaciones jerárquicas
entre clases.
3. Aprenderá el uso de modificadores
que permiten que los miembros
de una clase base puedan ser
modificados dentro de una clase
derivada.
Evaluacl6n:
l. Proporcionar un caso
en el cual se utilice
herencia y Evidencia de
polimorfismo de aprendizaje:
clases. 1. Capacidad de analizar una
2. Proporcionar un caso situación en la cual la herencia y el
en el cual se polimorfismo pueden aportar a la
desarrolle una clase eficiencia del programa.
que provea servicios a 2. Capacidad de implementar clases
con herencia y polimorfismo.
otros programas, en
3. Capacidad de consumir clases con
donde se haga uso de herencia y polimorfismo desde
herencia. otros programas.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
10.1.1 Herencia
La herencia entre clases no debe utilizarse por el simple hecho de que el lenguaje lo permi-
te. La herencia debe planearse; el desarrollador debe pensar cómo han de ser las clases,
organizándolas en lo que se conoce como jerarquía de clases.
Se recomienda una jerarquía de clases cuando entre las clases se presenta una relación de
tipo Es-un (is-a); debe evitarse el uso de herencia cuando se trata de relaciones Tiene-un
(has-a).
Una clase que contiene las características de todos los automóviles en general (Automóvi-
les), tiene mucho que compartirle a una clase que almacena las particularidades de aque-
llos automóviles considerados como automóviles deportivos (AutomóvilesDeportivos ).
Un automóvil deportivo, antes de ser deportivo, es un automóvil (is-a), por lo tanto, al pro-
gramar sería pertinente desarrollar una jerarquía de clases.
Ahora pregúntese, ¿qué comparte un dueño de un automóvil y un automóvil? Automóviles
y DueñosAutomóviles no comparten rasgos, ni siquiera similares. Las personas que po-
seen automóviles no se derivan de los automóviles, ni viceversa. Que una persona tenga un
(has-a) automóvil, no quiere decir que comparta con otros dueños de automóviles la mayo-
Alfaomega 221
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
ría de sus características. En programación, establecer una jerarquía de clases entre estos
dos conceptos no tendría ningún sentido.
Se recomienda una jerarquía de clases, obviamente, sólo si el código de una clase brinda
alguna funcionalidad que se pueda reutilizar en otra más específica; tratar de heredar as-
pectos muy particulares que sólo aplican para una clase y no para otras no tiene sentido.
Para implementar el polimorfismo, hay que conocer tres conceptos básicos: Overloading,
Overrídíng, y Shadowing. Al explicar el polimorfismo, concluimos que un mismo nombre de
método puede tener funcionalidad distinta dependiendo de los argumentos que le son pro-
porcionados.
Como sabe, los argumentos de cualquier función van entre paréntesis y separados por co-
mas, después del nombre del método o función; por tratarse de una lista de valores, esta-
mos ante la presencia de una serie de valores.
10.1.3.1 Overloaded
Los miembros con característica Overloaded son utilizados para proporcionar diferentes
versiones de una propiedad o método que tiene el mismo nombre, pero que acepta diferen-
te número de argumentos, o argumentos de diferente tipo de dato.
10.1.3.2 Overriden
Las clases derivadas heredan la funcionalidad de las clases base. En ese sentido, se espera
que una propiedad o método heredados de la clase base, tengan la misma funcionalidad,
tanto en la clase base como en la clase derivada.
Por la razón que sea, a veces una clase derivada no desea tener el mismo comportamiento
que la clase base. En otras palabras, desea sustituir la propiedad o el método con su propia
versión.
Las propiedades y métodos con característica Overriden permiten sustituir elementos here-
dados de la clase base, con aquellos que la clase derivada realmente necesita.
La única restricción que se tiene es que los miembros Overriden deben aceptar el mismo
número de argumentos y retornar los mismos valores, respetando los tipos de datos de la
clase base, a efecto de que el encapsulamiento de los objetos sea posible.
10.1.3.3 Shadowed
Los miembros con característica Shadowed son aquellos que remplazan localmente a otros
miembros existentes, dentro de un alcance diferente al original.
En esencia, es una forma de remplazar funcionalidad, pero más drástica que Overriden, pues
mientras que en Overriden se debe respetar el signature, en Shadowed no.
El estatuto Inherits se utiliza para especificar que una clase de nueva creación tiene como
base una clase ya existente. La clase nueva es la clase derivada (derived class); la clase ya
existente es la clase base (base c/ass).
La sintaxis es la siguiente.
Class NombreC/aseDerivada
Inheri ts NombreC/aseBase
• • •
End Class
En este caso, la clase derivada dispone de todos los elementos declarados en la clase base.
Por omisión todas las clases en Visual Basic pueden heredarse. Existirán ocasiones en que
no queramos que una clase pueda heredarse. En ese caso, hay que especificar, al declarar
una clase, que ésta no es heredable.
La sintaxis es la siguiente.
Notinheri table Class NombreC/ase
• • •
End Class
Alfaomega 223
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Ya explicábamos que no se puede tener acceso a la funcionalidad de una clase, sino a través
de una instancia de la misma, es decir, de un objeto basado en la clase. Eso es verdadero
sólo relativamente.
¿Habrá alguna forma de que podamos disponer de la funcionalidad de una clase, sin generar
una instancia de la misma?
La respuesta es que sí. Podemos declarar una clase que no pueda instanciarse, y que pueda
ser utilizada sólo si se hereda por otra clase. Para hacer eso es necesario especificar el esta-
tuto Musti nheri t .
La sintaxis es la siguiente.
Mu sti nheri t Class NombreClase
•••
End Cl ass
En este caso, instanciar NombreClase generaría error (Dim Objeto As New NombreCla -
se() )
10.2 Polimorfismo
El polimorfismo es la habilidad que tiene el lenguaje para definir múltiples clases que con-
tengan métodos y propiedades del mismo nombre, pero que brindan diferente funcionali-
dad.
Cuando se presenta el polimorfismo es posible elegir, en tiempo de ejecución, aquellos mé-
todos o propiedades que necesitamos. No importa que varias clases posean los mismos mé-
todos y las mismas propiedades: la aplicación debe ser capaz de utilizar precisamente aque-
llas cuya funcionalidad estamos invocando.
Cuando se declara una clase y a partir de ésta se derivan otras clases, estamos ante la pre-
sencia de la herencia; si además de esto, los métodos y propiedades de la clase base que
fueron heredados son modificados (Overriden) o sustituidos (Overloaded) en la clase deri-
vada, de tal manera que comparten el mismo nombre pero no la misma funcionalidad, es-
tamos ante el polimorfismo. Para que haya polimorfismo, antes debe haber herencia.
Cuando en una clase derivada se modifican métodos o propiedades de la clase base, se dice
que hay polimorfismo basado en herencia.
En ocasiones heredamos una clase, pero nos damos cuenta que algunas entidades (méto-
dos, propiedades, eventos) no se ajustan del todo a lo que verdaderamente necesitamos; en
resumen, no nos sirven tal y como fueron heredadas. Es posible que pensemos que los ele-
mentos heredados son útiles, pero lo son más si podemos hacer unas pequeñas modifica-
ciones.
Dichas modificaciones se realizan en la clase derivada, respecto a las definiciones originales
existentes en la clase base.
La programación orientada a objetos hace posible que eso suceda, pues permite implemen-
tar diferentes comportamientos para un método (override), o de plano remplazado por
completo (overload). La funcionalidad heredada puede modificarse por otra que sea más
indicada para el problema de programación que deseamos resolver; con ello se promueve
que la reutilización del código sea flexible y adaptable.
Por omisión, una clase derivada hereda los métodos y propiedades de su clase base. Si ne-
cesitamos que una propiedad o método heredado se comporte de manera distinta a como
se definió en la clase base, puede ser implementada de forma distinta (overridden) o rem-
plazada (overloaded); esto quiere decir que la herencia sirve hasta donde nosotros desea-
mos comenzar a hacer modificaciones.
Los estatutos auxiliares de polimorfismo sirven para especificar el grado de modificación que
ha de darse entre la clase derivada y la clase base; estos son:
1. Overridable
2. NotOverridable
3. Overrides
4. MustOverride
5. Overloads
Clase Base
NotOverridable Clase Derivada
1
Overridable
1 Overrides ]
Must Override
1 1 Overload
Alfaomega 225
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
La interpretación es la siguiente:
l. Los estatutos auxiliares aplican para los miembros que pueden ser modificados en su
implementación, como por ejemplo, los métodos.
2. Los estatutos NotOverridable, Overridable y MustOverride sólo se especifican en
la clase base, e indican si el miembro acepta o no modificaciones.
3. Los estatutos Overrides y Over load sólo se especifican en la clase derivada, e indican
su la modificación es un remplazo o una sustitución.
4. En el caso de que en la clase base y en la clase derivada haya un miembro con el mismo
nombre, el miembro en la clase base deberá ser especificado como Overridable o
MustOverride, y en la clase derivada deberá ser especificado como Overrides u
Over load. Las especificaciones van por pares.
El primer escenario es que la clase base no acepte que su funcionalidad sea modificada o
sustituida. En ese caso, el estatuto NotOverridable previene que una propiedad o méto-
do de una clase base pueda ser sustituido en una clase derivada.
Por omisión, los métodos públicos en una clase base son NotOverridable.
Alfaomega 227
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
9. En Class Diagram, coloque el puntero del ratón en cualquier parte del área
de trabajo que no esté ocupada, invoque el menú de contexto y seleccione
Add- Class.
a. Aparecerá la ventana New Class.
b. En Class Na me asigne el nombre MiClaseDeri vada.
c. El acceso será Public, y debe estar seleccionado Create new file.
d. Presione Ok.
e. En Solution Explorer se deberá haber agregado al proyecto el código
MiClaseDer i va da. vb, y en Class Diagram debe tener las dos clases
que ha creado.
10. Seleccione MiClaseDeri vada en Class Diagram, invoque el menú de contexto y seleccione
View Code.
a. Con ello aparecerá Code Editor, permitiendo la edición de la clase.
b. Dentro de la clase, agregue la siguiente línea:
Inherits MiCl aseBase
15. Vuelva a Class Diagram, haga doble die sobre el método Mensaje2 de MiClaseDer i va da,
para editar su código. Agregue el siguiente código:
Console. Writeline " Desde derivada"
16. Ahora procesa a editar el programa Modulel. vb del proyecto. Dentro de la clase, codifique lo
siguiente:
Alfaomega 229
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfaomega 231
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
a) Clase base
9. En Class Diagram, coloque el puntero del ratón en cualquier parte del área
de trabajo, invoque el menú de contexto y seleccione Add- Class.
a. Aparecerá la ventana New Class.
b. En Class Name asigne el nombre Pago.
c. El acceso será Public, y debe estar seleccionado Crea te new file.
d. Presione Ok.
e. En Solution Explorer se deberá haber agregado al proyecto el código
Pago. vb.
10. Aparecerá la nueva clase en Class Diagram.
11. Seleccione la clase Pago en Class Diagram, invoque el menú de contexto y
seleccione Class Details.
12. Agregue un método:
a. En Name asigne el valor CalculaPago.
b. En Type asigne Decimal.
c. Asegúrese que Modifier tenga asignado el valor Public.
13. Estableciendo el modificador de herencia.
Alfaomega 233
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
d. Presione Ok.
e. En Solution Explorer se deberá haber agregado al proyecto el código
PagoBonificado. vb.
18. Aparecerá la nueva clase en Class Diagram.
19. Seleccione la clase PagoBonificado en Class Diagram, invoque el menú de
contexto y seleccione Class Details.
20. Agregue un método:
a. En Name asigne el valor CalculaPago.
b. En Type asigne Decimal.
c. Asegúrese que Modifier tenga asignado el valor Public.
21. En Class Diagram haga doble die en la clase PagoBoni ficado, para editar
su código.
22. Dentro de la clase y antes de que se defina cualquier cosa, agregue la
siguiente línea, para establecer la relación de jerarquía entre las clases.
Inherits Pago~--------------~------------------------~
23. Como podrá darse cuenta, Visual Studio reporta un error, ya que se presenta
un fenómeno llamado contaminación de nombres, que se presenta cuando se
definen dentro de un mismo alcance dos elementos con el mismo nombre.
24. El método CalculaPago de la clase Pago es Overridable, es decir, acepta
modificaciones que se realicen en una clase derivada; el problema es que el
método CalculaPago de la clase PagoBoni ficado no tiene la especificación
requerida para indicar que modifica el método de la clase base.
a. En Class Diagram seleccione el método CalculaPago y presione F4
para modificar sus propiedades.
b. Busque la propiedad I nheri tance Madi fier, y especifique el valor
de Overrides.
c. Como puede comprobar, Visual Studio no permite realizar la
modificación. Esto sucede porque el método en la clase base es
Overridable, y el método en la clase derivada es Overrides; estas
especificaciones indican un remplazo (Overrides) y no una
sustitución (Overloads). Este hecho obliga a que el método en ambas
clases tenga el mismo signature, es decir, los mismos parámetros o
argumentos.
Alfaomega 235
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Inherits Pago~--------------------------------------~
39. Edite el programa Modulel. vb del proyecto, de tal manera que quede como
.
stgue:
1 Module Modulel
2 Public HT As Decimal
3 Public TH As Decimal
4
5 Sub Main()
6 Console .Write( ''Horas trabajadas (#):'' )
7 HT = CDec (Console .ReadLine())
8 Console .Write( ''Tarifa por hora ($):'' )
9 TH = CDec (Console .ReadLine())
10
11 ' Calculo y resultado aquí
12 Dim x As New Pago ()
13 Dim y As New PagoBonificado ()
14 Dim z As New PagoFijo ()
15 Console .WriteLine( ''Pago normal:'' )
16 Console . WriteLine( String. Format( "{e: C}" , x. CalculaPago(HT, TH)))
Alfaomega 237
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
~ lab.10.03: lteradores
Aunque el propósito principal de este ejercicio es demostrar el uso y creación de
iteradores; para poder hablar de ellos primero mencionaremos un requisito: las
interfaces.
No se entienda por interfaces elementos visuales de nuestra aplicación, sino a un
especial concepto de la programación orientada a objetos. En esencia, y de forma
muy simplificada, una interfaz sería algo parecido a un prototipo de clase. Esto es
que la interfaz puede definir los métodos yjo propiedades que una clase que se
base en ella debe implementar. De principio pudiera parecer como una clase
Mustlnherit con todos sus miembros como MustOverride. Sin embargo, por
mencionar un par de ellas, una interface presentará las siguientes diferencias
contra una clase:
1. Una interfaz no implementará ninguna línea de código para los miembros es-
pecificados en ella, solamente las "firmas" de los mismos.
2. Una clase puede implementar una o más interfaces. Esto es una técnica que
bajo ciertas circunstancias, nos permite acercarnos a emular la herencia múl-
tiple (Recuerde que dicha característica no está permitida en .net).
Alfaomega 239
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
1 Module Module1
2
3 Sub Main()
4 Dim Nombres As New Amigos ()
S For Each Elemento As String In Nombres
6 Console .Writeline(Elemento)
7 Next
8 Console .ReadLine()
9 End Sub
10
11 Private Class Amigos
12 Implements !Enumerable
13
14 Public Nombres = New String () { "Beshful" ' "Duc" J "Dupey" J -
15 "Grampy" , "Heppy" , "Sliipy" , "Sniizy" }
16
17 Public Iterator Function SiguienteNombre() As IEnumerator
18 Implements IEnumerable .GetEnumerator
19
20 For i As Integer = e To Nombres.Length - 1
21 Yield Nombres(i)
22 Next
23 End Function
24 End Class
25
26 End Module
240 Alfaomega
SYNAPS PREMIUM
Unidad 10: Herencia y Polimorfismo de Clases
'-1 Methods
Gl Main
:- , Nested Types
? IEnum!fable
Amigos ~
Class
13 Fields
,_. Nombres
:J Methods
(i) Sigui!flte ...
9. Observe que la clase Amigos presenta una figura superior indicando que
dicha clase implementa la interfaz anotada a su lado, en este caso
/Enumerable. Puede cerrar ya la vista de diagrama de clases.
10. Ejecute el código, obtendrá el siguiente resultado:
Alfaomega 241
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfaomega 243
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Competencias:
1. Conocer los elementos básicos del
desarrollo de interfaces de
usuario.
2. Conocer los objetos principales
que pueden ser utilizados en las
interfaces de usuario.
3. Conocer la manera en que se
pueden aprovechar las
propiedades, métodos y eventos
de los controles, a fin de validad y
controlar el comportamiento de la
interfaz.
Evaluacl6n:
1. Proporcionar un caso
en el cual se
desarrolle una Evidencia de
Interfaz de usuario aprendizaje:
gráfica, en donde se 1. Capacidad de analizar una
acepten los datos situación real, y diseñar una
completos y interfaz que permita la interacción
correctos. efectiva entre el usuario y la
aplicación.
2. Capacidad de implementar
interfaces basadas en Windows,
con manejo de eventos y
validaciones.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
ll.llnterfaz de usuario
Una interfaz de usuario es el elemento de software a través del cual un programa determi-
nado recibe datos por parte del usuario. Cuando se compone de elementos gráficos es lla-
mada interfaz gráfica de usuario (GUI j Graphic User Interface). Microsoft .NET es increí-
blemente flexible para la creación de interfaces gráficas, en sus dos alternativas: Windows
(Windows Applications) y Web (ASP.NET Applications).
El objetivo principal de una interfaz, sea
cual sea su tipo, es recibir los datos vá-
lidos, mínimos, suficientes y necesarios, • Agrt!Ji Titnclos ---~ _ _ I!Q!j!
con fines de almacenamiento, procesa- 10 de la T10nda.
1
miento, o ejecución de acciones. Nombre de la Tienda:
Alfaomega 247
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
11.2 Controles
11.2.1 Toolbox
Los controles son las representaciones gráficas de las clases,
disponibles en Visual Studio a través de Toolbox.
Toolbox • ~ X
Soarch Toolbox P· En esencia, los controles son la forma para llegar a las clases
~ All Windows Forms de BCL, a fin de generar instancias que se convierten en obje-
~ Common Controls
~ Containers tos de interfaz. Si desea que su interfaz sea efectiva, debe co-
~ Monus & Toolbars nocer la clase de la cual derivan los objetos que incluye en sus
~ Data
~ Compononts
aplicaciones. Conocer la clase permite tener control respecto a
~ Pnntlng la capacidad de los objetos, además de que permite seleccio-
nar los objetos adecuados para la realización de tareas especí-
~ Reporting
~ WPF lntoroporab1hly
ficas.
~ Visual Basic Pov.orPocks
~ Goneral
Los controles están disponibles en la herramienta Toolbox. El
nombre de esta ventana no podía ser más pertinente: se trata
There are no usablo controls 1n
lhiS group. Orag an rtom onto
de una caja de herramientas, y como tal, debemos: a) Conocer
thiS toxt to add tt to tho toolbo.. qué herramientas tenemos en la caja (controles); b) Saber
usar las herramientas que hay en la caja (clases), y e) Usar sólo
las herramientas que uno necesita, pues usar más de las nece-
sarias sólo nos conduce a ser más ineficientes.
Toolbox organiza los controles en grupos de controles, o Tabs,
Toolbox SorvorExploror en donde agrupa lO COntrOleS de acuerdO a la Similitud de SU
funcionalidad. Los grupos de controles pueden expandirse o
contraerse con el fin de tener presentes sólo los controles que
estamos utilizando, e incluso es posible la generación de gru-
pos de controles del usuario, colocando ahí los controles más usuales para nosotros; con
ello se mejora la operación de buscar y encontrar controles. Un excelente punto de partida
será siempre el grupo Common Controls, que contiene los controles más usados por las
aplicaciones profesionales en ambiente Windows.
Otra ventaja que tiene Toolbox es que, si desconocemos para qué sirve algún control, basta
con que coloquemos el puntero del ratón sobre el control y presionemos Fl, con lo cual
abrirá la ayuda de la clase a la cual está asociado el control. De esa manera es muy fácil ex-
plorar las capacidades de un elementos disponible para su uso en la plataforma .NET Fra-
mework.
Podemos iniciar con la tarea de explicar cómo se utiliza cada uno de los controles, y dar
ejemplos de su codificación. El problema es que son muchos y tienen un uso muy diverso;
en esencia, resulta poco práctico intentar hacerlo: el documento quedaría muy a mplio, y lo
peor de todo, seguramente incompleto.
Lo mejor es explicar una técnica que permita que aprendamos cualquier control que necesi-
temos considerando nuestras propias necesidades.
Primero, tomemos en cuenta que en la plataforma .NET todo es un objeto, y los controles no
son la excepción. Todo control que agregamos a nuestra interfaz, realmente se traduce en
un objeto derivado de una clase, que agregamos a nuestro programa. Si usted agrega un
Textbox a su interfaz, lo que realmente está haciendo es crear un objeto basado en la clase
System.Windows . Forms. Textbox, defin ida en la librería System.Windows. Forms .dll,
dentro de la instalación física que hizo de su Microsoft .NET Framework.
Pero mantengamos las cosas simples: al agregar un control Textbox, usted agrega un obje-
to.
Alfaomega 249
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Y una respuesta:
"Deseo capturar la opinión que los usuarios tienen de mi aplicación, para lo cual quiero que
escriban su opinión de manera obligatoria y además cómoda, cuidando que la opinión no sea
mayor a 300 caracteres, y al final, se desea que todo esté escrito en mayúsculas".
Sea específico en los datos que quiere, y en las restricciones que tendrán.
Como sabe, los objetos son implementaciones de una clase. ¿Qué puede hacerse con el obje-
to? Sólo se puede saber conociendo qué se puede hacer con la clase.
Cada clase tiene un propósito específico, y lo mejor de todo, es que está documentado de
forma plena en la documentación de .NET Framework. Usted puede buscar en MSDN la do-
cumentación de cualquier clase contenida en .NET Framework, y puede encontrar artículos,
tanto en inglés como español, con lo que podrá despejar prácticamente cualquier duda.
Usted deberá plantearse la pregunta: ¿Hay una clase que pueda resolver mi necesidad?
Cuando lo que desea es muy específico y no es de uso general, es muy probable que deba
desarrollar sus propias clases para satisfacer su necesidad. Sin embargo, la biblioteca de
clases de .NET es tan extensa, que resulta casi imposible que no exista una clase que pueda
serie útil para aquellas necesidades de propósito general, como podría ser agregar un cua-
dro de texto, un botón o una imagen.
La pregunta que sigue es:
Y una respuesta:
"Sí hay una clase que satisface mi necesidad. Se llama System.Windows.Forms.Textbox, que
permite crear un cuadro de texto para la entrada de datos del usuario, y que está disponible
en Toolbox a través del control Textbox"
Una vez que determina qué clase es la que satisface su necesidad, lo que debe conocer son
los miembros de la clase, que le ayudarán a especificar su apariencia y a determinar sus
capacidades de comportamiento. Los miembros de una clase son:
1. Propie da des. Características nominadas que nos permiten especificar atributos que
tienen que ver con la apariencia y las capacidades de funcionalidad de los objetos.
Y una respuesta:
"El cuadro de texto deberá brindar un espacio cómodo de edición, y por tanto se desea
que sea un cuadro amplio, lo que se logra con las propiedades Mul tiline, Size.
Además, el cuadro de texto tiene un máximo de caracteres de 300, lo que se puede limi-
tar a través de la propiedad Maxlenght. El contenido estará en mayúsculas si se esta-
blece la propiedad CharacterCasing a Upper. Como se debe escribir información de
manera obligatoria, puedo revisar que el contenido de la captura, que se almacena en
la propiedad Text, no sea igual a •m, al dispararse el evento Leave, que sucede cuan-
do se abandona el objeto."
Debe ser particularmente cuidadoso con las propiedades, ya que algunas serán opcionales y
otras obligatorias; también habrá algunas que no se puedan modificar en tiempo de ejecu-
ción (Read Only), mientras que otras sí; habrá algunas que tendrán valor absoluto, mientras
que otras serán colecciones, y así.
Para reducir esfuerzo en el estudio de las clases, piense que la programación basada en ob-
jetos tiene muchas ventajas, entre ellas, la herencia de funcionalidad: Generalmente los ob-
jetos derivan de una clase base y heredan rasgos y características, pasando de lo más gene-
ral a lo más particular.
Vea las siguientes clases:
System.Windows.Forms. Label
System.Windows.Forms. Textbox
System.Windows . Forms.Button
Como puede ver, comparten el mismo sufijo. ¿En términos prácticos, qué quiere decir esto?
Pues que tanto Label, como Textbox, como Button, derivan de System.Windows. Forms,
lo cual quiere decir que comparten muchas propiedades iguales, tales como BackColor,
Alfaomega 251
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Enabled, Font, Visible, etcétera. Recomendamos, por estrategia, estudiar primero Jos
miembros de una clase base (en este caso System. Windows. Forms. Control), con lo cual
habremos aprendido más del 90% de los miembros de todas las clases derivadas ( Label,
Textbox, Button, entre otras).
A continuación se relacionan de manera general y agrupada por funcion es, los controles
más comunes para el desarrollo de aplicaciones Windows.
11.2.4.1 De estructura
Son aquellos controles que permiten definir la estructura general de los formula rios. Antes
de que cualquier control sea agregado, estos controles trazan el mapa del área de trabajo en
donde serán colocados los demás controles. Generalmente se trata en este caso de objetos
contenedores.
Función Controi/Compoente Descripción
Para contener a
Agrupa un conjunto de controles en un
otros controles,
agrupandolos .._...CJ) Panel marco sin etiqueta que permite el
desplazamiento.
Son aquellos controles que permiten proporcionar datos de alguna manera. Son general-
mente aquellos a través de los cuales el usuario interactúa con la aplicación, brindándole
información que la aplicación no puede generar por sí misma.
Función Controi/Compoente Descripción
Para editar
Permite la edición y presentación de
información E!!) TextBox información textual sin formato.
textual
Para seleccionar
Permite mostrar una lista desplazable de
valores de una
g=
a- CheckedlistBox elementos, en donde cada uno de ellos posee
lista de valores
una casilla de verificación.
Es muy utilizado para indicar la presencia o
ausencia de características, en donde se
pueden seleccionar ninguna, una, alguna o
todas.
Alfaomega 253
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
mostrado.
...•• ListView
Permite mostrar los elementos por medio de
una de cuatro vistas diferentes.
Las vistas son a) Sólo texto, b) Texto con
iconos pequeños, e) Texto con iconos
grandes y una vista d) Detalles.
Para manejo de
Permite mostrar un calendario gráfico que
fechas
~ DateTimePicker permite que los usuarios seleccionen una
1
fecha o una hora.
Son aquellos controles que no proveen datos, pero que aportan elementos gráficos para
darle estética e información de soporte al usuario. Permiten escribir mensajes, agregar
imágenes, y en general, proporcionar a la interfaz el loo k &feel qua haga sentir que nuestra
aplicación se trata de una aplicación en ambiente Windows.
Función Controi/Compoente Descripción
Para presentar
Permite mostrar texto que los usuarios
información de
solo lectura 1
A Label
- J no pueden modificar directamente.
Alfaomega 255
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Para habilitar
Proporciona Ayuda emergente o en
ayuda al usua rio HelpProvider pantalla relativa a los controles.
Para generar
Permite mostrar el cuadro de diálogo de
cuadros de diálogo rrj ColorDialog selección de colores, que permite que los
estándar del
usuarios seleccionen el color de un
ambiente Windows
elemento de la interfaz.
Para visualizar
Permite al usuario navegar por páginas
contenidos WebBrowser Web dentro del formulario.
especiales
Alfaomega 257
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Son aquellos controles que permiten manipular datos desde fuentes de información.
- Función Controi/Compoente Descripción
Para manejo
de datos
desde fuentes
•••
i_:;
____
..................OataGridView
El control DataGridView proporciona interfaz
para mostrar y editar datos en forma de matriz
de dos dimensiones, con amplias facilidades de
personalización a nivel celdas, filas, columnas y
bordes.
Los controles en este apartado no son los únicos, pero sí son los más básicos de cada cate-
,
gona.
Una vez que tenemos claro el propósito de la interfaz, debemos centrarnos en hacer una
especificación de los datos involucrados; no sólo debemos conocer los datos, sino que de-
bemos hacernos una idea del tipo de dato que manejaremos, así como las validaciones que
es necesario realizar antes de determinar que la información requerida es completa y co-
rrecta.
En nuestro caso, tendríamos lo siguiente:
Dato Datatype Descripción Validaciones --
Una vez que conocemos los datos involucrados, debe visualizar en su mente la interfaz idó-
nea para realizar el trabajo, y a partir de ese bosquejo mental, debe analizar qué controles
son los más adecuados para la recopilación de los datos. Tome en cuenta que algunos con-
troles, a la vista, parecen muy similares, aunque sus capacidades son diferentes (v.g. Text-
box y MaskedTextbox).
En nuestro caso, tendríamos los siguientes objetos:
Alfaomega 259
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
· Form
10 de la Tll!nda
Nonbe de la llenda
Interfaz basada
en objetos.
TooiStñpStltusl.abtll
lmagelist
Tome en cuenta que su interfaz tiene como base un objeto que sirve como espacio de traba-
jo para todos los demás. Un objeto contenedor es aquél que puede contener otros objetos
dentro de sí. Los objetos contenedores son conocidos también como objetos padre (Parent),
mientras que los objetos contenidos son conocidos como objetos hijo (Child). Es posible que
un objeto contenedor esté contenido en otro objeto contenedor, por lo que podemos decir
que éstos pueden anidarse.
Tome en cuenta también que una interfaz: a) Debe tener el número mínimo, suficiente y
necesario de objetos, que le permitan cumplir con su propósito; b) Debe ser intuitiva y es-
tandarizada respecto al conocimiento entendido por los usuarios, pues una interfaz que
tiene que explicarse poco, es una buena interfaz: e) Debe tener una secuencia conveniente
respecto a la captura de datos, de tal manera que los primeros datos requeridos sirvan para
inferir otros datos.
Esta última regla tiene una excepción: en ocasiones los usuarios están muy acostumbrados
a una distribución de datos que resulta desordenada; hay que evaluar el grado de confusión
que generaría ordenar la secuencia de datos de entrada. Si la confusión generada hace que
el cambio sea contraproducente en términos de aceptación y uso de la aplicación, deberá
evitarse el orden comúnmente entendido. Esto suele suceder cuando las interfaces replican
formatos en papel, que sin tener una distribución óptima, son conocidos por todo el mundo.
En nuestro ejemplo, el objeto padre es un objeto de tipo Form (formulario). Siguiendo con el
análisis de nuestro ejemplo, podemos decir que tenemos lo siguiente:
Form Parent 1
Label Child 6
MaskedTextBox Child 6
Button Child 4
ImageList Child 1
StatusStri p Parent 1
11.3.5 Validaciones
Cuando ya se tienen lo objetos que han de utilizarse, lo único que resta es implementar las
validaciones que permitan que la interfaz reciba no sólo los datos completos, sino correctos.
Las estrategias de validación pueden ser las siguientes:
1. Validación por restricción de dominio. La forma más confiable de validar infor-
mación es utilizar controles que restringen los valores que el usuario puede propor-
cionar a la interfaz, de tal manera que en todo momento el usuario no puede hacer
otra cosa que proporcionar un dato válido. Esto es muy común con listas de opciones
y otros controles que además de tener valores de entrada restringidos, poseen un
valor por omisión (Default), que además es correcto.
2. Validación al finalizar un formulario. Generalmente, los formularios concluyen su
tarea cuando el usuario utiliza un botón que le indica a la interfaz que los datos pro-
porcionados son los que se deberán tomar en cuenta para el almacenamiento / pro-
cesamiento. En ese momento, el procedimiento que se ejecutará al haber utilizado el
botón, puede encargarse de realizar las validaciones vía programación.
3. Validación por control. Se presenta cuando las características del control trans-
forman o limitan la información que está siendo ingresada, a fin de que cumpla con
una validación. Esto se logra con la participación de propiedades y de eventos que en
tiempo real se ejecutan al momento de la introducción de datos.
Es común que las tres estrategias convivan en una interfaz para lograr el objetivo de valida-
ción de una manera correcta.
Alfaomega 261
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
a) Ingresando a MSDN
Figura 11.2
Elementos de msdn
msdn.
2.2. En caso de que así lo desee, cambie el idioma de los contenidos. Tome en
cuenta que en español estará más cómodo, pero que en inglés suelen
encontrarse los recursos y artículos más completos y recientes. Dado que
estamos en aprendizaje básico, la profundidad de los contenidos no hace
diferencia.
2.3. Seleccione en el menú la opción Library (Biblioteca). Los elementos de dicha
, .
pagma son:
,
2.3.1. Arbol de contenidos. Es una jerarquía de temas de
documentación, en donde se pueden ubicar los temas de nuestro
interés.
2.3.2. Búsqueda de contenidos. Es un cuadro de texto que permite
especificar una búsqueda dentro de los contenidos de msdn.
2.3.3. Expander /Contraer Árbol de Contenidos. Es un ícono que
permite contraer o extender el ancho del Árbol de Contenidos.
262 Alfaomega
SYNAPS PREMIUM
Unidad 11: Interfaces de Usuario con Windows Applications
Figura 11.3
MSDN Llbrary (en español)
Distribución de • ~ . ... 10 !'\¡.. ~Otm'~o.~l 1}6.1f>1tll· 'w'Jitl"'' f(l~ !Milo
msdn.
l•z rJll s.'\•1
on.,.rcck ~'fi'IIÓQ • MSON l.lbriJY ffl tij)il\ol llll. Wtf. r'I'OINCIOII trtl'l<lil !*) dtWI'OlfCIO~tt q¡¡• ..
"«•<'MI!IIIU. I)I'od\1~ tfO"d~M: 'J Wf'\\<IOs<lt M<!f:W'tt ,.iSON l torlty IN~'t ll~lfo'ltOI y
,.l., Área de
Het~...~ '1 'l!lf9U""' deo dewtlllk;
Otl.ar-ol~ Nll docum•Ma:ión M~~~ t.:<igo éf "..'fflFio ¡ft~ Mm~ wcrt flh'OI IMII'IOI 11111 M\tCI'I!'lll' lf CIOI'.......,t: contenidos
O.wl'cllo Ot 0'!.;• <¡utre~-.. dtsp16ceH pcr 1114tl5 de contemdct o ute l1 bil¡q~.
Wl'4r'IY\Aflll"
5Ql ~..w•
lh(IO!oOit 5b Hndn,~J'II Contenido destacado
~~~~On!U(r.cn
PI.;. h-l('f '/ lt<Mk)Oifi " 9'\i!tf'Qifll
Árbol de Onf¡ diO'II('b
~O lliH!'Ill clll' 101 MT!Ini~r.lOtll 11111 orlo di! fldll O.IM apl<MIOIIIII M Wull ~II.Ot MIO
contenidos '-'"7 ..-lk.~l¡;, liQ<otco. ~tl"4i ~ti dt li$ (.jlt~4;as n11t•~ y K!l.lal•:tóu C•tPOfiiOIH (OI'IIM 1\ffJ_,.tflllll 0t UMi'UiifiKIÓotl cltl tiClO
dr YlCU ee tn :plice:aw: (lol.t.(•en \'lsutl S111áio 2'01.0,
~0ÓM b f:III!I'"UI:JKO'I ele! CdHie Y.d.J de llllpiKio:"OOI"'tt fOfl \' .fl !·do
Apr~ acfl'~.& ele' ~ (iOflll;l,oiM 111'1 PfO'Jf(IO ~ ~flO y Q.lt l)tMII dfflt .-gult tildii!'IHI'\tlro ~ tJQ!JpC pt!~
Comt.-.::1' 1 uliiU bs htrn~m.trb$ de fQ!IIfm1!JCIOfl cW odo de wil dt 1M IPiadOIItl ~ .rd.idal tfl '111111'
$t~02010.
Alfaomega 263
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Es fundamental que aprenda a recopilar información de las clases, ya que deberá aprender
en dos pasos:
1. Entendiendo la función de la clase. Hay que saber para qué sirve la clase, ya que
no todos los objetos sirven para lo mismo. Es cierto, puede capturar una fecha en un
TextBox, pero la cantidad de validaciones y conversiones que tendrá que realizar
después es increíble. Mejor utilice DateTimePicker, que tiene ese propósito
específico. El aprendizaje es ese: prefiera lo específico a lo genérico.
2. Entienda los miembros de la clase. Debe entender los miembros de la clase, y los
tipos de dato que soportan. Esto es básico para reducir el tiempo de depuración de
su programa. En ocasiones, las propiedades no aceptan valores básicos, sino que
requieren enumeradores (valores nominados), colecciones, e incluso clases, que
también deberá investigar.
3. Entienda los eventos de la clase. Revise cuándo suceden los eventos de la clase,
qué argumentos implícitos tienen y cómo programar en función al momento. Es muy
probable que en los eventos sea cuando aplique los métodos del objeto.
Miembros relevantes
Tipo de Nombre Datatype Función
miembro
Propiedad Max l enght Int Obtiene o establece el número máximo de
caracteres que se permiten en el cuadro
de texto.
Alfaomega 265
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
a) Label
3. Realice una TABLA DE ANÁLISIS DE CLASE para la clase Label, cuidando cubrir los
siguientes miembros, al menos:
Propiedades Eventos Métodos
Text
Font
Font.Bold
Font.Name
Font.Size
ForeColor
b) TextBox
e) MaskedTextBox
d) Button
3. Realice una TABLA DE ANÁLISIS DE CLASE para la clase Button, cuidando cubrir los
siguientes miembros, al menos:
Propiedades Eventos Métodos
Text Click
Enabled
Caso hipotético:
Alfaomega 267
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
1. Se espera que haya un cuadro de texto amplio, en donde se pueda escribir una
. .,
opm10n.
2. La opinión no puede exceder de 300 caracteres.
3. La opinión debe estar en mayúsculas. Si el usuario no usa mayúsculas, el programa
deberá convertirlas.
4. A manera de ayuda, al colocar sobre el cuadro de texto el puntero del ratón, deberá
mostrarse un texto que indique la información que se espera recibir.
S. Se puede proporcionar la clave secreta de membresía en el club que consiste en
una letra y tres dígitos, a través de un cuadro de texto, pero deberá estar oculta al
escribirse.
6. Se debe tener un botón para aceptar la información. El botón de Aceptar debe estar
inhabilitado, a menos de que se compruebe que el cuadro de texto de la opinión
tiene contenido.
• . Optntón
7. Una vez que tiene decididos qué objetos son Jos que utilizará, agréguelos a la interfaz.
8. Por el momento no se preocupe por la apariencia y el contenido, pues eso se realizará
después.
9. Agregue los objetos.
9.1. Agregue el Button.
9.2. Agregue los dos Label.
9.3. Agregue el TextBox.
9.4. Agregue el MaskedTextBox.
9.5. Agregue el ToolTi p.
9.6. Vea cómo en modo de diseño, Visual Studio agrega líneas guía que permiten
alinear adecuadamente los objetos, e incluso, manejar el espacio de un objeto
respecto a otros elementos de la interfaz.
Alfaomega 269
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
10. Una de las cosas más importantes de toda interfaz es la secuencia en la cual los datos
son preguntados.
11. En ambiente Windows, para ir de un objeto a otro, típicamente se utiliza la tecla
TAB.
12. El primer objeto con el cual interactuamos -objeto que adquiere el enfoque al inicio
de uso de la interfaz- es el objeto cero (0), al presionar TAB, iremos al objeto uno
(1), y así sucesivamente; al llegar al último objeto de la interfaz y presionar TAB, el
control regresa al objeto cero.
13. A este orden se le denomina Tab Order.
14. Visual Studio asigna el Tab Order en función al orden en que los objetos son
agregados. Lo recomendable es que agregue los objetos de la forma que más se le
facilite, y posteriormente modifique el Tab Order.
15. Para modificar el Tab Order:
15.1. Seleccione la opción de menú View- Tab Order .
15.2. Aparecerán indicadores de orden de tabulación, distinguiendo aquellos
objetos que pueden obtener el enfoque, y los que no.
15.3. Para cambiar el orden de tabulación de un objeto, basta posicionarse sobre el
objeto y hacer die sobre él, hasta que se coloque el orden que queremos que
tenga.
15.4. Modifique el orden de tabulación del TextBox, hasta que tenga el número O.
15.5. Modifique el orden de tabulación del MaskedTextBox, hasta que tenga el
número 1.
15.6. Modifique el orden de tabulación del Button, hasta que tenga el número 2.
DJ WBVBVS2012.11.03- TabOrder.wmv
16. Uno de los trabajos más finos del desarrollo de interfaces es proporcionar a los
objetos los valores a las propiedades, lo cual determinará la apariencia y las
capacidades de comportamiento.
17. Modifique las propiedades los objetos basados en Labe l , utilizando para ello
Properties Window.
18. Modifique las propiedades del objeto TextBox. Tome en cuenta estos consejos:
18.1. Para modificar el valor de una propiedad de valor no restringido (caso de
Name, por ejemplo), hacer doble die en el nombre de la propiedad nos lleva a
seleccionar el valor actual de la propiedad, mismo que podemos modificar
sobrescribiendo.
18.1.1. El nuevo valor no se da por ingresado hasta que presione INTRO.
18.1.2. Si se mueve de propiedad sin presionar INTRO, puede perder lo
que escribió.
Alfaomega 271
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
18.2. Cuando las propiedades tienen valor restringido -Visual Studio muestra un
combo con las opciones permitidas-, hacer doble die en el nombre de la
propiedad provoca el cambio de valor.
18.3. Algunas propiedades son especiales, y Visual Studio provee herramientas
intuitivas para ingresar sus valores. Tal es el caso de la propiedad ToolTip:
dado que esa propiedad se apoya del objeto ToolTip que se agregó, muestra
un cuadro de edición.
18.3.1. Escriba en dicho cuadro. Como el cuadro permite que agreguemos
salto de línea (INTRO), para dar por aceptado el dato habrá que
presionar CTRL+INTRO.
18.4. Tome en cuenta que se asigna la propiedad Name, cosa que no se hizo en los
objetos Label. Esto se debe a una regla esencial: se le da nombre a los objetos
que vayan a ser utilizados de forma programática.
1 Objeto Propiedad Valor a asignar
TextBox (Name) txtüpinion
CharacterCasing Upper
Maxlenght 300
Multline True
ScrollBars Vertical
ToolTip Capture aquí la opinión del evento.
Aparecerá todo en mayúsculas.
WBVBVS2012.11.05- TextBox Properties.wmv
e) Programando comportamientos
21. Una vez que los objetos tienen las propiedades correctas, es momento de
proporcionarle vida a la interfaz, mediante la programación de comportamientos.
22. Haga doble die en cualquier parte libre del formulario.
22.1. Con ello se abrirá Code Editor.
22.2. Por omisión, editará el procedimiento de evento que sea más común para el
objeto en el cual se hizo doble dic.
22.3. En nuestro caso, se procede a codificar el procedimiento de evento Load del
objeto Forml, que es nuestro formu lario. Este evento se ejecuta cuando el
formulario es cargado, y antes de que se muestre en pantalla.
22.4. Aunque el nombre del procedimiento es bastante obvio Form_Load, no es el
nombre lo que hace que dicho procedimiento de mande ejecutar. Realmente
Alfaomega 273
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
22.6. Este código provocará que el botón no esté disponible para su uso. Esto pudo
haberse definido manejando las propiedades del botón; quisimos hacerlo
mediante código, para que entienda que el procedimiento de evento Load es
fundamental, pues en él se pueden realizar definiciones e inicializaciones
importantes.
22.7. Ahora codifiquemos las acciones que se desencadenarán cuando se haga clic
en el botón. En otras palabras, el procedimiento de evento Clic k para el
objeto Buttonl.
22.7.1. En el Selector de elementos de Code Editor, seleccione Buttonl.
22.7.2. En el Selector de sub-elementos de Cod e Editor, seleccione Click.
22.8. En ese procedimiento, codifique lo siguiente. Este procedimiento es una
validación al finalizar un formulario :
1 If txtCodigo. Text <> "" Then
2 If len(txtCodigo.Text) <> 4 Then
3 MsgBox( "El código está incompelto" )
4 txtCodigo.Focus()
5 Exit Sub
6
7 End If
8 End If
9 MsgBox( ''Captura correcta'' )
10 Me .Close()
274 Alfaomega
SYNAPS PREMIUM
Unidad 11: Interfaces de Usuario con Windows Applications
Alfaomega 275
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Competencias:
1. Conocer ADO.NET y sus principales
clases.
2. Conocer los esquemas conectados
y desconectados para el manejo
de base de datos en .NET.
3. Conocer la manera de estableces
conexión entre las aplicaciones y
las bases de datos.
4. Conocer la manera de enlazar
objetos a bases de datos.
Evaluacl6n:
1. Proporcionar un caso
Evidencia de
en el cual se
desarrolle una
aprendizaje:
1. Capacidad explicar el uso de las
aplicación que diferentes clases de ADO.NET.
establezca una 2. Capacidad de establecer conexión
conexión a base de ent re las aplicaciones y las bases
datos de forma de datos.
programática. 3. Capacidad de determinar cuándo
2. Proporcionar un caso utilizar bases de datos conectadas,
y cuándo desconectadas.
de datos enlazados,
4. Capacidad de hacer aplicaciones
en donde la selección con consumo de datos (Data
de un objeto incida en Driven Applications).
el contenido de otro
objeto.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
DataAdapter
lntermediación de
r SelectCommand 1nsertCommand datos
DataSet
1
DeleteCommand UpdateCommand
Alfaomega 279
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Obje to Función
Conne ction Permite establecer la conexión con un almacén de datos.
Se debe definir un objeto Connection por cada enlace a almacén de da-
tos requerido por la aplicación. Los objetos DataRea der, DataAdapter
y Command requieren de un objeto Conne ction para funcionar.
DataReade r Permite generar un fl ujo de datos (data stream) de sólo lectura con el
almacén de datos.
El objeto DataReader se puede utilizar para lecturas sólo hacia delante;
no es requerido por ningún objeto, por lo que su uso es opcional.
280 Alfaomega
SYNAPS PREMIUM
Unidad 12: Explotación de Datos usando ADO.NET
En manuales y guías de estudio, suele referirse a los objetos como xxxCommand, xxxData-
Reader, y así, de tal forma que, en caso de que aparezcan nuevos controladores y provee-
dores de datos usted sólo tenga que aprender el prefijo que desea aplicar, aprovechando
así el conocimiento del modelo de objetos que ya tiene.
Dependiendo el controlador de datos .NET que se desee utilizar, el nombre de los objetos
,
vana.
Alfaomega 281
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Si usted conoce las bases de datos relacionales, verá que DataSet y sus objetos asociados
son prácticamente una base de datos relacional.
DataSet
Tables
Figura DataTable
12.2
1 Columns
Estructura
1
deDataSet
Objects. Rows
Constrolnts
Objeto Función
DataSet Representa la copia local y desconectada de datos, residentes en memo-
•
na.
Se requiere un objeto DataSet por cada modelo de datos a representar
de manera local.
DataTable Representa una tabla dentro del modelo de datos. Se organiza a través
de la colección Tables, que depende de DataSet.
Se requiere un objeto DataTable por cada tabla del modelo de datos a
representar de manera local.
282 Alfaomega
SYNAPS PREMIUM
Unidad 12: Explotación de Datos usando ADO.NET
Const raint Representa una restricción de valor único o llave foránea, que aplica a
una tabla determinada. Se organiza a través de la colección Con s trai -
nt s , que depende de DataTable.
Se requiere un objeto Constrai nt por cada por restricción de valor
único (generalmente usadas por las llaves primarias, aunque no nece-
sariamente), y también uno por cada llave foránea definida en el mode-
lo de datos a representar de manera local.
Como todas las colecciones, se puede referir el contenido a través de Items, o bien, seña-
lando el identificador de elemento que corresponda, de manera explícita.
Alfaomega 283
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Las bases de datos conectadas se recomiendan para aquellas aplicaciones en donde los
datos actualizados en tiempo real son críticos, en donde se tienen usuarios concurrentes, y
donde la información debe estar actualizada para todos todo el tiempo, como puede ser un
sistema bancario, un sistema de control de la producción, o un sistema financiero para el
control de movimientos en la bolsa.
La forma de trabajo es muy similar a la forma en que trabaja actualmente el modelo cliente
-servidor.
Figura 12.3 (
O Se establece conexión
Flujo de
trabajo en
( 8 Se hace requerimiento
modo
conectado
G) Envía respuesta )
Atiende Cierra
.'
conex1on.
requerimiento
Las base de datos desconectadas se recomiendan para aquellas aplicaciones donde la ac-
tualización de datos que realizan los usuarios no es necesariamente concurrente, donde no
se requiere la información actualizada t odo el tiempo, y donde se tiene pocos recursos de
cómputo y almacenamiento. Por ejemplo, en el caso de una agenda en línea, correo elec-
trónico, control de gastos personales, y en fi n, toda la gama de aplicaciones ideales para
dispositivos móviles, tales como celulares o palm-tops.
La forma en que trabaja el esquema conectado es muy distinta a la forma de trabajar clien-
te - servidor. De inicio, no es necesario que exista un almacén de datos, aunque lo común
.
es que si' exista.
En este esquema:
1. Se realiza una conexión, de igual forma que en esquema conectado.
Alfaomega 285
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Figura 12.4
! ( O Se establece conexión
'
~ ( 8 Se hace requerimiento
A .
'V Env1a respuesta
)
Se almacenan
Atiende
dato localmente
requerimiento
Se cierra
conexión
( 0 se establece conexión
Se cierra
conexión
+--------- l Se trabajan
datos localmente
0
Se aplican cambios de
datos locales en la base
de datos
ran manejar bases de datos. En el caso de las aplicaciones Web, las referencias ya están
establecidas a nivel servidor.
Los espacios de nombres relacionados con ADO.NET son Jos siguientes:
System.Data.Common Clases de utilería y de interfaz, que son utilizadas por los contro-
Jadores de datos .NET
Dependiendo de la base de datos a la que se quiera enlazar, deberán importarse más espa-
cios de nombres, que serán específicos de cada cliente. En general, no deberá preocuparse
por importar Jos espacios de nombres, si es que realiza las actividades desde Visual Studio.
Esto permitirá que no sea necesario especificar cada referencia al modelo de objetos de
conexión OleDb a través de nombres calificados.
Para la conexión, será necesario que codifique, en un bloque de código declarativo, la pro-
gramación ADO.NET típica para una conexión de este tipo.
Generamos la instancia de OleDbConnection, especificamos la cadena de conexión, y
abrimos la conexión:
1 Dim Conecta As New OleDbConnection()
2 Conecta. ConnectionString="Provider=M icrosoft. Jet. OLEDB. 4. 0;" & _
3 ''Data Source=pubs.mdb;''
4 Conecta.Open()
Alfaomega 287
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Las conexiones abiertas por este medio deberán cerrarse a través del método Close.
Imports Namespace="System.Data"
Import Namespace="System.Data.S LClient"
Esto permitirá que no sea necesario especificar cada referencia al modelo de objetos de
conexión SQLClient a través de nombres calificados.
Para la conexión, será necesario que codifique, en un bloque de código declarativo, la pro-
gramación ADO.NET típica para una conexión de este tipo.
Generamos la instancia de SqlConnection, especificamos la cadena de conexión, y abri-
mos la conexión:
1 Dim Conecta As New SqlConnection()
2 Conecta. ConnectionString="Data source=Aprenda; " & _
3 ''Initial catalog=Pubs;" & _
4 ''User Id=sa;'' & _
5 ''Password=secreto;''
6 Conecta.Open()
Las conexiones abiertas por este medio deberán cerrarse a través del método Clase.
Imports Namespace="System.Data"
Import Namespace="System.Data.OracleClient"
Esto permitirá que no sea necesario especificar cada referencia al modelo de objetos de
conexión Oracle a través de nombres calificados.
Para la conexión, será necesario que codifique, en un bloque de código declarativo, la pro-
gramación ADO.NET típica para una conexión de este tipo.
Generamos la instancia de OracleConnection, especificamos la cadena de conexión, y
abrimos la conexión:
1 Dim Conecta As New OracleConnection()
2 Conecta.ConnectionString="User Id=SYSTEM;" & _
3 "Password=secreto;" &
4 "Data Source=AVBNET;"
S Conecta.Open()
Las conexiones abiertas por este medio deberán cerrarse a través del método Close.
Alfaomega 289
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
3. Datalist
4. DropDownlist
S. DataGrid
No todos los objetos permiten enlazado de dato complejo; el enlazado complejo es posible
gracias a un conjunto de propiedades que Jo permiten; sólo aquellos objetos que posean
dichas propiedades podrán disponer de la funcionalidad del enlazado complejo.
Algunas de esas propiedades se muestran a continuación:
roysched
stor_id
«d_num
«d_date
Pmploypp
<1:'1
paytenns fl ...,_Id
fl We.Jd rn.me
nH
n.me
jobjd
totles
jobJYI
fl We_id pub.Jd
We f*e_date
type
fl st« _id ~-id
st«_name
i!===- ·-j price
advance
stor_address
clty royalty
ytd_sales
state l"h'
zlp notes
pubdate 11 job_id
job_desc
pub ooofu mln_lvl
max_ivl
11 pubjd
lago
pr_lnfo
t otlr.uothnr
Alfaomega 291
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
1. Para este ejercicio, debe contar con una instancia de SQL Server trabajando en su
computadora. De dicha instancia, usted debe saber lo siguiente:
a. Nombre de la instancia: - - - - - - - (KNOWLEDGEMGR)
b. Nombre de la base a utilizar: Pubs
c. Cuenta para acceder a la base de datos: (sa)
d. Contraseña para acceder a la base de datos: (secreto)
nos conectaremos con SQL Server. Desde luego, usted podrá hacer la
selección más conveniente, en su momento.
d. Presione Continue.
S. Aparecerá la ventana Add Connection.
a. Vea cómo en Data source se tiene el valor de Microsoft SQL Server
(SqlClient), lo cual es correcto porque nos enlazaremos a una base de
datos SQL Server. En caso de que se tratara de otra base de datos, sería
necesario modificar el data provider.
b. En Server Name, especifique el nombre de la instancia. KNOWLEDGEMGR, en el
caso del ejercicio.
c. En Log on to the server, seleccione Use SQL Server Authenticcation.
i. En User name, escriba sa.
ii. En Password, escriba se e reto.
d. Marque Save my password.
e. En Connect to a database, seleccione Selector en ter a database name, y
seleccione la base de datos Pubs, que es con la cual vamos a trabajar.
f. Finalmente, haga die en Test Connection. Si todo está bien, aparecerá un
mensaje que dice Test connection succeeded. En ese caso, haga die en
Ok.
g. Observe que en Database Explorer se ha agregado un nodo con la conexión
que acabamos de crear. Si expande la jerarquía, verá que Visual Studio hace
un enlace con SQL Server, dando lugar a un ambiente integrado de
desarrollo.
6. ¿Qué hemos hecho hasta aquí? Hasta aquí, hemos definido una conexión a la base
de datos, lo que abre un canal para que nuestras aplicaciones tengan acceso a una
base de datos física.
DI WBVBVS2012.12.01- Conexion.wmv
e) Creando un DataSet para consumo de datos
7. Ahora crearemos una aplicación que nos permita entender el consumo de datos
desde aplicaciones Windows. Al final, nuestra aplicación deberá lucir como sigue:
Alfaomega 293
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
• FO<ml
1 of 14 • •1 9 X
20. Nuestra tarea ahora es preparar al Dataset para que tome datos del almacén físico,
y que ponga esos datos a disposición de Jos objetos de la interfaz que lo requieran.
21. Habrá objetos que utilicen los datos que posea el Dataset, es decir, se enlazarán con
el Dataset para consumir los datos que contiene. El objeto que gestionará el enlace
de los diferentes objetos con el Dataset se llama BindingSource.
a. En Toolbox, seleccione el Tab Data, y arrastre un control BindingSource a la
interfaz. Se agregara con un nombre por omisión: BindingSourcel.
b. El lugar donde lo coloque es irrelevante, pues no es un control que se vea en
tiempo de ejecución. Sólo se colocará una representación visual del objeto
Alfaomega 295
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
en la parte baja del área de trabajo de Visual Studio, a fin de que pueda
trabajar con él.
c. Seleccione el objeto BindingSourcel, y presione F4 para editar sus
propiedades.
d. Busque la propiedad DataSource. Haga clic en el combo para asignar valor.
Extienda la jerarquía Other Data Sources - Project Data Sources, y seleccione
DataSetl.
e. Luego seleccione la propiedad DataMember, que permite seleccionar qué
elemento del Dataset es el que deseamos consumir. A esa propiedad
asígnele el valor de }obs.
22. Lo primero que debemos entender es que el Dataset es una estructura estándar
basada en XM L, y que los almacenes de datos que le proporciona información
pueden ser muy diversos (SQL Server, Oracle, Access, MySQL, etcétera), cada quién
con sus propias maneras de almacenar y manipular los datos.
23. En la parte baja de Visual Stu dio aparecen tres objetos: Dataset y DataBinding
nosotros los colocamos; el tercero de los objetos es un TableAdapter que Visual
Studio agregó automáticamente, porque es necesario.
a. Los objetos de tipo TableAdapter tienen la función de servir de interfaz o
traductor entre el almacén físico de datos y el Dataset.
b. En resumen, se encargan de hacer compatible al almacén físico con el
Dataset.
24. Aunque lo más lógico sería primero definir TableAdapter y luego BindingSource, se
hace en este orden para no tener que hacerlo nosotros, y que Visual Studio defina
por nosotros el objeto al percatarse de su necesidad.
25. ¿Qué hemos hecho hasta aquí? Visual Studio creo un TableAdapter que permitirá
tomar datos de la tabla Jobs del almacén físico, y hacerlos compatibles con la tabla
Jobs que está en Dataset: con esto, Dataset puede llenarse de datos del almacén
físico. Cuando ya tenga datos, los diferentes objetos de la interfaz podrán consumir
los datos del Dataset, utilizando para ello el objeto BindingSource, que hemos
creado.
DI WBVBVS2012.12.03 - BindingSource.wmv
aJ WBVBVS2012.12.04- BindingNavigator.wmv
31. El enlazado complejo simple es un enlazado donde participa un solo dato a la vez.
32. Agregue un objeto TextBox, abajo del BindingNavigator.
33. Amplíe el ancho del cuadro de texto.
34. En Properties Windows busque (Databindings), expanda la jerarquía hasta que vea
la propiedad Text (campo de mostrado de datos).
35. Modifique el valor de la propiedad. Abra la jerarquía de BindingSourcel, y
seleccione el campo job_desc.
36. Modifique la propiedad Enabled, estableciendo el valor de False, para que sea un
campo de sólo lectura.
37. Guarde su trabajo e inicie depuración (FS).
38. Vea cómo aparece el dato correspondiente en el cuadro de texto.
39. Cuando navega utilizando BindingNavigation, el contenido del cuadro de texto
cambia también.
Alfaomega 297
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
que se cargan los datos, la actualización de los objetos que están enlazados es
automática. Cierre el código.
41. ¿Qué hemos hecho hasta aquí? En tiempo de ejecución, nuestros objetos
consumen los datos de un Dataset, a través de un objeto BindingSource que nos
permite llegar a un objeto Dataset que se puebla de datos gracias a la
intermediación de un TableAdapter que utiliza una conexión previamente definida.
FIN DEL EJERCICIO*
•:;} Forml
[ Conectar a ]
Esperando conextón
Alfaomega 299
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
20.. NET provee diferentes constructores para los objetos, de tal manera que hay
variantes que permiten una programación más compleja o menos compleja.
21. En el código anterior, las líneas 6 y 7 se pueden concentrar en una sola:
Dim Cnn As SqlConnection
Cnn = New SqlConnection()
Ahora bien:
Cnn = New SqlConnection()
Cnn.ConnectionString = es
Alfaomega 301
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
a:} Forml
~os.
Empleados:
Alfaomega 303
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
22. Haga doble die en cboPuestos, para editar el procedimiento de evento que ocurrirá
cuando se cambie el valor en el combo. Escriba la siguiente línea, que provocará
que, al seleccionar un elemento en el combo, se nos informe la clave asociada al
elemento seleccionado.
lblPuesto.Text=cboPuestos .Sel ectedValue
23. Haga doble die en cboEmpleados, para editar el procedimiento de evento que
ocurrirá cuando se cambie el valor en el combo. Escriba la siguiente línea, que
provocará que, al seleccionar un elemento en el combo, se nos informe la clave
asociada al elemento seleccionado.
lblEmpleado . Text=cboEm leado.SelectedValue
Alfaomega 305
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
* .J 1
~--------~--------
1
~~--------~------- -
~ 1
"'
Competencias:
1. Conocer el marco teórico del
desarrollo multicapa.
2. Conocer la forma de implementar
cada una de las capas en la
tecnología más apropiada para
ello.
3. Conocer la forma en que Visual
Studio integra todas las
herramientas necesarias para el
desarrollo multicapa.
Evaluacl6n:
1. Proporcionar un caso Evidencia de
en el cual se
aprendizaje:
desarrolle una
l. Capacidad explicar en qué
aplicación multicapa. consiste el modelo multicapa.
2. Capacidad de desarrollar la capa
de datos, en SQL Server, desde
Visual Studio.
3. Capacidad de desarrollar la capa
de presentación utilizando
lenguajes .NET.
4. Capacidad de desarrollar la capa
de presentación basada en
Windows, desde Visual Studio.
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Figura 13.1
Modelo ( ) ( ) ~
Multicapa o
~
Capa de presentación capa de datos
Web Engine (liS) capa de procesamiento SQL Server
ASP.NfT Services .NfT Framework Bas~s d~ datos
Web Site 1Aplicativos CLR/BCL Stored Procedures
Clas~s y programas
1
Francisco Salazar (2006). Aplicaciones multicapa y Objetos de Negocios usando tecnología
Microsoft.NET. Aprenda Ediciones. México.
Alfaomega 309
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Para el ambiente Web, lo que generalmente nos encontramos en esta capa es:
1. Un Servidor que tiene instalado un motor de ejecución Web que le permite recibir peti-
ciones (HTTP Request), y responderlas. En el caso de Microsoft, ese motor es liS (In-
ternet lnformation Server).
2. .NET Fremwork, que habilita los ASP.NET Web Services, que controlan el parsing y el
rendering de las páginas, hacen el manejo de estados, controlan el caché, y permiten el
diálogo entre páginas.
3. Los Web Sites, o aplicativos Web, propiamente, lo que representa páginas .aspx,
.master, web.config, archivos complementarios, etcétera.
Para el ambiente Windows, lo que generalmente nos encontramos en esta capa es:
1. Instalaciones locales de la plataforma .NET Framework, en versión compatible a la so-
portada por los aplicativos.
2. Una instalación local de los aplicativos.
En esta capa tiene poca importancia el lenguaje que se utiliza para desarrollar, pues el uso
de lenguaje se limita a mandar llamar clases y codificar comportamientos de los eventos.
Alfaomega 311
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfaomega 313
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
a) Conocimiento de la base
Alfaomega 315
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
~OWLEOGEMGR.pubs • dbo.stores
. ~N~ Oa~T~
¡- ·-.
! •'11 i stor _1d char("1)
¡_,_¡
stor _name varchar(10)
stor _addr!SS varchar(10)
dty varchar(20)
stll~ char(2)
zlp char(S)
Esta especificación nos dice mucha información que repercutirá en nuestra programación,
por ejemplo:
a) Podemos determinar los tipos de datos a utilizar en nuestros programas, que en
general son String.
b) Podemos determinar el dominio de los datos, que al ser St r ing, tienen que ver con
el número de posiciones a utilizar.
e) Podemos ver que, excepto la llave primaria, todos los campos pueden ser nulos, lo
que influirá en las validaciones que debemos realizar en capa de presentación.
Es importante tomar en cuenta lo siguiente: las capas deben guardar una concordancia
exacta en cuanto a los tipos y dominios de los datos.
Nunca está de más observar los datos que actualmente posea la tabla, para darnos una
idea en realidad de lo que almacena: Actualmente, la tabla tiene los siguientes datos.
Cl Reds [UJ- ~s 1
Ya que vimos la estructura y contenido de la tabla, nos resta ver un poco más allá: las
relaciones y dependencias de la tabla son las siguientes:
V ttor_ld
stor_nome
ttor_•dchss
d.y
state
Zlll
Alfaomega 317
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
318 Alfaomega
SYNAPS PREMIUM
Unidad 13: Multicapa con Visual Basic, Windows Applications y SQL Server
Alfaomega 319
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
( OK 1[ C•ncol
-
Output Window.
6 BEGIN
7 SET NOCOUNT ON
8 select stor id As IDTienda,
9 stor_name As NombreTienda,
18 stor_address As DireccionTienda,
11 city As CiudadTienda,
12 state As EstadoTienda,
13 zip As CPTienda
14 from stores
1S where stor_id = @stor_id
16 END
Alfaomega 321
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
OK 11 C.ncol J
'- - -
10. Vea en Output Window que aparece el resumen de la operación, entre ello, el valor
de retorno correspondiente a la acción realizada.
11. Ejecute ahora StoresRead, usando como valor de búsqueda el9000 que acaba de
agregar. Vea cómo el dato está en la base.
12. En Server Explorer, dentro del nodo de la conexión, localice el nodo Tables.
13. Expanda la jerarquía y ubique la tabla stores.
14. Seleccione el nodo, y utilizando el menú de contexto, seleccione Show Table Data.
15. Compruebe que el registro que acaba de agregar al probar el stored procedure, está
ahí.
16. Ejecute nuevamente el procedimiento almacenado StoresWrite.
17. En stor _address, modifique el valor, yasigne Ave. Leones 1eee.
18. Recuerde que el procedimiento almacenado, en caso de encontrar el registro, lo
único que hace es modificar los atributos no primos, así que debió haberse
actualizado.
19. Revise nuevamente los datos de la tabla, y compruebe la modificación.
a. Los datos estarán desactualizados, por lo que deberá seleccionar todos los
registros y ejecutar la consulta nuevamente (CTRL+R).
b. Vea cómo ahora sí aparecen los datos actualizados.
20. Cierre el tab que muestra los datos de la tabla.
Alfaomega 323
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
17 begin
18 -- No tiene dependencias con otras tablas, se puede borrar.
19 delete stores where stor_id = @stor_id
29 Select 1 As ValorRetorno
21 end
22 else
23 begin
24 -- Tiene dependencias y no puede borrarse
25 Select 3 As ValorRetorno
26 end
27 end
28 END
Fuimos cuidadosos en no hacer referencias a la base datos, a sus tablas y campos. De eso se
trata: el aislamiento entre capas debe producir ese efecto. Ni la capa de procesamiento ni
la capa de presentación deben saber nada de la capa de datos, más que los objetos puestos
a disposición para aprovechar funcionalidad (stored procedures). Por cuestión de
seguridad, es muy sano que nadie, más que los responsables de la base de datos, conozcan
de su estructura.
Alfaomega 325
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
a. Tome en cuenta que cada propiedad se apoya en una variable de trabajo que
permite el manejo de valores al interior de la clase, que posteriormente será
entendido por los elementos externos a través de las propiedades.
b. En Code Snippet se encontrará en la primera definición
(newPropertyValue), que es precisamente la variable de trabajo de su
propiedad.
c. Estando sobre newPropertyValue, escriba piDTienda.
d. Vea cómo en todas las partes donde se encontraba newPrope rtyValue, se
colocará piDTienda.
e. Presione TAB hasta que el cursor se coloque en NewProperty.
f. Estando en NewProperty, escriba IDTienda.
g. Desde este momento, al interior de la clase, manejar la variable piDTienda,
le proporcionará valor a la propiedad a la que sirve, es decir IDTienda.
h. Para los programas que utilicen la clase para la creación de objetos,
piDTienda no será visible, ya que sólo tendrán acceso a la propiedad
IDTienda.
Alfaomega 327
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
23 End Set
24 End Property
25
26 Private pDireccionTienda As String
27 Public Property DireccionTienda() As String
28 Get
29 Return pDireccionTienda
3e End Get
31 Set(ByVal value As String)
32 pDireccionTienda = value
33 End Set
34 End Property
35
36 Private pCiudadTienda As String
37 Public Property CiudadTienda() As String
38 Get
39 Return pCiudadTienda
4e End Get
41 Set (ByVal value As String)
42 pCíudadTienda = value
43 End Set
44 End Property
45
46 Prívate pEstadoTíenda As Stríng
47 Public Property EstadoTíenda() As Stríng
48 Get
49 Return pEstadoTíenda
se End Get
51 Set(ByVal value As 5tring)
52 pEstadoTienda = value
53 End Set
54 End Property
55
56 Prívate pCPTíenda As String
57 Public Property CPTienda() As String
58 Get
59 Return pCPTienda
Ge End Get
61 Set (ByVal value As Stríng)
62 pCPTienda = value
63 End Set
64 End Property
65
66 Prívate pConnectionString As String
67 Public Property ConnectinString() As String
68 Get
69 Return pConnectionString
7e End Get
71 Set (ByVal value As String)
72 pConnectionString = value
73 End Set
74 End Property
75
76 Private pValorRetorno As Integer
77 Public Property ValorRetorno() As Integer
78 Get
79 Return pValorRetorno
se End Get
81 Set (ByVal value As Integer)
82 pValorRetorno = value
328 Alfaomega
SYNAPS PREMIUM
Unidad 13: Multicapa con Visual Basic, Windows Applications y SQL Server
83 End Set
84 End Property
85
86
87 End Class
15. Ahora codificaremos el método leer(), que nos permitirá leer registros de la base
de datos.
16. Para entender mejor lo que hace este método, le recomendamos que tenga en la
mente con toda claridad qué es lo que hace el stored procedure StoresRead.
17. Después de la última propiedad que agregó, codifique lo siguiente:
1 Sub Leer()
2 Dim cnn As New SqlConnection (pConnectionString)
3 cnn.Open()
4 Dim cmd As New SqlCommand (String .Format( "EXEC StoresRead '{0}'" , piDTienda), cnn)
S Dim dr As SqlDataReader
6 dr = cmd.ExecuteReader()
7 If dr.HasRows Then
8 If dr.Read() Then
9 pNombreTienda = dr( "NombreTienda" )
10 pDireccionTienda = dr( ''DireccionTienda'' )
11 pCiudadTienda = dr( ''CiudadTienda'' )
12 pEstadoTienda = dr( ''EstadoTienda'' )
13 pCPTienda = dr( ''CPTienda'' )
14 End If
15 Else
16 pNombreTienda = ""
17 pDireccionTienda = ""
18 pCiudadTienda = ""
19 pEstadoTienda = ""
20 pCPTíenda = ""
21 End If
22 dr.Close()
cnn. Close ()
End Sub
Alfaomega 329
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
19. Ahora codificaremos el método Escribi r (), que nos permitirá escribir en la base
de datos.
20. Para entender mejor lo que hace este método, le recomendamos que tenga en la
mente con toda claridad qué es lo que hace el stored procedure Stores Wri te.
21. Después del último método que agregó en la clase, agregue otra. Codifique lo
siguiente:
1 Sub Escribir()
2 Dim cnn As New SqlConnection (pConnectionString)
3 cnn.Open()
4 Dim cmd As New SqlCommand (String.Format( _
5 ''EXEC StoresWrite '{e}','{l}', '{2}', '{3}','{4}', '{5}''' , _
6 piDTienda, pNombreTienda, pDireccionTienda, pCiudadTienda, pEstadoTienda, _
7 pCPTienda), cnn)
8 pValorRetorno = Cint (cmd.ExecuteScalar())
9 cnn.Close()
1e End Sub
Alfaomega 331
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
24. Ahora codificaremos el método Eliminar(), que nos permitirá eliminar registros
de la base.
25. Para entender mejor lo que hace este método, le recomendamos que tenga en la
mente con toda claridad qué es lo que hace el stored procedure StoresRemove.
26. Después del último método que agregó en la clase, agregue otra. Codifique lo
siguiente:
1 Sub Eliminar()
2 Dim cnn As New SqlConnection (pConnectionString)
3 cnn.Open()
4 Dim cmd As New SqlCommand (String .Format( "EXEC StoresRemove '{0}'" , piDTienda), cnn)
S pValorRetorno = Cint (cmd.ExecuteScalar())
6 cnn.Close()
7 End Sub
27. En esencia, hace lo mismo que el método Escribir(), a diferencia que ejecuta un
diferente stored procedure, y por tanto, utiliza diferentes parámetros.
28. ¡Felicidades! Ha concluido la capa de procesamiento.
a. Dese cuenta que no necesitó saber absolutamente nada de información de la
base de datos, ni de sus tablas ni de sus campos.
b. Sólo bastó que supiera el nombre de los stored procedures, los parámetros
que requieren y los tipos de datos que usan, y qué retornan.
FIN DEL EJERCICIO*
ID de la Tienda: [® ~scar ]
Nombre de la Tienda:
Dirección de la Tienda:
Oudad:
Estado:
Código Postal:
ITooiStripStatuslabelll J3 ...
•
••
~~~~~~~~~~-
-
----·-
1. Todo este texto lo ha venido preparando para la elaboración de una buena capa de
presentación, lo que incluye controles, validaciones, uso de fuentes, etcétera. No nos
detendremos diseñando cosas que ya puede desarrollar usted por su cuenta, sino
que explicaremos la forma en que se integra una interfaz al esquema multicapa.
a. En su CD de compañía vienen pre-construido el proyecto AgregaTiendas, y
se encuentra en el directorio de los archivos complementarios que
corresponden a este capítulo.
b. Desde el sistema operativo, utilice Windows Explorer y copie el directorio
AgregaTiendas al directorio de su solución (Ejercicios), que es donde se
encuentran todos los directorios de los diferentes proyectos que ha
desarrollado.
c. El hecho de que copie el directorio no implica que Visual Studio reconozca el
proyecto.
d. Agregue el proyecto a la solución.
i. Seleccione el nodo principal de su solución, invoque el menú de
contexto, y seleccione la opción Add - Existing Project.
Alfaomega 333
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
5. Casi todo lo que contiene este formulario puede hacerlo usted mismo: Agregar
objetos Label, MaskedTextBox, Button, y modificarle sus propiedades.
6. Una de las novedades de esta interfaz, es que incluye imágenes en los controles
Button, y una barra de estado, lo cual se hace de la siguiente manera (no es
necesario que lo haga, pues ya está hecho; sólo se menciona para que sepa cómo es
que llegamos a ese resultado).
a. En su CD se encuentran archivos de imagen que utilizará. Copie los archivos
Add.png, Find.png, Remove.png, y Up.png.
b. Seleccione el nodo principal de su proyecto, invoque el menú de contexto y
seleccione Add - New Folder, y asigne el nombre lmagenes.
c. Seleccione el Folder que acaba de agregar, invoque el menú de contexto, y
pegue las imágenes que copió.
d. En Toolbox, busque el tab Components, y ubique el componente ImageList;
arrastre el componente a la interfaz, para agregarlo. Como es un elemento
que no se ve en tiempo de ejecución, se agregará en la parte baja del área de
trabajo.
Alfaomega 335
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
9. Se agregaron otros elementos que tienen que ver más con la lógica de
programación que con el lenguaje.
a. Se tiene un atributo primo y cinco atributos no primos.
b. El atributo primo nos sirve para invocar los datos en función a la llave
. .
pnmana.
c. O está disponible el atributo primo, o los atributos no primos, pero no
ambos.
d. La lógica del programa es la siguiente:
i. Se proporciona el atributo primo, y se busca.
n. Si se encuentra un registro coincidente, se recupera la información de
la base de datos, y se actualizan los atributos no primos. En ese caso,
hacer die en Guardar actualiza los atributos no primos, y hacer die en
Eliminar, elimina el registro, porque existe.
m. Si no se encuentra un registro coincidente, los atributos no primos no
tienen valor y son complementados por el usuario. En ese caso, hacer
die en Guardar agrega un nuevo registro. Eliminar ni siquiera está
disponible, porque el registro ni existe.
iv. En todos los casos, cuando se está editando los atributos no primos,
hacer die en Otro hace que los campos se limpien, y que se pase a
trabajar con el atributo primo, para una nueva búsqueda.
e. Vea los procedimientos NoPrimos, NoPrimosOff, Primos, PrimosOff, además
de Load y TextChanged, que proveen ese comportamiento.
10. Ya se desarrolló una clase que actuará como librería de todas aquellas tareas que
tengan que ver con la capa de procesamiento de la aplicación, sin embargo, no está
disponible para una página ni para su código sino hasta que se establece una
referencia que permita utilizarla.
11. Para dejar disponible la clase de la capa de presentación desde Visual Studio:
a. Seleccione el nodo principal del proyecto AgregaTiendas.
b. Invoque el menú de contexto y seleccione Add Reference, con lo que
aparecerá Reference Manager.
c. En la jerarquía, seleccione Solution- Projects.
d. Seleccione TareasBD, asegurándose que se marca el cuadro de verificación, y
presione Ok.
i. Para simplificar más el código, vaya al inicio del programa y agregue mas
namespaces.
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
12. Una vez que se ha importado una librería, las clases que contiene están disponibles
para su uso a través de un objeto.
13. Edite el código del formulario. Dentro de la clase, antes de cualquier procedimiento,
codifique la declaración e instanciación de la variable que nos apoyará en el manejo
de la clase TareasBD.
a. Llámele a la variable MiObjeto.
b. Califique la variable como Publ ic, a fin de que esté disponible para
cualquier procedimiento dentro del programa.
c. A partir de este momento, todas las propiedades y métodos que codificamos
en capa de procesamiento estarán disponibles a través del objeto.
d. La línea a agregar sería como sigue.
Alfaomega 337
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfaomega 339
SYNAPS PREMIUM
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfaomega 341
Aprenda Practicando Visual Basic usando Visual Studio 2012
El modelo de datos para manejar esa necesidad tiene los siguientes elementos:
Las existencias se controlan a través de una tabla denominada Existencias, que indica
cuántos pares de zapatos se tienen de una determinada combinación de modelo, tamaño y
color.
Algo así como:
2782 0312 BC 20
2782 0312 NG 4
2732 a4aa Be e
Alfaomega 343
Aprenda Practicando Visual Basic usando Visual Studio 2012
El último dato del tipo de movimiento es crucial, pues la Cantidad de zapatos involucrada
en el movimiento, se multiplicará por este factor, mismo que se le sumará a la existencia.
Dese cuenta que, si el tipo de movimiento es una salida, el factor es -1, o sea que si la
existencia es 10, y el movimiento es salida por una Cantidad de 2, se multiplicará por -1 (=
-2), que al sumarse a la existencia dará la nueva existencia: 8.
A grandes rasgos, el Diagrama de Entidad Relación del modelo quedaría como sigue:
T!pOSMOV
~N._ l)aQ Type Alowtt.ll!s
!DriDOMov dlar{4) r.:J
o-~v varcNr{lO) o
lmpaao El
~""
o
Colecciones
CoumnN..,. o~u Type Alow Nulls 1 Movimientos
IOColecaon chal{6} E] Alo w l'lul!s
' OCo1ecrion vatdw(40} []
ColtmnNlllTW
IOMov~ lnt
O.a. Type
Modelos
Clollr-n ~ ...... Data -ype Alow N-.;ls 1
ID"'ooelo dlar{S) o 1
~ vw..r{40) E] 1<· ~
IDColrcm dlar{6) E]
o Exitencias
., Coltmn Name
IDMoc:lelo cNt(S)
Data Type Alow Nuls
fJ
IOTaJNno cNt(4) f]
'' IOColcr cNt(2) el
Existencia IRt o
. EJ
Tamanos
CoUmnName Data Type Alow NIJis
r, IDTamano dw(4) n
OTaJNno vitdll<(30} El
[J
1
Colores
~N._ Data Type Alow Nul!s
IOColcr chal(2) o
OCoior vw..r{30) o
El
1
'
Alfaomega 345
Aprenda Practicando Visual Basic usando Visual Studio 2012
Alfaomega 347