www.FreeLibros.me
www.FreeLibros.me
Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005
www.FreeLibros.me
www.FreeLibros.me
Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005 Mtro. José Felipe Ram írez Ram írez M aster en Informática Adm inistrativa ITIL Certified Trainer Instructor C A P-D EV Nivel 3 Facultad de C ontaduría Pública y Adm inistración Facultad de Ingeniería Mecánica y Eléctrica Universidad A u tó n o m a de N uevo León, M éxico
R EV ISIÓ N TÉCNICA Mtro. Francisco Salazar Universidad Autónoma de Nuevo León, México Mtro. César Tello Univesidad Autónoma de Nuevo León, México
PEARSON <§> México • Argentina • Brasil • Colombia • Costa Rica • Chile • Ecuador España • Guatemala • Panamá • Perú • Puerto R ico • Uruguay • Venezuela
www.FreeLibros.me
/
Datos de catalogación bibliográfica
RAMÍREZ, JOSÉ FELIPE. Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005 PEARSON EDUCACIÓN, México, 2007 Área: Ingeniería y Computación ISBN: 978-970-26-0912-4 Formato: 18.5 x 23.5 cm
Páginas: 648
Editor: Pablo Miguel Guerrero Rosas e-mail:
[email protected] Editor de Desarrollo: Bemardino Gutiérrez Hernández Supervisor de Producción: José D. Hernández Garduño PRIMERA EDICIÓN, 2007 D.R. © 2007 por Pearson Educación de México, S.A. de C.V. Atlacomulco 500-5to. piso Col. Industrial Atoto 53519, Naucalpan de Juárez, Edo. de México E-mail:
[email protected] Cámara Nacional de la Industria Editorial Mexicana. Reg. Núm. 1031. Prentice Hall es una marca registrada de Pearson Educación de México, S.A. de C.V. Reservados todos los derechos. Ni la totalidad ni parte de esta publicación pueden reproducirse, regis trarse o transmitirse, por un sistema de recuperación de información, en ninguna forma ni por ningún medio, sea electrónico, mecánico, fotoquímico, magnético o electroóptico, por fotocopia, grabación o cualquier otro, sin permiso previo por escrito del editor. El préstamo, alquiler o cualquier otra forma de cesión de uso de este ejemplar requerirá también la autorización del editor o de sus representantes. ISBN 10: 970-26-0912-7 ISBN 13: 978-970-26-0912-4 Impreso en México. Printed irt México 1 2 3 4 5 6 7 8 9 0 - 10 09 08 07
PEARSON cac
www.FreeLibros.me
C o n t e n id o Prólogo Agradecim ientos Com o utilizar este libro Parte 1 Plataforma .NET versión 2005
Capítulo 1 Arquitectura de la plataforma .NET Definición de la plataforma .NET Capas principales de la plataforma .NET Capa de lenguajes de .NET Lenguajes.NET .NET Framework Impacto de .NET Framework en los sistemasoperativos Ventajas que brinda la infraestructura de .NET Convivencia de .NET y C O M M apa mental del capítulo Terminología Preguntas Examen rápido del capítulo Capítulo 2 .NET como multiplataforma de desarrollo Determinación de la plataforma .NET requerida Productos de plataforma .NET Desarrollo de aplicaciones en .NET usando SD K Tecnologías cubiertas en este libro
www.FreeLibros.me
vii xv xvii 1
3 5 7 9 10 11 27 28 29 31 32 33 34 35 37 39 49 53
vi
C on tenido
Mapa mental del capítulo Terminología Preguntas Examen rápido del capítulo Capítulo 3 Técnicas de desarrollo con Visual Studio 2005 Fundamentos de desarrollo con Visual Studio Elementos de sintaxis en Visual Basic Mapa mental del capítulo Terminología Preguntas Examen rápido del capítulo Parte 2 Fundamentos de programación en Visual Basic
55 56 56 58 59 61 67 92 93 93 94 95
Capítulo 4 Variables, arreglos y tipos de datos Variables Conversión de datos Acceso a datos Valué type y Reference type Strong Typing Manejo elemental de variables Estructuras y enumeraciones Mapa mental del capítulo Terminología Preguntas Examen rápido del capítulo
97 99 105 107 109 112 133 135 136 136 138
Capítulo 5 Espacios de nombres y desarrollo de librerías Espacios de nombres (namespaces) Uso de espacios de nombres Creación de namespaces propios Alias para los espacios de nombres Independencia de los ensamblados Referencias M apa mental del capítulo Terminología Preguntas Examen rápido del capítulo
139 141 148 149 150 151 151 170 171 171 173
Capítulo 6 M anejo de operadores Operadores aritméticos Operadores de asignación
175 177 178
www.FreeLibros.me
C ontenido
Operadores comparativos Operadores lógicos Prioridad entre operadores Mapa mental del capítulo Terminología Preguntas Examen rápido del capítulo
vi i
180 185 189 200 201 201 203
Capítulo 7 Estructuras de decisión y control Estructuras de decisión Estructuras de control Estructuras envolventes y anidadas Mapa mental del capítulo Terminología Preguntas Examen rápido del capítulo
205 207 211 215 227 228 228 230
Capítulo 8 M anejo estructurado de excepciones Errores y Excepciones M anejo estructurado de excepciones Try...Catch...Finally Filtrado de excepciones Lanzamiento de excepciones propias M apa mental del capítulo Terminología Preguntas Examen rápido del capítulo
231 233 234 235 241 246 249 250 250 252
Parte 3 Programación orientada a objetos
Capítulo 9 Fundamentos de la programación orientada a objetos Términos básicos de POO Elementos esenciales de los objetos que permiten su programación Mapa mental del capítulo Terminología Preguntas Examen rápido del capítulo Capítulo 10 Clases, métodos y propiedades Definición de una clase Definición de propiedades
www.FreeLibros.me
253
255 257 265 275 276 276 278 279 281 281
viii
C on tenido
Creación de bibliotecas de clases (librerías) Condiciones para la utilización de las bibliotecas de clases M apa mental del capítulo Terminología Preguntas Examen rápido del capítulo Capítulo 11 Herencia y polimorfismo Herencia Estatutos auxiliares para el manejo de herencia y polimorfismo Polimorfismo M apa mental del capítulo Terminología Preguntas Examen rápido del capítulo Parte 4 Interfaces W in d ow s/W e b y Servicios W e b X M L
283 284 307 308 308 310 311 313 323 325 335 336 336 338 339
Capítulo 12 Desarrollo de aplicaciones W indow s Interfaz de usuario Desarrollo de interfaces basadas en objetos Jerarquía de clases relacionadas con controles Clasificación de los controles Enfoque (Focus) M apa mental del capítulo Terminología Preguntas Examen rápido del capítulo
341 344 345 349 355 363 392 393 394 396
Capítulo 13 Desarrollo de aplicaciones W eb con ASP.NET M otivos del auge de las aplicaciones W eb Requerimientos para el desarrollo de ASP.NET Procesamiento de páginas W eb en .NET Características de ASP.NET Elementos de una página W eb ASP.NET Controles comunes en aplicaciones W eb M apa mental del capítulo Terminología Preguntas Examen rápido del capítulo
397 399 400 402 403 410 419 439 440 441 443
www.FreeLibros.me
C ontenido
Capítulo 14 Servicios W eb X M L Servicios W eb X M L Infraestructura de operación de los Servicios W eb Elementos para la creación de un Servicio W eb X M L M apa mental del capítulo Terminología Preguntas Examen rápido del capítulo Parte 5 M anejo de bases de datos con ADO.NET
ix
445 447 453 454 463 464 464 466 467
Capítulo 15 Manejo de bases de datos con ADO.NET ADO .N ET Historia del acceso a los almacenes de datos Formas de trabajo con bases de datos en .NET Proveedores de datos de .NET Framework M odelo de objetos de ADO.NET Cóm o realizar la conexión Com m and DataReader M apa mental del capítulo Terminología Preguntas Examen rápido del capítulo
469 471 472 477 481 491 496 503 506 521 522 523 525
Capítulo 16 M anejo de bases de datos desde aplicaciones W indow s M odelo de objetos DataSet Alternativas para poblar de datos un DataSet DataAdapter DataSet M apa mental del capítulo Terminología Preguntas Examen rápido del capítulo
527 529 534 535 538 562 563 564 566
Capítulo 17 M anejo de bases de datos desde aplicaciones W eb Data Source Controls y Data Bound Controls M apa mental del capítulo Terminología
567 569 596 597
www.FreeLibros.me
C on tenido
X
Preguntas Examen rápido del capítulo Capítulo 18 Colecciones genéricas {generics)
597 599 601
Generics
603
Bloques de código usando generics
604
Colecciones genéricas
607
Ust
607
Queue
610
Stack
613
Dictionary
616
M apa mental del capítulo
619
Terminología
620
Preguntas
620
Examen rápido del capítulo
622
www.FreeLibros.me
A mi hermano Gil, Quien verdaderamente sabe escribir.
www.FreeLibros.me
www.FreeLibros.me
P r ó lo g o Este libro está compuesto por partes seleccionadas del curso de certificación Aprenda Practicando CAP-Dev 2005, código 2015: Aprenda Practicando Visual Basic 2005 y Vi sual Studio 2005 (www.aprendapracticando.com). Originalmente el curso se llamaba Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005, pero Visual Studio 2005 resultó ser un invitado con ganas de protagonizar. La herramienta es tan poderosa que muchas de las prácticas no requerían codificación por par te del desarrollador, de tal forma que daba lo mismo que el programa estuviera en Visual Basic, C# o J#; al final, el desarrollador ni se enteraba de la programación tras bambalinas. Entonces ya no era Visual Basic usando Visual Studio, sino Visual Studio usando Visual Basic; de ahí el cambio de nombre. El libro está dirigido a dos tipos de profesionales: (a) para el codificador minucioso que quiere entender los pormenores del lenguaje, las clases, sus miembros, las palabras reser vadas y las estructuras que permiten la creación casi artesanal de los programas; es decir, el profesional cuya curiosidad lo ha convertido en conocedor profundo del funcionamien to de las cosas, y (b) para el desarrollador profesional de alto rendimiento que casi siem pre dispone de menos tiempo del que necesita para generar los resultados que las empre sas le exigen, que no puede detenerse en los pormenores del lenguaje y que prefiere el uso de herramientas visuales y poderosas para crear soluciones efectivas en el menor tiempo posible. El objetivo de este libro es formar codificadores minuciosos y convertirlos en desarrolladores profesionales de alto rendimiento. Se buscan individuos que representen lo mejor de los dos mundos. Pero el propósito del libro no es tan simple como la frase “formar desarrolladores minucio sos pero efectivos”. Sería algo demasiado simple. Vamos más allá. Creo firmemente que el mundo en que crecemos encuentra muchas maneras sutiles de vol verse más complejo conforme se globaliza. Queremos hacer de nuestra vida un cortome traje feliz en donde todo transcurre tan rápido que nos olvidamos de que los planes de vi da a largo plazo también existen. Al oír las noticias del día me lamento al darme cuenta de que la violencia y la deshonesti dad forman un conjunto de aproximaciones sucesivas hacia un futuro que no quiero. Creo que el origen de todos los problemas es la gente que anhela mucho y actúa poco; creo que entre el anhelo personal y la acción que produce resultados hay abismos enormes, y la gen te quiere tender puentes rápidos y cómodos para ir de un punto a otro. A veces la materia
www.FreeLibros.me
xiv
Prólogo
prima para esos puentes son acciones delictivas y prácticas ilegales, siempre disponibles y a la mano, que lo enrarecen todo y terminan quitando más de lo que dan. Si no eres de las personas fáciles de seducir por el lado oscuro de la fuerza, sino que bus cas caminos lícitos y honestos para tender los puentes, te daráss cuenta de que resulta di fícil, costoso, complejo y cansado. Este libro es mi pequeña contribución para quien desea dedicarse profesionalmente a la lí cita y honesta actividad del desarrollo de aplicaciones. A quien desee llenar su cabeza de conocimientos para después comercializar sus habilidades y construir sus propios puentes, este libro lo iniciará de manera perfecta en el camino profesional del desarrollo en Visual Basic, utilizando la herramienta líder en la construcción de aplicaciones empresariales, así como la más demandada por los empleadores: Visual Studio. Dominar todos los temas de este libro garantiza la capacidad para el trabajo productivo con tecnologías Microsoft, cosa que ya ha sido un puente para tantos. Como dice Mario Benedetti: Para cruzarlo o para no cruzarlo, ahí está el puente.
www.FreeLibros.me
A g r a d e c im ie n t o s Los agradecimientos van, como siempre, para los indispensables en mi vida. Para Adriana, mi compañera vital, y para Sara, por ser la lucecita que ilumina mis sende ros. A toda mi familia en general, por estar ahí generación tras generación, demostrando que se puede ser lícito y honesto, y obtener los anhelos, uno a la vez. A mis compañeros Verónica López, Delia Briones, Rolando Martínez, Gustavo Valdés y Rey Manuel, por transformar algo simplemente soportable en algo disfrutable; a Paco Salazar, Jorge Hernández, Magda Garza, Paco Guevara, Heriberto González y todos los que creen que Aprenda Practicando está avanzando gracias a la calidad de los productos y su filosofía. A Víctor Manuel Ortega, que seguro llegará a mucho en su vida: gracias por la re visión línea a línea de los programas. Como siempre, mi agradecimiento especial a Isela Martínez por el delicado esmero que ha ce de un texto opaco un texto con algo de brillo. Siempre es bueno que los libros tengan un ángel de la guarda. Monterrey, Nuevo León, 2006.
www.FreeLibros.me
www.FreeLibros.me
Cómo utilizar este libro Descargue nuevos capítulos prácticas adicionales y archivos complementarios desde nuestro sitio AprendaPracticando.con
Este libro es una herramienta de aprendizaje dirigida a profesionales con especialidad en computación e informática, de ahí que analice desde elementos de programación hasta el manejo de bases de datos. El contenido está diseñado para que el lector, en un periodo de cuatro a seis meses, apren da a programar en Visual Basic y utilizar Visual Studio 2005 en forma intensiva. Se espe ra que, al final, el lector sea capaz de implementar sistemas de información con manejo de bases de datos utilizando SQL Server y en interfaz de consola, Windows y Web. De forma autodidacta y con una dedicación de tiempo completo a la realización de los ejer cicios del libro se puede aprender todo en dos meses. La configuración ideal de hardware para lograr las metas de aprendizaje de este libro es la siguiente: a) Un equipo de última generación con Windows XP Professional (o superior) con Service Pack 2 instalado, b) Internet Information Server 5.5 o superior instalado y fun cionando, c) .NET Framework 2.0 Redistributable Package, d) .NET Framework SDK 2.0, e) Visual Studio 2005 Standard Edition en inglés y f ) SQL Server 2000/2005 o superior. Los números sugieren la secuencia de instalación. Se recomienda que la cuenta con la que ingrese al sistema tenga privilegios de administrador y que forme parte del grupo de usua rios Debugger Users. También puede cubrirse la totalidad de los temas tomando el curso 2015 Programación en Microsoft Visual Basic 2005 y Visual Studio 2005, y 2016 Acceso a datos usando Micro soft Visual Basic 2005 y Visual Studio 2005, en algún centro autorizado Aprenda Practi
www.FreeLibros.me
xviii
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
cando. En el curso contará con un equipo personal especialmente configurado para el aprendizaje de los temas y con la guía de un instructor certificado CAP-Dev, quien le ase sorará en temas del curso además de orientarle con respecto a la forma en que puede em plear los conocimientos en casos reales que se encuentre desarrollando.
¿Cómo están compuestos los capítulos? Los capítulos del presente libro tienen los siguientes elementos que fomentan el aprendizaje: □ Presentación profesional en Power Point. Si utiliza el pre-
^
I
apvbvsxr. ppt
sente libro para la exposición de cátedra, la buena noticia es que no tendrá que desarrollar material de apoyo. Desde el sitio Web AprendaPracticando.com podrá descargar de manera gratuita las presentaciones profesionales en Power Point que hemos desarro llado. Estas presentaciones están sujetas a condiciones de uso. □ Objetivo general y objetivos particulares. Cada capítulo
tiene en su primera página un objetivo general, que representa la nueva habilidad que el lector habrá de adquirir al concluir el estu dio del capítulo; además señalará los objetivos particulares, que re presentan en secuencia lógica los focos de atención para alcanzar el objetivo general. □ índice por capítulo. Cada capítulo contiene su propio índice,
por lo que ubicar la información dentro de un capítulo resulta más fácil; además, el índice diferencia visualmente los temas de los ejercicios, a fin de que se puedan localizar estos últimos de mane ra más fácil. □ Notas informativas. Cada capítulo contiene notas adicionales
que proporcionan información que, en general, no está disponible en la documentación del producto. Además, se ofrecen referencias históricas de los productos, así como consejos y advertencias que pueden reducir la curva de aprendizaje. □ Videos explicativos. Cada capítulo puede hacer referencia a vi
deos explicativos que abordan temas que es más fácil tratar de ma nera visual y dinámica. Tanto las presentaciones profesionales en Power Point como el libro señalan el momento adecuado de su ex posición. Estos videos están disponibles en línea en el sitio Web AprendaPracticando.com.
www.FreeLibros.me
C ó m o utilizar este libro
xix
□ Figuras. Cada capítulo contiene figuras que complementan gráfi
camente los temas tratados; a veces una imagen dice más que mil palabras. ( ^ Visual Studio 200S Q Lo nuevo en v isua* Studio 2005. Visual Studio 2005 presen ta nuevas capacidades y herramientas de productividad. La sección Lo nuevo explica detalladamente cada una de estas adiciones.
*
□ Ejercicios detallados, con explicaciones línea por línea y ejecución guiada. La mayoría de los capítulos presenta ejerci
cios que permiten comprobar la teoría estudiada. Los ejercicios se desarrollan paso a paso y se complementan con código. Se inclu ye también una ejecución guiada, que explica lo que cada línea de código hace y los resultados que se obtienen. □ M a p a mental. Cada capítulo incluye un mapa mental que actúa
como resumen de los temas del capítulo. También es útil en el aprendizaje en grupo, para que aquellos que se atrasen en el segui miento de los temas puedan ponerse al día. Generalmente basta con analizar el mapa mental y repasar en el capítulo los términos clave que contiene. □ Terminología. .NET introduce muchos conceptos nuevos que es
necesario tener en mente. Cada capítulo tiene su propio índice de términos, lo que permite su rápida localización en el texto del capítulo. □ Preguntas. Al final de cada capítulo se incluye una serie de pre
guntas; si el lector las contesta correctamente, podrá tener la cer teza de haber aprendido los conocimientos presentados en el capí tulo. Algunas preguntas requieren análisis, más allá de la simple consulta, lo que despierta el razonamiento de la técnica que se es tá aprendiendo. □ Examen rápido. Es la evaluación rápida que se debe resolver
después de haber estudiado los temas y resuelto los ejercicios. Si entendió los objetivos de estudio y la terminología, llevó a cabo los ejercicios y las prácticas individuales, y respondió a las preguntas, es seguro que resuelva la evaluación correctamente, con conoci miento de causa respecto a todo. Partimos del concepto de que las personas son diferentes: cada individuo tiene su forma particular de aprender: algunos leyendo un resumen, otros por medio de un video, algunos leyendo, otros contestando preguntas, otros con la práctica, algunos más siendo cuestiona-
www.FreeLibros.me
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
XX
dos... Tratamos de brindar la mayor gama de herramientas con el fin de que cada quien aprenda como quiera; lo importante es que lo haga.
Estrategias de uso Para el autodidacta... La persona autodidacta es la que toma el aprendizaje en sus manos; no depende de las ex plicaciones de nadie y por lo tanto tiene control total de su propio proceso de aprendizaje. A ese tipo de lector le sugerimos esto: 1. Si desea aprender sólo algunos temas, considere las partes del libro como temas. No caiga en la tentación de tomar en cuenta sólo algunos de los capítulos de una parte, da do que están estructurados en una secuencia funcional. 2. Si ya conoce .NET, puede saltarse capítulos dentro de un tema si ya los domina. Una manera de evaluar si está en condiciones que le permitan saltar capítulos es la siguien te: trate de contestar las evaluaciones rápidas del capítulo. Si responde correctamente a la mayoría de las preguntas, puede omitir la lectura del capítulo. 3. Decididos los temas que le interesan, lea de manera secuencial cada capítulo del tema: a) b) c) d) é)
Lea con detenimiento los objetivos del capítulo para que tenga presente que eso es lo que hay que dominar al concluirlo. Si interrumpe la lectura de un capítulo, cada vez que reinicie la lectura lea de nue vo los objetivos. Es muy importante que los tenga presentes. Revise los videos en el momento en que los señale el texto. Realice los ejercicios en el momento en que los encuentra en el texto. Responda el examen rápidamente; si no contesta correctamente la mayoría de las preguntas, vuelva a revisar el capítulo hasta que quede satisfecho.
4. Si aprueba satisfactoriamente el examen rápido, intente desarrollar las prácticas individuales. Si ya entendió el contenido del capítulo, sólo es cuestión de tiempo y dedicación. 5. Le sugerimos que pruebe los cuestionarios y juegos en línea que se encuentran en www. a p r e n d a p r a c t ic a n d o . con para comprobar el grado de experiencia que ha adquirido.
Para el uso con grupos... Si utiliza el libro para la capacitación de grupos, le sugerimos que tome en cuenta las si guientes consideraciones para alcanzar los objetivos (suponemos que usted es el instruc tor/facilitador):
www.FreeLibros.me
C ó m o utilizar este libro
Al iniciar un tema... 1. El instructor/facilitador deberá dominar el tema a instruir; previo a la instrucción, de berá responder a las preguntas, realizar los ejercicios, realizar las prácticas individua les y responder a la perfección el examen rápido. 2. Los equipos en los que se pretendan demostrar los ejercicios deberán estar configura dos con los requerimientos mínimos que aparecen en la primera parte de esta sección. 3. Las presentaciones profesionales en Power Point están disponibles en el sitio Web de Aprenda Practicando; descargue las versiones más actualizadas antes de cada curso. 4. Antes de revisar una parte del libro, explique la importancia del aprendizaje del tema y genere interés por él; sin interés no hay aprendizaje. 5. Lo ideal, para demostrar que la tecnología estudiada es útil, es citar su experiencia per sonal en el uso de estas herramientas de desarrollo. También esto contribuye a aumen tar el interés en su exposición.
Para revisar cada capítulo... 1. Solicite, antes de la sesión de instrucción, que los miembros del grupo contesten las preguntas de cada capítulo. Puede pedirlo como tarea escrita (de preferencia a mano, para evitar las operaciones irreflexivas de copiar y pegar), para garantizar que los par ticipantes la lean. 2. Al iniciar cada sesión recuérdeles los objetivos del capítulo que se estudiará. 3. En cada inicio de capítulo, después de ver los objetivos, solicite a los miembros del grupo que lean las respuestas a las preguntas (punto 6); de preferencia ceda la palabra de tal forma que todas las personas participen. 4. Proyecte la presentación profesional que acompaña a cada capítulo. Para un mejor aprovechamiento recomendamos que para su uso personal imprima la presentación como página de notas, y lea las notas de cada una de las diapositivas, le ayudarán los consejos y anotaciones relevantes. 5. En caso de que se encuentre con un icono de video en la presentación proyéctelo en ese momento. 6. En una exposición, solicite a los miembros del grupo que realicen los ejercicios hasta el final, cuando ya se haya expuesto toda la presentación. 7. Los miembros del grupo deberán realizar los ejercicios que el instructor/facilitador les pida. Éste deberá especificar con claridad cuál es el tiempo máximo de realización; es importante que los tiempos marcados se respeten. 8. El instructor/facilitador, en caso de detectar dificultades en la realización de los ejer cicios, deberá apoyar a los miembros del grupo, pero sin hacer los programas por ellos.
www.FreeLibros.me
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
XXM
9. 10.
11.
12.
13.
En caso de detectar un problema común, es importante comentar con el grupo el pro blema y la solución. Al concluir la realización de los ejercicios, el instructor/facilitador comentará las ex periencias más relevantes que haya notado; repasará por última vez los objetivos del capítulo y comentará cómo fue que se cubrieron. Al finalizar los ejercicios, el instructor/facilitador pedirá al grupo que conteste el exa men lo más rápido posible, de manera individual. Se darán tres minutos para contes tar; después, en voz alta planteará cada una de las preguntas y revisará qué contestó el grupo. Después de escuchar las diferentes posturas, ofrecerá la respuesta correcta y dará sus razones. Los exámenes son una herramienta de aprendizaje más, no una opor tunidad para el premio o el castigo. El instructor/facilitador podrá encargar las prácticas individuales como trabajo de re fuerzo del conocimiento, ya sea para su desarrollo en sesión, o para que las personas desarrollen las prácticas en casa. De ser posible, motive a los participantes a comprobar sus conocimientos en los dife rentes cuestionarios y juegos en línea que se encuentran en: www. a p r e n d a p r a c t ic a n d o . c o n .
Certificación CAP-Dev Aprenda Practicando ha desarrollado la primera certificación en castellano relacionada con la tecnología Microsoft .NET. El objetivo es que el personal certificado sea capaz de desarrollar aplicaciones multicapa, orientadas a objetos, con pleno acceso a bases de datos de alto rendimiento, utilizando para ello la herramienta Visual Studio a nivel profesional. CAP-Dev 2005 (Certificación Aprenda Practicando - .NET Developer) se compone de los siguientes cursos:
www.FreeLibros.me
C ó m o utilizar este libro
xxiii
Opcionales
Obligatorios
Lógica de programación y su Implementaclón en VB.NET, C#, Java y C++ Microsoft .NET Framework y Visual Studlo.NET
Programación en Visual Basic 2 0 0 5 usando Visual Studio 2 005
Programación en Visual Baslc.NET
Programación de aplicaciones Windows usando Microsoft Visual Baslc.NET Desarrollando aplicaciones Web usando Microsoft ASP.NET
Programación y administración de Microsoft SQL Server 2000 Acceso a datos con Visual Basic 2 0 0 5 y Visual Studio 2 005 Programación en ADO.NET
Solicite sus cursos en los centros autorizados Aprenda Practicando o regístrese a ellos en la página mw.AprendaPracticando.con Conforme las versiones de los productos de Microsoft van evolucionando, la certificación y los cursos se actualizan de inmediato.
www.FreeLibros.me
www.FreeLibros.me
Capítulos: 1 Arquitectura de la
Parte 1
plataforma .NET 2 .NET com o multiplataforma de
Plataforma .NET versión 2005
desarrollo 3 Técnicas de desarrollo con Visual Studio 2005
Herramientas de Visual Studio revisadas: 1.
Solution Explorer
2.
Document W in d o w
3.
Text Editor
4.
Form Designer
5.
Toolbox
6.
Properties
Otras herramientas: 1.
.NET Framework 2.0 Configuration
2.
SDK Com m and Prompt
3.
ILDASM .EXE
4.
VBC.EXE
5.
IIS Services
En esta parte del libro se estudian los componentes y particularidades de la plataforma de desarrollo Microsoft .NET, en su versión 2005. Desde la perspectiva teórica se analizan los conceptos que permiten entender a profunidad cóm o funciona la plataforma Microsoft .NET. Además, se describen las características de los productos .NET' este conocimiento es necesario para afrontar las responsabilidades del desarrollados pues le ayuda a responder la pregunta ¿Q u é com pro y qué instalo? En el aspecto práctico, se trata de form a general lo que Visual Studio 2005 y los lenguajes soportados por .NET Framework versión 2.0 pueden hacer. Esta obra tiene como finalidad el desarrollo profesional del lector, quien a través del aprendizaje sólido de .NET podrá aplicar estos conocimientos y crecer gracias a las capacidades que obtendrá. Las posibilidades de productividad son muchas, así com o las oportunidades de desarrollo utilizando .NET; lo único que falta es que el lector se decida a aprovechar las posibilidades y recoger el fruto de su trabajo profesional basado en el conocimiento sólido.
www.FreeLibros.me
www.FreeLibros.me
C a p ít u l o A rquitectura de la plataforma .NET Objetivos: Conocer los elementos y el funcionamiento de la plataforma .NET, desde la codificación del programa fuente hasta la ejecución del programa resul tante.
1. Conocerá las capas más importantes de .NET Framework. 2. Distinguirá los requisitos que los lenguajes deben cumplir para ser re conocidos como lenguajes .NET. 3. Comprenderá la forma en que .NET interpreta, compila y ejecuta los programas. 4. Aprenderá las particularidades de la biblioteca de clases de .NET y su organización lógica y física. 5. Se enterará de las ventajas que la plataforma .NET brinda a los desarrolladores. 6. Entenderá la forma en que .NET puede coexistir con aplicaciones ante riores basadas en tecnología COM.
www.FreeLibros.me
4
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido Definición de la plataforma . N E T ........................................................ Capas principales de la plataforma . N E T .............................................. Capa de lenguajes de . N E T ................................................................. CLS (Comm on Language Specification)......................................... Lenguajes . N E T ................................................................................ .NET F ra m e w o rk .............................................................................. Capa de se rv ic io s...................................................................... Biblioteca de clases base de .NET Framework ( B C L ) ........................ Independencia de la biblioteca de clases y los le n g u a je s................. CLR (Com m on Language R u n tim e ).............................................. Compilador para generar código in te rm e d io ................................ Global Assem bly Cache ( G A C ) ..................................................... Análisis de las entradas del Caché global para ensamblado (GAC, Global A ssem bly Cache) ..................... .NET PE (.NET Portable Executable) versus PE/COFF ........................ Identificación de diferencias en program as ejecutables, usando el desensam blador de .NET (ildasm.exe) ......... Compiladores J I T ...................................................................... Impacto de .NET Framework en los sistemas operativos ......................... Modificación al cargador de ejecutables ..................................... Registro de biblioteca de clases base .......................................... Prerrequisitos del sistema o p e ra tiv o ............................................ Ventajas que brinda la infraestructura de . N E T ..................................... Convivencia de .NET y C O M ............................................................... M apa mental del capítulo ................................................................ Term inología................................................................................... P re g u n ta s ....................................................................................... Examen rápido del c a p ít u lo ...............................................................
www.FreeLibros.me
5 7 9 9 10 11 11 12 15 16 17 19 20 21 23 24 27 27 27 28 28 29 31 32 33 34
C apítulo 1. Arquitectura de la plataform a .NET
Bienvenidos a otro libro de la serie Aprenda practicando. Como es costumbre, esta obra se vale del análisis teórico profundo y el uso intensivo de ejercicios para enseñarle, en este caso concreto, a desarrollar aplicaciones en esquemas Cliente/Servidor con acceso a bases de datos corporativas, mediante el lenguaje Visual Ba sic. NET en ambientes de Consola, Windows y Web. Este libro se concentra en las tecno logías .NET Framework 2.0, Visual Studio 2005 y SQL Server 2005. El objetivo de la obra es dotar al profesional de sistemas con los conocimientos y la prác tica necesarios para enfrentar responsabilidades de desarrollo en las tecnologías anterior mente citadas. Estamos seguros de que al concluir la lectura y los ejercicios del presente libro el objetivo se habrá cumplido.
NOTA Ésta es la versión profesional del libro A pren d a Practicando Visual Basic.NET; los archivos com plem entarios m encionados en el m ism o se encuentran en la página w w w .Aprenda Practicando.com. El tem ario de este texto es cubierto en su totalidad en el curso 2015 Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005, perteneciente a la única certificación .NET en español, CAP-DEV (Certificación Aprenda Practicando .NET Developer).
Definición de la plataforma .NET La plataforma .NET es un componente de los sistemas operativos Windows, que permite el desarrollo, la liberación y la ejecución de aplicaciones. La plataforma posee un conjunto de he rramientas de desarrollo y lenguajes de programación (de propósito general, orientados a ob jetos, de tercera generación, de alto nivel y compilación a código intermedio), que nos permi ten utilizar todos los recursos disponibles en la computadora a través de una librería de clases común, con la que se pueden desarrollar aplicaciones de Consola, basadas en Windows, y pa ra la Web, que utilizan protocolos abiertos para la interacción entre los elementos que las com ponen. .NET no es sólo un conjunto de lenguajes o un producto de Microsoft metido en una caja; es toda una plataforma de desarrollo orientada a objetos que resuelve muchos de los problemas que se presentan hoy en día al desarrollar aplicaciones empresariales.
www.FreeLibros.me
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
6
Problemas que elimina .NET
Algunos de los inconvenientes que se eliminan con .NET son:
□ El infierno de los DLL. □ Falta de interoperabilidad con otras plataformas. □ Incapacidad para el manejo de esquema orientado a objetos. □ Manejo deficiente de errores. □ Incapacidad para utilizar Internet como medio eficiente de comunicación. □ Desaprovechamiento de la experiencia ganada como consecuencia del manejo de otros lenguajes. □ Incapacidad para el desarrollo de aplicaciones que aprovechen arquitecturas de 64 bits. Beneficios que proporciona .NET
En resumen, trabajar con la plataforma .NET
produce los siguientes beneficios: □ Integración de aplicaciones multi-lenguaje. □ Homologación de las capacidades de los lenguajes. □ Disponibilidad de una biblioteca de clases común para los lenguajes. □ Arquitectura abierta a nuevos lenguajes. □ □ □ □ □ □
Desarrollo simplificado. Implementación simple. Mejor soporte de componentes. Interoperación con Internet. Interoperación con dispositivos móviles. Rentabilidad.
□ Seguridad. □ Fácil implementación (Copy Deployment). □ Permite el desarrollo de aplicaciones de 64 bits. Uno de los mayores retos implicados en el aprendizaje de cualquier lenguaje .NET es en tender la forma en que esta plataforma trabaja. Por otro lado, existen muchos tecnicismos ligados a esta tecnología que es necesario conocer. Es recomendable entonces consultar el glosario de términos de .NET disponible en el sitio Web de Microsoft: eso puede ayudarle a reconocer los términos; para entenderlos cabal mente, lea este libro.
www.FreeLibros.me
C apítulo 1. Arquitectura de la plataform a .NET
Capas principales de la plataforma .NET Las capas que componen la plataforma .NET son: T
□ Capa de lenguajes.
Composición de la plataforma .NET
□
□
□
□
La capa de lenguajes está integrada por la CLS (Especificación común para lenguajes, Common Language Specification) y los lenguajes de programa ción compatibles con ella. La CLS es una especificación abierta de Microsoft que los lenguajes deben cumplir para ser considerados .NET. A la fecha Microsoft ha publica do cinco lenguajes y sus compiladores: Visual Basic, C#, C++, Visual J# y JScript. Otros fabricantes pueden implementar sus propios lenguajes .NET siempre y cuando respeten los lincamientos CLS y proporcionen los compiladores para generar el código intermedio reconocido por .NET. .NET Framework (Infraestructura y servicios). .NET Framework es la capa compuesta por el núcleo de servicios y recursos de .NET, que incluye los compiladores, la biblioteca de clases común para todos los lenguajes y los servicios que convierten el código fuente en código máquina para los diversos sistemas operativos a través del uso de código intermedio. .NET Framework se compone de los siguientes elementos: capa de servicios, BCL y CLR. Capa de servicios (Services). La capa de servicios se compone de aquellos ser vicios que permiten la intercomunicación entre los programas desarrollados en un len guaje .NET y el resto de los elementos de .NET Framework, con el fin de generar com portamientos a través del diálogo con el sistema operativo. Existen dos principales: a) Windows Application Services, que dan soporte a las aplicaciones de interfaz gráfica es tilo Windows y a las de consola en su diálogo con .NET Framework y el sistema ope rativo; b) ASP.NET Application Services, que apoya a las aplicaciones de interfaz gráfi ca basadas en la Web, servicios Web XML y aplicaciones de cómputo móvil en su diálogo con .NET Framework y el sistema operativo, a través del motor de servicios Web. En plataforma Microsoft este motor de servicios Web se llama Internet Informa tion Server (US). Biblioteca de clases base (BCL/Base Class Library). La Biblioteca de clases ba se (BCUBase Class Library) está constituida por un conjunto de bibliotecas de clase que ponen a disposición de los programas un conjunto de funciones jerárquicamente organi zadas, que podrán ser utilizadas como funciones nativas de manera no dedicada por to dos los lenguajes de .NET. Motor común de ejecución (CLR/Common Language Runtime). El Motor común de ejecución (CLR/ Common Language Runtime) es la plataforma común de ejecución de los programas desarrollados en cualquier lenguaje .NET. CLR agrupa compiladores de lí nea de comando que permiten la creación de código intermedio, libre de ambigüedades, al que se conoce como ensamblado (assembly); contiene además los compiladores JIT, Jiist in Time Compilers, que se encargan de generar código máquina a partir de los en-
www.FreeLibros.me
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
8
samblados. CLR se encarga de la gestión de errores, la administración de recursos y el diálogo con el sistema operativo en tiempo de ejecución. A todo lo que requiere de la intervención de CLR para funcionar se le da el calificativo de administrado (managed). □ S o p o rte o p e ra tiv o . La capa de soporte operativo es la compuesta por las herra mientas que se integran al sistema operativo al momento de instalar .NET Framework en un equipo. Con esta operación, el sistema operativo se modifica para poder interpre tar y ejecutar aplicaciones .NET de forma nativa. Esta capa permite que el sistema opera tivo responda a indicaciones de acción emitidas por CLR en tiempo de ejecución.
NOTA Microsoft ha denom inado de diferentes formas a los productos y lenguajes que com ponen la tecnología .NET: en la versión 1.0 de .NET Framework los lenguajes eran Visual Basic.NET, Vi sual C#.NET y M an age d C++, mientras que el entorno integrado de desarrollo se conocía co mo Visual Studio.NET 2002. Por ser productos nuevos, existía la necesidad de diferenciarlos de las propuestas anteriores; incluso internamente en la com pañía se penalizaba a quien osara referirse a Visual Basic.NET com o Visual Basic 7. En la versión 1.1 de .NET Framework, los len guajes pasaron a ser Visual Basic.NET, Visual C# y M an age d C++, y se trabajaba con Visual Studio.NET 2003. Ahora, en la versión 2.0 de .NET Framework, las versiones anteriores de los len guajes resultan anacrónicas, por lo que se conocen como Visual Basic, C# y C++. Se elimina también el ".N ET" en Visual Studio; el nombre de la última versión queda entones com o Vi sual Studio 2005.
F i g u r a 1 .1
Estructura de la plataforma .NET
C LS (Common Language Speciflcatión)
Visual Basic | | C i [ | C ++| | i# | |JScript | | Otros |
Web Forms
W indow s Form s
Web Services
ASP.NET Application Services
Console
Windows Application Services
Biblioteca de ciases base de .NET Framework (B C L / Baso Class Library)
CLR (Common Language Runtime) CL! (Common Language Infraestmcture)
.....
Sistemas Operativos
| Windows (2003,2000, XP) ~| | Otros sistemas operativos |
www.FreeLibros.me
C apítulo 1. Arquitectura de la plataform a .NET
Capa de lenguajes de .NET CLS (Especificación común para lenguajes, Common Language Specification) No siempre prestamos atención a lo que una herramienta de desarrollo hace tras bambalinas, dado que como programadores nos concentramos en que nuestra codificación produzca la res puesta esperada. En .NET, sin embargo, es importante conocer lo que sucede desde la codifi cación hasta la intervención del sistema operativo en la atención de las peticiones. Para saber cómo funciona .NET debemos partir de un concepto denominado CLS (Especifica ción común para lenguajes, Common Language Specification). La CLS es el subconjunto de capacidades mínimas soportadas por el motor de ejecución de .NET (CLR). Todas las herra mientas y componentes de .NET, por ejemplo, conviven y utilizan las clases de BCL, además de ser orientadas a objetos; esto porque CLS lo determina como condición para formar par te de la tecnología .NET. El cumplimiento de estas reglas garantiza un comportamiento homo géneo de todos los componentes y herramientas de desarrollo .NET. Todos los lenguajes .NET liberados por Microsoft cumplen con la CLS; esto convierte a Microsoft .NET en un ambiente multi-lenguaje; es decir, un entorno donde todos los len guajes permiten hacer prácticamente lo mismo dado que cumplen con un mismo marco ori ginal de trabajo y funcionamiento (CLS).
NOTA C# se lee "C Sharp" o "C Gato"; el signo
corresponde al de las partituras musicales.
Cualquier desarrollador experimentado puede aventurarse a desarrollar su propio lenguaje de programación basado en .NET y proponerlo al mercado. Basta con desarrollar las herra mientas necesarias para el trabajo con el lenguaje, incluyendo el compilador y el analiza dor (parser) del mismo. El único requisito es que debe cumplir con todas las reglas defini das en la CLS. Capacidades multi-lenguaje de .NET. Dado que todos los lenguajes de .NET cum plen con CLS, su programación es bastante similar.
A continuación ejemplificamos los efectos de esta especificación mediante el típico progra ma HolaMundo que muestra un mensaje. El programa HolaMundo en C# sería el siguiente:
www.FreeLibros.me
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
10
HolaMundo.es 1 2 3 4 5 6 8 9
using system; class HolaMundo { static void Main() { Console.WriteLine("Hola Mundo"); } }
Y éste sería el código en Visual Basic:
HolaMundo.vb 1 2 3 4 5 6
Imports System Class HolaMundo Sub Main() Console.WriteLine("Hola Mundo") End Sub End Class
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 particular del lenguaje.
NOTA La empresa japonesa Fujitsu enfrentó un problema com ún para muchas empresas grandes: gran parte de sus desarrollos están en COBOL. ¿C ó m o cambiar a la plataform a .NET sin sa crificar la inversión en desarrollo que ya se tiene? La solución que adoptaron fue generar un COBOL que cumple con CLS; una especie de COBOL.NET. Este antecedente muestra que las posibilidades son inmensas y la oportunidad de implemen tar nuevos lenguajes nunca había sido tan atractiva. Lo ideal para mucha gente sería dispo ner de poderosos lenguajes de programación en su lengua nativa, por ejemplo, en español. ¿A lguie n se anim a?
Además de proponer una arquitectura que facilita la creación de lenguajes, la CLS propor ciona interoperabilidad entre los mismos. En virtud de que todos los lenguajes .NET cum plen con una misma especificación, en una solución o aplicación pueden coexistir programas desarrollados en diferentes lenguajes sin crear problemas de compatibilidad entre ellos.
Lenguajes .NET L a definición de lenguaje .N E T es simple: todo aquel lenguaje de program ación y sus herram ientas de análisis y com pilación que cum plan con la CLS.
www.FreeLibros.me
C apítulo 1. Arquitectura de la plataform a .NET
Los lenguajes .NET requieren someterse a un proceso de compilación, y el resultado de la compilación debe ser un programa intermedio, que llamamos ensamblado (assembly); los ensamblados pueden ejecutarse sólo en colaboración con el motor de ejecución de .NET (CLR). A todo programa que se ejecuta en colaboración con el Motor común de ejecución (CLR) se le da el calificativo de administrado (managed), por lo cual, a los lenguajes de .NET también se les conoce como lenguajes administrados (managed languages). En esencia, son adminis trados aquellos elementos ejecutados por d motor común de ejecución (en lugar de ser ejecu tados directamente por el sistema operativo). Al ser administrados, los elementos disponen de servicios propios del motor común de eje cución como la recolección de basura (garbage collection), verificación de tipos en tiempo de ejecución (runtime type checking), administración de la memoria (memory managemenf) y soporte de seguridad (security support), entre otros.
.NET Framework Capa de servicios La capa de servicios se encarga de proporcionar los medios de comunicación de datos entre lenguajes y herramientas de desarrollo, y los elementos internos de .NET que se encargan de transformar los desarrollos en aprovechamiento de recursos a través de lenguaje máqui na, es decir, el .NET Framework. La capa de servicios está integrada por dos tipos fundamentales: ASP.NET Application Ser vices y Windows Application Services. Estos servicios son en realidad modelos de programación que permiten la intercomuni cación entre la interfaz y el núcleo de la plataforma .NET. Cualquier lenguaje es útil para programar y darse a entender para cualquiera de los servicios; la diferencia estriba en que ASP.NET Application Services está dirigido a los desarrollos en ambiente Web (Internet, Intranet y Computación móvil), mientras que Windows Application Services está dirigido a los desarrollos en ambiente Windows (aplicaciones de escritorio y Cliente/Servidor).
www.FreeLibros.me
12
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Biblioteca de clases base de .NET Framework (BCL) Para entender la Biblioteca de clases de .NET Framework (BCL/Base Class Ubrary), de bemos considerar primero que todo en .NET es un objeto, pues los lenguajes .NET son completamente orientados a objetos. Aunque después se analizará a fondo la programación orientada a objetos, es necesario precisar muy brevemente algunas definiciones a efecto de explicar en qué consiste la BCL: □ Un objeto es un conjunto de datos y procedimientos que proporcionan una funcionali dad determinada. □ Otra definición clásica indica que un objeto es una instancia de una clase. □ Una clase es la definición formal de un objeto; es como una “plantilla “que especifica los datos que un objeto puede manejar para identificarse, definirse y producir resulta dos; la clase también especifica los procesos que es capaz de realizar un objeto (com portamiento) y los resultados que proporciona. □ Al proceso de derivar un objeto a partir de una clase se conoce como instanciación. □ Los objetos tienen propiedades, métodos y eventos. □ Los métodos son las acciones predefinidas que es posible llevar a cabo a través de un ob jeto. Para utilizar un método es necesario instanciar un objeto —generarlo a partir de una clase— ; un método siempre es referido a través de un objeto. □ Existen clases, interfaces y tipos de valor que cumplen con CLS y permiten el acceso a la funcionalidad de BCL sin necesidad de ser instanciados previamente; para diferenciarlos de los que sí requieren instanciación, se conocen como types. Con esto en mente, es fácil concluir que los programas desarrollados en .NET tienen co mo finalidad poner a trabajar, por medio de las estructuras del lenguaje, a los types y a los objetos generados a partir de clases. La biblioteca de clases base de .NET Framework integra una gran cantidad de clases, y cada una de ellas ofrece una determinada funcionalidad que puede ser integrada a las aplicacio nes: algunas permiten crear objetos que desarrollan cálculos matemáticos o trigonométri cos, otras permiten definir objetos que permiten la realización de gráficos, otras más per miten crear objetos a través de los cuales es posible manipular bases de datos, etcétera.
Composición déla plataforma .NET
Es muy difícil manejar y clasificar una cantidad tal de clases. Generalmente, las clases se almacenan en librerías de vínculos dinámicos (DLL) que agrupan clases afines. La BCL se com pone de más de 150 archivos DLL, en los cuales se encuentran diseminadas las clases que componen la biblioteca de clases base. Espacios de nombres (Ñamespaces).
Tratar de encontrar librerías por nombre de ar chivo físico es bastante problemático. Las clases, como son tantas, se han categorizado y
www.FreeLibros.me
C apítulo 1. Arquitectura de la plataform a .NET
agrupado de manera lógica y jerárquica de acuerdo con su funcionalidad. A dichos grupos de clases se les conoce como Espacios de nombres (Namespaces).
NOTA La form a más fácil de explorar la jerarquía de clases de .NET Framework es mediante la ayu da electrónica del producto. También está disponible una versión impresa, a través de M icro soft Press, a un precio no muy accesible para todos. Recomendamos el uso de los medios elec trónicos, ya que ahorran árboles, son más rápidos y van incluidos en el precio del producto.
Un programa puede contener objetos y emplear types; tanto los objetos como los types de rivan de clases que indistintamente están contenidas en librerías (DLL) de .NET, o bien en clases desarrolladas por el usuario. Las clases que dan origen a los objetos y types utiliza das en un programa en .NET no necesariamente están contenidas en los mismos archivos de librerías, pero al momento de programar eso es irrelevante para el desarrollador. Disponibilidad de las clases: referencia y declaración de librerías. Para poder hacer uso de una clase, es necesario especificar previamente en qué librería debe buscarse. Esto implica referir el recurso físico y referir el recurso lógico. En otras palabras, hay que definir qué librería se requiere (referencia física) y qué espacio de nombre la refiere (refe rencia lógica).
Para la referencia física es necesario que, al compilar, se establezca la referencia a la libre ría (DLL) requerida. Para la referencia lógica, dependiendo del lenguaje en el que se esté codificando, se emplean instrucciones declarativas de espacios de nombre, tales como import, using, include, etcétera, para que el programa pueda navegar sin problemas en la je rarquía de clases contenidas en la librería. La instrucción a utilizar varía en función al len guaje que se esté utilizando. Instanciación de objetos. Una vez declaradas las librerías se dispone de las clases contenidas en ellas. A partir de las clases, es posible generar objetos (instanciar), y una vez que se cuenta con los objetos, es posible hacer uso de sus métodos para realizar alguna ta rea determinada. Código type safe. Cuando los métodos de los objetos y los types utilizados por el pro grama son reconocidos por la plataforma .NET (como consecuencia de que todas las libre rías están correctamente referidas) se dice que el programa es type safe.
Un programa no es type safe cuando en él se utilizan clases contenidas en la biblioteca de clases de .NET Framework, pero no se ha referido la librería específica en la cual se debe buscar la clase, o bien, cuando no se han declarado los espacios de nombres que faciliten la ubicación de la clase buscada dentro de la jerarquía.
www.FreeLibros.me
14
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Jerarquías de clases superiores.
Existen dos grandes espacios de nombres, System y Microsoft, que a su vez tienen subdivisiones tales que las clases se organizan de manera jerárquica con base en su funcionalidad. En virtud de que casi todas las clases de .NET Framework pertenecen de una u otra forma a cualquiera de estas dos jerarquías, se les llama jerarquías de clases superiores. La organización de clases a través de espacios de nombres es lógica; .NET Framework se encarga de saber en todo momento qué librería o componente físico está asociado con un determinado espacio de nombres. Realmente, especificar el espacio de nombres System im plica tener acceso a una librería que físicamente se llama Mscorlib.dll, y que se encuen tra en algún lugar de su equipo. Como puede ver, es más sencillo hacer referencia a la li brería a través del espacio de nombres que mediante una ruta de archivo físico. Con los anteriores elementos es posible definir a la biblioteca de clases de .NET Frame work como una colección de clases incluidas en el ambiente de desarrollo .NET, disponi bles para todos los lenguajes .NET y organizadas en espacios de nombres que permiten realizar tareas diversas a través del uso de objetos y types. .NET Framework proporciona un sinfín de recursos para desarrollar aplicaciones; basta con encontrar dónde están esos recursos. Al desarrollar en .NET es indispensable saber qué mé todos y types utilizar, en qué clase se encuentran y qué espacios de nombres permiten dis poner de dichas clases. Si la funcionalidad requerida no está en ninguna de las clases de BCL, entonces será necesario desarrollar las propias.
Programa
F i g u r a 1 .2
Organización de clases en BCL
jrstem Librería (DLL)
Clases del usuario
Type
www.FreeLibros.me
Clase
)
C apítulo 1. Arquitectura de la plataform a .NET
Independencia de la biblioteca de clases y los lenguajes Ninguno de los lenguajes tiene uso exclusivo de la librería de objetos de .NET; por el con trario, está disponible para todos. Este hecho es bastante significativo ya que todos los len guajes pueden hacer uso de las mismas clases, y, por tanto, podrán servir para lo mismo. Anteriormente, los programadores de C++ presumían de conocer un lenguaje que les per mitía manejar los recursos de la computadora de una manera más profunda, y subestima ban 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 funcionali dad que C++, era necesario que aprendiera el manejo de API (Interfaz para la programación de aplicaciones, Application Pmgramming Interface) de Windows, y dicha opción podía ser bastante compleja. Ahora eso ha cambiado, ya que con todos los lenguajes en .NET es posi ble hacer las mismas cosas. Uno de los mayores beneficios que se obtienen al disponer de una biblioteca de clases pa ra su uso en varios lenguajes, es que el programador aprende un solo lenguaje y al mismo tiempo aprende todos, en términos generales. Compare los códigos HolaMundo.es (C#) y HolaMundo. vb (Visual Basic), que se encuentran en este mismo capítulo; aun codificados en distintos lenguajes, ambos utilizan un mismo espacio de nombres System, una misma clase Consolé y un mismo type W riteLine(). La forma de invocar a las clases y los types en todos los lenguajes .NET es uniforme, y obedece a 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 tienen el soporte de un mismo entorno integrado de desarro llo, llamado Visual Studio, con el cual es posible codificar al mismo tiempo múltiples pro yectos en varios lenguajes. 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 bi blioteca de clases (Class Foundation), sus propias jerarquías y su propia sintaxis de invo cación. La experiencia que se ganaba con un lenguaje no servía de mucho al intentar desa rrollar en otro; además, cada lenguaje tenía su propia herramienta de desarrollo: el programador consumía todo su tiempo en aprender a usar las herramientas de desarrollo y las diferencias en los lenguajes, y le quedaba muy poco tiempo para ocuparse de los pro blemas reales de programación, como entender la lógica de negocios. La plataforma .NET reduce la curva de aprendizaje y favorece el desempeño de los equi pos de desarrollo, ya que la especialización puede darse ahora en la solución de los proble-
www.FreeLibros.me
16
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
mas específicos mismos, y no en las herramientas de desarrollo para resolverlos; con ello se aumenta la rentabilidad de los programadores y el retomo de la inversión en programas y capacitación.
CLR (Motor común de ejecución, Common Language Runtime) M o to r común de ejecución. Una de las características más interesantes que aporta .NET es la modificación en la forma de compilar y ejecutar los programas.
0 T y objetos
Compilación en dos fases en .NET. La plataforma .NET compila los programas en dos tiempos, separando la fase de análisis de la compilación, de la de síntesis. Para ello, juega un papel muy importante el CLR.
El CLR (Motor común de ejecución, Common Language Runtime) es el motor de ejecu ción de código administrado, que se encarga de proporcionar al programa en ejecución servicios de alto nivel, tales como la integración de módulos multi-lenguaje, seguridad y acceso a módulos de código, administración del ciclo de vida de los objetos, administra ción de memoria, recuperación de recursos, pistas de depuración, etcétera. El CLR trabaja en dos tiempos: 1. Tiem po de compilación. Se inicia cuando el programador utiliza cualquier compila dor de lenguaje .NET para compilar un código fuente, y termina cuando se obtiene un código intermedio a partir del código fuente compilado. 2. Tiem po de ejecución. Se inicia cuando se llama a ejecución un código intermedio y el CLR se encarga de someterlo a la acción de compiladores Justo a tiempo que producen código nativo, para luego producir los efectos esperados del programa.
NOTA Los tiempos en los que se compilan y ejecutan los programas en .NET constituyen el rasgo más característico de la nueva plataforma, pues representan una enorme diferencia con respecto a las versiones anteriores del producto, por lo cual se analizan con mayor detalle más adelante.
A partir de los anterior, podemos definir al CLR como el motor de ejecución de código administrado que provee una infraestructura de compilación y ejecución que abstrae y co loca en un plano subyacente las diferencias de plataformas de hardware en donde un programa es ejecutado. La definición anterior es compleja; el concepto mismo del CLR lo es. De manera simplifi cada podemos decir que el CLR se encarga de administrar la compilación y ejecución de
www.FreeLibros.me
C apítulo 1. Arquitectura de la plataform a .NET
los programas en .NET, con el fin de que puedan aprovechar la biblioteca de clases y los servicios de .NET Framework.
NOTA N o se sienta mal si tarda un poco en entender cóm o trabaja el CLR: Piense que es el núcleo de la nueva plataforma de desarrollo de M icrosoft y que dicha compañía tardó años en dise ñarlo.
Compilador para generar código intermedio CLR en tiem po de compilación.
El trabajo de CLR comienza con un código redacta do en algún lenguaje .NET; dicho programa es un archivo de texto simple, que bien pudo haber sido editado en el Bloc de Notas (Notepad . exe ). Este programa se conoce como có digo fílente (source code). El código fuente no es ejecutable. Para poder ejecutar un programa es necesario hacerlo pasar por un proceso de compilación que consiste en revisar su sintaxis y estructura para generar, si no tiene errores, un archivo que permita ser llamado a ejecución (ejecutable). El software que se encarga de convertir un programa fuente en ejecutable recibe el nombre de compilador, por ejemplo, el compilador específico de Visual Basic se llama vb .exe. Ensam blado ¡ assembly. Al compilar un programa en .NET se genera un ejecutable reconocido solamente por la plataforma .NET, al cual se le da el nombre de ensamblado (assembly). Un ensamblado es un conjunto de uno o más archivos implementados como una sola unidad de ejecución sobre la cual se determina la accesibilidad y los permisos. Los ensamblados son la unidad básica, mínima, de ejecución en .NET.
La compilación en .NET puede generar archivos de diversos tipos: exe, win exe, library o module, con diferentes extensiones de archivo, como EXE o DLL. Independientemente de lo que se genere, siempre será un ensamblado. Usted puede determinar qué tipo de ejecutable desea obtener del proceso de compilación; si al compilar no se especifica el tipo de ejecu table que se desea generar, por omisión se creará un archivo EXE. Metadatos. No obstante que tienen la misma extensión de archivo, no son iguales un eje cutable común y corriente, y uno generado por un compilador de .NET. El ejecutable crea do por alguno de los compiladores de .NET está compuesto por dos elementos: código y metadatos (este último componente no existe en los ejecutables comunes).
El código es el conjunto de instrucciones que forman el programa; los metadatos describen cada elemento que ha de ser administrado en tiempo de ejecución por el CLR; es informa
www.FreeLibros.me
18
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
ción relativa al programa y su entorno como tipos de datos, versión del programa, referen cias externas a librerías, etcétera. La diferencia entre un ejecutable .NET y uno que no lo es radica en la existencia del metadatos. Cuando un ejecutable se compila para plataforma .NET, y por tanto posee metadatos, se considera un programa con código administrado (managed codé). Código adm inistrado/m anaged code. Es importante mencionar que si su computado ra no tiene instalado el .NET Framework no podrá llamar a ejecución a los ejecutables de .NET, pues en tal caso no tienen instalado el CLR, y éste es indispensable para acceder a metadatos. Puede decirse que existe un contrato de cooperación entre el ejecutable y el CLR. El calificativo “administrado” (managed) puede aplicarse a todo lo que se ejecuta ba jo un contrato de cooperación con el CLR, y que sin éste, no funciona. Diversos nombres de los ensamblados. Los ejecutables que se obtienen después de compilar el código fuente son conocidos de varias formas: el código administrado también se conoce como ensamblado (assembly), MSIL (Microsoft Intermedióte Language), IL (In termedíate Language) o código ntermedio. El código intermedio es aquel que no es código nativo aún, ya que sólo ha sido sometido a la fase de análisis del proceso de compilación. El código intermedio es independiente de la plataforma en la que se ejecute y del lenguaje en el cual fue escrito el código fuente que le dio origen; eso garantiza la portabilidad de las aplicaciones, haciéndolas universales y multiplataforma.
El término que más se está utilizando es el de ensamblado. Por definición, un ensamblado es una colección de funcionalidad, control de versiones e implementación que actúa como la unidad básica de ejecución para el .NET Framework. Tiempo de compilación (Análisis)
F i g u r a 1 .3
Tiempos de compilación e n .NET
Código fuente
¿ r Código nativo
Compilador JIT (JustlnTime)
Tiempo de e|ecución (Síntesis)
www.FreeLibros.me
Al hacer la instalación o al ejecutar por primera vez.
C apítulo 1. Arquitectura de la plataform a .NET
Manifiesto. Por poseer metadatos, los ensamblados siempre son autodescriptivos. Ca da ensamblado posee un manifiesto (assembly manifest), que es donde se almacenan los metadatos.
El manifiesto es parte integral del ensamblado mismo, y en él se almacena la siguiente in formación: □ □ □ □ □
Identidad del ensamblado (Public Key Token). Referencia de los archivos que el ensamblado requiere para ser implementado. Types y otros recursos utilizados por el ensamblado. Dependencias con otros ensamblados. Permisos requeridos para ejecutar el ensamblado.
Gracias a la existencia de los manifiestos se hace innecesario guardar información en el re gistro de Windows, pues todo lo que se necesita saber se encuentra en el manifiesto del en samblado. Copy deployment. Todo lo que necesita un ejecutable para trabajar se encuentra de clarado en el ensamblado; es por ello que un programa ejecutable en .NET trabajará con solo ser copiado a otro equipo .NET. No hay que hacer instalaciones complejas o instalar componentes; sólo se copia el ensamblado. A esto se le ha dado el nombre de implementoción por copia (Copy Deployment). Esto, por supuesto, si el equipo donde se copia posee la plataforma .NET, y en consecuencia, el CLR.
Caché global para ensamblado (GAC, Global Assembly Cache) Entre otras cosas, los ensamblados pueden ser librerías; en caso de que lo sean, existe la posibilidad de utilizarlas en diferentes escenarios y aplicaciones, dado su carácter compar tido (.shared). También es posible que existan otros desarrolladores en la misma organiza ción que desarrollen sus propias librerías. Aunque remota, existe la probabilidad de que dos desarrolladores distintos generen, para utilizar en una misma aplicación, una librería compartida con el mismo nombre. De permi tirlo .NET, se caería en la misma situación caótica de los DLL que tanto quisimos evitar en Windows DNA. Afortunadamente, en el caso de las librerías .NET compartidas, éstas deben registrarse en un recurso llamado Caché global para ensamblados (GAC, Global Assembly Cache). Este recurso almacena las entradas de los componentes y librerías .NET, registrando para cada uno diferentes especificaciones, de entre las cuales destaca PublicKeyToken, que constitu ye un identificador único del componente.
www.FreeLibros.me
20
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
En el GAC se encuentran las referencias lógicas de los componentes que, junto con la re ferencia física que especificamos al momento de compilar, evita la utilización accidental de un recurso. Puede haber dos componentes compartidos del mismo nombre físico, pero un programa sabrá siempre cuál es el que debe utilizar. Adm inistrador de GAC.
Existe una herramienta de .NET Framework, llamada gacu til. exe, que permite administrar el registro de componentes compartidos en el GAC.
Dependiendo de lo que se quiera hacer, gacutil.exe permite listar los componentes registrados en GAC, registrar un nuevo componente compartido o diminar uno previamente registrado.
*
Ejercicio 1.1 Análisis de las entradas del Caché global para ensamblado (GAC, Global Assembly Cache)
Se utilizará el administrador de GAC para conocer cuáles son los componentes .NET disponi bles. Esta práctica asume que se tiene instalado .N ET Framework 2.0 SDK, English version. 1. Abra el Panel de control y seleccione Herramientas administrativas - . NET Framework 2.0 Configuration. Se despliega la herramienta de configuración de .NET Frame work 2.0. 2. En el panel de la izquierda haga clic en el nodo My Computen en el panel de la derecha aparecerá el vínculo Manage the Assetnbly Cache (Global Assembly Cache).
'áhaflí
3} .irr fumiti-jt'.' / v juií^iuùiivi» Arctfvo
éfcaín
$r
AyyJj
Hj sí A iF T F M m n w n r f i
?Ji Cn n flq tirA tln n
(vnrslnn ? .O..*¡0 7 2 7 .4 ? ) NET Frame wo rV 2.0 Confiqurat«on »»lows y o u to corfiqur« ¿»«m bfcvt. f»m oling strvicw f. *m l c od» 4 c c v t i * »curtly pofccy spocific to version 2.0 o f the .NET Framowortc. Not*: th is v® rson o f th# N t r Fr«m «w oft Configuration tool «nil not «tljinl V M ttirigs for p»»viuui or U t w viw«iura o f lh « .NET Frtfiwwofk. L Ko th« rorrrv.pondng configuration tool to .vfyu'.t '.n tting* ter tho^n v»rs
iMkt nanas»ra Aramm '.»j-e Th»
c *h » vtww
(ia ®wt •»» Uwsi/wJ tu bv vtwr »0 br
several applicator». Uoo te aooorrt*f cocho id view, add, and remove (he mjruiqed component* *re rrjulled on f i * eompu»»r
Manaoed Canfloi-cü Azsrrfcltx c o n fin a d « n e m b i** w t » H i o f O u t l u i « rfi m u w V O M Jlul lultft.
from h » »mrTfcV r iA *
cteht
Jtilbrntiitf w1i« J i
verson of the aajcrrtily go» boded end to b u t t r ccod to bad t o
www.FreeLibros.me
C apítulo 1. Arquitectura de la plataform a .NET
3. Haga clic en el vínculo View List o f Assemblies in the Assembly Cache. 4. Existe una columna llamada Lócale, y no todos los ensamblados tienen el mismo valor en dicha columna, ¿qué cree que signifique eso?
5. Existe una columna llamada Public Key Token, que contiene una clave GUID (Identificador global único, Global Uñique Identifier), ¿para qué cree que sirva dicha clave?
6. Cierre el programa de configuración de .NET Framework 2.0.
.NET PE (.NET Portable Executable) versus PE/COFF Si tanto usted como la empresa en que trabaja se están iniciando en la experiencia llamada .NET, es probable que desee conocer cuáles son las diferencias entre los ejecutables gene rados en versiones anteriores de Visual Basic 6.0 y los generados en .NET. Es muy proba ble que al tratar de implementar proyectos en .NET surjan cuestiones del porqué hay que instalar .NET Framework en las máquinas para poder ejecutar los programas .NET. Esto genera suspicacias y dudas: ¿seguirán trabajando mis aplicaciones existentes?¿comenzará a fallar mi equipo?, ¿tengo que pagar algo para poder ejecutar aplicaciones .NET? Para ejecutar aplicaciones .NET es necesario instalar .NET Framework en los equipos, pe ro no la versión de desarrollo, sino el núcleo del producto, que es gratuito e independiente de la instalación que un equipo tenga, por lo que no modifica las aplicaciones existentes.
www.FreeLibros.me
22
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Lo que sí se modifica es el cargador de program as {program loader); es decir, la par te del sistema operativo que se encarga de reconocer a un programa ejecutable y de ejecu tar las acciones. A rchivo PE. Un ejecutable de W indows (Windows executable), sea EXE o DLL, debe poseer un formato llamado P E Format (Portable Executable Format), que es un derivado del M icrosoft Com m on O bject File Format (C O FF). A los programas ejecu tables, por cumplir con la especificación PE, se les ha dado a llamar también Archivos PE. Tanto PE como COFF están claramente especificados y disponibles públicamente, de tal forma que todos los desarrolladores cuyas aplicaciones generen ejecutables puedan utili zarlos para incluir en ellas los elementos que permitirán a los programas generados ser re conocidos como tales. Cualquier compilador o aplicación que desee generar ejecutables de Windows debe cumplir con la especificación PE/COFF. Un programa ejecutable contiene dos secciones: la sección de encabezados PE/COFF (PE/COFF Headers) y la sección de imagen nativa del programa (Native Image Section). La sección de encabezados PE/COFF indica al sistema operativo cómo está compuesto el pro grama y cómo debe ser ejecutado; la sección de imagen nativa se encarga de contener al progra ma en sí, así como los recursos que lo componen, usando para ello subsecciones bastante co nocidas para los que han desarrollado compiladores, como lo son .data, .rdata, .rsrc,y .text.
T Tiempos de compilación de C L R
Archivo .NET PE. Un archivo PE de .NET es más complejo pues contiene dos secciones más: la sección de encabezados C LR (CLR H eader Section) y la sección de datos CLR (CLR D ata Section). El encabezado CLR almacena información que identifica al programa como ejecutable de .NET para que como tal sea tratado por el cargador de programas. Por otro lado, la sección de datos CLR contiene metadatos y el código intermedio, lo que determina la forma en que el programa será ejecutado. Como puede ver, las secciones del archivo PE permanecen. Si usted no tiene instalado .NET Framework, el cargador de programas de Windows encontrará secciones no recono cidas (encabezado CLR y datos CLR), y no sabrá qué hacer con ellas. Como no fueron re conocidas dichas secciones y el código ejecutable de .NET no es código nativo, el progra ma generará un error. Sólo teniendo .NET Framework instalado será posible reconocer las nuevas secciones del ejecutable, que ordenarán la compilación JIT de la información con tenida en datos CLR.
www.FreeLibros.me
C apítulo 1. Arquitectura de la plataform a .NET
F i g u r a 1 .4
Diferencia de ejecutables .NET
A rchivo P E de W in d ow s
Archivo .NET P E
E n ca b e za d o s P E / C O F F
Encabezados PE/C O FF Encabezado C LR
S e c c ió n de im age n nativa (.data, .rdata. .rsrc. .text)
Datos C LR Metadatos
Código Intermedio (IL) ||
Sección de im agen nativa (.data, .rdata. .rsrc. .text)
Desensam blador de ensamblados.
N ET Framework posee una herramienta de línea de comando para desensamblar los archivos ejecutables, llamada ildasm. exe. Con ella es po sible comprobar si un programa es o no .NET, mediante la ejecución del siguiente comando: ildasn/TEXT NombreEjecutable/HEADER
Donde N om breEjecutable es el nombre del ejecutable a analizar. La especificación /t e x t provoca que la salida sea a consola, y /h e a d e r provoca que aparezcan en el resultado to dos los encabezados del ejecutable. Sólo si las definiciones muestran que el programa posee encabezados CLR, el programa es .NET.
Ejercicio 1.2 Identificación de diferencias en programas ejecutables, usando el desen samblador de .NET (ildasm.exe)
Desensamblará dos ejecutables para determinar cuál de los dos es un ejecutable .NET. 1. Abra el directorio APVBNETVS\Cap0i ; ése será su directorio de trabajo. 2. En ese directorio hay dos programas: HolaMundoA.exe y HolaMundoB.exe. Los dos ha cen lo mismo, pero sólo uno de ellos es un .NET PE. 3. Ejecute el desensamblador de .NET Framework (i l d a s m .e x e ), que se encuentra en el directorio base de .NET (C:\WINDOWS\Microsoft.NET\Franework\v2.0.50727). 4. Seleccione Inicio - Todos los programas - Microsoft.NET Framework SDK v2.0 - SDK Command Prompt.
www.FreeLibros.me
24
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
5. Vaya al directorio de trabajo. En la línea de comandos escriba lo siguiente: cd c:\APVBNETVS\Cap01 ildasm /TEXT HolaMundoA.exe /HEADER >a.txt ildasm /TEXT HolaMundoB.exe /HEADER >b.txt
6. Es muy evidente cuál de los dos archivos no contiene un ejecutable .NET, dado que no puede ser desensamblado. 7. Edite el archivo b . t x t y busque la sección Metadata Versión. ¿Qué ensambles externos se mandan llamar desde este programa?
8. Cierre la sesión de línea de comandos. FIN DEL EJER C IC IO *
Compiladores JIT CLR en tiem po de ejecución. El ejecutable generado por los compiladores de .NET no está en código nativo, y, por tanto, su ejecución no implica que el equipo en el que es ejecutado realice alguna acción.
Al correr un ejecutable en un equipo con .NET Framework, el cargador de programas del sistema operativo busca en el programa el encabezado CLR y los datos CLR; si estas sec ciones existen quiere decir que se trata de un ensamblado (.NET PE), y procede a darle un tratamiento considerado consecuente. De no ser así, procede a ejecutar el programa consi derándolo como archivo PE de Windows. Si se trata de un .NET PE, el CLR identifica si ya ha sido ejecutado previamente en dicho equipo. En caso de que sea la primera vez que se ejecuta en el equipo, el CLR detecta que el ensamblado no es código nativo, y procede a generar código nativo a través de compi ladores que actúan en tiempo de ejecución, a los cuales se les llama com piladores Justo a tiem po (
www.FreeLibros.me
C apítulo 1. Arquitectura de la plataform a .NET
El compilador JIT evalúa el ensamblado, la disponibilidad de los types utilizados por el en samblado y los recursos disponibles del sistema en que se está ejecutando el ensamblado. A partir de ese análisis, genera el código nativo aplicable al equipo y procede a ejecutarlo. Los compiladores JIT son los que realizan la fase de síntesis de la compilación, transfor mando el código intermedio que se encuentra en la sección de datos CLR en su equivalen te a código nativo de la máquina, considerando la plataforma de la misma y la disponibili dad de recursos. NOTA El hecho de que se realice la compilación JIT la primera vez que se ejecuta un program a eje cutable en .NET, hace que el proceso sea más lento. Algu n os program adores se decepcionan con .NET, pues argum entan que es más lento que las plataformas de desarrollo anteriores; quizá sea más lento la primera vez, pero la segunda vez que lo ejecute, el CLR detecta que ya existe código nativo creado, por lo que no procede a la compilación JIT, y por tanto se puede ver la velocidad real a la que el program a se ejecutará.
Gracias al CLR los programas ejecutables de .NET son altamente portables. Quien deter mina la diferencia del código nativo que ha de ejecutarse en una determinada plataforma es el CLR y no el ejecutable. Si un mismo ensamblado es ejecutado en dos equipos distin tos, uno con mucha memoria y varios procesadores, y otro con poca memoria y un solo procesador, el CLR a través del compilador JIT generará el código nativo apropiado para tomar ventaja de todos los recursos disponibles. Vea las posibilidades: se puede tener una versión de .NET Framework en un equipo basa do en UNIX, otro en Linux y una versión compacta de .NET Framework en un teléfono celular o en un PDA como la Palm Pilot. El mismo ensamblado puede ser ejecutado en to das las plataformas, y es el CLR a través del compilador JIT el que genera el código nati vo y la funcionalidad disponible para cada una de las plataformas mencionadas. Poco importa también en qué lenguaje estaba desarrollado el código fuente que dio origen al ejecutable: después de compilarlo, todo es IL.
NOTA Resulta adecuado el nombre que se le da al ejecutable que generan los compiladores de .NET, "cód igo interm edio" (IL), ya que lo generado es un có digo entre el código fuente y el código nativo. Los programadores de Java encontrarán la semejanza rápidamente: el IL sería como el Bytecode, mientras que el CLR sería com o el Java Virtual Machine. Sólo un lenguaje de .NET permite (por el momento) la compilación directa a "ca si" código na tivo: C++.
www.FreeLibros.me
26
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
No tener instalado el .NET Framework en una máquina también afecta al momento de eje cución, ya que el equipo no sabrá cómo interpretar el ejecutable, además de no ser posible transformar el IL en código nativo, por la ausencia de CLR. En ese contexto y dicho de otra forma, su programa nunca podría producir a partir del ensamblado la secuencia de nú meros binarios que provoquen una respuesta en su computadora.
NOTA En octubre de 2000, M icrosoft propuso a la E C M A (Asociación Europea de Fabricantes de Computadoras, European Computer Manufacturers Association), encargada de la estandari zación de sistemas de información y comunicación, un subconjunto funcional del CLR, deno m inado CU (Infraestructura de lenguaje común, Com m on Language Infraestructure) para que fuera aprobado com o estándar de desarrollo junto con el lenguaje C#. En diciembre de 2001 se ratificó por E C M A (ECMA-335), por lo cual cualquier plataforma de sistema operativo que así lo desee podrá disponer de su propio subconjunto de CLR, hacien do posible que las aplicaciones desarrolladas en .NET puedan ser ejecutadas en dichas plata form as sin modificar el código.
Microsoft ha puesto a disposición de todos un producto base denominado .NET Frame work Redistributable Package en su sitio Web corporativo. Al instalarlo en su equipo ya es posible ejecutar aplicaciones desarrolladas en plataforma .NET. También lo está incluyen do en los Service Pack de sus sistemas operativos, y seguramente todos los sistemas ope rativos con versiones OEM lo incluirán. F i g u r a 1 .5
Proceso de ejecución .NET
www.FreeLibros.me
C apítulo 1. Arquitectura de la plataform a .NET
Ensam blador de .NET. Existen también herramientas de .NET Framework que permi ten realizar la fase de síntesis de la compilación, además del compilador JIT. El programa ilasn.exe es el ensamblador de .NET Framework; su función consiste en transformar un programa en código intermedio (MSIL) en archivo .NET PE.
Para aquellos que deseen desarrollar un lenguaje .NET, esta herramienta es muy importan te. Sólo tendrán que preocuparse por generar un compilador que traduzca el código fuente a MSIL; es decir, que se encargue de realizar la fase de análisis. La fase de síntesis podrá ser desarrollada por el ensamblador de .NET. También es posible desensamblar un archivo .NET PE, a través de la herramienta de .NET Framework llamada ildasm.exe. Tanto ilasn.exe como ildasn.exe están disponibles desde la línea de comandos del sis tema operativo.
Impacto de .NET Framework en los sistemas operativos Los sistemas operativos son, a fin de cuentas, los que reciben las instrucciones de bajo ni vel para producir los efectos buscados en los programas, por lo cual no pueden sustraerse a los cambios que .NET requiere para funcionar.
Modificación al cargador de ejecutables Ya se indicó que los ejecutables de .NET no son iguales a los ejecutables PE/COFF; el sis tema operativo se ve modificado en este aspecto, ya que debe ser capaz de reconocer los nuevos encabezados de las secciones que poseen los .NET PE. Después de instalar .NET Framework en su equipo, el cargador de ejecutables será capaz de reconocer tanto a los ejecutables de .NET como a los ejecutables PE/COFF.
Registro de biblioteca de clases base Se instalan en su equipo todas las librerías de .NET Framework, y se registran a fin de que pueda disponer de todas las clases de .NET. No se confunda: el hecho de que usted no requiera registrar sus componentes en .NET en el Registro de Windows, no quiere decir que las librerías de .NET no se registran de algu na forma.
www.FreeLibros.me
28
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
.NET sigue teniendo entradas en el Registro de Windows, ya que es el mecanismo optimi zado que los sistemas operativos Windows entienden mejor; sin embargo, los desarrollos en .NET que usted realice no estarán basados en componentes, sino en ensamblados. De esa forma, el núcleo de .NET puede mantener manejo binario y registrado en los equipos locales a través de componentes, mientras que las aplicaciones que usted desarrolle en .NET ya no serán basadas en componentes, y se comunicarán a través de protocolos abier tos; en cierta forma, se aprovecha lo mejor de la tecnología disponible. A medida que los sistemas operativos comiencen a reconocer elementos .NET, la tecnolo gía basada en componentes desaparecerá, aunque eso puede llevar tiempo.
Prerrequisitos del sistema operativo El sistema operativo debe disponer de un mínimo de actualización; por ejemplo, se asume que cuenta con una versión mínima de Internet Explorer, que tiene una amplia integración con los sistemas operativos Windows. También se requiere una versión actualizada de MDAC (Microsoft Data Access Components), que permita desarrollar algunas asignaciones de base de datos internas del modelo .NET.
Ventajas que brinda la infraestructura de .NET Algunos de los cambios que se vislumbran con la infraestructura que propone .NET son los siguientes: □ Será posible implementar soluciones Windows DNA sin las complicaciones de COM, ya que los ensamblados, en coordinación con el CLR, se encargan del manejo inteligen te de los componentes de una aplicación. La capa de presentación y la de reglas de ne gocio que propone DNA pueden modificarse drásticamente, ya que el procesamiento y la interfaz de usuario pueden dividirse la carga de trabajo entre servidor y cliente de ma nera flexible. □ Se podrán generar programas portables (EL) que facilitarán el desarrollo de aplicaciones empresariales distribuidas en diversas plataformas de sistema operativo con sólo insta lar el CLI en ellas. □ El desarrollo de aplicaciones nunca había sido tan diverso: se pueden desarrollar aplica ciones de escritorio y Cliente/Servidor a través de formularios de Windows (Windows Forms). También es posible desarrollar aplicaciones de consola (Consolé Applications), y
www.FreeLibros.me
C apítulo 1. Arquitectura de la plataform a .NET
□ □
□
□
□
aplicaciones Web (Web Forms) que tendrán una interfaz más rica y funcional, además de ser más fáciles de elaborar para el desarrollador porque tendrán una lógica más depurada. Podrán desarrollarse servicios para los nuevos sistemas operativos de Windows, inclu yendo las versiones de 64 bits, con lo que se puede fortalecer la plataforma BackEnd. Con la introducción de los Servicios Web XML (XML Web Services), ya no se venderá software, sino que se venderá el servicio que el software preste, mediante un esquema de suscripciones. Disponer de la funcionalidad de un programa será tan fácil como en lazamos a una liga en Internet; no se requerirán inversiones fuertes por compra de soft ware, sino el pago bajo y periódico por el acceso a un servicio. La piratería se reducirá, como efecto secundario. Los equipos de desarralladores que estaban divididos por su especialidad en determina das herramientas de desarrollo podrán colaborar de manera coordinada. Los programadores de C++, C#, Visual Basic y Java podrán contribuir con partes de una misma solu ción, con la certeza de que el trabajo que realicen coexistirá con el trabajo del otro sin incompatibilidades. Cada programador aprovecha la experiencia que ya tiene, y escoge de .NET el lenguaje que más le favorezca. .NET coexiste con aplicaciones pasadas. Toda la inversión realizada en desarrollo de aplicaciones basadas en COM sigue siendo útil; se puede convertir un componente COM en uno .NET, y viceversa. Se desarrollará computación móvil como nunca antes, como consecuencia de las facili dades proporcionadas por el CLR, que gestionará por nosotros las características de ca da dispositivo.
En el capítulo siguiente podrá instalar todo lo que necesita para desarrollar en plataforma .NET, y comprobar a través de aplicaciones de consola gran parte de lo que se explica en este capítulo. NOTA Si conoce la estructura de un lenguaje .NET y el uso de las clases de .NET Framework, ya pue de desarrollar aplicaciones. Visual Studio no es necesario para desarrollar. Por supuesto, ayuda enormemente, pero en ca so de que no disponga de dicho software, puede editar el có digo en cualquier editor de tex tos, com o el Bloc de Notas (NotePad.exe), compilar su program a y ejecutarlo.
Convivencia de .NET y COM Seguramente las organizaciones tienen desarrollos basados en componentes COM; cam biar de inmediato a .NET puede no ser posible, e incluso, puede no ser deseable. En ese sentido, .NET puede convivir con componentes COM, y para ello utiliza dos herra mientas de .NET Framework: el exportador de librerías y el importador de librerías.
www.FreeLibros.me
30
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
El exportador de librerías (Type Library Exporter) está representado por el programa tlbexp.exe, que se encarga de generar, a partir de un ensamblado, una librería con la cual los componentes COM puedan interactuar. El importador de librerías (Type Library Importer) es la contraparte, ya que a partir de un componente COM, se genera un componente con el cual .NET pueda interactuar. Está re presentado por el programa tlbinp.exe.
www.FreeLibros.me
C apítulo 1. Arquitectura de la plataform a .NET
M
a p a m e n t a l d e l c a p ít u l o
www.FreeLibros.me
31 i
32
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
T e r m in o l o g ía
Administración de la memoria, 11 Administrado, 8, 11, 18 Administrador de GAC, 20 Application Program m ing Interface, 15 Archivo(s) .NETPE, 22 PE, 22 ASP.NET Application Services, 7, 11 Assembly, 7, 11, 17 manifest, 19 Base Class Library (BCL), 7, 12 BCL, 7, 12 Biblioteca de clases base (BCL), 7, 12 C#, 9 Caché global para ensamblado, 19 Capa de lenguajes, 7 de servicios, 7, 11 de soporte operativo, 8 Cargador de programas, 22 dase, 12 CLR, 7, 16 Data Section, 22 Header Section,
22 CLS, 7, 9 Código, 17 administrado, 18 fuente, 17
(COFF), 22 Intermediate Language (MSIL),
COFF, 22 Com m on Language Runtime, 7, 16
Importador de librerías, 30 Instanciación (de
Specification (CLS), 7, 9 Compilación, 17 en dos fases, 16
objetos), 12, 13 Instrucciones declarativas de espacios de
Compilador(es), 17 JIT, 7, 24 Copy Development,
nombre, 13 Interfaces, 12 Intermediate Language, 18
7, 16 MSIL, 18 Multilenguaje, ambiente, 9 Namespaces, 12-3
Intermedio, 18 Internet Information Server (IIS), 7
Native Image Section, 22 .NET lenguaje, 10
6, 19 Desensamblador de ensamblados, 23 DLL, 12 DNA, W indows, 28
18 M otor com ún de ejecución (CLR),
Ejecutable, 17 de W indows, 22 Ensamblado, 7, 11, 17
proceso de Jerarquías de clases ejecución, 26 superiores, 14 JIT, compiladores, 7, .NET Framework, 7 Redistributable 24
Espacios de nombres, 12-3 Especificación común para
Just in Time Compilers, 7, 24 Lenguaje(s) administrados,
lenguajes, 7, 9 Eventos, 12 Exportador de librerías, 30
Objeto, 12 11 PE .NET, 10 /COFF Headers, Librerías de vínculos 22 dinámicos (DLL),
GAC, 19 gacutil.exe, 20 Garbage collection,
12 Managed, 8, 11, 18 code, 18 languages, 11
archivos, 22 format, 22 Plataforma .NET, 5 Portable Executable
Manifiesto, 19 M em ory management, 11 Metadatos, 17
Format, 22 Proceso de ejecución .NET, 26 Program loader, 22
Métodos, 12 ilasm.exe, 27 Microsoft ildasm.exe, 23, 27 Com m on Object Implementation por File Format copia, 19
Propiedades, 12 Public Key Token, 19 Recolección de basura, 11
11
Global Assembly Cache, 19 IIS, 7 IL, 18
www.FreeLibros.me
Package, 26 .NET PE (Portable Executable), 21 archivo, 22
C apítulo 1. Arquitectura de la plataform a .NET
Referencia física, 13
PE/COFF, 22 de imagen
de compilación, 16
vbc.exe, 17 Verificación de
lógica, 13 y declaración de librerías, 13 Runtime type
nativa del programa, 22 Security support, 11 Servicios W eb XML,
de ejecución, 16 Tipos de valor, 12 tlbexp.exe, 30 tibimp.exe, 30
tipos en tiem po de ejecución, 11 W indow s Application
checking, 11 Sección de datos CLR, 22 de encabezados
29 Soporte de seguridad, 11 Source code, 17
Type Library Exporter, 30 Importer, 30 Types, 12, 19
Services, 7, 11 DNA, 28 executable, 22 X M L W eb Service,
CLR, 22
Tiempo
safe code, 13
29
P r e g u n t a s _______________________________________________________________________
1.1 ¿Cuáles son las capas principales de la plataforma .NET y qué función cumple cada una? 1.2 ¿Cómo es el proceso de compilación de las aplicaciones desarrolladas en .NET y cuá les son los momentos en los que se desarrolla? 1.3 ¿Cuáles son las diferencias entre los ejecutables de .NET y los ejecutables Windows comunes? 1.4 ¿Cuáles son las ventajas que aporta .NET a los ambientes de desarrollo? 1.5 ¿De qué forma se da la convivencia de .NET con los antiguos esquemas basados en COM?
www.FreeLibros.me
34
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Ex a m e n
r á p id o d e l c a p ít u l o ____________________________________________________
Parte 1: M arque con una cruz el inciso que responda a la pregunta. 1. Es el conjunto de reglas mínimas que debe cumplir un lenguaje para ser considerado lenguaje .NET: a) .NET Framework b) CLR
c) CLS 2.
Proporcionan los medios de comunicación de datos entre los lenguajes y las herramientas de desarro llo, y los elementos de .NET: a) ASP.NET Application Services y Windows Application Services b) XML Web Services
c) CLR 3.
Es el conjunto de clases disponibles en .NET: a) CLS b) CLR c) BCL
4.
Es la información relativa al programa y su entorno, incluida dentro del mismo programa: a) Metadatos b) Ensamblado
c) Código administrado 5. Es el compilador que se encarga de la fase de síntesis de compilación, en el caso de programas .NET: a) .NET PE b) Compiladores JIT
c) ese
Parte 2: Coloque en la línea la letra «F» si el enunciado es falso y «V» si es verdadero. 6. Si .NET Framework no está instalado en un equipo, no se pueden ejecutar los pro-
______________
gramas .NET PE. 7. Las clases de .NET Framework están disponibles para todos los lenguajes de .NET.
----------------------
8. Es imposible que los componentes compartidos en .NET entren en conflicto, gracias
----------------------
al GAC. 9. Los ensamblados de extensión EXE son código máquina ejecutable. 10.
.NET Framework no está basado en COM, y no convive con dicha tecnología.
www.FreeLibros.me
.NET como multiplataforma de desarrollo Objetivos: Conocer las generalidades de los diversos productos que componen la plataforma de desarrollo .NET y comprobar la posibilidad de desarrollar apli caciones de consola, Windows y Web con el mismo lenguaje de programación.
1. Aprenderá a decidir qué producto instalar — .NET Framework 2.0 Re distributable Package, .NET Framework 2.0 SDK o Visual Studio 2005— considerando sus necesidades de uso y desarrollo. 2. Conocerá los requerimientos de instalación de los productos de .NET. 3. Aprenderá qué tipos de aplicaciones es posible desarrollar en .NET y los requisitos para hacerlo.
www.FreeLibros.me
36
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido Determinación de la plataforma .NET re q u e rid a .................................... Propósito de usar .NET ............................................................. Tipos de aplicaciones posibles en . N E T ......................................... Interacción con bases de d a t o s ................................................... Alcance operativo de la p la ta fo rm a ............................................ Tecnología de bus y procesador ................................................. Productos de plataforma . N E T ........................................................... .NET Framework 2.0 Redistributable P ackage ................................ .N ET Framework 2.0 S D K ........................................................... Visual Studio 2005 .................................................................... .NET Compact Framework 2 . 0 ..................................................... Visual Studio 2005 Express ........................................................ Selección del producto a d e c u a d o ............................................... Consideraciones respecto del idiom a de los p rod u ctos.................... Comprobación del funcionam iento de la plataforma .NET .............. Determinación de los productos .NET a instalar en un escenario de trabajo ............................................................................. Desarrollo de aplicaciones en .NET usando SDK .................................... Compilación de programas desde línea de comandos .................... Aplicaciones de consola (Consolé Applications) ............................. Aplicaciones W indow s (W indows Applications) ............................. Aplicaciones W eb (Web Applications).......................................... Desarrollo y compilación de un program a desde la línea de c o m a n d o s .................................................................................. Tecnologías cubiertas en este libro ..................................................... M ap a mental del capítulo ................................................................ Term inología................................................................................... P re g u n t a s ....................................................................................... Examen rápido del c a p ít u lo ...............................................................
www.FreeLibros.me
37 37 37 38 38 39 39 40 41 42 44 45 45 46 46
47 49 49 49 50 50 51 53 55 56 56 58
C apítulo 2. .NET com o m ultiplataform a de desarrollo
El capítulo anterior incluyó una gran cantidad de términos nuevos relacionados con el nue vo entorno de desarrollo .NET; éste trata de comprobar si todo aquello es cierto. Para pasar de las palabras a los hechos, usted comprobará la forma en que funciona la pla taforma de desarrollo .NET a través de programas sencillos escritos en Visual Basic.NET. Este capítulo es particularmente importante para quienes tienen bajo su responsabilidad de cidir la migración a .NET de entornos de desarrollo anteriores, pues se aclaran cuáles son los nuevos productos que .NET coloca en el mercado, sus requerimientos de hardware y software, así como lo que es necesario hacer para ejecutar aplicaciones desarrolladas en es ta plataforma. Veremos que .NET es una multiplataforma de desarrollo, ya que proporciona herramientas de desarrollo para crear varios tipos de aplicaciones en distintos lenguajes y para diferen tes tipos de dispositivos.
Determinación de la plataforma .NET requerida La primera pregunta a plantear es: ¿Para qué queremos tener la plataforma .NET en nues tros equipos? .NET cubre una gama sorprendente de aplicaciones. El producto .NET a instalar, los re querimientos de hardware y software correspondientes, y el precio a pagar dependen de lo que se desee hacer.
Propósito de usar .NET Hay dos propósitos principales que determinan las primeras decisiones: 1 . Propósito de ejecución. Se refiere a sólo ejecutar aplicaciones .NET. 2. Propósito de desarrollo. Se aplica cuando se desea ejecutar y desarrollar aplica ciones .NET.
Tipos de aplicaciones posibles en .NET Si el objetivo es el desarrollo, será necesario determinar el tipo específico. Puede tratarse de alguna de las siguientes aplicaciones:
www.FreeLibros.me
38
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
1. Aplicaciones de consola (Consolé Applications). Son aquellas aplicaciones tex tuales que reciben y muestran datos en el intérprete de comandos. 2. Aplicaciones W in d o w s (Windows Applications/Windows Forms). Son las aplica ciones que tienen interfaz gráfica basada en Windows. 3. Aplicaciones W eb (Web Applications/Web Forms / XML Web Services). Son aque llas que utilizan para su ejecución un navegador Web como Internet Explorer. La inter faz Web puede tener interacción con el usuario en un modelo petición-respuesta, basa do en Cliente/Servidor. 4. Servicios W eb X M L (XML Web Services). Son módulos de funcionalidad distribui da de aplicación a aplicación que utilizan como transporte protocolos estándares de In ternet, como HTTP y SOAP. 5. Aplicaciones de cóm puto móvil (Mobile Applications). Son aplicaciones que se ejecutarán en dispositivos de cómputo móvil, como los PDA (Personal Data Assistant) y otros dispositivos inteligentes (smart devices). Funcionan en coordinación con .NET Compact Framework, y son codificados mediante lenguajes de marcación.
Interacción con bases de datos Considerando el uso de bases de datos que tendrán nuestras aplicaciones, la clasificación es la siguiente: 1 . Aplicaciones sin bases de datos. Son aquellas que no utilizarán bases de datos. No realizan conexión con ningún motor de base de datos. 2. Aplicaciones con acceso a bases de datos soportadas de manera nativa. Son aplicaciones que tienen acceso a bases de datos que cuentan con proveedores de datos .NET nativos (Managed Providers) optimizados para el manejo de una base de datos es pecífica. 3. Aplicaciones con acceso a base de datos soportadas de manera no nativa. Son aquellas aplicaciones que tienen acceso a bases de datos a través de proveedores de da tos genéricos ODBC u OLEDB, que no están optimizados para el manejo de bases de datos específicas.
Alcance operativo de la plataforma De acuerdo con el alcance operativo de la plataforma, la clasificación es la siguiente: 1 . Cliente. Es cuando la plataforma .NET se utilizará para aplicaciones de escritorio, generalmente de Windows, con manejadores de bases de datos de escritorio, como Ac cess, y de orientación monousuario.
www.FreeLibros.me
C apítulo 2. .NET com o m ultiplataform a de desarrollo
2. Servidor. Es cuando la plataforma .NET se utilizará para aplicaciones compartidas o distribuidas, generalmente aplicaciones Windows y Web, con manejo de base de datos basadas en servidor, como SQL Server y Oracle, de orientación multi usuario.
Tecnología de bus y procesador Considerando la tecnología de CPU (procesador y bus) que se va a emplear: 3 2 bits (x 8 6 ) . Cuando el equipo de desarrollo a utilizar será un equipo basado en plataformas x 86 a 32 bits. 2. 6 4 bits ( x 6 4 ) . Es cuando el equipo de producción a utilizar será un equipo basado en plataformas x64 a 64 bits.
1.
Considerando estas características, es posible determinar la plataforma .NET adecuada.
Productos de plataforma .NET Para cada combinación de necesidades existe un producto de plataforma .NET adecuado. Actualmente los siguientes son los principales productos: 1. .NET Framework 2.0 Redistributable Package a. x86 b. x64 2. .NET Framework 2.0 SDK a. x86 b. x64 3. Visual Studio 2005 a. Visual Studio 2005 Standard Edition b. Visual Studio 2005 Tools for the Microsoft Office System c. Visual Studio 2005 Professional Edition d. Visual Studio 2005 Team System 4. .NET Compact Framework (.NET Framework compacto) 5. Visual Studio 2005 Express Edition a. Desarrollo Web: i. Visual Web Developer 2005 Express Edition b. Bases de datos i. SQL Server 2005 Express Edition c. Desarrollo de aplicaciones Windows i. Visual Basic 2005 Express Edition
www.FreeLibros.me
40
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
ii. Visual C# 2005 Express Edition in. Visual C++ Express Edition iv. Visual J# 2005 Express Edition Cada uno de ellos tiene distintos requerimientos, capacidades y, desde luego, costos.
.NET Framework 2.0 Redistributable Package Paquete de distribución .NET.
.NETFramework 2 .0 Redistributable Package. Es el producto de plataforma .NET Framework que se debe instalar en caso de que únicamente se desee ejecutar aplicaciones .NET. En términos generales, SDK habilita en los equipos el motor de ejecución de la plataforma (CLR) y la biblioteca de clases base (BCL). .NET Framework 2.0 Redistributable Package se recomienda para ambientes de producción, tanto de aplicaciones de escritorio como Web. Un ambiente de producción se compone de un equipo, generalmente un servidor, en donde se ejecutan las aplicaciones liberadas de for ma definitiva en operación real. Un ambiente de producción no debe ser ambiente de desa rrollo, para garantizar el máximo de disponibilidad de las aplicaciones para los usuarios. .NET Framework 2.0 Redistributable Package provee a los equipos el motor de ejecución (CLR) y la biblioteca de clases base (BCL), necesarios para ejecutar aplicaciones. Este producto es indispensable para la ejecución de aplicaciones desarrolladas en .NET, pero con él no se podrán desarrollar dichas aplicaciones. En aplicaciones de escritorio (Windows y Consola), deberá instalarse .NET Framework 2.0 Redistributable Package tanto en los servidores como en los clientes. En el caso de los de sarrollos Web (Web Applications y Web Services), se deberá instalar sólo .NET Framework 2.0 Redistributable Package en el servidor, dado que es ahí donde se requiere el motor de ejecución y la biblioteca de clases. Requerimientos.
Para conocer los requerimientos de hardware y software de este pro ducto, lo ideal es consultar la página Web de Microsoft, que se mantiene actualizada con forme se liberan productos. Para disponer de la versión 2.0 de .NET Framework Redistributable Package en su ver sión para 32 bits, deberá descargar de la Web el archivo dotnetf x .exe. Lo podrá instalar en Windows 2000 con Service Pack 3 o superior, Windows 98; Windows 98 Second Edi tion; Windows ME; Windows Server 2003 y Windows XP con Service Pack 2 o superior. Ésta es la versión que se recomienda para los equipos de producción (operación real). En producción generalmente se tienen servidores; se recomienda en esos casos contar con Mi crosoft Data Access Components 2.8 o superior. También se recomienda Internet Informa-
www.FreeLibros.me
C apítulo 2. .NET com o m ultiplataform a de desarrollo
tion Services (IES) versión 5.0 o posterior. Para proporcionar las capacidades de ASP.NET se sugiere ES con los últimos parches de seguridad, antes de instalar .NET Framework. ASP.NET sólo es aceptado por las siguientes plataformas: Microsoft Windows 2000 Professional (Service Pack 3 o superior recomendado), Microsoft Windows 2000 Server (Ser vice Pack 3 o superior recomendado), Microsoft Windows XP Professional y Microsoft Windows Server 2003. En su versión para 64 bits, se deberá descargar el archivo NetFx64. exe e instalar en Win dows Server 2003, Datacenter x64 Edition; Windows Server 2003, Enterprise x64 Edition; Windows Server 2003, Standard x64 Edition; o Windows XP 64-bit. A medida que las versiones se actualicen, seguramente los requerimientos serán mayores.
.NET Framework 2.0 SDK Kit de Desarrollo de Softw are de .NET Framework.
.NET Framework Software Development Kit. Es el producto de plataforma .NET que se debe instalar si además de eje cutar aplicaciones se desea desarrollarlas. .NET Framework 2.0 SDK provee la funcionali dad de .NET Framework 2.0 Redistributable Package, pero además cuenta con todas las he rramientas para escribir, construir, probar e implementar aplicaciones. .NET Framework contiene documentación, ejemplos y herramientas de línea de comando para compilar y analizar los programas desarrollados. Es importante mantener la congruencia de versiones; si desarrolla en .NET Framework SDK, el .NET Framework Redistributable Package debe ser de una versión igual o poste rior, a fin de garantizar que todo funcionará. Por lo general, las versiones más nuevas de .NET Framework Redistributable Package ejecutarán sin problemas los programas desarro llados con .NET Framework SDK de versiones anteriores. Sólo verifique que las nuevas versiones no dejen obsoletas clases que usted haya utilizado, para evitar problemas. .NET Framework 2.0 SDK se recomienda para ambientes de desarrollo, tanto de aplicacio nes de escritorio como Web. Un ambiente de desarrollo se compone de un equipo que gene ralmente emula a las capacidades de los equipos utilizados en producción, en donde se co difican, diseñan y prueban las aplicaciones en desarrollo. Recuerde: Un ambiente de desarrollo no debe ser utilizado como ambiente de producción, para garantizar el máximo de disponi bilidad de las aplicaciones para los usuarios. .NET Framework 2.0 SDK debe utilizarse cuando se pretende desarrollar y ejecutar progra mas en .NET, sin generar costos por la adquisición en herramientas de desarrollo, o bien cuando se tiene un equipo de desarrollo de capacidades modestas; la desventaja es que las herramientas de soporte al desarrollador son muy rudimentarias por lo que el tiempo de de-
www.FreeLibros.me
42
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
sarrollo con SDK es mucho mayor que utilizando herramientas gráficas de desarrollo. Op te por SDK sólo si no quiere gastar y dispone de mucho tiempo. Requerimientos. Para disponer de la versión 2.0 de .NET Framework SDK, en su ver sión para 32 bits, deberá descargar de la Web el archivo setup.exe (354 MB). Lo podrá instalar en Windows 2000 con Service Pack 3 o posterior, Windows Server 2003 y Win dows XP con Service Pack 2 o posterior.
En su versión para 64 bits, se deberá descargar el archivo setu p . exe (337.8 MB) e instalar en Windows Server 2003, Datacenter x64 Edition; Windows Server 2003, Enterprise x64 Edition; Windows Server 2003, Standard x64 Edition y Windows XP 64-bit. Aunque el ar chivo a descargar tiene el mismo nombre, debe descargarse la versión adecuada a la plata forma operativa. Es necesaria la instalación de .NET Framework 2.0 Redistributable Package, para poder instalar .NET Framework 2.0 SDK. NOTA Por el m om ento .NET Framework SD K es gratuito y probablemente siga así. La razón es m uy sencilla: por sus características particulares, la competencia directa de la plataforma .NET es Java. Para desarrollar en Java, desde hace m ucho tiempo usted puede descargar el JDK (Java Developm ent Kit) de form a gratuita; por tanto, ponerle precio a .NET Framework SD K sería darle ventaja a la competencia, por el m om ento M icrosoft no puede darse ese lujo.
Visual Studio 2005 F i g u r a 2 .1
iu-JJv N*
Visual Studio 2005 IDE
C *
Pronct
Cvtug
\ 0«t«
Took
Wndow
A
Tootoi
*
>
9 X
fo rtn i.v b [O M tg n l
C on*iw *Y <***«3
noto * W ird «rtffomx
Z
SUrtPao*
■ M W n 4 o < n Torma • L om m on lo n t ro h • ■ • • •
a
C u n t d iic n M m m H Tooftwir« D a la C m if u n c iá t Printing
n
s
s
OO CiTcr»
Latan o
* -
3 t tfc p a a m à
• -
.¿N cfaM nd oC cn > MrtoMrwMMn a My T | f t W l . 'A
* $
j ^ O Warfuçj
i 0M e»ag»
• "3
ü
'
1
=- l ì i i
lì ' ■
1 ¡P ; ' '
www.FreeLibros.me
m9
X
riM 4M gr«n1
homi ßHtpfflarthtxtJAMNCVrt/ 7\ Prootnet w9 X »
lOrtttT
.¿Cm» IM 3 C j .........
V à ftm T p r a M ' (71 .
n
Thar* v * no n u b * contri* n OragantomcntotNf t*xt to add * » Ih * todbox.
y
'¿AtKnTitinn■
p
• O ta kx* fïrATTAl
^
X
"
C apítulo 2. .NET com o m ultiplataform a de desarrollo
Entorno Integrado de Desarrollo .NET.
IDE/ IntegratedDevelopment Environment.
Es el producto de plataforma .NET que permite desarrollar en un ambiente gráfico e inte grado totalmente a .NET Framework; Visual Studio 2005 es la herramienta de desarrollo asistido más sofisticada de la historia: incluye editores con ayuda contextual, diseñadores gráficos de aplicaciones, asistentes de desarrollo, generadores de código, etcétera. Visual Studio 2005 instala automáticamente .NET Framework 2.0 Redistributable Package y .NET Fremework 2.0 SDK, por lo que no es necesario instalarlas previamente. En Visual Studio 2005 puede desarrollarse de manera visual cualquier tipo de aplicación admitida por .NET, incluyendo las aplicaciones de computación móvil. Se puede elegir, desde la misma plataforma, múltiples lenguajes .NET para desarrollar módulos que coexis tan dentro de una misma aplicación. Además, Visual Studio 2005 se integra con SQL Server 2005 para facilitar el acceso de datos desde las aplicaciones .NET que se desarrollan. La utilización de Visual Studio 2005 se recomienda cuando se dispone de un equipo robus to para el desarrollo, cuando se tiene la necesidad de desarrollar de forma rápida y efectiva varios tipos de aplicaciones, cuando existe la posibilidad de interacción multi-lenguaje para el desarrollo de aplicaciones profesionales con acceso a recursos de bases de datos. La des ventaja es el costo de la herramienta (el caso de desarrolladores profesionales, se justifica). Existen varias versiones de Visual Studio 2005. La más elemental es la Standard Edition, que está orientada a los desarrolladores individuales profesionales; el kit Tools for the Mi crosoft Office System es la versión de Visual Studio 2005 para la integración de aplicacio nes con la suite Microsoft Office; la Professional Edition permite los desarrollos individua les profesionales de alto desempeño, con funcionamiento multicapa; el más especializado de los productos es Team System, que incluye herramientas para el desarrollo de aplicacio nes de alto desempeño. Ésta es ideal para equipos de desarrollo profesionales. Obviamen te, entre más especializada la edición, mayor es su costo. Requerimientos de Visual Studio 2005. Si tiene la versión 2005 de Visual Studio
Standard Edition, que fue la que utilizamos para este libro, deberá disponer de 2 GB de es pacio en el disco duro, lo cual es un requerimiento importante. Se requiere tener instalado el MDAC 9 o posterior, básicamente porque es el que permite los accesos a SQL Server 2005. Los sistemas operativos en los que podrá instalar Visual Studio 2005 son Windows 2000 con Service Pack 4 o posterior, Windows XP con Service Pack 2 o posterior y Windows 2003 Server o posterior. En caso de querer desarrollar en plataforma Web, se debe tener la versión profesional de Windows 2000 y XP, ya que son los que proveen DS. Se debe contar, además, con Internet Explorer 6.0 o posterior.
www.FreeLibros.me
44
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Para otras versiones de Visual Studio 2005, consulte las especificaciones técnicas en el si tio de Microsoft. A
Microsoft’
Visual Stud io 2005
> Lo nuevo
En Visual Studio 2005 se tienen varias configuraciones predefinidas. A l iniciar por primera vez el uso de la herramienta se solicita el tipo de configuración que el desarrollador prefiere uti lizar. En caso de este libro seleccionamos las preferencias para un desarrollador en Visual Stu d io (General Developm ent Settings). Esto determina las herramientas activas y visibles por omisión, las teclas de atajo y la distribución de los menús. Todas las modificaciones que haga mos pueden ser guardadas a través de la opción Tools Im port and Export Settings. En otras palabras, si tenem os que desarrollar en un equipo distinto al que utilizamos regularmente, podem os llevarnos la configuración de nuestras preferencias.
.NET Compact Framework 2.0 .NET Framework compacto.
.NET Compact Framework. Es el producto de plataforma .NET que permite integrar a los dispositivos inteligentes con un conjunto compacto de fun ciones disponibles en .NET Framework, a fin de que se puedan ejecutar aplicaciones .NET, principalmente en Pocket PC (ahora Windows Mobile) y equipos con Windows CE. Lo que pretende Microsoft es extender su plataforma de desarrollo para atender cualquier tipo de dispositivo de cómputo, desde PDA hasta teléfonos celulares. Por su parte, los con troles de computación móvil atienden a todo tipo de dispositivos que tienen capacidad de enlazarse a una página en Internet, mientras que .NET Compact Framework se encarga de aquellos dispositivos que poseen sus características de operación independientes de una conexión a Internet. .NET Compact Framework 2.0 debe instalarse en aquellos dispositivos inteligentes en don de se pretendan ejecutar aplicaciones .NET; es muy similar en concepto a .NET Redistributable Package, con las limitaciones obvias que se aplican a los dispositivos móviles, pues ins tala versiones reducidas de CLR y de BCL aplicables a los ambientes de cómputo móvil. En sí, .NET Compact Framework es un subconjunto de .NET Framework; consiste en una librería de clases base, además de librerías específicas para dispositivos móviles. .NET Compact Framework ejecuta una versión avanzada del compilador JIT que forma parte de un depurado CLR capaz de manejar eficientemente la escasez de recursos de los dispositi vos móviles, cuidando el espacio de memoria y el consumo de batería. Visual Studio 2005 y .NET Framework 2.0 SDK contienen los elementos de .NET Compact Framework, para que el desarrollador pueda producir aplicaciones de cómputo móvil.
www.FreeLibros.me
C apítulo 2. .NET com o m ultiplataform a de desarrollo
Los dispositivos que han de ejecutar aplicaciones basadas en el .NET Compact Framework deben aceptar el .NET Compact Framework nmtime (Motor de ejecución de .NET Compact Framework). El motor de ejecución requiere como mínimo Windows CE .NET o Windows Mobile 2003 software for Pocket PCs. Los dispositivos deberán contar con Windows Mobile Software for Pocket PC 2003, Windows Mobile 5.0 for Pocket PC and Smartphone, Windows CE .NET 5.0 o superiores.
Visual Studio 2005 Express Visual Studio 2005 Express Edition.
Para favorecer el aprendizaje de las tecnologías .NET en un ambiente gráfico, Microsoft ha liberado lo que denomina versiones express.
Las versiones express son subconjuntos de las herramientas de desarrollo gráfico para pla taforma .NET, específicamente Visual Studio 2005. Las versiones express se orientan a ti pos de desarrollo y lenguajes utilizados; es decir, se puede disponer de productos para de sarrollo Web o para desarrollo Windows, pero no ambas. También se puede optar por un lenguaje: Visual Basic.NET, Visual C#, Managed C++ o Visual J#, pero no de todos de ma nera conjunta. Las versiones express permiten el desarrollo de aplicaciones, robustas, pero no poseen toda la funcionalidad y herramientas de Visual Studio 2005, especialmente el soporte de trabajo colaborativo. Para disponer de toda la funcionalidad multi-lenguaje de .NET, será necesario adquirir Vi sual Studio 2005. Dentro de las ventajas de las versiones express es que son gratuitas el primer año, exigen menos recursos que Visual Studio 2005 y permiten experimentar el ambiente gráfico de Vi sual Studio 2005 sin hacer una inversión inicial. Ciertamente, las versiones express no se recomiendan para ambientes profesionales de de sarrollo dadas sus limitaciones.
Selección del producto adecuado La versión 2.0/2005 de los productos que componen la tecnología Microsoft .NET pueden seleccionarse atendiendo los siguientes parámetros:
www.FreeLibros.me
46
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Fig u r a 2 .2
Selección de producto
Ejecutar programas (*06) N ET Framework Red stnbut able Package («32)
^
Visual Studio
Entorno Integrado de Ejecución en Desarrollo dispositivos Gràfico móviles
✓
✓
✓
Gratuito ✓
✓
✓
S ^
Desarrollar programas (*64)
✓
^
NET Framework S O K («64)
Visual Studio Express Q
D e i arrollar programas (*32)
✓
NET Framework Redistributable Package (*64) NET Framework S O K («32)
Ejecutar programas (*64)
✓ ✓
7 ✓
✓
✓ ✓
✓ ✓
NET Compact Framework
✓
* Gratuito por un ato
Consideraciones respecto al idioma de los productos Algunos recomiendan que instale los productos en su idioma nativo, es decir, el inglés, ya que contará con el soporte más actual, corrección de errores, ayuda y documentos técnicos actualizados todo el tiempo. El resto de los lenguajes siempre estarán rezagados. Aunque Microsoft no es ajeno a la globalización y progresivamente se desarrollan los pro ductos en diversos idiomas, nuestra recomendación es instalar los productos en inglés, a fin de que cuente con lo más reciente todo el tiempo. Como desarrollador, seguramente tendrá que consultar foros en Internet, así como MSDN, en inglés. Entre más se haga a la idea que debe dominar dicho lenguaje, es mejor. Al instalar Visual Studio 2005, sobre todo en equipos cuyo sistema operativo no es muy actual, se requiere la instalación de prerrequisitos, que incluyen modificaciones al sistema operativo y al navegador. Para ambientes de desarrollo se recomienda instalar Visual Studio 2005 en el idioma del sistema operativo del equipo, ya que de otra forma es posible que la instalación de los prerrequisitos reemplace elementos del sistema operativo. Si se mezclan idiomas es probable que comience a ver las opciones de los menús de Windows en dos idiomas, así como los mensajes del sistema. Se recomienda, por tanto, instalar en los equipos de desarrollo un sistema operativo en in glés. De esa forma tanto el sistema operativo como Visual Studio 2005 estarán en inglés, lo que garantiza la máxima actualización de herramientas, service packs, parches de segu ridad, entre otros.
Comprobación del funcionamiento de la plataforma .NET Es sencillo comprobar la instalación, tanto de Visual Studio 2005 como de .NET Framework 2.0 SDK, ya que ambos agregan entradas al menú principal de Windows.
www.FreeLibros.me
C apítulo 2. .NET com o m ultiplataform a de desarrollo
Lo verdaderamente importante que debemos comprobar es si ya disponemos de un nuevo entorno de desarrollo de aplicaciones basadas en .NET, con toda la funcionalidad del .NET Framework y CLR. Para hacerlo es necesario que haya instalado cualquiera de los productos de desarrollo; es decir, que haya instalado el .NET Framework 2.0 SDK o Visual Studio 2005. NOTA En su equipo ya debe estar instalado el softw are que requiere para trabajar. Se trabajará des de línea de comandos para mejorar el entendimiento de la plataforma; posteriormente se tra bajará con Visual Studio 2005 para mayor rapidez. Se debe tener instalado en su equipo M i crosoft .NET Framework 2.0 SD K y además Visual Studio 2005. El uso de una u otra plataforma se determinará por la didáctica del tema que se esté tratando.
*
Ejercicio 2.1 Determinación de los productos .NET a instalar en un escenario de trabajo
En el presente ejercicio aprenderá a determinar la cantidad y los tipos de productos que es necesario instalar en un escenario real. Se tiene un escenario compuesto como sigue:
Ihuftn oSIO
Um o t o S K )
Utuano SIO
U *u *noSJC O M
U tua noSIC O M
Las aplicaciones de una empresa se encuentran en una distribución multicapa, de la si guiente manera. Se tienen tres servidores; uno de ellos es el servidor de bases de datos que da servicio de almacenamiento de datos a las aplicaciones y objetos de negocios y trabaja
www.FreeLibros.me
48
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
sobre Windows Server 2003, Datacenter x64 Edition. Otro de los servidores es de aplica ciones y hospeda todos los objetos de lógica de negocio, así como las aplicaciones de es critorio basadas en interfaz Windows; trabaja sobre Windows Server 2003, Enterprise x64 Edition. El último es el servidor Web, que consume datos y funcionalidad de los otros dos servidores; trabaja en un equipo Windows 2003 Server. Se tienen dos aplicaciones principales, construidas en casa, SIO (Sistema Integral de Ope raciones), que proporciona todo el control de los procesos de producción. Por lo complejo de las interfases, se decidió que fuera una aplicación Windows Forms. La otra aplicación importante es SICOM (Sistema de Comercialización), que proporciona información y pronósticos de ventas, así como información relevante para la administra ción financiera del negocio. Como la información puede ser consultada tanto dentro como fuera de la empresa, se decidió que fuera un desarrollo Web. Esta aplicación está desarro llándose como prueba de concepto, por lo que fue instalada en el servidor menos fuerte; por el momento, se ha dado un plazo de cuatro meses de prueba y, si es útil, se desarrolla rá con mayor calidad y potencia. Por el momento sólo tres usuarios utilizan SIO. Por otro lado, dos personas utilizan SI COM; uno de ellos es el director general, que puede enlazarse desde su equipo, cuando es tá en la empresa, o desde su PDA, cuando anda fuera de ella. Se tienen dos desarrolladores en la empresa: uno que se encarga del desarrollo y manteni miento de SIO, y otro que se ocupa del desarrollo y mantenimiento de SICOM. Los tiem pos de desarrollo asignados son muy estrechos, pues SIO es crítica y compleja, mientras que SICOM es un poco más sencilla, y como se dijo, es prueba de concepto. ¿Qué cantidad de cada producto es necesaria para dar soporte a la operación de la empre sa? Cuide el mayor aprovechamiento de los recursos de cómputo y el menor costo. Producto
Cantidad
.NET Framework 2.0 Redistributable Package (x86) .NET Framework 2.0 Redistributable Package (x64) .NET Framework 2.0 SDK (x86) .NET Framework 2.0 SDK (x64) Visual Studio 2005 Visual Web Developer 2005 Express Edition Visual Basic 2005 Express Edition .NET Compact Framework 2.0
FIN DEL EJER C IC IO *
www.FreeLibros.me
C apítulo 2. .NET com o m ultiplataform a de desarrollo
Desarrollo de aplicaciones en .NET usando SDK Compilación de program as desde línea de comandos En esta sección se compilarán programas desde línea de comandos, por lo que es importan te saber cómo hacerlo. La forma más sencilla de compilar un programa de Visual Basic.NET es la siguiente: vbc Nom breCódigoFuente.vb
El programa vbc.exe es el compilador de Visual Basic.NET. Al someter a compilación al programa NombreCódigoFuente.vb, se generará de inmediato un ensamblado de nombre NonbreCódigoFuente.exe. Observe cómo es necesario especificar la extensión del archivo que contiene el código fuente. Hay ocasiones en que los programas hacen uso de clases que pertenecen a la biblioteca de clases de .NET Framework, por lo que es necesario establecer referencias que permitan a los programas saber en qué archivos se encuentran las clases que utilizamos. Para ello re currimos a la especificación “/ r : ”. Suponga que un programa requiere clases que se en cuentran en una librería de nombre System.dll. La sintaxis sería la siguiente: vbc Nom breCódigoFuente.vb /r :System.dll
Si se requieren varias librerías, podemos separarlas por comas (sin dejar espacio entre una y otra) o repetir la especificación “/n”. Si además de System.dll, requerimos System. Drawing.dll, ésta sería la sintaxis: vbc
Nom breCódigoFuente.vb / r rSystem.dll,System.Drawing.dll
o vbc
Nom breCódigoFuente.vb /riSystem.dll
/r:System.Drawing.dll
Las diferentes especificaciones que se utilizan para compilar archivos en Visual Basic.NET se irán revisando conforme los ejemplos lo vayan requiriendo.
Aplicaciones de consola (Consolé Applications) Las aplicaciones de consola son aquellas aplicaciones textuales que reciben y muestran da tos en el intérprete de comandos.
www.FreeLibros.me
50
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
La secuencia de desarrollo de este tipo de aplicaciones es la siguiente: 1. Se abre una sesión de comando (MS-DOS). 2. Con un editor de texto se edita el programa (con extensión vb). 3. Se compila el programa sin olvidar establecer las referencias con las librerías de .NET que se requieren para la funcionalidad propuesta por el mismo. 4. Se ejecuta el programa.
Aplicaciones W indow s (W indow s Applications) Son aquellas que tienen interfaz gráfica basada en Windows. La secuencia de desarrollo de este tipo de aplicaciones es la siguiente: 1. Se abre una sesión de comando (MS-DOS). 2. Con un editor de texto se edita el programa (con extensión vb). 3. Se compila el programa, sin olvidar establecer las referencias con las librerías de .NET requerida para la funcionalidad propuesta por el mismo. Son indispensables, al menos, las librerías System.dll, Systen.Drawing.dll y System.Windows.Forns.dll. 4. Se ejecuta el programa.
Aplicaciones W eb (Web Applications) Son aquellas aplicaciones que utilizan para su ejecución un navegador Web como Internet Explorer. Éstas son especiales en el sentido de que no se compilan como las aplicaciones de consola o Windows. Trabajan en combinación con el motor de Servicios Web XML de Microsoft; es decir, el Internet Information Services (IIS), que debe estar instalado en la máquina don de se alojará el programa. Para comprobar que se tiene instalado ES, se ingresa al Panel de control, y en Agregar y quitar programas, Agregar o quitar componentes de Windows; deberá aparecer Internet Information Server marcado en la lista. Otra forma es ingresar al Internet Explorer e ir al URL h ttp : //lo c a lh o s t si se trata de nuestro equipo; si no es nuestro equipo el que posee ES, deberá sustituirse lo calh o st por el nombre del equipo que lo posea. Si aparece contenido en el navegador, es que está fun cionando IIS.
www.FreeLibros.me
C apítulo 2. .NET com o m ultiplataform a de desarrollo
Otra forma, aunque no definitiva, es comprobar la existencia del directorio \inetpub, en la unidad donde se aloja el sistema operativo. Dicho directorio es el directorio de Servicios Web. No es definitiva porque puede existir el directorio pero no disponerse de los Servi cios Web XML. Dentro del directorio de Servicios Web XML se encuentra el directorio raíz de aplicaciones Weby llamado \inetpub\wwwroot; todo lo que se encuentre en dicho directorio o en algún di rectorio contenido en él será tratado como sitio Web, y, por tanto, .NET Framework aplicará los procesos de compilación y ejecución de aplicaciones Web de manera automática. Estos temas se tratan a mayor detalle cuando se estudia ASP.NET. La secuencia de desarrollo de aplicaciones Web es la siguiente: 1. Se abre una sesión de comando (MS-DOS). 2. Con un editor de texto, se edita el programa (extensión aspx). 3. Se copia el archivo a un directorio que de manera física o virtual se encuentre dentro del directorio de Servicios Web. 4. Se ejecuta el programa abriéndolo desde el navegador (Internet Explorer, por ejemplo), utilizando el protocolo http. Como pudo comprobar, Visual Basic.NET es el mismo lenguaje para todos los programas; lo que difiere es la interfaz, la forma de compilar y la plataforma de ejecución. Aprenda Vi sual Basic.NET para todos los tipos de aplicaciones.
*
Ejercicio 2.2 Desarrollo y compilación de un programa desde la línea de comandos
En el presente ejercicio aprenderá a desarrollar un programa de consola utilizando SDK y comprobará el funcionamiento de .NET Framework en su equipo. 1. Con cualquier editor de texto simple, edite el programa HolaMundo.vb (que reside en el directorio C: \APVBNETVS\Cap02, que será nuestro directorio de trabajo).
www.FreeLibros.me
52
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
— J Codificación de HolaMundo.vb 1 2 3 4 c O 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
Imports Imports Imports Imports
System System.Drawing System.Windows.Forms Microsoft.VisualBasic
Module HolaMundoB Dim frmHola As New Form() Dim lblMensaje As New Label() Dim WithEvents btnAceptar As New Button() Sub Estado() frmHola.ClientSize = New Size(200, 100) frmHola.Name = "frmHola" frmHola.StartPosition = FormStartPosition.CenterScreen frmHola.Text = "Hola Mundo" lblMensaje.Location = New Point(16, 16) lblMensaje.BorderStyle = BorderStyle.Fixed3D lblMensaje.Name = "lblMensaje" lblMensaje.Size = New Size(150, 20) lblMensaje.Text = "" btnAceptar.Location = New Point(16, 50) btnAceptar.Name = "btnAceptar" btnAceptar.Size = New Size(150, 32) btnAceptar.Text = "Haz clic" frmHola.Controls.Add(lblMensaje) frmHola.Controls.Add( btnAceptar) End Sub
Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click lblMensaje.Text = "Hola Mundo" End Sub Sub Main() Estado( ) frmHola.ShowDialog () End sub End Module
www.FreeLibros.me
C apítulo 2. .NET com o m ultiplataform a de desarrollo
2. Seleccione Inicio - Todos los programas - Microsoft .N ET Framework SDK v 2 .0 SDK Command Prompt. 3. En la ventana de comandos, traslade el control al directorio de trabajo. cd \APVBNETVS\Cap02
4. Compile el programa desde línea de comandos. vbc HolaMundo.vb
5. Ejecute el programa. HolaMundo
6. Si el programa funciona, habrá comprobado que puede desarrollar aplicaciones Win dows sin contar con una herramienta de desarrollo gráfico. FIN DEL EJERCICIO *
Tecnologías cubiertas en este libro Como ya aprendió, existen múltiples opciones de productos en tecnología .NET, y este li bro tiene que decidirse por una configuración que permita demostrar todos los tópicos que lo componen. Además, esta opción debe ser razonable en cuanto a la cantidad de requeri mientos de hardware y software. Se considera un escenario de trabajo en español y se asume que usted cuenta con un equi po en plataforma de 32 bits con el siguiente software básico instalado: □ Sistema operativo Windows XP Professional en español, con Service Pack 2, instalado. □ Internet Information Server 5.0 (IIS), instalado y operando. □ Internet Explorer 6.0, en español. □ MDAC (Microsoft Data Access Components) 2.8. □ SQL Server 2005, en inglés. □ .NET Framework 2.0 Redistributable Package, en inglés. □ .NET Framework 2.0 SDK, en inglés. □ Visual Studio 2005, Standard Edition, en inglés. Son útiles otras versiones, superiores o más robustas, del sistema operativo, de Internet Ex plorer, Internet Information Server y MDAC.
www.FreeLibros.me
54
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Se puede comprobar si ES está instalado y funcionando, si desde el Internet Explorer se ob tiene respuesta al abrir la página http: //localhost. Para simplificar el texto, se tienen las siguientes equivalencias: Si se hace referencia a:
Estamos hablando de:
Windows / Sistema Operativo
Windows XP Professional, con Service Pack 2 en español.
Internet Explorer
Internet Explorer 6.0 o posterior, en español.
MDAC
MDAC 2.8 o posterior.
.NET Framework
Plataforma .NET Framework, compuesta por .NET Framework 2.0 Redistributable Package y .NET Framework 2.0 SDK, en sus versiones en español.
SQL Server
SQL Server 2005, en inglés.
Visual Studio
Visual Studio 2005, en inglés.
Visual Basic
Visual Basic.NET 2005
C#
Visual C# 2005
C++
Managed C++ 2005
ASP.NET
ASP.NET 2.0
ADO.NET
ADO.NET 2.0
www.FreeLibros.me
C apítulo 2. .NET com o m ultiplataform a de desarrollo
M
a p a m e n t a l d e l c a p ít u l o
www.FreeLibros.me
55
56
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
T
e r m in o l o g ía
Integrated Development Environment
Development Kit, 41 NetFx64.exe, 41
setup.exe (64 bits), 42 Smart devices,
de cóm puto móvil, 38 de consola, 38, 49
(IDE), 43 Kit de desarrollo de software de .NET Framework, 41
ODBC, 38 OLE DB, 38 PDA, 38 Personal Data
38 vbc.exe, 49
Web, 38, 50 W indows, 38, 50 Cliente, 38 Console
M anaged Providers, 38 Mobile Applications, 38
Assistant (PDA), 38 Proveedores de datos
Applications, 38 Controles de computación móvil, 44
.NET Compact Framework, 38, 44 .NET Framework
genéricos O DBC u OLEDB, 38 .NET nativos, 38 Servicios W eb XML,
Dispositivos inteligentes, 38 dotnetfx.exe, 40 IDE, 43
2.0 Redistributable Package, 40 Software
38 Servidor, 39 setup.exe (32 bits), 42
Am biente de producción, 40 Aplicaciones
Visual Studio 2005, 43 Express Edition, 45 W eb Applications, 38, 50 W eb Forms, 38 W indow s Applications, 38, 50 Forms, 38 X M L W eb Services, 38
P r e g u n t a s _________________________________________________________________________ 2 .1
¿Cuáles son los factores a determinar antes de seleccionar un producto de desarrollo .NET?
2 .2
¿En qué casos se recomienda utilizar Visual Studio 2005?
2 .3
Suponiendo que su trabajo consista en desarrollar, ¿cuál es el producto .NET que me jor satisface sus necesidades?
www.FreeLibros.me
C apítulo 2. .NET com o m ultiplataform a de desarrollo
Notas:
www.FreeLibros.me
58
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Ex a m e n
r á p id o d e l c a p ít u l o ____________________________________________________
Parte 1: M arque con una cruz el inciso que considere que responde a la pregunta.
1.
Es el producto de plataforma .NET ideal cuando se desea sólo ejecutar aplicaciones: a) .NET Framework 2.0 Redistributable Package b) Visual Studio 2005
c) .NET Framework 2.0 SDK Z
Es el producto de plataforma JSET ideal para desarrollar aplicaciones sin usar herramientas gráficas: a) .NET Framework 2.0 Redistributable Package b) .NET Compact Framework
c) .NET Framework 2.0 SDK 3. Permite la ejecución de aplicaciones .NET en dispositivos inteligentes: a) Visual Studio 2005 b) .NET Framework 2.0 SDK
c) .NET Compact Framework 4.
No es un tipo de aplicación .NET: a) Aplicación de consola b) Aplicación Web
c) Aplicación batch 5. Es el compilador de Visual Basic: a) VB b) VBC
c) JITVB
Parte 2: Coloque en la línea la letra «F» si el enunciado es falso y «V» si es verdadero.
6.
Visual Studio Standard puede instalarse en Windows 98.
____
7.
Los programas desarrollados en .NET no se pueden ejecutar en Windows 95.
____
8.
Es necesario instalar .NET Framework Redistributable Package para poder instalar Vi- ____ sual Studio 2005.
9.
Ejecutar ASP requiere que los programas se encuentren en la raíz de aplicaciones
____
Web, o alguno de sus directorios. 10.
Es posible desarrollar aplicaciones robustas utilizando las versiones Express de Visual --Studio 2005.
www.FreeLibros.me
C a p ít u l o J
1^
Técnicas de desarrollo con Visual Studio 2005 Objetivos: Familiarizarse con las generalidades del trabajo con Visual Studio para el desarrollo de aplicaciones de Consola, Windows y Web.
1. Entenderá el concepto de organización de trabajo de Visual Studio, ba sado en soluciones y proyectos. 2. Conocerá la mecánica de creación de aplicaciones mediante Visual Studio. 3. Se familiarizará con el uso de las herramientas Solution Explorer, Toolbox y Text Editor. 4. Aprenderá a distribuir el espacio de trabajo en Visual Studio. 5. Conocerá la forma de construir y depurar aplicaciones en Visual Studio. 6. Aprenderá a realizar configuraciones generales básicas de Visual Studio.
www.FreeLibros.me
,
60
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido Fundamentos de desarrollo con Visual S t u d io ....................................... Soluciones y proyectos ............................................................. Recomendaciones para la creación de proyectos y soluciones en desarrollos colaborativos ...................................................... Creación de aplicaciones en Visual Studio .................................... Elementos de sintaxis en Visual B a sic ................................................... Creación de una aplicación de Consola en Visual Basic usando Visual S t u d i o ............................................................................. > Creación de una solución en b la n c o ......................... > Adición de un proyecto a una solución .................... > Herramientas de Text E d it o r .................................... > Colocación de números de línea en Text E d it o r .......... > Intellisense y detección dinámica de errores .............. > Modificación de código usando Text E d it o r ............... > Generación de una solución en Visual Studio ............ > Depuración de una s o lu c ió n .................................... Creación de u na aplicación W indow s en Visual Basic con Visual Studio, trabajando varios proyectos en una solución . . . > Generación de una aplicación W in d o w s .................... > Fijación de una herramienta en el espacio de trabajo . . > Adición de objetos de interfaz en tiem po de diseño . . . > Navegación entre documentos de una s o lu c ió n .......... > Cóm o guardar documentos en una solución .............. > Establecimiento del proyecto de inicio para una so lu c ió n ............................................................... Creación de u na aplicación W eb en Visual Basic con Visual Studio , trabajando varios proyectos en una so lu c ió n ................... > Creación de un directorio virtual para un sitio W eb . . . > Creación de una aplicación W eb ASP.N ET................... M a p a mental del capítulo ................................................................ Term inología................................................................................... P re g u n t a s ....................................................................................... Examen rápido del c a p ít u lo ...............................................................
www.FreeLibros.me
61 61 63 65 67 68 68 69 72 73 74 77 78 78 78 79 80 81 83 84 84 86 86 88 92 93 93 94
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
Fundamentos de desarrollo con Visual Studio Soluciones y proyectos En .NET, desarrollar en SDK es igual que hacerlo en Visual Studio; sin embargo, la orga nización del trabajo de desarrollo tiene importantes diferencias. Si se utiliza Visual Studio, todo el trabajo se organiza en soluciones y proyectos. Una solución es el nivel más alto o global de organización en Visual Studio, y consiste en una colección de proyectos administrados en una sola estructura. Las soluciones almacenan información respecto de los proyectos que agrupan las depen dencias entre éstos y el orden de construcción (compilación y generación de ensamblados) que deben guardar entre sí. Las soluciones tienen la extensión s i n y presentan algunas limitaciones: la primera es que sólo se puede tener una solución abierta en una instancia de Visual Studio; la segunda es que una solución no puede contener a otra. Los proyectos son colecciones de archivos fuente, compilados conjuntamente como un ar chivo de salida .NET (ensamblado). Cada proyecto puede componerse por interfaces de usuario (Windows Forms, Web Forms, Mobile), archivos de código (vb), referencias a clases de .NET Framework o a bibliotecas creadas por el usuario, archivos XML, HTML, y en fin, todo lo necesario para generar un ensamblado. Visual Studio posee más de 90 tipos de proyectos. La ventaja de utilizarlos es que selec cionando el tipo de proyecto adecuado, Visual Studio se encarga de crear los archivos mí nimos para el tipo de aplicación correspondiente, y además establece de forma automática las referencias a clases de .NET Framework usualmente requeridas.
www.FreeLibros.me
62
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
F i g u r a 3 .1
Organización de soluciones y proyectos
MiConsola
^ /]
C la s s ic s Assemblylnfo.es
..
L I
t# , .V*\
Solución maestra
J
\
*.
MFWeb WebForm l.aspx Aaaentblylnfo.vb Web Conflg WebForm l.aspx.vb
’•* Solución^
MlWlndows Fo rm l.e s
Assembly1nfo.cs
Es importante mencionar que algunos proyectos muy especiales no generan ensamblados, como los de setup, pero constituyen una minoría. Un proyecto puede formar parte de varias soluciones, por lo que es posible organizar por módulos una aplicación y, al mismo tiempo, se puede tener una solución maestra que en globe a todos los proyectos. Subdividir es una práctica recomendable, ya que al momento de estar desarrollando y solicitar la compilación de los programas, se compilarán todos los proyectos de la solución. Esto puede convertirse en un problema en el caso de aplicaciones grandes: en primera ins tancia, porque pueden ser muchos los proyectos a compilar, lo que tomará mucho tiempo; en segunda, porque en los proyectos grandes intervienen varios programadores, y es posi ble tener que lidiar con proyectos que ya funcionaban pero que ahora están presentando errores, que se tendrán que corregir antes de que el programa pueda ser compilado correc tamente. Las soluciones deben planearse cuidadosamente con todo el equipo de desarrolladores. Que una solución integre a todos los proyectos de otra solución no implica que una solu ción está dentro de otra. Eso permite que cada persona cree las soluciones que requiera sin afectar el trabajo de otros ni perjudicar la integración de software que se da por la unión de proyectos. Es importante notar que en una misma solución pueden coexistir proyectos escritos en di ferentes lenguajes .NET; sin embargo, un proyecto puede tener código fuente en un solo lenguaje.
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
A
^
Microsoft*
Visual Studio 2005
> Lo nuevo
En Visual Studio 2005 se tienen las siguientes prestaciones relativas a los proyectos y las solu ciones. Es posible crear proyectos temporales (temporary projects) que no requieren guardar se con el fin de hacer pruebas sin necesidad de crear proyectos y soluciones. También es posi ble crear proyectos autónom os (stand-alone projects): cuando una solución sólo se com pone de un proyecto, no es necesario hacer la gestión de la solución, aunque de todas formas se genere. Para la organización del trabajo ya es posible crear directorios o carpetas de solución, en los cuales es posible clasificar los archivos involucrados en la solución. También podemos administrar todos los recursos de un proyecto a través de Project Designer, y es posible refe rir archivos EXE com o orígenes de clases, y no sólo archivos DLL.
Recomendaciones para la creación de proyectos y soluciones en desarrollos colaborativos Se conoce como desarrollos colaborativos a las iniciativas de desarrollo que son tan gran des que el trabajo debe distribuirse en varios equipos de desarrollo. Piense en proyectos de desarrollo de la magnitud de Microsoft Excel. Es impensable que un solo equipo de desabolladores haya estado a cargo de todas y cada una de las funcio nes del paquete. Seguramente un equipo de desabolladores se ocupó de la interfaz gráfica, otro del Solver, otro más de las capacidades de graficación, etcétera. Imagine, por otro lado, que alguien deseara compilar su parte y que ello implicará compi lar todos los programas de todos los equipos de trabajo. En términos de tiempo y procesa miento, eso sería inadmisible. Se parte del supuesto que mantener las cosas simples es lo mejor. Trabajar con el mínimo de elementos, los suficientes y necesarios para obtener los resultados calculados, permite una mejor concentración en el trabajo. Cuando se trabaja en ambientes colaborativos se recomiendan las siguientes prácticas re lacionadas con los proyectos y las soluciones: 1. Se debe dividir la aplicación en módulos, e incluso en submódulos. Cada módulo y submódulo es una unidad de labores de desarrollo que contará con un responsable. De esa forma se trabaja sólo con los archivos del módulo; la compilación y depuración se rea lizará sólo sobre ellos sin necesidad de manipular el trabajo de otros. 2. Se recomienda que el trabajo de desarrollo de módulos y submódulos se haga en un equipo local, y nunca en un ambiente de producción.
www.FreeLibros.me
64
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
3. Se debe tener una solución por cada módulo y una solución por cada submódulo, si fue ra pertinente. 4. Cada solución debe tener un responsable. 5. Los desarrollos de los submódulos se agregan al módulo sólo después de ser probados. 6. Todas las librerías de uso común deben ser administradas por un responsable, aun cuan do no sea quien las desarrolle. Debe haber una solución para el manejo de las librerías de uso común. 7. Sólo el responsable de la solución que contiene las librerías de uso común puede auto rizar las modificaciones a las librerías; al autorizar una modificación deberá comunicar la actualización a todos los equipos de trabajo. 8. Se debe tener una solución que integre todos los recursos y programas que componen la aplicación, pero no se trabaja sobre ella. En esta solución sólo se integran los recur sos que ya han sido probados a nivel módulo. 9. La solución que integra toda la aplicación es la que se compilará finalmente para gene rar una versión para entregar.
F i g u r a 3 .2
Submódulo
Trabajo colaborativo Submódulo
Submódulo ,
Submódulo
Submódulo
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
Creación de aplicaciones en Visual Studio El procedimiento más sencillo para la creación de una solución es ejecutar Visual Studio. Aparecerá la página principal de la herramienta, denominada Start Page (Página de inicio), desde la cual se pueden abrir proyectos nuevos o existentes, así como consultar informa ción de Visual Studio y la plataforma .NET.
Microsoft*
Visual Studio 2005
> Lo nuevo
En Visual Studio 2005 la página de inicio fue rediseñada totalmente. A h o ra las cuatro seccio nes (Open an existing project, Getting Started, H eadlines y N ew s) aparecen en una sola página.
ia o
F i g u r a 3 .3
Start Page
: .I X
• « X
U « w r i| * n
Visual Studio2005 *. rtvHi ttuiftaA«K>-ln»lYtTTDrrrtovrT i_ : Mi»«, MMorTOOS ITiMtMCMT Vanm*«vry d n n »
* Menai trió r * «ivtay 'K * >wi rm rtn«n4v*1 frr hrr * m e r U Ih r P»n Tiw Pa*< ta N « M < n aa*h GDI • an4Mai T«fc_
Kcàk.iücn x
tf rjmn) mirtinh Itauunç mibm en
M :'ivrrtiy f> yr»i nam ( « • * i rartrfll, yaul iva* Itwftml tta»4>AnAP1. « M b n ÿ f u C M n M i n U l i m i a u n i «
UU
H a t u t t A lt o Dtric the launch Sfcoaa Wad, N Oit KO S 22: I M < «MT - M the Hottart W viM ttai on S « Scfver ¿006. VtKMi Studb ¿005 «nd BtToâ îcrvcr *006 «raçfc Ito»
'imi«s«k*csom D a* . S tatar I I
Tx», S OU 2001 ÏO.X7.1« CMT •A u in t a n J ttuuMjttt paUan» h
*|n»r»eew»hwt«*«01 H*.Oui..»
AMh m IU lV iM avti lia * M AS fw V )l V n r r M O I , M a u l « . . i l Ott 2 0 » W.«i: 11 • « *«*«» fer h*«. «1-4«? tedme«!
I(«n.iw î,dmw, «r*J
«ndijyat-»«
a > » ol> atirv AUvatea» «a( tua tw »» J K l J*rvw 2009 «nü
-"7
En Start Page se selecciona Fife - New - Project (o se oprime la combinación de teclas Control-Mayús-N). Aparecerá la ventana New Project, que permite seleccionar el lenguaje a utilizar, así como el tipo de proyecto que se desea construir.
www.FreeLibros.me
66
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
F i g u r a 3 .4
New Proyect
Broiett type»:
U
IemcJate*.
Vtsutf Basic
::
V im i J Sim ian mi \I *llval lrn i| iU lp \
W ndow 3 ]w « d o » w A p p * ««* !
afi SmertOevKe Starter Kts t Vhw dC# f VKiifíC*"*
5 Console * »»ca tto n
» n i » P n ^ i t Ty ]r%
M y T riii|iC ilr%
i T mU m s
Ubrary
¿3'W W ow s Control U su ry “■TCmuty Prvjoil
C u Aiul U U a y
J ia a rc h u r irv *
A project far o oatn o an eopkotion n*h a Wndovo user interface
fvwv
wmrinMKAfr*rj«iflni
LfK-vwv:
r:VAPviMnviK^
v t ff in N A g ^ :
VrtrvinwoVrfr-Afirni
Ci I ^
-I
flrectory for íctuoon
[ OK JL-Ccncd-J Al proporcionar los datos del proyecto a agregar, automáticamente se crea una solución con el mismo nombre. La desventaja de esta modalidad es que en aplicaciones grandes nunca un proyecto y una solución se denominan de la misma forma, ya que la solución es un con cepto global mientras que un proyecto es específico. Cuando la creación de un proyecto motiva la creación automática de una solución homónima, Visual Studio entiende que la so lución se compone de un solo proyecto, a lo que se llama proyecto autónomo (,stand-alone project); en este tipo de proyecto no se da mucha relevancia al concepto de solución den tro del entorno integrado de desarrollo. Es indispensable saber qué lenguaje .NET se utilizará para el desarrollo (Project Type); de cidido esto, es necesario conocer el tipo de aplicación deseada (Templates). Las plantillas o templates permiten predeterminar los recursos iniciales de la aplicación. Visual Studio preguntará dónde se desea guardar la aplicación (Location) y con qué nom bre (Ñame). Los archivos fuente que usted genere se encontrarán en el directorio que espe cifique. Se generará un archivo que mantendrá la referencia de todos los archivos involu crados en la solución y tendrá la extensión sin. Es posible que la solución tenga un nombre distinto al del proyecto, por lo que se podrá denominar específicamente (Solution Ñame). A
Microsoft'
U Ì Visual Stud ¡o 2005
> Lo nuevo
En Visual Studio 2005 la organización es más eficiente, dado que todos los recursos de una so lución están en la misma ubicación. La versión 2003 almacenaba los archivos del proyecto en el directorio que nosotros especificábamos, pero colocaba el archivo de solución (SLN) en M is d o c u m e n to s/ P ro y e c to s de V i s u a l S t u d io , lo que creaba problemas en equipos en donde traba jaban diversos usuarios. A h o ra la solución y los proyectos se almacenan en el mismo directorio.
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
Elementos de sintaxis en Visual Basic Visual Basic es el heredero de la tradicional sintaxis del lenguaje Visual Basic 6.0. Para no comenzar a desarrollar programas sin un conocimiento básico de la sintaxis del lenguaje, enumeramos algunas características esenciales: 1. Visual Basic no es sensible al uso de mayúsculas y minúsculas (non case sensitive). 2. Las líneas de código terminan al encontrarse un salto de línea (CR/LF). 3. El continuador de línea es un guión bajo (_) y no debe interrumpir expresiones; antes de él debe haber un espacio en blanco y después de él no debe escribirse nada. 4. Un bloque de código es el conjunto de líneas que deben ser tratadas como unidad de ejecución. Los bloques de código generalmente se delimitan por estructuras con inicio y fin (Module - End Module, Sub - End Sub, etcétera). 5.
Todo bloque de código que se inicie debe cerrarse.
6.
El último bloque de código en abrirse debe ser el primero en cerrarse.
7.
Las bibliotecas a utilizarse en un programa se declaran al inicio del mismo, utilizando la palabra reservada Imports.
8. Se utilizan paréntesis para delimitar expresiones que deban resolverse, o para delimitar argumentos. 9. Las variables que se utilicen en un programa deben estar definidas de manera explícita. 10. Aunque no es relevante para el compilador, evite la codificación de todo mayúsculas o todo minúsculas. Procure iniciar las palabras reservadas con mayúsculas. Éste es un ejemplo típico de un programa en Visual Basic: Imports System 1 2 Imports System.Console 3 4 Module MiPrograma 5 Sub Main() 6 Write("Pulse INTRO") 7 ReadLine() 8 WriteLine("Hola mundo") End Sub 9 10 End Module
www.FreeLibros.me
68
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
J t c , Ejercicio3.1 Creación de una aplicación de Consola en Visual Basic usando Visual Studio Desarrollará una aplicación de consola, que al presionar INTRO muestre un mensaje “Ho la Mundo”.
> Creación de una solución en blanco 1. Ejecute Visual Studio. 2. En la barra de menús seleccione File - N e w (CTRL-MAYÚS-N) para desplegar el cua dro de diálogo New Project. — *JQ 1 IS £
is m m Ifmritatet:
frr>r
visu a l s t u d io in sta te d tem plate«
W tlJuH) ♦ 5iiK*t D c y k c SUrtor K b » VtMJoiC# • V b u d C tt
■^BtoASolubcin M y Tem pletes
- O Ü*» Project Tyjw> 3ctt+i a «J OdAjyniei t
.Jpbéarehunine léñeteles...
E xtao U R y V W StuiJu W u t M »
O cate an ercoty solution conea r r e no projects
tfwn#:
E)«rockx{
fcuMtui:
C.WYBNETYS
^
[ ftumo... [
3. En la sección Project Type seleccione Other Project Types - Visual Studio Solutions, porque trabajará con soluciones de Visual Studio. 4. En la sección Templóles seleccione Blank Solution. Al seleccionar el tipo de proyecto, Visual Studio se encargará de generar un contenedor de proyectos que podrá ser com pilado para producir una aplicación. 5. En el cuadro de texto Ñame coloque el nombre de la solución, Ejercicios; en el cuadro de lista Location especifique la ruta en la que se han de almacenar los archivos físicos
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
que componen la solución. Escriba la ruta del directorio de trabajo del libro, que es C:\APVBNETVS.
6. Vea cómo la casilla de verificación Create directory fo r solution está marcada de forma predeterminada. Esto es recomendable para que la solución se organice mejor dentro del medio de almacenamiento. Haga clic en Ok para que se genere la solución llamada Ejercicios.
7. Al aceptar los cambios, se generará un directorio llamado Ejercicios en el directorio de trabajo. En dicho directorio existirá un archivo denominado Ej ercicios.sin, que alma cenará las referencias a los proyectos que componen la aplicación.
>- Adición de un proyecto a una solución 8. La herramienta Solution Explorer permite ver todos los elementos que componen una solución; mediante una interfaz de árbol de nodos, es posible ver todos los proyectos y componentes almacenados en archivos físicos que se tienen en una solución. Para dis poner de forma visual de Solution Explorer, en la barra de menús seleccione View Solution Explorer (Ctrl-Alt-L). 9. Aparecerá sólo un nodo, correspondiente a la solución Ejercicios. En el nodo se ha ce referencia a que actualmente la solución tiene cero proyectos asociados. Solution Explorer
-
X
10. Seleccione en Solution Explorer el nodo Solution “Ejercicios” y despliegue el menú contextual (haga clic en el botón derecho del ratón). Seleccione la opción Add - New Project. 11. Aparecerá la ventana New Project.
www.FreeLibros.me
70
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
12. En la sección Project Type seleccione Visual Basic - Windows, porque desarrollará una aplicación de consola utilizando Visual Basic; recuerde que los proyectos de consola se ejecutan utilizando el servicio Windows Application Services, aunque no sean interfa ces gráficas; de ahí que se traten como aplicaciones Windows. 13. En la sección Templóles seleccione Consolé Application. Al seleccionar el tipo de pro yecto, Visual Studio se encargará de proporcionar de forma automática todos los ele mentos típicos de una aplicación de consola, incluyendo archivos de código fuente, da tos y configuraciones pertinentes. 14. En el cuadro de texto Ñame coloque el nombre del proyecto, que debe ser HolaMundoCon; en el cuadro de lista Location especifique la ruta en la que se han de almacenar los ar chivos físicos a desarrollar. Escriba la ruta del directorio de trabajo de la solución, que es C:\APVBNETVS\Ejercicios.
15. Haga clic en Ok, con lo cual se generará dentro del directorio de trabajo de la solución un directorio llamado HolaMundoCon. En dicho directorio se encontrará el archivo de có digo fuente del programa de Consola (. v b )y el archivo del proyecto (. v b p r o j )que con centrará las referencias de los archivos físicos involucrados en este último. Se generan también directorios de trabajo: en \Bin se colocarán los ensamblados que se gene ren cuando se realice la compilación del proyecto; en \My Project se almacenarán archivos de configuración y especificaciones útiles para la compilación del proyecto, y en \obj se colocarán archivos temporales involucrados en el proceso de compilación y depuración.
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
16. Al haber especificado como Template una Consolé Application, Visual Studio genera de forma automática los archivos y referencias comunes para una aplicación de conso la. El componente principal será un programa de código fuente llamado Modulei .vb, que es un módulo en Visual Basic. 17. Document Window es el espacio principal de trabajo en Visual Studio, en donde la ma yoría de las herramientas se ubicarán en tiempo de diseño. En Document Window apa recerá Text Editor, que es el editor de texto simple donde se podrá modificar el códi go de Modulel.vb. 18. En este momento Solution Explorer debe mostrar todos los elementos físicos que com ponen la solución, y en Document Window se tendrá a Text Editor modificando el có digo de Modulel.vb. d u j* a Fíe
.^1 *
6 *
üíew
Project
* -/ H
Í?
guid
A
^ebug
D §ta
lo o k
ÿflndow
►
Community
Hefc
» Aliy CPU
Start Page Modulel.vb (General) ,M n f iu l* M n d iil*1
(Declarations)
a , —*
3 a ^
V finnT»irrtrtrrf(1 prnfrrt) H o la M n n d o C o n
Sub M a m O
1A My Project
Modulel.vb
End Sub E n d M o d u le
-"^Sokjbon Explorer Properties
'¿ C r,, ▼ ^
X
HolaM undoCon Project Properties
U « ^ B Misc Project Ffe
B Policy M ix .
a — i Ready
www.FreeLibros.me
HolaMindoCon.v4
-
72
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
> Herramientas de Text Editor 19. Text Editor tiene los siguientes elementos: F i g u r a 3 .5
Elementos de Text Editor
Selector de elementos
[ Tab* Barra de •elección de documentos
Selector de documentos activos
Selector de miembros
1
Module .vb
•££ Module 1
Cerrado de documento
í
vMein
( Nodule nodule i Delimiiador de brandling
Sub Hain() End Sub i i
Divisor do paneles de edición
Com plem entaron automática de código 1
End Rodule
í
Coloring
Divisores de procedimientos
20. Text Editor es una fascinante herramienta de edición de código, dadas todas las pres taciones que ofrece, como las siguientes: a) Barra de selección de documentos. En la parte superior de Text Editor apa recerá una barra que mostrará las pestañas (Tabs) para seleccionar el documento con el que deseemos trabajar. b) Tabs. Llamadas también pestañas de selección, identifican y permiten seleccionar los documentos abiertos con los que se puede trabajar. A los documentos que se en cuentran abiertos y en la barra de selección de documentos, se les llama documen tos activos. c) Selector de docum entos activos. Dado que se pueden tener tantos documen tos activos que se llene la barra de selección de documentos, hacer clic en el Selec tor de documentos activos (flecha ▼) permite ver los documentos activos en forma de menú para seleccionarlos. d) Cerrado de documentos. Si se desea quitar un documento de los documentos activos, simplemente se debe seleccionar el documento a cerrar y hacer clic en el icono de cerrado de documentos. e) Delimitadores de branching. Es la capacidad de Text Editor de mostrar de forma visible los alcances de los bloques principales de código (branching). Como se puede observar, al inicio de un procedimiento, módulo o clase, en las líneas delimitadoras de branching aparecen símbolos (-) y (+); éstos permiten visualizar y
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
ocultar el código delimitado, con lo que podemos hacer más clara la codificación mostrando sólo aquellas partes del código que realmente nos interesa observar. f ) Com píementación autom ática de código. Es la capacidad de Text Editor de agregar de forma automática líneas de código que por regla de lenguaje deben escri birse. Esto simplifica el proceso de codificación, además de que evita errores por omisión de código. g) Coloring. Es la capacidad de Text Editor de diferenciar por colores los elemen tos del código. Generalmente las palabras reservadas estarán en azul, los identificadores y operadores en negro, y los comentarios en verde. Esto es útil sobre todo cuando no estamos seguros de estar escribiendo correctamente las palabras reserva das. Si no aparecen en azul, es porque no están bien escritas. h) Divisores de procedimientos. los procedimientos en el código.
Son las delimitaciones horizontales que separan
i) Divisor de paneles de edición. Si se arrastra el icono Divisor de paneles de edición, podrá dividirse el espacio de edición de Text Editor en mitades. En cada una de ellas podrá desplazarse, ver y editar diferentes partes del código. Esto es especial mente útil en programas muy extensos, donde a veces es necesario comparar porcio nes de código ubicadas en distintas partes del archivo. j ) Selector de elementos. Se trata de un combo que muestra los diferentes módu los y elementos globales de una aplicación. En caso de que el programa posea mu chos elementos globales, este combo permite ir directamente a la parte de código que interesa, sin tener que navegar entre las líneas de código para buscar. k) Selector de miembros. Trabaja de la misma forma que Selector de elementos, sólo que a un nivel más bajo. Permite seleccionar un miembro de un elemento global. /) Intellisense. Capacidad a través de la cual Text Editor propone los objetos y miembros más comunes conforme se escribe el código.
> Colocación de números de línea en Text Editor 21. Los números de línea son muy útiles para identificar partes del código. Muy probable mente, si se presentan problemas al momento de la compilación o ejecución, Visual Studio referirá el número de línea que presenta problemas. Lo ideal es conocer el nú mero de línea que corresponde a cada parte del código. 22. Si los números de línea no aparecen en su editor de textos, puede desplegarlos de la si guiente manera: en la barra de menús seleccione Tool - Options para desplegar la ven
www.FreeLibros.me
74
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
tana Options. Seleccione el nodo Text Editor - Basic - General, en la sección Display marque la casilla de verificación U n e Numbers y haga clic en Ok. aai ♦ * ® -
Environment Projects and Solutions Source Control Text Edtor General Fie Extension IS Al Languages 8 Basic General Tabs V8 Specific 00 C# IS C/C++ S CSS fag HTML 1$ PL/SQL IS Plain Text ♦; SQL Script
Statement completion 0 Auto list members tilde advanced members 0P««’¿meter information Settings □ Enable virtual space □ wordwrap Show visual glyphs for word vvrap 0 Apply Cut or Copy commands to blank lines viien there is no selection Display f^lline numbers. 0 Enable single-click yRL navigation i Navigation bar
OK
~~] [
Cancel
j
> Intellisense y detección dinámica de errores 23. Dentro del procedimiento Main() introduzca la siguiente línea: Consolé.WriteLine("Presione INTRO")
Esto se deberá escribir en varios tiempos. Primero escriba “Consolé . ”. Al llegar al pun to, aparecerá un menú dinámico que propone los elementos del lenguaje que concuerdan con el código que se comenzó a escribir para que el desarrollador complete el enun ciado con la ayuda de Visual Studio. Esto simplifica el proceso de codificación y evita errores de sintaxis. A esta funcionalidad se le llama Intellisense. En la parte baja del menú dinámico Intellisense hay dos pestañas: Common y All. Da do que los elementos de un objeto pueden ser muchos, Visual Studio permite ver los más comunes, o bien todos. De manera predeterminada muestra los más comunes, lo cual es muy práctico. De la lista de elementos que aparece, es posible seleccionar con el ratón, con las flechas de dirección o por concordancia con lo escrito. Sólo en caso de que lo que busque no se encuentre en Common, recurra a All.
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
Module l.vb* Module 1
B Nodule Hodulel
2! Sub
M a i n ()
Console.!
BackoroundCoiof vBeep BiiterHeight Buff®rWK*h " ÿ CapsLock v Clear J* Groulefl JJ* CursorSize 23* CursorTop \-f CursorVteible Common
|
I
All
Siga escribiendo hasta “Consolé.WriteL”.La información que hemos escrito permite una concordancia exacta con un elemento del menú, mismo que se selecciona. Module l.vb* ■yl Module 1
Module Hodulel Sub
___________ M
H a m ()
Console.uritel E
^ SetWndovrf’osftton
H
v SetWindow5e©
gud M - y ime
Tr^atCocviroiCAclnpol
3 » WindowHeight ^j4 Wndowleft _5‘ Wi
j f WndowWidth v Write
---------- --_[
Para ahorramos esfuerzo y dado que ya está seleccionado el código que pretendemos es cribir, basta con poner el carácter que seguiría, en caso de escribir nosotros el código. En este caso sería un paréntesis “(“ . Escriba un paréntesis derecho y vea cómo Intellisense complementa el código de forma automática, desapareciendo el menú correspondiente.
www.FreeLibros.me
76
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
M o Hi i Ip I v h * ^
M odule 1
✓Main
Module Module1
1
SuLi f ía i h ( J~ C o n s o l e .W r l t e L i n e ^ End Sub
î 6 7 81
-End Nodule
Se recomienda ampliamente el uso de Intellisense, dado que se ha demostrado que reduce en gran medida los errores de sintaxis. Siga escribiendo la línea de código, y vea cómo aparece una ayuda interactiva de llenado de los elementos. En este caso, la ayuda indica que si se escribe “WriteLine ()”, lo que ob tendríamos sería un terminador de línea. La ayuda interactiva indica 18 formas de utilizar WriteLine, dado el polimorfismo con que el objeto fue programado. Utilizando los iconos a t de la ayuda interactiva, busque la alternativa 14 de 18, para que vea la forma en que se utiliza WriteLine con un String. MnrliiU*1 .vh* M o d u le 1 M o d u le
M o d u le 1
2¡ 3
4'
3 \4 j
R a in O
Console. WriteLine (|
1 18v
End I a of
WriteLine 0
[write? the current Ir e terminator to the standard output stream.|
End Module
^
En este punto ya debió haber escrito la línea de ejemplo por completo. 24. Modifique la línea, de tal forma que escriba “Console” con doble “s”, a fin de causar un error. Vea cómo al introducir una línea que presenta errores de sintaxis, Visual Studio le señala la falta al estilo de Microsoft Word, subrayando el error en color azul. Si se colo
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
ca sobre la parte del código que presenta el error, podrá darse cuenta que Visual Studio le informa el mensaje del error que se está provocando. Esto ayuda a reducir el tiempo de desarrollo, dado que no hace falta compilar y probar para saber que algo fallará. M odu le l. v b * ^ M o d u le l
tyMain
1ÍE1 M o d u l e 2¡ 31 4!
51;
Sub
M o d u le 1 M a in () C v^V o nV svW s ov^W f l ev . M r i t e L i n e (*" P r e s i o n e W
IN T R O " )
¡Name 'Conssole1is not declared.| End Sub
6I 7¡ 8| - E n d M o d u l e 9
25. Corrija la línea para que ya no genere errores.
> Modificación de código por medio de Text Editor 26. Como todo programa Hola Mundo, se espera que el usuario interactúe con el programa y que éste despliegue el mensaje “Hola Mundo”.Para hacer esto, nuestro programa en viará un mensaje, esperará el uso del teclado y finalmente desplegará el mensaje “Hola Mundo”. Modifique el procedimiento Main( ). El código deberá quedar de la siguiente forma:
— 1 2 3 4 5 6 7 8 9
I Codificación de HolaMundoCon Module Modulel Sub Main() Console.Write("Presione INTRO") Console.ReadLine() Console.WriteLine("Hola mundo.") End Sub End Module
27. Realmente usted sólo tuvo que agregar las líneas 4 ,5 y 6, que muestran un mensaje, es peran que se oprima una tecla y muestran otro mensaje, respectivamente.
www.FreeLibros.me
78
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
> Generación de una solución en Visual Studio 28. Generar una solución consiste en tratar de compilar todos los programas y elementos de todos los proyectos asociados a una solución. Al realizarse la compilación se gene ran los ensamblados correspondientes a cada uno de los proyectos, quedando listos pa ra su ejecución. 29. Vaya al menú Build - Build Solution (Ctrl-Mayús-B) para generar la solución. 30. En la parte inferior de Visual Studio se abrirá la ventana Output, que es la encargada de mostrar el resultado de los procesos que Visual Studio realiza en el plano subyacente, al ponerse en contacto con las herramientas de línea de comandos de .NET Framework, así como con otros elementos de la plataforma. Si al final de la generación aparece el siguiente mensaje, su programa es correcto, dado que se tuvo éxito en la construcción de un proyecto.
Show output from: Buld
»
X
3
----------- B u i l d s t a r t e d : P r o j e c t : H ola H un d o C o n , C o n f i g u r a t i o n : D ebug A ny CPU ----------H o la llu n d o C o n - > C: \APVBNSTVS\Hj« r c ic io s \H o la H u n d o C o n \b in \D « b u g \H o la lf u n d o C o n . 9x0 1
> Depuración de una solución 31. En la barra de menús seleccione Debug - Starí Debugging (u oprima la tecla F5) para depurar la aplicación. En esta operación se comprueba que el programa esté correcto sintácticamente y al mismo tiempo se ejecuta la aplicación para verificar que no cause problemas en tiempo de ejecución. Para efectos prácticos, depurar es ejecutar en am biente de desarrollo. 32. Con ello aparecerá la aplicación de consola ejecutando. Al hacer clic se mostrará muy rápidamente el mensaje «Hola Mundo». FIN DEL E JER C IC IO *
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
1C
Ejercicio 3.2 Creación de una aplicación Windows en Visual Basic con Visual Studio, trabajando varios proyectos en una solución
Desarrollará una aplicación Windows tal que al hacer clic en un botón muestre un mensa je «Hola Mundo». 1. En este ejercicio trabajará con la solución creada en el ejercicio anterior.
> Generación de una aplicación W indow s 2. En el Solution Explorer seleccione el nodo Ejercicios (Solution “Ejercicios”). 3. Despliegue el menú contextual y seleccione Add - New Project.
4. En Project Types seleccione el nodo Visual Basic - Windows. En Templates seleccio ne Windows Applications. En Name especifique el nombre del proyecto, que será HolaMundoWin, y se almacenará en el directorio de trabajo de la solución. Haga clic en Ok. 5. En Document Window aparecerá una herramienta llamada Form Designer, que permi te el diseño de interfaces de forma gráfica y dinámica. 6. En la barra de menús seleccione View - Toolbox (Ctrl-Alt-X). Aparecerá la herramien ta Toolbox, que muestra de forma clasificada los controles gráficos disponibles para una aplicación Windows.
www.FreeLibros.me
80
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
7. Los controles son enlaces gráficos que permiten acceder a las clases de .NET Framework para la elaboración de interfaces gráficas; a través de los controles es posible agregar objetos de interacción en una interfaz. Visual Studio se encarga de agregar el código necesario para la integración en los programas. 8. Observe cómo Toolbox no permanece en su lugar por mucho tiempo.
> Fijación de una herramienta en el espacio de trabajo 9. Cuando una herramienta de Visual Studio se encuentra en modo de ocultación automá tica, al no hacer uso de dicha herramienta, ésta se contrae, liberando espacio de traba jo en Document Window. Se dice que una herramienta está en modo fijo cuando per manece en el espacio de trabajo de Document Window independientemente de si se está haciendo uso de ella o no. Hay ocasiones en que preferimos que la ocultación au tomática no esté disponible, por lo que procedemos a colocar la herramienta en modo fijo. 10. Teniendo visible el Toolbox, haga clic en el Icono de ocultación automática que se en cuentra en la esquina superior derecha de la herramienta (barra de título del Toolbox). Después de haber hecho clic en el icono, debe lucir de la siguiente forma.
n
Modo filo fijo
Q
Modo ocultación automática
Si el Icono de ocultación autotnática aparece en modo fijo, hacer clic sobre él pondrá a la herramienta en modo de ocultación automática; si aparece en modo ocultación automáti ca, hacer clic sobre él pondrá a la herramienta en modo fijo. 11. En caso de que Toolbox esté en modo de ocultación automática, cambie su estado a modo fijo. La interfaz deberá quedar de la siguiente manera:
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
’a
&e J
id*
Ytew
• -i *
J
& o«ct id
Quid
Qebuo
Data
loots
Window
C o n rn n ty
►
J
Debug
i a
d
i
bete • AnyCPU
•
;
5 F o r m l.v b [D e s ig n ]
Start Page
M o d J e l.v t
▼
x
■ All W in dow « T o m i«
Solubon Explorer - S o l u t i o n
*
* C o m m o n C on trols
*
♦ f n n iiin w
J JQ
ü
3
iiJ 3
* ?
X
A
3 3 Solution "E)*rockx' (2 project*) -
♦ M e n u s & To olb ars • D ata
5 3 M o la M u n d o c o n ^ M y Protect y
• C o m p o n e n t«
M o d Je l vb
.noianjnoovnn At M y Pi u|w.1 Formi .'A»
• Printin g » fiutino« - G e ne ral n TI w e 9 e I w uvaUc u n Ai ub bi II *> group. Drag an tcm orto this text to add < to the tootoox.
- ^ ÌV É # ln n F » r liw
¿
Properties
* 9 X
.mui 0
■■■■■■. ■ y Tim H iY Ij
•’ _ ó -
' L"-'' ab r
0
G
T>
CrtiMIng f*n)*rt "Hri/MnrViWirY ..
rrM tbm « rrft c tf il
> Adición de objetos de interfaz en tiempo de diseño 12. En Form Designer se pueden agregar objetos de interfaz de tres maneras: Modo inser ción, haciendo doble clic sobre alguno de los controles; Modo arrastre, arrastrando un control desde el Toolbox hacia el Form Designer, y Modo trazo, haciendo un solo clic sobre un control y trazando en Form Designer el espacio donde el control debe aparecer. 13. En Toolbox aparecen categorías de controles que pueden ser incluidos en una interfaz. Expanda en Toolbox la categoría Common Control, haciendo clic en (+). 14. Haga doble clic sobre el control Button, que se encuentra en Toolbox - Common Control. fab] Button 15. Arrastre el control Label, que se encuentra en el Toolbox, y colóquelo debajo del bo tón que acaba de agregar en el punto anterior. À
Label
www.FreeLibros.me
3
82
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
16. En los puntos anteriores se agregó un objeto en modo inserción y uno en modo arrastre. 17. Acomódelos de tal forma que queden distribuidos de la siguiente manera (sólo arrás trelos; no haga doble clic sobre ellos): F o rm l.v b [D e s ig n ]*
StartPage
' ■ ’■ ' I
«
▼
X
L Íu lE f l
Bulloni =' Labell
o
i
18. Seleccione el objeto Label 1 que se agregó a la interfaz. Para ello, haga un clic sobre él una vez. 19. Cada elemento en la interfaz es un objeto y, en tal carácter, posee propiedades que de terminan su apariencia y sus capacidades de comportamiento. La herramienta Properties permite modificar los valores de las propiedades de los objetos. En la barra de me nus seleccione View - Properties Windows (u oprima la tecla F4) para ver las propiedades del objeto seleccionado.
Properties
-
*
X
; La b e ll System,Windows,Forms.Labe 1©n= !=] 1 X ' * | ii ImageKey 1___1 (none) ImageList RightToLeft
(none) No L a b e ll
: Text ; The te x t associated with the control.
20. Como tenía seleccionado el objeto sus propiedades.
L a b e ll ,
Visual Studio permite la modificación de
21. En la ventana Propiedades, en el combo superior aparecerá el nombre del objeto que se modificará, así como la clase en la que está basada. Busque la propiedad (Ñame) y cam
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
bie el nombre Labell por lblResultado. Presione Intro. El nombre habrá cambiado en el combo superior de la ventana Properties, lo que indica que el cambio ha sido aceptado. 22. Para agregar funcionalidad al programa es necesario especificarle el comportamiento que deseamos tenga como respuesta a la interacción con el usuario. Para ello debemos codificar procedimientos de evento, que son bloques de código que se ejecutarán cuan do el usuario o el programa interactúen de cierta manera con la aplicación. 23. Deseamos que al hacer clic en el botón se coloque el texto Hola Mundo en el objeto lblResultado. Para ello debemos codificar el procedimiento que responda al evento Click del botón. 24. Haga doble clic en el botón que agregó a la interfaz. Automáticamente aparece el pro cedimiento precodificado que se ha de ejecutar al momento de hacer clic (Click) en el botón (Buttonl) (de ahí que el procedimiento se llame Buttoni_Click). Vea cómo el editor queda listo para codificar lo que debe suceder cuando se haga clic en el botón en tiempo de ejecución. 25. Dentro del procedimiento deberá agregar una línea que especifique que al hacer clic en el botón, se cambiará la propiedad Text del objeto lblRespuesta a Hola Mundo. El código debe lucir como sigue:
I Codificación de HolaMundoWin H m n l.vh *
i-nrmi.vh[|j*agn)*
v «
Mmtilfti.vh
_______________________________________
t ;(G eneral)
(D e c la ra to r» )
Public Class Formi Pri Private Sub DuttonljClick(0yVa1 sender As System.Object, DyVal e As System.EventArgs) Handles Outtonl.Click lblResultado.Text - "Hola Mundo'
End Sub ÎÏ h Lmd ( 1lass ;
> Navegación entre documentos de una solución 26. En la parte superior de Document Window aparece la Barra de selección de documen tos, en la cual se muestran todos los elementos de la solución abiertos al momento. Ca da elemento posee su propia pestaña de selección (o Tab). /Fo rm 1.vb |" Form 1.vb [Design]
StarhPage
Modulel.vb
w X
27. En este ejemplo aparecen cuatro documentos o herramientas que pueden ser seleccio nadas en la Barra de selección de documentos. Cada documento se activa, al hacer clic sobre la pestaña correspondiente, en Document Window, la herramienta utilizada por el documento para su edición. Forni.vb y Modulel.vb, por ser código fuente, aparecerán utilizando Text Editor, mientras que Forni . vb [Design ] se mostrará usando Form De signer. Por otro lado, Start Page aparecerá como un navegador de páginas Web intrín seco de Visual Studio, dado que es una página Web.
www.FreeLibros.me
84
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
28. Seleccione alternativamente las distintas pestañas y vea el comportamiento de Visual Studio. Si desea cerrar alguno de los documentos abiertos, basta hacer clic en el Tab y posteriormente en la cruz que aparece en el extremo izquierdo de la Barra de selección de documentos.
> Cómo guardar documentos en una solución 29. Si el Tab de un documento muestra un asterisco (*), eso indica que el documento po see modificaciones que no han sido guardadas. 30. Guarde todos los cambios. Para ello, en la barra de menús seleccione File - Save All u oprima Ctrl-Mayús-S.
> Establecimiento del proyecto de inicio para una solución 31. Cada proyecto tiene un objeto de inicio (startup object) que puede ser una página Web o un programa que permita su ejecución. Al ejecutar el ensamblado generado a partir de un proyecto, el objeto inicial será el objeto a mostrar primero. 32. De la misma forma, cada solución en Visual Studio puede tener uno o más proyectos, pero todas deben tener un proyecto de inicio (startup project). Cuando ejecutemos una solución desde Visual Studio, lo que veremos como resultado será la ejecución del ob jeto inicial del proyecto seleccionado como proyecto de inicio. 33. Vea la ventana del Solution Explorer. En la solución Ejercicios hay dos proyectos registrados: el programa de consola del ejercicio anterior (HolaMundoCon) y el proyec to Windows que estamos trabajando (HolaMundoWin). Si observa bien, el proyecto HolaMundoCon aparece en negritas, lo que indica que es el proyecto de inicio de la so lución. Si depura (oprimiendo la tecla F5) se ejecutará la aplicación de consola, y no la de Windows que estamos trabajando. Solution Explorer - H o la M un .,. «*• £
X
& £ BLL3 , "3 Solution 'Ejercicios' (2 projects) 0"
Ó
jaBBffiasmaa =dl My Project Modulel.vb . 1 HolaMundoWin :M My Project ■• \S\ Forml ,vb
¡¿^Solution Explorer
¿Class View
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
34. Para hacer que nuestro nuevo proyecto de aplicación Windows sea el proyecto de ini cio, seleccione el nodo HolaMundoWin en el Solution Explorer. Invoque el menú de contexto y seleccione Set as StartUp Project. De esa forma el proyecto de Windows será nuestro proyecto de inicio. 35. En nuestro caso, como la aplicación Windows contiene sólo un formulario Windows, establecer nuestro proyecto como proyecto de inicio provoca que el único formulario sea el objeto de inicio. Si nuestra aplicación tuviera más de un formulario Windows se ría necesario especificar cuál de ellos es el objeto de inicio. 36. Un objeto de inicio es el elemento de un proyecto que será el primero en mostrarse en la interfaz. Ig.taaferartfft!/. «.im K m m a SubtMiT)ctuw>’(2prvjcUv) HolaMundoCon M/Project Mo 6 i * l vt>
„ »P-HLWJHB*!* ¿i Bu*d
Retuéd
Oean Project Deoendenoe*... Project Oufd Order... Add Proper
» Add Reference...
MoU’‘
Add Web Referente...
IDv,
ttew d o« Otogr«n
□
M i)
Sot at Startup Project
P ro — Detug
0
Pol ¿
^
fc*
Po l X
Rem ove Renam e
M rw
U r * * d Project . P rop ertm
37. Generar una solución permite que los elementos de todos los proyectos de una solución sean compilados, generando los ensamblados correspondientes. En este caso, generar la solución implicaría la compilación de los dos proyectos que hemos desarrollado. 38. Guarde la solución y genérela, para comprobar que no haya problemas con el trabajo realizado. Si aparece el siguiente resultado es que todo fue bien (vea cómo se han cons truido dos ensamblados (EXE) uno por cada proyecto de la solución):
www.FreeLibros.me
86
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
sa -Ar ---------- t i u i l d s t a r t e d :
V r o je c t:
A 3
M oio flu n d oC on , C o n t i g u r a t i o n :
U c tu g A n y L 'V U ------------
C . \ V I H D 0 V 3 \ n x i:t i»u lC .H IT \ r (a jK W v ik \ v 2 . 0 . S 0 7 2 7 \ V b t. e x e / u u c v n liy / iiu p y il- s . H i t i iu . V is u a lB a s A i: , S y s L e u , 3; U o loK u n d o C o n -*• C: \A T V B H IT V 2 \ Ijo ire ie io3 \ H o la Itu n d a C oD \ b in \ D c b u 9 \ H olQ H u n d oC on . cue ---------- R ih I ri «t.s rr.e rt- P r n jp r r .- H n la lh m iiM lin , r n n f i ( j i i r s f i n r f Dohu
C : \V IH D 0V S \ H i c r o s o i t . H E T \ F r a n e v o r k \ v 2 . 0 . S0 7 2 7 \V b c .e x e / n o c o n f i o / I m p o r t s : M i c r o s o f t . V ls u a iB a s ic , S y s t e m , S ; H o la H u n d o V in - > C : \ A P V B N B T V S \ I je r c ic io 5\H o la H u n d o W in \b in \D e b u g \H o la M u n d o V in . oxo = = = = = = = = = = B u i l d : 2 s u c c e e d e d o r u p - t o - d a t e , 0 f a i l e d , 0 s k ip p e d • ■ ■ ■ ■ « • » ■ •
ü 39. Si no hubo problemas, depure la aplicación (tecla F5). Se depurará el proyecto de ini cio; es decir, la aplicación Windows. 40. Al aparecer la interfaz en tiempo de ejecución, haga clic en el botón, y vea cómo el tex to de la etiqueta cambia. En ese caso, la aplicación funcionó adecuadamente. 41. Guarde su aplicación y ciérrela. FIN DEL EJERCICIO*
j C f j Ejercicio 3.3 T
\
Creación de una aplicación Web en Visual Basic con Visual Studio, tra bajando varios proyectos en una solución
Desarrollará una aplicación Web tal que, al hacer clic en un botón, muestre el mensaje “Hola Mundo”.
> Creación de un directorio virtual para un sitio Web 1. Una aplicación ASP.NET funciona con base en la colaboración de .NET Framework e Internet Information Server. Si creamos una aplicación ASP.NET, Visual Studio inten tará almacenarla como un sitio dependiente del sitio Web predeterminado; es decir, http://localhost/, que equivale a crear un directorio en la ruta C: \inetpub\wwwroot y darle permisos de ejecución Web. 2. No siempre deseamos que nuestro sitio se almacene físicamente en C:\inetpub\ wwwroot, por lo que es necesario especificar que un directorio cualquiera actúe como sitio Web (a lo que se llama directorio virtual). Aunque el directorio no se encuentre en C: \inetpub\wwwroot, virtualmente si lo estará. 3. Genere en el directorio de trabajo (C: \a p v b n e t v s ) un directorio que se llame HolaMundoweb. Ese será el directorio de trabajo de la aplicación Web que creará. 4. Seleccione Inicio - Panel de control - Herramientas administrativas - Servicios de Internet Information Server.
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
5. Expanda el árbol Servicios de Internet Information Server hasta que localice el nodo Sitio Web Predeterminado. 6. Estando en ese nodo, despliegue el menú contextual y seleccione la opción de menú Nuevo - Directorio virtual....
% m
m Acción
4-
S E
^
Ver
Ayuda
& ® El (5
Servicios de Internet Information Server
Nom bre
JJ, APRENOAWS (equipo local) -
Sitio Web predeter minaci
5erv*dor v t tu a l S M T P predet
Ru ta de a:c esc
^IISHefp _^tsweb
: _ ) Sitios W e b
« +
W an
m rn sm m m
Archivo
c:'\windov'í5^he|p\itshelp
C:\wîNôôwS\web\tsweb
E xplorar
C : \A r c lw o s d e p rogram aVArchivos c.
Abrir
C:\WINOOWS\web\prirrters
Examinar
$03ForN ET CommEd
C :\A rch ivo s d e p ro to a m a U e T e Soft.
p o r tW e bF o r m V*ewer2
C:\Archivos de progfema\Microsoft .
’I I I
C r\E je rcic» 5P III
Detener
C:\AuditCíia
P au sa r
C:\Sitio4J
T o d a s las t are as
Web de Extensiones de servidor
Ver
Adm inistrador d e E xte n sio n e s d e servidor
Cambiar nombre
tor
Actuafear E xp o rta r lista... Propiedades
Ayuda
ration
1
O Crear un nuevo directorio virtual Web
7. Aparecerá el Asistente para crear un directorio virtual. Haga clic en Siguiettíe en la pantalla inicial. Cuando el asistente pregunte por el alias de su sitio, escriba a p v b n e t v s y haga clic en Siguiente. 8. Como directorio de contenido del sitio Web, seleccione o escriba la ruta del directorio que acaba de crear (C: \APVBNETVS\HolaMundoWeb) y haga clic en Siguiente. 9. Deje los permisos tal como están. Haga clic en Siguiettíe y luego en Finalizar. 10. Se habrá creado un sitio llamado
apvbnetvs.
11. Ubique el nodo APVBNETVS en el árbol de servicios de Servicios de Internet Infor mation Server y selecciónelo. En el panel de la derecha podrá observar que no hay ele mentos disponibles en dicho sitio. Cierre el programa Servicios de Internet Informa tion Server.
www.FreeLibros.me
88
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
> Creación de una aplicación W eb ASP.NET 12.En el Solution Explorer seleccione el nodo de la solución E je rc ic io s y en el menú con textual seleccione A dd - New Web Site. Aparecerá la ventana A dd New Web Site.
d a
Add N?w W lemplates:
II
»*
Visual Studio installed templates ASP.NET Web Site
ASP.NET Web Service
. J Personal Web Site Starter Kit
4 k Empty Web Site M y Templates ;J3Search Online Templates...
A blank ASP.NET Web site Location:
HTTP
Language:
Visual Basic
Ql
http ://localhost/APVBNETVS
Q j | Browse... |
OK
~] j
Cancel
13. En Templates seleccione ASP.NET Web Site. En Location haga clic en el botón Browse; se desplegará la ventana Choose Location, que permite seleccionar una ru ta física del sistema operativo (si está codificando en \inetPub\wwwroot) o un direc torio virtual. 14. Seleccione en el panel derecho el origen Local IIS para indicar que el desarrollo se tra bajará en un directorio virtual dentro de la máquina. Al seleccionar Local IIS , aparece rán en organización de árbol de nodos todos los sitios registrados. Seleccione su sitio APVBNETVS. Haga clic en Open para aceptar.
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
m m Local In te rn e t In fo rm a tio n Se rve r
iQ J
l u x
Select the Web site you want to open.
File System 5 0
Local W e b S e r v e r s
a ®
Local US
Sitio W e b p red ete rm in ad o __ I _p rivate
S 3 __ I a sp n e t_ d ie n t
FTP Site
É
r a
®
í__ 1 C r y st a lR e p o r t sW e b 5 e r v ic e s 2 0 0 5
63 á
R e m o te 5ite
©
C o n to s o
D P D F G e n 3 0 3 F o rN E T C o m m E d ra
Fram ing
IISHelp
Él _J images ® — Printers ® tsweb
□
U se S e c u re S o c k e ts Laye r
Open
[
Cancel
|
15. Se generará el sitio Web ASP.NET. La página principal sobre la que se estará trabajan do es Default.aspx; las páginas pueden trabajarse en modo de diseño (Design) y en modo codificación (Sourcé). La forma de alternar entre uno y otro modo es seleccio nando las pestañas que aparecen en la parte inferior de Document Window. Al estar en Design, se puede utilizar Toolbox para integrar objetos en la interfaz. En modo Source es necesario agregar las etiquetas en el lugar indicado.
www.FreeLibros.me
90
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
D e f a u lt . a s p x
Start Page
C li e n t O b j e c t s & E v e n t s
Page
Form i, vb
§
( N o E v e n ts )
L a n g u a g e = " V B ,i À u t o E v e rrtWi r e u p = " f <
< IDO CTYPE htm l
□
P U B L IC " - / /W 3 C // D T D XHTML 1|
□ ■ ht mV < h e ad r u n a t = " s e r v e r " > < t i t i e > U n t i t l e d P a g e < / t i t l e>
o ■lilla
Q Design
EB Source
IBI
0
0
16. Cambie a modo de diseño (Design) y utilizando Toolbox (CTRL-ALT-X), agregue un Button y un Label. 17. Seleccione el objeto Labell y asigne en la propiedad Nane, el mismo nombre que asig nó en Windows: lblResultado. 18. Haga doble clic en el botón que agregó a la interfaz. Aparecerá el procedimiento de evento que se ejecutará al momento de hacer clic en el botón. Codifique lo siguiente en el procedimiento Buttonl_Click:
L = _I Codificación de D c fo u lt . a sp x .v b * ,
D c foiA .ospx*
R o rtP o g o
HolaMundoWeb Form i.vb
( C o f lw a l)
Formi .vb [Dcitgn]
M odkicl.vb (D e c la ra t io n c )
P a r t í al C la s s J J e f a u lt I n h e r i t s S y s t e m . W e b . U l. P a o e
Protected Sub Buttonl_Clicl<(ByVal sender As Object, ByVal e As System.EventArgs) Handles Buttonl.Click 1blRecultado.Text ■ " H o i * M u n d o " Cnd Sub E n d Class
19. Seleccione el nodo http: //localhost/APVBNETVS en el Solution Explorer y establéz calo como proyecto de inicio.
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
20. Vuelva a generar la solución (Ctrl-Mayús-B) y, si no hay problemas en la generación, depure la aplicación (tecla F5). Debe funcionar igual que la aplicación Windows: al ha cer clic en el botón, el mensaje de la etiqueta debe cambiar. 21. En este ejercicio comprobamos que el desarrollo Windows y Web realizado desde Vi sual Studio es prácticamente idéntico. 22. Finalmente nuestro proyecto quedaría como sigue. Solution Exploreir - Solution 'Ejercicios' (3 projects)
i 3 0
0
0
X
i >
Solution'Ejercí dos’ (3 projects) . 3 HolaMundoCon = jíi My Project y Module 1. vb .jp HolaMundoWin :^di My Project Forml.vb J P http://localhost/ñPVBNETVS/
0
App_Data ¿ 3 Default, as px j j l web. confi g
- >] Solution Explorer S J Class View
23. En cualquier momento puede llamar a edición cualquier elemento de la solución. De pendiendo del tipo de archivo que se trate, Visual Studio invocará Text Editor, Form Designer, Web Form Designer o lo que sea pertinente. 24. En Solution Explorer haga doble clic en el nodo HolaMundoCon - M odulel.vb, luego haga doble clic en HolaMundoWin - Forml.vb; haga clic en http://localhost/ APVBN ETVS/ - Default.aspx, y finalmente haga clic en http://localhost/APVBNETVS/ - DefaulLaspx - Default.aspx.vb. Vea cómo se comporta Visual Studio. 25. Guarde su aplicación y ciérrela. FIN DEL EJERCICIO*
www.FreeLibros.me
92
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
M
a p a m e n t a l d e l c a p ít u l o
www.FreeLibros.me
Capítulo 3. Técnicas de desarrollo con Visual Studio 2005
T e r m in o l o g ía
Barra de selección de documentos, 72, 83 Bloque de código, 67 Categorías de controles, 81 Desarrollos colaborativos, 63 Directorio virtual, 86
Document W indow,
Pestaña de selección, 83
71 Guión bajo (J, 67 Intellisense, 74
Project Type, 66, 68, 70 Properties, 82
Internet Information
Proyectos, 61
Server, 86
Selector
Solucion(es), 61 Solution Explorer, 69 Start Page, 65 Startup object, 84 Tab, 83
M o d o fijo, 80
de documentos
Tabs, 72
M ód ulo de
activos, 72
Templates, 66, 68,
ocultación
de elementos, 73
automática, 80
de miembros, 73
Objeto de inicio, 84
sin, 66
70 Text Editor, 71-2 Toolbox, 79
P r e g u n t a s ________________________________________________________________________
3.1 ¿Cuáles son las recomendaciones generales de organización de soluciones y proyec tos en Visual Studio? 3.2 ¿Cuáles son los elementos básicos de sintaxis del lenguaje Visual Basic? 3.3 ¿Cuáles son las principales diferencias entre los proyectos de Consola, Windows y Web? 3.4 ¿Para qué sirve Solution Explorer? 3.5 ¿Para qué sirve Toolboxl 3.6 ¿Cuáles son las principales características de Text Editor?
www.FreeLibros.me
94
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Exam en
r á p id o d e l c a p ít u l o
Parte 1: M arque con una cruz el inciso que considere que responde a la pregunta.
L
Es el nivel más alto de organización de trabajo en Visual Studio: a) Proyecto b) Solución c) Ensamblado
2.
Son colecciones de archivos fuente que producen un ensamblado al momento de ser compilados: á) Proyecto b) Solución c) Paquete
3.
Herramienta que nos permite ver los elementos que componen una solución, en forma de árbol de nodos: á) Solution Explorer b) Solution Viewer
c) StartPage 4.
Es la capacidad de Text Editor para proponer objetos y miembros, al momento de editar el código: á) Intellisense b) Coloring c ) Tooltip interactive
5.
Consiste en tratar de compilar todos los programas y elementos asociados a un proyecto o solución para la generación de ensamblados. a) Build b) Compile c) Debug
Parte 2: Coloque en la línea la letra «F» si el enunciado es falso, y «V» si es verdadero.
6.
Visual Basic es sensible al uso de mayúsculas y minúsculas.
_______________
7.
Text Editor y Document Window son, en esencia, lo mismo.
_______________
8.
La ocultación automática está disponible sólo en Text Editor y Toolbox.
----------------------
9.
Para probar la aplicación Web es necesario tener instalado y funcionando IIS.
10. Las plantillas (templetes) permiten predefinir recursos disponibles durante la creación de una aplicación.
www.FreeLibros.me
_______________ _______________
Capítulos: 4 Variables, arreglos y tipos
Parte 2
de datos 5 Espacios de nombres y desarrollo de librerías 6 M anejo de operadores
Fundamentos de programación en Visual Basic
7 Estructuras de decisión y control 8 Manejo estructurado de
En esta parte del libro se analizan los fundam entos de la programación en lenguaje Visual Basic.
excepciones
Herramientas de Visual Studio revisadas: 1. Debug / Breakpoints 2. Command W in d o w 3. Autos / Locals / Watch 4. Immediate W in d o w 5. Comment / Uncomment 6. Clipboard Ring 7. Task List 8. Error List
Utilizando al máximo las herramientas de Visual Studio 2005, se estudia el manejo de las variables de memoria, así com o las estructuras de decisión y control desde las cuales se realizará el consum o de las clases de la biblioteca de .NET Framework (BCL). Finalmente, aprenderá a implementar esquemas de manejo estructurado de excepciones con el fin de controlar, mediante programación, las acciones procedentes en caso de que se tengan problemas en tiem po de ejecución. Nuestra reflexión es la siguiente: la discusión si Java es mejor que .NET es irrelevante. Lo im por tante no es el lenguaje de program ación que esco gemos para trabajar, sino lo que podemos hacer con el lenguaje. Un excelente lenguaje en m anos de alguien que no tiene nada que decir es una herramienta mal aprovechada. Preocúpese por tener un objetivo valioso a alcanzar, y luego emplee representaciones abstractas de datos e instrucciones precisas para desarrollar program as que cumplan de form a óptima con el objetivo planteado.
www.FreeLibros.me
www.FreeLibros.me
C a p ít u l o
4
1 1y
1 '3
C /
Variables, arreglos y tipos de datos Objetivos: Conocer las generalidades del manejo de variables y arreglos, así co mo la definición de sus características especiales.
1. Conocerá las variables de memoria y su funcionamiento en .NET. 2. Aprenderá a declarar las variables de memoria. 3. Se familiarizará con el comportamiento y las características de las varia bles de memoria. 4. Conocerá los tipos de datos admitidos por .NET y la forma en que se rea lizan conversiones. 5. Entenderá el alcance de las variables de memoria dentro de un programa. 6. Comprenderá qué son los arreglos, cuáles son sus tipos y la forma de de finirlos. 7. Aprenderá a implementar esquemas Strong Typing.
www.FreeLibros.me
98
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido V a ria b le s........................................................................................ Identif icadores......................................................................... Tipos de datos en Visual B a sic ..................................................... Conversión de d a t o s ......................................................................... Conversión implícita (C astin g)..................................................... Conversión explícita ................................................................ Conversión por m é to d o ............................................................. Acceso a datos Valué type y Reference type ......................................... Capacidades de los tipos valor y referencia .................................. Naturaleza de tip o de los datos ................................................. ByVal y B y R e f........................................................................... Strong T y p in g .................................................................................. Option Explicit [On/Off] ........................................................... Option Strict [O n / O ff]............................................................... Demostración del alcance de las variables y la forma en que preservan valores (I) ................................................................ Manejo elemental de variables .......................................................... Declaración de v a ria b le s ........................................................... C on stan tes.............................................................................. Literales.................................................................................. Valores por o m isió n .................................................................. Demostración de la declaración de variables y constantes , y la realización de c o n v e r sio n e s ........................................................ > Construcción de un solo proyecto............................. Origen de las variables: clases y e stru c tu ra s.................................. Alcance de las variables............................................................. S h a d o w in g .............................................................................. Accesibilidad de las variables (accesibility) .................................... Demostración del alcance de las variables y la forma en que preservan valores ( I I ) ................................................................ A r re g lo s ................................................................................. Arreglos unidimensionales ........................................................ Arreglos m ultidim ensionales...................................................... Arreglos escalonados................................................................ Comprobación del u so de arreglos unidimensionales, multidimensionales y escalonados .................................................... Estructuras y enumeraciones ............................................................. Estructuras.............................................................................. Enumeraciones ....................................................................... M ap a mental del capítulo ................................................................ Term inología................................................................................... P re g u n ta s ....................................................................................... Examen rápido del c a p ít u lo ...............................................................
www.FreeLibros.me
99 100 102 105 106 106 107 107 107 108 108 109 109 109 110 112 112 113 113 114 114 115 117 118 119 120 121 125 126 127 128 129 133 133 134 135 136 136 138
Capítulo 4. Variables, arreglos y tipos de datos
El mundo de la computación es, en última instancia, un mundo de datos. Los principales objetivos de toda aplicación son procesar datos para transformarlos en in formación, hacerlos llegar en la cantidad y la forma precisas a las personas indicadas (y au torizadas), y almacenarlos de manera eficiente. No es asunto menor entender los datos y la forma en que se comportan. Una ineficiente se lección de la forma en que se manejan los datos puede acarrear errores y mal desempeño de la aplicación. Es importante recordar también que los lenguajes de programación son estructuras simbó licas que permiten hacer uso de los dispositivos y recursos de una computadora. Uno de los componentes más importantes de una computadora es la memoria de acceso aleatorio (RAM/Random Access Memory). La RAM es indispensable para una compu tadora debido a que los programas y datos deben residir en ella para que puedan ser toma dos de ahí por el procesador; nada puede ser procesado por una computadora si no está an tes en la memoria. Dicho de otra manera, el procesador no habla con nadie más que con la RAM. Ahora bien, la memoria se encuentra seccionada en posiciones de memoria, cada una de las cuales tiene un identificador interno (que a veces nos es revelado en forma de número hexadecimal cuando Windows causa un volcado de memoria). La memoria puede ser utilizada por el sistema operativo para que todos los programas fun cionen; ¿puede un programador disponer de posiciones de memoria? Por supuesto que sí: a través de las variables de memoria. El presente capítulo analiza la forma en que es necesario codificar el almacenamiento de valores en memoria en Visual Basic, de forma que los procesos puedan utilizarla eficien temente.
Variables Una variable de memoria es la referencia lógica a una posición física de memoria RAM. Por medio de las variables es posible almacenar valores en la memoria, asignarles un nom bre determinado y disponer del valor almacenado cuando se requiera. Estos valores almacenados estarán disponibles en tanto que no liberemos la memoria, ya sea por medio de programación o como resultado de haber cerrado la sesión de programa donde fueron definidos. Por supuesto, apagar la máquina produce el cierre de todos los programas y, por tanto, la pérdida de los valores almacenados en las variables.
www.FreeLibros.me
100
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Las variables tienen siempre las siguientes características: □ Identificador {identifier). Es el atributo que permite distinguir a una variable de otra. □ Tipo de dato (datatype). Es el tipo de valor que podrá almacenar la variable; determi
na el tratamiento interno que tendrá el valor y la cantidad en bytes que consumirá en memoria, entre otras cosas. □ Alcance (,scope). Es el atributo que define el código dentro de un programa en que una
variable puede ser utilizada sin utilizar calificador; es el estado de existencia y la per sistencia del valor de la variable en tiempo de ejecución. □ Accesibilidad (accessibility). Es el permiso que se proporciona al código para leer la variable o escribir en ella. □ Tiem po de vida (lifetime). Es el periodo de ejecución en el cual la variable está dis ponible. F i g u r a 4 .1
M em oria RAM
Disposición de memoria en .NET
Disponible a través de variables
r
V
> Identificador > Tipo de dato > Dominio > Alcance > Accesibilidad > Tiempo de vida
P o s ic io n e s
en memoria
Identificadores Se le llama identificador (identifier) al nombre lógico de un elemento de programación por medio del cual puede ser referido. Las variables, al igual que los procedimientos, las clases, las estructuras y otros elementos poseen un identificador; a través de él, dichos elementos son utilizables de manera progra mática. Reglas de composición de los identificadores.
con las siguientes reglas:
www.FreeLibros.me
Los identificadores deben cumplir
Capítulo 4. Variables, arreglos y tipos de datos
□ Deben iniciar con un carácter alfabético o guión bajo ( _ ) . □ Pueden contener sólo caracteres alfabéticos, dígitos decimales o guiones bajos. □ Si se inician con un guión bajo, deben contener al menos un dígito decimal o un carác ter alfabético. □ No pueden contener espacios intermedios. Reglas no escritas de composición de los identificadores. Existen otras reglas
no forzosas, pero que le pueden ser de mucha ayuda: □ Se sugiere que un identificador sea ilustrativo; es decir, debe indicar claramente su con tenido. Por ejemplo, si una de sus variables sirve para almacenar en memoria la edad de una persona, su variable puede llamarse Edad o X; sin embargo, Edad es un nombre más útil, pues proporciona una mejor idea del valor que contiene, mientras que X puede ser cualquier cosa. □ Dado que una variable puede ser utilizada repetidamente dentro de un programa, es más práctico emplear nombres cortos. Entre Nombre y NombreDelClienteQueAdquiere Producto lo más recomendable es emplear la primera opción. □ Use el guión bajo sólo si es necesario hacerlo. Recuerde que el guión bajo es el conti nuador de línea del lenguaje y puede crearse confusión innecesaria. Prefiera Ventas Mensuales a Ventas_Mensuales. □ Se recomienda el manejo de mayúscula al principio del nombre y al inicio de cada una las palabras que compongan el identificador (Pascal casing), con el fin de aumentar la legibilidad. VentasMensuales es recomendable; ventasmensuales no. □ Evite en lo posible el uso de conjunciones. Use VentasMensuales, no VentasDelMes. □ Evite el uso de abreviaturas. Use VentasMensuales, no vtsM. En lo que respecta al uso de mayúsculas, minúsculas y prefijos para la denominación de variables en Visual Basic, se consideran algunos estilos que constituyen convencionalis mos intemacionalmente reconocidos. Aunque Visual Basic permite formar los identifica dores como le plazca, es mejor seguir las reglas que todos los desarrolladores del mundo parecen estar siguiendo. Pascal ca sin g. El estilo Pascal casing consiste en usar mayúscula al principio del nom bre y al inicio de cada una las palabras que compongan el identificador. Éste es el estilo más utilizado en Visual Basic; por ejemplo, VentasMensuales.
www.FreeLibros.me
102
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Se recomienda este estilo al denominar: □ Clases □ Enumeraciones (constantes predefinidas del lenguaje) □ Eventos □ Interfaces □ Espacios de nombres □ Métodos y propiedades Camel casing. El estilo Camel casing se caracteriza por colocar en mayúscula la pri mera letra de cada palabra de un identificador, excepto la primera. Por ejemplo, v e n t a s M e n su a le s. Este estilo está muy difundido entre los programadores de C# o Java.
Se recomienda utilizar este estilo: □ Al denominar parámetros; si el parámetro se compone de una sola palabra, toda la pa labra va en minúscula. □ En elementos de alcance privado, como campos y variables. Notación húngara ( H u n g a r ia n notation). La Notación húngara se caracteriza por colocar un prefijo a las variables para indicar su tipo o función. A decir de Microsoft, este estilo está cayendo en desuso, por lo cual sugerimos evitarlo. Por ejemplo, in tV e n t a s M e n s u a l e s , da a entender que se trata de un dato In t e g e r .
NOTA Evitar la notación húngara es la recomendación de Microsoft. En realidad, la notación hú n ga ra sigue siendo utilizada m ucho por la com unidad de desarrollo, e incluso en el sitio de M i crosoft encontramos muchos ejemplos con dicha notación. Utilizar la notación húngara será a fin de cuentas una decisión del equipo de desarrollo, y no afecta la funcionalidad de las apli caciones.
Este apartado presenta recomendaciones que puede o no seguir. En cualquier caso, lo im portante no es el estilo que elija usar, sino que todos los miembros de un equipo de desa rrollo lo compartan y utilicen de manera consistente.
Tipos de datos en Visual Basic Las variables pueden almacenar cualquier tipo de valor, desde una secuencia de caracteres hasta un número o una fecha. Dependiendo del tipo, será posible hacer tal o cual cosa con
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
103 |
el contenido de la variable. Esto implica la necesidad de definir qué tipo de valor almace nará la variable para saber qué es posible hacer con ella. Además de determinar el tratamiento interno del valor, el tipo de dato {datatype) define la cantidad en bytes que consumirá en memoria y las operaciones que se podrán realizar con el mismo. Se conoce como dominio el conjunto de valores válidos para un dato. Por ejemplo, el domi nio de un dato que almacenará un número de mes, consiste en los números enteros del 1 al 12. Cuando el dominio está relacionado con el tipo de dato, se le llama dominio de tipo; por ejemplo, en el caso del tipo de dato Byte, el dominio será de números enteros del 0 al 255. Todo en Visual Basic es un objeto, y todo objeto tiene un determinado tipo, lo que se co noce como type. Se tienen dos clases de types en el lenguaje: □ Types que forman parte del lenguaje, llamados types intrínsecos. □ Types de usuario, llamados también user-defined types, que son clases, estructuras, in terfaces y otros elementos que no forman parte de .NET Framework. Cada type tiene un nombre, que es el identificador a través del cual se invoca la funciona lidad desde el código fuente en un determinado lenguaje. El nombre del type puede ser más corto en un lenguaje que en .NET Framework. Por ejemplo, para Visual Basic la referencia I n t e g e r es equivalente a referir el type Syste m . I n t 3 2 de .NET Framework, que es más complejo. Todos los lenguajes tienen acceso a la misma biblioteca de clases, lo que varía la implementación que cada lenguaje requiere para llegar a Sy ste m . I n t 3 2 (Visual Basic, In t e g e r ; C#, int; C++, i n t o lo n g ; JScript, in t ) . Además de nombre, los types también poseen un tamaño, que representa su el consumo en bytes. Esto es importante dado que la memoria RAM es siempre limitada. Los types intrínsecos pueden ser clases, estructuras e interfaces preconstruidas en .NET Framework, que ayudan a estandarizar el manejo de valores de datos o a producir compor tamientos. En ese sentido, Integer es un type que representa un valor, mientras que WriteLine es un type, en el sentido de que es un método de una clase de BCL que no debe ser instanciada para funcionar.
www.FreeLibros.me
104
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Visual Basic acepta los siguientes tipos de datos intrínsecos: Tipo de dato
Estructura o Clase.NET Fram ework a la que se hace referencia
Consum o en bytes
Rango de valores (dom inio de tipo)
Boolean
S y s te m .B o o le a n (e stru c tu ra )
1 b y te
True o False
Byte
S y s te m .B y te (e stru c tu ra )
1 b y te
De 0 a 255 (sin signo)
Char
S y s te m .C h a r (e stru c tu ra )
2 b yte s
Caracteres UN ICO DE
Date
Sy ste m .D a te T im e (e stru c tu ra )
8 b yte s
De enero 1, 0001 a diciembre 31, 9999
Decimal
S y ste m .D e c im a l (e stru c tu ra )
12 b y t e s
a) +/-79,228,162,514,264,337, 593,543,950,335 sin punto decimal; b) +/-7.9228162514264337593543950335 con 28 posiciones después del punto decimal; c) el mayor número menor a cero representable es: +/-0.0000000000000000000000000001
Double
S y ste m .D o u b le (e stru c tu ra )
8 b yte s
a) -1.79769313486231 E+308 a -4.94065645841247E-324 para valores negativos; b) 4.94065645841247E-324 a 1.79769313486231 E+308 para valores positivos
Integer
S y s t e m . In t 3 2 (e stru c tu ra )
4 b yte s
De -2,147,483,648 a 2,147,483,647
Long
S y s t e m . In t 6 4 (e stru c tu ra )
8 b yte s
De -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807
Short
S y s t e m . In t 1 6 (e stru c tu ra )
2 b yte s
De -32,768 a 32,767
Single
S y s t e m . S in g le (e stru c tu ra )
4 b yte s
a) -3.402823E+38 a -1.401298E-45 para números negativos; b) 1.401298E-45 a 3.402823E+38 para valores positivos
String
S y s t e m . S t r in g (c la s e )
Depende de l a p la t a fo r m a
De 0 a aproximadamente dos mil millones de caracteres Unicode
Se consideran tipos de dato numérico los siguientes: Byte, Double, Integer, Long, Short y Single. Se consideran tipos de dato no numérico los siguientes: Boolean, Date, Decimal, Object y String. Aunque Decimal almacena números, el manejo que hace del punto flotante complica su manejo; 0b ject, por su parte, puede asumir cualquier valor.
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
Algunas recomendaciones pertinentes con respecto a la definición de tipos de datos son las siguientes: □ Determine cuidadosamente el tipo de dato más adecuado para una variable, de forma que las operaciones a realizar con los valores no produzcan conflictos de tipos. Si, por ejem plo, va a realizar operaciones de alta precisión, el tipo de datos I n t e g e r no le servirá. □ Utilice el tipo de datos que consuma sólo la cantidad de memoria necesaria. Si va a al macenar la edad de una persona, escoja B y te porque consume menos memoria que, por ejemplo, In t e g e r . □ Use, en lo posible, tipos de datos numéricos, pues son los que más eficientemente ma neja la computadora. □ En términos de tiempo de procesamiento, el tipo de dato más eficiente, indiscutiblemen te, es In t e g e r , mientras que el menos eficiente es 0b j ect. □ Visual Basic puede realizar lo que se llama conversión de tipo cast; es decir, una con versión de tipos de datos en tiempo de ejecución entre tipos de datos compatibles. Es preferible que usted mismo haga las conversiones; aunque es más cómodo dejar que el lenguaje lo haga, usted pierde el control de su programa y, en caso de que se presenten problemas, será más difícil determinar en dónde se encuentran. □ Sea previsor y actúe en concordancia con respecto a las posibilidades de que un dato, y especialmente uno de tipo numérico, pueda exceder los dominios de tipo al ser manipu lado. Considere el siguiente ejemplo: un programador elige un tipo I n t e g e r partiendo del razonamiento matemático de que la suma de dos números enteros siempre es un nú mero entero. Sin embargo, si se suma 2,000,000,000 más 2,000,000,000, el resultado ex cederá el límite del dominio de tipo. En este caso, el programador debió haber elegido Long, el tipo de dato en que puede convertirse la suma de dos In t e g e r . En ocasiones los problemas originados por esta situación (numeric overflow), se presentan después de ha ber utilizado la aplicación durante mucho tiempo.
Conversión de datos En muchas ocasiones requerirá realizar conversiones de tipos de datos, y principalmente del tipo S tring a otros. Se conoce como conversión de datos a cambiar el tipo de dato de un valor por otro. Exis ten tres formas de conversión de datos en Visual Basic.
www.FreeLibros.me
106
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Conversión implícita (Casting) La conversión implícita, conocida como casting, se da cuando el CLR realiza la conver sión en tiempo de ejecución sin que el programa lo especifique. Este tipo de conversión es común en los tipos de datos numéricos. Hay un fenómeno que se conoce como narrowing, cuando la conversión se realiza de un tipo con mayor dominio a uno de menor dominio ( I n t e g e r a B yte , por ejemplo); por otro lado, se conoce como widening cuando la conversión se realiza de un tipo de menor domi nio a uno de mayor dominio (B y te a In t e g e r , por ejemplo). En el caso de narrowing, hay que prestar mucha atención en no proporcionar datos que excedan el dominio de tipo; por ejemplo, tratar de pasar 1000001 ( i n t e g e r ) a 100000S (S h o rt ) , dado que los datos pueden truncarse, e incluso provocar excepciones.
Conversión explícita La conversión explícita consiste en aplicar funciones específicas mediante código para rea lizar la conversión. Se utiliza principalmente para convertir tipos S t r i n g / C h a r a otros. La conversión explícita puede hacerse mediante funciones específicas y funciones genéri cas. Las principales funciones específicas utilizadas son las siguientes: Función
Consecuencia
CBool(£xpres/'dn)
Convierte Expresión a B o o le a n .
CByte(£xpres/'án)
Convierte Expresión a B y te .
CCh a r (Expresión)
Convierte Expresión a C h a r.
CD at e(Expresión)
Convierte Expresión a D a t e .
C D b l {Expresión)
Convierte Expresión a D o u b le .
CDec (Expresión)
Convierte Expresión a D e c im a l.
C In t (Expresión)
Convierte Expresión a In t e g e r .
C Lng (Expresión)
Convierte Expresión a L o n g .
COb j (Expresión)
Convierte Expresión a 0b j e c t .
C S h o r t (Expresión)
Convierte Expresión a S h o r t .
C S t r(Expresión)
Convierte Expresión a S t r i n g .
La principal función de conversión genérica es CType, cuya sintaxis es la siguiente: CTy p e ( Expresión, Nombre TipoDato)
Donde Expresión es la expresión a convertir, y NombreTipoDato es el nombre del tipo de dato al que se desea convertir la expresión. Por ejemplo: C T y p e ("4 ",
In t e g e r )
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
Conversión por método Algunos tipos de datos, por ejemplo la mayoría de los numéricos, tienen implícito un mé todo que permite hacer una conversión. El más común de éstos es T o S t r in g , que permite convertir a la representación S t r i n g un valor dado. Por ejemplo: Dim Edad A s I n t e g e r = 30 Dim E d a d T e xto A s S t r i n g
= E d a d .T o S t r in g ()
En este caso, se declara una variable llamada Edad, de tipo In t e g e r , a la cual se le asigna el valor 30. Después se declara una variable llamada E d a d T e xto que tomará la representa ción S t r i n g de la variable Edad; es decir, “30”.
Acceso a datos Valué type y Reference type & D a tos de referencia y d ato s d e valor
Visual Basic, como todo lenguaje de programación, permite el uso de la memoria de la máqui na a través de las variables. Es posible acceder a los datos almacenados en las variables me diante dos tipos de acceso: tipos de valor (valué type) y tipos de referencia (reference type). Dependiendo de la forma en que se tenga acceso a los valores almacenados, el consumo de memoria puede variar.
Capacidades de los tipos valor y referencia Dependiendo del tipo de acceso a los datos, las capacidades de almacenamiento y econo mía difieren. Con los tipos de valor (valué type): □ Las variables almacenan un dato de un tipo determinado. □ Cada variable tiene su propio alojamiento en memoria. □ Cada variable contiene su propia copia del dato. □ Las operaciones realizadas con una variable no afectan a ninguna otra. □ La asignación de valor a una variable crea una copia de datos (no se sustituye el valor anterior). Con el tipo referencia (reference type): □ Las variables hacen referencia a un objeto (es decir, emanan de una clase).
www.FreeLibros.me
108
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
□ Las variables mantienen una referencia apuntando a la posición en memoria en donde se encuentran los datos. □ Las variables son intermediarias entre un programa y la memoria.
Naturaleza de los tipos de datos Los tipos de datos tienen una naturaleza intrínseca en relación con un tipo de acceso. Son valué type: □ Todos los tipos de datos que almacenan números:
B yte , D e cim a l, D o u b le , In t e g e r ,
Long, S h o r t , S in g le .
□ Los tipos de datos
B o o le a n , C h a r
y Date.
□ Todas las estructuras, incluyendo aquellas que se conforman de elementos reference type. Son reference type: □ El tipo de dato String. □ Todos los arreglos de memoria (arrays), aun cuando sus elementos sean valué type. □ Lo que sea instancia de una clase.
ByVal y ByRef Cuando los datos son pasados como argumentos a funciones y procedimientos, es posible especificar el tipo de acceso que se desea tener. Para ello eso se utilizan las palabras reservadas B y V a l y B yRef. Si se utiliza B y V a l, se le está especificando al procedimiento o función que utilice su propia versión del dato y que mantenga intacto su el valor original. Si se utiliza B y R e f , se le está especificando al proce dimiento o función que utilice la misma posición de memoria que el dato original, por lo que las modificaciones realizadas al argumento afectan a ese dato. Es importante considerar que el uso de naturaleza del dato no se imponga.
ByVal
y
ByRef
es respetado siempre y cuando la
Cuando sus procedimientos o funciones sean de uso genérico para varios objetos o datos, se recomienda ampliamente utilizar B y V a l, a fin de que se realicen operaciones de la ma nera más segura posible.
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
Strong Typing Antes de Visual Basic, el lenguaje había sido muy permisivo con los programadores; ob viaba muchas cosas y les permitía no ser formales con la técnica, lo que a largo plazo siem pre causaba problemas. Si no se declaraban las variables, si no se especificaban los tipos de datos o si no se pla neaban las conversiones, Visual Basic lo hada de manera automática. Eso provocaba que los errores de fondo fueran difíciles de encontrar, ya que el universo de cosas que podían estar equivocadas excedía nuestro conocimiento dado que no todo estaba bajo nuestro con trol. Resultaba patético pasar horas revisando un programa en busca de un error de lógica o algoritmo, para descubrir finalmente que el verdadero problema era “un error de dedo” que Visual Basic había “arreglado” por nosotros sin que nos diéramos cuenta. Para evitar esas penosas situaciones, existen dos estatutos que se agregan antes de cual quier cosa en el código y que aseguran que la codificación siga una técnica formal, de ti po strong typing; es decir, donde todos los datos están asociados de manera explícita y no ambigua a un tipo determinado.
Option Explicit [On/Off] La instrucción Option Explicit, cuando está activada (On), obliga al programador a de clarar todas las variables que utilice en el programa. Si se intenta emplear una variable no declarada, se produce un error. Option Explicit permite generar programas de tipo de datos asegurados (type safe), en el sentido de que todas las variables deben declararse a partir de tipos de datos reconocidos.
Option Strict [On/Off] La instrucción Option Strict, cuando está activado (On), obliga a que las conversiones de datos se realicen de manera explícita. En tal caso, las conversiones implícitas (casting) no están disponibles ni para las conversiones amplias. Option Strict permite generar pro gramas de tipo de datos reforzados (strong type), en el sentido de que todas las conversio nes deben ser explícitas. Si usted especifica Option Explicit y Option Strict es muy probable que su código sea bastante formal, y no se encontrará con errores extraños en tiempo de ejecución. El valor predeterminado de Option Explicit y Option Strict es Off. Una excelente práctica de desarrollo es hacer que sus programas sean Strong type, con eso reducirá el porcentaje de errores que pudieron evitarse con un poco de formalidad al de clarar y utilizar variables.
www.FreeLibros.me
110
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Ejercicio 4.1 Demostración del alcance de las variables y la forma en que preservan valores (I)
En este ejercicio se comprobará la forma en que funcionan los alcances de variables en Vi sual Basic y la forma en que podemos aprovechar su manejo para preservar valores en me moria con eficiencia. 1. Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). 2. Agregue a su solución un proyecto Windows - Consolé Application, llamado ValRef. 3. Edite el programa de tal forma que aparezca como sigue:
l Codificación de ValRef-Modulel .vb 1 2 o O 4 cO 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
O p tio n O p tio n
E x p l i c i t On S t r i c t On
M odule M o d u le l Sub M a i n ( ) Dim T e x to A s S t r i n g = “T e x to O r i g i n a l " C o n s o l e . W r it e L in e ( T e x to ) V a lo r ( T e x t o ) C o n s o l e . W r it e L in e ( T e x to ) R e f e r e n d a (T e x to ) C o n s o l e . W r it e L in e ( T e x to ) C o n s o l e . W r it e ( " P u l s e INTRO p a ra c o n t i n u a r " ) C o n s o le . R e a d L in e () End Sub Sub V a lo r ( B y V a l T e x to A s S t r i n g ) T e x to = "T e x t o V a l o r " C o n s o l e . W r it e L in e ( " < " & T e x to & " > " ) End Sub Sub R e f e r e n c ia ( B y R e f T e x to A s S t r i n g ) T e xto = "T e x t o R e f e r e n c ia " C o n s o l e . W r it e L in e ( " < " & T e x to & " > " ) End Sub End M odu le
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
Ejecución guiada de
v a iR e f
- M o d u ie i. v b
4. Construya la solución (oprima las teclas Ctrl-M ayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solución (oprima las teclas Ctrl-Mayús-S). Inicie la depuración para comprobar el comportamiento de su programa (Oprima F5). 5. Este programa es type safe, dado que todas las variables deberán declararse antes de ser utilizadas (O p tio n E x p l i c i t ) y las conversiones tienen que hacerse de forma explícita (O p tio n S t r i c t ) .
6. El programa declara una variable de memoria, llamada T e xto , que se verá sometida a modificaciones en su contenido (línea 7); de inicio, se le asigna un valor de T e x to o r i g i n a l , mismo que es mostrado en la consola (línea 8). La variable será proporcionada como argumento a dos procedimientos, uno de los cuales tratará el dato como valor (líneas 17 a la 20), y otro como referencia (líneas 22 a la 25). 7. Uso del dato como tipo valor. En la línea 9 se proporciona la variable como argumento de un procedimiento llamado V a lo r ; dicho procedimiento recibe el valor y le da trata miento como tipo valor. En la línea 18 se modifica el valor de T e x to , por T e x t o V a lo r , y se muestran los efectos del cambio en la línea 19. Después de ejecutar V a lo r ( ) , se muestra el contenido de la variable T e x to (línea 10); es posible observar que, aunque se modificó el valor de la variable en el procedimiento, el valor original no se modificó en lo absoluto. Esto se debe a que el dato fue manejado co mo tipo valor, lo que provoca que el argumento genere su propia copia del dato, dejan do al dato original intacto. 8. Uso del dato como tipo referencia. En la línea 11 se proporciona la variable como argu mento de un procedimiento llamado R e f e r e n c ia ; dicho procedimiento recibe el valor y le da tratamiento como tipo referencia. En la línea 23 se modifica el valor de Texto, por T e x to R e f e r e n c ia , y se muestran los efectos del cambio en la línea 24. Después de ejecutar R e f e r e n c ia , se muestra el contenido de la variable T e x to (línea 12); es posible notar que el valor original se modificó. Esto se debe a que el dato fue ma nejado como tipo referencia, lo que provoca que el argumento no genere su propia co pia del dato, sino que utilice para el manejo de información la misma posición de me moria que el valor original.
www.FreeLibros.me
112
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Si todo ocurrió como se esperaba, la salida será la siguiente: T e xto O r i g i n a l T e xto O r i g i n a l T e xto R e f e r e n c ia P u ls e
INTRO p a ra c o n t in u a r
FIN DEL EJERCICIO*
Manejo elemental de variables Declaración de variables Para utilizar una variable es necesario declararla; declarar una variable es el proceso me diante el cual se establece un identificador, que será reconocido en tiempo de ejecución, pa ra almacenar uno o más valores de un determinado tipo. No se pueden utilizar variables que no hayan sido declaradas previamente. La declaración de una variable se lleva a cabo a través de la instrucción de declaración: Dim.
La sintaxis más sencilla de Dim es la siguiente: Dim
Identificador
[As 7IpoDato]
[ = Valorlnicial]
Donde Identificador es el nombre que se desea asignar a la variable, y TipoDato es el tipo de dato que corresponde al valor que almacenaremos en la variable. En .NET es posible asignar un valor al momento de la declaración ( Valorlnicial).
NOTA La expresión "alm acenar valores en las variables de m em oria" es una expresión en sentido fi gurado: los valores no "se alm acenan" en las variables sino en posiciones físicas de la RA M , y las variables son sólo el medio a través del cual se tiene acceso a dichas posiciones de m em o ria. C uando se dice que almacenamos valores en las variables, nos referimos a que almace namos valores en una posición física de memoria, que es referida por el identificador de la variable.
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
La especificación del tipo de dato a través de la palabra reservada A s es opcional; si se omi te la especificación de tipo de dato, la variable se declara automáticamente bajo el tipo Ob j e ct. Esta declaración automática garantiza que no se utilice una variable que no ha si do declarada; sin embargo, es la alternativa más ineficiente, ya el CLR tendrá que invertir tiempo constantemente en determinar qué tipo de valor es el que está almacenado en la va riable. A continuación se muestran ejemplos de declaración de variables: 1 2 3 4 5 6
Dim Dim Dim Dim Dim Dim
Edad Edad A s Edad A s Edad A s Nombre, Nombre,
In t e g e r S y s t e m . In t 3 2 I n t e g e r = 50 A p e llid o A s S t r in g A p e llid o A s S t r in g ,
Edad A s In t e g e r
La línea 1 declara una variable O b ject. La línea 2 declara una variable In t e g e r . La 3 es exactamente igual a la línea 2, ya que I n t e g e r es la referencia a Syste m . In t 3 2 . La línea 4, además de declarar la variable, le asigna un valor de inicio. La línea 5 demuestra que se pueden declarar varias variables de un mismo tipo, separando los identificadores con co mas. La línea 6 demuestra que Dim acepta la declaración de dos o más variables de un mis mo tipo, y de dos o más tipos.
Constantes Se conoce como constantes a las variables que sólo cambiarán su valor una vez en su tiem po de vida. Para definirlos se utiliza la siguiente sintaxis. C onst
Identificador [A s TipoDaío] = Valorlnicial
Donde Identificadores el identificador de la constante, TipoDato es el tipo de dato que ten drá la constante y Valorlnicial es el valor que tendrá la constante durante todo su tiempo de vida. Por ejemplo: C o n st P I A s S i n g l e
= 3 .1 4 1 6
Literales Si se menciona un número 4, no tenemos suficiente información para saber si el número es B y te , In t e g e r , D o u b le , D e cim a l, dado que 4 puede ser de cualquiera de esos tipos. Lo mismo ocurriría con “A” , dado que no sabríamos si se trata de un dato S t r i n g o Char.
www.FreeLibros.me
114
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
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
Ejemplo de uso
Boolean
True
True
F a ls e
F a ls e
Char
C
"A "C
D e c im a l
D
3 .1 4 1 6 D
D o u b le
R
3 .1 4 1 6 R
In t e g e r
I
101
Long
L
10L
Sh o rt
S
10S
S in g le
F Il II
3 .1 4 F
S t rin g
"A "
Valores por omisión Cada variable, en caso de que no se le asigne un valor, tendrá un valor por omisión. A con tinuación se muestra una relación de los valores por omisión para los tipos de datos. Tipo de dato
Valor por om isión
T ip o s de d a t o s n u m é ric o s
0
B o o le a n
F a ls e
D ate
01/01/0001
D e c im a l
0
O b je c t
N o t h in g •i ii
S t rin g
1 2 :0 0 A.M .
Ejercicio 4.2 Demostración de la declaración de variables, constantes, y la realización de conversiones
En este ejercicio se utilizará una aplicación de consola para comprobar la declaración y uso de variables en un proceso.
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
1. Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). 2. Agregue a su solución un proyecto Windows - Consolé Application, llamado AreaRectangulo.
3. Edite el programa de tal forma que aparezca como sigue.
Codificación de AreaRectangulo - Modulel.vb 1 2 3 4 5 6
7 8 9
10 11 12 13 14 15 16 17 18 19
20 21
M o d u le M o d u le l Sub M a in () C on st T it u lo As S t r in g = " — R e c t á n g u lo — Dim B a se A s I n t e g e r Dim A l t u r a A s S i n g l e = 0 Dim R e s u lt a d o A s S i n g l e , E n t r a d a A s S t r i n g
"
C o n s o lé . W r it e L in e ( T it u lo ) C o n s o l é . W r it e ( " B a s e : " ) E n tra d a = C o n s o lé . R e a d L in e () B a se = C In t ( E n t r a d a ) C o n s o lé . W r it e ( "A lt u r a : ") E n tra d a = C o n s o lé . R e a d L in e () A l t u r a = C T y p e (E n tra d a , S i n g l e ) R e s u lt a d o = (B a se * A l t u r a ) C o n s o l é . W r it e L in e ( " R e s u lt a d o : End Sub
11 & R e s u l t a d o . T o S t r i n g ( ))
End M odule
> Construcción de un solo proyecto 4. Al agregar éste, se tendrán cuatro proyectos en la solución. En ocasiones, cuando las so luciones son muy grandes, reconstruir una completamente para saber si se tienen proble mas en el proyecto que se está desarrollando puede implicar un consumo innecesario de recursos de procesamiento. 5. Para construir únicamente un proceso, y no todos los de la solución, basta con seleccio nar el proyecto en Solution Explorer, desplegar el menú contextual y seleccionar la op ción Build. De esa forma se construirá sólo el proyecto seleccionado.
www.FreeLibros.me
116
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
6. Seleccione en Solution Explorer el proyecto; para ello coloque el puntero sobre el nom bre del proyecto A r e a R e c ta n g u lo , haga clic con el botón derecho del ratón para desple gar el menú contextual y seleccione Build. So lu tio n E x p lo re r - A r e a R e c ,
ÍS I
vài
É l - i j ¡ ] A lc a n c e
5 ái M y P ro je ct y 9 -
§
è- ¡i
M o d u le 1 .vb
lA r e a R e c t a n q u Io
\m_
Build R e b u ild
B jM
C le a n
e v o lu t i
P u b lish .,.
7. Vea en Output cómo se procesa solamente el proyecto recién desarrollado. Cuando su proyecto ya no presente errores, podrá construirse la solución, y ejecutarse con con fianza.
Ejecución guiada de
A r e a R e c t a n g u lo
- M o d u le l. v b
8. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyec to como proyecto de inicio (StaríUp Project) y guarde todos los cambios que haya rea lizado en la solución (oprima las teclas Ctrl-Mayús-S). Inicie la depuración para com probar el comportamiento de su programa (F5). 9. La línea 4 declara una constante, a la cual se le asigna como valor el mensaje que ha de aparecer como encabezado del programa (línea 9); en la línea 5 se muestra una decla ración de variable en su forma más sencilla; en la línea 6 se comprueba que es posible asignar un valor inicial al momento de la declaración; en la línea 7 se comprueba la po sibilidad de declarar múltiples variables de múltiples tipos en una misma línea (aunque esta práctica no se recomienda porque podría hacer perder claridad al código). 10. En la línea 9 se muestra el título del programa en la consola, en la 10 se muestra el men saje que pregunta la base del rectángulo y en la 11 se asigna a la variable E n t r a d a el valor que el usuario ingresa desde la consola. 11. Como el dato se recibe en formato S t r i n g desde la consola, la línea 12 se encarga de convertirlo en In t e g e r , utilizando para ello la función específica C ln t ; el resultado es asignado a la variable Base . La misma mecánica se seguirá para preguntar y convertir
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
la altura del rectángulo, con la diferencia de que se utilizará para la conversión la fun ción genérica CType. 12. La línea 17 calcula el área del rectángulo, asignando el valor a la variable R e s u lt a d o . Como R e s u lt a d o es de tipo S i n g l e , posee de forma intrínseca el método T o S t r in g , que es utilizado en la línea 18 para mostrar los resultados. 13. Todas las conversiones que realizamos en este programa pudieron haberse obviado, da do que el programa no es type safe; es decir, el CLR hubiera realizado la conversión cast en caso de que nosotros no la hubiéramos llevado a cabo de manera explícita. 14. Proporcione un valor de 10 para la base y 15 para la altura, y vea los resultados. Si todo ocurrió como se esperaba, la salida será la siguiente: E ntrad a
— R e c t á n g u lo B a se : 10 A l t u r a : 15 R e s u lt a d o : 150
—
F IN D E L E J E R C IC IO *
Origen de las variables: clases y estructuras Decíamos que en Visual Basic las variables son instancias de una clase o una estructura: □ Variables basadas en clase (intermediación requerida).
Sabemos que una cla se es la definición formal de un tipo de objeto. Un objeto es la instancia de una clase; éste puede contener información y comportamiento. En el caso de los datos almacena dos en memoria a través de un objeto, éstos pueden estar disponibles al usuario median te referencias. Uno hace referencia al objeto, y el objeto hace referencia a una posición de memoria en donde se encuentra el dato; esa intermediación que realiza el objeto pa ra llegar al dato consume recursos de almacenamiento temporal en la computadora (lo que se conoce como heap alio catión). Este tipo de variables exigen más recursos, pero ofrecen mayor funcionalidad.
□ Variables basadas en estructura (acceso directo, sin intermediación).
Una estructura (structure) es muy similar a una clase, en el sentido de que puede almacenar datos y métodos; la diferencia con respecto a una variable basada en una clase es que la variable basada en estructura contiene de manera directa los datos definidos en la es tructura; esto elimina la necesidad de una intermediación entre la variable y el dato, por lo que no se consumen recursos adicionales de la computadora en el área de almacena miento temporal.
En la tabla que muestra los tipos de datos disponibles en Visual Basic se hace referencia a la estructura o la clase en la que se basan.
www.FreeLibros.me
118
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
El hecho de que las variables tengan su origen en una estructura o clase les proporciona una funcionalidad extendida y extensible, que hace de las variables un elemento del len guaje con vida propia.
Alcance de las variables El alcance (scope) de las variables determina en qué partes del código podrá ser utilizada una variable sin utilizar un calificador. Para entender el alcance debemos entender primero el concepto de bloque de código. Un bloque de código (code block) es el conjunto de líneas que constituyen una unidad de eje cución. Generalmente se encuentran delimitados por una línea de inicio y una línea de con clusión (a lo que se conoce como branching); todas las instrucciones que culminen con End son delimitadores de bloque de código (M o d u le -E n d M o d u le , S u b -E n d Su b , I f - E n d I f , etcétera). Existen otras instrucciones, como F o r -N e x t y D o-Lo o p , que aunque no conclu yen con End, también contienen bloques de código. Los bloques pueden ser condicionales o no. Son bloques condicionales cuando su ejecución depende del valor obtenido al resol ver una expresión lógica ( I f - E n d I f , D o-L o o p , por ejemplo), mientras que son bloques no condicionales aquellos que no dependen de una evaluación para ejecutarse (M o d ule - End M odule, N am espace-End Namespace, por ejemplo). Un aspecto importante a tomar en cuenta es que un bloque de código puede formar parte de otro bloque de código. Las variables tienen los siguientes alcances: □ Alcance de bloque {Block seo p e). El alcance de bloque se presenta cuando la va riable está disponible sólo en el bloque de código en el que está declarada. El alcance de bloque es el más estrecho, en el sentido de que la variable tiene la menor vigencia posible. Cómo se define: declarando la variable dentro de un bloque de código. Este tipo de alcance se aplica en los siguientes estatutos: ■
D o -L o o p
■
For
■
If - E n d
■
S e le c t - E n d
■
S y n c L o c k -E n d S y n c L o c k
[E a c h ] -N e x t If S e le c t
■
T ry -E n d T r y
■
W h ile -E n d W h ile
■
W ith -E n d W ith
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
□ Alcance de procedimiento (Procedure seo p e ).
El alcance de procedimiento se presenta cuando la variable está disponible sólo para el procedimiento en el que está de clarada. Cuando las variables pueden ser utilizadas sólo dentro del procedimiento que las declara, reciben el nombre de variables locales. Cómo se define: declarando la va riable dentro de un procedimiento, pero no dentro de un bloque; se recomienda decla rar al inicio del procedimiento, antes de cualquier bloque de código.
□ Alcance de m ódulo (M o d u le scopé).
El alcance de módulo se presenta cuando la variable está disponible para todos los procedimientos de un determinado módulo, cla se o estructura en la que está declarada. Cómo se define: declarando la variable dentro del capítulo, clase o estructura, antes de declarar cualquier procedimiento.
□ Alcance de espacio de nombres (Ñ am espace s c o p e ). El alcance de espacio de
nombres se presenta cuando la variable está disponible para todos los módulos, clases o estructuras contenidas en un espacio de nombres. Este alcance es el de mayor ampli tud. Cómo se define: declarando una variable a nivel módulo, con accesibilidad Friend o Public (que se verá más adelante).
Shadowing Existe la posibilidad de que en un mismo programa existan dos variables con el mismo nombre; esto puede parecer contradictorio, ya que se había expresado que cada variable de be tener un identificador único. Ya con el conocimiento que hemos adquirido, podemos decir que dos variables no pueden compartir el mismo identificador si tienen el mismo alcance. En resumen, pueden existir variables homónimas si se declaran con diferente alcance; en ese sentido, podemos decla rar una variable variableZ a nivel módulo, y una variable variableZ dentro de un proce dimiento, lo cual no causará problemas al momento de compilar, pero sí se podrá generar un procesamiento particular en tiempo de ejecución. El hecho de que dos variables tengan el mismo identificador no causa problema para Vi sual Basic siempre y cuando tengan alcances distintos; el programa utilizará para el proce samiento de datos aquella variable con alcance más estrecho; a este comportamiento se le da el nombre de shadowing. Los valores de variables con el mismo nombre y distinto alcance serán mantenidos en tiem po de ejecución, a fin de utilizar el valor de menor alcance según se requiera en el programa.
www.FreeLibros.me
120
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Accesibilidad de las variables (accesibility) La accesibilidad (accesibility) de una variable es el permiso que se proporciona al código para leerla o escribir en ella. El concepto de accesibilidad está muy ligado al concepto de alcance, ya que entre los dos constituyen la disponibilidad real de una variable para su uso a través de código. Las diferentes opciones que se tienen de accesibilidad son: Conocidas como variables públicas. Se proporciona acceso público a la va riable; es decir, no hay restricciones de uso de la variable cuando se define como públi ca. Sólo se puede definir a nivel capítulo, espacio de nombres o archivo físico; nunca a nivel procedimiento.
□ Public.
Conocidas como variables protegidas. Se proporciona acceso protegido a la variable; es decir, pueden ser utilizadas sólo por la clase en que se declaró la varia ble, o en aquellas clases derivadas de ésta. Sólo se puede definir a nivel clase, nunca a nivel procedimiento.
□ Protected.
□ Friend.
Se proporciona acceso que asume confianza hacia el usuario (de ahí lo “amis toso”); pueden ser utilizadas por el programa que la declara, y por todos aquellos que se encuentren en el mismo ensamblado. Sólo se puede definir a nivel capítulo, espacio de nombres o archivo físico; nunca a nivel procedimiento.
□ Protected Friend.
Se proporciona la unión de restricciones de Protected y de
Friend.
Conocidas como variables privadas. Se proporciona acceso privado a una variable. Sólo están disponibles para el alcance en el que fueron declaradas. Sólo se puede definir a nivel capítulo, espacio de nombres, o archivo físico; nunca a nivel pro cedimiento.
□ Prívate.
Conocidas como variables estáticas. Permite incrementar la persistencia del valor de las variables, manteniendo el último valor que haya asumido aun después de la terminación del procedimiento que la declaró. Sólo se puede definir a nivel procedi miento. No se pueden declarar variables estáticas en los procedimientos de una estruc tura; sólo se aceptan para los procedimientos de clases. Static es muy similar a una va riable Public pero se diferencian por el lugar en donde se declaran. En cierta forma, las variables Static serían como variables públicas declaradas en los procedimientos.
□ Static.
Conocidas como variables compartidas. Indica que la variable no está aso ciada con la instancia de una clase o estructura determinada. Se puede acceder a una va riable compartida a través de un calificador anteponiendo al nombre de la variable el nombre de la clase en donde se declaró inicialmente, más un punto separador. Sólo se puede definir a nivel capítulo, espacio de nombres o archivo físico; nunca a nivel pro
□ Shared.
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
cedimiento. Las variables compartidas (shared variables) identifican una sola unidad de almacenamiento, sin importar cuántas instancias de la clase que la declara hayan sido creadas. Cuando una variable no es definida como compartida, se conoce como variable de instancia (instance variable), y cada instancia mantiene la referencia de su pro pio valor. Este tipo de variables es especialmente útil para trasladar valores de un for mulario a otro, en aplicaciones de formularios múltiples, ya que no basta con que las variables sean públicas. □ ReadO nly.
Especifica que se trata de una variable de sólo lectura.
Si no se especifica alguna opción de accesibilidad, las variables serán variables de ins tancia y privadas (instance variable, prívate). En caso de que se desee asignar alguna opción de accesibilidad, la especificación pasa a ser el estatuto de declaración y puede sustituir a Dim. Por ejemplo: Static Dim Edad As Integer
Es lo mismo que: Static Edad As Integer
NOTA En el caso de la accesibilidad es importante tener en cuenta la accesibilidad del objeto conte nedor de la variable (objeto que contiene a otro objeto). Se puede proporcionar permiso a nivel procedimiento, pero si no se tiene permiso para dis poner del capítulo, clase o estructura que contiene el procedimiento mencionado, no será po sible llegar nunca a él.
*
Ejercicio 4.3 Demostración del alcance de las variables y la forma en que preservan valores (II)
En este ejercicio se comprobará la forma en que funcionan los alcances de variables en Vi sual Basic y la forma en que podemos aprovechar su manejo para preservar valores en me moria con eficiencia. 1. Abra la solución Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensión sin). 2. Agregue a su solución un proyecto Windows - Consolé Application, llamado Alcance. 3. Edite el programa de tal forma que aparezca como sigue:
www.FreeLibros.me
122
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
2 1 2 o o 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
Codificación de A lc a n c e
- M o d u le l. v b
O p t io n E x p l i c i t On O p t io n S t r i c t On M o d u le M o d u le l Dim T e x t o l A s S t r i n g
= "A lc a n c e m ód u lo"
Sub M a in ( ) C o n s o l é . W r it e L in e ( T e x t o 1 ) Dim T e x to 2 A s S t r i n g = " A lc a n c e p r o c e d im ie n t o " I f T e x to 2 <> " " Then C o n s o l é . W r it e L in e ( T e x t o 2 ) Dim T e x to 3 A s S t r i n g = "A lc a n c e b lo c k " C o n s o l é . W r it e L in e ( T e x t o 3 ) End I f P r o c e d i m i e n t o l() P r o c e d i m i e n t o () P r o c e d i m i e n t o l() P r o c e d im ie n t o 2 ( ) C o n s o l é . W r it e L in e ( " " ) C o n s o l é . W r i t e ( " P u l s e IN T R 0 p a ra c o n t i n u a r " ) C o n s o lé . R e a d L in e () End Sub Sub P r o c e d i m i e n t o l() S t a t i c T e x to 4 A s S t r i n g T e x to 4 = " V a l o r + " & T e x to 4 Dim T e x to 5 A s S t r i n g = "T e x t o 5 " C o n s o lé . W r it e L in e ( " — P r o c e d im ie n to 1 ----- " ) C o n s o l é . W r it e L in e ( " T e x t o 1: " & T e x t o l) C o n s o l é . W r it e L in e ( " T e x t o 4 : " & T e x to 4 ) C o n s o lé . W r it e L in e ( " ------------------------------------- " ) End Sub Sub P r o c e d im ie n t o 2 ( ) C o n s o l é . W r it e L in e ( " — P r o c e d im ie n to 2 ----- ") I f T e x t o l <> Then Dim T e x t o l A s S t r i n g = "Sh a d o w " C o n s o l é . W r it e L in e ( " T e x t o 1: " & T e x t o l) End I f C o n s o l é . W r it e L in e ( " T e x t o 1: " & T e x t o l) C o n s o lé . W r it e L in e ( " ------------------------------------- " ) End Sub End M odu le
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
Ejecución guiada de
A lc a n c e
- M o d u le l. v b
4. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que haya reali zado en la solución (oprima las teclas Ctrl-Mayús-S). Inicie la depuración para com probar el comportamiento de su programa (Oprima F5). 5. Este programa es type safe, dado que todas las variables deberán declararse antes de ser utilizadas (O p tio n E x p l i c i t ) y las conversiones tienen que hacerse de forma explícita (O p tio n S t r i c t ) (líneas 1 y 2). 6. Se declaran variables con diferente alcance en las líneas 5, 9 y 12. En la línea 5 se de clara la variable T e x t o l ; ésta tiene un alcance a nivel módulo, debido a que se declara dentro del módulo, fuera de cualquier procedimiento. Esta variable podrá ser utilizada por todos los procedimientos del módulo, es decir, M a in (), P r o c e d im ie n t o l () y P r o c e d im ie n t o 2 ( ); esto se comprueba en la líneas 8 y 29, pues se despliega en la consola una variable no definida en esos procedimientos. En la línea 9 se declara la variable Texto2, que tiene un alcance a nivel procedimiento, por estar declarada dentro de un procedimiento específico, pero fuera de un bloque de código; por esa razón se trata de una variable local. Esta variable estará disponible só lo para M a in ( ) , pero no para otros procedimientos. En la línea 12 se declara la variable T e x to 3 , que tiene un alcance a nivel bloque de có digo y estará disponible desde que se declara (línea 12) hasta que se encuentre el esta tuto que marca el final del bloque de código (en este caso End i f , en la línea 14). Si se trata de utilizar la variable T e x to 3 después de la línea 14, pensando que es una va riable local (de alcance a nivel procedimiento), nuestro programa generará error, ya que la variable sólo existe declarada para el bloque en que se declara. 7. Comprobación de la variable estática. En la línea 15 se manda ejecutar P r o c e d im ie n t o l (); en dicho procedimiento se define una variable estática llamada T e x to 4 (línea 25). Esta variable tendrá un tiempo de vida que excede el tiempo de vida del procedi miento que la declara, ya que por ser estática, mantendrá los valores en memoria aun después de concluida la ejecución del procedimiento. En la línea 26 se asigna a T e x to 4 la constante S t r i n g V a l o r + que se concatenará con el valor que tenga la misma T e xto4 ; en virtud de que la variable es estática, el valor que va adoptando se comporta como un acumulador, que nunca pierde el valor que tenía, obtenido de procesamientos anteriores.
www.FreeLibros.me
124
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Las líneas 16 y 17 mandan ejecutar P r o c e d im ie n t o l (), a fin de que se compruebe que efectivamente la variable mantiene su valor al correr de las múltiples ejecuciones del procedimiento. 8. Comprobación de shadowing. Ya vimos que en la línea 5, Texto 1 se definió con un al cance a nivel módulo y, al momento de declarar la variable, se le asignó el valor A le a n ce m ódulo. En P r o c e d im ie n t o 2 ( ), se vuelve a definir la variable T e x t o l (línea 37) y se le asigna al momento de declaración el valor Shadow. 9. a) ¿Qué alcance tiene la variable
T e x t o l,
declarada en la línea 37?
b) ¿Qué valor posee
T e xtol
cuando es desplegada en la consola en la línea 38?
c) ¿Qué valor posee
T e xtol
cuando es desplegada en la consola en la línea 40?
Como podrá darse cuenta, el programa no genera conflicto con la doble declaración de la variable; simplemente utiliza aquella que tenga menor alcance. Si todo ocurrió como se esperaba, la salida será la siguiente: A lc a n c e m ódulo A lc a n c e p r o c e d im ie n t o A lc a n c e b lo c k — P r o c e d im ie n t o 1 --T exto 1: A lc a n c e m ódulo T e xto 4 : V a l o r + — P r o c e d im ie n t o 1 ___ T exto 1: A lc a n c e m ódulo T exto 4 : V a l o r + V a l o r + — P r o c e d im ie n t o 1 ___ T exto 1: A lc a n c e m ódulo T exto 4 : V a l o r + V a l o r + — P r o c e d im ie n t o 2 ___ T e xto 1: Shadow T exto 1: A lc a n c e m ódulo
P u ls e
IN T R 0 p a ra c o n t in u a r
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
10. Modifique la línea 21, sustituyendo el estatuto de declaración Static por Dim. Ejecute el programa nuevamente, y explique qué sucede:
FIN DEL E JER C IC IO *
Arreglos Se conoce como arreglos (arrays) —también llamados matrices en algunos casos— a un conjunto de posiciones en memoria que son referidas por un mismo identificador. Se accede a un dato almacenado en una posición de memoria dentro de un arreglo a tra vés de un subíndice, que es la posición secuencial de cada elemento dentro de la colec ción. Los subíndices, como en todos los lenguajes de .NET, son de base cero; es decir, ini cian en cero. En Visual Basic, los arreglos tienen un tratamiento de colecciones, por lo cual los subíndi ces siempre se especifican entre paréntesis. Las colecciones son conjuntos de objetos lógi camente relacionados, diferenciados por un subíndice. En su calidad de colecciones, pueden ser explorados con la instrucción F o r taxis es la siguiente: F o r Each
Elemento
[As
TipoDato]
In
Each,
cuya sin
Colección
BloqiteCódigo [ E x it F o r] Next
Donde Elemento es la variable de trabajo en donde se almacenará el elemento (TipoDato), que de no especificarse asumirá el mismo tipo de dato que tengan los elementos de la colección. Colección es la colección de objetos que podrán ser leídos de forma secuencial utilizando F o r Each. BloqiieCodigo es el bloque de código que se ejecutará de forma ite rativa para cada elemento de la colección explorado. Al encontrar Next, el proceso iterati vo comienza nuevamente; es posible interrumpir el ciclo en cualquier momento utilizando E x it
For.
www.FreeLibros.me
126
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Arreglos unidimensionales Los arreglos unidimensionales se conocen simplemente como arreglos, y requieren de un sólo subíndice para tener acceso a un elemento del arreglo. La forma de declarar un arre glo en Visual Basic es la siguiente. Dim Arreglo(MáximoSubíndice) As TipoDato
Donde Arreglo es el identificador del arreglo; su denominación 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. Por ejemplo: Dim VentaMensual(11) As Integer
En este caso se tiene un arreglo de 12 posiciones (0 a 11), donde los elementos son de ti po Integer. En caso de que no se especifique un número determinado de elementos, el arreglo será de un número indeterminado de elementos. Dim VentaMensual() As Integer
A este tipo de arreglos se les llama arreglos unidimensionales, pues únicamente es nece sario especificar un subíndice para tener acceso a una de sus posiciones en memoria. 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 éste se calculará automáticamente consi derando el número de valores que se especifiquen entre llaves ({ }), separados por comas (,). La sintaxis correspondiente es la siguiente: Dim ArregloQ As TipoDato = {SerieValores]
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. Por ejemplo: Dim Numeros() As Integer = {10,20,40,100}
Números O 10
I
20
l
2 40
En este caso, Números (1 ) tendrá el valor de 20.
www.FreeLibros.me
3 100
Capítulo 4. Variables, arreglos y tipos de datos
Arreglos multidimensionales Se conoce como arreglo multidimensional a un conjunto de posiciones en memoria que son referidas por un solo identificador a través de dos o más subíndices. Al número de subíndices que es necesario especificar para tener acceso a una posición de memoria de un arreglo se le llama dimensionalidad (dimensionality) o rango (rank); Vi sual Basic acepta hasta 32 dimensiones. A los arreglos de dos dimensiones (dimensionalidad 2), que son los multidimensionales más utilizados, se les da el nombre de arreglos rectangulares. La sintaxis para definirlos es la siguiente: Dim Arreglo(MS1,MS2,__ ,MSn) As TipoDato
Donde Arreglo es el identificador del arreglo; su denominación sigue las mismas reglas que las variables. M SI es el número mayor de subíndice para la dimensión 1, MS2 es el núme ro mayor de subíndice para la dimensión 2, y así hasta definir todas las dimensiones. TipoDato es el tipo de dato de los elementos del arreglo. Por ejemplo: Dim VentaTrim(2,3) As Integer
En este caso se tiene un arreglo de 12 posiciones (de 0 a 2, 3 posiciones; de 0 a 3, 4 posi ciones; 3 posiciones X 4 posiciones=12), 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. Dim VentaTrim(,) As Integer
A este tipo de arreglos se les llama arreglos multidimensionales, pues es necesario especi ficar 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. Dim Arreglo(,) As TipoDato = {[SerieValoresl},{SerieValores!}}
Donde Arreglo es el nombre del arreglo, TipoDato es el tipo de dato de los elementos, y SerieValoresl y SerieValores2 es la serie de valores que asumirán los elementos; los valo res deberán estar separados por comas.
www.FreeLibros.me
128
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Ejemplo. Dim V e n t a T r im ( , )
A s In t e g e r = { { 1 0 0 0 , 2 0 0 0 0 , 1 0 0 0 0 , 5 0 0 0 } ,
{2 0 0 0 , 3 0 0 0 0 , 1 5 0 0 0 , 2 0 0 0 } >
VentaTrim O 1
0 1000 2000
1 20000 30000
2 10000 15000
3 5000 2000
En este caso, VentaTrim(l,2) tendrá el valor de 15000.
Arreglos escalonados Se conoce como arreglos escalonados (jagged arrays) a un arreglo que almacena arreglos. La sintaxis para su definición sería la siguiente. Dim
ArregloOO A s TipoDato
Donde Arreglo es el identificador del arreglo; su denominación sigue las mismas reglas que las variables. Dependiendo el número de arreglos que se desee incluir, se deberán agregar pares de paréntesis después del nombre de variable. TipoDato es el tipo de dato que tienen los elementos en los arreglos. Por ejemplo: Dim N u m e r o s ( ) () A s B y te
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. Dim
ArregloQQks TipoDato -
{ A r r e g l o l , A r r e g lo 2 )
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. Por ejemplo: Dim N u m e ro s o () A s B y te = { B y t e ( ) { 1 0 , 1 5 , 1 2 , 1 1 > , B y t e ()
{4 0 ,5 0 ,6 0 }
}
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
129 |
Numeros
En este caso, Números(0 ) (3) tendrá el valor de 11. Estaríamos extrayendo, del arreglo 0, el elemento 3. El primer subíndice indica el número de arreglo del que se trata, mientras que el segundo indica el o los subíndices del elemento que queremos extraer. Un arreglo escalonado puede contener arreglos unidimensionales o multidimensionales. 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 quiere almacenar en un arreglo el número de identificación de 1000 empleados y 5 núme ros de categorías de empleados, un arreglo multidimensional ocuparía 1000 X 5 posicio nes de memoria, es decir, 5000; un arreglo escalonado, por el contrario, requeriría sólo 1000 + 5, es decir, 1005. Si el arreglo fuera de datos Long (8 bytes), la diferencia en con sumo de memoria sería de 31,960, que podría implicar un ahorro muy importante. Algo que es importante tomar en cuenta es que los arreglos escalonados no forman parte de CLS, por lo que trabajarán adecuadamente sólo en implementaciones Microsoft, y no en otras plataformas que implementen considerando CLS como base.
*
Ejercicio 4.4 Comprobación del uso de arreglos unidimensionales, multidimensionales y escalonados
En este ejercicio se comprobará la forma en que funcionan los alcances de variables en Vi sual Basic y la forma en que podemos aprovechar su manejo para preservar valores en me moria con eficiencia. 1. Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). 2. Agregue a su solución un proyecto Windows - Consolé Application ja m a d o Arreglos. 3. Edite el programa de tal forma que aparezca como sigue:
www.FreeLibros.me
130
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
C o d ific a ció n d e A rre g lo s - Modulel. vb
1 2 o o 4 c O 6 7 8 9 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
Option Explicit On Option Strict On Module Modulel Sub Main() Dim i As Integer Consolé.WriteLine("Arreglo unidimensional 1:") Dim Uni1() As Integer = {22, 49, 20, 40} For Each i In Uni1 Consolé.WriteLine(i ) Next Consolé.WriteLine("Arreglo unidimensional 2:") Dim Uni2() As Integer = {55, 66, 77} For Each i In Uni2 Consolé.WriteLine(i ) Next Consolé.WriteLine("Arreglo Dim Multi(,) As Integer = Consolé.WriteLine( _ String.Format("Fila 0: Multi(0, 1))) Consolé.WriteLine( _ String.Format("Fila 1: Multi(1, 1))) Consolé.WriteLine( _ String.Format("Fila 2: Multi(2, 1)))
multidimensional:") {{92, 49}, {44, 20}, {10, 48}} {0},{1} ", Multi(0, 0), {0},{1} ", Multi(1, 0), {0},{1} ", Multi(2, 0),
Consolé.WriteLine("Arreglo escalonado:") Consolé.WriteLine("Arreglo 1, posición 2") Dim Esca()() As Integer = {Uni1, Uni2} Consolé.WriteLine(Esca(1)(2)) Consolé.Write("Presione INTR0") Consolé.ReadLine() End Sub End Module
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
Ejecución g u ia d a d e A rre g lo s - Module-I.vb
4. Construya la solución (Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (.StartUp Project) y guarde todos los cambios que ha realizado en la solución (Ctrl-Mayús-S). Inicie la depuración para comprobar el comportamiento de su progra ma (oprima F5). 5. En la línea 10 se declara un arreglo unidimensional, llamado Unil, y al mismo tiempo que se declara se le asignan valores a las posiciones de memoria del arreglo. Se trata de un arreglo de cuatro posiciones de memoria, por lo que sus subíndices irán de 0 a 3.
49
20
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 Integer, para trabajar cada uno de los elementos del arreglo Uni.1. La estructura For Each comenzará una lectura secuencial de todos los elementos, desde el subíndice 0 has ta el 3; i asumirá el valor del elemento que se esté leyendo en el momento, por lo que trabajar con i es como estar trabajando con el elemento del arreglo. La línea 12 provo ca que se vea en la consola el contenido de cada una de las posiciones en memoria. La línea 16 declara un arreglo unidimensional de tres posiciones, llamado Uni2 ,que se rá utilizado junto con Unil más adelante. El proceso para el mostrado de contenido se repite con Uni2 . Sus valores son los siguientes:
66
6. En la línea 22 se declara un arreglo multidimensional, llamado Multi, constituido por dos dimensiones. Se asignan valores al momento de la declaración, que nos indican que el arreglo será de dos columnas y tres filas. Vea cómo el número de series de valores de
www.FreeLibros.me
132
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
termina el número de filas, mientras que el número de elementos de cada serie de valo res determina el número de columnas: 92
49
44
20
10
48
Las líneas de la 23 a la 28 se encargan de mostrar los valores que componen cada fila. Para ello nos apoyamos de la función S trin g . Format, que hace una sustitución directa de parámetros. Vea cómo funciona: String.Format("Primer valor {0} segundo valor {1}", 10, 20)
generaría como resultado: "Primer valor 10 segundo valor 20"
Los parámetros se incluyen con base 0, y deberá proporcionarse una serie de valores se parados por comas después del String que queremos construir. El primer valor de la serie toma la primera posición ({0}), el segundo la segunda ({1}), y así sucesivamente. Los subíndices en los arreglos indican la fila y la columna, considerando una base cero. 7. La línea 32 define un arreglo escalonado, llamado Esca, que almacena los arreglos Unil y Uni2: 22
55
49
66
20
77
40 La línea 33 muestra, del segundo arreglo almacenado (subíndice 1), el tercer elemento almacenado (subíndice 2). Entre los primeros paréntesis irá el subíndice del arreglo es calonado; es decir, permite seleccionar al arreglo a inspeccionar. En los siguientes pa réntesis se coloca el subíndice (o subíndices) del arreglo seleccionado. A diferencia de un arreglo multidimensional, en donde todas las filas tienen igual nú mero de columnas, en un arreglo escalonado la forma y dimensiones dependen de los arreglos almacenados.
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
Si todo ocurrió como se esperaba, la salida será la siguiente: Arreglo unidimensional 1 : 22 49 20 40 Arreglo unidimensional 2: 55 66 77 Arreglo multidimensional: Fila 0: 92,49 Fila 1: 44,20 Fila 2: 10,48 Arreglo escalonado: Arreglo 1, posición 2 77 Presione INTRO
8. Vea el siguiente ejemplo y coloque las referencias que hacen falta. a) Parautilizar Unii
49 = Unii (1 )
b) Parautilizar Uni2
55 = __________________________
c) Parautilizar Multi
10
d) Para utilizar Esca
66 = __________________________
= __________________________
Estructuras y enumeraciones Estructuras Las estructuras (structures) son la implementación de estructuras de datos definidos por el usuario en Visual Basic. Las estructuras son elementos valué type y pueden contener datos y comportamientos. Son muy parecidas a las clases, con la diferencia que estas últimas son reference type. La forma de implementar estructuras se identifica de acuerdo con la siguiente sintaxis: Structure NombreEstructura
Elementos End Structure
www.FreeLibros.me
134
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
donde Nombre Estructura es el nombre de la estructura en cuestión, y Elementos podrán ser variables, funciones, procedimientos y eventos asociados a aquélla. Por ejemplo: S t r u c t u r e Nom breCom pleto P u b lic Nombre A s S t r i n g P u b lic A p e lli d o P a t e r n o A s S t r i n g P u b lic A p e llid o M a t e r n o A s S t r i n g F u n c t io n End S t r u c t u r e
En este caso se declaró una estructura que almacena el nombre y los apellidos de una per sona. Las variables que componen la estructura tienen acceso público, a fin de ser utiliza das de forma abierta. En caso de que se tengan en una estructura variables que se utilicen sólo dentro de la estructura misma, la accesibilidad deberá variarse.
Enumeraciones Las enumeraciones (enumerations) son colecciones de valores constantes, nominados con el fin de limitar un dominio determinado. Son muy útiles para evitar el uso de valores no vá lidos para elementos clasificados, como podrían ser colores, categorías, estados, etcétera. La forma de implementar enumeraciones se realiza de acuerdo con la siguiente sintaxis: Enum NombreEnume ración Elementos End Enum
Donde NombreEnume ración es el nombre de la enumeración, y Elementos podrán ser las constantes permitidas. A las constantes se les puede asignar o no un valor de inicio. Por ejemplo: Enum E s t a d o A c tiv o In a c t iv o End S t r u c t u r e
En este caso se declaró una enumeración que permite el uso de las referencias Estado. Ac tiv o y E stad o .In activ o como valores válidos. Pudo haber sido también de la siguiente forma: Enum E s t a d o A c t i v o = "A " In a c t iv o = " I " End S t r u c t u r e
Donde además de limitarse el dominio, se permite asignar un valor interno a la constante.
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
M
a p a m e n t a l d e l c a p ít u l o
www.FreeLibros.me
135
136
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
T e r m in o l o g ía
Accesabilidad, 100, 120 Accessibility, 100, 120 Alcance, 100, 118 de bloque, 118 de espacio de nombres, 119 de módulo, 119 de procedimiento, 119 Arrays, 125 Arreglo(s), 125 dimensional, 127 escalonados, 128 unidimensionales, 126 As, 113 Block scope, 118 Bloque(s) condicionales, 118 de código, 118 no condicionales, 118 Boolean, 104 By Ref, 108 Byte, 104 ByVal, 108 Camel casing, 102 Casting, 106 Char, 104 Code block, 118 Colecciones, 125
Constantes, 113 Conversión de datos, 104 explícita, 106 implícita, 106 por método, 107 Datatype, 100, 103 Date, 104 Decimal, 104 Dim, 112 Dimensionalidad, 127 Dimensionality, 127 Dominio, 103 Double, 104 Enum, 134 Enumeraciones, 134 Enumerations, 134 Estructura, 117, 133 Friend, 120 Hungarian notation, 102 Identificador, 100 Identifier, 100 Instance variable, 121 Instrucción de declaración (Dim), 112 Integer, 104 Jagged arrays, 128 Lifetime, 100 Literales, 113 Long, 104
Matrices, 125 M odule scope, 119 Namespace scope, 119 Narrowing, 106 Notación húngara,
typing, 109 Structurels), 117, 133 Subíndice, 125 Tiempo de vida, 100 Tipo de dato, 100, 102 103 Option no numérico, Explicit, 109 104 Strict, 109 numérico, 104 Pascal casing, 101 Tipos de Private, 120 referencia, 107 Procedure scope, de valor, 107 119 Type safe, 109 Programas de tipo Value type, 107 de datos Variable(s) basadas en clase asegurados, 109 reforzados, 109 (intermediación Protected, 120 requerida), Friend, 120 117 Public, 120 basadas en estructura(sin Rango, 127 Rank, 127 intermediación requerida), 117 Readonly, 121 compartidas, 120 Reference type, 107 de instancia, 121 Scope, 100, 118 de memoria, 99 Shadowing, 119 de solo lectura, Shared, 120 121 Short, 104 estáticas, 120 Single, 104 privadas, 120 Static, 120 protegidas, 120 String, 104 públicas, 120 Strong W idening, 106 type, 109
P r eg u n ta s
4.1 ¿Qué son las variables y cuáles son sus principales características? 4.2 ¿Qué son los arreglos y de qué tipos hay? 4.3 Explique la diferencia entre Valué Type y Reference Type. 4.4 ¿Cómo se puede lograr que un programa sea stwng typingl 4.5 ¿Qué tipos de datos acepta .NET? Enumérelos y proponga un ejemplo de un da to de la vida real que encaje dentro del dominio de tipo.
www.FreeLibros.me
Capítulo 4. Variables, arreglos y tipos de datos
Notas:
www.FreeLibros.me
138
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Ex a m e n
r á p id o d e l c a p ít u l o
Parte 1: M arque con una cruz el inciso que considere que responde a la pregunta. 1.
Es la referencia lógica a una posición física de la memoria RAM: a) Estructura b ) Variable
c) Tipo de dato 2. Es el estatuto que ayuda a que el código sea type safe: a) Option Explicit b) Option Strict
c) Option Compare 3.
Es el atributo que define la cantidad de código en que una variable puede ser utilizada sin invocar su calificador: a) Alcance b) Accesibilidad
c) Tiempo de vida 4.
Es el permiso que se proporciona al código para poder leer y escribir en una variable: a) Alcance b) Accesibilidad
c) Tiempo de vida 5.
Es el comportamiento que da preferencia a la variable de alcance más estrecho: a) Selecting b) Scoping
c) Shadowing
Parte 2: Coloque en la línea la letra «F» si el enunciado es falso y «V» si es verdadero. 6. Las variables públicas son las que tienen mayores restricciones.
_______________
7. Una de las nuevas capacidades de .NET es poder utilizar variables aun sin haberlas
______________
declarado. 8. Los arreglos multidimensionales tienen un manejo de memoria más económico que
______________
los arreglos escalonados. 9. El alcance de módulo es más estrecho que el alcance de bloque. 10. El identificador de una variable no puede repetirse en un mismo alcance.
www.FreeLibros.me
_______________ _______________
C a p ít u l o Espacios de nombres y desarrollo de librerías Objetivos: A prender qué son los espacios de nom bres y cóm o crearlos y
utilizarlos. 1. Conocerá qué son los espacios de nombres. 2. Sabrá cuáles son los espacios de nombres más utilizados en .NET. 3. Se familiarizará con el manejo de los nombres calificados para in vocar espacios de nombres. 4. Aprenderá a importar espacios de nombres en un programa. 5. Aprenderá a crear espacios de nombres definidos por el usuario y se familiarizará con la forma en que se utilizan en forma de li brerías. 6. Aprenderá el uso de alias de espacios de nombres.
www.FreeLibros.me
140
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido Espacios de nombres (ñamespaces) ..................................................... Nomenclatura para los espacios de nombres ................................ M ic ro so ft................................................................................ S y st e m ................................................................................... Uso de espacios de nombres ............................................................. Creación de namespaces p r o p io s ........................................................ Alias para los espacios de nombres ..................................................... Independencia de los e n sa m b la d o s..................................................... R eferencias..................................................................................... Creación y consum o de una librería (DLL) basada en un espacio de n o m b re s .................................................................... > Creación de una librería DLL .................................. > Revisión de todos los elementos asociados a un proyecto, usando Solution E x p lo r e r ......................... > Establecimiento de una referencia a una librería desde Solution Explorer ......................................... > Consum o de una librería p rogra m ática m en te ............ Utilización del depurador (Debug) de Visual Studio y la ejecución línea a línea basada en puntos de interrupción (breakpoínts) .................................................................... > Establecimiento de un punto de interrupción (breakpoint) ........................................................ > Ejecución línea por línea (Code Stepping) ................. > Modificación de program as en tiem po de ejecución . . . >► Puntos de interrupción condicionales........................ > Habilitación e inhabilitación de puntos de interrupción ........................................................ > Eliminación de los puntos de interrupción (breakpoint) ........................................................ Utilización de Com m and W in d o w ...................................................... > Escritura de comandos de Visual Studio usando Command W in d o w ................................................ Uso de herramientas avanzadas para la depuración ................... > Apilado de herramientas en Visual S t u d io ................. > Ventanas de variables (variable w in d o w s ) ................. > Ventanas de inspección de c ó d i g o ........................... M a p a mental del capítulo ................................................................ Term inología................................................................................... P re g u n t a s ....................................................................................... Examen rápido del c a p ít u lo ...............................................................
www.FreeLibros.me
141 143 143 144 148 149 150 151 151 153 153 154 155 156
157 158 158 159 160 161 161 162 162 165 165 166 168 170 171 171 173
Capítulo 5. Espacios de nom bres y desarrollo de librerías
Espacios de nombres (n a m
e sp a c e s)
Por definición, un espacio de nombres (namespace) es un esquema lógico que permite agrupar clases y types relacionados a través de un nombre. En términos generales, es una referencia lógica a las librerías utilizadas por un programa. Las librerías, como seguramente ya sabe, son archivos binarios ejecutables, preferente mente con extensión DLL, que contienen procedimientos de uso común (en forma de cla ses) disponibles para que los programas los utilicen. La extensibilidad de un lenguaje es su capacidad para integrar librerías desarrolladas por otros. Seguramente le habrá sucedido que al tratar de ejecutar un programa (con extensión EXE) que copió desde otra máquina éste no funciona y despliega una mensaje de error donde di ce que no puede encontrar un DLL que necesita para trabajar. Podemos concluir algo: que los programas se apoyan en las librerías, pues mandan llamar a ejecución procedimientos contenidos en ellas. Los espacios de nombres hacen que la identificación, localización y uso de las librerías se realice de manera sencilla y lógica. Cuando se desarrolla en Visual Basic se crean muchos objetos que de manera conjunta re presentan la interfaz de usuario, y que a través de su comportamiento forman lo que llama mos aplicación. A cada objeto de la aplicación se le pueden alterar las propiedades o eje cutar sus métodos, y éstos pueden ser utilizados por funciones o estructuras de decisión y control. Tanto las clases de las que derivan los objetos como las funciones del lenguaje deben es tar definidas en alguna parte. Físicamente, los archivos de clases de .NET Framework tienen la extensión DLL; en .NET las cosas no cambian y cada vez que usted declara una variable de tipo in t, por ejemplo, realmente está generando una instancia de una clase que se encuentra definida en un archi vo DLL. Probablemente para usted sea transparente, pero un programa simple puede estar haciendo referencia a varias clases que se encuentran en archivos DLL distintos. Tome en cuenta que .NET Framework pone a su disposición un número muy grande de cla ses ya preparadas para que usted las utilice; éstas se distribuyen en muchas librerías de vínculos dinámicos (DLL), algunas de ellas de más de 2 MB de código puro, que satisfa cen casi cualquier requerimiento general de programación. Tener en mente los nombres físicos de los archivos DLL y la referencia exacta de las clases que contienen puede ser una labor titánica. Si desarrolla utilizando Visual Studio quizá se facilite su trabajo, porque la herramienta de desarrollo establece los enlaces con los DLL de manera automática.
www.FreeLibros.me
142
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Tener muchos archivos físicos de librerías constituye una ventaja, pues implica que el len guaje ya contiene muchas funciones que no será necesario programar; por otro lado, plan tea un problema, pues encontrar tantos archivos no resulta práctico.
NOTA Las librerías de vínculos dinámicos que conform an el .NET Framework cumplen con todas las especificaciones de .NET y, por tanto, son ensamblados; aclaramos esto para que no intente llevar estos archivos DLL a otro sistema y registrarlos, pensando que funcionarán: si no tiene instalado .NET Framework no lo harán porque son ensamblados y, por tanto, son código ad ministrado que requiere la presencia del CLR.
Buscando la simplificación, Microsoft creó un sistema lógico que permite organizar y categorizar las clases disponibles en las librerías que componen el .NET Framework, basán dose en un concepto: los espacios de nombres (namespaces). Los espacios de nombres proporcionan una estructura que organiza y simplifica la referen cia a las clases a través del .NET Framework, y no sólo Microsoft Visual Basic puede usar los espacios de nombres; también pueden hacerlo el resto de los lenguajes .NET, ya que realmente conviven con el CLR. Es muy importante señalar que los espacios de nombres no tienen nada que ver con la herencia entre las clases. Los espacios de nombres sólo están relacionados con la identi ficación de clases, y no con la jerarquía madre-hija de éstas. Ciertamente, los espacios de nombres sugieren una jerarquía, pero ésta no tiene nada que ver con la herencia entre cla ses; realmente se trata de un agolpamiento basado en funcionalidad. Quienes desarrollan basándose en la tecnología COM están conscientes de que los espa cios de nombres son la evolución lógica de los identificadores ProglD. Un espacio de nombres es dos cosas: a) un convencionalismo de nomenclatura y b) un es quema lógico de organización de clases de .NET Framework. Los espacios de nombres organizan colecciones de clases y eliminan la ambigüedad al mo mento de hacer referencias a ellas. Un mismo espacio de nombres puede hacer referencia a diferentes archivos DLL que contengan clases de funcionalidad similar. Los espacios de nombres parten de dos grandes grupos: System y Microsoft. A partir de ahí se generan subgrupos especiales, de acuerdo con la funcionalidad.
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
Nomenclatura de los espacios de nombres La nomenclatura de los espacios de nombres se basa en la notación Pascal casing, con di visión basada en puntos para representar la jerarquía. En el caso de System.Consolé.WriteLine que ya hemos utilizado, System es el espacio de nombres, Consolé es la clase y WriteLine es el método de la clase. Generalmente, el último elemento del nombre es un type (método, propiedad, campo, etcétera), el penúltimo es una clase de BCL, y todo lo que anteceda es la jerarquía de espacios de nombres para llegar a la clase. Es importante mencionar que el desarrollador puede crear sus propias jerarquías de espa cios de nombres, que también se regirán por las mismas reglas de nomenclatura. Algunos de los espacios de nombres más utilizados de la librería de clases de .NET Framework son los siguientes: NOTA Por su extensión, no se listan todos los espacios de nombres disponibles en .NET Framework, sino sólo los que a criterio del autor son los más usuales.
Microsoft El espacio de nombre Microsoft y todas sus dependencias ayudan a integrar las tecnolo gías Microsoft a los desarrollos. Además integra los elementos principales de los nuevos lenguajes de Microsoft. Espacio de nom bre (Namespace)
Utilidad
Microsoft.SqIServer.Server
Contiene clases que permiten integrar CLR en Microsoft SQL Server y su m otor de ejecución.
Microsoft.Csharp
Contiene clases que dan soporte a la compilación y generación de código usando C#.
Microsoft.Jscript
Contiene clases que apoyan a la compilación y generación de código usando Jscript.
M icrosoft .Visua 1Bas ic
Contiene clases que apoyan a la compilación y generación de código usando Visual Basic.
M icrosoft.Vis ualBasic.Fi lelO
Contiene tipos que dan soporte al manejo del sistema de archivos usando Visual Basic.
Microsoft.W¡n32
Provee dos tipos de clases: aquellas que manejan eventos iniciados por el sistema operativo y las que m anipulan el registro del sistema (W indows Registry).
www.FreeLibros.me
144
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
System El espacio de nombre System y todas sus dependencias contienen las clases fundamenta les de la plataforma .NET. En esta jerarquía se encuentran las clases base para definir va lores, referencias, tipos de datos, eventos y manejadores de eventos; además contienen los elementos para la declaración de interfaces, atributos, excepciones de procesos, etcétera. También se incluyen en ella todas las clases que hacen de los lenguajes de .NET herra mientas de propósito general, dado que se encuentran clases de graficación, acceso a da tos, telecomunicaciones, criptografía, matemáticas, etcétera. Nom bre del espacio de nombre (Namespace)
Utilidad
System.Collections
Contiene interfaces y clases que definen varias colecciones de objetos, com o lists, queues, arreglos de bits, hashtables y diccionarios.
System.Collections.Generic
Contiene interfases y clases que definen colecciones genéricas, que permiten a los usuarios crear colecciones strong type que proveen mejor tipo de seguridad y desempeño.
System.Configuration
Contiene los tipos que proveen el modelo de programación para manejo de datos de configuración.
System. Data
Contiene clases que constituyen la mayor parte de la arquitectura deADO .N ET. La arquitectura de ADO .N ET permite el acceso y manipulación eficiente de bases de datos de diversas tecnologías (SQL Server, Accès, Oracle, ODBC, OLEDB, etcétera).
System.Data.Common
Contiene clases compartidas por los proveedores de datos de .NET Framework. Un proveedor de datos de .NET Framework, describe una colección de clases usadas para acceder orígenes de datos, com o bases de datos, en el espacio administrado.
System.Data.Design
Contiene clases que pueden ser usadas para generar typed-datasets personalizados.
Sy5tem.Data.Od be
Contiene clases que el proveedor de datos para O D BC de .NET Framework encapsula.
System. Data.OleDb
Contiene clases que el proveedor de datos para OLE DB de .NET Framework encapsula.
System.Data.OracleClient
Contiene clases que el proveedor de datos para Oracle de .NET Framework encapsula.
System.Data.Sql
Contiene clases que apoyan funcionalidad específica de SQL Server. Complementa a System.Data.SqICIient, sobre todo en el manejo integrado de SQL Server 2005 y CLR.
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
System.Data.SqlClient
Contiene clases que el proveedor de datos para SQL Server de .NET Framework encapsula.
System.Data.SqIServerCE
Describe una colección de clases que pueden ser usadas para acceder a una base de datos en SQL Server CE para dispositivos W indow s CE-based en el espacio administrado.
System.Data.SqlTypes
Contiene clases para tipos de datos nativos en SQL Server. Estas clases proveen una alternativa más rápida que otros tipos de datos. Ayuda a prevenir errores de conversión que puedan derivar en pérdida de precisión.
System.Diagnostics
Provee de clases que permiten interactuar con los procesos del sistema, logs de eventos, desempeño de contadores. También provee clases que permiten buscar errores en la aplicación y rastrear la ejecución de código.
System.Directory Services
Provee acceso sencillo al Active Directory.
System. D irectory Services .ActiveD irectory
Provee un modelo abstracto de alto nivel para la manipulación de las tareas de servicio del directorio de M icrosoft® Active Directory®.
System. Drawin g
Provee acceso a la funcionalidad de gráficos básicos GDI+.
System.Draw ing.Design
Contiene clases que extienden la interfaz de usuario en tiem po de diseño.
System .Drawing.Drawing2D
Provee funcionalidad gráfica avanzada (bidimensional y vectores). Incluye paletas de gradientes, la clase M atrix (usadas para definir transformaciones geográficas) y la clase GraphicsPath.
System.Drawing.Printing
Provee de servicios de impresión de gráficos.
System. Drawing.Text
Provee funcionalidad de tipografía G DI+ avanzada. Permite a los usuarios crear una colección de fuentes.
System.G lobal ization
Contiene clases que definen información relacionada con la cultura, incluyendo lenguajes, el país/región, el calendario en uso, el form ato de fechas, moneda, números y el orden de cadenas. Indispensable su uso si se desarrollan aplicaciones de alcance internacional.
www.FreeLibros.me
146
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
System.IO
Contiene tipos que permiten lectura sincrónica y asincrónica de flujos de datos y archivos.
System.lO.Compression
Contiene clases que proveen compresión y descompresión básica de flujos de datos.
System. IO. Ports
Contiene clases para el control y uso de puertos.
System. M essaging
Provee clases que permiten la conexión, monitoreo y administración de mensajes de colas en la red para enviar y recibir mensajes.
System.Net
Proveen una interfaz de programación para los principales protocolos usados en redes actuales.
System.Net.Configuration
Contiene clases para la configuración programática de System.Net.
System.Net.Mail
Contiene clases usadas para enviar correos electrónicos a un servidor SM TP (Simple Mail Transfer Protocol).
System. Net.Mim e
Permite representar encabezados M IM E (Multipurpose Internet Mail Exchange).
System. Net.Networklnformation
Provee acceso a datos de tráfico de datos, información de direcciones de red y notificaciones de cambios de direcciones de la computadora local. También contiene clases para implementar Ping.
System. Net.Sockets
Provee una implementación de interfaces W indos Sockets(Winsock), para ayudar a los desabolladores que necesitan control de acceso a la red.
System.Runtime. Remoting
Provee de clases e interfaces que permiten a desabolladores crear y configurar aplicaciones distribuidas.
System.Security
Provee de una estructura subyacente del sistema de seguridad de .NET Framework, incluyendo clases base para permisos.
System.Security.Cryptography
Provee servicios criptográficos. Incluye codificación y descodificación segura de datos, así com o muchas otras operaciones, com o hashing, generación de números aleatorios, y autentificación de mensajes.
System. Security.Cryptography.X509Certificates
Contiene lenguaje de implementación del certificado Authenticode X.509 v.3.
System .See urity.Cryptogra phy.Xml
Contiene clases que apoyan la creación y validación de firmas digitales XM L.
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
System.Text
Contiene clases para la representación y conversión de sistemas textuales, como ASCII, Unicode, UTF-7 y UTF-8.
System.Text.Regu larExpressions
Contiene clases que proveen acceso al motor de expresiones regulares de .NET Framework.
System.Threading
Provee clases e interfaces que habilitan programación multitarea.
System.Ti mers
Provee de un com ponente tem porizados que permite disparar un evento en intervalo específico.
System.Transactions
Contiene clases que permiten al código participar en transacciones.
System.Web
Provee clases e interfaces que habilitan el m odelo de petición respuesta para ambientes Web, basados en el protocolo HTTP, además del manejo de cookies.
System.Web.Configuration
Contiene clases que son usadas para configurar ASP.NET.
System.Web.Mobi le
Contiene las capacidades principales, incluyendo autentificación y manejo de errores, requerido para construir aplicaciones móviles ASP.NET.
System.Web.SessionState
Provee clases e interfaces que habilitan el almacenamiento de datos desde un cliente específico en una aplicación W eb en el servidor.
System.Web.UI
Provee clases e interfaces que permiten crear interfaces de usuario en ambiente Web.
System. W eb.UI.WebControls
Contiene clases que permiten crear elementos gráficos de interfaz de usuario en una aplicación Web.
System.Windows.Forms
Contiene clases para crear aplicaciones basadas en W indow s para aprovechar las características de la interfaz gráfica disponibles en el sistema operativo de Microsoft W indows.
System.Xml
Provee soporte de procesamiento XM L.
System.Xml.Serialization
Contiene clases que son usadas para serial ¡zar documentos en form ato XM L.
www.FreeLibros.me
148
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
No son todos los espacios de nombres; la mayoría tiene niveles jerárquicos de mayor pro fundidad que sería imposible tratar en este texto. Utilice la tabla como punto de partida pa ra buscar más información. En la ayuda de Visual Studio puede buscar .NET Framework Class Ubrary, y de ahí selec cionar un tema que le interese.
Uso de espacios de nombres
T ie m p o s d e com p ilació n deCLR
Las aplicaciones desarrolladas en .NET pueden disponer de todas las clases y objetos del .NET Framework, es decir, todos los recursos de .NET Framework; lo único que hay que hacer es referirlos adecuadamente. Si se desea hacer uso de cualquier clase de BCL es necesario proporcionar el nombre pre ciso de ésta. Una forma en que se pueden referir los recursos de BCL es a través de lo que se conoce como nombres calificados (fully qualified ñame), que son la especificación tex tual de la jerarquía de espacios de nombres que permite ubicar una clase o type (Namespa ce. Clase. Type).
Es posible utilizar todas las clases disponibles de .NET Framework a través de sus nom bres calificados, pero eso no es del todo práctico pues en ocasiones éstos pueden ser bas tante largos (System.Runtime.Remoting.Channels.Http, por ejemplo). Una forma de obviar la escritura del nombre calificado completo es importando los espa cios de nombres. Para ello se utiliza la instrucción Imports. Basta con que coloque lo siguiente al principio de su programa: Imports EspacioNombre
Donde EspacioNombre es la parte del nombre calificado que desea obviar al momento 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, los cuales permiten definir el origen de los recursos referidos.
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
Los siguientes dos programas funcionarían de la misma forma: Sin uso de instrucción Imports: Module Modulel Sub Main() System.Consolé.Write("Presione INTR0") system.Consolé.ReadLine() System.Consolé.WriteLine("Hola mundo.") End Sub End Module
Con uso de instrucción Imports: Imports System.Consolé Module Modulel Sub Main() Write("Presione INTR0") ReadLine() WriteLine("Hola mundo.") End Sub End Module
Contaminación de espacios de nombres y colisiones de nombre. Como puede apreciar, los espacios de nombres permiten obviar la jerarquía de clases que permite tener acceso a una clase o a un método (type).
Puede darse el caso, principalmente cuando un equipo de desarrollo trabaja sobre un mis mo proyecto, de que dos o más programadores denominen a un método de la misma for ma; cuando se da esa repetición de nombres de métodos en diferentes jerarquías, se dice que estamos ante contaminación de espacios de nombres (namespace po lint ion). Si, exis tiendo contaminación de nombres, en un mismo programa se tratan de utilizar métodos ho mónimos, CLR es incapaz de diferenciarlos, por lo que se presenta el fenómeno de colisión de nombres (ñame collisions). Las colisiones de nombres se resuelven utilizando nombres calificados, mientras que la contaminación de espacios de nombres se evita mediante una planeación minuciosa del proyecto de desarrollo, además de utilizar métodos estructurados de desarrollo.
Creación de
n a m e sp a c e s
propios
.NET Framework proporciona una cantidad enorme de clases, accesibles a través de sus muchos espacios de nombres. Pero eso no es suficiente, pues todo lenguaje que presuma de ser extensible debe permitir a los desabolladores agregar funcionalidad específica que no está presente de manera genérica.
www.FreeLibros.me
150
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Es posible agregar espacios de nombres adicionales a los contenidos de origen en .NET Framework; los pasos para hacerlo son los siguientes: 1. Desarrollar el código de una librería (programa de extensión de Microsoft Visual Ba sic), delimitando el contenido de la librería a través del estatuto Namespace. 2. Compilar el código de la librería como tipo library, con lo cual no se generaría un ar chivo ejecutable ( e x e ), sino una librería de vínculos dinámicos (DLL). 3. Para hacer uso de la funcionalidad de una librería, es necesario hacer referencia a ella; eso se puede hacer desde Visual Studio (si se trata de una aplicación Windows o Web, a través de la opción de menú Project - Add Reference...), o en tiempo de compilación si se trata de una aplicación de consola y no se utiliza Visual Studio. 4. Es opcional utilizar nombres calificados una vez que se establece la referencia. La sin taxis 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 conteni dos 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.
Alias para los espacios de nombres Codificar utilizando nombres calificados puede ser muy complicado debido a que, en ocasio nes, los espacios de nombres no son muy cortos (de ahí que recurriéramos a importarlos). Esto plantea un nuevo problema: nos quedamos sin información con relación a qué espa cio de nombres contiene qué elementos. Un escenario ideal sería que los espacios de nombres no tuvieran el nombre muy largo, a fin de poder integrarlos al código sin necesidad de mucho esfuerzo; con ello obtendríamos información con relación al espacio de nombres de origen y, al mismo tiempo, comodidad al codificar. En pocas palabras, queremos espacios de nombres con nombres no muy lar gos, pero tampoco de nombre inexistente.
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
Esto es posible si asignamos un alias al espacio de nombres. Un alias de importación es la equivalencia en nombre que le damos a un espacio de nombres al momento de importarlo. Vea la sintaxis para establecer un alias de espacio de nombres: Imports Alias = EspacioNombres Donde EspacioNombres será el nombre del espacio de nombres que será referido a través de Alias.
Independencia de los ensamblados Una referencia del ejecutable hacia el archivo DLL se realiza en el momento en que se ge nera el ejecutable, y la referencia es directa entre el ejecutable y la librería. El DLL se encuentra en el mismo directorio que la aplicación; otros ensamblados podrán hacer referencia al DLL, incluso con el mismo nombre y no importa: el metadatos sabrá re conocer qué librería le corresponde al ejecutable. Esta sencilla modificación que aporta .NET tiene implicaciones trascendentales. Anterior mente, se generaba un componente o una librería y ésta debía ser registrada en el Registro de Windows antes de poder ser utilizada (por lo general se almacenaba en un recipiente co mún \Windows\Systen O \WINNT\System, según el sistema). Cuando una librería se actualizaba, los programas que la utilizaban podrían ya no ser com patibles, dando lugar al infierno de los DLL. Ahora, cada ejecutable puede disponer de su propia versión de la librería, y .NET no dejará que se pierdan las referencias entre librerías y ejecutables. En .NET, las librerías desarrolladas por el usuario tienen total independencia del Registro de Windows. Para distribuir una aplicación, basta copiar el ejecutable y las librerías que utiliza. Sobra decir que no necesitará copiar las librerías que forman parte de .NET Framework, ya que para que un ejecutable .NET (ensamblado) funcione en un equipo, éste debe tener el CLR y el .NET Framework instalado, por lo que dichas librerías se tienen por disponibles.
Referencias Una referencia puede definirse como la especificación de enlazado entre un programa y una librería, en donde la librería pone su funcionalidad a disposición del programa hasta donde la accesibilidad lo permite.
www.FreeLibros.me
152
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
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 ción. En el Solution Explorer pueden observarse claramente, ya que bajo el nodo de un pro yecto siempre hay un nodo References. Si se requiere hacer una nueva referencia, es necesario colocarse sobre el nodo References del proyecto al que se desea agregar la referencia, y seleccionar Add Reference desde el menú contextual. Con esto aparecerá la ventana Add Reference.
.N ET
COM
P ro je cts
B ro w se
C om p onent Nam e
Recent
V e r s io n
■ A c c e s s ib ilit y
R u n tim e
H i
P ath
2 .0 .0 .G
v 2 .0 .5 0 7 2 7
C : \W IN D O W S \M ie r o s o f . . .
adodb
7 ,0 .3 3 0 0 ,0
v l, 1 ,4 322
C
A sp N e tM M C E x t
2 ,0 .0 ,0
v 2 , 0 ,5 0 7 2 7
C :\W IN D O W S \M ic r o so f,,,
C p p C o d e P r o v id e r
3 ,0 .0 ,0
v 2 , 0 ,5 0 7 2 7
C
csc o m p m g d
S.0 .0 .0
v 2 . 0 .5 0 7 2 7
C : \ W I N D O W 5 \ M ic r o s o f . . .
C u s to m M a rsh a le rs
2 .0 .0 .0
v 2 . 0 .5 0 7 2 7
C : \ W I N D O W 5 \ M ic r o s o f . . .
D y n a m ic P D F G e n e r a t o r .. .
3 .0 .3 .0
v l. 0 .3 7 0 5
C \\A r c h iv o s d e p r o g r a ...
A rc h i v o s d e p r o g r a ,,,
1
\\
A rch i'v o s d e p r o g r a ,,,
EnvD TE
8 .0 .0 .0
v l. 0 .3 7 0 5
C
A rc h i v o s d e p r o g r a ...
e nvd te
3 .0 .0 .0
v l. 0 .3 7 0 5
C
A rc h i v o s d e p r o g r a ...
EnvD TESG
3 ,0 .0 ,0
v l, 0 ,3 7 0 5
C ¡\ A rc h i v o s d e p r o g r a ,,,
e nvd teSO
S ,0 .0 ,0
v l, 0 ,3 7 0 5
e x te n s ib ility
7 ,0 .3 3 0 0 ,0
v l, 0 ,3 7 0 5
C
IE E x e c R e m o t e
2 .0 .0 .0
v 2 . 0 .5 0 7 2 7
C : \ W I N D O W 5 \ M ic r o s o f . . .
IE H o s t
2 .0 .0 .0
v 2 . 0 .5 0 7 2 7
C : \ W I N D O W 5 \ M ic r o s o f . . .
IIE H o s t
2 .0 .0 .0
v 2 . 0 .5 0 7 2 7
C :\W IN D O W S \M ic r o so f...
IS y m W r a p p e r
2 .0 .0 .0
v 2 . 0 .5 0 7 2 7
C : \W IN D O W S \M ie r o s o f . . .
C \\
A rch i'v o s d e p r o g r a ,,, A rch i'v o s d e p r o g r a ,,,
OK
rm 5
Cancel
La ventana muestra varias fichas. En la ficha .N ET podrán seleccionarse las librerías de .NET Framework o aquellas que se registren en GAC utilizando nombres fuertes (strong ñames). En la ficha COM se pueden seleccionar aquellas librerías COM que se desee uti lizar, dado que la plataforma .NET les da soporte. En la ficha Projects es posible seleccio nar los proyectos .NET que sean de tipo Library (DLL), de los cuales se pueden consumir clases expuestas. En la ficha Browse pueden examinarse los archivos que se encuentran en el equipo, con el fin de seleccionar algún DLL. La ficha Recent permite invocar las libre rías de reciente uso o creación, a fin de encontrarlas sin buscar en todos lados.
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
En cualquiera de las fichas es posible seleccionar los componentes seleccionando la librería a referir y haciendo clic en el botón O k, a fin de que las referencias queden establecidas.
*
Ejercicio 5.1 Creación y consumo de una librería (DLL) basada en un espacio de nombres
En este ejercicio se comprobará la forma en que funcionan los alcances de variables en Vi sual Basic, y la manera en que podemos aprovechar su manejo para preservar valores en memoria con eficiencia. 1. Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin).
> Creación de una librería DLL 2. Agregue a su solución un proyecto Windows - Class library, llamado Misutilerias. Es muy importante que el proyecto sea una librería de clases, para que al compilar el pro yecto se genere un ensamblado de extensión DLL. 3. Edite el programa de tal forma que aparezca como sigue:
I Codificación de MisUtilerias - Continuar.vb 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Imports System.Console Namespace Funciones Public Class Continuar Public Shared Sub EsperaINTR0() WriteLine() WriteLine("Pulse INTR0 para continuar") ReadLine() End Sub End Class End Namespace
4. Esta librería generará el archivo Misutilerias.DLL. Posee un espacio de nombres de nominado Funciones, que a su vez contiene una clase llamada Continuar que tiene defi
www.FreeLibros.me
154
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
nido un método llamado EsperarlNTRO. El método se encarga de mostrar un mensaje y esperar a que se pulse in t r o para continuar. Como lo recordará, hemos estado utilizan do código similar en los últimos ejercicios, por lo que en éste constituye una manera de automatizar esa labor tan común. 5. Es muy importante notar que la clase es pública (Public) dado que le daremos un uso de librería, y deseamos que sea utilizable por cualquier proyecto (incluso aquellos que no pertenecen a la solución). También es importante ver que el método es público y compartido (Shared), lo que indica que está disponible para uso externo a la clase. 6. Construya el nuevo proyecto que creó y guarde todos los archivos de la solución (opri ma las teclas Ctrl-Mayús-S). 7. Compruebe que al generar el proyecto se haya creado una librería DLL en su equipo. Busque en la siguiente ruta: C:\APVBNETVS\Ejercicios\MisUtilerias\bin\Debug
> Revisión de todos los elementos asociados a un proyecto, por medio de Solution Explorer 8. Agregue a su solución un proyecto Windows - Consolé Application, llamado ConsuneUtilerias.
9.
^ Seleccione en Solution Explorer el proyecto Consume Utilerías. Haga clic en el bo tón Show All Files de la barra de herramientas de Solution Explorer. Con ello apare cerán elementos que hasta el momento no había visto. Vea el árbol jerárquico de recur sos asociados a su proyecto. El que nos interesa más en estos momentos es el nodo Ref erences; haga clic en dicho nodo con el fin de ver qué contiene. Solution Explorer - Consum... -r 9 ¡a -
B i © Ö
© ®
im
X
a
lonsumeUbreria B Ü É O ! My Project References - O System •O System.Data ] •O System.Deployment •O System.Xml j C li bin
: obj ¡kj Modulel.vb 0 i]p HolaMundoCon ~A\ My Project Mnrlnlftl.vh M ilB H H
0|
g
-^Solution Explorer _/£ Class View
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
10. Al seleccionar un Templóte al momento de crear un proyecto en Visual Studio, la he rramienta sabe qué espacios de nombres son los más comunes para el tipo de proyec to, y procede a establecer referencias con las librerías correspondientes. Eso nos libe ra del trabajo de establecer referencias que son obvias, dado un tipo de archivo. Como podemos comprobar, nuestra librería MisUtilerias no se encuentra dentro de las refe rencias, por lo que no podríamos utilizar su funcionalidad en nuestro programa.
> Establecimiento de una referencia a una librería desde Solution Explorer 11. Seleccione su proyecto ConsumeUtilerias en Solution Explorer. Despliegue el menú contextual y seleccione Add Reference. Vaya a la ficha Projects y seleccione el pro yecto MisUtilerias. Haga clic en Ok.
NET
COM
Projects
P roje ct M am e
Browse
Recent Project D ire c to ry
A lc a n c e
C :\A P V B N E T V S \E jer cicios \ Al can ce
A r e a R e c t a n g u lo
C :\A P V B N E T V S \E jer cicios \ A r e a R e c t a n g u lo
A rre g lo s
C ;\A P V B N E T V 5 \E jer cicios \ A rre glo s
M o la M u n d o C o n
C :\A P V B N E T V 5 \E jer cicios \H o la M u n d o C o n
H o la M u n d o W in
C :\A P V B N E T V 5 \E jer cicios \H o la M u n d o W in
li'ilH IH IH in V alR e f
C :\A P V B N E T V S \E jer cicios \V a lR ef
M
WM
PM 31
OK
C an cel
12. Vea cómo al agregar la referencia, Solution Explorer actualiza el árbol de elementos del proyecto, incluyendo nuestra librería.
www.FreeLibros.me
156
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Solution Explorer - C onsum ...
1t ì
LÜ
^
*
X
1
Con sume Lib re ria
S • :3 à My Project 0"
References - a MisUtilerias
- O System System,Data * Q System , Deploy ment - a System.Xml
1
©■• C j bin ® - L .J obj M o d u le l.v b
0
._ÿ: HolaMundoCon --A\ Mw Pr nip rh
¿ ^ S o lu tio n Explorer S j Class View
> Consum o de una librería programáticamente 13. Ahora codifique el programa que consume la librería,
l Codificación de ConsuneLibrería - Modulel.vb 1 2 3 4 5 6 7 8 9 10 11
Imports System.Console Imports MisUtilerias.Funciones Module Modulel Sub Main() WriteLine("Mensaje desde el programa") Continuar.EsperaINTR0() End Sub End Module
14. Vea cómo al editar las líneas de importación de espacios de nombres, ya teníamos dis ponible nuestro espacio de nombres en Intellisense.
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
M a d u le l. v b *
C la s s i. vb
M o d u le l. v b
Start P age
M o d u le l . v b
H jC G e n e r-a l)
1
Im p orts
System .Con so l e
2
Im p o r t s
I
3 4
Ho d u 1
{ } - C o n s u m e L ib r e r ía
5
{>
6jé ?\
{>[_ _ _ _
M ic r o s o ft |W am e sp ace M isU tile ria sj
{}- S y ste m
f
End End
Sub
M o d u le
15. Se importa el nombre de la librería y el espacio de nombres (línea 2). Ya en el código, sólo es necesario invocar el nombre de la clase y el type (línea 8). Podríamos haber sim plificado aún más, incluyendo la clase en el Imports.
Ejecución guiada de ConsumeLibrería - Modulel.vb 16. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realiza do en la solución (oprima Ctrl-Mayús-S). Inicie la depuración para comprobar el com portamiento de su programa (oprima F5). 17. Si todo salió bien, el programa debe producir el siguiente resultado: Mensaje desde el programa Pulse INTR0 para continuar
18. Con este pequeño ejemplo ya comprobó cómo se generan bibliotecas de clases en .NET y cómo se consumen desde otros proyectos. FIN DEL EJERCICIO *
*
Ejercicio 5.2 Utilización del depurador (Debug) de Visual Studio y la ejecución línea a línea basada en puntos de interrupción (breakpoints)
Se agregarán puntos de interrupción a una aplicación, y se revisarán las opciones de ejecu ción línea a línea usando Visual Studio.
www.FreeLibros.me
158
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
1. Usando Visual Studio, abra la solución Ejercicios. 2. En el Solution Explorer encuentre el nodo correspondiente a Consume Librería M odulel.vb. Haga doble clic en dicho nodo para editar el código. Establezca el proyec to como proyecto de inicio (StartUp Project).
> Establecimiento de un punto de interrupción (breakpoint) 3. Seleccione la línea Sub Main() y establezca un punto de interrupción con la opción Debug - Toggle Breakpoint (F9), o bien, haciendo clic en el borde externo izquierdo de Text Editor, junto a la línea en la que desea agregar un punto de interrupción. Aparece rá una marca en el borde externo izquierdo de Text Editor, indicando que la línea tiene un punto de interrupción. a M o d u le M o d u l e l Su b M a in m W r it e L in e ( "M e n s a je d esd e el C o n t i nuar. E sp e r a lN T R O Q End Sub
p ro g ra m a ")
4. Genere nuevamente la solución y ejecútela.
> Ejecución línea por línea (code stepping) 5. Al momento de llegar a la línea 6 el programa se detendrá. □ M o d u le M o d u l e l
O
S u b Man n ( ) W r it e L in e ("M e n s a je d esd e C o n t i n u a r. E s p e r a ÍN T R O Q End Sub
el
p ro g ra m a ")
6.
' Al lanzar a ejecución una aplicación (oprimiendo la tecla F5), se entra en modo de bug, que es un estado de ejecución en donde Visual Studio provee todas las herramien tas para la depuración de aplicaciones en tiempo de ejecución.
7.
* Seleccione repetidamente Debug - Step Over (FIO), hasta terminar la ejecución del programa. La ejecución continuará en modo línea a línea. Al encontrar un llamado a un recurso externo al programa (clases, librerías, funciones, etcétera), las tomará como una sola línea; es decir, no profundizará en lo que pasa dentro del recurso externo al progra ma. Las líneas que se vayan ejecutando aparecerán resaltadas en amarillo.
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
4;b M o d u l e Modul e l 5!| Su b Man n I I W r it e L in e ( "M e n s a j e d esd e 7i C o n t in u a r . E s p e r a IN T R ü Q 8! End Sub 9i -
£
el
p ro g ra m a ")
8.
Ejecute nuevamente la aplicación (oprima F5). Seleccione repetidamente Debug Step Into (F ll), hasta terminar la ejecución del programa. La ejecución continuará en modo línea a línea. Al encontrar un llamado a un recurso externo al programa (clases, librerías, funciones, etcétera), realizará también una inspección línea a línea de dichos recursos. Las líneas que se vayan ejecutando aparecerán resaltadas en amarillo.
9.
3 Ejecute nuevamente la aplicación (oprima F5). Seleccione repetidamente Debug Step Into (FU ), hasta llegar a las líneas de código de la librería de MisUtilerias. Selec cione Debug - Step Out (M ayús-Fll) para terminar de ver el contenido de la librería y continuar con la ejecución en el programa que mandó llamar la librería.
10.
v J En cualquier momento, cuando se está en tiempo de depuración, se puede continuar la ejecución normalmente (Continué), detener momentáneamente la ejecu ción (Break Alt) o terminar la depuración (Stop Debugging).
> Modificación de program as en tiempo de ejecución (Edit and Continué) A
Microsoft'
V ? Visual Stud ¡o 2005
> Lo nuevo
Anteriormente, una vez que se iniciaba la depuración de un program a (oprim iendo F5), no había form a de modificar el program a en el momento. Si detectábamos un error de orto grafía en un mensaje del sistema, por ejemplo, y nos percatábamos del error al estar eje cutando el program a línea por línea, no era posible hacer la modificación en el momento. Si queríamos corregir el error de inmediato era necesario suspender la ejecución, hacer las modificaciones, volver a construir la aplicación y volver a ejecutarla. En Visual Studio 2005, en cambio, es posible modificar un program a en tiem po de depuración, viendo los cam bios de manera inmediata.
11. Ejecute nuevamente la aplicación (F5). Al llegar al punto de interrupción, continúe la ejecución con Step Over (FIO). Al llegar a la línea 7, que despliega Mensaje desde el programa, cambie en ese momento el mensaje por Mensaj e editado en tiempo de depuración. Siga ejecutando con Step Over. Compruebe en la consola que se ha escrito el nuevo mensaje, lo que indica que tomó como buenos nuestros cambios realizados en
www.FreeLibros.me
160
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
tiempo de depuración. A esta capacidad de Visual Studio se le denomina Edit and Con tinue, y sólo está disponible si el archivo está en vista de código fuente (source view).
> Puntos de interrupción condicionales 12. En ocasiones queremos que un punto de interrupción detenga la depuración sólo en ca so de que sea necesario. La necesidad de interrupción debe estar expresada en térmi nos de una condición lógica. A los puntos de interrupción que detienen la depuración sólo con base en una condición se les llama puntos de interrupción condicionales. 13. En el Solution Explorer encuentre el nodo correspondiente a AreaRectángulo M odulel.vb. Haga doble clic en dicho nodo para editar el código. Establezca el pro yecto como proyecto de inicio (StartUp Project). 14. Coloque un punto de interrupción en la línea
B a s e = C ln t (E n t r a d a ).
15. Coloque el puntero del ratón sobre el punto de interrupción, despliegue el menú con textual y seleccione Condition.... 9! 10! ii| 12!
C o n s o le .W rite L i ne( T i t u l o ) C o n s o le .W rite fB a s e : " ) E n t r a d a m C o n s o l e . R e a d L i ne
*
Delete Breakpoint
►J
Disable Breakpoint Location...
n"e7wr"i t e C" A l t u r a : " ) ■ida = C o n s o l e . R e a d L i n e C ) 'a = C T yp e C E n tra d a , S i n g l e ) ta d o = (Base * A l t u r a ) D le .W rite L i n e C 'R e s u lta d o :
&
Condition... Hit Count...
^
Filter... When hit...
16. Aparecerá la ventana Breakpoint Condition, en donde se podrá especificar la condi ción que provocará que el punto de interrupción detenga la depuración. Especifique que si el dato proporcionado es menor o igual a cero se detenga la depuración ( C In t (E n t r a d a )<=0).
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
í ïüiip Ohji C'ju When the breakpoint location is reached, the expression is evaluated and the breakpoint is hit only if the expression is true or has changed, f ^ l Condition:
CInt(Entrada)<=0
® jtetmei O
Has changed OK
Cancel
17. Inicie la depuración de la solución (oprima F5). Cuando el programa le pregunte la ba se, proporcione el número 10. Proporcione una altura de 15 y vea cómo el programa no detiene la depuración en ningún momento. 18. Inicie nuevamente la depuración de la solución (oprima F5). Cuando el programa le pregunte la base, proporcione el número 0. Al cumplirse la condición, el programa se detiene.
> Habilitación e inhabilitación de puntos de interrupción 19. En ocasiones se desea iniciar la depuración de un programa sin tener que lidiar con los puntos de interrupción. Una alternativa definitiva es eliminar los puntos de interrupción; si no se desea que los puntos de interrupción se pierdan pero que tampoco detengan la depuración en un momento dado, la opción más recomendable es inhabilitarlos. 20. Seleccione la opción Debug - Disable All Breakpoints. Inicie la depuración y proporcio ne como valor base el 0. En teoría debería detenerse la depuración, dado que la condición del punto de interrupción se cumple; sin embargo, la depuración no se detiene. 21. Seleccione la opción Debug - Enable All Breakpoints. Inicie la depuración y proporcione como valor base el 0. Vea cómo el punto de interrupción ha vuelto a su comportamiento normal.
>- Eliminación de los puntos de interrupción (breakpoints) 22. Para eliminar un punto de interrupción, basta hacer clic en el punto rojo que se agregó en el lado izquierdo de Text Editor. 23. Si deseamos eliminar todos los puntos de interrupción agregados, hay que ir al menú Debug - Delete All Breakpoints (Crtl-Mayús-F9). Aparecerá una ventana de confir
www.FreeLibros.me
162
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
mación que debe responder afirmativamente en caso de que desee eliminar los puntos de interrupción. 24. Elimine todos los puntos de interrupción que tiene su programa. 25. Guarde todos los cambios en la solución. FIN DEL EJER C IC IO *
J E í j Ejercicio 5.3 \
Utilización de Command Window
En este ejercicio se comprobará el uso de Command Window para la ejecución de coman dos de Visual Studio en forma textual. 1. Usando Visual Studio, abra la solución E jercicio s. 2. En el Solution Explorer encuentre el nodo correspondiente a Alcance - M odulel.vb. Haga doble clic en dicho nodo para editar el código. 3. Establezca el proyecto como proyecto de inicio (StaríUp Project).
> Escritura de com andos de Visual Studio usando Command W ind ow 4. Casi todas las actividades que es posible realizar en Visual Studio a través de opciones de menú o la barra de herramientas tienen un equivalente textual que es posible aplicar des de la línea de comandos de Visual Studio (Command Window). Los usuarios de FoxPro estarán habituados a dicha ventana, dado que muchas operaciones pueden ser especifi cadas más rápidamente de forma textual, sobre todo cuando se es rápido escribiendo y cam biar del teclado al ratón implica más esfuerzo. 5. Para mostrar Command Window se puede utilizar la opción View - Other Widows Command Window (teclas Ctrl-Alt-A). En tiempo de depuración, Command Window aparece automáticamente. Command Window ! I n
-
l-------------------Error List 7 "! Command Window [U Output
www.FreeLibros.me
?
X
Capítulo 5. Espacios de nom bres y desarrollo de librerías
163 i
6. Esta ventana es la línea de comandos de Visual Studio. Al escribir un comando y pre sionar Intro, éste se ingresa a Visual Studio y se ejecuta. Los comandos son muy pare cidos a las opciones que tendríamos que seleccionar en el menú; por ejemplo, la opción File - Cióse tiene su comando equivalente, que es File.Cióse. Para simplificar aún más, algunos comandos poseen alias de comando (command alias), que permiten redu cir la escritura de comandos. Por ejemplo, Cióse es el alias de File.Cióse. En otras pa labras, escribir Cióse en Command Window es lo mismo que seleccionar en el menú File - Cióse. El proceso se simplifica aún más dado que Command Window tiene Intellisense, y además nos permite definir nuestros propios comandos. Si es rápido con los dedos, presionar Ctrl-Alt-A, Cióse es equivalente a seleccionar la opción File - Cióse. La más importante contribución de Command Window es permitir la ejecución de co mandos que no aparecen en ninguna opción de menú en Visual Studio. 7. Éstos son algunos de los comandos más usuales que cuentan con un alias predetermina do en Visual Studio.
Command Name Add New Project Alias Autos window Breakpoints window Call Stack window Clear All Clear Bookmarks Close Close All Documents Command mode Command Window Mark Mode Cut Line Delete Line Disassembly window Evaluate Statement Exit FIHelp Format Selection Full Screen Go To Go to Brace Immediate Mode Insert File as Text List Call Stack List Disassembly List Members List Memory Float format List Threads Locals window
Alias AddProj Alias Autos bl Callstack els ClearBook Close CloseAll cmd mark LineCut LineDel disasm eval Exit Help format FullScreen GotoLn GotoBrace immed InsertFile kb u ListMembers df ~ Locals
Complete Name File.AddNewProj ect Tools.Alias Debug.Autos Debug.Breakpoints Debug.CallStack Edit.ClearAll Edit.ClearBookmarks File.Close Window.CloseAllDocuments View.CommandWindow Tools.CommandWindowMarkMode Edit.LineCut Edit.LineDelete Debug.Disassembly Debug.EvaluateStatement File.Exit Help.FIHelp Edit.FormatSelection View.FullScreen Edit.GoTo Edit.GotoBrace Tools.ImmediateMode Edit.InsertFileAsText Debug.ListCallStack Debug.ListDisassembly Edit.ListMembers Debug.ListMemory/Format:Float Debug.ListThreads Debug.Locals
www.FreeLibros.me
164
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Make Lower Case Make Uppercase Memory window Memory Window 2 Memory Window 3 Memory Window 4 New File New Project Next Bookmark Open File Open Project Parameter Information Previous Bookmark Print Print File Properties Window Quick Watch Redo Registers window Run to Cursor Save All Save As Save Selected Items Script Only View Shell ShowWebBrowser Start Step Into Step Out Step Over Stop Stop Find In Files Swap Anchor Tabify Selection Tasklist window Threads window Tile Horizontally Tile Vertically Toggle Bookmark Toggle Breakpoint Toggle Word Wrap Toolbox window Undo Untabify Selection View Code View Designer Watch window
Lease Ucase Memory Memoryl Memory2 Memory3 Memory4 nf np NewProj NextBook of Open op Paramlnfo PrevBook ? print props ?? redo registers rtc SaveAll SaveAs save ScriptOnly shell nav navigate 9 t pr P
q
StopFind SwapAnchor tabify TaskList Threads TileH TileV ToggleBook bp wordwrap toolbox undo Untabify code designer Watch
www.FreeLibros.me
Edit.MakeLowercase Edit.MakeUppercase Debug.Memoryl Debug.Memory2 Debug.Memory3 Debug.Memory4 File.NewFile File.NewProject Edit.NextBookmark File.OpenFile File.OpenProject Edit.Parameterinfo Edit.PreviousBookmark Debug.Print File.Print View.PropertiesWindow Debug.Quickwatch Edit.Redo Debug.Registers Debug.RunToCursor File.SaveAll File.SaveSelectedltemsAs File.SaveSelectedIterns View.ShowScriptOnly Tools.Shell View.ShowWebBrowser Debug.Start Debug.Steplnto Debug.StepOut Debug.StepOver Debug.StopDebugging Edit.FindlnFiles /stop Edit.SwapAnchor Edit.TabifySelection View.TaskList Debug.Threads Window.TileHorizontally Window.TileVertically Edit.ToggleBookmark Debug.ToggleBreakPoint Edit.ToggleWordWrap View.Toolbox Edit.Undo Edit.UntabifySelection View.ViewCode View.ViewDesigner Debug.WatchN
Capítulo 5. Espacios de nom bres y desarrollo de librerías
8. La mayoría de los comandos puede inferirse fácilmente. Sólo piense cómo están loca lizabas en los menús. Por ejemplo, para iniciar la depuración de una solución la op ción de menú es Debug - Start Debugging; el comando es D e b u g . S t a r t , lo cual es bastante obvio. Aproveche Intellisense en Command Window para descubrir los co mandos que le interesan. 9. En Command Window escriba los siguientes comandos: > G o to Ln 7 > D e b u g .T o g g le B r e a k p o in t > D e b u g .S ta rt > D e b u g .S te p O v e r > D e b u g .S te p O v e r > D e b u g .S te p O v e r > D e b u g. S t o p D e b u g g in g > D e b u g.D e l e t e A l l B r e a k p o in t s
10. Lo que hicimos fue ir a la línea 7 del código, establecer un punto de interrupción, ini ciar la depuración, ejecutar tres líneas, línea por línea, y detener la depuración. En el ca so de comandos que se repiten, podemos ahorramos la escritura consultando la historia de comandos de Command Window (oprimiendo la tecla de dirección hacia arriba). FIN DEL EJERCICIO*
Ejercicio 5.4 Uso de herramientas avanzadas para la depuración Se agregarán puntos de interrupción a una aplicación y se revisarán las opciones de ejecu ción línea a línea, usando Visual Studio. 1. Usando Visual Studio, abra la solución
E je r c ic io s .
2. En el Solution Explorer encuentre el nodo correspondiente a Alcance - M oduleLvb. Haga doble clic en dicho nodo para editar el código. Establezca el proyecto como pro yecto de inicio (StartUp Project).
> Apilado de herramientas en Visual Studio 3. Seleccione la línea M odu le
M o d u le l
y establezca un punto de interrupción.
4. Inicie la depuración de la solución (tecla F5). 5. En tiempo de depuración aparecen dos herramientas principales: Auto y Command Win dow. En realidad son muchas más herramientas, sólo que no están visibles por el momen to. Como podrá comprobar, en tiempo de depuración Command Window comparte su es pacio con otras herramientas: Cali Stack, Breakpoints. Immediate Window y Output.
www.FreeLibros.me
166
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
¿j^jCall Stack i"^ B rea kp o in ts T " lCommand Window
Immediate W indow |
O utput
6. Por otro lado, Autos comparte su espacio con otras herramientas: Locáis y Waích 1. g j] Autos
Locals ^¡|W a tch 1
7. Cuando hay varias herramientas apiladas en un mismo espacio en Visual Studio, cada una constituye una ficha de selección horizontal (Tabs). La forma de seleccionar algu na de las herramientas es haciendo clic sobre la ficha. En caso de que las herramientas estén en modo de ocultación automática, lo que usted verá serán las pestañas de selec ción vertical de las fichas; cumplen con la misma funcionalidad que las horizontales, sólo que se distribuirán en los extremos laterales de Visual Studio.
>- Ventanas de variables (variable windows) 8. Visual Studio proporciona una serie de herramientas que permiten ver los cambios que las variables experimentan en tiempo de depuración. A estas herramientas se les da el nombre de ventanas de variables (variable windows). Ordinariamente se trata de Locáis, Autos, Watch y Quick Watch. Cada una de las ventanas muestra tres colum nas: nombre de la variable (ñame), valor (valué) y tipo de dato (type). 9. La ventana Autos sirve para mostrar las variables utilizadas por la línea de código que actualmente se está ejecutando, así como las variables utilizadas por las líneas anterio res a la que se está ejecutando, dentro de un mismo alcance. Esta ventana cambia di námicamente y es alimentada por el Depurador de Visual Studio (debugger). 10. Oprima repetidamente la tecla F11 hasta llegar a Sub Main (). Vea los cambios que ex perimenta la ventana Autos. -
A u to s
i Name
I
Value
o'. T e x to 1
Texto2
I S Autos
Type
I "A lca n ce m ódulo"
Nothing
Locals j g Watch 1
www.FreeLibros.me
~ String
I?
X
Capítulo 5. Espacios de nom bres y desarrollo de librerías
11. Vea cómo se muestran dos variables. Al llegar a Sub M a i n ( ) detecta que el procedi miento tiene una variable llamada Te xto2, que aún no toma valor. La variable T e x t o l , aunque no forma parte del procedimiento, se muestra porque está disponible dado que tiene alcance de módulo. En otras palabras, es una variable utilizada por las líneas an teriores a la actual. 12. Seleccione la pestaña Locals. Esta herramienta sólo mostrará las variables locales del alcance en que se encuentra la línea de código que actualmente se está ejecutando. Da da la línea en la que nos encontramos, sólo aparecerá la variable Te xto2.
*V
I L o c a ls
jj N a m e i M i
V a lu e
X
Type
1 N o t h in g
f;
vi S t r in g
^
I S j A u to s I p Loc-als ^ jJW -a tc h 1
13. Seleccione Watch 1. Esta herramienta permite agregar variables y expresiones que de seamos saber cuánto valen en todo momento. Esta herramienta no carga variables au tomáticamente, por lo que hay que especificarle qué queremos que muestre. 14. La ventana Quick Watch (oprima las teclas Ctrl-Alt-Q) funciona de forma parecida a Watch, con la diferencia de que puede mostrar sólo el contenido de una variable o ex presión en un momento dado. Por ejemplo, si queremos saber qué valor tiene la varia ble T e x t o 4 en este momento, presionamos las teclas Ctrl-Alt-Q, con lo que aparecerá Quick Watch. Coloque en Expression Texto4 y haga clic en Reevaluate. Con ello se mostrará el contenido de la variable. En nuestro caso, T e x to 4 no está dentro del alcan ce en donde nos encontramos, por lo cual se reporta como no declarada.
www.FreeLibros.me
168
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
' ;
\d Q}
-!•.i.
Oo» ]I
H e»
I
15. Si estando en Quick Waích hacemos clic en Add Waích, la variable que evaluamos se agregará a Waích.
> Ventanas de inspección de código 16. Seleccione Cali Stack, que se encuentra apilada junto con Command Window. En esta herramienta se muestran los programas, procedimientos y métodos que se están ejecutando en un momento dado. En caso de que un procedimiento llame a otro proce dimiento, aparecerán los dos. IC all S t a c k ! M am e 1A le an ce. e x e ! Ale a n ce. M o d u le l. Procedim i e n t o 2 ( ) U n e 3 7 i A le an c e ,e x e !Ale a n c e ,M o d u le 1,M a in() Line 1S +■0 x 5 byt e s
¡•4
~
flL X
Language I B asic B asic
! ■ i
[ E x t e rn a l C o d e ]
C all S t a c k ^ B r e a k p o i n t s j iT"| C o m m a n d W in d o w | ^ I m m e d i a t e W in d o w | [^ ] O u t p u t
17. En nuestro caso, muestra que actualmente nos encontramos en la línea 37, en el Procedimiento2 () que fue llamado en la línea 18 por el procedimiento Main (). Saber de dónde nace la ejecución de un procedimiento ayuda a resolver el origen de los pro blemas, en caso de que se presenten. Resulta interesante ver que Cali Stack revisa el origen de los procedimientos hasta llegar al ensamblado (Alcance.exe), dando infor mación del proyecto (Alcance), el programa (Modulel) y finalmente el procedimiento.
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
169 |
18. Seleccione Breakpoittís, que sirve para mostrar todos los puntos de interrupción y su estado. Con esta herramienta podemos saber la línea en que se encuentran, si están ac tivos o no, si les aplican condiciones y en qué casos detendrán la depuración. En nues tro caso aparece el único punto de interrupción que agregamos.
19. Seleccione lmmediate Window, que sirve para evaluar expresiones y variables de una forma programática y a petición. 20. Para desplegar valores podemos utilizar el comando Print, con su alias ? 21. Escriba en lmmediate Window la siguientes instrucciones: ? Textol Debug.StepInto ? Textol
22. Lo que hicimos fue mostrar el contenido de Text 1 . Luego provocamos que la depuración avanzara en modo Step Into, con lo cual la variable adquirió valor; se volvió a mostrar el contenido de la variable Textol y pudimos comprobar el nuevo valor de la variable. 23. Detenga la depuración, elimine todos los puntos de interrupción y guarde su solución. FIN DEL EJERCICIO*
www.FreeLibros.me
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
a p a m e n t a l d e l c a p ít u l o . CWariinaqpn
M
Pr obtenías, úa namanelatupa
170
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
T e r m in o l o g ía A lia s de im p o rta ció n , 151 A p lic a c ió n , 141 A u to s, 166
linea, 158 E sp a c io d e n o m bres, 141
B re a k p o in t, 158
Exte n sib ilid a d , 141
C o d e s t e p in g , 158
Fu lly q u a lifie d
E d it a n d c o n tin u e , 160
• > 5
Eje cucion lin e a p o r
nam e, 1 48 Im p orts, 148
Locals, 1 66
Q u ic k W atch, 166
N a m e sp a ce , 141
References, 152
N om bres
R e fe re n d a , 151
calificad os, 148
S t r o n g nam es, 152
fuertes, 152
V a ria b le w in d o w s ,
P u n to (s) de in te rru p ció n , 158
166 W a tch , 166
condicionales, 160
Pr eg u n ta s
5.1 ¿Cuáles son los espacios de nombres principales de BCL? 5.2 ¿Qué función tiene el estatuto Import? 5.3 ¿Qué beneficio deriva de programar librerías? 5.4 Mencione los espacios de nombres que cree usted que contengan la funcionalidad ne cesaria para dar soporte a sus aplicaciones profesionales.
5
www.FreeLibros.me
172
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Notas:
www.FreeLibros.me
Capítulo 5. Espacios de nom bres y desarrollo de librerías
Exam en
r á p id o d e l c a p ít u l o ____________________________________________________
P arte 1: M a r q u e c o n u n a c ru z el in ciso q u e re sp o n d a a la p re g u n ta .
1.
Sistema lógico de organización de clases de .NET Framework, de acuerdo a su funcionalidad: á) Global Assembly Cache b) Biblioteca de Clases Base
c) Espacios de nombres Z
Es la especificación textual de la jerarquía de espacios de nombres que permite ubicar una clase o type: á) Nombres calificados b) Espacios de nombres c) Object Hierarchy
3.
Es la instrucción a través de la cual se especifican los espacios de nombre que utilizará un programa: á) Imports b) Reference
c) Using 4.
Es la equivalencia de nombre que le damos a un espacio de nombres: á) Alias de importación b) Reference
c) Nombre calificado SL Es el fenómeno que se presenta cuando en un programa se refieren dos métodos, pertenecientes a es pacios de nombres diferentes, pero que tienen el mismo nombre: a) Colisión de nombre b) Contaminación de espacios de nombres
c) Concurrencia de nombres P arte 2: C o lo q u e en la lín e a la le tra «F» si el e n u n c ia d o es fa ls o y « V » si es ve rd a d e ro .
6. Los espacios de nombres reflejan la jerarquía lógica y física de las clases en .NET Framework.
______________
7.
Las librerías de .NET Framework son totalmente independientes del Registro de Windows.
______________
8. Las principales jerarquías de espacios de nombres en .NET Framework son System y Objects. 9. El explorador de objetos permite verificar los objetos que estamos utilizando y sus ca-
______________
racterísticas. 10. En .NET, cada programa puede disponer de su propia versión de una librería, como consecuencia de la información contenida en el metadatos.
www.FreeLibros.me
______________ ______________
www.FreeLibros.me
C a p ít u l o Manejo de operadores Objetivos: Aprender el manejo de los operadores aritméticos, de asignación, de comparación y lógicos, con todas sus variantes.
1. Reconocerá los operadores aritméticos y la forma en que se emplean. 2. Sabrá qué son los operadores de asignación y de asignación incluyente, y cómo se manejan. 3. Se familiarizará con los operadores comparativos y cómo se manejan. 4. Aprenderá a manejar los operadores Is y Like, para llevar a cabo compa raciones complejas de datos String. 5. Entenderá qué son los operadores lógicos y los operadores lógicos de circuito corto, y cómo se manejan. 6. Comprenderá cuál es la prioridad de ejecución de los operadores, y có mo se maneja ésta utilizando paréntesis.
www.FreeLibros.me
176
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido Operadores aritméticos .................................................................... Operadores de asignación ................................................................ Exp re sión ................................................................................ Operadores de asignación in clu ye n te .......................................... Operadores com parativos.................................................................. Consideraciones relativas al código A S C I I ..................................... Option C o m p a r e ...................................................................... Operadores Is, IsNot y T y p e O f..................................................... Operador L i k e ......................................................................... Operadores ló g ic o s ........................................................................... Operadores lógicos de circuito corto .......................................... Tabla de com portamiento de operadores ló g ic o s........................... Prioridad entre operadores ............................................................... Uso de paréntesis para otorgar preferencia de ejecución ...............
Utilización general de operadores de Visual B a sic ...............
> > >
Comentarios en bloques de código ......................... Uso de Clipboard Ring .......................................... Selección basada en bloques de código (Block S e le c tio n )...................................................
Uso de operadores de asignación incluyente y operadores de circuito corto........................................................ M a p a mental del capítulo ................................................................ Term inología................................................................................... P re g u n ta s ....................................................................................... Examen rápido del c a p ít u lo ...............................................................
www.FreeLibros.me
177 178 178 179 180 181 182 183 183 185 187 188 189 190
191 192 193 195
196 200 201 201 203
Capítulo 6. M a n e jo de operadores
Sabemos que el procesador constituye el corazón de un sistema de computación: ahí es donde esencialmente se lleva a cabo el procesamiento de la información en forma de ope raciones aritméticas y lógicas. Los operadores son los elementos de que se vale un lenguaje de programación para la transformación de expresiones mediante cálculos o comparaciones; son elementales en el sentido de que nada se calcula y nada se decide sin su presencia. Ya sabemos qué tipos de datos admite .NET y cómo se definen; el presente capítulo expli ca que no sólo es importante declarar y almacenar datos, sino manipularlos de tal forma que a partir de ellos se genere información nueva. Ésta es la esencia del cómputo.
Operadores aritméticos ¿Quién no conoce los operadores aritméticos? Debido a que forman parte de la educación básica difícilmente podríamos agregar algo que no se sepa con respecto a ellos. Quizá lo “nuevo” sea la forma en que Visual Basic utiliza los operadores aritméticos. No obstante lo obvio del tema, para no ser omisos definiremos a los operadores aritméti cos como los símbolos que producen, a partir de dos expresiones numéricas conocidas, una nueva expresión numérica, como resultado de la aplicación de un cálculo aritmético entre aquéllas. El lenguaje dispone de los siguientes operadores aritméticos básicos: +
Suma (concatenación)
Suma expresiones numéricas. Concatena expresiones de tipo S t r i n g .
-
Resta
Representa la diferencia entre dos números o especifica la condición negativa de uno.
*
Multiplicación
Multiplica dos números.
/
División
Divide un número entre otro.
\
División entera
Divide un número entre otro, dando un resultado necesariamente entero.
M ó d u lo
Divide un número entre otro, dando como resultado el residuo.
Exponenciación
Sirve para elevar un número a una determinada potencia; un número puede ser negativo si el
Mod A
exponente es un entero.
www.FreeLibros.me
178
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
La forma en que se resuelven este tipo de operadores es la siguiente: Resultado = Expresiónl Operador Expresión2 Donde Expresiónl, Expresión2 y Resultado son siempre datos numéricos; Operador es el operador aritmético utilizado. 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 es Integer, y la división de un Integer 3, entre 2, no dará un número Integer. NOTA En el caso de los datos de tipo S t r i n g , es posible utilizar el operador de suma, que se encar ga de concatenar o unir las expresiones. Para evitar la am bigüedad del operador "+ ", Visual Basic acepta el uso del sím bolo para concatenación de expresiones String. En realidad, la concatenación no se considera una ope ración aritmética.
Operadores de asignación Los operadores de asignación son los que permiten asignar un valor a una variable o pro piedad. El ejemplo clásico de este tipo de operadores es el signo de “igual” (=). 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.
Expresión Aunque puede resultar obvio, una expresión es un valor, existente o derivado: es expresión existente si corresponde a una literal válida para un determinado tipo de dato, o una varia ble que la contenga; es expresión derivada, cuando es el resultado de someter varios valo res existentes, sean éstos variables o literales, a la acción de operadores. Vea los siguientes ejemplos de expresiones: 4 “A” 4+5 3= 2 “A” & “B”
Existente. Valor numérico 4 Existente. Valor String A Derivado. Valor numérico 9 Derivado. Valor lógico False, pues 3 y 2 no son iguales Derivado. Valor de concatenación String AB
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
Considere los siguientes ejemplos, después de definir la siguiente variable: Dim Edad A s I n t e g e r = 20
Expresiones que podemos utilizar: La variable misma
Edad
La transformación de la variable
str(E d a d ) "E d a d :" & S tr(E d a d )
La transformación de la variable y otras literales
Operadores de asignación incluyente Son operadores de asignación incluyente aquellos que consideran el valor que posee la va riable o propiedad a la que se le asigna el valor como primera expresión de una operación, asignando el resultado de la operación a la variable misma. Los operadores de asignación incluyente existen para los siguientes operadores: A, *, /, \, +, - , &, y la forma de representarlos es el operador seguido inmediatamente por un signo de igual. Veamos las siguientes asignaciones equivalentes: x = x +1
Es lo mismo que
x += 1
x = X -1
Es lo mismo que
x -= 1
> X
x =
N>
x = X * 4
Es lo mismo que
x *= 4
Es lo mismo que
x A= 2
Vea los siguientes ejemplos: Hace que V a r i Si V a r i vale
Y V a r2 vale
La operación
10
3
va ri
A= v a r 2
1000
10
3
va ri
*= va r2
30
12
3
va ri
/= v a r 2
4
10
3
va ri
\= v a r 2
3
10
3
va ri
+= v a r 2
13
"A B C *
"D E F "
va ri
&= v a r 2
"A B C D E F "
10
3
va ri
-= v a r 2
7
www.FreeLibros.me
valga
180
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Operadores comparativos Los operadores comparativos permiten comparar expresiones, una en relación con otra, para dar como resultado un valor de falso (False), verdadero (True) o nulo (Nuil), depen diendo de si la comparación es una verdad o no. Hasta el momento no hemos tratado los valores nulos; los valores nulos son la ausencia de valor alguno, y su utilidad es para aplicaciones específicas en donde la afectación de un valor es importante. La siguiente tabla presenta los operadores comparativos que Visual Basic maneja: Operador < (M enor que) <= (Menor o igual que) > (Mayor que) >= (Mayor o igual que)
(Igual a) o (Distinto de)
Verdadero si
Falso si
Nulo si
expresiónl < expres¡ón2
expresiónl >= expresión2
expresiónl o expresión2 = N u il
expresiónl <= expresión2
expresión 1 > expresión2
expresiónl o expresión2 = N u il
expresiónl > expresión2
expresión 1 <= expresión2
expresiónl o expresión2 = N u il
expresiónl >= expresión2
expresión 1 < expresión2
expresiónl o expresión2 = N u il
expresiónl = expresión2
expresión 1 o expresión2
expresiónl o expresión2 = N u il
expresiónl o expresión2
expresión 1 = expresión2
expresiónl o expresión2 = N u il
La forma en que se resuelven este tipo de operadores es la siguiente: Resultado = Expresión 1 Operador Expresión2 Expresión 1 y Expresión2 pueden ser cualquier tipo de expresiones comparables entre sí. Resultado será siempre lógico (Trué, False), o nulo (Nuil). Operadoras el operador uti lizado para la comparación.
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
Algunos ejemplos del uso de estos operadores son: "A " = " B "
Retoma
F a ls e
1 > 0 .5
Retoma
T ru e
2
Retoma
T ru e
Retoma
T ru e
>=
2
"S" < "s"
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; por tanto, son menores. Adicional mente, la “A” es menor que la “Z”.
Consideraciones relativas al código ASCII El juego de caracteres de siete bits denominado ASCII (American Standard Code In formation Interchange / Código Estándar Estadounidense para el Intercambio de Información) es ampliamente utilizado para representar letras y símbolos de un te clado estándar de Estados Unidos. El juego de caracteres ASCII es igual que los pri meros 128 caracteres (0-127) del juego de caracteres ANSI, utilizado por las máqui nas antiguas. Es importante que conozca algunas referencias del código ASCII que pueden serle de utilidad: Código ASCII
Representa
8
B a ck Sp a ce
13
E nter
32
S p a c e B a r (BARRA ESP A C IA D 0R A )
(RETROCESO)
( IN T R 0 )
64 92
n^n
Código ASCII
Representa
48 a l 57
"0 " a l
65 a l 90
"A "
a la
"Z "
"a "
a la
"z "
97 a l 122
"9 "
225,
233,
2 37,
n¿d n , ii A tJ H, II±4 II ,
243,
250,
241
"ó ",
"ú ",
"ñ "
Algunas personas, sobre todo aquellas que no tienen su teclado configurado ade cuadamente, saben que presionando la tecla ALT y las correspondientes del teclado numérico a un código ASCII, éste aparecerá. Para ello es necesario que el teclado nu
www.FreeLibros.me
182
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
mérico esté activado (teniendo el BLOQ NUM / NUM LO C K activado). Por ejemplo: Alt + 64
equivale a teclear
Visual Basic, por otro lado, tiene funciones que permiten obtener la representación simbólica de un código ASCII, así como el código ASCII a partir de una represen tación simbólica. Las funciones que lo permiten son Chr( ) y Asc( ), respectiva mente. Estas funciones emplean la siguiente sintaxis: Chr(CódigoASCII ) Asc("Caracter")
Por ejemplo: Chr(64) Asc("@")
->
64
Option Compare Uno de los conceptos importantes relacionado con la comparación de datos (específi camente de los de tipo String), es su sensibilidad al uso de mayúsculas y minúsculas. Se dice que un esquema de comparación es case-sensitive cuando una comparación es sensible a la diferencia entre mayúsculas y minúsculas (“A” * “a”). Se dice que un esquema de comparación es non case-sensitive, cuando una comparación no lo es (“A” = “a”). En el caso de Visual Basic, podemos especificar de qué manera queremos que nues tros programas se comporten respecto de las comparaciones. Para ello, utilizamos el estatuto Option Compare. Su sintaxis es la siguiente: Option Compare [Text / Binary]
Si se especifica Option Compare Text, las comparaciones se realizarán bajo el es quema insensible al uso de mayúsculas y minúsculas; si se especifica Option Com pare Binary, las comparaciones se realizarán bajo el esquema sensible. 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á sen sible (Binary).
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
183 |
Operadores Is, IsNot y TypeOf Además de los operadores comparativos comunes, Visual Basic proporciona dos operado res comparativos especiales: Is y Like. El operador Is es un operador que determina si una variable hace referencia a la misma po sición de memoria que otra. La forma en que se resuelve este operador es la siguiente: Resultado = Expresión 1 Is Expresión.2 Expresiónl y Expresión2 deben ser variables reference type. Resultado siempre es lógico (True, False). Is devolverá verdadero (True) si las variables comparadas refieren a la misma posición de memoria, y falso (False) si refieren a posiciones distintas de memoria.
En ocasiones, lo que se desea saber es si un objeto no refiere la misma posición que otro. Anteriormente, la tarea se debía realizar combinando los operadores Not e Is, de la siguien te forma: If Not Objetol Is 0bjeto2 Then WriteLine("Diferentes")
Dado que esta expresión es poco natural en su lectura, Visual Basic incluye el operador IsNot, que devuelve True en caso de que dos objetos no refieran a la misma posición de memoria. La línea de código quedaría como sigue: If Objetol IsNot 0bjeto2 Then WriteLine("Diferentes")
En ocasiones la comparación no se realiza entre un objeto y otro, sino entre un objeto y un type. Visual Basic incluye un operador denominado TypeOf... Is, que devuelve verdade ro en caso de que un objeto sea de un tipo determinado. Por ejemplo, si deseamos saber si la variable X es de tipo Integer, tendríamos que especificar lo siguiente: If (TypeOf X Is Integer) Then WriteLine("X es Integer")
Operador Like El operador Like compara dos expresiones String, no en términos de igualdad, sino en tér minos de cumplimiento de un patrón determinado. Este operador es especialmente útil cuando se verifica si una cadena de caracteres com puesta obedece a un formato predefinido. Imagine un código de producto que siempre sea de tres letras, un guión y cuatro números; en tal caso se tienen dos opciones: utilizar Like
www.FreeLibros.me
184
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
o desarrollar una rutina que analice carácter por carácter la expresión y sus posiciones. Sobra decir que utilizar L i k e es mucho más efectivo. La forma en que se resuelve este operador es la siguiente: Resultado = Expresiónl
L ik e
Expresión2
Expresión1 debe ser una expresión de tipo S t r i n g ; Expresión2 es un patrón S t r i n g que se pre tende reconocer como existente en Expresiónl. Resultado siempre es lógico (T ru e , F a ls e ). L i k e retomará verdadero (T ru e ) si el patrón a buscar es reconocido dentro del dato base de la comparación, y falso ( F a ls e ) en caso de que no se reconozca.
S t r in g
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.
Carácter de patrón
Significado
?
Cualquier carácter
*
Varios caracteres o ninguno
#
Cualquier dígito (0-9)
[ lis t a ]
Cualquier carácter de la lista
[ llis t a ]
Cualquier carácter que no esté en la lista
Considere los siguientes ejemplos: Devuelve
T ru e
Devuelve
T ru e
"A B *"
Devuelve
True
"M P3" L i k e
" [A -Z ][A -Z ]# "
Devuelve
T ru e
"MPG" L i k e
" (A -Z ][A -Z ]# "
Devuelve
F a ls e
"M P3" L i k e
" [A -Z ][A -Z ]?"
Devuelve
True
"MPG" L i k e
" [A -Z ][A -Z ]?"
Devuelve
T ru e
"A * A "
Devuelve
Tru e
"F "
L ik e
"F "
"2 4 / 1 0 / 2 0 0 2 " "A B C "
L ik e
"A M E R IC A "
L ik e
L ik e
"# # / # # / # # # # "
"H P 2 9 9 2 "
L ik e
"[!H]*"
Devuelve
F a ls e
"D P 2 9 9 2 "
L ik e
"[!H]*"
Devuelve
T ru e
Devuelve
T ru e
" m ic o rre o @ m a il.c o m " L ik e
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
Recomendamos utilizar los patrones para determinar la validez de formatos mixtos de da tos; 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 lsNumeric() o l s D a t e ( ).
Operadores lógicos Los operadores lógicos son aquellos que sirven para unir o negar condiciones, producien do un valor lógico. Los operadores lógicos básicos son: □ Not Niega el resultado de una condición. Revierte el valor; si la condición que afecta es T ru e
producirá
F a ls e ,
y viceversa.
□ A nd Cuando de entre dos condiciones las dos deben ser T ru e para que en su conjunto
la expresión sea True. (Con todas las condiciones
Tru e ,
devolverá True).
□ Or Cuando de entre dos condiciones, al menos una debe ser T ru e para que en su con
junto la expresión sea
True.
(Con al menos una condición
Tru e ,
devolverá T r u e . )
□ X o r Cuando entre dos condiciones, al menos una cumple por Tru e , pero no las dos.
La forma en que se resuelven este tipo de operadores es la siguiente: Resultado = [Expresiónl]
O p e ra d o r
Expresión2
Expresiónl y Expresión.2 son expresiones de tipo lógico. En el caso de Not, Expresiónl no se debe poner, ya que el operador actúa sobre una sola expresión. Resultado será siempre lógico (T rue , F a ls e ). Cuando una expresión lógica se compone de una sola comparación, se dice que es una ex presión lógica simple debido a que se resolverá en sólo 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 re suelve 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ógica.
www.FreeLibros.me
186
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Ejemplos:
Not True
E s False, p orq u e e s l o
c o n t r a r io
a True.
Not False
E s True, porque e s l o
c o n t r a r io
a False.
Not UA " = " B "
E s True, p orq u e " A " = MB " e s False, p e ro negado e s True.
" A " = " B " And 1 > 0.5
E s False, p orq u e no t o d a s l a s
" A " = " B " Or 1 > 0.5
E s True, porque a l menos una c o n d ic ió n
c o n d ic io n e s so n True. e s True.
En caso de tenerse más de dos condiciones conjuntas, entra en operación lo que se conoce como preferencia, que consiste en determinar el orden en que las condiciones u operacio nes se han de resolver. Por ejemplo: “A "
= " B " 0R 1 > 0 . 5 AND 2 >= 2 AND " S "
> "s"
es F a ls e . Las condiciones se resuelven de izquierda a derecha. Vea la explicación en la fi gura 6.1:
i True
AND
Fai se
.A ...
Fai se
□ Primero se resuelven las condiciones de comparación. □ Una vez resueltas las condiciones de comparación, se sigue el orden de izquierda a de recha: se resuelve la primera condición de tipo lógico; el resultado de ésta forma parte de la siguiente condición, y así hasta terminar. □ La expresión inicia siendo una expresión lógica compuesta, formada por cuatro expre siones lógicas simples, que con la ayuda de tres operadores lógicos se ven obligadas a resolverse como una sola expresión lógica que termina con un valor F a ls e .
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
Las condiciones se resuelven como si tuvieran paréntesis imaginarios: ( ( ("A" = "B" Or 1 > 0.5) And 2 >= 2) And "S" > "s")
En donde las condiciones encerradas en los paréntesis de mayor profundidad se resuelven primero. Si usted agrega de manera explícita paréntesis en las condiciones, les asignará preferencia. Por ejemplo, cambiemos un poco el orden del ejemplo anterior y veamos qué sucede: "S" > "8" Or 2 >= 2 And 1 > 0.5 And "A" = "B"
De acuerdo a lo que vimos, se resolvería la primera condición con la segunda (False Or Trué, se resuelve como Trué), el resultado se resolvería con la tercera (True And Trué, de
vuelve True), y el resultado se resolvería con la cuarta (True And False, devuelve False). El resultado de lo último que se resolvió fue False. ¿Cómo cambiaríamos la condición, mediante el uso de paréntesis, para que el resultado fuera verdadero? A continuación una solución: ("S" < "s" OR ( 2 >= 2 AND 1 > 0.5 And "A" = " B " ) )
De esta forma forzamos que en primera instancia se resuelva el paréntesis de mayor pro fundidad, que contiene la segunda, tercera y cuarta expresiones (True And True And Fal se, devuelve False), el resultado se resuelve con la primera condición, por ser el parénte sis de mayor profundidad que sigue (True Or False, devuelve True). Una regla es que siempre debe cerrar los paréntesis que abra. Una inadecuada colocación de condiciones puede arrojar resultados erróneos; le recomendamos que aunque de forma predefinida existe una preferencia, usted determine claramente cuál desea, utilizando pa réntesis cuando tenga más de una condición por resolver.
Operadores lógicos de circuito corto En programación es común que para que algo suceda, debe cumplirse más de una condi ción. Uno de los problemas que tenía la anterior versión de Visual Basic, es que no era lo suficientemente inteligente para saber que ya no tenía caso resolver ciertas condiciones, en el caso de And y Or. Sabemos que en el caso de And, si una expresión lógica es False todo es False; si en una comparación nos encontramos que la primera expresión lógica es False, ¿qué caso tiene resolver la segunda expresión?
www.FreeLibros.me
188
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Se denominan operadores lógicos de circuito corto (short- circuiting), aquellos que son ca paces de determinar la necesidad de continuar evaluando condiciones posteriores a las pri meras. Son dos: □ A n d A lso Procesa comparaciones lógicas de circuito corto, de tipo And; produce F a l s e a la primera expresión F a l s e que se encuentra, y concluye con la resolución de expresiones. □ OrElse Procesa comparaciones lógicas de circuito corto, de tipo 0 r; produce T ru e a la primera expresión T rue que se encuentra, y concluye con la resolución de expresiones.
Tabla de comportamiento de operadores lógicos La siguiente tabla muestra el comportamiento de los operadores lógicos:
Operador
Si Expresiónl es
Y Exprèsiôn2 es
Resultado
And
T ru e
T ru e
T ru e
And
T ru e
F a ls e
F a ls e
And
F a ls e
T ru e
F a ls e
And
F a ls e
F a ls e
F a ls e
Or
T ru e
T ru e
T ru e
Or
T ru e
F a ls e
T ru e
Or
F a ls e
T ru e
T ru e F a ls e
Or
F a ls e
F a ls e
Xor
T ru e
T ru e
F a ls e
Xor
T ru e
F a ls e
T ru e
Xor
F a ls e
T ru e
T ru e
Xor
F a ls e
F a ls e
F a ls e
A n d A ls o
T ru e
T ru e
T ru e
A n d A ls o
T ru e
F a ls e
F a ls e
A n d A ls o
F a ls e
Ni siquiera se evalúa
F a ls e
A n d A ls o
F a ls e
Ni siquiera se evalúa
F a ls e
O r E ls e
T ru e
Ni siquiera se evalúa
T ru e
O r E ls e
T ru e
Ni siquiera se evalúa
T ru e
O r E ls e
F a ls e
T ru e
T ru e
O r E ls e
F a ls e
F a ls e
F a ls e
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
189 |
Prioridad entre operadores Cuando hay varias expresiones dentro de una expresión que las engloba, cada parte de ésta se evalúa y resuelve en un orden predeterminado donde ciertos operadores han de resolver se antes que otros; a esto se le conoce como prioridad de los operadores. Tener esto en mente es importante, pues algunos operadores requieren resolver expresiones derivadas an tes de ser resueltas. Por ejemplo: (2 +5 )
>
(3 + 1 )
No podemos resolver la expresión que implica el operador comparativo (>), si 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: 1. 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 izquier da a derecha en el orden en que aparecen. Los operadores se evalúan en el siguiente orden de prioridad: Aritméticos Exponenc¡ación ( * ) Negatividad de expresión
(-)
Multiplicación y división ( * ,
/)
División de enteros ( \ ) M ó d u lo aritmético (Mod) Adición y sustracción (+,
-)
www.FreeLibros.me
190
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Com paración Igualdad ( = ) Desigualdad (< > ) M e n o r que (< ) M ayor que (> ) M e n o r o igual que (< = ) M ayor o igual que (> = )
Lógicos "Ñot And
0r Xor
Cuando hay multiplicación y división en la misma expresión, cada operación se evalúa a medida que aparece, de izquierda a derecha. Del mismo modo, cuando se presentan adicio nes y sustracciones en una misma expresión, cada operación se evalúa tal como aparecen de izquierda a derecha.
Uso de paréntesis para otorgar preferencia de ejecución Es posible usar paréntesis para saltar el orden de preferencia y forzar que algunas partes de una expresión se evalúen antes que otras. Las operaciones entre paréntesis se realizarán an tes que aquellas que se encuentren fuera. Sin embargo, dentro de los paréntesis, la priori dad de los operadores se mantiene según las reglas. Cuando se emplean paréntesis para determinar un orden de resolución de expresiones, se está especificando la preferencia de ejecución explícita. Cuando se deja que el lenguaje proporcione el orden de izquierda a derecha, atendiendo a la prioridad de los operadores, se habla de la preferencia de ejecución automática. Los programadores profesionales acos tumbran el uso de la preferencia de ejecución explícita, ya que es más fácil de analizar al momento de depurar los programas y deja una idea clara de la forma en que se desea que las cosas se resuelvan. El operador de concatenación de cadenas (&) no es realmente un operador aritmético, pe ro en orden de prioridad se encuentra a continuación de todos los operadores aritméticos y antes que todos los operadores de comparación.
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
No olvide que por más larga que parezca una expresión, todos los operadores actúan sobre dos expresiones, y de dos en dos, hasta dejar una sola expresión final que podrá ser asig nada a una variable o propiedad, o utilizada por algún estatuto o función.
*
Ejercicio 6.1 Utilización general de operadores de Visual Basic
En este ejercicio se utilizará una aplicación de consola para comprobar la declaración y uso de variables en un proceso. 1. Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). 2. Agregue a su solución un proyecto
Windows - Consolé Application,
llamado
Operadores.
3. Edite el programa de tal forma que aparezca como sigue:
I C o d ific a ció n de Operadores - Modulel.vb 1 2
3 4 5 6
7 8
9 10 11
12
13 14 15 16 17 18 19 20 21 22
23 24 25
Module Modulel Sub Main() Dim Numerol As Integer = 5 Dim Numero2 As Single = 2 Dim Textol As String = "Visual " Dim Texto2 As String = "Basic.NET" Console.Writel_ine(Numerol ) Console.WriteLine(Numero2) Console.WriteLine(Numero1 + Numero2) Console.WriteLine(Numero1 - Numero2) Console.WriteLine(Numero1 * Numero2) Console.WriteLine(Numero1 / Numero2) Console.WriteLine(Numero1 \ Numero2) Console.WriteLine(Numero1 Mod Numero2) Console.WriteLine(Texto1 Is Texto2) Console.WriteLine(Texto1 IsNot Texto2) Console.WriteLine(Texto1 + Texto2) Console.WriteLine(Texto1.Trim() + Texto2.Trim()) Console.WriteLine(Texto1 .Trim() + " " + Texto2.Trim()) Console.WriteLine("Pulse INTRO para continuar") Console.ReadLine() End Sub End Module
www.FreeLibros.me
192
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Ejecución g u ia d a de Operadores - M odulel.vb
4. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que haya reali zado en la solución (teclas Ctrl-Mayús-S). Inicie la depuración para comprobar el com portamiento de su programa (tecla F5). 5. Los resultados son simples resoluciones de operadores que no requieren explicación. Lo único novedoso es el uso del método Trim del objeto String, que se encarga de elimi nar los espacios adicionales en el texto. Los resultados deben ser los siguientes: 5
2 7 3
10 2 .5
2 1
False True Visual Basic.NET VisualBasic.NET Visual Basic.NET Pulse INTR0 para continuar
> Comentarios en bloques de código 6. En ocasiones se requiere comentar una buena cantidad de líneas de código. La alterna tiva más laboriosa y demorada es colocar un apóstrofo al inicio de cada línea; la otra al ternativa es utilizar las herramientas de Visual Studio. 7. Seleccione de la línea 8 a la 20. 8. ^ Seleccione Edit - Advanced - Comment Selection, o presione la las teclas Ctrl-K, Ctrl-C. Esta secuencia de teclas se especifica presionando Ctrl-K, soltando, e inmedia tamente presionando Ctrl-C. Se debieron haber comentado todas las líneas que estaban seleccionadas:
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
Start Pa ge
193 |
Mod ule 1.yb*
(General)
[£21 j j (Declarations)
1|□ Modùle M od ul e l 2| Sub M a i n ( ) 3! 4 Dim Numerol As I n t e g e r = 5 5 Dim Numero2 As S i n g l e = 2 6 Dim T e x t o l As S t r i n g = " V i s u a l 7 Dim T e x t o 2 As S t r i n g = " B a s i c . N E T " 'Co nso l e . W r i t e L i n e ( M u m e r o l ) 81 'Co nso l e . W r i t e L i ne(Mumero2) 9! 10 i 'Co nso l e . W r i t e L i n e ( N u m e r o l + Numero2) 'C o n s o l e . W r i t e L i n e ( N u m e r o l - Numero2) 111 'C o n s o l e . W r i t e L i n e ( N u m e r o l * Numero2) 121 ' C o n s o l e . W r i t e L i n e ( M u m e r o l / Numero2) 13! 14! 'Co ns ol e . W r i t e L i n e ( N u m e r o l \ Numero2) 'Co nso l e . W r i t e L i n e ( N u m e r o l Mod Numero2) 15! 'C o n s o le .W rite L in e (T e x to l I s Te xto2) 16! 'C o n s o le .W rite L in e (T e x to l IsN o t Te xto 2 ) 17! 'Co nso l e. W r i t e L i ne ( T e x t o l ■+• T e x t o 2 ) 18! 19! 'Co ns ol e. W r i t e L i n e ( T e x t o l . T r i m ( ) -t- T e x t o 2 . T r i m ( ) ) 201 'Co nso l e. W r i t e L i ne ( T e x t o l . T r i m ( ) ■ + - " " + T e x t o 2 . T r i m ( ) ) Consol e . W r i t e L i n e ( " P u l se INTRO p a r a c o n t i n u a r " ) 21í Consol e.R ea dLi n e ( ) 22! End Sub 23! 24! 25! - End Module 26!
9. Marque nuevamente las líneas de la 8 a la 20, que se encuentran comentadas. o.
10. - Seleccione Edit - Advanced - Uncomment Selection, o presione la secuencia de teclas Ctrl-K, Ctrl-U. Los apóstrofos debieron desaparecer.
> Uso de Clipboard Ring 11. Una de las tareas más comunes realizadas dentro de un editor de textos es copiar y pegar código (copy and paste). Generalmente al seleccionar código se parte de una po sición determinada en una línea, se selecciona todo lo que resta de la línea hacia la de recha, se incluyen varias líneas y se llega a una posición determinada de una línea de fin. En términos generales, el copiado se hace con base en líneas de código, a lo que se conoce como line-based copy-paste.
8Í
9\
10! S”Ili \\ 12! 13! 14| 151
Consol e . W riteLi r 1 1 e Li ~ ~ C o rs o T e ^ Wr i t e L i Consol e . W riteLi
ne(Numerol) n e r Nu me r o 2 ) n e ( Nume r o l - t N u m e r o 2 ^ | n e ( N u m e r o l - N u m e ro 2 ) 1 ¡[¿{(Numerol * N u m e r o 2 j C o n s o l e . W r i t e L i n e ( N u m e r o l / Numero2 ) C o n s o l e . W r i t e L i n e ( N u m e r o l \ Numero2 ) C o n s o l e . W r i t e L i n e ( N u m e r o l Mod N u m e r o 2 )
www.FreeLibros.me
194
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
12. Se oprime la combinación de teclas Ctrl-C o Ctrl-X para copiar o mover el contenido seleccionado al portapapeles del equipo, que es la memoria temporal de trabajo en el ambiente Windows. Una vez que se tiene algo en el portapapeles, se puede pegar su contenido en un lugar determinado, oprimiendo Ctrl-V. Existe la creencia generaliza da de que sólo se mantiene en el portapapeles lo último que se copia. 13. Realice, utilizando Ctrl-X y Ctrl-V, los siguientes cambios: mueva la línea 9 justo an tes de la línea 8, y ponga la línea 17 inmediatamente antes de la 16. Ponga atención a cómo lo hace. 14. Seguramente seleccionó la línea 9 de manera completa, oprimió Ctrl-X, se colocó al inicio de la línea 8 y oprimió Ctrl -V. Después seleccionó la línea 17 de manera completa, oprimió Ctrl -X, se colocó al inicio de la línea 16 y oprimió Ctrl -V. ¿Es correcto? 15. El portapapeles realmente almacena hasta las últimas 20 cosas que haya copiado o co locado en él, y pueden ser extraídas utilizando Ctrl-Mayús-V. Al reunirse 20 conteni dos en portapapeles y tratar de agregar uno más, el contenido más antiguo se pierde y el nuevo contenido toma la primera posición de recuperación. El portapapeles tiene una organización de recuperación UFO (Last Iru First Out / Últimas entradas, primeras sa lidas), que da lugar a lo que se conoce como circuito del portapapeles o Clipboard Ring. 16. Hay que deshacer los cambios que realizó, es decir, regresar las líneas 8 y 17 origina les a su lugar. Para ello utilizaremos el circuito del portapapeles. 17. Seleccione completamente la que ahora es la línea 16. Oprima Ctrl-X. Con ello el portapapeles tiene almacenados los siguientes valores: 1: Consolé.WriteLine(Texto1 IsNot Texto2)
18. Seleccione completamente la que ahora es la línea 8. Oprima Ctrl-X. Con ello el portapapeles tiene almacenados los siguientes valores: 1: Consolé.WriteLine(Numero2) 2: Consolé.WriteLine(Texto1 IsNot Texto2)
19. Vaya a la que ahora es la línea 9 y oprima Ctrl-Mayús-V una vez. Visual Studio retoma rá lo que se tenga en la posición 1, que es lo último que colocamos en el portapapeles. 20. Vaya a la que ahora es la línea 17 y oprima Ctrl-Mayús-V dos veces. Visual Studio re tomará en la primera ocasión la posición uno, y en la segunda la posición dos. Vea có mo se sustituye automáticamente lo que está retomándose del portapapeles.
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
21. Imagine las posibilidades de almacenar en el portapapeles 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.
> Selección basada en bloques de código (Block Selection) 22. Analizando el código podemos damos cuenta de que Consolé 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 Consolé en todo nuestro código. El problema es qui tar Consolé de las líneas, dado que tendríamos que hacerlo línea por línea. 23. Utilizando la selección basada en líneas no podemos seleccionar únicamente el nom bre del objeto Consolé de todas ellas sin marcar el resto de la línea. 24. Visual Studio permite lo que se conoce como selección basada en bloques (Block Se lection), que implica seleccionar un área rectangular del área de edición. 25. Trace un rectángulo que encierre los nombres de objeto Consolé en el área de edición. Para hacerlo, arrastre el puntero del ratón desde la esquina superior izquierda de lo que quiere marcar hasta la esquina inferior derecha mientras oprime la tecla Alt. No olvi de incluir el punto de Consolé. /•' Start P a g e
M o d u le l.v b *
^ . M o d u le l
M ain
Modín e
M o d u le l
Sub Main O Dim Numerol As I n t e g e r Dim Numero2 As S i n g l e = 2 Dim Te x t o 1 As S t r i n g = 'V is u a l Dim T e x t o 2 As S t r i n g = ' B a s i c .N E T " W r i t e L i ne (Nu me rol) W r i t e L i ne(Numero2) W r i t e L i ne (Numerol -+■ Numero2) W r i t e L i n e ( N u m e r o l - Numero2) W r i t e L i n e ( N u m e r o l * Numero2) W r i t e L i n e ( N u m e r o l / Numero2) W r i t e L i n e ( N u m e r o l \ Numero2) W r i t e L i n e ( N u m e r o l Mod Numero2) W rite L in e (Te x to l Is Texto2) W r it e L i n e (T e x t o l IsNot Texto2) W rite L in e (Te x to l + Texto2) W riteLi n e ( T e x t o l .T r i m ( ) Te x to 2 .T rim ()) W r i t e L i n e ( T e x t o l . T r i m ( ) -+• " " + T e x t o 2 . T r i m ( ) ) W r i t e L i n e ( " P u l s e INTRO p a r a c o n t i n u a r " ) ReadLi n e ( ) End
[class Console]
End Module
www.FreeLibros.me
196
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
26. Oprima las teclas Ctrl-X para enviar el contenido al portapapeles, con lo cual se elimi nan las referencias del código. 27. Vaya al inicio del programa, y antes de cualquier otra línea agregue la siguiente: Imports System.Consolé
28. Construya la solución (teclas Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solución (Ctrl-Mayús-S). Inicie la depuración para comprobar el comportamiento de su programa (tecla F5). FIN DEL EJERCICIO *
Ejercicio 6.2 'T %
Uso de operadores de asignación incluyente y operadores de circuito corto
En este ejercicio se utilizará una aplicación de consola para comprobar los operadores de asignación incluyente, así como los operadores de circuito corto. El programa solicita tres números entre 1 y 10. A través de asignación incluyente se acumu larán los valores capturados, y mediante los operadores de circuito corto se hará más efi ciente un proceso, detectándose de entre los números capturados alguno que sea primo. Re cuerde que un número primo es aquel que se divide sólo entre 1 y entre sí mismo; en el rango de nuestro ejemplo, los únicos números primos son 1, 2, 3 y 7. En este ejercicio se utilizará una aplicación de consola para comprobar la declaración y uso de variables en un proceso. 1. Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). 2. Agregue a su solución un proyecto Windows - Consolé Application, llamado Primos. 3. Edite el programa de tal forma que aparezca como sigue:
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
“ __I C o d ific a ció n d e Primos - M odulel.vb 1 2
Option Explicit On Option Strict On
Q O
4 c O 6 "7 / 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Module Modulel Sub Main() Dim Dim Dim Dim
N1 As N2 As N3 As Total
Integer Integer Integer As Integer = 0
Console.WriteLine( " — Suma de 3 n ú m e r o s ---------------" ) Console.WriteLine(" — Sólo capture enteros del 1 al 10") Console.Write("Número 1 de 3:") N1 = CInt(Console.ReadLine()) Console.Write("Número 2 de 3:") N2 = CInt(Console.ReadLine()) Console.Write("Número 3 de 3:") N3 = CInt(Console.ReadLine()) Total Total Total
+= += +=
N1 N2 N3
If ((N1 = 1 OrElse N1 = 2 OrElse N1 = 3 OrElse N1 = 7) OrElse (N2 = 1 OrElse N2 = 2 OrElse N2 = 3 OrElse N2 = 7) OrElse (N3 = 1 OrElse N3 = 2 OrElse N3 = 3 OrElse N3 = 7)) Then Console.WriteLine("Al menos uno de los números es primo") Else Console.WriteLine("Ninguno de los números es primo") End If Console.WriteLine("Total:" & CType(Total, String)) Console.WriteLine("Pulse INTRO para continuar") Console.ReadLine() End Sub End Module
www.FreeLibros.me
198
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
E j e c u c i ó n g u i a d a d e P rim o s
-
M o d u le l . v b
4. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que haya reali zado en la solución (CTRL-MAYÚS-S). Inicie la depuración para comprobar el com portamiento de su programa (tecla F5). 5. El programa declara las variables de trabajo de la línea 5 a la 8. 6. Es importante que esté consciente de cómo estamos haciendo la conversión de datos, tanto al momento de recibir los valores de consola, como al mostrarlos, dado que nues tro programa es type safe. 1. Capture como datos de entrada los números 4, 6, 8. La línea 22 ejecuta una asignación incluyente basada en suma; Total += N1, es igual que haber escrito Total = Total + N1. En este caso, N1 vale cero porque no se le es pecificó valor al momento de ser declarada. Después de la línea 22, Total vale 0 + 4; es decir, 4; después de la línea 23, vale 4 + 6, es decir 10 , y después de la línea 24, va le 10 + 8, es decir 18 . Las líneas 26,27 y 28 realmente son una sola línea de código. Se estará evaluando si N 1 es alguno de los números primos posibles del 1 al 10. Si N1 es igual a 1, o igual a 2, o igual a 3, o si es igual a 7, la primera expresión es True. La misma comparación se rea liza con N2 y con N3. Internamente, con los números que se proporcionaron, las operaciones se resolverían de la siguiente manera: if
((False OrElse False OrElse False OrElse False) OrElse _ (False OrElse False OrElse False OrElse False) OrElse
_
(False OrElse False OrElse False OrElse False))
que sería lo mismo que: if (False)
Por tanto, el programa tendría una salida falsa, reportando que ninguno de los números tecleados es primo. Si todo ocurrió como se esperaba, la salida será la siguiente: — Suma de 3 números -------------— Sólo capture enteros del 1 al 10 Número 1 de 3:4
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
Número 2 de 3:6 Número 3 de 3:8 Ninguno de los números es primo Total:18 Pulse INTRO para continuar
8. Ahora ejecute el ensamblado, capturando los números 3, 6, 8. Si N 1 es igual a 1, o igual a 2, o igual a 3, o si es igual a 7, la primera expresión es T rué. La misma comparación se realiza con N2 y con N3. Internamente, con los números que se proporcionaron, las operaciones se resolverían de la siguiente manera: If
((False OrElse False OrElse True OrElse False) OrElse
(False OrElse False OrElse False OrElse False) OrElse (False OrElse False OrElse False OrElse False))
que sería lo mismo que: If (True)
Como puede observar, la forma en que se resuelve la condición es mucho mássimple debido a que los operadores de circuito corto. La primera condición seresuelve por True, debido a que con Or, ante la presencia de al menos un True, todo es True. Ya no se sigue evaluando más condiciones. Si todo ocurrió como se esperaba, la salida será la siguiente: — Suma de 3 números -------------— Sólo capture enteros del 1 al 10 Número 1 de 3:3 Número 2 de 3:6 Número 3 de 3:8 Al menos uno de los números es primo Total:17 Pulse INTRO para continuar
www.FreeLibros.me
200
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
M
a p a m e n t a l d e l c a p ít u l o
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
T e r m in o l o g ía And, 185 A nd Also, 188 Clipboard Ring, 193 Comment Selection, 192 Distinto de ( o ) , 180 División (/), 177 entera (\), 177 Exponenciación (A), 177 Expresión, 178 Igual a (=), 178, 180
Is, 183 IsNot, 183 Like, 183 M ayor o igual que (>=), 180 M ayor que (>), 180 M enor o igual que (<=), 180 M enor que (<), 180 Módulo, 177 Multiplicación (*), 177 Not, 185
Operadores, 177 aritméticos, 177 comparativos, 180 de asignación, 178 incluyente, 179 lógicos, 185 de circuito corto, 188 Option compare, 182
Or, 185 OrElse, 188 Resta (-), 177 Short-circuiting, 188 Suma (+), 177 TypeOf, 183 Xor, 185
P r e g u n t a s _________________________________________________________________________
6.1 ¿Cuáles son los operadores aritméticos, para qué sirven y cuál es su precedencia? 6.2 ¿Cuáles son los operadores de asignación, para qué sirven y cuál es su precedencia? 6.3 ¿Cuáles son los operadores comparativos, para qué sirven y cuál es su precedencia? 6.4 ¿Cuáles son los operadores lógicos, para qué sirven y cuál es su precedencia? 6.5 ¿Por qué son importantes las reglas de precedencia? 6.6 ¿Cuáles son las ventajas de los operadores de circuito corto con respecto a los opera dores lógicos? 6.7 ¿Cuáles son las ventajas de los operadores de asignación incluyente con respecto a los operadores aritméticos?
www.FreeLibros.me
202
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Notas:
www.FreeLibros.me
Capítulo 6. M a n e jo de operadores
Exam en
203 |
r á p id o d e l c a p ít u l o
P arte 1: M a r q u e c o n u n a c ru z el in c iso q u e re s p o n d a a la p re g u n ta .
1. Si lo que quiero es generar un nuevo valor numérico a partir de otros dos valores numéricos, debo utilizar un operador: á) De asignación b) Aritmético c) Lógico 2.
Si quiero comparar un valor en relación con otro valor, debo usar un operador: á) Comparativo b) Relacional c) Aritmético
3.
Son aquellas expresiones lógicas que involucran más de una comparación: á) Complejas b) Abiertas c) Compuestas
4.
Son lo adecuado cuando la variable a recibir un valor también es considerada como primer factor de cálculo: á) Operadores aritméticos implícitos b) Operadores de asignación incluyente c) Operadores comparativos
5.
Indican que un determinado tipo de expresiones han de resolverse antes que otras: a) Prioridad entre operadores b) Preferencia de ejecución explícita
c) Preferencia de ejecución automática P a rte 2: C o lo q u e en la lín e a la le tra «F» si el e n u n c ia d o es f a ls o y « V » si es ve rd a d e ro .
6.
Una multiplicación se resuelve antes que una suma.
_______________
7.
En una expresión lógica, al aplicar el operador Or, con una expresión que sea False, todo es False.
______________
8.
Si se especificó Option Compare Text, “A” es igual que “a”.
_______________
9.
Si x es igual a 1, x *=2 es igual a x +=2.
______________
10.
Si una clave se compone de un número y una letra, el patrón a utilizar en una comparación Like, para producir verdadero, sería “[0-9][A-Z]”.
www.FreeLibros.me
____________
www.FreeLibros.me
C a p ít u l o Estructuras de decisión y control Objetivos: Familiarizarse con las estructuras de decisión, para realizar procesos condicionales, y con las estructuras de control para el manejo de procesos iterativos.
1. Reconocerá las estructuras de decisión. 2. Revisará la utilización de If para codificar procesos condicionales. 3. Entenderá cómo manejar los procesos condicionales con ejecución en el sentido afirmativo y en el negativo. 4. Comprenderá cómo utilizar Select Case para ejecutar procesos mutua mente excluyentes, dependiendo de un valor. 5. Conocerá qué son las estructuras de control en Visual Basic. 6. Aprenderá a utilizar For Next para el control de procesos iterativos. 7. Aprenderá a utilizar While para el control de procesos iterativos. 8. Aprenderá a utilizar Do Loop para el control de procesos iterativos. 9. Aprenderá cómo anidar estructuras de decisión y control.
www.FreeLibros.me
206
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido E stru ctu ra s d e d e c i s i ó n .............................................................................. E sta tu to If T h e n Else (co n d icio n al) ....................................................
207 208
Select C a s e ........................................................................................ E stru ctura s d e c o n t r o l ................................................................................
210 211
For N e x t ............................................................................................ W h i l e ................................................................................................
211 212
D o L o o p ............................................................................................ E stru ctura s e n v o lv e n te s y a n id a d a s ...........................................................
214 215
R e gla s p a ra el a n id a d o d e e stru c tu ra s
..............................................
215
Uso de estructuras de decisión ...................................... Uso de For N e x t........................................................
217 218
> A d ic ió n d e ta re a s a T ask L i s t ........................................ > A d ic ió n d e c o m e n ta r io s d e ta re a a u n p r o g r a m a ..........
223 225
Identificación de errores en estructuras anidadas.................
226
M a p a m e n ta l del c a p ítu lo
.........................................................................
227
T e r m in o lo g ía .............................................................................................. P r e g u n t a s ..................................................................................................
228 228
E x a m e n r á p id o del c a p í t u l o .......................................................................
230
www.FreeLibros.me
Capítulo 7. Estructuras de decisión y control
La industria de la computación ha prosperado enormemente desde sus inicios. La razón es muy sencilla: las computadoras son útiles para las empresas y los individuos. Todos sabemos que las organizaciones llevan a cabo actividades, y deben hacerlo en un tiempo determinado, con una precisión determinada y utilizando una cantidad de recursos determinados. Calcular lo que cuesta desarrollar las actividades — como procesar una or den de compra o mantener actualizado un inventario— implica calcular los costos de ope ración de la organización. Para ser más precisos, podemos decir que una actividad está formada por procesos especí ficos, a los que llamamos transacciones, y que dichas transacciones tienen un costo que puede reducirse mejorando los procesos implicados. Una de las grandes ventajas de la computación es la automatización de procesos, que per mite desarrollar las actividades de las organizaciones de la manera más rápida y precisa posible, realizando de manera automática aquellas partes de la actividad que pueden ser programadas. La automatización reduce los costos de operación, pues las transacciones pueden desarrollarse de manera más barata. ¿Imagina lo que costaría a las aerolíneas man tener el control de las reservaciones si no dispusieran de sistemas computarizados? Automatizar una actividad es costoso, pero el ahorro que se tiene con la suma de los aho rros por cada transacción realizada nos lleva a recuperar la inversión aplicada al desarrollo de sistemas. Del dinero que la automatización ayuda a ahorrar a las organizaciones recibi mos el sueldo muchos desarrolladores; la programación seria no es un pasatiempo: es un trabajo que debemos mantener siempre rentable. Actualmente, los programas de cómputo realizan las tareas repetitivas que antes hacíamos manualmente, agregándoles rapidez y exactitud, y reduciendo los costos. Gracias a esto, las personas disponen de tiempo para realizar otras tareas no automatizadas, lo que permi te un mejor aprovechamiento de los recursos humanos. En materia de informática, las transacciones se ejecutan a través de secuencias de líneas de código. Como desarrolladores debemos ser capaces de instruir a la computadora para que realice las transacciones correctamente y decida correctamente el curso de las actividades a partir de los datos de entrada. Además, debemos estructurar el código para la realización de tareas repetitivas evitando duplicar código de manera innecesaria.
Estructuras de decisión Las estructuras de decisión son estructuras del lenguaje que permiten decidir qué líneas de código se han de ejecutar, dependiendo de una condición determinada.
www.FreeLibros.me
208
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Estatuto If Then Else (condicional) El estatuto condicional ( I f ) ejecutará instrucciones dependiendo del valor de una condi ción que deriva en una expresión lógica (dato de tipo Boolean). Como I f tiene muchas variantes, examinaremos varias de las sintaxis que emplea. He aquí la más sencilla:
If ExpresiónLógica Then Instrucción
Donde I f es el inicio de la estructura de decisión, ExpresiónLógica es la expresión de ti po Boolean que determina la ejecución de Instrucción, que en este caso puede constar de sólo una sola instrucción, por ejemplo:
If Precio < CreditoDisponible Then Cargo = "Aprobado"
Sólo en caso de que ExpresiónLógica derive en un valor de True, Instrucción será ejecu tada; es decir, esta sintaxis de if produce la ejecución sólo en el caso afirmativo de la con dición. Esta forma de if es muy útil para asignar valores a las variables en caso de que una con dició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á siempre delimitado. Si la ejecución de un bloque de código depende del cumplimiento 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 i f y el estatu to End If. If ExpresiónLógica Then
Instrucciones End If
Donde If es el inicio de la estructura de decisión, End If es el fin de la estructura de de cisión, y todas las Instrucciones que se encuentran entre el inicio y el fin constituyen el blo que de código que es controlado por la condicional. ExpresiónLógica es la expresión de ti po Boolean que determina la ejecución de Instrucciones, que en este caso puede constar de una sola instrucción o de muchas.
www.FreeLibros.me
Capítulo 7. Estructuras de decisión y control
209 |
Sólo en caso de que ExpresiónLógica derive en un valor de Trué, Instrucciones será ejecu tada; esta sintaxis de i f controla sólo la ejecución en el sentido afirmativo de la condición. Por ejemplo: If Precio < CreditoDisponible Then Cargo = "Aprobado" CreditoDisponible -= Precio End If
If es un estatuto de bloque, por lo que si inicia un bloque tendrá que concluirse apropia damente. Un error muy común es abrir estructuras de decisión pero no cerrarlas; para evi tarlo, es muy útil organizar el código dando a las líneas de inicio y fin de la estructura de decisión una alineación tabulada distinta a la del bloque de código controlado por dicha es tructura. Vea los ejemplos: If y End If nunca tienen el mismo margen izquierdo que el bloque de código que controlan. No trate de ser original al respecto, pues con ello sólo lo grará que la gente se dé cuenta que es un programador novato y poco organizado.
Es posible hacer 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 Else. Vea la sintaxis: If ExprésiónLógica Then
Instrucci onesAfirmativo Else
Instrucci onesNegati vo End If
Donde If es el inicio de la estructura de decisión, End If es el fin de la estructura de de cisión, y todas las Instrucciones que se encuentran entre el inicio y el fin constituyen el blo que de código controlado por la condicional. El bloque de código del estatuto está dividi do en dos bloques menores: uno que se ejecutará sólo si Expresión Lógica es True (Instrucci onesAfirmativo) y otro que se ejecutará sólo si Expresión Lógica es False (Ins truccionesNegativo). Por ejemplo: If Precio < CreditoDisponible Then Cargo = "Aprobado" CreditoDisponible -= Precio Else Cargo = "Denegado" End If
www.FreeLibros.me
210
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Donde ExpresiótiLógica es la expresión de tipo tmccionesAfirmativo o InstruccionesNegativo.
B o o le a n
que determina ejecución de Ins-
Esta sintaxis de I f controla la ejecución en el sentido afirmativo o en el sentido negativo de la condición. Como puede intuirlo, siempre se ejecutará algo.
Select Case es una estructura de decisión que permite ejecutar procesos mutuamente excluyentes en función de comparaciones realizadas sobre un mismo valor de referencia. Su sintaxis es la siguiente: S e l e c t C a se
S e le c t C a se ExprésiónAEvaluar C a se [Condición I Else]
Instrucciones End S e le c t
Donde ExpresiónAEvaluar es una expresión de cualquier tipo que será tomada como refe rencia. Condición sirve para especificar una condición relacionada con ExpresiónAEvaluar que, en caso de presentarse, disparará la ejecución de Instrucciones. Se va construyendo un árbol de decisión basado en ExpresiónAEvaluar. Se pueden agregar tantas sentencias C a se como se deseen; incluso es posible anidar las estructuras S e le c t Case. Si al momento de evaluar Condición, un determinado valor de ExpresiónAEvaluar cumple en dos casos, se ejecutará para el primero que se encuentre. C a se E l s e se aplica cuando el valor de ExpresiónAEvaluar no cumple para ninguno de los casos anteriores dentro de la estructura. Para entender 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 determi nado y las categorías de número más alto son las de mayor ingreso; existe una relación di rectamente proporcional entre categoría y sueldo. Se acaba de autorizar un aumento de sueldo general en la compañía, de acuerdo con las siguientes políticas: el personal de alto nivel (categoría superior a 19) no tendrá aumen to; las categorías 18, 17 y 14 recibirán el 15% de aumento; de la categoría 8 a la 13, re cibirán el 10% de aumento, a excepción de la categoría 10, que es la categoría más reza gada con respecto al salario: ésta recibirá el 25%. Al resto del personal se le dará un 5% de aumento.
www.FreeLibros.me
Capítulo 7. Estructuras de decisión y control
¿Cómo se codificaría una estructura Select Case que atendiera esta necesidad? Veamos: Select Case Categoría Case Is > 19 Aumento = 0 Case 18, 17, 14 Aumento = 0.15 Case 10 Aumento = 0.25 Case 8 To 13 Aumento = 0.1 Case Else Aumento = 0.5 End Select
Es importante notar que todas las condiciones giran alrededor de la expresión a eva luar (en nuestro ejemplo, Categoría): si no hacen uso de dicha expresión, no son consideradas. Usted podría agregar como instrucción una condición Case que se re suelva True, pero que no involucre a Categoría; en ese caso, el código dependiente de dicho Case nunca se ejecutará.
Estructuras de control Son estructuras de control, llamadas también bucles, aquellos elementos del lengua je que permiten la ejecución de una o más líneas de código de manera repetida. Mediante las estructuras de control se puede repetir la ejecución de líneas de código: □ Un determinado número de veces □ Hasta que una condición sea verdadera (True) □ Mientras que una condición sea falsa (False) □ Una vez por cada elemento de una colección A continuación, podrá analizar los elementos del lenguaje que permiten codificar ca da una de estas variantes.
For Next For Next repite la ejecución de un bloque de código un número determinado y conocido de veces. For Next se apoya en una variable que recibe el nombre de con tador, que se incrementa o reduce de valor, en intervalos también regulares y cono cidos. Su sintaxis es la siguiente:
www.FreeLibros.me
212
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
For Variable = Valorlnicial To ValorMáximo [Step Incremento]
Instrucciones Next [Variable]
Donde Variable es una variable de memoria de tipo entero que permitirá controlar las repeticiones del proceso. Valorlnicial es el valor inicial a partir del cual el incre mento o decremento se llevará a cabo. ValorMáximo es el valor al cual el contador podrá llegar. Incremento es la constante entera que marcará la cantidad de incremen to o decremento que sufrirá Variable en cada repetición del proceso. Vea los siguien tes ejemplos: ' Cuenta del 1 al 10 For i = 1 To 10 Consolé.WriteLine(i ) Next i ' Serie del 5 For i = 0 To 50 Step 5 Consolé.WriteLine(i ) Next i 1 Decremento del 10 al 1 For i = 10 To 1 Step -1 Consolé.WriteLine(i ) Next i
Si se omite la especificación Step, se da a Incremento el valor de 1 positivo; si In cremento es negativo, se habla de un decremento en términos reales. Una instrucción que puede ser útil en el caso de utilizar For Next es Exit For, que interrumpe la ejecución del For como si ya hubiese cumplido todas las repeticiones exigidas.
While W hile ejecuta un bloque de código un número infinito de veces mientras una con dición al inicio del bloque se cumpla (True). Su sintaxis es la siguiente: While ExpresiónLógica Instrucciones End While
www.FreeLibros.me
Capítulo 7. Estructuras de decisión y control
Por ejemplo: Dim Prueba As Byte = 0 While Prueba < 255 Consolé.WriteLine(Prueba) Prueba += 1 End While
Donde ExpresiónLógica es un valor de tipo Boolean (True/False), casi siempre una com paración que de ser verdadera al inicio del ciclo de ejecución provoca la ejecución de Ins trucciones. Como recordará, el tipo de datos Byte puede almacenar valores desde 0 a 255, exclusiva mente; en nuestro 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 ge neraría un error, pues es imposible 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 momen to el proceso: Exit 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 lla namente, se proporciona el valor de True como ExpresiónLógica y no hay forma que deje de ejecutarse el ciclo.
While True
Instrucciones End While
Por 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
www.FreeLibros.me
214
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
En este caso, es indispensable que especifique en su programa alguna condición para eje cutar Exit While ya que, de otra manera, nunca concluirá su ejecución. En el ejemplo que pusimos, mientras no teclee 8, el programa seguirá pidiendo números. NOTA Puede ser que su program a tenga un detalle que impida ejecutar Exit W hile en un ciclo infi nito; recuerde que siempre puede detener la ejecución de un proceso presionando la com bi nación de teclas Ctrl-Intro o Esc.
Do Loop Do Loop ejecuta un bloque de código un número infinito de veces, hasta que una condi ción se cumpla (True). Esta instrucción brinda más flexibilidad que While, en el sentido de que se puede controlar la evaluación de las condiciones al inicio o al final de la estructura. Usando Do Loop se pueden crear estructuras que se ejecuten al menos una vez, de una for ma más sencilla que utilizando While.
Su sintaxis es la siguiente: ' Evaluación al inicio Do {While/Until} ExpresiónLógica Instrucciones Loop ' Evaluación al final Do Instrucciones Loop {While/Until} ExpresiónLógica
donde ExpresiónLógica es un valor de tipo Boolean (True/False), que casi siempre es una comparación. Instrucciones son las instrucciones que se controlan 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. Por ejemplo:
www.FreeLibros.me
Capítulo 7. Estructuras de decisión y control
i = 0 Do While i <= LimiteMaximo WriteLine(i) i += 1 Loop i = 0 Do Until i > LimiteMaximo WriteLine(i) i += 1 Loop i = 0 Do WriteLine(i) i += 1 Loop While i <= LimiteMaximo i = 0 Do WriteLine(i) i += 1 Loop Until i > LimiteMaximo
Do tiene una sentencia para interrumpir en cualquier momento el proceso: Exit Do.
Estructuras envolventes y anidadas Las estructuras, sean de decisión o de control, pueden contener otras estructuras. A una es tructura que contiene a otras estructuras se le llama estructura envolvente; la estructura que está dentro de otra se llama estructura anidada. Todas las estructuras que se han visto en el capítulo, sin importar su tipo, pueden anidarse o ser envolventes; es decir, resolverse una dentro de otra.
Reglas para el anidado de estructuras Las únicas reglas que debe tomar en cuenta son: □ Las estructuras tienen un inicio y un fin; asegúrese de cerrar todas las estructuras que abra. □ Se recomienda programar de tal manera que las estructuras que se abran se cierren lo más pronto posible.
www.FreeLibros.me
216
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
□ La última estructura en abrirse debe ser la primera en cerrarse. □ En el caso de estructuras, las variables de tipo entero se resuelven de manera más rápi da que cualquier otro tipo de dato. Los problemas más comunes relacionados con las estructuras anidadas (y su solución) son: □ No terminar lo que se inicia. Problema
Solución
If Condición Then Instrucciones
If Condición Then Instrucciones End If
□ No iniciar lo que se termina. Problema
Solución
Instrucciones Next Variable
For Variable = 0 to 10 Instrucciones Next Variable
□ Utilizar las mismas variables que controlan el proceso. Problema
Solución
For Variable = 0 to 10 For Variable = 0 to 5 Instrucciones Next Variable Next Variable
For Variable = 0 to 10 For Variable 1 = 0 to 5 Instrucciones Next Variable 1 Next Variable
□ No terminar primero la última estructura que se inició. Problema
Solución
For Variable = 0 to 10 If Condición Then Instrucciones Next Variable End If
For Variable = 0 to 10 If Condición Then Instrucciones End If Next Variable
www.FreeLibros.me
Capítulo 7. Estructuras de decisión y control
Ejercicio 7.1 Uso de estructuras de decisión En este ejercicio se utilizará una aplicación de consola para comprobar las estructuras de deci sión. Se parte del supuesto que usted indicará al programa cuánto cuesta un producto que desea comprar, así como d tipo de membresía que tiene en la tienda donde desea comprarlo. A cada tipo de membresía se le aplica un determinado descuento que será informado por el programa. 1. Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). 2. Agregue a su solución un proyecto Windows - Consolé Application, llamado Descuento. 3. Edite el programa de tal forma que aparezca como sigue: Codificación de Descuento - Module!.vb 1 2 3 4 c O 6 7I
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Option Explicit On Option Strict On Imports System.Console Module Modulel Sub Main() Dim Precio As Double Dim FactorDesc As Decimal Write ("Precio del producto:") Precio = CDbl(ReadLine()) If Precio = 0 Then WriteLine("Nada que calcular") Else WriteLine("Membresía:") WriteLine("1.- Diamante") WriteLine("2.- Premium") WriteLine("3.- Clásica") Write ("¿Qué membresía tiene?:'') FactorDesc = CDec(ReadLine()) Select Case FactorDesc Case Is = 1 FactorDesc = 0.2D Case Is = 2 FactorDesc = 0.16D Case Is = 3 FactorDesc = 0.1D
www.FreeLibros.me
218
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Case Else FactorDesc = 0 End Select Write("Precio para usted:") WriteLine(Precio - (Precio End If
FactorDesc))
Write("Presione INTRO para continuar") ReadLine() End Sub End Module
Ejecución guiada de Descuento - Modulel.vb 4. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realiza do en la solución (teclas Ctrl-Mayús-S). Inicie la depuración para comprobar el com portamiento de su programa (tecla F5). 5. Las líneas 1 y 2 hacen de este programa un programa type safe. En las líneas 10 y 11 se declaran las variables de trabajo. 6. Cuando el programa solicite el precio (líneas 13 y 14), proporcione el valor 0. Vea en el código cómo se utiliza CDbl (), para hacer de lo capturado un dato Double, y evitar erro res, dado que el programa es type safe y no permite conversiones tipo cast (línea 14). En la línea 16 vemos la primera estructura de decisión del programa, que controla la eje cución del programa en el sentido afirmativo y en el sentido negativo. En el sentido afirmativo, se ejecutará el bloque de código que va de la línea posterior al inicio de la estructura (línea 9), hasta la línea anterior al Else o End I f (línea 17), que dan por concluido el bloque. En el sentido negativo, se ejecutará el bloque de código que va de la línea posterior al El se (línea 19), hasta la línea anterior al End If (línea36), que da por concluido el bloque. Como se proporcionó el valor de cero, la condición que gobierna la ejecución del I f se cumple en el sentido afirmativo (Precio = 0 es True), y al encontrar el Else, pasa a ejecutar la línea 30; vea que el bloque en el sentido negativo es ignorado completamente.
www.FreeLibros.me
Capítulo 7. Estructuras de decisión y control
219 |
Si todo ocurrió como se esperaba, la salida será la siguiente. Precio del producto: 0 Nada que calcular Presione INTR0 para continuar
7. Ejecute la aplicación nuevamente. Cuando le solicite el precio, proporcione el valor 2000. Cuando le solicite el tipo de membresía, proporcione el valor 2. Como se proporcionó el valor 2 00 0 , la condición que gobierna la ejecución del I f se cumple en el sentido negativo (Precio = 0 es False), y se procede a ejecutar el blo que en el sentido negativo. En la línea 24 se recibe el valor 2, que es asignado a FactorDesc; en la línea 25 se es pecifica FactorDesc como valor de referencia para las comparaciones Select Case que se encuentran en las líneas 26, 28 y 30; en caso de que no se cumpla ninguna de las an teriores, se ejecuta la línea 32. Como el valor de FactorDesc es 2 (Is = 2), se procede a ejecutar el bloque de có digo correspondiente al cumplimiento de esa condición; en otras palabras, se ejecuta la línea 29. Vea cómo se agrega la literal D al valor para indicarle al programa que el valor es Decimal (de lo contrario podría asumirse otro tipo de dato, y ante la imposibilidad de conversiones cast, se produciría un error). También se podría haber resuelto el proble ma utilizando la función CDec( ). Concluida la ejecución del bloque de código corres pondiente a la condición que se cumplió, se envía el control del programa a la línea pos terior a la terminación de la estructura (End Select); es decir, se ejecuta la línea 35 y hacia adelante, para desplegar el precio después de aplicar el factor de descuento que co rresponde al tipo de membresía seleccionada. Si todo ocurrió como se esperaba, la salida será la siguiente: Precio del producto: 2000 Membresía: 1.- Diamante 2.- Premium 3.- Clásica ¿Qué membresía tiene?: 2 Precio para usted: 1680 Presione INTR0 para continuar
Si hubiéramos especificado un tipo de membresía que no fuera 1,2 o 3, el programa hu biera ejecutado la línea 32, que corresponde a la condición Case Else; es decir, la que corresponde a cuando ninguna de las otras condiciones se cumple.
www.FreeLibros.me
220
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
8. Guarde todos los cambios en su solución. FIN DEL EJERCICIO*
Ejercicio 7.2 Uso de For Next En este ejercicio se utilizará una aplicación de consola para comprobar el funcionamiento de For Next. 1. Abra la solución Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensión sin). 2. Agregue a su solución un proyecto Windows - Consolé Application, llamado Repite. 3. Edite el programa de tal forma que aparezca como sigue:
= _I Codificación de
Repite - Modulel.vb
1 2
Option Explicit On Option Strict On
3 4 5
Imports System.Console
6
7
Module Modulel
8 9
10 11
12
13 14 15
16 17
Sub Main() Dim LimiteMaximo As Integer = 4 Dim LimiteMinimo As Integer = 0 Dim i As Integer WriteLine("Mostrando con For Next incremental") For i = LimiteMinimo To LimiteMaximo WriteLine(i) Next i
18
19 20 21
22 23 24 25
26
WriteLine("Muestra usando For Next invertido") For i = LimiteMaximo To LimiteMinimo Step -1 WriteLine(i) Next i WriteLine("Mostrando con While") i = 0 While i <= LimiteMaximo
www.FreeLibros.me
Capítulo 7. Estructuras de decisión y control
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
WriteLine(i) i += 1 End While WriteLine("Muestra usando Do Loop inicial While") i = 0 Do While i <= LimiteMaximo WriteLine(i) i += 1 Loop WriteLine("Muestra usando Do Loop inicial Until") i = 0 Do Until i > LimiteMaximo WriteLine(i) i += 1 Loop WriteLine("Muestra usando Do Loop final While") i = 0 Do WriteLine(i) i += 1 Loop While i <= LimiteMaximo WriteLine("Muestra usando Do Loop final Until") i = 0 Do WriteLine(i) i += 1 Loop Until i > LimiteMaximo Write("Presione INTR0 para continuar") ReadLine() End Sub End Module
Ejecución guiada de Repite - Moduiei.vb 4. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realiza do en la solución (teclas Ctrl-Mayús-S). Inicie la depuración para comprobar el com portamiento de su programa (F5).
www.FreeLibros.me
222
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
5. En las líneas 10 a la 12 se declaran variables de trabajo que ayudarán a visualizar de una mejor forma el funcionamiento de los bucles. Todas las estructuras hacen lo mismo, con las siguientes particularidades: a) For Next se encarga de incrementar un contador de forma automática. b) Todas las demás estructuras deben apoyarse en un contador implementado ma nualmente (i +=1 ), que en caso de olvidarse puede provocar un ciclo infinito. c) Las estructuras Until se ejecutan hasta que se cumple por primera vez la condición. d) Las estructuras While se ejecutan mientras la condición sigue siendo verdadera. Si todo transcurrió bien, la pantalla mostrará lo siguiente: Mostrando con For Next incremental 0
2
3 4
Muestra usando For Next invertido 4
3 2
1 0
Mostrando con While 0
í 2
3 4
Muestra usando Do Loop inicial While 0
1 2
3 4
Muestra usando Do Loop inicial Until 0
i" 2
3 4
Muestra usando Do Loop final While 0
1 2
3
www.FreeLibros.me
Capítulo 7. Estructuras de decisión y control
4 Muestra usando Do Loop final Until 0
1 2
3 4 Presione INTRO para continuar
6. Modifique las asignaciones de las líneas 25,32, 39,46 y 53. En lugar de asignar 0, asig ne 10. Se proporciona ese valor porque no es válido para las condicionales While y Un til 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 0 1 2 3 4 Muestra usando For Next: invertido 4 3 2 1 0 Mostrando con While Muestra usando Do Loop inicial While Muestra usando Do Loop inicial Until Muestra usando Do Loop final While 10 Muestra usando Do Loop final Until 10 Presione INTRO para continuar
> Adición de tareas a Task List 7. Hay una herramienta en Visual Studio que permite crear y administrar tareas con el fin de no olvidar pendientes relacionados con el desarrollo en el que participamos. Esta he rramienta tiene el nombre de Task List. 8. En Task List se pueden manejar dos categorías de registros: tareas de usuario y comen tarios de tarea. Las tareas de usuario son tareas que el usuario registra, estableciéndo les prioridad (alta, media, baja) y un indicador de estado, que marca si la tarea ya ha si do concluida (completed). Los comentarios de tarea son comentarios en el código que
www.FreeLibros.me
224
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
tienen significado para Visual Studio, y que producen un registro en Task List. Estos comentarios de tarea son: TODO, para señalar cosas por hacer; HACK, para anotar recor datorios de cosas relacionadas con el desarrollo; y u n d o n e , para deshacer cosas que temporalmente se colocaron pero que hay que eliminar antes de liberar el programa en producción. 9. Para ver Task List es necesario seleccionar la opción View - Task List (oprima las te clas CTRL-X, CTRL-T). Con ello aparecerá la ventana Task List. Selector de categorías
F i g u r a 7 .1
Task List
T
I 1
Task List
1
User T a s k 1
0
!
Nueva Tarea d-e usuario
- -Q X
Description
\
Prioridad
\
Estado (Completed)
Error List
£
T a sk list □ C c m fr w n d w indow ¡
10. á En Task List seleccione en el cuadro de lista Categories la categoría User Tasks. Haga clic en el icono Create Task User. Se agregará una tarea de forma automática. 11. En descripción escriba E n v i a r p o r c o r r e o e l e c t r ó n i c o a un amigo. En la misma lí nea de la tarea, haga clic en la columna de prioridad, con lo que aparecerán las diferen tes prioridades que se pueden asignar a una tarea. T a s k List - 1 t a s k U se r T a sk s !
E
T
lit)
D e scrip tio n
(N orm al)
Dr c o rre o ele ctrón ico a u n a m igo
(N orm a l) ^ i
(L o w )
0 ^ E rro r List J
T a s k List |O
C o m m a n d W in d o w | [ s j O u t p u t
www.FreeLibros.me
Capítulo 7. Estructuras de decisión y control
A
M icro so ft"
^
Visual Studio 2005
> Lo nuevo
En Visual Studio 2005 Task List permite desplegar varias líneas de texto en cada fila, el orde nam iento basado en una o varias columnas, y cambiar la posición de las columnas de acuer do con los gustos del desabollador.
> Adición de comentarios de tarea a un programa 12. En la línea anterior, en donde se inicia la comprobación de While (línea 24), agregue el siguiente comentario: 'TODO Cambiar los 10 por ceros, para que funcione normalmente.
' TODO Ca m b ia r l o s 10 por c e r o s , W r i t e L i n e ( " Most r ando con W h i l e " ) i = 0 W h i l e i <= L i m i t e M a x i m o W riteLi n e ( i) i += 1 End W h i l e
p a r a que f u n c i o n e normalmente.
13. Agregar un comentario reconocido por Visual Studio (TODO / HACK / UND0NE) agrega un registro a Task List, en donde se especifica el archivo y la línea en la que se realizó la anotación. T a s k U s t - 1 ta sk
~
k
9
X
Comments !
Description
Fíe
TO O O Cambiar ios 10 por c eros, p ara q ue funcione normalmente.
List
Task List 7~]Com m and w ü
g
Module l.v b
Line 24
tput
14. En Task List haga doble clic sobre el comentario que acaba de agregar y vea cómo el control del programa se traslada a donde se encuentra el comentario. 15. Guarde todos los cambios en su solución.
www.FreeLibros.me
226
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Ejercicio 5.1 Identificación de errores en estructuras anidadas En este ejercicio analizará el código que se proporciona, y explicará cuáles son los erro res que se presentan (si los hay). Si no hay problemas, indíquelo en su respuesta. 1)
If Edad > 18 Then If Registro = True Then Autorización = True End If
2)
If Edad > 18 Then If Registro = True Then Autorización = True End If
3)
For i = 1 to 10 x *= i If x > 30 Then Console.WriteLine("Límite de treinta o más") Exit For Next i End If
FIN DEL EJERCICIO*
www.FreeLibros.me
Capítulo 7. Estructuras de decisión y control
M
a p a m e n t a l d e l c a p ít u l o
www.FreeLibros.me
227
228
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
T e r m in o l o g ía Bloque de código, 208
For, 212
Bucles, 211
While, 213
Case El se, 210
Expresión Lógica, 208
Do Loop, 214
For Next, 211
Else, 209
If, 208
Estatuto condicional, 208
Instrucciones, 208
Estructura(s)
Select Case, 210
anidada, 215
Step, 212
de control, 211
Task List, 223
de decisión, 207
While, 212
envolvente, 215 Exit Do, 215
P r e g u n t a s ________________________________________________________________________
7.1
¿Cuáles son las estructuras de decisión más importantes y cuál es la sintaxis de ca da una de ellas?
7.2
¿Cuáles son las estructuras de control más importantes y cuál es la sintaxis de cada una de ellas?
7.3
¿En qué casos es más recomendable utilizar Do
7.4
¿Cuáles son las reglas que se aplican al anidado de estructuras?
Loop
www.FreeLibros.me
que
w h il e ?
Capítulo 7. Estructuras de decisión y control
Notas:
www.FreeLibros.me
229
230
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Exam en
r á p id o d e l c a p ít u l o
P arte 1: M a r q u e c o n u n a c ru z el in c iso q u e re s p o n d a a la p re g u n ta .
1. Son estructuras que permiten decidir qué líneas de código se han de ejecutar: á) Estructuras de decisión b ) Estructuras condicionales c) Estructuras lógicas 2.
Es un conjunto de líneas de código que tienen su propia identidad de ejecución: a) Procedimiento b) Bloque de código
c) Transacción 3l Es la estructura ideal para cuando se han de ejecutar procesos mutuamente excluyentes, dependien do de un valor determinado: a) If b) For c) Select Case 4
Es la estructura óptima cuando se conoce con certeza el número de iteraciones de un proceso: á) While b) For Next
c) Select Case 5. Tipo de estructura que se presenta cuando una estructura se encuentra dentro de otra: á) Estructuras anidadas b) Grupo de estructuras c) Jerarquía de estructuras P a rte 2: C o lo q u e en la lín e a la le tra «F» si el e n u n c ia d o es f a ls o y « V » si es ve rd a d e ro .
6. If utiliza una expresión lógica para decidir la ejecución de código en sentido afirmativo o negativo.
______________
7. Las estructuras de control son conocidas también como bucles.
______________
8. Select Case es una estructura de control.
_______________
9. Con While se pueden generar ciclos infinitos.
______________
10. La última estructura en abrirse debe ser la primera en cerrarse.
www.FreeLibros.me
______________
\ fx
C a p ít u l o Manejo estructurado de excepciones Objetivos: Aprenderá la forma de manejar errores y excepciones en .NET.
1. Aprenderá cuál es la diferencia entre errores y excepciones. 2. Aprenderá a manejar excepciones, utilizando el bloque Try Catch Finally. 3. Aprenderá a filtrar de manera específica las excepciones, a fin de con trolar las respuestas de las aplicaciones frente a imprevistos. 4. Aprenderá a disparar excepciones generadas por el usuario
231
www.FreeLibros.me
232
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido E rro re s y E x c e p c i o n e s ................................................................................ M a n e j o e stru c tu ra d o d e e x c e p c io n e s .........................................................
233 234
Try...Catch...Finally .................................................................................... B lo q u e T r y ........................................................................................
235 235
B lo q u e C a t c h .................................................................................... B lo q u e F i n a l l y ..................................................................................
235 236
C la se Sy ste m .E x c e p t io n .....................................................................
236
Uso de Try Catch Finally y de las propiedades de la dase System. Exception.....................................................
237
>
D e s p lie g u e d e e rro re s en tie m p o d e d is e ñ o u s a n d o Error L i s t ..................................................................... F iltra d o d e e x ce p cio n e s ............................................................................. C a lifica d o re s d e e xce p ción ...............................................................
240 241 241
O b je to E r r ........................................................................................ Tipo s d e filt ra d o d e e x c e p c io n e s .......................................................
242 242
Filtrado de excepciones...............................................
243
L a n z a m ie n to d e e xce p cio n e s p r o p i a s .........................................................
246
Lanzamiento de excepciones definidas por el usuario...........
246
.........................................................................
249
T e r m in o lo g ía .............................................................................................. P r e g u n t a s .................................................................................................. E x a m e n rá p id o del c a p í t u l o .......................................................................
M a p a m e n ta l del ca p ítu lo
250 250 252
www.FreeLibros.me
Capítulo 8. M a n e jo estructurado de excepciones
233j
Un buen programador no es el que conoce todas las estructuras y funciones del lenguaje, sino aquel que garantiza la solución de los problemas a través de los programas que desa rrolla. El desarrollo de aplicaciones, como toda actividad humana, es perfectible. Usted no debe preocuparse si sus programas presentan problemas en la primera compilación: resulta to talmente normal que un programa falle. Lo que no es normal es que desconozcamos cómo manejar las fallas de una manera lógica y estructurada que nos ayude a reducir el número de problemas hasta límites aceptables. La psicología indica que la madurez de una persona se mide por su capacidad de solucionar por sí misma sus propios problemas. Esta afirmación general se aplica al caso particular del desarrollo de programas: es un programador maduro el que sabe resolver problemas.
Errores y Excepciones Los errores son acciones u omisiones relacionadas con el proceso de desarrollo que pro ducen comportamientos inesperados en el programa resultante. Por otro lado, existe un concepto denominado excepción, que es una violación a las reglas sintácticas o de alcance de un lenguaje de programación. Las excepciones pueden ser excepciones de software, si están relacionadas con una mala aplicación del lenguaje, o con la asignación de valores fuera de dominio a propiedades o argumentos; también pueden ser excepciones de hardware, cuando su origen tiene que ver con la falla o saturación de un dispositivo físico: el programa puede estar correcto, pero ¿cómo escribir información en un disco que está lleno, por ejemplo? Una excepción siempre es un error, debido a que el resultado obtenido no es el deseado, pero un error no siempre es una excepción; las excepciones por lo general interrumpen la ejecución de un programa, mientras que los errores pueden pasar desapercibidos para el compilador del lenguaje. Si un desarrollador entendió mal las especificaciones de un programa — una fórmula arit mética, por ejemplo— , es probable que codifique correctamente una fórmula que no es co rrecta; el programa no reportará errores en tiempo de compilación o ejecución, pero sin du da alguna generará resultados equivocados. El programa se compilará sin problemas, no tendrá excepciones, pero sí generará errores. Se concluye entonces que los errores tienen un universo más amplio de manifestaciones; las excepciones, en cambio, tienen un campo más reducido: el del uso inadecuado del len guaje, manejo inadecuado de dominios o problemas de hardware.
www.FreeLibros.me
234
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
En términos llanos, hay que temerle más a los errores que a las excepciones, ya que las ex cepciones son un aspecto totalmente manejable en Visual Basic. NOTA Visual Studio brinda una excelente asistencia durante el proceso de desarrollo para reducir el núm ero de fallas en los programas. Prácticamente se anticipa al program ador en la detección de las excepciones; las únicas excepciones que ocurren en tiem po de ejecución son aquellas relacionadas con la asignación de valores inadecuados o fuera de rango a variables, argum en tos, o propiedades. Las demás son detectadas en el editor de có digo (excepto algunas excep ciones de hardware, que es posible detectar sólo hasta el m om ento de ejecución).
Manejo estructurado de excepciones Desde sus inicios, Visual Basic había manejado los errores a través del objeto Err. El manejo de errores era no estructurado: era difícil leer, depurar y mantener el código. Los saltos en el código no eran lo más apropiado para el modelo de programación estructurada, ya que la secuencia de los procesos se perdía. El manejo estructurado de excepciones (SEH/Structured Exception Handling) es la capa cidad que tiene un lenguaje para permitir manejar excepciones a través de una estructura de control que “protege” porciones localizadas de código, de manera lógica y consistente, sin perder nunca la secuencia de los procesos. Algunas de las ventajas del manejo estructurado de excepciones son las siguientes: □ El manejo estructurado de excepciones permite delimitar claramente los bloques de có digo a proteger y determinar qué errores se espera que se produzcan. □ El flujo de ejecución es más sencillo de seguir, ya que no existen saltos en la ejecución del código. □ Las estructuras para el manejo de excepciones se pueden anidar, ofreciendo mayor con trol al manejo de excepciones.
www.FreeLibros.me
Capítulo 8. M a n e jo estructurado de excepciones
Try...Catch...Finally Se puede implementar el manejo estructurado de excepciones a través del estatuto
T ry
. . .C a tc h .. . F in a lly . B lo q u e para el m anejo estructu rad o de e xce p c io n e s
Su sintaxis es la siguiente: T ry
Código a ser protegido C a tc h
Define el tipo de excepción a capturar y la acción que deberá tomarse [ F in a lly
Define acciones que podrán ser ejecutadas de manera opcional] End T ry
Bloque Try Éstas son las particularidades del bloque
T ry
...
End T ry:
□ Delimita el área de código en donde puede suceder una excepción. □ El código escrito dentro del bloque
T ry
se considera código protegido.
□ Si ocurre una excepción, el proceso se transfiere al bloque C a tch , que contendrá el có digo que queremos ejecutar dado el caso. □ Se puede utilizar E x i t T r y para salir en cualquier instante del bloque de código prote gido, continuando el flujo del programa después del End Try.
Bloque Catch Si una excepción sucede en el bloque T ry , la ejecución de dicho programa se suspende continúa al principio del bloque C atch.
y
Estos bloques son una serie de estatutos que comienzan con la palabra reservada C a tch , se guida 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 blo que C a tch :
www.FreeLibros.me
236
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
□ Se puede utilizar uno o varios bloques Catch para manejar las excepciones. □ Se recomienda manejar de manera separada las excepciones que provoquen acciones distintas, a fin de mantener la secuencia lógica del programa. □ Es posible capturar excepciones predefinidas en .NET Framework, o bien crear nuestras propias excepciones. □ Se puede utilizar el estatuto When para comparar una excepción que ocurre con aquellas reconocidas por .NET Framework, utilizando para ello el número único de excepción.
Bloque Finally El bloque Finally se ejecuta después del bloque Try, en caso de que no ocurran excepcio nes, o después del bloque Catch correspondiente, en caso de que sí haya sucedido una ex cepción. Este bloque es opcional en su definición, pero no en su ejecución; si se define un bloque Finally, éste se ejecutará siempre. El uso más común de Finally es liberar objetos o cerrar archivos después de que una ex cepción ha sucedido. En cierta forma, es lo mismo declarar Finally que escribir código fuera de Try. Aunque Finally es opcional, recomendamos su utilización pues aclara el código y permi te la implantación de un manejo verdaderamente estructurado: primero á) se define qué se hace, luego, b) se define qué hacer si hay excepciones, y finalmente, c) se define qué ocu rre después, hayan ocurrido o no excepciones. Si en el código protegido por Try no ocurren excepciones, el control del programa hace ca so omiso del bloque Catch, para pasar directamente a la ejecución de Finally.
Clase System.Exception Visual Basic maneja las excepciones a través de la clase System.Exception. Recuerde que en Visual Basic todo es objeto, incluyendo una excepción que es capturada. Una sintaxis común de Catch es la siguiente: Catch VariableExcepción As System.Exception
En caso de que ocurra una excepción en el bloque de código protegido, el control del pro grama pasa a la línea Catch, se capturará la excepción y se almacenará en una instancia de la clase System.Exception que se declara en la misma línea Catch.
www.FreeLibros.me
Capítulo 8. M a n e jo estructurado de excepciones
En nuestro ejemplo, VariableExcepción sería la variable objeto en donde estaría almacena da la información del problema ocurrido. En su calidad de objeto, VariableExcepción tendría las propiedades y los métodos de la cla se 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 lo que causó la excepción.
StackTrace
Antecedente de ejecución; muestra primeramente la línea que causó el error (en su form ato interno de ejecución), sigue con el procedimiento, capítulo y otros datos si los hubiere. Esto permite ubicar, en el contexto m odular del programa, a la excepción.
Source
Contiene el nombre de la aplicación u objeto que originó la excepción. Puede tratarse incluso de la librería de .NET Framework que es llamada a ejecución y que causa la excepción.
InnerException
El hecho de que una excepción se presente puede dar lugar a otras excepciones (por ejemplo, declarar mal una variable puede provocar excepciones al utilizar dicha variable). En caso de que se presenten excepciones anidadas, mostrará las excepciones que se presentaron en orden de aparición.
ToString
M uestra el nombre calificado de la excepción, el mensaje, el anidam iento de excepciones y el antecedente de ejecución.
Todo esto le quedará claro al hacer el primer ejercicio.
j C j j Ejercido 8.1 Uso de Try Catch Finally y de las propiedades de la clase System.Exception
En este ejercicio se protegerá un código determinado utilizando Try... Catch... Finally. . . El programa solicita dos números (un dividendo y un divisor), y a partir de ahí intentará una división. Deliberadamente se causará una excepción al tratar de dividir entre cero (lo cual, como sabemos, es imposible). 1.
Abra la solución Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensión sin).
2.
Agregue a su solución un proyecto Windows - Consolé Application, llamado Excepcionesl.
3.
Edite el programa de tal forma que aparezca como sigue:
www.FreeLibros.me
238
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
■— — 1 C o d ific a ció n d e Excepcionesl - Modulel .vb 1 2 o O
Option Explicit On Option Strict On
4 c sJ 6 7/ 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Imports System.Console Module Modulel Sub Main() Try WriteLine("Prueba de manejo de Excepciones") Dim N1, N2, Resultado As Decimal Write("Dame el dividendo:") N1 = CDec(ReadLine()) Write("Dame el divisor:") N2 = CDec(ReadLine()) Resultado = N1 / N2 WriteLine("Resultado:" & Resultado.ToString) Catch eProblema As Exception WriteLine("> Origen:") WriteLine(eProblema.Source) WriteLine("> Mensaje:") WriteLine(eProblema.Message) WriteLine("> Antecedente de ejecución:") WriteLine(eProblema.StackTrace) WriteLine("> Texto completo:") WriteLine(eProblema.ToString) Finally Write("Pulse INTRO para continuar") ReadLine() End Try End Sub End Module
Ejecución g u ia d a d e Excepcionesl - Modulel.vb
4.
Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyec to como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha reali zado en la solución (teclas Ctrl-M ayús-S). Inicie la depuración para comprobar el comportamiento de su programa (F5).
www.FreeLibros.me
Capítulo 8. M a n e jo estructurado de excepciones
5.
239 |
Cuando se protege un bloque de código y éste no causa excepciones, se ejecutan los bloques Try y Finally,pero no Catch (este último se ejecuta sólo en el caso de excepciones). La línea 12 declara todas las variables que vamos a utilizar en nuestro programa. La lí nea 14 preguntará el número que actuará como dividendo (N1 ) y la línea 16 el que ac tuará como divisor (N2). La línea 17 es la que intenta la división (N1 /N2), asignando el resultado a la variable Resultado.
6.
Proporcione el valor 10 como dividendo y 5 como divisor. En nuestro ejemplo, dividir 10 entre 5 no causa ningún problema, y por tanto, el pro grama trasladará el control de la ejecución de la línea 18 (bloque Try) a la 28 (bloque Finally); las líneas intermedias, que corresponden al bloque Catch, son ignoradas.
7.
Ejecute la aplicación nuevamente, pero proporcione el valor 10 como dividendo y 0 co mo divisor. Cuando intenta resolver la línea 14, el programa determina que eso no es po sible, y genera una excepción. Al detectar que una excepción ha ocurrido, el control del programa se trasladará al bloque Catch, en la línea 19. La excepción que es capturada se almacenará como un objeto basado en System.Excep tion (declarada en la misma línea Catch). En nuestro caso, el objeto se llama eProblema. Las líneas 21, 23, 25 y 27 muestran algunas propiedades importantes del objeto ePro blema que nos ayudarán a entender qué excepción está ocurriendo y dónde. Después de ejecutar el código del bloque Catch, el programa ejecutará el bloque de có digo Finally. Si todo ocurrió como se esperaba, la salida será la siguiente: Prueba de manejo de Excepciones Dame el dividendo:10 Dame el divisor:0 > Origen: mscorlib > Mensaje: Attempted to divide by zero. > Antecedente de ejecución: at System.Decimal.FCallDivide(Decimal& result, Decimal d1, Decimal d2) at System.Decimal.Divide(Decimal d1, Decimal d2) at Excepcionesl.Modulel.Main() in C:\APVBNETVS\Ejercicios\ Excepcionesl\Module 1.vb:line 17 > Texto completo: System.DivideByZeroException: Attempted to divide by zero. at System.Decimal.FCallDivide(Decimal& result, Decimal d1, Decimal d2) at System.Decimal.Divide(Decimal d1, Decimal d2) at Excepcionesl.Modulel.Main() in C:\APVBNETVS\Ejercicios\ Excepcionesl\Module 1.vb:line 17 Pulse INTR0 para continuar
www.FreeLibros.me
240
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
> Despliegue de errores en tiempo de diseño usando Error List 8. Ya vimos la forma en que se pueden detectar excepciones en tiempo de depuración; lo ideal, sin embargo, es percatamos de las excepciones antes de ejecutar los programas. En el caso de nuestro ejemplo el programa es correcto, pero los datos que el usuario introduce son los que pueden causar las excepciones. Hay otros tipos de excepciones: los errores de sintaxis —violaciones a las reglas de escritura en un lenguaje de pro gramación determinado— , junto con las referencias erróneas — el uso de elementos (variables, estructuras, clases, etcétera) que no han sido declarados o que no están dis ponibles dentro del alcance en el cual queremos utilizarlas— son el pan de cada día en las labores de desarrollo. 9. Hay una herramienta en Visual Studio, Error List, que permite ver los errores de sin taxis y las referencias erróneas en tiempo de diseño, es decir, durante la edición. 10. En Error List se muestran los errores (errors), alertas (warnings) y mensajes (messa ges) que se presentan en el código que estamos editando. Los errores son aquellas co sas que generarán la interrupción del programa en tiempo de depuración, las alertas son aquellos detalles que si bien no interrumpen la depuración, si son prácticas inade cuadas de programación. Los mensajes son los mensajes informativos proporcionados por Visual Studio, aplicables a lo que estemos editando. 11. Modifique la línea 12 de su código, cambiando el nombre de la variable N1 por N3. Al hacer esto se generarán múltiples problemas, dado que la variable N1 es utilizada en varias partes del programa y habrá quedado sin declararse. 12. Seleccione View - Error List (CtrlA, C trl-E) para ver la herramienta Error List.
2 Errors
; 0 W a rnings
Description *
i 0 M e ssa g e s
^
File
Line
Column
Pro>ect
1
¡Ñ a m e 'N I* is not declared.
M o d iie l. v b
14
13
Excepciones 1
O 2
Name 'N I' is not declared.
Module l.vb
17
25
Excepciones 1
Error List
>j lom m and W indow ¡ [¡U Output
www.FreeLibros.me
Capítulo 8. M a n e jo estructurado de excepciones
13. En Error List se muestran los errores que contiene el programa, el archivo físico don de se encuentran los problemas y la línea de código en se encuentra (la línea, la colum na y el proyecto al que pertenece). En la parte superior aparecen fichas en las que se puede seleccionar lo que queremos ver, sean errores (errors), alertas (warnings) o mensajes (messages). En nuestro caso sólo tenemos dos errores, que son reportados en Error List. 14. Error List mostrará los errores de toda la solución, por lo que es especialmente útil cuando modificamos librerías. De esta forma podemos percibir los efectos que tendrán nuestras modificaciones en otros programas que las consumen. 15. Si se hace doble clic en un error, Visual Studio trasladará el control a la posición en donde se encontró el mismo, lo que facilita enormemente la navegación en el código. 16. Haga doble clic en el error 2. Compruebe que se ha trasladado a la línea y la posición en donde se encontró el error. 17. Modifique la línea 12 de su código, y corrija el nombre de la variable que está ocasio nando el problema. Cambie N3 por N1 . 18. Guarde los cambios realizados en su solución. FIN DEL EJERCICIO*
Filtrado de excepciones Visual Basic proporciona mucha flexibilidad en el manejo de excepciones: posibilita tener rutinas genéricas, o bien, atender las excepciones de manera particular. También es posible seguir utilizando el objeto Err, que se utilizaba en versiones anteriores de Visual Basic.
Calificadores de excepción 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 proporciona una muy clara idea de lo que está sucediendo. En el caso del ejercicio 08.01, el calificador fue el siguiente: System.DivideByZeroException. ¿A alguien le queda duda de 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 don de cada clase lista 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:
www.FreeLibros.me
242
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
□ DivideByZeroException □ DLLNotFoundException □ IndexOutOfRangeException □ InvalidCastException □ OutOfMemoryException □ OverFlowException □ PlataformNotSupportedException □ UnauthorizedException
Cada clase tendrá las suyas y habrá que investigarlas de manera particular.
NOTA El editor de código de Visual Studio, al realizar la declaración Catch, sugiere a través de IntelliSense las excepciones válidas para lo que está desarrollando.
Objeto Err Visual Basic sigue proporcionando el objeto Err, utilizado en versiones pasadas de Visual Basic, con la limitación de que no se puede implementar el manejo estructurado de excep ciones (Structured Exception Handling) usando Try... Catch... Finally. . . , y el ma nejo de errores (Error Handling) usando On Error, de manera simultánea. 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, utilizando la propiedad Number.
Tipos de filtrado de excepciones Cuando al definir un bloque Catch utilizamos un calificador de excepción para capturar el problema, estamos creando un manejador de excepciones basado en tipos (Type-Filtered Exception Handler). Cuando al definir un bloque Catch no utilizamos un calificador de excepción, sino una condición diversa, estamos creando un manejador de excepciones del usuario {User-FiIte red Exception Handler), utilizando el estatuto When. En un bloque Try se pueden especificar tantos bloques Catch como se desee. Entre más bloques Catch se tengan, más particular será el manejo de excepciones.
www.FreeLibros.me
Capítulo 8. M a n e jo estructurado de excepciones
243 |
Ejercicio 8.2 Filtrado de excepciones
En este ejercicio se protegerá un código determinado, utilizando Try... Catch... Fi n a lly -----El programa solicita dos números (un dividendo y un divisor) y a partir de ahí se intentará una división. Como sabemos, no se puede dividir un número entre cero. Difie re del ejercicio anterior en que en éste no se manejarán las excepciones de manera genéri ca, sino particularmente, a través del filtrado de excepciones. Deliberadamente se causará una excepción al tratar de dividir entre cero, o proporcionan do un valor que no es numérico. 1. Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). 2. Agregue a su solución un proyecto Windows - Consolé Application, llamado Excepciones2.
3. Edite el programa de tal forma que aparezca como sigue:
= _ J C o d ific a ció n de Excepciones2 - Modulel.vb 1 2
Option Explicit On Option Strict Off
3 4 5
Imports System.Console
6
Module Modulel
7 8
9 10 11 12
13 14 15 16 17 18 19 20
Sub Main() Dim Satisfactorio As Boolean = True Try WriteLine("Prueba de manejo de Excepciones") Dim N1, N2, Resultado As Byte Write("Dame el dividendo:") N1 = ReadLine() Write("Dame el divisor:1') N2 = ReadLine() Resultado = N1 / N2 WriteLine("Resultado:" & Resultado.ToString) Catch eProblema As System.DivideByZeroException WriteLine(" » » » > Se trató de dividir entre cero")
www.FreeLibros.me
244
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
WriteLine("Error:" & Err.Number.ToString) Satisfactorio = False Catch eProblema As System.InvalidCastException WriteLine(" » » » > La conversión cast no es posible") WriteLine("Error:" & Err.Number.ToString) Satisfactorio = False Catch When Err.Number = 6 WriteLine(" » » » > Manejo fuera de límite (Overflow)") Satisfactorio = False Finally If Satisfactorio Then WriteLine("Programa sin problemas") Else WriteLine("Programa con problemas.") End If End Try Write("Pulse INTRO para continuar") ReadLine() End Sub End Module
Ejecución g u ia d a d e E x c e p c io n e s 2 - M o d u le l. v b
4. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realiza do en la solución (teclas Ctrl-M ayús-S). Inicie la depuración para comprobar el com portamiento de su programa (F5). 5. Es importante tomar en cuenta que este programa no es type safe dado que tiene la in dicación Option S tr i c t Of f (línea 2); esto porque intentaremos conversiones tipo cast. También es importante ver que las variables de trabajo son de tipo Byte (línea 12) y, por tanto, admiten sólo un dominio 0 a 255 sin signo. 6. Proporcione el valor 10 como dividendo y 0 como divisor. 7. Si colocamos el cero como divisor, al querer resolver la línea 17, el programa determi na que eso no es posible y genera una excepción. La excepción es de tipo DivideByZe roException, por lo que el control del programa se trasladará al bloque Catch que, de manera particular, hace referencia a dicho tipo de excepción. El control del programa irá al bloque Catch que refiere el tipo de excepción DivideByZeroException en la línea 19. Se ejecutarán las líneas 20, 21 y 22, y luego se procede rá a ejecutar el bloque Finally. Se ejecuta el bloque Catch que corresponde.
www.FreeLibros.me
Capítulo 8. M a n e jo estructurado de excepciones
La línea 21 muestra el número de error del que se trata, utilizando para ello la propie dad Number del objeto Err, que también funciona en Visual Basic (en forma mejorada). La línea 20 muestra un mensaje particular para la excepción de la que se trata; éste es el mayor beneficio de filtrar los errores, ya que si se tienen excepciones diferentes, es ló gico que se necesiten acciones diferentes para manejarlas. El manejo genérico de excep ciones trata a todas por igual, lo que resta precisión a la función de depuración de pro gramas. El control del programa, agotado el bloque Catch particular para la excepción que se provocó, seguirá en el bloque Finally. Es importante ver cómo la línea 9 declara una variable de tipo Boolean (Satisfacto rio), que nos servirá para saber si el proceso fue satisfactorio (True) o si presentó ex cepciones (False). Inicialmente se considera que el proceso es satisfactorio (True). En caso de que suceda alguna excepción, se cambiará el valor de Satisfactorio a False; con dicho valor le daremos flexibilidad al código del bloque Finally; anteriormente, Finally no diferenciaba si el programa había causado excepción o no. Nosotros le da mos esa funcionalidad con la variable de apoyo, colocando un condicional que ejecute cierto código si presentó excepciones, y otro bloque de código distinto si no las causó. Si todo ocurrió como se esperaba, la salida será la siguiente: Prueba de manejo de Excepciones Dame el dividendo:10 Dame el divisor:0 » » » > Manejo fuera de límite (Overflow) Programa con problemas. Pulse INTR0 para continuar
8. Ejecute la aplicación nuevamente (tecla F5), proporcione el valor 10 como dividendo y A como divisor. Vea cómo el programa diferencia entre los tipos de excepciones que pueden ser causa das en un proceso. Al detectar que no es posible hacer la conversión tipo cast del valor “A” a su equivalente Byte, se causa el error. Si todo ocurrió como se esperaba, la salida será la siguiente: Prueba de manejo de Excepciones Dame el dividendo:10 Dame el divisor:A » » » > La conversión cast no es posible Error:13 Programa con problemas. Pulse INTR0 para continuar
www.FreeLibros.me
246
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
9. Ejecute la aplicación nuevamente (tecla F5) y proporcione el valor 1000 . Vea cómo el programa diferencia entre los tipos de excepciones que pueden ser causa das en un proceso. Al detectar que 1000 excede el límite de tipo Byte, se genera la ex cepción. Si todo ocurrió como se esperaba, la salida será la siguiente. Prueba de manejo de Excepciones Dame el dividendo:1000 » » » > Manejo fuera de límite (Overflow) Programa con problemas. Pulse INTR0 para continuar
FIN DEL EJER C IC IO *
Lanzamiento de excepciones propias Ciertos casos requieren considerar que un proceso, no violatorio de ninguna de las reglas del lenguaje, tiene un comportamiento equivocado, susceptible de ser considerado un error. En ese caso, es recomendable tener elementos suficientes para provocar excepciones cuan do se detecta algo indeseable, como si se tratara de una excepción reconocida por el len guaje. En términos generales, sabemos que cuando se produce una excepción, el CLR genera una instancia de la clase System.Exception automáticamente. La instanciación, en ese caso, es realizada en tiempo de ejecución por el mismo sistema. Nada nos impide instanciar nosotros: la forma en que podemos hacerlo es a través del uso de Throw New Exception, con la siguiente sintaxis: Throw New Exception("Mensaje de error")
Ejercicio 8.3 Lanzamiento de excepciones definidas por el usuario En este ejercicio se protegerá un código determinado, utilizando Try... Catch... Fi nally -----El programa solicita dos números (un dividendo y un divisor) y a partir de ahí se intentará una división. Como sabemos, no se puede dividir un número entre cero. Este ejemplo se diferencia de los anteriores en que nos anticiparemos para lanzar una excepción antes de que el programa lo haga.
www.FreeLibros.me
Capítulo 8. M a n e jo estructurado de excepciones
Deliberadamente se causará una excepción al tratar de dividir entre cero, y se capturará la excepción antes de que se realice la división (cuando anteriormente se manifestaba la ex cepción). 1. Abra la solución Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (ar chivo de extensión sin). 2. Agregue a su solución un proyecto Windows - Consolé Application, llamado Excepciones3.
3. Edite el programa de tal forma que aparezca como sigue:
~ I C o d ific a ció n
de Excepciones3 - Modulel.vb
1 2
Option Explicit On Option Strict On
3 4 5
Imports System.Console
6
7
Module Modulel
8
9 10 11 12
13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 29 30 31
Sub Main() Try WriteLine("Prueba de manejo de Excepciones") Dim N1, N2, Resultado As Decimal Write("Dame el dividendo:") N1 = CDec(ReadLine()) Write("Dame el divisor:") N2 = CDec(ReadLine()) If N2 = 0 Then Throw New Exception("Divisor no puede ser cero") End If Resultado = N1 / N2 WriteLine("Resultado:" & Resultado.ToString) Catch eProblema As Exception WriteLine("> Problema: 11 & eProblema-Message) Finally Write("Pulse INTRO para continuar") ReadLine() End Try End Sub End Module
www.FreeLibros.me
248
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Ejecución g u ia d a d e Excepciones3 - Modulel.vb 4. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realiza do en la solución (teclas Ctrl-Mayús-S). Inicie la depuración para comprobar el com portamiento de su programa (tecla F5). 5. Proporcione el valor 10 como dividendo y 0 como divisor. Al intentar resolver la línea 20, el programa determinaría que eso no es posible, y generaría una excepción. No esperamos a que el programa señale la excepción: sabemos que si el divisor es cero la operación no puede ser correcta. Con eso en mente, decidimos anticipamos,y en la lí nea 17 evaluamos si N2 (el divisor) es cero, en cuyo caso, lanzaremos una excepción nueva, creada por nosotros (instanciamos System.Exception), tal como lo muestra la línea 18. El control del programa se traslada al bloque Catch, y es manejada como cualquier otra excepción. Si todo ocurrió como se esperaba, la salida será la siguiente. Prueba de manejo de Excepciones Dame el dividendo:10 Dame el divisor:0 > Problema: Divisor no puede ser cero Pulse INTR0 para continuar
FIN DEL EJER C IC IO *
www.FreeLibros.me
Capítulo 8. M a n e jo estructurado de excepciones
www.FreeLibros.me
249 |
250
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
T
e r m in o l o g ía
Calificadores de excepción, 241
de software, 233
Manejo estruc turado de excep ciones, 234
System. Exception, 236 Throw, 246
Catch, 235
Excepciones, 233
Código protegido,
Exit, 235
Message, 237
ToString, 237
Finally, 235-6
SHE, 234
Err, 234, 242
InnerException, 237
Source, 237
Try, 235 Try... Catch... Finally,
Error List, 240
Manejador de
StackTrace, 237
235
Errores, 233
excepciones
Excepciones
basado en tipos,
de hardware, 233
242
Structured Exception Handling,
del usuario, 242
234
P r e g u n t a s ____________________________________________________
8.1 ¿Para qué sirven los bloques Try Catch Finally? 8.2 ¿En qué consiste el filtrado de excepciones? 8.3 ¿Qué son los calificadores de excepción y para qué sirven? 8.4 ¿De qué manera es posible lanzar excepciones personalizadas?
www.FreeLibros.me
235
Capítulo 8. M a n e jo estructurado de excepciones
Notas:
www.FreeLibros.me
252
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Exa m en
r á p id o d e l c a p ít u l o
P arte 1: M a r q u e co n u n a c r u z el in c iso q u e r e s p o n d a a la p re g u n ta .
1. Son violaciones a las reglas sintácticas o de alcance de un lenguaje de programación: a) Errores b) Excepciones c) Bugs 2.
3.
Es la capacidad que tiene un lenguaje para permitir manejar excepciones a través de una estructura de control que protege bloques de código: a) Manejo estructurado de excepciones b) Control de errores c) Depuración Es la clase de .NET a través de la cual se manejan las excepciones: a) Object.Exception b) e.Exception
c) System.Exception 4. Son los nombres de excepciones reconocidos internamente por .NET: a) Calificadores de excepción b) Excepciones nominadas c) Excepciones basadas en tipo 5.
Filtrado de errores en el que, utilizando Catch, se especifica una condición usando where: a) Filtrado de excepciones basado en tipos b) Filtrado de excepciones del usuario
c) Filtrado condicional P a rte 2: C o lo q u e en la lín e a la le tra «F» si el e n u n c ia d o es f a ls o y « V » si es ve rd a d e ro .
6. Las excepciones tienen mayor alcance que los errores.
_______________
7. La ejecución del código F i n a l l y se llevará a cabo sólo si se produce una excepción.
______________
8. Visual Basic es compatible con E rr, utilizado en versiones anteriores. 9. Throw sirve para provocar excepciones.
10. T ry y On E r r o r pueden convivir en un mismo procedimiento o método.
www.FreeLibros.me
Capítulos: 9
F u n d a m e n t o s d e la
Parte 3
p ro g ra m a c ió n o r ie n t a d a a o b je to s 10 Clases, m é t o d o s y p ro p ie d a d e s
Programación orientada a objetos
11 H e re n cia y p o lim o rfism o
Herramientas de Visual Studio revisadas: 1.Form Designen. 2.
Se le ctor d e d o c u m e n to s activos.
3.Class Designer. 4.Class Diagram. 5.Class View.
En e sta p a rte del lib r o se p re se n ta n lo s co n c e p to s d e la p r o g r a m a c ió n o r ie n t a d a a o b je to s (P O O ) u tiliz a n d o V is u a l Basic. A p ro v e c h a re m o s las ca p a c id a d e s d e e ste le n g u a je y las h e rra m ie n ta s d e V is u a l S t u d io p a ra la creación d e o b je to s d e n e g o c io s y clases, q u e p o ste rio rm e n te p o d rá n ser u tiliz a d o s d e sd e c u a lq u ie r aplicación , h a c ie n d o re a lid a d el e s q u e m a d e d e s a rr o llo re u t iliz a n d o el c ó d ig o . A p r e n d e r á a e n c a p su la r clases, utiliza r la h e re n c ia d e fu n c io n a lid a d y el m a n e jo c o n te x t u a liz a d o d e p ro c e d im ie n to s p o r m e d io del p o lim o rfism o . N u e stra re fle x ió n es la sig u ie n te : la b ú s q u e d a de t ie m p o lib re lle v a a las p e rso n a s a se r creativas, p a ra h a ce r m á s co sas co n el m ín im o e sfu e rzo . Sin e m b a rg o , n o to d a s las p e rso n a s co n estas características s o n creativas; s ó lo a q u e lla s co n la c u rio s id a d y lo s c o n o c im ie n to s su fic ie n te s p o d rá n u tiliza r e sa c re a tiv id a d p a ra re a liza r co sas q u e tra b a je n p a ra facilitarle s la e xistencia. El e n fo q u e o r ie n t a d o a o b je to s n o s lle v a a id e n tifica r a lg o q u e y a h e m o s h e c h o y re u t iliz a rlo p a ra h a ce r n u e stro s d e sa rro llo s m e n o s e xte n u a n te s.
www.FreeLibros.me
www.FreeLibros.me
UOWü C a p ít u l o
9
1
ó
A i
4
1 fe
Fundamentos de la programación orientada a objetos Objetivos: Aprender los conceptos fundamentales de la programación orientada
a objetos, así como las ventajas de dicha orientación. 1. Conocerá los términos fundamentales de la programación orientada a objetos: clases, objetos, campos, propiedades, métodos y eventos. 2. Entenderá en qué consiste el encapsulamiento, la herencia y el polimor fismo. 3. Aprenderá las capacidades de adaptación de los objetos: Overloading, Overriding y Shadowing.
www.FreeLibros.me
256
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido Términos básicos de P O O .................................................................. Oases y o b je to s ....................................................................... Campos, propiedades, métodos y eventos .................................... Encapsulamiento (e n capsu lation )............................................... Herencia (inheritance)............................................................... Polimorfismo (polym orphism )..................................................... Overloading, Overriding y Shadowing ......................................... Elementos esenciales de los objetos que permiten su programación ......... Id e n tid a d ................................................................................ E s t a d o ................................................................................... C om p ortam ie n to......................................................................
Comprobación de la identidadel estado y el comportamiento de objetos.........................................
> >
Instanciación de objetos en Visual Studio ................. Modificación de la identidad de los objetos en Visual S t u d io ........................................................ > Programación de comportamientos desde Visual S t u d io ........................................................ M a p a mental del capítulo ................................................................ Term inología................................................................................... P re g u n t a s ....................................................................................... Examen rápido del c a p ít u lo ...............................................................
www.FreeLibros.me
257 258 258 259 261 263 264 265 265 266 269
269 269 273 274 275 276 276 278
Capítulo 9. Fundam entos de la program ación orientada a objetos
El presente capítulo expone los conceptos generales de la programación orientada a ob jetos (POO). Estos conceptos están relacionados con los objetos en sí y con su relación con otros objetos.
Todavía se habla de la POO con entusiasmo, sobre todo cuando quien lo hace no ha pro gramado con lenguajes como C++ o Java. Es necesario destacar que hace mucho tiem po el tema dejó de ser una novedad, y, sin embargo, por alguna extraña razón, se sigue viendo a dicho modelo de programación como “lo nuevo” (sobre todo entre aquellos que nunca han desarrollado en POO). Quizá tenga mucho que ver que el lenguaje más utilizado en el mundo, Visual Basic en su versión 6, no estaba orientado a objetos; cualquiera que programara en POO formaba par te de un grupo más reducido y diferente, lo que confiere siempre un cierto grado de espe cialidad. Hasta hace poco, un programador en C++ era más elogiado que un programador de Visual Basic, en gran medida porque había menos programadores de C++ que de Visual Basic (simple economía: a menor oferta, mayor el precio). Ahora las cosas están cambiando, ya que Visual Basic se integra al mundo POO, toma de sí mismo la simplicidad de su código, y adopta de la plataforma .NET capacidades que eliminan las limitaciones que anterior mente tenía, ganando flexibilidad y potencia, y cubriendo aspectos que antes eran más sen cillos en otros lenguajes como C++. Si se pregunta qué es mejor, el enfoque de procedimientos, el de eventos o el orientado a objetos, la respuesta es contundente: depende de lo que se quiera hacer. Hay cosas más sen cillas de imple mentar en una orientación que en otra, así que no se sienta mal por no ha ber aprendido a programar en POO con anterioridad. Quizá no lo haya necesitado. Aunque la experiencia previa en programación es muy útil al aprender POO, no todo el que programa Visual Basic 6.0 podrá programar en Visual Basic sin modificar algunos paradig mas. Es importante, por no decir que indispensable, comprender el marco teórico del mo delo orientado a objetos para ser un buen programador en POO.
Términos básicos de POO Ya hemos dicho que en Visual Basic casi todo es un objeto. Por ese motivo, es importante tener los conceptos relacionados con la programación orientada a objetos muy bien domi nados. Los conceptos que vea en este capítulo son fundamentales para entender la progra-
www.FreeLibros.me
258
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
mación orientada a objetos en Visual Basic; léalos cuantas veces sea necesario hasta que los comprenda plenamente.
Clases y objetos Una clase es una definición formal de un tipo de objeto. La clase define qué datos forma rá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 funcio nal de la clase. A la acción de generar un objeto a partir de una clase, se le denomina instanciació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 (como era necesario hacer, por ejemplo, en C++), debido a la existencia del garbage c o Héctor, que es el elemento de CLR que se encarga de eliminar objetos no utilizados a fin de libe rar los recursos que utilizan.
Campos, propiedades, métodos y eventos Las clases, y por tanto los objetos que se derivan de ellas, son un conjunto de datos y com portamientos; tanto las clases como los objetos están formadas por campos, propiedades y métodos. Los campos y las propiedades representan la información que un objeto contiene. Los campos ifields) son elementos de una estructura que actúan como valores equivalen tes, nominados. Las propiedades (properties) son muy parecidas a los campos en el sentido de que alma cenan valores; su implementación, sin embargo, es más formal, ya que para leer y asignar valores a las propiedades es necesario el uso de las instrucciones P r o p e r t y Get y P r o p e r t y S e t, las cuales proporcionan un mayor control con respecto a la forma en la que los valo res pueden ser asignados o leídos. Cuando se utilizan propiedades, la lectura y la asignación de valores son directas, lo que implica que entre el programa que usa las propiedades y el valor almacenado existe una ca pa intermedia de control, que ayuda a aislar (isolate) a la aplicación de los valores que uti lizará, permitiendo que dichos valores puedan ser validados antes de que se lean o asignen.
www.FreeLibros.me
Capítulo 9. Fundam entos de la program ación orientada a objetos
259 |
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.
s 1
Figura 9.1
Estructura de un objeto
_
M iem b ro s Propiedades
l
A Objeto )
Campos
m
V
M étodos
b
7^
Eventos
V
_______________
/
La interacción que tiene el usuario o programa con un objeto provoca internamente una in teracción de dicho objeto con otros, que puede ser bidirectional, ya sea que el objeto reci ba 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.
Encapsulamiento (encapsulation) Para que una aplicación realmente esté orientada a objetos debe admitir las cualidades de en capsulamiento, herencia y polimorfismo. Estas tres cualidades son representativas de POO.
www.FreeLibros.me
260
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
El encapsulamiento es la capacidad que tiene un objeto para almacenar datos y procedi mientos, como una unidad funcional, y permitir el acceso a ellos sin que los demás obje tos tengan la necesidad de conocer cómo se integran dichos datos y dicho comportamien to dentro del objeto. Usted ya sabe que los objetos se hacen peticiones entre sí a través de mensajes, y que un objeto puede hacer uso de otros objetos. Imagine que un objeto (objeto A) realiza un cálcu lo financiero complejo. Imagine que otro objeto (objeto B) realiza un cálculo que determi na el monto de los gastos de la compañía en un periodo determinado. Resulta que el objeto A, para desarrollar sus operaciones, necesita la información que pro duce el objeto B, y para obtener dicha información se comunica con B enviando un men saje (mensaje X). Como respuesta, el objeto B le envía al objeto A la contestación a través de un mensaje (mensaje Y). La persona que desarrolló el objeto B se da cuenta de que el cálculo que realiza el objeto puede mejorarse. Procede a cambiar el código (comportamiento), haciéndolo más eficien te, reduciendo el tiempo de respuesta a la mitad. Como consecuencia del encapsulamiento, el objeto A no necesita saber qué hace el objeto B para proporcionar la información que se le pide. El encapsulamiento permite que el es tado o el comportamiento de un objeto pueda modificarse para darle mayor o mejor fun cionalidad al objeto, sin afectar a otros objetos asociados. El objeto A sigue enviando el mensaje X al objeto B, y el objeto B le sigue respondiendo con el mensaje Y, sólo que en la mitad del tiempo que antes. El encapsulamiento sólo debe respetar una regla: al modificar un objeto, éste debe seguir aceptando los mismos mensajes de petición, y enviando los mismos mensajes de respues ta. Fuera de eso, el objeto puede ser una caja negra para los demás desarrolladores, sin que ello perjudique la funcionalidad de la aplicación. Las ventajas que proporciona el encapsulamiento a los programadores son las siguientes: □ Facilita la m odularidad.
Un módulo es un bloque de código que desarrolla un pro ceso específico. La modularidad es la capacidad que se tiene de dividir los procesos en múltiples procesos más pequeños. Cuando se inicia un proyecto de programación orientada a objetos, cada objeto actúa como un módulo; a cada desarrollador se le pide que desarrolle ciertos objetos, que obe deciendo a determinados mensajes de petición, proporcionen determinados mensajes de respuesta. Al final del proyecto se integran todos los objetos, que de forma complemen
www.FreeLibros.me
Capítulo 9. Fundam entos de la program ación orientada a objetos
taria se dan servicio entre sí; en un momento dado, si a una persona se le ocurre modi ficar un objeto que otra persona está utilizando, esto no impacta negativamente, porque los mensajes que se comunican los objetos no deben de sufrir variación. □ M antiene la información oculta.
El objeto puede por sí solo encargarse de modi ficar los valores de sus propiedades; además, para hacer uso del objeto no es necesario conocer cómo realiza las operaciones (comportamiento). Sólo el objeto se encarga de manejar su estado y comportamiento. Hay procesos tan complejos, importantes y confidenciales que sólo el desarrollador del objeto está autorizado para conocerlos. Imagine que tiene un objeto que se encarga de codificar y decodificar información confidencial en la organización; por ejemplo, si to dos los programadores que utilizaran el objeto pudieran conocer los pormenores del al goritmo de codificación y decodificación, no estaríamos seguros en qué momento podría ser conocido por todos, y, por tanto, copiado y vulnerado. El encapsulamiento elimina la necesidad de que otros conozcan cómo está codificado un objeto y, por tanto, favore ce la confidencialidad de la implantación de los procesos.
Herencia (inheritance) La herencia describe la capacidad de crear una nueva clase basada en una existente. La clase a partir de la cual se generará la nueva recibe el nombre de clase base (base class); la nueva clase, llamada clase derivada (
como son color, tipo de transmisión, tipo de combustible, etcétera. Además, tendrá defini dos los métodos aplicables para todos los vehículos automotores; por ejemplo, encender o apagar el motor. Hay un tipo de vehículos automotores que sirven para carga de materiales (vehículo de car ga); en ellos, la capacidad de carga en toneladas, las dimensiones máximas de la carga y la necesidad de refrigeración de la carga son importantes, pero, ¿son esos datos importantes para un vehículo que sólo es utilizado para transportar personas? La respuesta es que no. Tenemos las siguientes alternativas de solución para manejar la información del ejemplo: □ Definir la clase VehículoAutoMotor con todas las características posibles para todos los vehículos automotores posibles; eso sobrecargaría a la clase de muchas propiedades no aplicables para todos los vehículos, complicando el trabajo de afirmar o negar las carac
www.FreeLibros.me
262
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
terísticas aplicables a un vehículo en particular. En realidad, todo está siendo manejado en un mismo objeto, tal y como sería en una programación procedural. □ Definir una clase independiente de VehículoAutoMotor; por ejemplo, VehículoAutoMotorCarga, que contenga todas las propiedades y los métodos que requieren ser espe cificadas para un vehículo automotor de carga. Obviamente, muchas de las característi cas de los vehículos automotores de carga son comunes para todos los vehículos automotores. Eso implicaría una doble codificación (codificación redundante), que re vela que, no obstante que ya teníamos codificados los pormenores de los vehículos au tomotores, no reutilizamos dicho código, pues creamos uno enteramente nuevo. En es ta alternativa tampoco funciona la herencia. □ Definir una clase independiente, por ejemplo VehículoAutoMotorCarga, que contenga sólo aquellas propiedades y métodos no definidos en VehículoAutoMotor. La nueva clase (VehículoAutoMotorCarga) se generaría a partir de una clase base (Vehículo AutoMotor), aprovechando toda su codificación. Esta alternativa implica un uso funcio nal de la herencia, en donde se tiene una clase base y una clase derivada. Figura 9.2
VehículoAutoMotor =
Herencia
Nüm eroPasajeros Tipotransm isión Color TipoCom bustible ^ *
E n c e n d e rM o to r A p a g a rM o to r
*n'
A lE n c e n d e r A lA p a g a r
■
VehículoAutoMotorLujo = VehículoAutoMotor + Blindaje Sistem aA ud lo Sistem aV ideo ^ Personal Iza rEspejos
VehículoAutoMotorCarga VehículoAutoMotor +
=
rf-j C apacidadToneladas Capacid ad D Im en slón CapacidadRefrigeración ^ RefrigerarCarga
n *
A lE n c c n d c r A u d io A lA p a g a r V íd e o
Las ventajas que proporciona la herencia para los programadores de software son las si guientes:
www.FreeLibros.me
Capítulo 9. Fundam entos de la program ación orientada a objetos
263 |
□ 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 ga rantiza que de inicio las clases ya tienen la funcionalidad de otras anteriormente crea das. Sólo se estará desarrollando nueva funcionalidad, evitándose el código redundante.
□ Jerarquía de clases.
Es posible realizar una jerarquía que distinga procesos genera
les y específicos. La figura 9.2 muestra de manera conceptual cómo, a partir de una clase base, surgen clases derivadas que pueden disponer de todas las propiedades, métodos y eventos de la clase ba se, y que además incluyen las características particulares de aquello que no es posible re presentar usando solamente lo definido en la clase base. En la jerarquía de clases, la clase base no requiere de las clases derivadas, pero las clases derivadas sí requieren de lo defini do en la clase base.
Polimorfismo (polymorphism) El polimorfismo es la capacidad de manejar múltiples clases que pueden ser utilizadas de manera intercambiable a través de una misma implementación (nombre de clase). El poli morfismo es esencial para la programación orientada a objetos, ya que permite, a través de un mismo nombre de clase, agrupar diferentes funcionalidades, dependiendo de las propie dades y métodos que se utilicen al momento de invocarlas.
NOTA En Visual Studio puede verse claramente esta capacidad. Si en alguno de sus program as utili za, por citar un ejemplo, la función Val, que convierte a número una expresión, aparecerá una referencia com o sigue:
Val (|____________________________ 1
of 3 ▼
InputStr:
Val
(InputStr As String)
As Double
Any va lid String expression.
La misma implementación (Val) puede comportarse de tres maneras, dependiendo del a rgu mento que reciba. Si la función recibe un argum ento String, realizará la conversión y devol verá un valor de tipo Double; si recibe un argum ento de tipo Char, devolverá un valor de tipo Integer; y si recibe un argum ento Object, devolverá un valor de tipo Double. El program ador no tendrá que preocuparse por saber qué clase ha de utilizar en caso de proporcionar un ar gum ento String, Char u Object. El polim orfism o se encarga de realizar la selección adecuada.
www.FreeLibros.me
264
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Imagine que tiene una aplicación que controla las ventas de un negocio. Puede ser que tenga un objeto llamado Regist raVent a,que se encargue de almacenar en una base de datos los por menores de la venta. Suponga que hay un objeto llamado ActualizaLíneaCródito que se en carga de actualizar la línea de crédito de los clientes que compran en el establecimiento; co mo ha de suponer, las acciones que realizará ActualizaLíneaCrédito tienen que ver si la compra se realiza a crédito o de contado. En enfoque procedural, sería necesario hacer dos pro cedimientos distintos, de diferente nombre, para controlar cada una de las alternativas. En POO se pueden generar dos clases distintas, que contengan cada una de las alternativas de la actualización de la línea de crédito; la diferencia estriba en que para el programa só lo existirá una. Será la misma plataforma de ejecución la que determine, con base en los datos proporcionados, qué clase es la que se empleará.
Overloading, Overriding y Shadow ing Para implementar el polimorfismo, hay que conocer tres conceptos básicos: Overloading, Overriding 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 proporcionados. Como sabe, los argumentos van entre paréntesis y separados por comas, después del nom bre del método o función; por tratarse de una lista de valores, estamos ante la presencia de una serie de valores.
NOTA La implementación en programación de la term inología descrita en este capítulo se dem os trará en el capítulo siguiente.
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. Las propiedades y métodos con característica Overriden son utilizados para reemplazar una propiedad o método que, habiendo sido heredado de una clase base, no es lo apropiado pa ra la clase derivada. Esto permite sustituir elementos heredados de la clase base, con aque llos que la clase derivada realmente necesita.
www.FreeLibros.me
Capítulo 9. Fundam entos de la program ación orientada a objetos
La única restricción que se tiene es que los miembros Overriden deben aceptar el mismo número de argumentos y devolver los mismos valores, respetando los tipos de datos de la clase base, a efecto de que el encapsulamiento de los objetos sea posible. Los miembros con característica Shadowed son aquellos que reemplazan localmente a otros miembros existentes, dentro de un alcance diferente al original.
Elementos esenciales de los objetos que permiten su programación Al generar instancias de una clase, estamos generando un objeto. Una vez que los objetos existen, es posible utilizarlos para obtener funcionalidad de la aplicación. Es importante que nos hagamos a la idea de que un objeto, una vez que es creado, ya posee vida propia y es independiente de todos los demás. Los objetos tienen tres características principales: □ Identidad □ Estado □ Comportamiento
Identidad La identidad del objeto es su capacidad de tener un nombre que lo identifica y diferencia de los demás. No podemos crear ningún objeto sin asignarle un nombre para su identificación; de ser así generaríamos un elemento al cual no podríamos invocar de ninguna manera. Al momento de instanciarse, todos los objetos son exactamente iguales a la clase de la cual derivan; sólo se diferenciarán por su identidad. En Visual Basic los objetos poseen una propiedad llamada Ñame, a través de la cual se manifiesta su identidad. A la propiedad Ñame también se le conoce como propiedad de iden tidad. La propiedad Ñame puede ser utilizada en tiempo de ejecución para evaluar la identidad de un objeto por su nombre, y no por su identificación en el programa (nombre de la variable objeto, a lo que se conoce como nombre programático). El valor que posee la propiedad Ñame es de tipo S t r i n g , lo que facilita mucho su utilización en los procesos que estemos codificando. Los programadores de Visual Basic en su versión 6 tal vez no le dieran importancia al he cho de que todos los controles que se utilizaban en las aplicaciones debían ser referidos por
www.FreeLibros.me
266
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
su nombre programático, pues era la única posibilidad que había para identificar los ele mentos de un programa. Una vez realizada la codificación, cambiar la identidad a un con trol (modificar la propiedad Ñame) era impensable, ya que sería necesario modificar el có digo para admitir el nuevo nombre asignado. En Visual Basic queda claramente definido que se tiene un nombre programático (nombre de los objetos) y una identidad de los objetos, en la propiedad Ñame.
Estado El estado de un objeto es la situación de forma y 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 sus propiedades. Como sabemos, las propiedades son las características particulares del objeto y especifican su nombre, posición, apariencia y hasta sus capacidades de interacción con el usuario y otros objetos. Un objeto puede estar disponible o no para su uso en una interfaz (Enabled=Trué o Ena bled=False); puede tener un ancho de 10 o 20 píxeles (Width=i0 o Width=20). Si cam biamos el valor de cualquiera de las propiedades, como podría ser incrementar el ancho del objeto de 10 a 20 píxeles, ello representa una modificación de estado. La figura 9.3 nos invita a imaginar el núcleo de un objeto como un conjunto de propieda des establecidas; vea cómo la identidad del objeto también forma parte del estado del mis mo, pues Ñame es una propiedad, al igual que las de posición, apariencia y otras.
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 operativo, el objeto podrá comportarse de diferente forma. El comportamiento de un objeto se presenta por la posibilidad de mandar llamar a ejecu ción: □ Los métodos □ Los procedimientos de evento □ 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.
www.FreeLibros.me
Capítulo 9. Fundam entos de la program ación orientada a objetos
Los procedimientos de evento son aquellos procedimientos que le suceden a un objeto co mo respuesta a la interacción que tienen con el usuario u otros objetos. El objeto tiene un conjunto de eventos que reconoce, y usted como desarrollador lo único que hace es decir le a su programa a) que quiere que un objeto determinado sea sensible a los eventos que le sucedan (especificación W ith E ven ts al momento de la declaración), b) elaborar un proce dimiento y c) especificarle a dicho procedimiento que será ejecutado en caso de que le su ceda el evento a alguno de los objetos que maneje (handles). En versiones anteriores de Visual Basic, un procedimiento de evento podía servir sólo pa ra manejar las acciones que deberían suceder cuando a un objeto determinado le sucedía un evento determinado; de hecho, el nombre de los procedimientos de evento estaba for mado por el nombre del objeto y el nombre de evento, separados por un guión bajo. Había controles para los cuales se aplicaban las mismas validaciones (por ejemplo, que los cua dros de texto no se dejaran vacíos); no obstante que el proceso a realizar era el mismo pa ra todos los cuadros de texto, a cada uno de ellos se le debía definir un procedimiento de evento. Algunas cosas cambiaron en Visual Basic. Un procedimiento de evento puede manejar un mismo evento para uno o más objetos; por ese motivo, el nombre asociado a un solo obje to y un solo evento ya no tiene sentido. Ahora el nombre del procedimiento de evento pue de ser el que sea. La única cosa que debemos respetar son los argumentos implícitos. Los procedimientos pueden admitir argumentos; con base en ellos es posible modificar el resultado del proce samiento o el valor que devuelven (en el caso de las funciones). Los argumentos implíci tos son aquellos que son declarados por Visual Basic de manera automática; en la declara ción de este tipo de argumentos el programador no participa más que como espectador y usuario. Cada evento podrá exigir la presencia de los argumentos implícitos que necesita para tra bajar; cuando nosotros declaramos un objeto especificando que queremos que sea sensible a eventos (W ithEvents), 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, el que 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; no dependen de los eventos que pueden sucederle al objeto, ni requieren estar predefinidos en ninguna clase: son la forma más pu ra de codificación. Hace muchos años, cuando nadie hablaba aún de objetos ni de eventos, los procedimientos y funciones definidos por el usuario ya existían.
www.FreeLibros.me
268
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
NOTA A lgun os desarrolladores, para no estar preocupándose respecto a qué objetos permitirán ma nejo de eventos y cuáles no, colocan la especificación W it h E v e n t s a todos los objetos. A u n que es una form a simple de quitarse problemas, no es lo más estructurado; deja ver que el program ador no conoce a profundidad el com portam iento que tendrá su interfaz. Sugerim os colocar W it h E v e n t s sólo a los objetos que realmente manejarán procedimientos de eventos.
La figura 9.3 muestra un panorama completo de la composición de un objeto. El círculo del centro es el estado del objeto. Dentro del estado se encuentra la identidad, pues la propiedad de identidad forma parte del estado. Alrededor del estado del objeto es tán las formas de comportamiento, que mantienen un diálogo con dicho estado, pues los métodos, procedimientos de evento y procedimientos de usuario pueden modificar el esta do, y éste puede determinar la disponibilidad de las formas de comportamiento. 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.
F ig u r a
9.3 METODOS
Identidad i
Estado y comportamiento
N am e PROCEDIMIENTOS DE EVENTO
;
P o s ic ió n
Yj.W; dth, H eight !
y
----1 Hide Show ^ X I Move-
A.partençia;
Click M o u s e O ver V a lid a te
I Font, BackGroundcolor: Capacidad de Interacción Enabled, CausesValidationS
PROCEDIMIENTOS DE USUARIO
Calcular( ) Enlac& BD ()
Corra r()
www.FreeLibros.me
Capítulo 9. Fundam entos de la program ación orientada a objetos
1C
269 i
Ejercicio 9.1 Comprobación de la identidad, el estado y el comportamiento de objetos
En este ejercicio se comprobará la identidad, el estado y el comportamiento de un objeto. 1. 2.
Abrala solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). Agregue a su solución un proyecto Windows - Windows Application, llamado CambiaEstado.
Interfaz CambiaEstado - Formi.vb [Design] Form l.vb [D e sig n ]*
Form 1, Designer,vb*
Start Page
▼x
ID H !
Cam biar Color
> Instanciación de objetos en Visual Studio 3.
4.
5.
Al indicar la creación de una aplicación Windows, Visual Studio se encarga de instanciar objetos en tiempo de diseño. El primero de ellos es un objeto que tiene como ori gen la clase System .Windows.Forms.Form, de nombre predeterminado Forml; este ob jeto tiene la particularidad de ser un contenedor, es decir, un objeto que contiene otros objetos, de ahí que sea el primero en instanciarse. El nombre que Visual Studio le asigna a los objetos que genera se forma por el nom bre del type que le da origen, más un número consecutivo de todos los objetos del mis mo tipo encontrados en el proyecto. Ya que se genera la instancia de System.Windows.Forms.Form, aparece la herramien ta Form Designer, que permitirá la modificación del estado del objeto Forml en tiem po de diseño. Cuando tenemos la posibilidad de manipular objetos en Form Designer se dice que trabajamos en tiempo de diseño.
www.FreeLibros.me
270
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Figura 9.4
Form Designer
F o rm I.v b [D esign]
▼X
Start Page
4
JD
Área de diseño
Moderadores de tamaño
/ 6. El formulario, al igual que todos los objetos que son agregados a la interfaz en tiempo de diseño, tienen valores por omisión en todas sus propiedades. El objeto Form l posee un aspecto que los valores por omisión le proporcionan. 7. Seleccione la opción View - Toolbox (oprima las teclas Ctrl-Alt-X) para que aparez ca Toolbox. Si Toolbox está en ocultación automática, fíjela en Document Window. 8. En Toolbox expanda el grupo de controles Common Controls. Toolbox
^
ÿ
+ A ll W in d o w s F o rm s : -
Pointer la b ]
CheckBox
i H
CheckedListBox
I
j j § ComboBox
A A
i
Button
I 0
I ^
Sí
C o m m o n C o n tro ls
i
i
X
i
DateTimePicker Label LinkLabel
! ËS ListBox
t y List View
i
S
MaskedTextBox ' Month Calen dar
i TT| Notifylcon
www.FreeLibros.me
m
Capítulo 9. Fundam entos de la program ación orientada a objetos
© Button Haga doble clic en el control Button. Con ello se agregará en modo de inserción un botón en el área de diseño de Fonn Designer. 10. Su interfaz ahora debe aparecer como sigue. La pregunta interesante es ¿dónde se guarda el código que genera esta interfaz?
9.
F igura 9.5
Interfaz con con troles derivados de clases
F o r m l.v b [D e s ig n ]
F o r m l . D e s ig n e r . v b
▼ X
Start P age
a 'ä ' O l
». Bu Ioni >
p
1'
Buttonl (System .W indows.Form s.Button)
Formi (System . W indows.Form s.Form )
11. ^ En Solution Explorer haga clic en Show A ll Files. 12. Seleccione el nodo CambiaEstado - Formi.vb. Vea cómo dicho nodo se compone de dos programas: Forni .vb y Forni .Designer,vb. En Forni .vb se editan los compor tamientos de la aplicación, mientras que en Forni.Designer.vb se codifica la interfaz, instanciando todos los objetos.
www.FreeLibros.me
272
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
13. Haga doble clic sobre el nodo Forni.Designer.vb y vea el código que aparece. Es un poco complejo, pero es el trabajo que Fortn Designer nos ha ahorrado. Con Visual Studio no nos preocupamos por instanciar los objetos de interfaz, ni por cambiar de forma programática los valores por omisión de las propiedades. Al agregar un botón, por ejem plo, se agrega automáticamente el siguiente código en el programa Forml.Designer.vb: Me.Buttonl = New System.Windows.Forms.Button
1Buttonl
i
Me.Buttonl.Location = New System.Drawing.Point(0, 0) Me.Buttonl.Ñame = "Buttonl" Me.Buttonl.Size = New System.Drawing.Size(75, 23) Me.Buttonl.Tablndex = 0 Me.Buttonl.Text = "Buttonl" Me.Buttonl.UseVisualStyleBackColor = True Friend WithEvents Buttonl As System.Windows.Forms.Button
14. Si pretende ser un desarrollador profesional, sin duda requiere Visual Studio. Como podrá leer en comentarios del mismo programa, no se recomienda que modifique el programa directamente. Deje a Visual Studio hacer su trabajo y dediqúese a desarro llar en modo de diseño lo más que pueda. Sólo edite el código si sabe lo que está ha ciendo, y no descarte la posibilidad que el programa deje de funcionar o que Visual Studio deshaga los cambios que usted realice al programa sin notificarle nada. 15. En Solution Explorer haga doble clic en el nodo Forml . vb, para regresar al tiempo de diseño del formulario. 16. Seleccione View - Properties (F4) para ver la herramienta Properties. 17. Seleccione el objeto Forml, haciendo un solo clic en el formulario que se ve en Fortn Designer. 18. Busque la propiedad Size, y vea las dimensiones que tiene el formulario. Algunas pro piedades pueden expandirse, lo que indica que se forman por otras propiedades. La propiedad Size se compone de dos propiedades: Width y Height. Form ! System.Windows.Forms.Form
ShowInTeskbar
□
True 3 0 0 ,3 0 0
Width
300
Height
300
SeeGripStyle Size The size of the control in pixeis.
www.FreeLibros.me
ai
Capítulo 9. Fundam entos de la program ación orientada a objetos
Escriba los valores que encuentra. H e ig h t:
___________________
W idth:
___________________
19. Seleccione el modificador de tamaño que aparece en el borde inferior del formulario y arrástrelo hacia arriba, de tal forma que el formulario quede a la mitad de su tamaño original. Consulte nuevamente los valores que componen S ize . Compruebe que las modificaciones en tiempo de diseño afectan directamente las propiedades de los obje tos, modificando su estado. H e ig h t:
___________________
W idth:
___________________
20. Para mayor precisión, haga los siguientes cambios en Form i. H eight
150
Text
Cambio de esta do
21. Seleccione el objeto B u t t o n l , haciendo un solo clic en el botón que se ve en Form De■ signer. Text
Cam biar C o lo r
22. Utilizando el modificador de tamaño que se encuentra en el borde derecho del botón, amplíe el ancho del botón.
23. Arrastre el botón al centro del formulario, para que sea más estético. 24. Decida la forma en que prefiere cambiar las propiedades de sus objetos.
> Modificación de la identidad de los objetos en Visual Studio 25. Modificar la identidad de los objetos en Visual Studio es muy sencillo, basta con se leccionar el objeto al que se le desea cambiar la identidad y modificar el valor de su propiedad Name desde Properties. 26. Seleccione el objeto Forml. 27. En Properties busque la propiedad Name y asigne el valor de Fo rm u la rio . Por omisión Visual Studio le asigna un nombre a cada objeto. Modifique el nombre por omisión só lo si cambiará el estado del objeto o si utilizará sus propiedades de forma programática.
www.FreeLibros.me
274
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Cuando hacemos referencia a la forma programática de hacer las cosas, queremos de cir que a través de código hacemos cosas que es posible hacer en tiempo de diseño uti lizando las herramientas de Visual Studio. 28. Una recomendación general es que asigne los nombres de los objetos al inicio de los trabajos de desarrollo, antes de codificar comportamientos; asignados los nombres pro cure no cambiarlos, dado que el tal caso tendría que actualizar cada línea de código en donde los objetos eran utilizados, o de lo contrario se generará error. 29. Seleccione a Button 1 haciendo un solo clic en el botón, y en Properties cambie el va lor de la propiedad Name a Cambiar.
> Programación de comportamientos desde Visual Studio 30. Haga doble clic en Button 1 . Con ello se podrá editar el procedimiento de evento C lic k ; en dicho procedimiento se codifica lo que queremos que pase cuando en tiempo de eje cución el usuario haga clic en el botón. El programa que se editará es F o r n i . vb. 31. Agregue el siguiente código al procedimiento: M e.BackC olor = C o lo r . C o r a l C a m b ia r.B a ck C o lo r = C o lo r . L ig h t S k y B lu e
El Text Editor presentará lo siguiente: Start Page
For m 1.vb
Form 1. vb [Design]
▼
Form 1. Designer.vb
/
^ C am b iar
Click
X
S
lfa P u b lic C la s s F o rm u la rio
-= ¡
2
3;è
P r i v a t e Sub Cambi a r j C l i c k ( B y V a l sender As Sys te m .O b j e c t , M e.BackColo r = Col o r . Coral C a m b ia r.B a c k C o lo r = C o lo r . L ig h tS k y B lu e End Sub End C l a s s
ByVal
e As S ys t e m .I
32. Vea cómo la clase tiene el mismo nombre del objeto Form y cómo el procedimiento es igual al nombre del botón y del evento que se está codificando (C a m biar_C lick). La línea 4 cambia el color de fondo del formulario, mientras que en la línea 5 se cambia el color de fondo del botón. 33. Es importante notar que los cambios de estado en forma programática se logran de la siguiente forma: O b je to .P ro p ie d a d = V a lo r 34.
Vea cómo el formulario no se refiere con su nombre (F o rm u la rio ) sino por la constante Me; esto debe ser así por la forma en que Visual Studio maneja los formularios. Si no se
estuviera utilizando Visual Studio, tendría que referirse el formulario por su nombre.
www.FreeLibros.me
Capítulo 9. Fundam entos de la program ación orientada a objetos
-------1 E je c u c ió n gu ia d a d e CanbiaEstado - Forml.vb
35. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyec to como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha rea lizado en la solución (teclas Ctrl-M avús-S). Inicie la depuración para comprobar el comportamiento de su programa (tecla F5). 36. Haga clic en el botón y vea los cambios de color que provocamos. FIN DEL E JER C IC IO *
M
a p a m e n t a l d e l c a p ít u l o ______________________________________________________
www.FreeLibros.me
276
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
T e r m in o l o g ía Argum entos implícitos, 267 Campos, 258 O ase, 258 Codificación redun dante, 262 Comportamiento, 266 Constructor, 258 Destructor, 258 Encapsulamiento, 259-60 Encapsulation, 259 Estado, 266 Evento, 259
Fields, 258 Form Designer, 269 Funciones definidas por el usuario, 267 Handles, 267 Herencia, 261 Identidad, 265 Inheritance, 261 Instancia, 258 Insta nciación, 258 Jerarquía de clases, 263 Members, 259 Métodos, 259, 266
Miembros, 259 Objetos, 258 Overloaded, 264 Overloading, 264 Overriden, 264 Overriding, 264 Polimorfismo, 263 Polymorphism, 263 POO, 257 Procedimientos de evento, 267 definidos por el usuario, 267 Programación orientada a
objetos (POO), 257 Properties, 258 Propiedades, 258 Reuso de código, 263 Shadowed, 265 Shadowing, 264 WithEvents, 267
P r e g u n t a s ________________________________________________________________________
9.1 ¿Cuáles son las tres características principales que identifican a la programación orientada a objetos? 9.2 Defina clase, objeto, propiedad, método y evento. 9.3 Explique qué es el estado de un objeto. 9.4 Explique los conceptos Overloading, Overriding y Shadowing. 9.5 ¿Cuáles son las ventajas
que aporta
9.6 ¿Cuáles son las ventajas
que aporta el encapsulamiento?
9.7 ¿Cuáles son las ventajas
que aporta el polimorfismo?
www.FreeLibros.me
la herencia?
Capítulo 9. Fundam entos de la program ación orientada a objetos
Notas:
www.FreeLibros.me
278
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Ex a m e n
r á p id o d e l c a p ít u l o ___________________________________________________
Parte 1: M arque con una cruz el inciso que considere que responde a la pregunta. 1. A la acción de generar un objeto a partir de una clase se le llama: a) Instanciación b) Generación de objetos
c) Derivación 2.
Es el procedimiento o código que libera recursos que ya no utilizará un objeto: a) Constructor b ) Destructor
c) GarbageCollector 3.
Es la habilidad de crear una nueva clase basada en una clase existente: a) Polimorfismo b) Herencia
c) Encapsulamiento 4. Es la capacidad que tiene un objeto de almacenar datos y procedimientos como una unidad funcional: á) Polimorfismo b) Herencia
c) Encapsulamiento 5. Son asociaciones formales de uno o más datos de un determinado tipo, que da lugar a un nuevo tipo de dato compuesto: a ) Delegado b) Estructura
c) Encapsulado
Parte 2: Coloque en la línea la letra «F» si el enunciado es falso, y «V» si es verdadero. 6. La clase derivada hereda su funcionalidad a la clase base.
_______________
7. El estado de un objeto es su capacidad de tener un nombre que lo identifica y lo di-
______________
ferencia de los demás objetos. 8. Los objetos que producirán la ejecución de procedimientos de evento requieren ser
----------------------
creados con la cláusula WithEvents. 9. En programación POO, la codificación redundante es necesaria. 10. Los métodos son comportamientos predefinidos de un objeto.
www.FreeLibros.me
-------------------------------------------
nV
C a p ítu lo
1
I
0\ J
s\
\
V
J*
Clases, métodos y propiedades Objetivos: Aprender a definir de manera programática clases, métodos y
propiedades. 1. Aprenderá qué son las clases y cómo se definen de manera programática. 2. Conocerá las propiedades y cómo se definen de manera programática. 3. Conocerá los métodos y cómo se definen de manera programática. 4. Aprenderá a crear bibliotecas DLL e invocarlas desde programas exter nos. 5. Sabrá qué son los modificadores de acceso y cómo se utilizan en la pro gramación orientada a objetos.
www.FreeLibros.me
,
280
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido D e fin ic ió n d e u n a clase ............................................................................. D e fin ic ió n d e p r o p i e d a d e s .........................................................................
281 281
C re a c ió n d e b ib lio te ca s d e clases ( li b r e r í a s ) ................................................ C o n d ic io n e s p a ra la u tiliza c ió n d e las b ib lio te c a s d e c l a s e s .........................
283 284
Creación de u na clase con propiedades y m é to d o s ........................
284
>
U so d e C o d e S n i p p e t s ..................................................
285
> C re a ció n d e u n d ia g r a m a d e clases y m o d ific a ció n del m is m o co n C lass D e s i g n e r ......................................
289
>
U so del se le cto r d e d o c u m e n to s activos (A ctive D o c u m e n t s ) ...................................................... > A d ic ió n d e m é t o d o s u s a n d o Class D e s i g n e r ................. > U so d e C la ss V ie w p a ra e x a m in a r o b je to s ...................
291 292 296
Consum o una d ase a través de instancias ........................................
298
U so d e O bject B ro w se r ..................................................................... V isu a liz a c ió n d e re feren cia s .............................................................
3 02 302
U so de dases en soludones d ife re n te s .............................................
304
>
In te g ra c ió n d e p ro y e c to s e xiste n te s a u n a
>
n u e va s o lu c ió n ............................................................ D istrib u c ió n d e co p ia s lo cale s d e lib re ría s D L L .............
304 305
M a p a m e n ta l del c a p ítu lo ......................................................................... T e r m in o lo g ía .............................................................................................. P r e g u n t a s .................................................................................................. E x a m e n r á p id o del c a p í t u l o .......................................................................
307 308 308 310
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
En capítulos anteriores tuvimos la oportunidad de trabajar con objetos que, necesariamente, fueron derivaciones de alguna clase definida en la biblioteca de clases de .NET Framework. Lo importante en este punto es saber que no siempre la biblioteca de clases de .NET Fra mework es la solución a nuestros problemas; seguramente hay algún proceso o cálculo muy específico que nosotros deberemos desarrollar. Por esa razón es indispensable apren der a desarrollar una biblioteca de clases propias.
Definición de una clase Antes de proceder a desarrollar una clase determinada, asegúrese de que no está desarro llada ya y que forme parte de la biblioteca de clases de .NET Framework; sería lamentable invertir tiempo y esfuerzo en el desarrollo de una clase existente, ¿no? Si ya está seguro de que no existe una clase que se ajuste a lo que usted necesita, proceda entonces a generar una clase en Visual Basic. Para crear una clase debe utilizar la siguiente sintaxis: Class NombreClase
CódigoClase End Class
Donde NombreClase es el nombre a través del cual la clase puede ser invocada. La instanciación de la clase se deberá llevar a cabo por medio de este nombre. CódigoClase es el contenido de la clase; como sabemos, el contenido de la clase se compone de datos (pro piedades) y comportamiento (métodos y funciones). Por esa razón debemos definir dentro de la clase los procedimientos (Sub - End Sub), fun ciones (Function - End Function) , y propiedades (Property - End Property) que de be tener, entre otros atributos. 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. En Visual Basic, un constructor típico sería: Dim Objeto As New NombreClase( )
Donde Objeto es el nombre de la instancia de la clase y NombreClase es el nombre de la clase que se está instanciando. New es la instrucción constructora por excelencia. Una vez generada la instancia de la clase, podemos utilizar todos sus elementos: métodos, funciones y propiedades.
www.FreeLibros.me
282
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Definición de propiedades Para una clase se puede, además de definir su comportamiento a través de métodos y fun ciones, especificar qué propiedades han de conformar su estado. Las propiedades son las características particulares de un objeto; la clase debe definir qué propiedades tendrán los objetos que deriven de ella. Para su definición, es necesario defi nir las propiedades dentro del bloque de código que compone la clase. Las propiedades almacenan valores de un determinado tipo de dato; las operaciones que se pueden hacer con dicho valor es leerlo (GET) o asignarlo (SET). Las propiedades, aunque también son valores almacenados, tienen un manejo más formal que las variables de memoria y, de hecho, requieren de una variable de memoria que per mita la verificación de los valores antes de su lectura o asignación. La siguiente es la sintaxis de la definición de propiedades: Class NombreClase Dim Variable As TipoDatoPropiedad Prope rt y Nombre Propiedad As TipoD ato Propiedad Get
Códi goLectu ra Valor End Get Set (VariableArgumento As TipoD ato Propiedad)
Códi goA signación Valor End Set End Property
End Class
Donde NombreClase es el nombre de la clase a la que pertenece la propiedad. Antes de declarar la propiedad se debe declarar una variable de trabajo (Variable) del mismo ti po de dato que el que pretende almacenar la propiedad (TipoDatoPropiedad). Para recuperar el valor que tiene la propiedad se usa CódigoLecturaValor, que es el bloque de código que se encarga de recuperar el valor de la variable de paso, para considerarlo co mo valor de la propiedad. Para asignarle un valor a una propiedad se utiliza una variable de trabajo (VariableArgu mento) que recibe, a manera de argumento, el valor que se pretende asignar a la propiedad. CódigoAsignaciónValor es el bloque de código que se encarga de validar el valor que se pretende asignar a la propiedad; en caso de que sea válido, realiza la asignación.
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
283 |
En una clase se pueden definir tantas propiedades como se requieran en el programa y, por supuesto, además se pueden definir métodos y funciones que formen parte de la misma. Estos métodos y funciones pueden hacer uso de las propiedades con sólo referirlas por su nombre.
Creación de bibliotecas de clases (librerías) En nuestros ejemplos hemos experimentado la definición de clases en el mismo capítulo en donde se instancian y utilizan. Este comportamiento no es común en desarrollos grandes, pues generalmente se definen las clases de manera independiente al programa que las utiliza. De hecho, la biblioteca de clases de .NET Framework es independiente de todo programa; uno simplemente invoca una librería y utiliza los métodos (types) y propiedades que tiene. Dicho de otra forma, hasta donde hemos visto, la clase se encuentra dentro del mismo en samblado (EXE) que el programa; ahora requerimos saber cómo hacer para que las clases se encuentren en un archivo de vínculos dinámicos (DLL), que es independiente del ejecutable.
NOTA En este texto, com o toda la docum entación técnica relativa al tema, se utilizan los términos "biblioteca de clases" y "librería de clases" indistintamente. Tienen el mismo significado.
Modificadores de acceso La idea es generar una librería de clases independiente de los programas ejecutables; es apropiado pensar que dicha biblioteca estará disponible para su utilización por uno, dos o más ejecutables (de ahí la razón de independizarla). Ello no significa, sin embargo, que cualquier ejecutable pueda hacer uso de la biblioteca de clases; es posible que no queramos limitar el acceso a la biblioteca de clases. Para ello podemos utilizar los denominados mo dificadores de acceso. Los modificadores de acceso son calificadores de declaración que determinan el grado de encapsulamiento de una clase. El acceso se aplica a las entidades (clases, propiedades, métodos). A continuación se muestran a grandes rasgos los modificadores de acceso:
www.FreeLibros.me
284
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Palabra clave
Definición
Public
Las entidades pueden ser llamadas desde cualquier parte; también se le conoce como acceso público.
Private
Las entidades se pueden llamar sólo desde el contexto mismo de su declaración. También se le conoce como acceso privado.
Friend
El acceso friend permite el acceso a las entidades desde el mismo programa en donde se hace su declaración.
Protected
El acceso protegido permite el acceso a las entidades sólo desde la misma clase, así como sus clases derivadas.
Protected
Es la mezcla del acceso friend y el acceso protegido.
Friend
La forma de especificar los modificadores de acceso es colocándolos al principio de la de finición de las clases, propiedades y métodos.
Condiciones para la utilización de las bibliotecas de clases Las condiciones necesarias para la definición y utilización de una biblioteca de clases son las siguientes: □ Proporcionar el modificador de acceso requerido. □ Compilar la biblioteca de clases como librería (/target:library). □ Establecer la referencia del ejecutable con respecto a la librería (/r: librería.dll). Si usted desarrolla utilizando Visual Studio, podrá despreocuparse de establecer la mayoría de las referencias y especificar la salida a DLL al momento de compilar, dado que la herra mienta se encarga de dar las indicaciones correspondientes.
Ejercicio 10.1 Creación de una clase con propiedades y métodos
En este ejercicio se generará una clase que contiene propiedades y métodos para su consu mo desde otros programas.
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
1. 2. 3.
Abra la solución Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensión sin). Agregue a su solución un proyecto Windows - Class Library llamado Clase. En Text Editor desplegará lo siguiente:
StartPage
Modulel.vb Classl.vb*
▼
^Classl la Public Class Classl
j j (Declarations)
X
D B
2U 3)
4|LEnd Class S>
II ■
10 4.
Cambie el nombre de la clase, sustituyendo Class 1 por Areas.
> Uso de Code Snippets 5.
6.
Una de las costumbres más arraigadas de los programadores es utilizar en programas nuevos código que ya han escrito antes. Con una operación de copiar y pegar se aho rra mucho tiempo, dado que hay código que requiere de pocas modificaciones para funcionar en casi todos los programas. Visual Studio incorpora muchas pequeñas ruti nas de uso común con el fin de que sean integradas y modificadas para su utilización en programas; a estos patrones de código preestablecidos se les da el nombre de Code Snippets. Una de las operaciones más comunes al codificar clases es la incorporación de propie dades, para lo cual debe de existir un code snippet. Colóquese dentro de la clase, des pliegue el menú contextual y seleccione Inserí snippet.. Start Page
Module l.vb
▼
C la ss l.v b
; A rca s
jj
j
(D e cla ra tio n s)
Pu b lic C la s s Áreas 4K- End C1 A
Insert Snippet... GoToDefinfcon ^ Breakporrt
►
•a
Run To Cursor
*
Cut Copy Paste Outlnog
►
www.FreeLibros.me
X
s
286
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
7.
Aparecerá una herramienta parecida a Intellisense, que permite seleccionar los patro nes de código preestablecidos de Visual Studio. Seleccione Common Code Pattems. start Page
MoAJel.vb
▼ X
C la s s l. v b
¿j
A re a s
0
(D e c la r a tio n s )
x ] Public C la ss Areas Insert Snip End C lass CJ Appfccabon - Comping, Resources, and Settngs L i Colections and Arrays
¡£¡ |
Connectivity and Networking "S _J Data ■Designer featixes and AOO.NET _ j Data Types •de#ned by Visual Basic 1 file system - Processing Drives, Mders, and Ftes _ J Math _J Security J Smart Devices
8.
Seleccione Properties and Procedures. Start Page
Modutel.vb
C la ss l.v b
~
■1$ A re as
P u b lic
C la ss A r e a s
fn w rt * m
r - Ccmmcn Code P
•i|L E n d C la ss s" ”
Condfaonab and Loops _ J Exception M andng ■
r
i'r
VO
C J Types
9.
X
¿ J (D eclaration«)
^
Seleccione Define a Property. Start Pag*
M o d iie l.vb
Classl.vb
»
*tj Areas l 2
¿
j Pubi ic Cl ai
4 ■End Class s
A rea s
j (Declarations)
a
2
. » f r c p t t f K arri f t « « ? / « > 1 J
Declare an Event Oefine a CType Operator Oe/We a O e faJt Property
J
Define a Ftnctlon
J
Define a Fw ctlo n to C a l a Windows API
J
Define a ftncbon wfth a Parameter Array
J
Define « Fvncbon
Generic Parameters y
j ) Define a Readonly Property ^ OeftneeSub
www.FreeLibros.me
a
to
J J
J
X
............. »
a
C apítulo 10. Clases, m étodos y propiedades
10. Aparecerá el patrón de código preestablecido buscado. Observe cómo algunas partes del código están sombreadas: son los elementos variables del code snippet. Se puede navegar entre ellos utilizando las teclas TAB para ir al siguiente y BACKTAB para ir al anterior. Al modificar un elemento variable, se modifica en todas las partes donde se utiliza; esto es una ventaja con respecto al uso de copiar y pegar, dado que era común olvidar sustituir todas las referencias, generando errores. En el elemento variable que dice newPropertyValue escriba pBase. Presione TAB, con lo que debe desplazarse al segundo elemento variable, que por el momento tiene el valor de Integer; cámbielo por Decimal. Presione TAB y sustituya NewProperty por Base. 11. Vea cómo, automáticamente, se actualizan las referencias posteriores. C U m I. v ü *
» X Q
P u b lic € ! • * * 4
VH&b-X, ni
P u b lic Wt
M M U
*»
l> T u rn p M M 1 c I n í e y V A l w«1ur A * t> rn n u 1 ) 1■ 1• Cntf íe t Cnd Proj»erty u J» :i
(•id C l u t
12. Después de la propiedad que se definió, agregue otra propiedad utilizando code snippets. En el elemento variable que dice newPropertyValue escriba pAltura. Presione TAB, con lo que debe desplazarse al segundo elemento variable, que por el momento tiene el valor de Integer; cambie Integer por Decimal. Presione TAB y sustituya New Property por Altura. Por el momento su código debe lucir de la siguiente manera:
! 1
Modulel.vb
C la s s l.v b
A re a s 1 3 P u b lic C la s s A re a s P r i v a t e p B a se a s D e cim a l 2 3 P u b l i c P r o p e r t y B a se Q ) A s D e cim a l 4 Get 5 R e t u r n p B a se End G et 6 . 7 S e t ( B y V a l v a l u e A s D e c im a l) 8 p B a se = v a lu e 9 End S e t 10 End P r o p e r t y 11 P r í v a t e p A l t u r a A s D e cim a l P u b l i c P r o p e r t y A l t u r a Q ; A s D e cim a l 12 13 Get 14 R e t u r n p A lt u r a 15 . End G et 16 S e t ( B y V a l v a l u e A s D e c im a l) 17 p A lt u r a = v a lu e 18 . End S e t 19 End P r o p e r t y 20 21 22 End C l a s s
J21
www.FreeLibros.me
S[
288
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
13. Después de la segunda propiedad, desde el menú contextual seleccione Insert snip p e t y utilice el code snippet Common Code Patterns - Properties and Procedures - Define a function. En el elemento variable MyFunc coloque el valor Rectángulo, en Integer coloque Decimal, y en los paréntesis que indican el valor de retomo escriba (Base * Altura).
14. Después de la función anterior, escriba otra: desde el menú contextual seleccione In sert snippet...., y utilice el code snippet Common Code Patterns - Properties and Procedures - Define a function. En el elemento variable MyFunc coloque el valor TrianguloRectángulo, en Integer coloque Decimal y en los paréntesis que indican el valor de retorno escriba ((Base * Altura)/2). 15. El código debe haber quedado como sigue.
JF- Codificación de Clase - Classi.vb
1 O ¿ 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Public Class Areas Private pBase As Decimal Public Property Base() As Decimal Get Return pBase End Get Set(ByVal value As Decimal) pBase = value End Set End Property Private pAltura As Decimal Public Property Altura() As Decimal Get Return pAltura End Get Set(ByVal value As Decimal) pAltura = value End Set End Property Function Rectangulo() As Decimal Return (Base * Altura) End Function Function TrianguloRectangulo() As Decimal Return ((Base * Altura) / 2) End Function End Class
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
A
289 |
Microsoft
V ? Visual Studio 2005
> Lo nuevo
En Visual Studio 2005 los code snippets form alizan lo que los desabolladores hacían todo el tiempo: copiar y pegar.
> Creación de un diagrama de clases y modificación del mismo con Class Designer 16. Desde la barra de herramientas de Solution Explorer, seleccione View Class Diagram ~ ^ . Aparecerá el diagrama de la clase (class diagram). A re as Class ....................v
17. Al visualizar un diagrama de clases, Document Witidow invoca una herramienta llamada Class Designer, que permite diseñar de forma visual y dinámica clases de usuario. 18. Si hace clic en el icono para ver detalles & , Class Designer se dividirá en dos pane les; en el superior quedará el diagrama de la clase en modo extendido, mientras que en el inferior aparecerá la ventana Class Details, que mostrará la relación de propiedades, métodos y eventos de la clase, además de permitir agregar o eliminar elementos. En ca so de que Class Details no aparezca de manera predeterminada, es posible invocar el menú de contexto desde el diagrama de la clase y seleccionar View Class Details.
www.FreeLibros.me
290
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
19. Con el modificador de tamaño que tiene el diagrama de la clase en el extremo derecho, amplíe la dimensión del diagrama, de tal forma que quede con un ancho del doble.
d w iO t o y a in 1.cd*
S h r tN g c
M o d ic i-vi
O w íl.v b *
X
A rea » CU» -
PWr* pflfrir* V Xax:
-
PruueilJo
f
3* M u « “Y tese - Methods ♦ R o -U »v J u *
TnanpJoAcctongiio
_______________
s
20. En la barra de herramientas de Class Designer aparecerán los siguientes iconos:
Display Ham« Display Namo and Typ«
I
a
Display Full Signature
iT a()
Utilícelos alternadamente y vea las variaciones que tiene el diagrama de clase. Finalmente seleccione el modo Display Full signature.
ClossOiogrom I .cd4
StortPoqc
H xU cl.vt.
A re at Clan -
Oawl.vb* 1?«]
I
FWrfc ,y
fV iíirA A< Orrtort
* i A x x : Av O v n i d -
P tu m u »
-
Method»
AKuid A i O v i n d &MC A j Dcoftol
* R < * .U »v Ju O A v t> i.n .d «
TMMgJsftoctanpJoO
Dee»nal
6
www.FreeLibros.me
S'
C apítulo 10. Clases, m étodos y propiedades
21. La parte baja de Class Designer muestra la herramienta Class Details. Busque el apar tado Properties y haga clic en . Automáticamente se agregará una línea en donde podrá especificar los elementos básicos de la propiedad. En la colum na Ñame coloque el valor Radio, en Type coloque Decimal, deje el Modifier como Public, y finalmente en Summary escriba Valor de medida del radio. O t fiD e to fc v .
Area»
* 9
N e ne
Type
JHU Method*
*+
¿
Modfx t
♦
v f tn lA ijiá i
D raliinl
P lÜ
♦
v inangiJoK*ctangiJo
doccmI
wubk
% 23* A li*< i
Ru i í m I
Pi M
♦ 2 f Base
Ooonwl
Pubk
*:
DwrtM l
P iM r
Doomal ftarlw» !
ftrvc*o OMui»«
*
O Q
P ro p e rt ie s
n
B irtn
X
Summery IWe
VJinr d » m m M * f W r * t n
3*
» neWt
E
Q
□
J f pAJtura A MIMA
> Uso del selector de documentos activos (Active Documents) 22. Si presiona las teclas Ctrl-Tab aparecerá el selector de documentos activos. En dicha herramienta se podrán seleccionar las herramientas activas, así como los documentos. Para seleccionar alguno de los elementos, puede hacer clic sobre la herramienta o do cumento, utilizando las flechas de dirección, o mantenga oprimida la tecla C trl mien tras oprime repetidamente la tecla Tab hasta que se seleccione el documento deseado. Active Tool Windows “
Active Files
C la siD e ta ís
O-assOvagraml.cd
SotuWhExplorer - Sotubo...
'VClassl.vb
Error LBt
* ] Modiiel.vb
view
E
StartPage
33 Comm»r>d Wmdow U Output Server Explore» Properties
¿T a sk lis t
Oml.vb
.vhFto C:\APVBNETVS\Ejercici05\O«e\CldSSl .vt>
23. Presione C trl y mantenga presionada la tecla. Ahora presione Tab en repetidas ocasio nes hasta que el programa en que codificamos la clase, Classl . vb (C: \a p v b n e t v s \ Ejercicios\Clase\Classi .vb) aparezca; cuando se haya seleccionado el archivo de seado, simplemente suelte la tecla C trl y el archivo aparecerá en Document Window.
www.FreeLibros.me
292
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
24. Vea cómo lo que agregamos en Class Designer se ha agregado a nuestro código: 29 30 31 32 33 34
h 1 k
1 ,1 ' ' '
< su rrm a r> o V a l o r de m e d id a
1 ,1
< / s u r m ia r y >
P u b lic P ro p e rty Get End G e t Se t (B y V a l
35 36
37 38 39 40!
End End
del
R a d io O
v a l ue A s
r a d io As
D e c im a l
D e c i m al )
Set
P ro p e rty
25. ¿Qué diferencias encuentra entre las propiedades definidas usando code snippets y la propiedad definida desde Class Designer!
26. Regrese al diagrama de clase (ClassDiagrami .cd) y modifique la información de Summary para todos los elementos de la clase: Mienbro
Suimary
Tipo
Rectángulo
Muestra el área de un rectángulo
Method
TrianguloRectángulo
Muestra el área de un triángulo rectángulo
Method
Altura
Valor de medida de la altura
Property
Base
Valor de medida de la base
Property
pAltura
Variable de paso para altura
Field
pBase
Variable de paso para base
Field
> Adición de métodos usando Class Designer 27. Agregar métodos utilizando Class Designer es casi tan sencillo como agregar propie dades. En el panel Class Details de Class Designer puede agregarlo en el apartado de Methods, haciendo clic en .
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
293 |
28. Otra forma de hacerlo es utilizando el icono para agregar nuevos miembros a la clase. Haga clic en el icono New M ethod; aparecerá un menú en el cual debe selec cionar New Method.
V
-
&
N e w P ro p e rty
a *
m* / $ v '¡ a
Type
N ew M eth od ^
Decim al N e w Field
ulo
D ecim al D ecim al
New Event N ew C o n stru cto r N ew D e stru cto r
D ecim al
N ew C o n sta n t
D ecim al
i± i
D ecim al
- ? f p R a d io < a d d p ro p e rty>
¿j... F i e l d s
J ivs. n il Ih
ria^irw si
29. Automáticamente se agregará una línea en donde podremos especificar los elementos bá sicos del método. En la columna Ñame coloque el valor Circulo, en Type coloque el ti po del valor de retomo, que en este caso es Decimal; deje el Modifier como Public. 30. En Summary haga clic en el botón Description Q . En Summary escriba Muestra el área de un círculo y en Retiim s escriba Área del círculo (Decimal).
Summary: Muestra el área de un círculo Returns: Área del circulo (Deomal)| Remarles:
OK
Cancel
www.FreeLibros.me
294
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
31. Al lado de cada miembro en Class Details aparece un pequeño icono que indica el ti po de miembro del que se trata. Al hacer doble clic sobre el icono de miembro, Visual Studio permitirá la edición del miembro del que se trate. Icono
Miembro
S
property *
Method Events
■é
Field
32. Haga doble clic sobre el icono de miembro del método Circulo. El programa de berá ir al código en donde se defina el método. 33. Complemente el código, de tal forma que quede de la siguiente manera: - ~
1 C o d ific a ció n d e Clase - Classl.vb - Circulo() ''' '11 Muestra el área de un círculo 111 111 Área del circulo (Decimal) Public Function Círculo() As Decimal Return (3.1416D * (Radio * 2)) End Function
34. El código completo debe haber quedado de la siguiente forma: C o d ific a ció n d e Clase - Classi.vb 1 2
3 4 5 6
7 8
9 10 11
12
13 14 15 16
Public Class Areas '11 111 Variable de paso para base 111 Private pBase As Decimal 111 111 Valor de medida de la base '11 Public Property Base() As Decimal Get Return pBase End Get Set(ByVal valué As Decimal) pBase = valué End Set End Property
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
111 111 Variable de paso para altura 111 Private pAltura As Decimal 111 111 Valor de medida de la altura 11' Public Property Altura() As Decimal Get Return pAltura End Get Set(ByVal valué As Decimal) pAltura = valué End Set End Property 11' 111 Muestra el área de un rectángulo 1'' Function Rectangulo() As Decimal Return (Base * Altura) End Function '11 111 Muestra el área de un triángulo rectángulo 1'1 Function TrianguloRectangulo() As Decimal Return ((Base * Altura) / 2) End Function 1'1 111 Valor de medida del radio 111 Public Property Radio() As Decimal Get End Get Set(ByVal valué As Decimal) End Set End Property 111 11' Muestra el área de un círculo 111 111 Área del círculo (Decimal) Public Function Círculo() As Decimal Return (3.1416D * (Radio A 2)) End Function
End Class
www.FreeLibros.me
296
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
35. En este programa, ¿cuántas líneas de código ha escrito usted sin la asistencia de Visual Studio?
> Uso de Class View para examinar objetos 36. La herramienta Class View permite examinar y acceder a los objetos pertenecientes a una solución y sus miembros correspondientes. Para ver esta herramienta seleccione View - Class View (oprima la combinación de teclas Ctrl-M ayús-C). Class View se compone de una barra de herramientas, una barra de búsqueda, un árbol de archivos y miembros, y un panel de objetos y miembros. Figura 10.1
Class View
^
«■
4 L *
< S e a rc h > * »
. 3 0 9
Q
Areaftectángulo
* _____
* 3 Arreglos ♦ . ¿ J C am bw Estado ♦ .jí té . 3 C oreum eLibreru
!
Arbol de archivos y miembros
_________________ B
37. En la barra de búsqueda de Class View escriba Base y haga clic en el botón Search —J que aparece en la misma barra de búsqueda.
<■
B
t
Base
"
J
A
a B H & -J Clase.Areas.Base() As Decimal Microsoft.VisualBasic.Logging.FileLogTraceListener.BaseFileNar ^ System._AppDomain.BaseDirectory() As String Svstem.AoDDomain.BaseDirectorvO As Strina Oí
a
.T .
^Class View
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
38. Aparecerán en el árbol de archivos y miembros todos aquellos que contengan la pala bra Base, empezando con la que más concuerde con el patrón a buscar (que es la pro piedad que definimos en nuestra clase). Haga clic en el botón Back que aparece en la barra de herramientas de Class View. 39. En el árbol de archivos y miembros busque el nodo Clase y expanda el árbol hasta co locarse en el miembro Areas. Observe cómo al seleccionar el nodo, todos sus miem bros aparecen en el panel de objetos y miembros. De esa forma se pueden examinar los miembros de una clase y seleccionarlos para diferentes operaciones.
C l a s s V ie w i_ l
~
+■
i !
'
-
C a m b ia E st a d o
0
C la s e lii □
R e fe re n c e s
0
C la s e
O
© •■<> ©
.J ]
X
il
< S e a rc h > ©
9
O
B
9
My
C o n s u m e U b r e r ia
B .
«mu C irc u í o ( ) A s D e c im a l R e c t a n g u l o Q A s D e c im a l «i» T r ia n g u l o R e c t a n g u lo ( ) A s D e c im a l A lt u r a Q A s D e c im a l ^
^
B a s e Q A s D e c im a l R a d i o Q A s D e c im a l p A lt u r a p B a se
! ^ S o l u t i o n E x p l o r e r | ( 2 J C l a s s V ie w
40. En el panel de objetos y miembros seleccione el miembro Circulo (), despliegue el menú contextual y seleccione Go To Definition. De esa forma Visual Studio localiza rá el archivo de la solución en la cual el miembro fue codificado, permitiendo su edi ción. De esta forma se evita estar navegando por el Solution Explorer tratando de en contrar una clase y luego navegar entre el código para encontrar el código que define el miembro.
www.FreeLibros.me
298
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
C l a s s V ie w
▼
«■
ü
V
X
3
ÍSÜ3 C a m b ia E st -a d o
-
C la s e ©
L J
0 - {}
R e fe re n c e s C la s e
í±lÉ+
x
/
< S e a rc h > ®
a
A re a s O
My
. J O C o n s u m e L ib r e r ia C irc u lo Ci A s C e ltfíM M V
R e c t a n g u lo O
V
T r ia n g u l o R e d
2 5 a A lt u r a O A s D.
_p &
G o T o D& Pinition
k
B r o w s e D e fin itio n F in d All R e f e r e n c e s
j f f B a s e ( ) A s De» R a d i o O A s De
Copy
p A lt u r a
Jp
S h o w P u b lic M e m b e r s
p B a se
¿ ^ ¡ S o l u t i o n E x p lo r e r
-
S h o w P r iv a t e M e m b e r s
P r o p e r t ie s ©®-
Sh o w P rotected M e m b e rs
L
A 1 4
Sh o w O th e r M em b e rs
w
S h o w In h e r it e d M e m b e r s S o r t A lp h a b e t ic a lly a
So rt B y M em b e r T yp e So rt B y M em b e r A c c e ss G ro u p B y M e m b e r T y p e
41. Guarde los cambios en su solución. FIN DEL EJERCICIO*
Ejercicio 10.2 Consumo de una clase a través de instancias En este ejercicio se consumirá una clase. Para ello se generará una instancia (objeto) y se utilizarán los métodos declarados en la clase.
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
1. 2. 3.
4. 5.
299 i
Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). Agregue a su solución un proyecto Windows - Consolé Application, llamado UtilizaClase. En Solution Explorer seleccione UtilizaClase y despliegue el menú contextual. Selec cione A dd Reference. En la ventana Add Reference seleccione la pestaña Projects y seleccione el proyecto Clase. Con ello habilitamos a nuestra nueva aplicación para con sumir la funcionalidad de la clase que definimos en el ejercicio anterior. Haga clic en Ok. Agregue las líneas necesarias para hacer type safe a su programa; importe el espacio de nombres System con la clase Consolé. En Text Editor mostrará lo siguiente: M o d u le l.v b *
O b je ct B ro w se r
C la s s l . v b
Start P a ge
1
M o d u le 1
O ption Im p o rts
S tric t
¿M a in
On
System . Consol e
□ M o d u l e M od ul e l Sub M a i n O End Sub End M o d u l e
6.
Importe un nuevo espacio de nombres que le permita tener acceso a los recursos de la clase con la cual establecimos referencia. Escriba la siguiente línea antes del bloque de módulo: Imports Clase
7.
Vea cómo Intellisense ya reconoce la existencia de nuestra clase. M o d u le l . v b *
O b je c t B ro w se r
C la s s i ,v b
Start P a ge
(G e n e ra l)
( D e c la i
O p t i o n E x p l i c i t On 1 O p t i o n S t r i c t On 2 3 4 Im p o rts S ys te m .C o n so le 5 Im p o rts 1 r. «3 ¡Namespace Clase | 7 Modul _____ K { } - Microsoft 8 9 . O System 10 UtilizaClase Errror— ---------------11 12 13 L E n d M o d u l e
www.FreeLibros.me
300
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
8.
Dentro del módulo deberá generar una instancia de la clase Areas. Para ello deberá es cribir la siguiente línea de código, que declara una variable (X) de tipo Areas (con ello se reserva en memoria un espacio para manejar una variable que alojará un objeto construido a partir de nuestra clase, con toda la funcionalidad que le hayamos codifi cado): Dim X As Areas
9.
Declarar la variable no implica que ya tengamos un objeto. Simplemente tenemos re servado un lugar para guardar el objeto, pero el objeto aún no existe. Para generarlo necesitamos hacer uso de un constructor, lo que implica utilizar la instrucción New. Pa ra generar un objeto a partir de Areas, y almacenar dicho objeto en el área que hemos reservado, utilizamos la siguiente línea: X = New Areas()
10. A través de la variable x ya podemos hacer uso de toda la funcionalidad programada en la clase. El código de los puntos 8 y 9 puede simplificarse, instanciando al momen to en que declaremos, dando una línea como la que sigue: Dim X As New Areas
11. Vea cómo Intellisense ya reconoce la existencia de nuestra clase y sus miembros. In cluso da la información que nosotros establecimos como comentario.
□ M odule Modul e l Sub
M a in O D im X A s
N ew A r e a s
Encurtí__
Public P rop e rty Altu raQ A s Decimal
Valor de medida de la altura
Base E n d Hoc
v Circulo v# Equals
V GetHashCode v GetType 5 a Radio
Rectángulo V ReferenceEquals To5tring C om m on
AII
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
12. El código completo debe haber quedado de la siguiente manera: 1 C o d ific a ció n de UtilizaClase - Modulel.vb 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Option Explicit On Option Strict On Imports System.Console Imports Clase
Module Modulel Sub Main() Dim X As New Areas X.Altura = 10D X.Base = 20D WriteLine("— Áreas calculadas ------ ") WriteLine("Rectángulo: " & CType(X.TrianguloRectangulo(), String)) Write("Presione INTRO para continuar") ReadLine() End Sub End Module
Ejecución g u ia d a de UtilizaClase - Modulel.vb
13. Construya la solución (oprima la combinación de teclas Ctrl-Mayús-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solución (teclas Ctrl-Mayús-S). Inicie la depuración para com probar el comportamiento de su programa (oprima la tecla F5). 14. La línea 5 importa el espacio de nombres Clase, que está disponible gracias a que es tablecimos la referencia con la librería Clase. En la línea 11 se declara una variable que tiene como origen nuestra clase Areas; en la misma línea de declaración se gene ra la instancia del objeto, utilizando el constructor New. 15. Se proporciona valor a las propiedades Altura y Base del objeto (líneas 13 y 14), y se utiliza el método TrianguloRectangulo() para comprobar la funcionalidad de la cla se. Como TrianguloRectangulo() retoma un valor Decim al, se realiza la conversión a S trin g para evitar problemas en la concatenación.
www.FreeLibros.me
302
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
16. Como proporcionamos un valor 10 para la altura y 20 para la base, el resultado es el siguiente: — - Áreas calculadas-----Rectángulo: 100 Presione INTR0 para continuar
> Uso de Object Browser 17. Visual Studio provee una herramienta llamada Object Browser, que permite ver infor mación de las clases y sus comentarios. 18. Seleccione en Class View el miembro Circulo () de la clase Area de nuestro proyec to Clase. Despliegue el menú contextual y seleccione Browse Definition. Vea cómo aparece, además de la información usual presentada por Class View, un apartado que muestra la información de los comentarios que especificamos al crear el método. Es muy importante colocar información valiosa en los comentarios, a fin de que sean de utilidad al ser consultados en Object Browser. No está de más decir que si hacemos doble clic sobre alguno de los miembros en Object Browser, Visual Studio nos trasla dará al código de definición. StartP age Browse:
O b je c t B ro w s e r
AllC om p oneros
C lassD iagram l.cd
M o d u le l.v b
*
^
*
C la ss l. v b *
▼
X
i'/=) *
G rcu lo O A s Decimal
< S e a rc h >
V RectanguloO A s Decimai V TrianguloRectangulo() A s Decimal AlturaQ A s Decimal _
Base( ) A s Decimal Radio() A s Decimal pAltura
-
{ > Clase
. V pBase
A rea s +
{ } C lase.M y
♦
O
C la se .M y.R esou rce s
♦ .^ 1 Consum eübrerla + .
Descuento
+ / p Excepciones 1 +
51 Excepciones2
♦ .3 ] Excepciones3 + +
s
Pubfcc F u n c t io n CirculoQ A s p é r i m a i M e m b e r of: C l ¿ s e .A r e a s
Sum m ary: M u e s t r a el á re a d e u n círculo
R etu rn Values: Á r e a d e l circu lo (D e c im a l)
HolaM undoCon HolaMundoW in
♦
- J Microsoft.VisualBasic
+
C¡ Mislltllerias
+
mscorlib
+
*s] O peradores
Remarks:
Primos Repite
+
System
> Visualización de referencias 19. Visual Studio mantiene un complejo sistema de referencias a recursos, de tal forma que todos estén disponibles casi de cualquier parte. Para llegar al código de definición de un
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
303
miembro de una clase, por ejemplo TrianguloRectángulo (), basta hacer doble clic sobre TrianguloRectangulo () en Class Viewy o hacer doble clic sobre Triangulo Rectángulo () en Object Browser, e incluso en Text Editor, colocándonos sobre TrianguloRectangulo () y seleccionando Go To Definition en el menú de contexto. Start Page
Object Brow ser
C lassD iagram l.cd
10 íy
11
M o d u le l. v b
O a s s l. v b *
▼
X
/ M a in
.M o d u le 1
Sub M a in () Dim X As New Areas
1
12 13 14 15 16
17
16 19
20i 21 22 23 24
X .A lt u r a ■ 100 X.Base - 20D W r it e L in e (" ------Areas c a lc u l a d a s ----------------- " ) W r it e L in e ( : :t á n g u ': : «S C T y p e (X .T r i anguli Rename...
W rite ("P re s io n e INTR0 para c o n tin u a r " ) ReadLi n e () End Sub
4 -
In se rt Snippet...
Va
G o T o Definition
End Module Find A l R e f e r e n c e s ^ Breakpoint ►i
►
Ru n To Cursor C ut
& A
Copy Paste Outlining
►
20. Internamente, Visual Studio conoce dónde se encuentra todo lo que utilizamos en un programa. Vaya a Solution Explorer y, desde el nodo utilizaClase, despliegue el me nú contextual y seleccione Build. Vea la ventana Output y percátese de que no sólo se construyó el proyecto UtilizaClase, sino también Clase, dado que contiene clases que son utilizadas por UtilizaClase.
www.FreeLibros.me
304
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
21. Edite el código de Modulel de UtilizaClase. Coloque el puntero del ratón sobre TrianguloRectangulo() y despliegue el menú contextual; seleccione Find A ll Refe rences. Aparecerá una ventana llamada Find Symbols Results, que mostrará todas las referencias físicas que permiten a Visual Studio encontrar todos los recursos que su programa necesita.
Find Sym bol Resufts - 1 match found
e
*
▼
0
X
TrianguloRectangiJoO As Deam al (Clase.Areas) - C:\APVBNETVS\EJerdd05\Clase\Gassl .vb(42)
.JjJ Function TrianguloRectanguloO As Decimal - C:\APVBNETVS\Ejerdcios\Clase\Classl.vb(42, 14) _J¡] Writeline("Rectángulo: " & CType(X.TrianguloRectangulo(), String)) - C:\APVBNETVS\Ejercicios\UtilizaClase\Modulel .vb(j
! _ * : ■:< List T*| Cornmar ; •■■Vindüw 3
Outpu'. ^ F i n d Pesuits 1 ¿ p Find Symbol Results
22. Por supuesto, al hacer doble clic en cualquiera de los elementos, Visual Studio nos tras ladará al código de definición correspondiente. 23. Guarde los cambios en su solución. FIN DEL E JER C IC IO *
Ejercicio 10.3 Uso de clases en soluciones diferentes
En este ejercicio realizará los trabajos necesarios para poner a disposición de todos los desarrolladores la funcionalidad de una clase. Es común que un grupo de desarrolladores, en ambientes profesionales, generen librerías comunes que de forma estandarizada son utili zadas en todas las soluciones que construyen. Usos comunes son clases para gobernar la se guridad de las aplicaciones, clases para el acceso eficiente a los datos, clases para interfa ces de usuario uniformes, etcétera. Sólo un grupo de desarrolladores son los encargados de fabricar las librerías, mientras que todos los demás desarrolladores, en todos los demás pro yectos, las utilizan. Veamos cómo se logra esto usando Visual Studio.
> Integración de proyectos existentes a una nueva solución 1.
Genere una nueva solución, llamada Cálculos. Seleccione File - New - Project. Se leccione en Project types la opción Other Project types - Visual Studio Solutions, y seleccione en Templates la opción Blank Solution. En Ñame coloque Cálculos y en Location especifique C: \a p v b n e t v s .
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
2.
Agregue a la solución un proyecto Windows - Consolé Application, llamado Prueba Librería.
3.
4.
5.
6.
7.
En Solution Explorer seleccione PruebaLibreria y despliegue el menú contextual. Seleccione Add Reference. En la ventana A dd Reference seleccione la ficha Projects. Como puede ver, no aparece ningún proyecto, por lo cual no encontramos la librería Clase que definimos en el proyecto anterior. Seleccione la pestaña..N E T y busque Clase. Como podrá comprobar, tampoco apare ce nuestra biblioteca dentro de las que se encuentran registradas en GAC (
> Distribución de copias locales de librerías DLL 8.
Una buena práctica es hacer una copia local de la librería DLL en el directorio de tra bajo de la nueva solución. Copie el archivo Clase.DLL que se encuentra en c : \a p v b NETVS\Ejerciclos\Clase\Bin\Debug, y péguelo en C:\APVBNETVS\Calculos. Aun que la referencia podría hacerse directamente en el archivo original, se recomienda el uso de copias locales para que al momento de integrar paquetes de instalación el con junto de recursos esté más organizado.
9.
En Solution Explorer seleccione el nodo Cálculos, despliegue el menú contextual y seleccione Add Existing Item. Aparecerá una ventana que le permitirá seleccionar ar chivos. Seleccione la copia local de la d l l que está en C: \APVBNETVS\Caicuios.
www.FreeLibros.me
306
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
10. En Solution Explorer seleccione el nodo PruebaLibreria. Despliegue el menú contextual y seleccione Add Reference. Seleccione la pestaña Browse. Seleccione el ar chivo C lase. DLL que se encuentra en C: \APVBNETVS\Calculos. De esa forma dispo nemos de la funcionalidad del ensamblado, sin entrar en los pormenores de su desarrollo, desde una copia local. 11. Abra desde Solution Explorer el código de Modulel.vb de PruebaLibreria. Agregue un imports, vea Intellisense y note que ya se puede disponer de la clase.
P r u e b a L ib r e r ia *
M o d u le l. v b *
Start P a g e
O b je c t B ro w s e r
(General)
I flj(D e c la ra tio n s)
1; I m p o r t s 2=0 Modul
3
{ > [ " ..................
4là
{}
M ic r o so ft
5
{)
P ru e b a L ib re ria
6
O
System
7
3
■..... [ N a m e sp a c e C la se | Uf
End Mod ule
9
12. Guarde los cambios de su solución. FIN DEL EJERCICIO*
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
M
a p a m e n t a l d e l c a p ít u l o
www.FreeLibros.me
307
308
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
T e r m in o l o g ía Friend, 2 8 4
Friend, 2 8 4
O b ject B row ser, 3 0 2
GET, 2 8 2
Private, 2 8 4
Public, 2 8 4
C o d e Sn ip p e ts, 285
Librerías, 2 8 3
Property, 282
SET, 2 8 2
D ia g r a m a d e la
M o d if ic a d o re s de
P ro p ie d a d e s, 2 82
clase, 2 8 9
acceso, 2 83
d a s s , 281 D e sign er, 2 8 9
Protected, 2 8 4
P r e g u n t a s _________________________________________________________________________
10.1 ¿Cuál es la sintaxis para declarar una clase? 10.2 ¿Cuál es la sintaxis para declarar una propiedad? 10.3 Explique los modificadores de acceso y su impacto en los elementos de una clase. 10.4 Explique el procedimiento para crear una biblioteca o librería. 10.5 ¿Qué especificaciones deben hacerse en un programa para que pueda consumir la
funcionalidad de una clase que se encuentra en una librería externa?
www.FreeLibros.me
C apítulo 10. Clases, m étodos y propiedades
Notas:
www.FreeLibros.me
309
310
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Ex a m e n
r á p id o d e l c a p ít u l o ____________________________________________________
P arte 1: M a r q u e co n u n a c r u z el in c iso q u e r e s p o n d a a la p re g u n ta .
1.
Es la definición formal de un objeto: a) Clase b) Propiedad
c) Método 2.
Es la instrucción constructora por excelencia: a) New b) CreateObject c) Dim
3. Son las características particulares de los objetos: a) Métodos b) Clases
c) Propiedades 4.
Calificadores de declaración que determinan el grado de encapsulamiento de una clase: a) Agregados b) Delegados
c) Modificadores de acceso 5.
Es la especificación de destino (targeí) que aplica para las bibliotecas de clase, al momento de compi lar para generar un DLL: a) Library b) Class
c) Binary P a rte 2: C o lo q u e en la lín e a la le tra «F» si el e n u n c ia d o es f a ls o y « V » si es ve rd a d e ro .
6. Las clases que pertenecen a la biblioteca de clases de .NET Framework pueden utili-
______________
zarse directamente, sin necesidad de instanciación, pero las creadas por el usuario no. 7. Una librería DLL puede ser utilizada sólo por un ensamblado, ya que la información
_______________
de ésta queda registrada en metadatos. 8. Se pueden definir tantas propiedades al objeto como nuestros programas requieran.
_______________
9. Para utilizar una librería desde un programa que le es ajeno, es necesario establecer
_______________
la referencia al compilar mediante el argumento /r 10. Una clase Public puede ser utilizada por todos los programas y procedimientos de una aplicación.
www.FreeLibros.me
a
\\9A
Oo\\ ’ i’ « «•
C a p ít u l o Herencia y polimorfismo Objetivos: Aprender la implementación de herencia y polimorfismo de los
objetos. 1. Aprenderá qué es la herencia entre objetos y cuándo se debe utilizar. 2. Conocerá los modificadores de funcionalidad de los objetos para progra mar adecuadamente la herencia en una jerarquía de clases. 3. Sabrá qué son MyBase y MyClass, y cuándo utilizarlas. 4. Aprenderá en qué consiste el polimorfismo y cómo establecerlo de ma nera programática.
311
www.FreeLibros.me
312
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
Contenido H e r e n c i a .................................................................................................... ¿ C u á n d o se d e b e u tiliza r la h e re n c ia ? ..............................................
313 313
In h e rits (H e re d a r) ............................................................................. N o t ln h e rita b le (N o h e re d a b le ) .........................................................
314 314
M u s t ln h e r it (D e b e h e re da r) ............................................................. M o d ific a d o re s d e acceso, n e ce sario s p a ra la h e re n cia ........................
314 315
Programación de clases base y clasesderivadas................... > A d ic ió n d e clases a u n m ó d u lo u s a n d o C la ss D e s i g n e r . .
315 316
E sta tu to s a u xilia re s p a ra el m a n e jo d e h e re n c ia y p o li m o r f i s m o .................. N o t O v e rr id a b le (N o r e e m p la z a b le ) .................................................... O v e r rid a b le (R e e m p la za b le ) ............................................................. M u s t O v e rr id a b le (D e b e r e e m p la z a r s e ) .............................................. O v e rrid e s (R e e m p la za ) .....................................................................
323 324 324 324 324
O v e rlo a d s (So brecarga/Su stitu ye ) ...................................................... M y B a s e y M y C la s s .............................................................................
324 325
P o lim o rfism o
............................................................................................
325
Comprobación del polimorfismo basado en herencia y el uso de MyBase ....................................................
326
>
Esp ecificación d e m o d ific a d o re s d e he re n cia
u s a n d o P r o p e r t ie s ........................................................ M a p a m e n ta l del c a p ítu lo ......................................................................... T e r m in o lo g ía .............................................................................................. P r e g u n t a s .................................................................................................. E x a m e n rá p id o del c a p í t u l o .......................................................................
www.FreeLibros.me
327 335 336 336 338
Capítulo 11. Herencia y polim orfism o
El manejo de propiedades, métodos y eventos es sólo el principio de la programación orien tada a objetos; las características principales de la POO descansan en la capacidad de los ob jetos para trabajar en colaboración con otros objetos, y de aprovechar total o parcialmente su funcionalidad mediante la reutilización de código según lo requieran las aplicaciones. En el presente capítulo estudiaremos los principios que permiten el máximo aprovecha miento del código a través de POO y con sus dos capacidades características: herencia y polimorfismo.
Herencia La herencia (inheritance) es un concepto fundamental de la programación orientada a ob jetos, y consiste en la capacidad de definir clases que sirven como base de otras clases, evi tando la redundancia en la definición de elementos como métodos, eventos y propiedades. Hay una clase base y una o varias clases derivadas; las clases derivadas aprovechan todo lo declarado en la clase base, asumiéndolo como suyo y utilizando capacidades que no es tán codificadas en ellas. Las clases derivadas pueden heredar, e incluso extender, las propiedades, los métodos y los eventos de la clase base. Es posible también que las clases derivadas sustituyan o modifi quen (override) la funcionalidad de los métodos de la clase base. En Visual Basic, por omisión, todas las clases pueden heredarse. Las ventajas de la herencia son muchas, pero la principal es que el desarrollador tendrá que escribir y depurar el código sólo una vez, para una clase, y disponer en muchas clases de la misma funcionalidad, estableciendo las referencias adecuadas.
¿Cuándo se debe utilizar la herencia? La herencia entre clases no debe utilizarse por el simple hecho de que el lenguaje lo per mite. 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 los automóviles en general (Automóviles) tie ne mucho que compartirle a una clase que almacena las particularidades de los automóvi les deportivos (AutomóvilesDeportivos), pues un automóvil deportivo, antes que ser de tipo deportivo, es un automóvil (is-a). 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. Las personas que poseen 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 éste sus métodos,
www.FreeLibros.me
314
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
propiedades y eventos. Imagínese tener que determinar el tipo de transmisión, número de puertas y número de serie que una persona posee. Simplemente, de una cosa no puede de rivar la otra. Se recomienda una jerarquía de clases, obviamente, sólo si el código de una clase brinda alguna funcionalidad que se pueda re utilizar; tratar de heredar aspectos muy particulares que sólo son pertinentes para una clase no tiene sentido.
Inherits (Heredar) El estatuto Inherits se utiliza para especificar que una clase de nueva creación tiene co mo base una clase ya existente. La clase nueva es la clase derivada (derived class); la cla se ya existente es la clase base (base class). La sintaxis es la siguiente: Class NombreC lase Derivada Inherits NombreC lase Base End Class
En este caso, la clase derivada dispone de todos los elementos declarados en la clase base.
Notlnheritable (No heredable) Ya decíamos que por omisión todas las clases en Visual Basic pueden heredarse. Habrán ocasiones en que no queramos que una clase pueda heredarse; en tal caso, hay que especi ficar, al declarar una clase, que ésta no es heredable. La sintaxis para ello es la siguiente: Notlnheritable C l a s s NombreC lase End Class
En este caso, intentar heredar NombreClase generaría un error (Inherits NombreClase).
Mustlnherit (Debe heredar) Como sabemos, los objetos son instancias de una clase. 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 gene rar una instancia de la misma? La respuesta es que sí. Podemos declarar una clase que no pueda instanciarse pero que pue da ser utilizada sólo si se hereda por otra clase. Para hacer eso es necesario especificar el estatuto Mustlnherit.
www.FreeLibros.me
Capítulo 11. Herencia y polim orfism o
La sintaxis es la siguiente: Mustlnherit Class NombreClase End Class
En este caso, instanciar Nombre Clase generaría error (Dim Objeto As New NombreClaseQ)
NOTA Algu n os lenguajes com o C++ y C#, llaman a las clases calificadas com o Mustlnherit, com o cla ses abstractas (abstract class).
Modificadores de acceso, necesarios para la herencia Usted debe determinar el alcance que tendrá su jerarquía de clases, a efecto de restringir el acceso a las clases, de tal manera que sólo puedan heredarlas aquellas porciones de código que deban hacerlo. Calificar una clase como clase pública (piiblic class), se logra utilizando el modificador de acceso Public al momento de la declaración de la clase. Esto garantiza que todas las cla ses podrán utilizar la clase todo el tiempo; en este caso, el acceso es abierto. Si no quiere una clase de acceso abierto, puede restringir el acceso a la clase utilizando los modificadores de acceso Friend y Private. Tome en cuenta que en una jerarquía de clases el acceso puede heredarse sólo hacia un ac ceso igual o mayor, nunca menor: una clase con acceso Public no puede heredar una cla se Friend o Private, y una clase Friend no puede heredar una Private. En este ejercicio se generará una clase base y una clase derivada, y se comprobará la he rencia entre ellas.
Ejercicio 11.1 Program ación de clases base y clases derivadas
1. 2. 3.
Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). Agregue a su solución un proyecto Windows - Consolé Application, llamado Herencia. Abra Class View (oprima las teclas Ctrl-M ayús-C) y colóquese en el nodo Herencia - Herencia; despliegue el menú contextual y seleccione View Class Diagram.
www.FreeLibros.me
316
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
♦
¿a *
1
J
-
» •7 &u.evüu>ml * 5 E»c«pdon**2 ♦ 9T txcepocnesJ y , Hcfcfloa ♦ RrfrfWM ♦ O E G E htoW+jndoC » HotaMunôoVN ♦ £ » ‘ MsUUotas * 3 Op*r*rlnr*c ♦ 3 Primos
■
VWwOaw Diagram Browse beftnnon
^
1
Fmd Al References Ffccr To Type
D
-J Copy v
Sort Alphabet*^ Sort By C*>)ea Type Sort By Object Access Croup By Object Typo
^ 5 Soljbon Expier- TjCUssVWw
4.
Se desplegará Class Designer. ■ÏÂrt
« X B
M yS ettm o* M iM M C lin -* A cciidüanM w vj««.
1
> Adición de clases a un m ódulo usando Class Designer 5. Colóquese en cualquier parte del diagrama de clase y despliegue el menú contextual. Seleccione A dd - Class. C la c c O la g r a m l .cd*
Modu*t vb
- X
Start Page
Add
M y S c t l in g » NelM ttriUbJe G * u
A
►
O
CJois
n
Enun
200ffl
►
Group Members
» O
Interface
Change Member* Tormet
► g
Abstract dots
Layout Diagram
ri AÖTLöt jhopcj Width
D
V r irt im Delegate MudJe
M u d u tc l M w JJ .
M y S e llH iu s P io u ...
Select Al Export Digram at Image... Qà
Properties
www.FreeLibros.me
( nm m rr
B
Capítulo 11. Herencia y polim orfism o
6.
Aparecerá la ventana New Class. En este programa queremos codificar clases en el programa de consola que ya comenzamos a construir (Modulei .vb). Asignamos en Class Ñame el nombre MiClaseBase, en Access dejamos el valor de Public, y en File ñame especificamos que queremos agregar la clase a un archivo existente (Add to existingfile), colocando el nombre de nuestro programa de consola (Modulei. vb).
C b » nomos M 1 lA tfK W ftccess: P u t*
B
Ffc romc; l/ M iw rw w fi*
- A^d to exeting Me Modjlel.vb
n
7.
Con ello se habrá agregado a nuestro programa de consola una clase. Como podrá sos pechar, las clases no sólo se pueden codificar como proyectos independientes, sino también integrarse perfectamente en otros proyectos.
8.
Aparecerá nuestra nueva clase en el diagrama de clase. Seleccione la nueva clase, des pliegue el menú contextual y seleccione Class Details. llds«Ui¿araml-cd*
Modulel.vb*
X t ft F a o e
I CMbICa la seB ase
M y S e iu n o » MoUnhtr*«ble CU» -*• AppkeahonS«M
r
f \
t M n rtíilP l
M yS rtlno^Prflp.. Modi*
MoAit
/ »
.
®
1
K2L
Type
N a ie - M rfh rw K
«•* —i
♦ @ Proper t ir *
»
S ■9 Field* ♦
0
eve n t*
4
Erro» U t
T*rf: lirt 3
C crtm n i
3
O tfp u t
www.FreeLibros.me
318
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
Utilizando Class Details, agregue a MiClaseBase dos métodos, llamados Mensa j el () y Mensa j e2 (). En la columna Type no coloque nada, debido a que los métodos no de volverán valores.
9.
r n y . .
„ 1
Name Methods + v Mensaje! + v Mensajes
Type
Modifier Public Hubbe
rtde
Sunmary Envia primer mensaje tnv» segundo mensaje
□ □ □
V Properties - f -,add property> s Fields ♦ - Events /
10. Haga las modificaciones pertinentes para que nuestro código luzca como sigue. En esencia se hace al programa strong type, se importa un espacio de nombres, se colocan en Main () líneas para que el programa espere una tecla y se provee de comportamien to a los métodos de MiClaseBase.
C o d ific a ció n de Herencia - Modulel.vb 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Option Explicit On Option Strict On Imports System.Console Module Modulel Sub Main() Write("Presione INTRO para continuar") ReadLine() End Sub End Module Public Class MiClaseBase 1'' 111 Envía primer mensaje 11' Public Sub Mensaje1() WriteLine("Clase Base - Mensaje 1") End Sub
www.FreeLibros.me
Capítulo 11. Herencia y polim orfism o
25 26 27 28 29 30 31 32
319 |
1‘1 1,1 Envía segundo mensaje ‘11 Public Sub Mensaje2() WriteLine("Clase Base - Mensaje 2") End Sub End Class
11. Regrese al diagrama de clase del programa Herencia, agregue una nueva clase (Add - Class); en Class ñame especifique MiClaseDerivada, en Access especifique Public, y en File ñame seleccione Add lo existing file , especificando nuestro programa, es de cir, Modulel.vb. r i
. .-..na»
'id a
Qassname: MUaseUenvada Access: Publc
B
Fíe name: 0 y «ate newfie (•) AAi fn
ílr
□
Modulel.vtl
12. Seleccione en el diagrama de clase el objeto MiClaseDerivada, despliegue el me nú contextual y seleccione Class Details. Agregue un método, cuyo nombre sea Mensaje3 ().
I Class Delate - M v ».
i
O
a
s Type
Name
e
O
e
r
í
v
a
d
Modfíer
a
T
Summary
'-*] a.**'
j/
+
» ¡MensajeiT y
x rtde
□
0 M e th o d s
^
T
Envía tercer mensaje
S Properties
5F 0 Fields V Q Events /
www.FreeLibros.me
320
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
13.
Complemente el código de tal forma que luzca de la siguiente manera:
— IC o d ific a ció n 1 2 3 4 5
d e Herencia - Modulel.vb
Option Explicit On Option Strict On Imports System.Consolé
6
7
Module Modulel
8
9 10 11 12 13 14 15 16 17 18 19 20
Sub Main() Dim MiObjeto As New MiClaseDerivada MiObjeto.Mensajel() MiObjeto.Mensaje2() MiObjeto.Mensaje3() Write("Presione INTR0 para continuar") ReadLine() End Sub End Module Public Class MiClaseBase
21
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
'11 1,1 Envía primer mensaje '11 Public Sub Mensajel () WriteLine("Clase Base - Mensaje End Sub 111 '1' Envía segundo mensaje 11' Public Sub Mensaje2() WriteLine("Clase Base - Mensaje End Sub End Class Public Class MiClaseDerivada Inherits MiClaseBase 111 '1' Envía tercer mensaje 11' Public Sub Mensaje3() WriteLine("Clase Base - Mensaje 2") End Sub End Class
www.FreeLibros.me
1")
2")
Capítulo 11. Herencia y polim orfism o
E je c u c ió n g u ia d a d e
Herencia - Modulel.vb
14. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyec to como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha rea lizado en la solución (teclas Ctrl-M ayús-S). Inicie la depuración para comprobar el comportamiento de su programa (tecla F5). 15. En un módulo lo que se ejecuta es el procedimiento principal, llamado Main (), líneas 22 a la 30. El módulo completo tiene dos clases: MiclaseBase, de la línea 20 a la 35, y MiClase Derivada, de la línea 37 a la 46. MiClaseBase tiene dos métodos: Mensajel ( ), de la línea 22 a la 27, y Mensaje2( ), de la línea 29 a la 34. MiClaseDerivada tiene un solo método: Mensa je3( ), de la lí nea 40 a la 45.
Tome en cuenta que la clase MiClaseDerivada no posee los métodos Mensa jel ( ) y Mensaje2( ), pues la que los posee es la clase MiclaseBase. Lo más importante de este programa es que MiClaseDerivada hereda la funcionalidad de MiclaseBase al aplicar la instrucción Inherits, en la línea 38; aun cuando Mensa jel ( ) y Mensaje2( ) no están declaradas en MiClaseDerivada, ya forman parte de di cha clase, debido a que son tomadas de la clase base. La integración es tal que, al es tar codificando el programa, Intellisense reconoce los miembros de MiclaseBase como parte de MiClaseDerivada. Start Page
ClassDwgraml.cd*
M o d u le l.v b *
r-yi Module 1
11
O ption Expl i ci t On O ption S t r i c t On
2 2 3 4 5 6
Im ports System.Console Module Modul e l
8
Sub M a in () Dim M iObjeto As New M iClaseDerivada MiObjeto.| 12¡ W rite f 'ubic Sub Mensaje1() ReadLi 13 ! [nvía primer mensaje 14: End Sub * 15! v Mensaje3 16; End Module 16 Common All 17 18 .P u b lic Class MTCrases. 19 I 20 3 ' ' ' < s u im t a r y > 21 ''' E nvia prim er 22 k ' '‘ * ' ' < / sim n a r y > 23 2 PPuub b lic lic Sub Sub Mensaj M en sa je lO W rite r it e LLin inee("C (" Cllase Base - Mensaje 1” ) 25 r End Sub 9
11:
j
www.FreeLibros.me
322
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
16. En la línea 10 se tiene un constructor que genera una instancia de la clase MiClaseDe rivada bajo el nombre de MiObjeto. Observe cómolaslíneas 11 y 12 hacen uso de métodos no declarados en laclase MiClaseDerivada;esto esposible gracias a que, al haber establecido una relación de herencia con MiClaseBase, la clase derivada dis pone automáticamente de todos los métodos, propiedades y eventos declarados en la clase base. De esta forma, MiClaseDerivada sólo declarará cosas que no están declaradas en Mi ClaseBase. Declarar los mismos métodos en ambas clases sería redundante.
Tome en cuenta las dimensiones que puede tomar su jerarquía de clases, ya que si he reda una clase que a su vez es derivada de otra clase, se hereda también la funcionali dad de la clase base de ésta. Si todo ocurrió como se esperaba, la salida será la siguiente: Clase Base - Mensaje 1 Clase Base - Mensaje 2 Clase Base - Mensaje 2 Presione INTR0 para continuar
17. Si consultamos el diagrama de clase, nos daremos cuenta que reconoce ya la relación de herencia existente entre nuestras dos clases.
C la s s D ia g ra m 1. cd
M o d u le l. v b
Start P a g e
C la s s D ia g r a m l. c d
M o d u le l. v b
S
si
m
m
FIN DEL E JER C IC IO *
www.FreeLibros.me
Capítulo 11. Herencia y polim orfism o
Estatutos auxiliares para el manejo de herencia y polimorfismo
Tiempos de compilación deCLR
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 que lo serían más con algunas pequeñas modificaciones. Dichas modificaciones se realizan en la clase derivada, respecto de las definiciones origi nales existentes en la clase base. La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método (
Estatutos auxiliares para el manejo de herencia
NotOverridable
www.FreeLibros.me
324
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
NotOverridable (No reemplazable) El primer escenario es que la clase base no acepte que su funcionalidad sea modificada o sustituida. En ese caso, el estatuto NotOverridable evita que una propiedad o método de una clase base pueda ser sustituido en una clase derivada. Por omisión, los métodos públi cos en una clase base son NotOverridable.
Overridable (Reemplazable) El segundo escenario es que la clase base admita modificaciones o sustituciones a su funcio nalidad. El estatuto Overridable establece que una propiedad o método (elemento) de una clase base puede ser modificado en su implementación o sustituido en una clase derivada.
MustOverride (Debe reemplazarse) El tercer escenario es que la modificación a la funcionalidad de la clase base no sólo sea posible, sino que sea obligatoria. El estatuto MustOverride hace que sea obligatorio hacer variaciones, en la clase derivada, de las propiedades o método de la clase base que han si do heredados. Del lado de la clase derivada hay dos escenarios, que sólo son posibles si los elementos de la clase base permiten modificaciones en la funcionalidad.
Overrides (Reemplaza) El primer escenario es cuando la clase base permite que su funcionalidad sea modificada, respetando la estructura original del elemento modificado. El estatuto Overrides permite la variación en la clase derivada, de sus propiedades o sus métodos. Esto será siempre y cuan do se mantengan los mismos argumentos en el método de la clase base y la clase derivada. Overrides sólo permite desarrollar en la clase derivada una implementación distinta de un elemento de la clase base, y no su sustitución por otro que no guarde semejanza.
Overloads (Sobrecarga/Sustituye) El segundo escenario es que se desee sustituir la funcionalidad, sin necesidad de respetar estructuras o condiciones precedentes. En ocasiones, además de modificar el comportamiento de los métodos que participan en una relación de herencia, es necesario hacer uso de diferentes argumentos, ya sea porque los que se tienen deben considerar otros tipos de datos, o bien, porque el método que mo-
www.FreeLibros.me
Capítulo 11. Herencia y polim orfism o
difica al heredado de la clase base requiere una cantidad distinta de argumentos. En este caso, ya no hablamos de una implementación distinta de lo mismo, sino de dos métodos bastante distintos entre sí que comparten un nombre. En este último caso, Overrides no sirve pues exige igualdad de argumentos. Para poder lograr nuestro cometido, debemos utilizar Overloads, que indica la sustitución del méto do de la clase base por otro de la clase derivada, tengan o no relación entre sí. Overloads es la única forma de implementar, bajo un mismo nombre, dos métodos que no coinciden más que en el nombre.
M yBase y MyClass Se puede utilizar la palabra reservada MyBase para llamar a ejecución a un método de la clase base desde una clase derivada. Esto quiere decir que a) si existe herencia entre dos clases, y b) en la clase derivada se modifica un método, entonces c) es posible mandar lla mar a ejecución al método, ya sea en la forma en que se encuentra en la clase base, o en la forma en que se encuentra en la clase derivada misma. Con MyBase podemos obligar a la aplicación a que utilice un método de la clase base y no de la clase derivada; en caso contrario, es posible que queramos mandar llamar el método tal y como está en la clase derivada. Para ello utilizamos la palabra reservada MyClass, que se encarga de llamar a ejecución un método que se encuentra en la misma clase cuando és ta es derivada. Es importante saber que tanto MyBase como MyClass, aunque en su manejo parecen obje tos, realmente no lo son. No se instancian; existen porque el lenguaje los proporciona pa ra un manejo más flexible de la herencia y el polimorfismo.
Polimorfismo El polimorfismo es la habilidad que tiene el lenguaje para definir múltiples clases que contengan métodos y propiedades del mismo nombre, pero que brindan diferente funcio nalidad. 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 aquellas cuya funcionalidad estemos invocando. La herencia y la sustitución de métodos y propiedades tienen mucho que ver con el poli morfismo. Cuando se declara una clase y a partir de ésta se derivan otras clases, estamos ante la presencia de la herencia; si además de esto, los métodos y propiedades de la clase
www.FreeLibros.me
326
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
base que fueron heredados son modificados (Overriden) o sustituidos (Overloaded) en la clase derivada, de tal manera que comparten el mismo nombre pero no la misma funciona lidad, estamos ante el polimorfismo. Una manifestación aún más pura del polimorfismo se presenta cuando se utiliza Overloads, que implica una sustitución completa de métodos que se encuentran en clases que guardan una relación de herencia. Cuando en una clase derivada se modifican métodos o propiedades de la clase base, se di ce que hay polimorfismo basado en herencia.
Ejercicio 11.2 Comprobación del polimorfismo basado en herencia y el uso de MyBase
En este ejercicio se comprobará el polimorfismo basado en herencia; para ello se definirán varias clases, se heredarán unas con otras y se verá el uso de la palabra reservada MyBase. El programa calculará lo que se le pagará a los empleados, partiendo del supuesto que pue de haber pago normal, agregarse un bono por puntualidad del 25 por ciento, e incluso un bono adicional del 20 por ciento. 1.
Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin).
2.
Agregue su solución un proyecto Windows - Consolé Application, llamado Nomina.
3.
Edite el programa de tal forma que aparezca de la siguiente manera: —— 1 C o d ific a ció n d e Nomina - Modulel.vb
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Option Explicit On Option Strict On Imports System.Console Module Modulel Const PagoXHoraVig As Decimal = 120D Const BonoPuntualidad As Decimal = 1.25D Sub Main() End Sub End Module
www.FreeLibros.me
Capítulo 11. Herencia y polim orfism o
Abra Class View (oprima las teclas Ctrl-M ayús-C), seleccione el nodo Nomina Nomina y haga clic en el icono View Class Diagram. Agregue, usando Class Designer, una clase llamada Pago, que será pública y que se agregará al programa de consola que estamos trabajando.
4. 5.
Pago A c c e ss :
Q
Public File n am e : O
C r e a t e n e w File P ag o .vb
<♦> A d d to e x istin g file M o d u le 1 .vb
□
OK
Cancel
> Especificación de modificadores de herencia usando Properties En el diagrama de clase seleccione la clase Pago que acaba de agregar, invoque Class Details y agregue un método de nombre CalculaPago, que será público y que devol verá un valor Decimal. En Class Details seleccione el método que acaba de agregar y despliegue el menú contextual; seleccione la opción Properties.
6.
, . ( -JS •P
v - Properties
'¿ }
view code
A
Cut Copy
a Fields
* - Events / <=61 event >
Sunnwry
Hide □
3 1 ■
Modifier
Type
Name - Methods
X
Delete . Properties
n.
www.FreeLibros.me
328
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
7.
En la propiedad Inheritance modifier seleccione el valor Overridable. Properties
•r ?
CalculaPago Method
: 3
Access Custom Attributes
■
X -
1
Public
Inheritance Modifier
Modutel.vb Overridable None MustOverride Overrides
Name Remarts Returns
K
1
NotOverridable Summary Type
Cálculo del pago neto Decimal
Inheritance Modifier
The member's inheritance modfier.
............ 8.
En este punto, nuestro código debe lucir de la siguiente manera: —— 1
Codificación de Nonina - Modulel.vb 1 2 3 4
Option Explicit On Option Strict On Imports System.Console
J
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Module Modulel Public Const PagoXHoraVig As Decimal = 120D Public Const BonoPuntualidad As Decimal = 1.25D Sub Main() End Sub End Module Public Class Pago 111 111 Cálculo del pago neto 111 Public Overridable Function CalculaPago() As Decimal End Function End Class
www.FreeLibros.me
Capítulo 11. Herencia y polim orfism o
9.
329 |
Coloque como argumentos de CalculaPago () las horas trabajadas y el pago por hora. Complemente el método, a fin de que proporcione un resultado. El procedimiento de be quedar de la siguiente manera:
C o d ific a ció n de Nonina - Modulel.vb - Pago 1 2 3 4 5 6
7
8 9 10
11 12 13 14
Public Class Pago
1'' Cálculo del pago neto '11 Public Overridable Function CalculaPago(_ ByVal HorasTrabajadas As Decimal, _ ByVal PagoXHora As Decimal) As Decimal Return (HorasTrabajadas * PagoXHora) End Function End Class
10. Abra Class View (oprima las teclas Ctrl-Mayús-C), seleccione el nodo Nomina Nomina y haga clic en el icono View Class Diagram. 11. Agregue, usando Class Designer; una clase llamada PagoBonif icado, que será públi ca y que se agregará al programa de consola que estamos trabajando. 12. En el diagrama de clase seleccione la clase PagoBonif icado que acaba de agregar, in voque Class Details y agregue un método de nombre CalculaPago (), que será públi co y devolverá un valor Decimal. 13. Edite el programa y agregue una línea que especifique que la nueva clase hereda la funcionalidad de la clase Pago. Aquí se generaría una contaminación de espacios de nombres, dado que Pago ya posee un método llamado CalculaPago(), y al estar he redando su funcionalidad, equivaldría a estar definiendo dos miembros con el mismo nombre, lo cual no es posible. Para evitar el problema, estando en Class Details selec cione el método CalculaPago () de PagoBonif icado, e invoque Properties; deberá modificarse la propiedad Inheritance modifier, asignando un valor Overrides. Da do que se está realizando una operación de reemplazo (overrides), los argumentos del método deben ser exactamente los mismos. La única variante entre los dos pro cedimientos es que el método CalculaPago () de la clase PagoBonif icado retoma el monto a pagar multiplicado por la constante de bono de puntualidad. Seguramente se dio cuenta de que el monto a pagar es un dato que ya ofrece CalculaPago () de la cla se Pago, por lo que se consume el método de la clase base. 14. Desarrolle el punto anterior utilizando Class View, Class Designer y Class Details, o bien agregando el siguiente código en el programa:
www.FreeLibros.me
330
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
J=-
1 2 3 4 5 6 7 8 9 11X AJ 11 12 13 14 15 16
C o d ific a ció n d e Nomina - Modulel.vb - PagoBonif icado Public Class PagoBonificado Inherits Pago 111 '' ' Cálculo de pago con bonificación 11' Public Overrides Function CalculaPago( _ ByVal HorasTrabajadas As Decimal, _ ByVal PagoXHora As Decimal) As Decimal Dim PagoNeto As Decimal PagoNeto = MyBase.CalculaPago(HorasTrabajadas, PagoXHora) Return PagoNeto * BonoPuntualidad End Function End Class
15. Abra Class View (oprima las teclas Ctrl-Mayús-C), seleccione el nodo Nomina - No mina y haga clic en el icono View Class Diagram. 16. Agregue, usando Class Designer; una clase llamada PagoBonif icadoExtra, que será pública y se agregará al programa de consola que estamos trabajando. 17. En el diagrama de clase seleccione la clase PagoBonif icadoExtra que acaba de agre gar, invoque Class Details y agregue un método de nombre CalculaPago(), que será público y devolverá un valor Decimal. 18. Edite el programa y agregue una línea que especifique que la nueva clase hereda la funcionalidad de la clase PagoBonif icado. Aquí se generaría una contaminación de espacios de nombres, dado que Pago ya posee un método llamado CalculaPago(), y al estar heredando su funcionalidad, equivaldría a estar definiendo dos miembros con el mismo nombre, lo cual no es posible. 19. Hay otro problema: el nuevo método, además de los beneficios de puntualidad, inte grará un beneficio adicional que el usuario podrá especificar, por lo cual el método CalculaPago() no tiene el mismo número de argumentos que CalculaPago() de la clase PagoBonif icado, por lo que una operación de reemplazo no es posible. Deberá realizarse una operación de sustitución {overload) para que los argumentos del méto do no necesariamente sean los mismos. La sustitución deberá especificarse vía códi go, dado que Properties no ofrece el valor Overload para Inheritance modifier (lo cual tiene mucho sentido si consideramos que la sustitución tiene que ver más con el polimorfismo que con la herencia). La única variante entre los dos procedimientos es que el método CalculaPago() de la clase PagoBonif icadoExtra devuelve el monto a pagar multiplicado por la constante de bono de puntualidad (información que ofrece el método CalculaPago() de la clase base), y además le agrega un porcentaje adicio nal de beneficio.
www.FreeLibros.me
Capítulo 11. Herencia y polim orfism o
20. Desarrolle el punto anterior utilizando Class View, Class Designer y Class Details, o bien agregando el siguiente código en el programa.
C o d ific a ció n de Nonina - Modulel.vb - PagoBonificadoExtra 1 2
3 4 5 6
7 8
9 10 11 12
13 14 15 16 17 18
Public Class PagoBonificadoExtra Inherits PagoBonificado 111 Cálculo de pago con bonificación y extra ''' Public Overloads Function CalculaPago( _ ByVal HorasTrabajadas As Decimal, _ ByVal PagoXHora As Decimal, _ ByVal Extra As Decimal) As Decimal Dim PagoBonificado As Decimal PagoBonificado = MyBase.CalculaPago( _ HorasTrabajadas, PagoXHora) Return PagoBonificado * Extra End Function End Class
21. Complemente el procedimiento Main() para proveer de funcionamiento al programa. Al final, deberá lucir como sigue:
C o d ific a ció n de Nomina - Modulel.vb 1 2
3 4 5 6
7 8
9 10 11 12
13 14 15 16 17 18 19 20 21
22
Option Explicit On Option Strict On Imports System.Console Module Modulel Public Const PagoXHoraVig As Decimal = 120D Public Const BonoPuntualidad As Decimal = 1.25D Sub Main() Dim PagoNoPuntuales As Pago = New Pago() Dim PagoPuntuales As New PagoBonificado() Dim PagoPuntualesPlus As New PagoBonificadoExtra() Dim Horas As Decimal = 40 WriteLine("Pago a los no puntuales: " & _ PagoNoPuntuales.CalculaPago(Horas, PagoXHoraVig)) WriteLine("Pago a los puntuales: " & _ PagoPuntuales.CalculaPago(Horas, PagoXHoraVig)) WriteLine("Pago a los puntuales, + extra: " & _ PagoPuntualesPlus.CalculaPago(Horas, _ PagoXHoraVig, 1.2D))
www.FreeLibros.me
332
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
W r i t e ( " P u l s e INTRO p a ra c o n t i n u a r " ) R e a d L in e ( ) End Sub End M odu le P u b l i c C l a s s Pago
' ' ' ' ' ' C á lc u lo d e l pago n e to 1 1 ' P u b l i c O v e r r id a b le F u n c t io n C a lc u la P a g o ( _ B y V a l H o r a s T r a b a ja d a s A s D e c im a l, _ B y V a l P ag oX H ora A s D e c im a l) A s D e c im a l R e t u rn
(H o r a s T r a b a ja d a s * P ag o X H o ra)
End F u n c t io n End C l a s s P u b li c C l a s s P a g o B o n if ic a d o I n h e r i t s Pago ' ' 1 111 C á lc u lo de pago con b o n i f i c a c i ó n 111 P u b l i c O v e r r id e s F u n c t io n C a lc u la P a g o ( _ B y V a l H o r a s T r a b a ja d a s A s D e c im a l, _ B y V a l P ag oX H ora A s D e c im a l) A s D e c im a l Dim P ag oN e to A s D e c im a l P ag oN e to = M y B a s e . C a lc u la P a g o ( H o r a s T r a b a j a d a s , R e t u rn P ag oN e to * B o n o P u n t u a lid a d End F u n c t io n End C l a s s P u b li c C l a s s P a g o B o n if ic a d o E x t r a I n h e r i t s P a g o B o n if ic a d o ' ' ' ' ' ' C á lc u lo de pago con b o n i f i c a c i ó n y e x t r a 1 1 ' P u b l i c O v e r lo a d s F u n c t io n C a lc u la P a g o ( _ B y V a l H o r a s T r a b a ja d a s A s D e c im a l, _ B y V a l P ag oX H ora A s D e c im a l, _ B y V a l E x t r a A s D e c im a l) A s D e c im a l Dim P a g o B o n if ic a d o A s D e c im a l P a g o B o n if ic a d o = M y B a s e . C a lc u la P a g o ( _ H o r a s T r a b a j a d a s , P ag o X H o ra) R e t u rn P a g o B o n if ic a d o * E x t r a End F u n c t io n End C l a s s
www.FreeLibros.me
P ag o X H o ra)
Capítulo 11. Herencia y polim orfism o
Ejecución guiada de
333j
Nomina - M o d u le l. v b
22. Construya la solución (oprima las teclas Ctrl-Mayús-B). Establezca el nuevo proyec
23.
24. 25.
26.
to como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha rea lizado en la solución (teclas Ctrl-M ayús-S). Inicie la depuración para comprobar el comportamiento de su programa (tecla F5). El programa calcula el monto a pagar a los empleados. Hay tres escenarios: un pago para todos los empleados, que es un monto neto; además hay un monto para los em pleados puntuales, que es un poco más alto; finalmente hay un monto aún más alto pa ra los que son puntuales, pero además tienen un desempeño excepcional. El programa se compone del procedimiento Main (), líneas 10 a la 26, que se encarga de hacer las instancias de las clases, así como de mostrar los resultados. Al inicio del módulo se declaran dos constantes de alcance público, que por lo mismo estarán disponibles tanto para el módulo como para las clases del programa. Se ane xan estas constantes con el único fin de no solicitar información al usuario para la de mostración del programa. El método Pago.CalcularPago () requiere dos argumentos: horas trabajadas y pago por hora. Con dios calcula el monto del pago a realizar, que resulta de la multiplicación de los argumentos. La clase PagoBonificado hereda la funcionalidad de la clase Pago, y de hecho consume el resultado de sus métodos. A su vez, PagoBonif icadoExtra hereda la funcionalidad de PagoBonificado. Las relaciones de herencia entre las clases quedan como sigue: Pago es clase base de PagoBonificado; Pago bonificado es clase de rivada de Pago y dase base para PagoBonif icadoExtra; PagoBonif icadoExtra sólo es dase derivada de PagoBonificado. Respecto al manejo de los métodos, podemos decir que el método Pago.CalculaPago() es sustituido por PagoBonificado.CalculaPago, y PagoBonificado.CalculaPago es sustituido por PagoBonif icadoExtra .CalculaPago.
F i g u r a 1 1 .2
Relaciones de herencia del programa
www.FreeLibros.me
334
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
27. Al ejecutarse el programa, se definen los valores iniciales del pago por hora vigente (lí nea 7) y del bono de puntualidad (línea 8). En el procedimiento principal se genera una instancia de la clase Pago (línea 11), una instancia de la clase P a g o B o n if ic a d o (línea 12) y una instancia de P a g o B o n if ic a d o E x t r a (línea 13). La funcionalidad de nuestras clases está disponible a través de las variables objeto que acabamos de definir. Otro dato que se provee es el número de horas por semana sobre las que se calculan los pagos (línea 14). 28. En las líneas 16 y 17 se muestra un mensaje que para construirse consume el método C a lc u la P a g o ( ) de la clase Pago, que es la que dio origen al objeto P a g o N o P u n tu a le s. Se proporcionan como argumentos el número de horas laboradas y el pago por hora vi gente. El método se encarga de recibir los dos valores (líneas 36 a la 38), multiplicarlos y devolver el resultado (línea 40). Es importante observar que este método fue codifica do de tal forma que permite su reemplazo y sustitución (modificador O v e r r id a b le ). 29. En las líneas 18 y 19 se muestra un mensaje que para construirse consume el método C a l c u l a P a g o ( ) de la clase P a g o B o n if ic a d o (la que dio origen al objeto P a g o P u n tu a le s ) . Se proporcionan como argumentos el número de horas laboradas y el pago por hora vigente. El método se encarga de recibir los dos valores (líneas 51 a la 53) y de clara una variable de trabajo (línea 55) a la cual le asigna el valor retornado el méto do MyBase . C a lc u la P a g o (); en virtud de que la clase base es Pago, sería equivalente a ejecutar P a g o . C a lc u la P a g o (). Se pasan los datos recibidos a M y B a se . C a lc u la P a g o () y al resultado se le aplica el bono de puntualidad (línea 57). Es importante notar que la clase hereda la funcionalidad de la clase Pago (línea 46) y reemplaza la implementación del método P a g o . C a lc u la P a g o ( ), por lo cual respeta la cantidad y el tipo de los argumentos establecidos en la clase base (líneas 51 a 53). 30. En las líneas 20 y 22 se muestra un mensaje que para construirse consume el método C a lc u la P a g o () de la clase P a g o B o n if ic a d o E x t r a , que es la que dio origen al objeto P a g o P u n t u a le s P lu s . Se proporcionan como argumentos el número de horas laboradas, el pago por hora vigente y el porcentaje aplicable al pago por buen desempeño. El mé todo se encarga de recibir los tres valores (líneas 68 a la 71) y declara una variable de trabajo (línea 73) a la cual le asigna el valor retomado el método M yB ase . C a lc u la P a g o ( ) , es decir, P a g o B o n if i c a d o . C la s e B a s e (), a la cual le pasa los datos que necesita. Al re sultado le aplica el bono extra (línea 76). Es importante observar que la clase hereda la funcionalidad de la clase P a g o B o n if ic a d o (línea 63) y sustituye la implementación del método P a g o B o n if ic a d o . C a lc u la P a g o () (líneas 68 a 71), dado que recibe un nú mero distinto de argumentos que el mismo método en su clase base. Si todo ocurrió como se esperaba, la salida será la siguiente: Pago a l o s no p u n t u a le s : 4800 Pago a l o s p u n t u a le s : 6 0 0 0 .0 0 Pago a l o s p u n t u a le s , + e x t r a : P u ls e IN T R 0 p a ra c o n t in u a r
7 2 0 0 .0 0 0
FIN DEL EJER C IC IO *
www.FreeLibros.me
Capítulo 11. Herencia y polim orfism o
M
a p a m e n t a l d e l c a p ít u l o
www.FreeLibros.me
335
336
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
T e r m in o l o g ía
Abstract class, 315
Inheritance, 313
Gase(s)
Inherits, 314
abstractas, 315 base, 313 Gases derivadas,
Jerarquía de clases, 313 Must Inherit, 314 MustOverride, 323-
313 Debe reemplazarse, 324 Herencia, 313
4
No reemplazable, 324
Overridden, 323 Override, 313, 323
Notlnheritable, 314
Overrides, 323-4
NotOverridable,
Polimorfismo, 325
323-4
Reemplaza, 324
Overload, 323
Reemplazable, 324
Overloaded, 323
Sobrecarga/Sustituy
M y Base, 325
Overloads, 323-4
MyClass, 325
Overridable, 323-4
e, 324
P reg u n ta s ____________________________________________________________________ 11.1 ¿Qué es la herencia? 11.2 ¿En qué casos se recomienda la implementación de la herencia? 11.3 ¿Cuáles son los estatutos para establecer relaciones de herencia entre clases? 11.4 Mencione y explique los estatutos auxiliares de herencia y polimorfismo. 11.5 Mencione un ejemplo de automatización real, en donde pueda usted implementar
herencia y polimorfismo.
www.FreeLibros.me
Capítulo 11. Herencia y polim orfism o
Notas:
www.FreeLibros.me
338
A p re n d a Practicando Visual Basic 2005 usando Visual Studio
Exa m en
r á p id o d e l c a p ít u l o
P arte 1: M a r q u e co n u n a c r u z el in c iso q u e c o n sid e re q u e re s p o n d e a la p re g u n ta .
1. Es la habilidad de una clase para servir de base a otra clase, trasladándole su funcionalidad: a) Herencia b) Polimorfismo c) Encapsulamiento 2. Tipo de relación para la que se recomienda la herencia: a) Has-a b) I s - a
c) Go-to 3. Permite la variación en la clase derivada, de las propiedades y métodos (requiere mantener los mismos argumentos): á) Inherits b) Overrides
c) Overloads 4. Habilidad de un lenguaje para definir clases que se comporten distinto, a pesar de llamarse igual: á) Herencia b) Polimorfismo c) Encapsulamiento 5. Permiten generar un tipo de dato compuesto: á) Delegados b) Clases c ) Estructuras P a rte 2: C o lo q u e en la lín e a la le tra «F» si el e n u n c ia d o es f a ls o y « V » si es ve rd a d e ro .
6. Por omisión, las clases en Visual Basic son Notlnheritable.
_____________
7. Si no desea un acceso abierto a su clase puede restringir el acceso al utilizar el modificador Friend.
_______________
8. MyClass se utiliza para llamar a ejecución un método de la clase base.
_______________
9. La manifestación más pura del polimorfismo es la utilización de overloads.
_______________
10. Si un auto
móvil y su dueño fueran objetos, la relación entre ellos sería is -a.
www.FreeLibros.me
____________
Capítulos: 12 Desarrollo de aplicaciones
Parte 4
W indow s 13 Desarrollo de aplicaciones W eb con ASP.NET 14 Servicios W eb X M L
Herramientas de Visual Studio revisadas: 1. 2. 3. 4. 5. 6.
Form Designer M enú Designer Dynamic Help String collection editor H T M LD e sign e r Regular Expression Editor
Otras herramientas: 1. disco.exe 2 wsdl.exe
Inte rfases W indows/W eb y Servicios W eb X M L En esta parte del libro aprenderemos a desarrollar las interfases que proporcionarán a nuestros procesos datos completos y correctos. Esta parte describe la manera de recopilar los datos necesarios para el procesamiento y el almacenamiento. Comienza con una revisión de las posibilidades de las interfases de plataforma W indows, hoy por hoy, las más sofisticadas y poderosas. Posteriormente analiza la elaboración de interfases para el ambiente W eb con ASP.NET. Final mente, trata el tema de los Servicios Web XML, que permiten la elaboración de interfases desatendidas, propias para el consum o aplicación a aplicación. Hay quienes argum entan que los datos nunca son suficientes para satisfacer las necesidades; esa percepción es propia de las aplicaciones mal delimitadas. El desarrollador inteligente siempre sabe producir el máxim o de información con el mínimo de datos, y se asegura de que los pocos datos requeridos siempre sean proporcionados en la cantidad y la form a correctas.
www.FreeLibros.me
www.FreeLibros.me
Ya
y
C a p ít u l o Desarrollo de aplicaciones Windows Objetivos: Conocer los elementos básicos del trabajo con controles para la crea
ción de aplicaciones con interfaz gráfica Windows. 1. Conocerá los conceptos generales del desarrollo de interfaces y su orien tación a objetos en .NET. 2. Utilizará la ayuda de .NET. 3. Se familiarizará con los grupos de controles más importantes para el desarrollo de aplicaciones Windows. 4. Aprenderá el concepto de las colecciones y su relevancia en el desarro llo de aplicaciones Windows. 5. Conocerá las generalidades del enfoque. 6. Aprenderá a desarrollar una interfaz Windows utilizando Visual Studio.
www.FreeLibros.me
342
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido In te rfa z d e u s u a r i o .................................................................................... D e s a r ro llo d e in te rfa ce s b a s a d a s e n o b je to s
344
..............................................
345
C o n t r o l e s ..........................................................................................
347
F o rm a s d e a g r e g a r c o n tro le s a u n a i n t e r f a z ......................................
348
E stra te g ia p a ra el e s tu d io e fe ctivo d e lo s c o n t r o l e s ........................... Je ra rq u ía d e clases re la c io n a d a s c o n co n tro le s
..........................................
Uso de la ayuda para conocer los miembros de las clases de BCL ........................................................... .................................................
348 349
350
>
U so d e D y n a m ic H e lp
>
B ú s q u e d a d e te m a s en la a y u d a ...................................
352
>
E stru ctura d e u n t ó p ic o d e a y u d a .................................
353
C la sific a ció n d e lo s co n tro le s .....................................................................
355
G r u p o d e co n tro le s c o m u n e s (C o m m o n C o n tro ls) G r u p o d e co n tro le s c o n te n e d o re s (C o n ta in e rs)
350
............................
355
................................
357
G r u p o d e co n tro le s d e m e n ú y b a rra s d e h e rra m ie n ta s ( M e n u s & T o o l b a r s ) ...........................................................................
357
G r u p o d e co n tro le s d e d a to s (D a ta ) .................................................
358
G r u p o d e co n tro le s c o m p o n e n t e s ( C o m p o n e n t s ) ..............................
358
G r u p o d e co n tro le s d e im p re s ió n ( P r i n t i n g ) .....................................
359
G r u p o d e co n tro le s d e c u a d ro s d e d iá lo g o (D ia lo g s) M a n e j o d e co le ccio n e s
........................
360
.....................................................................
361
Las co le c c io n e s y la p r o g r a m a c ió n d e a p lic ac io n e s W i n d o w s ............
362
For E a c h ...........................................................................................
352
E n f o q u e (Focus)
.......................................................................................
Interfaz multipágina con manejo avanzado de cuadros de texto, barra de menús y botones de comando .............. > E sta b le c im ie n to d e v a lo re s g e n e ra le s d e f o r m u la r io
...
363
364 365
> A d ic ió n d e u n s is t e m a d e m e n ú s u s a n d o M e n ú D e s ig n e r .................................................................... >
366
Lín ea s g u ía e n t ie m p o d e d is e ñ o p a ra la a lin e a c ió n d e o b je to s .................................................
368
> C ó m o a g r e g a r im á g e n e s a o b je to s B u t t o n ..................
370
> O p c io n e s d e f o r m a t o p a ra g r u p o s d e o b je to s ............
372
> C ó m o e sta b lece r p á g in a s d e co n tro le s (T a b C o n tro l)
...
Uso de grupos de controles, combos y selectores de número .. Orden de tabulación y activación dinámica de controles.......
375
380 382
>
L a n z a m ie n to d e ta re a s d e s d e la b a rra d e m e n ú s ........
384
>
P ro c e d im ie n to p a ra el e v e n to d e a r r a n q u e ( L o a d ) .......
386
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
>
343 i
U so d e T ab O rd e r p a ra e sta b le c e r el o r d e n de t a b u l a c i ó n ...................................................................
387
B lo q u e o d e c o n tro le s (Lo ck C o n t r o l s ) ...........................
389
> A c tiv a c ió n d in á m ic a d e e l e m e n t o s ...............................
389
>
Uso de controles para la visualizadón de páginas W e b ......... M a p a m e n ta l del c a p ítu lo
391
.........................................................................
392
T e r m in o lo g ía ..............................................................................................
393
P r e g u n t a s ..................................................................................................
394
E x a m e n r á p id o del c a p í t u l o .......................................................................
396
12
www.FreeLibros.me
344
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Interfaz de usuario Se llama interfaz de usuario al sistema de elementos de software a través de los cuales un programa determinado se articula con el usuario para recibir datos y actuar en consecuen cia. La interfaz puede ser gráfica (GUI, Interfaz gráfica de usuario, Graphic User Iníerface), si está constituida por elementos gráficos (iconos, punteros, ventanas); o textual, cuan do el usuario introduce comandos e instrucciones en forma de cadenas de caracteres específicas (por ejemplo, las aplicaciones de consola). En el caso de Visual Basic es posi ble implementar interfaces de usuario en ambas modalidades. El objetivo principal de una interfaz, sea cual sea su tipo, es recibir los datos válidos, mí nimos, suficientes y necesarios para que un programa produzca los resultados esperados, y para dar al usuario la información relacionada con sus operaciones. La interfaz de usuario es el principal elemento de comunicación entre las aplicaciones y los consumidores de la aplicación. Pueden ser consumidores de la aplicación las personas que la utilizan o los programas que se conectan a ella de manera automática y aprovechan su funcionalidad sin mediar la intervención humana (como en el caso de los servicios Web XML). Una interfaz se constituye en un punto de contacto con el usuario: permite la entrada y sa lida de datos, encargándose de los enlaces subyacentes que el usuario no tiene necesidad de conocer. El usuario captura información y espera un resultado, sin importarle la arqui tectura de hardware y software que permitan a la aplicación producir la respuesta.
F ig u r a 1 2 .1
Forma de trabajo de una interfaz.
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
Una buena interfaz: □ Permite la recopilación de la cantidad precisa de datos que el programa requiere para su procesamiento. Más datos de los requeridos es innecesario; menos, es insuficiente. □ Permite la recopilación de los datos, en el tipo de dato que se necesita. Si se desea cap turar una fecha de nacimiento, lo que se espera es un dato de tipo Date, y no un String, un Integer u otro. □ Valida que los datos respeten las reglas de operación. Si las reglas de operación deter minan que una fecha a capturar no sea anterior a la fecha del día del sistema, o que un número deba estar entre un determinado rango, la interfaz debe garantizar que sólo se admitan datos que respeten dichas reglas. □ Proporciona la manera de corregir los errores que en la captura se cometan, y debe orientar al usuario sobre la forma correcta de captura. □ Debe ser amigable, estética y proporcionada. De preferencia, deben respetar los con vencionalismos que el usuario utilice con más frecuencia; el programador no debe an teponer sus preferencias personales si éstas no facilitan la aceptación de la aplicación por parte del usuario. □ La interfaz de usuario debe proporcionar la información de manera organizada y estéti ca, de manera que el usuario la encuentre en la cantidad y la forma requerida.
NOTA En computación hay un fenóm eno que se conoce com o G IG O (Garbage In, Garbage Out/basura entra, basura sale). Si una aplicación acepta datos erróneos, m uy probablemente se g e nerarán errores en el procesamiento. Se puede tener la mejor aplicación del mundo, pero si la persona que utiliza la aplicación introduce datos equivocados, obtendrá resultados equivo cados. Lo más que puede hacer un program ador es validar tantos datos com o sea posible, ya sea por tipo de dato o por regla de operación.
Desarrollo de interfaces basadas en objetos Una interfaz sencilla y práctica para efectos explicativos es el registro de un usuario, tal co mo se muestra en la figura 12.2. Consiste en un cuadro de diálogo con un espacio para es pecificar un nombre de usuario, otro para dar una contraseña y un tercero donde se deberá confirmar la contraseña. El botón Aceptar no se habilita sino hasta que se hayan proporcio nado todos los datos requeridos.
www.FreeLibros.me
346
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
System.Windows.Forms.Form
F igura 12.2
Interfaz elemental.
I o n 2 (J) E
Datos para el acceso
o
u. > £ o
E
E
o
© (I) >» (/)
System.WIndows.Forms.Button
lo >»
Para cumplir con el propósito de la interfaz, el mínimo de datos que podemos preguntar son el usuario y la contraseña dos veces. La interfaz muestra varios elementos: tres etiquetas (objetos Label), tres cuadros de texto (objetos TextBox) y dos botones de comando (objetos Button). Todos ellos se encuentran en un objeto más grande, al que se conoce como formulario (objeto Form). La interfaz es tá compuesta entonces por 9 objetos. Un objeto contenedores el que puede contener otros objetos. 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é conte nido en otro objeto contenedor, por lo que podemos decir que éstos pueden anidarse. Se tienen los siguientes elementos gráficos de interfaz: 1 objeto contenedor y 8 objetos contenidos (1 objeto padre y 8 objetos hijos). Es importante recalcar que en .NET usted no tiene que redactar el código necesario para dibujar píxel por píxel cada uno de los elemen tos. La codificación ya está disponible como parte de BCL en forma de objetos que pue den ser invocados desde su programa. Para dibujar un formulario, por ejemplo, basta con instanciar la clase System.Windows.Forms.Form y modificar el estado del objeto para ob tener la apariencia y el comportamiento deseado. Los objetos que se necesitan en nuestra interfaz derivan de las siguientes clases: Clase BCL
Tipo
Cantidad
System.Windows.Forms.Form
Parent
1
System.Windows.Forms.Label
Child
3
System.Windows.Forms.TextBox
Child
3
System.Windows.Forms.Button
Child
2
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
Controles Los controles son las representaciones gráficas de las clases, disponibles en Visual Studio a través de Toolbox. Los controles son la forma para llegar a las clases de BCL, a fin de generar instancias que se conviertan en objetos de interfaz. Aunque los controles y los ob jetos son cosas distintas, está tan generalizado el uso de la palabra control para designar las instancias de las clases agregadas a una interfaz gráfica que es común encontrarlos como sinónimos. Si desea que su interfaz sea efectiva, requiere saber manejar los objetos que ésta incluya; esto sólo se logra conociendo la clase de la cual derivan y las capacidades de dicha clase. Los controles están disponibles en la barra de herramientas, o Toolbox. La herramienta Toolbox se organiza en grupos de controles, clasificándolos de acuerdo con la similitud de su funcionalidad o enfoque. Los grupos de controles pueden expandirse o contraerse con el fin de tener presentes sólo los controles que utilicemos. Incluso es posible la generación de grupos de controles del usuario, colocando ahí los controles más usuales para nosotros; con ello se facilita la ope ración de buscarlos y encontrarlos.
F igura 12.3
Toolbox, o barra de herramientas.
+ All W indows Form s + C om m on Controls + Containers + M e n u s & Toolbars + D ata + C om ponents © Printing - Dialogs P o in te r
m m
C o lo rD ia lo g
j]
F o ld e rB ro w s e rD ia lo g Fo n tD ia lo g O p e n F ile D ia lo g
i r l S a v e F ile D ia lo g
- General T h e r e a r e n o u sa b le c o n tro ls in this g ro u p . D r a g a n item o n to this text to a d d it to the too lb o x.
www.FreeLibros.me
348
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Formas de agregar controles a una interfaz Existen tres formas para agregar un control a una interfaz gráfica: 1. M o d o inserción. Se logra haciendo doble clic sobre un control en Toolbox. El obje to se agregará al espacio de trabajo, donde podrá moverse o ajustarse. En este modo no hay control de la posición en la que el objeto se colocará, ni de sus dimensiones. 2. M o d o arrastre. Se logra arrastrando un control desde Toolbox hasta el espacio de tra bajo. En este modo tenemos el control de la posición que ocupará el objeto, pero no de sus dimensiones. 3. M o d o trazo. Consiste en hacer un clic sobre un control en Toolbox, y dibujar en el espacio de trabajo el contorno que ha de ocupar el control. En este modo tenemos con trol de la posición y las dimensiones que el objeto ocupará.
Estrategia para el estudio efectivo de los controles La siguiente es la secuencia que recomendamos para aprender a utilizar los controles dis ponibles en la biblioteca de clases de .NET Framework y sus miembros: 1. Tenga bien claro lo que desea hacer. Si no sabe lo que quiere, tampoco sabrá qué clase es la más adecuada a sus necesidades; no sea de las personas que define la inter faz de usuario a medida que se da cuenta lo que la clase permite hacer; pues es la for ma más fácil de hacer de una interfaz de usuario un laboratorio de aprendizaje de cla ses, lo que a la larga es ineficiente. 2. Investigue para qué sirven los objetos generados a partir de la clase. Si la clase no es lo que usted busca, seleccione otra que le sirva más específicamente La bi blioteca de clases de .NET Framework posee tantas, que seguro encontrará alguna que se adecúe a sus necesidades! Incluso si encuentra una que le sea de utilidad, siga buscan do; es posible que encuentre otra clase que le funcione de manera más específica. Sea profundo en su análisis para decidir las clases a utilizar; le aseguramos que será tiempo bien invertido, pues si selecciona una clase que no es la más adecuada perderá tiem po codificando aquellas cosas que la clase no proporciona de origen. Le va a desilusio nar bastante romperse la cabeza para obtener cierta funcionalidad, para luego encontrar se una clase ya integrada a la biblioteca de .NET Framework que hacía precisamente eso que usted codificó. 3. Investigue las propiedades relevantes de la clase. Las propiedades determinan en gran medida la forma en que lucen y pueden comportarse los objetos; es importante ver primero las propiedades, antes de otros miembros, ya que los valores asignados a las propiedades pueden determinar la disponibilidad de los eventos y los métodos. 4. Investigue qué eventos reconoce la clase. Esto le permitirá determinar si un ob jeto generado a partir de la clase le sirve para sus propósitos de interacción y si obede-
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
ce a la filosofía de la interfaz de usuario que está desarrollando. Investigue primero los eventos por la sencilla razón de que, generalmente, mandamos a ejecución un método como respuesta a un evento; si el evento no sucede, el método tampoco sucederá. 5. Investigue, finalmente, los m étodos que permite la clase. Utilizando los mé todos podrá poner a trabajar las capacidades de comportamiento intrínseco del objeto.
Jerarquía de clases relacionadas con controles En la estrategia expuesta anteriormente queda claro que es necesario aprender las propie dades, los métodos y los eventos de las clases de las cuales derivan los objetos, a fin de go bernar su apariencia y comportamientos. Una forma lógica de hacerlo es seleccionar los tipos de objeto que necesitamos y explorar sus propiedades, métodos y eventos; de esta forma podremos damos cuenta de que muchas de las propiedades, métodos y eventos se repiten en todos los objetos. La explicación a ese fenómeno es que derivan de clases genéricas comunes, que proveen la funcionalidad bási ca para todos los objetos. Aprender las clases genéricas automáticamente lleva a conocer un alto porcentaje de capa cidades de las clases para la definición de objetos de interfaz. La gran mayoría de los con troles constituyen una clase derivada de la clase Control, que a su vez es derivada de la clase Object. F igura 12.4
Jerarquía de clases para interfaces en Windows.
»
www.FreeLibros.me
350
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Esto implica que, como ya lo sabe, los controles heredan propiedades, métodos y eventos de la clase base. La figura 12.4 ejemplifica la jerarquía de clases a la que están sujetos la mayoría de los controles que se utilizan en una interfaz de usuario. Si puede entender cuáles son los miembros de la clase 0b j ect y la clase Control habrá en tendido el comportamiento general de los controles. El número de miembros de dichas clases es muy extenso; no sería práctico mencionarlos todos. Si desea consultar un listado exhaustivo búsquelos en la ayuda de .NET Framework, mediante el nombre del control que le interese y la palabra Class.
*
Ejercicio 12.1 Uso de la ayuda para conocer los miembros de las clases de BCL
Conocerá la forma en que se puede buscar información de clases en la ayuda de .NET (es necesario que la ayuda esté instalada en el sistema). 1. Abra la solución Ejercicios, que debe encontrarse enC: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). 2. Haga clic en el botón Show A ll Files Jp de la barra de herramientas de Solitíion Explorer. 3. En Solution Explorer seleccione el nodo HolaMundoWin - Forml.vb - Forml.Designer.vb.
>• Uso de Dynamic Help 4. Elija la opción de menú Help - Dynamic Help. 5. Aparecerá en el espacio de trabajo la herramienta Dynamic Help. Dynamic Help «r/ H ow D o
in i
I '
X
Se arch
▼ ? Ind e x
X
Contents
I
m
Sub Statement (Visual Basic) Sub Procedures Private (Visual Basic) DebuorefSteoThrouahAttribute Members (Syst Attributes Used in Visual Basic DebuooefSteoThrouahAttribute d a ss (System.;11 Visual Basic Lanauaae Keywords Lanouaoe Chanaes for Visual Basic 6.0 Users Customiana the Development Environment Yis.v^.3yfo.5am Rl
How to: Customize Dynamic Hek? ;
Propc’•-s " ö ] Dynamic Help
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
6. La herramienta Dytiamic Help es una ayuda dinámica que actualiza vínculos a los te mas de ayuda relativos a lo que estemos haciendo. Dependiendo de lo que estemos tra bajando, aparecerán los vínculos pertinentes. Inicialmente aparecerán temas genéricos del tipo de proyecto que tengamos en el espacio de trabajo. 7. Busque la siguiente línea de código y seleccione la palabra Label. Me.lblResultado = New Systen.Windows.Forns.Label
8. En Dynamic Help aparecerán sólo temas relacionados con lo que acabamos de seleccionar.
How Do I
-/ Search
Index ^Contents
111! 1
label Members (Mierosoft.Office.Iriteroo.Excel M l Labd Interface (Microsoft.Office.Interoo.ExcelBI OLEForroat.Labd Property (Mfcrosoft.Offtce.In l afrd Merofrers (Sy^ rReflecbon.Ernft) Labd Members (System.Web,UI.WebContr.ols) label Members (System.Winfows.Forrns) Labd Members .(Microsoft.Offlee.Tpqb.Exccj.G l abd Web Server Control Overview
latei Conftrf QyeiYSv? (Wnttovi form?)
Si
Mi J7*'■
i S Dynamic help
9. Busque la ayuda de la clase Label. Deberá iniciar con Label Class. 10. Vea cómo aparecen varios temas que inician con Label Class, pues la clase Label existe en diferentes jerarquías de espacios de nombres (namespaces). Si una clase apunta hacia System.Web.UI .MobileControls, se refiere a las clases para interfaces de cómputo móvil; System.Web.UI .WebControls, se refiere a las clases para interfaces Web ASP.NET; finalmente System.Windows.Forms agrupa a las clases para definir objetos en interfaces basadas en Windows. Incluso hay implementaciones de los con troles para la programación en programas de Microsoft Office, como Word y Excel. Dado que estamos en una aplicación Windows, seleccione Label Class (System.Windows.Forms). Dynamic Help
Label Class (System.Web ■UI ■McbfeControis) £ L?bd çfoss, w$b labejÇjass (System.Wrdpw.s -form?) Label Çjass (Microsoft.Office,Tools,Word.Cpnfa Label Class (Microsoft.Office.Tools.Excel .Contr CodeGotoStatement.Label Prooeitv (System.C CodeLabeledStatement. Label Property (Systen MessaqePrÇCeftyF^er .Labej Property (Sy?tyn ^ S Mig^ügggPeffni??»jnAttffcg^e.tabel Propç MessaoeQueueCriteria.Label Property (System tefaulLPropgrlagsTgSsnd .Labsi Property (Sy& M9g»ge.Lab?l Property (System,Mssssting) &
I
iB H S B B i
m .
J]Dynamic Help
www.FreeLibros.me
352
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
A f ^ Microsoft
A
Visual Stud¡o2(X)5
> Lo nuevo
En Visual Studio 2005, el contenido de la ayuda se distribuye de form a distinta, más organi zada y predecible. Cada clase tendrá un encabezado de tema (Class), para posteriormente ofrecer generalidades (about class), miembros (all members), información del constructor (constructor), sintaxis declarativa (declarative sintaxis), eventos, métodos y propiedades (events, methods, properties).
11. Lo anterior despliega la ayuda de Visual Studio. '* r ^ fS P ìm m m L«t
t* "
t*
I«o»* 'UrOam
; «fcA: ♦/►*•*&>! • •í¡tmxh
Üífirurtt
UMOM
URL. B*-Ntoi/M l.VSCC.*«(M !.W CN.^aiT«J«tt€Vrc»».«rVCfM<
(urttcrcd)
n r r f r i m i v v t C U n Ufcrtft L a b e l C la s s
l o * fe»;
i«« Allí
rnmxin»W» [MuilUttr] ( « M M fh w v tí» ) •(nwnMM] ■00**MOr pootfodoo 0M*i60í| p>«h> t cM>«tai «V i i vmJK
C- *»«r
(•HWtviato)
• íi{ i.w d A l
Ntffikttf - i.v»j.v>n<- r * » r M i# v >
u rp re .u M • « M i i r t wirutewrt Ufcol. M m t i p i c t : Vr«t»m w ifvío»! rorm « A ..* m b l» : l í r t o r r Window*Tortn« (■**
form «.A )
♦: Syntax •
Remark«
* Fxample
•(X»fáff»
• InltcnUmcc Hicrurdiy
i
W m tw
oofi
mirymiwMn wriMprrAr
OptrtCOr
*brm
tfwvWd r Itirwy « tiprtt
* Thread Satety • Platform*» • VcrvÑm Information *
S«e AI«o
0Ctf»fW (MbUKt)
00««C0rJC#1 wwotwIMl
oeerotv ovetot»iVHudluj Mttwt
ElOb i b w l i I»tr
« 9 X lauMen
RM<*
> Búsqueda de temas en la ayuda 12. La ayuda se compone de tres elementos básicos: Index, que se encarga de enumerar todos los temas incluidos; Topic contení , que muestra el contenido de la ayuda corres pondiente al tema, e Index Results , que muestra los diferentes temas que se encuen tran para una búsqueda. 13. Index tiene dos fichas: Contents, que muestra los tópicos de forma organizada por te mas en un esquema de árbol de nodos, e Index , que permite especificar un tema a bus car, ya sea sobre toda la ayuda o aplicando un filtro por tecnología. 14. Utilizando Index, especifique en Filtered by el valor . NET Fram ew ork, con el fin de fil trar la ayuda y ver sólo los temas relacionados con la plataforma .NET. Busque la ayu
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
da de los cuadros de texto, especificando TextBox Class, about en Look for:, y opri miendo la tecla Intro al finalizar. 15. Aparecerán en Index Results aquellos temas que concuerden con la búsqueda.
In d e x R e s u lt s fo r T e x t B o x c la s s j a b o u t T e x t B o x c la s s - 3 t o p ic s fo u n d Title
L o c a tio n
T e x t B o x C la s s ( 5 y s t e m . W e b , U I.M o b ile C o n t r o ls )
■NET F r a m e w o r k R e f e r e n c e D o c u m e n t a tio n
T e x t B o x C la s s ( S y s t e m . W e b . U I. W e b C o n t r o ls )
.M ET F r a m e w o r k R e f e r e n c e D o c u m e n t a tio n
T e x t B o x C la s s ( S y s t e m . W in d o w s . F o r m s )
.N ET F r a m e w o r k R e f e r e n c e D o c u m e n t a tio n
16. Seleccione el tópico TextBox Class (System.Windows.Forms), haciendo doble clic sobre el mismo.
> Estructura de un tópico de ayuda 17. Un tópico de ayuda se compone de explicaciones y vínculos. La ayuda aparece en Topic Content.
F i g u r a 1 2 .5 I rx IB o x CU11
Ayuda.
w X
U R I: mt-hefc /iMS V5CC v60 /W .M 5D N v«V»^5.N ETD EVFX .v20.efVcpief15/hbrl/T.System _W eb_U_M cM eC<
,KfT Ftam*vort> C ia ti Library
TextBox C la ss
Tópico
s«a Alto e. amolé wm bwi • Expand AJI
Vínculos de acceso rápido
« la n çu ag » Pílter MuKipIt
Prov.det « text p ] Y lS U il B lS IC ( D t C H f it lO n ) o eníer te»t.
Nametpace: « B YÍSm l B iS It CJSiQg) A ssem bly: S> [V] ç #
♦ S y n ta x Expandir/ Contraer
+
obile.dll)
{=] ^
♦ Rem ark» ♦ Exam ple
nitro
♦ .NET F ra m e w o rk Security ♦ Inheritance H ierarchy ♦ Thread S a fe ty ♦ P latform s ♦ Ve rsio n In fo rm a tio n ♦ S e e A lso
www.FreeLibros.me
Sub tópicos
Abstract
12
354
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
18. Dependiendo del tópico de ayuda mostrado aparecerán diversos elementos en Topic Contení. En el encabezado del tópico aparecerá el nombre del mismo; debajo, vínculos de acceso rápido a temas de interés general o, por lo menos, un vínculo SeeA lso, que lleva a temas relacionados. Dependiendo del tópico los demás vínculos pueden variar. 19. También en el encabezado del tópico aparece un vínculo para expandir o contraer los subtópicos de la ayuda; si los subtópicos están contraídos, aparecerá el vínculo Expand All, que permitirá expandirlos; en caso de que estén expandidos, aparecerá el vínculo Collapse A ll, para contraerlos. 20. En caso de que los subtópicos correspondientes a TextBox Class no estén expandi dos, haga clic en el vínculo Expand All. 21. Con la finalidad de encontrar información específica, la ayuda cuenta con una opción de filtro que varía dependiendo del contenido que se está buscando. Un filtro típico es el lenguaje .NET en el que se ejemplifican las instrucciones y sintaxis; si usted sólo codifica en Visual Basic, probablemente ver los ejemplos y sintaxis en todos los len guajes .NET incluidos en la ayuda (C#, C++, J#, JScript) no hará más que complicar la investigación. En caso de que el tópico tenga ejemplos de codificación, la ayuda de .NET Framework permitirá seleccionar el o los lenguajes en los que desee ver las implementaciones en código. 22. En Langiiagefilter seleccione únicamente Visual Basic (usage). Vea cómo en el cuerpo de la ayuda aparecerán sólo ejemplos en el lenguaje seleccionado. Observe có mo en Visual Basic se puede incluso filtrar la ayuda para ver el uso (usage) o la decla ración de las sentencias (declaration). 23. En el cuerpo de la ayuda aparecerá el tema desarrollado en subtópicos y ejemplos. Los subtópicos pueden contraerse o expandirse, haciendo clic en el icono (+ , - ) que apa rece contiguo al título. Generalmente aparecerá un resumen de la funcionalidad del tó pico en la parte superior. 24. En el encabezado de la ayuda haga dic en el vínculo Membe r s para examinar las propieda des, los métodos y los eventos disponibles para el objeto Labe 1 en una interfaz Windows. 25. Vea cómo el filtro ha cambiado. Ahora permite filtrar con base en los miembros que desea ver. Ya decíamos que los objetos de interfaz derivan de 0bj ect y de Controls. Si ya conoce los miembros comunes de dichas clases, es probable que sólo le intere se ver en la ayuda aquellos miembros que son particulares de la clase investigada. 26. En la ayuda de los miembros de Label, encuentre la propiedad BackColor. Dicha pro piedad es común a todos los controles, dado que la heredan de la clase Controls. 27. Expanda el cuadro combinado del filtro y desmarque todas las casillas de verificación. Vea cómo BackColor ya no aparece. Esto sucede porque se inhabilitó la opción Include Inherited Members.
28. Este procedimiento es aplicable para encontrar ayuda para todas las clases de BCL. 29. Cierre la ventana de ayuda de .NET. FIN DEL E JER C IC IO *
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
A
Microsoft
Visual Stud¡o2(X)5
> Lo nuevo
En Visual Studio 2005 la ayuda viene mejorada, dado que permite la integración con la com u nidad de desabolladores (se requiere estar en línea para ello). N o sólo se puede consultar lo último en documentación, sino que directamente se pueden agregar preguntas a foros de V i sual Studio. Se tiene un nuevo menú, llamado C om m u n ity, que permitirá el acceso a los re cursos disponibles para la com unidad de desabolladores a nivel mundial.
Clasificación de los controles La herramienta Toolbox muestra los controles de forma categorizada por grupos, de tal ma nera que puedan ser identificados aquellos con mayor afinidad en cuanto a su propósito. Dependiendo de la aplicación que se esté desarrollando (consola, Windows, Web, mobilé) Toolbox mostrará los controles pertinentes. En el caso de las aplicaciones Windows, los controles incluidos en Toolbox son los siguien tes (se mencionan las categorías de controles más importantes):
Grupo de controles comunes (Common Controls) Concentra los controles más comúnmente utilizados en interfaces basadas en Windows. Control
Nombre
Uso
Pointer
Indica la no selección de otros controles. Este control realmente no se enlaza con ninguna clase de BCL y aparece en todos los grupos de controles.
(âb) B u t t o n
Button
Muestra un botón que al presionarlo desencadena una acción.
0
CheckBox
Representa una casilla de verificación.
|HJ] C h e c k e d L is t B o x
CheckedListBox
Representa una lista de opciones que pueden ser marcadas en forma de casillas de verificación.
I H
Com boBox
ComboBox
Representa un cuadro combinado de opciones (cuadro de texto + lista desplegable).
D a te T im e P ic k e r
DateTimePicker
Representa un selector de fechas.
P o in te r
Checkßox
www.FreeLibros.me
356
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
!A
' L ab e l
Label
Representa una etiqueta textual de sólo lectura.
L in kL a b e l
LinkLabel
Representa una etiqueta que puede desplegar hipervínculos.
[fS
L is tB o x
ListBox
Representa una lista.
\íi'
List V ie w
ListView
Representa una colección de elementos, preferentemente gráficos, que pueden ser seleccionados.
| E
M a s k e d T e x tB o x
MaskedTextBox
Representa un cuadro de texto que distingue entre una entrada válida y una inválida, de acuerdo con un patrón.
MonthCalendar
Representa un selector de fechas en modo mes.
N o t if y lc o n
Notifylcon
Representa un icono en el área de notificación.
M u m e r ic U p D o w n
NumericllpDown
Representa un selector de números dentro de un intervalo.
r ¿ ¡ P ic tu r e B o x
PictureBox
Representa un cuadro en el cual se puede desplegar una imagen.
(OEi P ro g re s:s B a r
ProgressBar
Representa una barra de control de avance de un proceso.
|
RadioButton
Representa un botón de opción.
RichTextBox
Representa un cuadro de texto RTF (Rich Texto Fornica, Formato de texto enriquecido).
TextBox
Representa un cuadro de texto.
T o olTip
ToolTip
Representa un cuadro de información que aparece sólo al sobreponer el puntero del ratón sobre un elemento de interfaz.
T re e V ie w
TreeView
Representa una colección jerárquica de elementos (nodos) y permite su selección.
W e b B ro w se r
WebBrowser
Representa un navegador de Internet que puede incluirse en un formulario.
|A
1X1 M o n t h C a le n d a r
t i
ÍIS
\aa
R ic h T e x t B o x
|[ibfi T e x t B o x
nr= ^
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
Grupo de controles contenedores (Containers) Reúne los controles contenedores utilizados en interfaces Windows. Dentro de ellos podrán colocarse otros controles, heredando propiedades de aspecto y disponibilidad. Control
Nombre
Uso
I^
F lo w L a y o u t P a n e l
FlowLayoutPanel
Representa un espacio de trabajo en el cual los controles se acomodan automáti camente de forma vertical y horizontal.
I
G ro u p B o x
GroupBox
Representa un marco que agrupa a otros controles, con la opción de incluir un texto superior explicativo.
pane'
Panel
Representa un espacio de trabajo en el cual se pueden colocar controles que requieren agruparse.
S p Iit C o n t a in e r
SpIitContainer
Representa un área de espacio de trabajo que se divide en dos paneles que pueden ajustarse de manera dinámica.
T a b C o n tro l
TabControl
Representa un conjunto de páginas de controles, que pueden seleccionarse mediante el uso de fichas.
T a b le L a y o u t P a n e l
TableLayoutPanel Representa un panel dinámico
C l
J]
f j
»,
que se subdivide en celdas.
Grupo de controles de menú y barras de herramientas (Menus & Toolbars) Concentra los controles para el diseño de sistemas de menús y barras de herramientas ba sadas en Windows. Control tí
I ^
Nombre
Uso
C o n t e x t M e n u S t r ip
ContextMenuStrip Representa un menú contextual.
M e n u S t r ip
MenuStrip
Proporciona un sistema de menús a un formulario.
StatusStrip
Representa una barra de estado para un formulario.
||___ S t a t u s S t r ip
www.FreeLibros.me
358
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
| í iu T o o lS trip
\T\
T o o lS t rip C o n ta in e r
ToolStrip
Representa un contenedor para objetos de barra de herramientas.
ToolStripContainer
Proporciona paneles laterales en una forma, y un panel central, en donde se pueden colocar otros controles.
Grupo de controles de datos (Data) Concentra los controles para el manejo de datos tomados de diversas fuentes. Control
Nombre
Uso
| i2 J D a t a S e t
DataSet
Representa una base de datos desconec tada que se almacena en memoria.
| J
D a ta G rid V ie w
DataGridView
Representa una rejilla de datos que permite personalizar la apariencia.
B in d in g S o u r c e
BindingSource
Encapsula una fuente de datos para una forma.
B in d in g W a v ig a to r
BindingNavigator Representa una interfaz de navegación y
manipulación de datos cuando se tienen en el formulario controles enlazados con las fuentes de datos. |¿ i)
R e p o rt V ie w e r
ReportViewer
Permite la visualización de reportes ReportViewer.
Grupo de controles componentes (Components) Concentra los controles de uso genérico basados en componentes .NET. Control B a c k g ro u n d W orke r
["te l D ir e c t o r y E n t r y
Nombre
Uso
BackgrouncflVorker
Representa la ejecución de un proceso en un flujo de procesa miento separado \thread).
DirectoryEntry
Representa el encapsulamiento de nodos y objetos de Active Directory.
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
359 i
| ^ , D ir e c t o r y S e a r c h e r
DirectorySearcher
Representa una consulta sobre el Active Directory.
|«^
ErrorProvider
Representa una interfaz entre un control y un error asociado con él.
EventLog
Representa una interacción con el logo de eventos de Windows.
FileSystemWatcher
Representa un monitoreo que vigila y detecta si un directorio o archivo ha sufrido cambios en su contenido.
HelpProvider
Representa ayuda popup o en línea para un control.
ImageList
Representa una colección de objetos de imagen.
| _ J M e ssa ge Q ueue
MessageQueue
Representa un manejador de colas en .NET.
I
PerformanceCounter
Representa un componente de monitoreo de desempeño de Windows (performance coimter).
Process
Representa el acceso a procesos que pueden ser detenidos o iniciados de manera local o remota.
SerialPort
Representa un recurso de acceso al puerto serial.
ServiceController
Representa un servicio de Windows y permite su manipulación.
Timer
Representa un temporizados que permite ejecutar procesos en determinado intervalo.
E rr o r P ro v id e r
|íí|| E v e n t L o g
F ile S y s t e m W a t c h e r
( f T) H e Ip P ro v id e r
|l ¿ P
Im a g e List
I P e r fo r m a n c e C o u n t e r
P roc e ss
|.SerialPort
’-"¿I S e r v ic e C o n t r o lle r
Tim er
Grupo de controles de impresión (Printing) Concentra los controles para la manipulación de la salida por impresora.
www.FreeLibros.me
360
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Control
|Bi
P a g e S e tup D ia lo g
Nombre
Uso
PageSetupDialog Permite a los usuarios establecer la
configuración de las páginas de impresión.
_2.
P rin tD ia lo g
PrintDialog
Representa un cuadro de diálogo estándar de Windows para la selección de impresora y envío de impresión.
P r in tD o c u m e n t
PrintDocument
Representa un documento de impresión que puede diseñarse.
Pri n tP r e v ie w C o n t ro l'
PrintPreview Control
Representa una versión esencial de presentación preliminar.
Pri n tP re v ie w D ia lo g
PrintPreview Dialog
Representa un cuadro de diálogo estándar de Windows para la visualización de presentaciones preliminares.
Grupo de controles de cuadros de diálogo (Dialogs) Concentra los controles de cuadros de diálogo para incorporar funcionalidad estilo Win dows a las aplicaciones. Control
[fS
C o lo rD ia lo g
Nombre
Uso
ColorDialog
Representa un cuadro de diálogo estándar de Windows para la selección de colores.
F o ld e r B r o w s e r D ia lo g
FolderBrowser Dialog
Muestra y permite que el usuario seleccione un directorio de los existentes en el sistema de archivos.
F o n t D ia lo g
FontDialog
Representa un cuadro de diálogo estándar de Windows para la selección de fuentes.
IF] O p e n F ile D ia lo g
OpenFileDialog
Representa un cuadro de diálogo estándar de Windows para la selección de un nombre de archivo existente.
|1rl
SaveFileDialog
Representa un cuadro de diálogo estándar de Windows para la especifica ción de nombres de archivo válidos.
y\ |3=|
S a v e F ile D ia lo g
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
Este libro no incluye todas las propiedades y el manejo de los controles, dado que el tema es extenso y no tiene que ver con Visual Basic como lenguaje, sino con el uso específico de las clases de BCL.
Manejo de colecciones Uno de los conceptos más importantes en .NET Framework es el manejo de colecciones. Una colección es un conjunto de objetos de igual naturaleza que se agrupan como unidad de referencia, y a los que es posible referirse como una unidad, además de ser elementos individuales y autónomos. Podemos encontramos las colecciones como instancias de clases de tipo Collection, co mo arreglos o como propiedades de objetos que permiten el manejo de colecciones (como es el caso de los contenedores). Es requisito para una colección que todos los objetos de la misma sean de un mismo tipo, a fin de guardar una coherencia de contenido que no perjudique el procesamiento que se realice con la colección. A cada uno de los elementos de una colección se le da el nombre de item. Los items son accesibles ya sea por un subíndice que indica la posición del elemento dentro de la colección, o por un nombre de elemento, en el caso que estos estén denominados. Dado que una colección tiene su propia identidad y comportamiento, posee propiedades y métodos que permiten su manipulación. Por ejemplo, para conocer el número de elemen tos que componen la colección basta con invocar la propiedad Collection.Count de la co lección; para agregar elementos, podemos utilizar el método Collection.Add, mientras que para eliminarlos podemos utilizar el método Collection.Renove. Existen colecciones genéricas para agrupar objetos de tipo indeterminado. Este tipo de co lecciones no requiere la especificación de un determinado tipo de objeto, lo que implica mucha flexibilidad; sin embargo, también implica pérdida de desempeño de las aplicacio nes, ya que es necesaria la realización de conversiones en tiempo de ejecución (boxing, unboxing). Se habla de boxing cuando un tipo de dato primitivo es convertido en su equivalente a ob jeto (pasa de ser ByVal a ser ByRef), con lo cual podrá disponer de toda la funcionalidad de la clase, como lo son los métodos y propiedades intrínsecos de la clase que le dio ori gen. Se habla de unboxing en el caso contrario, cuando un objeto pasa de ser un objeto a su equivalente en dato primitivo (de ByRef a ByVal). No sólo existen colecciones genéricas; hay algunas de tipo objeto que refieren a un tipo de objeto determinado y que, por tanto, tienen la ventaja de evitar las conversiones en tiempo de ejecución, lo cual las hace más eficientes.
www.FreeLibros.me
362
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
NOTA Las colecciones serán aludidas en este libro con el siguiente estilo tipográfico: C olle ctio n, a fin de que las distinga de las propiedades comunes.
Las colecciones y la programación de aplicaciones W indow s Es importante entender el concepto de colecciones si se desea desarrollar aplicaciones Windows, pues la interfaz gráfica generalmente utiliza objetos contenedores para ser inte grada. Un objeto contenedor es aquel que puede contener otros objetos. En el caso de las aplica ciones Windows, se tienen tres objetos contenedores básicos: Form, GroupBox y Panel. Cada uno de ellos posee una colección Controls, a través de la cual se controlarán los ob jetos de la interfaz como un todo. La integración de un formulario basado en Windows que actuará como interfaz es muy sen cilla: 1. 2. 3. 4. 5. 6.
Se declara y se instancia un objeto contenedor (por ejemplo, Form). Se declaran e instancian los objetos de la interfaz (derivados de la clase Control). Se proporciona el estado requerido a los objetos de la interfaz (asignación de valores a las propiedades de los objetos). No olvide que algunos objetos contenedores pueden estar dentro de un formulario y que algunos objetos poseen sus propias colecciones. Se agregan los objetos declarados a la colección Form.Controls del objeto contene dor aplicando el método Coiiection.Add sobre la colección. Se muestra el formulario en forma modal, utilizando Form.ShowDialog.
For Each El ciclo For Each es una estructura de control que sirve para explorar colecciones. La sin taxis de For Each es la siguiente: For Each Variable In Colección «proceso en donde Variable se establece como referencia del elemento en la colección» Next Variable
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
363 i
Donde Variable es una variable de trabajo del mismo tipo de dato que los elementos con tenidos en la colección. Colección será la colección de objetos a explorar.
NOTA En la tabla de miembros más utilizados se incluyen sólo aquellos que sean inherentes al co n trol que se está docum entando; se omitirá m encionar propiedades, métodos y eventos que sean derivados de las clases C ontrol y Ob j ect, que ya fueron docum entados en el capítulo a n terior.
Enfoque (Focus) Se entiende por enfoque (focus) la capacidad de interactuar a través del teclado con un ob jeto. Por lógica, en tiempo de ejecución sólo un objeto puede poseer el enfoque en un mo mento determinado. Hay algunos objetos que no pueden tener el enfoque debido a su incapacidad de interactuar con el usuario (por ejemplo, los objetos invisibles como T o o lT ip ). Los objetos que sí permiten la interacción del usuario tienen una propiedad denominada Control.Tabindex que indica el orden en que el control del programa navegará de un ob jeto a otro al presionar la tecla TAB. Inicialmente, en la ejecución de un programa, el enfoque lo tendrá el objeto que, teniendo la capacidad de poseer el enfoque, tenga el valor menor en la propiedad Control.Tabindex, siempre y cuando se encuentre habilitado (propiedad Control.Enabled establecida a Tru e ) y visible (propiedad Control, visible establecida en True). Cuando es posible manipular el valor de un objeto con el teclado se dice que dicho objeto tie ne el enfoque. Si el objeto, teniendo el enfoque, lo traslada a otro objeto, se dice que pierde el enfoque; si un objeto, no teniendo el enfoque lo recibe, se dice que adquiere el enfoque. El orden para adquirir y perder el enfoque está determinado por la propiedad Control. Tabindex. Este orden se respeta sólo si se traslada el enfoque presionando la tecla TAB; es posible trasladar el enfoque de otras formas, como haciendo clic en un objeto, y en tales ca sos no importa el orden determinado en C o n t r o l. T a b ln d e x . Al orden en que los objetos van pasando el enfoque se le llama orden de tabulación (Tab Order). Hay varios métodos y eventos relacionados estrechamente con el enfoque. El método Control. Focus, por ejemplo, proporciona el enfoque a un objeto. Cuando un objeto deja de tener el enfoque, se produce para ese objeto el evento Control. LostFocus. Cuando un objeto adquiere el enfoque, le sucede el evento Control.GotFocus.
www.FreeLibros.me
364
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Como puede darse cuenta, el simple hecho de oprimir la tecla TAB o señalar con el pun tero del ratón a un objeto que no posee el enfoque, propicia una buena cantidad de even tos, tanto para el objeto que recibe el enfoque como para el que lo pierde. Aquí se genera confusión: ¿Cuál ocurre primero? A continuación le mostramos todos los eventos que suceden si un objeto adquiere el enfo que y lo pierde: 1. 2.
Cuando entramos a un objeto, se provoca primero el evento Control.Enter. Ya que entramos, comenzamos a disponer de la capacidad de interactuar con él, por lo que se provoca el evento Control.GotFocus. Si estando en el objeto presionamos TAB, indicamos que queremos dejar el objeto, provocando el evento Control.Leave. Antes de poder dejar el objeto, es necesario saber si es válido o no hacerlo; se provo ca el evento Control.Valldating. Si la validación se lleva a cabo, se provoca el evento Control.validated. Ya que comprobamos que fue válido dejar el objeto, se pierde la capacidad de interac tuar con él, por lo que se provoca el evento Control.LostFocus.
3. 4. 5. 6.
Definir un adecuado orden de tabulación es indispensable para construir una buena inter faz. Si el orden es caótico, el usuario se perderá. No trate de ser innovador con respecto al orden de tabulación: analice el orden en que el usuario del programa acostumbra capturar los datos o analice el documento a partir del cual realiza la captura, y proporcione el orden necesario. Créamelo, se lo van a agradecer mucho.
*
Ejercicio 12.2 Interfaz multipágina con manejo avanzado de cuadros de texto, barra de menús y botones de comando
Aprenderá a crear una aplicación de interfaz Windows utilizando los controles gráficos pro porcionados por .NET Framework. 1. 2.
Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). Agregue a su solución un proyecto Windows - Windows Application, llamado Empresa. Deberá aparecer un formulario en el diseñador de formularios, que por omisión recibe el nombre de Formi.
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
> Establecimiento de valores generales de formulario 3.
Cambie el nombre del formulario, de Formi a f rmEmpresa. Los cambios de nombre se realizan utilizando Properties (tecla F4), localizando la propiedad Nane y especifican do como valor el nuevo nombre que se desea asignar.
NOTA En términos de notación, cuando hagamos referencia a C la se .M ie m b ro , por ejemplo Form.Name, nos referiremos al miembro de la clase; la explicación será válida para todas las instan cias que de dicha clase se generen. C uando hagam os referencia a Instancia.Miembro, por ejemplo frmEmpresa.Name, especifica remos valores y condiciones que se le apliquen sólo a un objeto en particular. En todos los casos, los controles pertenecen a Windows.Forms.Controls.
4.
5.
Modifique las siguientes propiedades: Propiedad
Valor a asignar
frmEmpresa.Text
Registro de empresa
frmEmpresa.Size.Width
450
frmEmpresa.Size.Height
350
Cuando encuentre este tipo de tablas en los ejercicios, lo que debe hacer es lo siguiente: a)
b)
c)
d) 6.
En la columna de propiedad se encuentra una referencia que se compone de 0b jeto.Propiedad. En la herramienta Properties debe asegurarse que tiene selec cionado el objeto al cual desea modificar las propiedades; eso se comprueba si el objeto aparece en el cuadro combinado de selección de objetos de Properties. Una forma de seleccionar el objeto es haciendo un solo clic sobre él. En algunos casos la propiedad tendrá en la tabla dos referencias (Propie dadl.Propiedad2), lo que indica que la primera propiedad engloba a la segunda. A fin de cuentas debe encontrarse en la columna izquierda de la rejilla de propie dades la propiedad especificada (Propiedad), y debe establecer el valor de la mis ma en la columna derecha de la rejilla ( V alor a asignar). Los valores de las propiedades no se asignan hasta oprimir la tecla Intro al termi nar la edición.
La propiedad Forn.Text permite asignar el título que ha de mostrarse en la barra de tí tulo del formulario; Form.Width permite asignar el ancho en píxeles del formulario, mientras que Form.Height permite asignar el alto en píxeles.
www.FreeLibros.me
366
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
7.
En Properties busque la propiedad trnEnpresa.icon, y haga clic en el botón de asistencia de introducción de valores y . Aparecerá la ventana de selección de ar chivos. Seleccione el archivo WindowsApp.ico, que se encuentra en los archivos complementarios al capítulo, en C:\APVBNETVS\CapH. La propiedad Forn.icon permite seleccionar el icono del programa. Como puede ver, el icono que aparece en la barra de título de la aplicación ha cambiado por el que hemos especificado. Por el momento nuestra interfaz luce como sigue:
> Adición de un sistema de menús usando M enú Designer 8.
Visual Studio posee controles y herramientas llamados ToolStríp Designer, que per miten la modificación de propiedades textuales en modo de diseño. Uno de ellos es
9.
Agregue en modo de inserción un objeto MenuStrip; para ello haga doble clic en el control MenuStrip, que se encuentra en el grupo Menú & Toolbars de Toolbox. En el formulario se integrará un sistema de menú, que podrá ser complementado de forma totalmente visual. En la parte inferior de Fortn Designer aparecerá un panel donde se muestran todos los objetos que visualmente no constituyen un elemento de la interfaz, como es el caso de MenuStrip.
MenuStrip.
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
Form Designer debe lucir como sigue: F o f m l. v b [D e sig n ]*
l'ormi.vt>[Dc»gnJ
rorml.vb
("ormi.vb[Design]
7
X
ta
J*____________________________
10. Vea cómo se ha integrado una barra de menúa que muestra el texto Type Here. Esta
herramienta se llama Menú Designer, que permite ir diseñando sistemas de menú con suma facilidad. Por definición, un sistema de menú es un conjunto de opciones que se distribuyen visualmente de forma jerárquica y que al ser seleccionadas desencadenan acciones. Elementos de primer nivel
Figura 12.6
Menu Designer.
Barra de menus (Menu Designer)
Demento« de segundo nivel
11. En M enú Designer cada opción constituye un elemento de menú (menú item). Se tie nen elementos de primer nivel, que son aquellas opciones que aparecen de forma per manente en la barra de menús, y que no dependen de ningún elemento de menú. Tam bién pueden insertarse elementos de segundo nivel, que son los que dependen de un elemento de primer nivel; elementos de tercer nivel, cuarto nivel, y así sucesivamente.
www.FreeLibros.me
368
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
12. En el área de edición donde aparece Type He re se escribe la etiqueta de elemento; si como etiqueta del elemento emplea un verbo, procure utilizar uno en infinitivo. Al co menzar a editar una etiqueta de elemento, automáticamente se proponen elementos la tentes, que son aquellos que pudieran existir siempre y cuando se edite su etiqueta de elemento. Aparecerá siempre un elemento latente abajo y otro a la derecha: los ele mentos latentes que aparecen en la parte inferior generan opciones de menú al mismo nivel, mientras que las opciones que se editan hacia la derecha constituyen la forma ción de un nuevo nivel de elementos (salvo en el caso de los elementos de primer ni vel, donde lo que se genera es un nuevo elemento de primer nivel). 13. Escriba como etiqueta del elemento de primer nivel la palabra Acciones. En el ele mento latente inferior escriba Limpiar campos; en el elemento latente inferior escri ba un guión (-), y finalmente en el elemento latente inferior escriba Cerrar. Nuestro sistema de menús debe lucir como sigue (observe que al aplicar un guión como eti queta se genera una línea separadora):
Form 1.vb [Design]*
Form 1. vb [Design]
Form 1,vb
Form 1,vb [Design]
14. El sistema de menús es para Visual Basic un objeto de tipo MenuStrip; los elementos de un sistema de menús constituyen objetos ToolStripMenultem. Lo que escribimos en la etiqueta de elemento realmente constituye la propiedad ToolStripMenultem.Text de cada elemento.
> Líneas guía en tiempo de diseño para la alineación de objetos 15. Ahora trabajaremos con objetos basados en el control Button, que se encuentra en el grupo C om m on Controls de Toolbox. Agregue un objeto Button a la interfaz y cambie su nombre Buttonl por btnAceptar. Agregue otro objeto Button y cambie su nombre Button2 por btnCancelar. Trate de colocarlos en la parte inferior izquierda, como usualmente Windows ubica los botones de aceptar y cancelar.
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
369 i
16. Al mover los objetos en la interfaz para colocarlos en el sitio que queremos, podremos usar las líneas guía (snaplines) que Visual Basic muestra; éstas permiten una alinea ción y distribución estética de los controles.
Figura 12.7
Guía de proximidad
Líneas guía de Form Designer.
con el borde
17. Existen diferentes líneas guía: las guías de proximidad, que son las que conectan a ob jetos entre sí, indicando la distancia recomendada entre objetos para una interfaz grá fica Windows (también pueden asociarse a bordes del espacio de trabajo). Además existen las guías de alineación, que permiten evaluar la posición de un objeto en rela ción con otros objetos y elementos del entorno. 18. Mueva b t n C a n c e la r de tal forma que se ubique en la esquina inferior derecha. No de je de acomodar el botón hasta que vea las guías de proximidad con el borde derecho e inferior. Eso garantiza las medidas estándar de una interfaz Windows.
Butlon2
19. Mueva b t n A c e p t a r de tal manera que se muestren las guías de proximidad, tanto con el borde inferior como con b t n C a n c e la r ; además deberá buscarse que aparezca la guía de alineación que garantice que el texto interno de los botones estén alineados en su lí mite inferior.
www.FreeLibros.me
370
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
20. Modifique las siguientes propiedades: Propiedad
Valor a asignar
btnAceptar.Text
&Aceptar
btnCancelar.Text
&Cancelar
frmEmpresa.CancelButton
btnCancelar
21. La propiedad Button.Text permite asignar el texto que aparecerá en la cara del bo tón. Si se antepone el carácter & a una de las letras en Button .Text, automáticamen te se forma una tecla de atajo (shortcut); esto permite que oprimir la combinación de teclas Alt-A equivalga a hacer clic en btnAceptar, y presionar Alt-C sea equivalente a hacer clic en btnCancelar. 22. La propiedad Forn.AcceptButton permite definir a un botón existente en la interfaz como acción de aceptación, por lo cual oprimir la tecla Intro equivale a hacer clic en el botón especificado. Por otro lado, Form.CancelButton permite definir a un botón existente en la interfaz como acción de cancelación, por lo cual oprimir la tecla Esc equivale a hacer clic en btnCancelar. En nuestra interfaz se asigna btnCancelar como botón de cancelación. 23. Nuestra interfaz debe lucir como sigue: hormi.vb [UMion]
Hjrml .vb [ueagn]
Kjrml.vti
N*ml.vt>(uesian]
► Cómo agregar imágenes a objetos Button 24. Asigne un valor a btnAceptar.Image; para ello haga clic en el botón de asistencia de introducción de valores Q . Recuerde que todas las asignaciones de valores se realizan desde Properties (tecla F4). Aparecerá la ventana Select Resource:
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
Q
s t i g m i
Q
l
R e x * * ec contcxt O
0
Local resource:
fVojoct resource
Ho:
Resources.resx
Import...
) OK
1
Cancel
25. El valor que ha de recibir b t n A c e p t a r .Im a g e es de tipo Im age, y no puede represen tarse mediante código. Para ese tipo de valores y contenidos cada proyecto posee un archivo de recursos, de extensión . RESX; en ese archivo se almacenan diversos elemen tos externos que deseamos sean considerados como parte integral de la aplicación. 26. Haga clic en Import..., y seleccione el archivo o k . png que se encuentra en el directo rio de archivos complementarios del capítulo. Haga clic nuevamente en Import... y se leccione el archivo E r r o r . p n g . En la lista de recursos tendrá entonces a 0k y E r r o r . Seleccione 0k de la lista de recursos y acepte haciendo clic en el botón Ok. La imagen seleccionada aparecerá en el centro del objeto. 27. Modifique b tn C a n c e la r.Im a g e ; seleccione el recurso E r r o r de la lista de recursos cuando ésta aparezca. Haga clic en Ok para aceptar. La imagen aparecerá al centro del botón. 28. Como puede ver, las imágenes al centro de los botones no son las más adecuadas. Mo difique b t n A c e p t a r . Im a g e A lig n asignando el valor M id d le L e f t . Al hacer la modifi cación aparecerá una ayuda visual que indica la posición en donde deseamos colocar la imagen. -
Properties
a
X
b t n A c e p t a r System . W indows.Form s.Button l i
il
a
-
/
E l Im age
1 ^ 1 E m p re $ a s.M y .R <
■
M iddeCenter
ImageAlign Im agelndex Im ageKey Tm*nfil i<í
I m a g e A l ig n The alignm ef* of the im the control.
M
1
i1 □
11
—
m n u sa i
1 K
1
r» □
peritas I B Dynamic Help
www.FreeLibros.me
372
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
29. Asigne también el valor de MiddleLeft a btnCancelar.imageAlign. 30. La propiedad Button.Image representa la imagen que un botón presentará en su cara, mientras que Button.ImageAlign representa la posición que la imagen ocupará en la cara del botón. 31. Nuestros botones deben lucir de la siguiente manera:
ce piar
J ^ a n c e la r
32. Como puede ver, los botones están muy compactados, por lo que deberá incrementar sus dimensiones utilizando los delimitadores de tamaño. Incremente el tamaño de bt nAceptar hasta que el texto y la imagen se ajusten correctamente. Aunque la tentación sea mucha, no modifique por el momento el tamaño de btnCancelar.
F i g u r a 1 2 .8
Modificando dimensiones de botón
D e lim ita d o re s d e ta m a ñ o
n
t I
c
Acepfar
u
u
n
DJ^ancel« □
>• Opciones de formato para grupos de objetos 33. Un grupo de objetos es la selección de varios objetos en tiempo de diseño. Cuando se tiene un grupo de objetos en Properties aparecerán sólo las propiedades que son com partidas por todos ellos; modificar el valor de una propiedad cuando se trabaja con un grupo de objetos equivale a modificar el valor de dicha propiedad para todos los obje tos del grupo. 34. Al trabajar con un grupo de objetos, en todos ellos se colocarán delimitadores de ta maño. Sólo uno de ellos tendrá los delimitadores de tamaño en color blanco, mientras que el resto de los objetos tendrá los delimitadores en color negro. El objeto que tiene los delimitadores en color blanco es el objeto principal de referencia; es decir, que las opciones de formato aplicables al grupo van en función a dicho objeto. Teniendo se leccionado un grupo, basta con hacer clic sobre alguno de los objetos del mismo para que asuma el rol de objeto principal de referencia. 35. Las opciones de menú pertinentes para el objeto principal de referencia son las si guientes:
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
Icono en barra da herramienta/0pci6n de menu
A c c ió n
|=L,
Format - Align - Lefts
Alinea todos los objetos del grupo con el borde izquierdo del objeto principal de referencia.
£
Format -A lig n - Centers
Alinea todos los objetos del grupo con el eje central vertical del objeto principal de referencia.
Format - Align - Rights
Alinea todos los objetos del grupo con el borde derecho del objeto principal de referencia.
“ t
Format - Align - Tops
Alinea todos los objetos del grupo con el borde superior del objeto principal de referencia.
-o[j-
Format -A lig n - Middles
Alinea todos los objetos del grupo con el eje central horizontal del objeto principal de referencia.
jJi
Format -A lig n - Bottoms
Alinea todos los objetos del grupo con el borde inferior del objeto principal de referencia.
r=! «•j+
Format - Make same size - Width
Establece a los objetos del grupo con el mismo ancho que el objeto principal de referencia.
V
Format - Make same size - Height
Establece a los objetos del grupo con el mismo alto que el objeto principal de referencia.
TO Fonnat - Make same size - Both 1-4J
Establece a los objetos del grupo con el mismo tamaño que el objeto principal de referencia.
Format - Horizontal spacing Make equal
Establece una misma distancia entre los objetos, sobre el eje horizontal.
F°rmai ~ Horizontal spacing Increase
Incrementa de forma proporcional la distancia entre los objetos, sobre el eje horizontal.
Format - Horizontal spacing Decrease
Disminuye de forma proporcional la distancia entre los objetos, sobre el eje horizontal.
® Format - Horizontal spacing Remove
Elimina la distancia entre los objetos, sobre el eje horizontal, dejándolos contiguos.
^ Format - Vertical spacing Make equal
Establece una misma distancia entre los objetos, sobre el eje vertical.
¡jfla
■JP-i
□Dd
Fonnat - Vertical spacing Increase
Incrementa de forma proporcional la distancia entre los objetos, sobre el eje vertical.
a J Fonnat - Vertical spacing Decrease
Disminuye de forma proporcional la distancia entre los objetos, sobre el eje vertical.
§+ Format - Vertical spacing Remove
Elimina la distancia entre los objetos, sobre el eje vertical, dejándolos contiguos.
www.FreeLibros.me
374
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
36. Otras opciones de formato aplicables tanto para los objetos en grupo como para un ob jeto individual, son las siguientes: Ic o n o en b a r r a de h e rra m ie n ta / O p c ió n de menú
A c c ió n
PP[ Format - Center in fo rm Horizontally
Centra los objetos respecto al ancho del formulario.
± Format - Center in fo rm - Vertically
Centra los objetos respecto al alto del formulario.
-j ¡ Format - Order - Bring to fro n t
Coloca el objeto al frente de los demás, de tal forma que tendrá prioridad en la selección.
Format - Order - Send to back
Coloca el objeto atrás de los demás, dándoles menor prioridad de selección.
37. Trace un rectángulo imaginario que toque los dos botones del formulario.
!
Aceptar
[j£ancelar
............
]
1 L
raí
................................. k
38. Al soltar el ratón se habrán seleccionado los objetos en modo grupo.
^
Aceptar
Cfj£ancelar
■ ...... ó ..... u
—
tr -
Si
39. El objeto primario de referencia es b t n C a n c e la r , dado que tiene delimitadores de ta maño en color blanco. Haga, en b tn A c e p t a r , a fin de que se establezca como objeto primario de grupo. 40. Seleccione Fonnat - M ake same size - Both . Los botones asumirán el tamaño del ob jeto principal de referencia, es decir, b tn A c e p ta r. 41. Apoyándose en las líneas guía, vuelva a distribuir los botones de tal manera que ten gan una distribución estética. Nuestro formulario debe lucir como sigue:
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
F o rm 1.vb [D c w q n ]
Fermi .vb [D cngn]
Form i.vb
Formi, vb[Dcs»gn]
~
X
' _________________________________________ ; a
> Cómo establecer páginas de controles (TabControl) 42. En modo trazo agregue un objeto TabControl, que se encuentra en el grupo Containers de Toolbox. Trace el objeto de tal forma que quede entre la barra de menú y los botones, abarcando casi hasta los bordes el ancho del formulario. 43. Aparecerá el objeto TabControl, mostrando dos fichas (tabs).
F ig u r a
12.9
Pestañas de selección <*« página
Mover objeto
TabControl.
Menú de tareas
4
i /\ ftbP.agel
TabControl
TabPaoe2
"i
TabPage
Delimrtadores < de tamaño
www.FreeLibros.me
12
376
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
44. Lo que se agrega a la interfaz es un objeto T a b C o n t r o l que contiene dos objetos Tab Page; cada T abPage posee su pestaña de selección, de tal forma que se pueda alternar entre ellas. Si hacemos clic sobre el área superior del control, es decir, en el área donde se encuentran las pestañas de selección de página, estaremos trabajando con el objeto T a b C o n t r o l en su calidad de contenedor de objetos TabPage. Por otro lado, si hacemos clic en la pestaña de algún T abPage y luego hacemos clic en el cuerpo de la página, estaremos trabajando con el objeto TabPage. 45. Haga clic en cualquiera de las pestañas de selección de página, a fin de seleccionar el T a b C o n tro l. Cambie el nombre del objeto de T a b C o n t r o ll a tc D a t o s . 46. T a b C o n tro l proporciona herramientas a nivel objeto para la manipulación de su compor tamiento y apariencia (figura 12.09). A través de los delimitadores de tatnaño es posible extender o contraer el control, simplemente arrastrando el delimitador en la dirección en que queremos que se expanda o contraiga. También está el icono para mover el ob jeto de lugar, a través del cual podemos arrastrar un control hacia otro sitio en la inter faz. Finalmente tenemos el icono de tareas de objeto (smart tag) que proporciona una liga rápida hacia las acciones más comunes a realizar con el control, y además permite la modificación rápida de las propiedades más comunes; si bien las acciones son gene ralmente posibles en el menú de contexto, smart tag es más específico. 47. Haga clic en el smart tag del objeto y seleccione el vínculo A dd Tab. F o r m l. v b [ D e s i g n ] 4
Form l. v b [Design]
*
F o rm l.vb
Fo rm i.v b [Design]
Form 1.Designer.v b
O a ssD iagra m l.c d
JJB 1 Acciones
48. Se agregará un T abPage más a t c D a t o s . En el plano subyacente, lo que ocurrió es que se agregó un elemento más a la colección TabPages. 49. Si seleccionamos la pestaña de un T abP age y luego hacemos clic en el área del cuer po del TabPage estaremos trabajando con la página. Seleccione la ficha TabP age 1 y ha ga clic en el cuerpo de la página; en Properties cambie la propiedad Ñame, de TabPa ge l a t p G e n e ra le s . Modifique también el nombre de T abPage2 por tp C o n t a c to , y el de Ta bP a ge 3 por t p S i t i o . 50. Modifique las siguientes propiedades: P ro p ie d a d
V a lo r a a s i g n a r
t p G e n e r a le s . T e xt
Datos generales
tp C o n ta c to .Text
Persona de contacto
t p S i t i o . Text
Sitio en Internet
b t n A c e p t a r .E n a b le d
False
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
51. Seleccione tpGenerales y agregue 5 etiquetas (Label), 1 cuadro de texto con másca ra (MaskedTextBox), 3 cuadros de texto (Textbox) y un objeto para selección de fe cha (DateTimePicker). Todos los controles se encuentran en el grupo Common Controls de Toolbox. 52. Distribuya los objetos de la siguiente forma:
53. Modifique las siguientes propiedades. Un consejo rápido: si al seleccionar un objeto su propiedad por omisión es Text, se puede comenzar a escribir el valor de la propiedad Text sin seleccionarla en Properties. Tal es el caso de Label: haga clic en los objetos Label y escriba simplemente lo que la etiqueta ha de mostrar, automáticamente se ac tualizará Text. Los controles se relacionan en orden de lectura de izquierda a derecha, de arriba abajo: Propiedad
Valor a asignar
Labeil.Text
ID Empresa:
MaskedTextBoxl.Name
mtbIDEmpresa
mtbIDEmpresa.Mask
0 , seleccionar y escribir 9999999999 en Mask
www.FreeLibros.me
378
Figura
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
1 2 .1 0
Input Mask.
___________________________________________________________________
J l t 3
s * W r a pM iW w rf mMk fV vrfifinri from rtw Ikt h*ér»« er <*ferr c ixrnm rn rW m* a m a rro
iimk.
C*íícrooon fftdiy» fw d d Fecha Fechayhora llora Numérico fftW ro d» teltfono d * tvWfono tnóví Número de teléfono s r cócfcQ.. . Número óel s w o so o d
rjojk;
Data Format
vaWacno Tvoe
173« ¿b/lU/AWb 26/10/¿005 11:30 00; DO 123« (012)3*5-6799 000-123-4567
( iw *) Date irne DateTme DateTmo M 32 (non.) (non#) (none) (none) (iM ie)
lZJ-lbe»/ 1¿>15-0799
0000000000
0
U»c VoldabngTypo
I <*
I I <*** I
Propiedad
Valor a asignar
Labell.Text
ID Empresa:
Label2.Text
Nombre:
TextBoxl.Ñame
txtNombre
txtNombre.CharacterCasing
Upper
txtNombre.MaxLength
40
Label3.Text
Dirección:
TextBox2.Name
txtDireccion
txtDireccion.AcceptsReturn
True
txtDireccion.MaxLength
200 True (aumentar el alto del objeto, una vez modificada esta propiedad)
txtDireccion.Multiline
Label4.Text
NIP de acceso:
TextBox3.Name
txtNIP
txtNIP.MaxLength
10
txtNIP.PasswordChar
*
DateTimePickerl.Ñame
dtpClienteDesde
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
379 i
54. La interfaz debe lucir de la siguiente manera:
Datos generales
Presona de contacto
Sitio en Internet
ID Empresa: Nombre: Dirección:
NIP de acceso: Cliente desde:
55. Las propiedades Text de los controles indican la parte textual visible de los objetos. La propiedad MaskedTextBox.Mask sirve para representar la máscara o patrón de entrada que aceptará el control; en nuestro caso, el número de empresa es un número de máxi mo diez posiciones, por lo que la máscara de entrada es 9999999999. La propiedad TextBox.CharacterCasing determina si el contenido del cuadro de texto será conver tido a minúsculas, mayúsculas, o será mixto; en nuestro caso pedimos que el nombre de la empresa esté en mayúsculas. La propiedad TextBox.MaxLength permite especificar el número máximo de caracteres que podrán ser ingresados en el cuadro de texto. La propiedad TextBox.AcceptsReturn permite que se incluya Intro dentro del conteni do, sin darle significado especial. La propiedad TextBox.MultiLine establece que el cuadro de texto puede incluir varias líneas de escritura; al establecer esta propiedad como True, automáticamente aparecen delimitadores de tamaño que permiten no sólo incre mentar el ancho del objeto, sino también el alto. La propiedad TextBox.PasswordChar permite establecer un símbolo a través del cual lo que uno escribe en un cuadro de tex to queda oculto a la vista. 56. Guarde todos los cambios realizados en su solución e inicie la depuración (oprima la tecla F5). Ejecute la aplicación y verifique que en el ID de la empresa sólo se puedan capturar números, hasta un total de diez; que lo capturado en el nombre siempre esté en mayúscula, que en dirección se pueda capturar más de una línea; que se admita el uso de Intro; que el NIP aparezca como oculto a la vista, y que se pueda seleccionar una fecha distinta a la mostrada como antigüedad del cliente. FIN DEL EJERCICIO*
www.FreeLibros.me
380
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
*
Ejercicio 12.3 Uso de grupos de controles, combos y selectores de número
Aprenderá a utilizar grupos de controles, combos y selectores de números en una interfaz Windows. 1. 2. 3.
4.
Abra la solución E j e r c i c i o s , que debe encontrarse en C : \ A P V B N E T V S \ E j e r c ic io s (archivo de extensión s in ) . Continúe trabajando con el proyecto Em presa, iniciado en el ejercicio anterior. Seleccione tp C o n t a c t o y agregue cuatro etiquetas (L a b e l), un cuadro de texto (T e x t Box), un cuadro de texto con máscara (M a sked T e xtB o x), un cuadro combinado (ComboBox), un selector de número (Num ericUpDown) y un cuadro de grupo (G roupBox), dentro del cual se deberán agregar en modo arrastre dos botones de opción ( R a d i o B u tto n ). Al seleccionar el cuadro de grupo y moverlo de lugar, los botones de radio deberán moverse junto con él. Distribuya los objetos de la siguiente manera:
Datos generales
Presona de contacto
Sitio en Internet
La be 16 La be 17 LabelS LabeIS GroupBoxl
5.
O
RadioButtonl
O
RadioBulton2
Modifique las siguientes propiedades: P ro p ie d a d
V a lo r a a s i g n a r
L a b e l6 .T e x t
Nombre:
T e x t B o x l.Name
txtNombreCon
tx tN o m b re C o n .M a xL e n gth
50
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
txtNombreCon.CharacterCasing
Upper
Label7.Text
Teléfono:
MaskedTextBoxI.Name
mtbTelefono
mtbTelefono.Mask
99 (99) 9999-9999
Label8.Text
Título:
ComboBoxI.Name
cboTitulo
cboTitulo.Items
0 , y escribir las opciones del combo, una en cada línea.
F igura 12.11
String Collection Editor.
ycíjyjj EdiÍOr Enter the strings in the collection (one per line):
OK
Propiedad
Valor a asignar
Label9.Text
Sucursales:
NumericUpDownl.Ñame
nudSucursales
nudSucursales.Máximum
50
nudSucursales.Minimum
1
GroupBoxl.Text
Sexo
RadioButtonl.Ñame
rbtnMasculino
rbtnMasculino.Checked
True
rbtnmasculino.Text
Masculino
RadioButton2.Ñame
rbtnFemenino
rbtnFemenino.Text
Femenino
www.FreeLibros.me
Cancel
382
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
6.
La interfaz debe lucir de la siguiente manera:
Datos generales
Presona de contacto
Sitio en Internet
Nombre:
u
T eléfono: Título:
1
Sucursales:
• S HI
!
Sexo
i
7.
8.
0
Masculino
O
Femenino
Las propiedades Text de los controles indican la parte textual visible de los controles. La propiedad NumericUpDown.Máximum sirve para indicar el número máximo hasta donde permitirá el selector de números llegar, mientras que NumericUpDown.Mínimum determina el mínimo. La propiedad GroupBox.Text permite establecer el texto de encabezado que ha de aparecer en un cuadro de grupo de controles. La propiedad RadioButton .Checked indica si el botón de opción está seleccionado o no; sólo puede haber un botón de opción seleccionado en un grupo de controles a un tiempo. Guarde todos los cambios realizados en su solución e inicie la depuración (oprima la tecla F5). Ejecute la aplicación y verifique que aparecen todos los elementos que haya agregado en Síring Collection Editor para el cuadro combinado; que los límites máxi mos y mínimos del selector de números se respete, y que al seleccionar un botón de opción dentro de un grupo, los demás dejan de estar seleccionados.
FIN DEL EJERCICIO*
*
Ejercicio 12.4 Orden de tabulación y activación dinámica de controles
Aprenderá a manipular la activación dinámica de controles en una interfaz, dependiendo del cumplimiento de condiciones. Aprenderá también el manejo de la herramienta Tab Order.
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
1. 2. 3.
4.
Abra la solución Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensión sin). Continúe trabajando con el proyecto Empresa, iniciado en el ejercicio 12.2. Seleccione tpSitio y agregue un objeto de casilla de verificación (CheckBox), un cua dro de texto (TextBox), un botón de comando (Button), un control de navegación en Internet (WebBrowser) y un control de ayuda fugaz (ToolTip). Este último es invisible en tiempo de ejecución, por lo que no se agrega a la interfaz; la forma en que deberá incluirlo es arrastrando el control desde ToolBox hasta el cuadro de texto de la interfaz. Distribuya los objetos de la siguiente forma: Datos general es
5.
383 i
Presola de contacto
Sitio en Internet
Modifique las siguientes propiedades: Propiedad
Valor a asignar
CheckBoxl.Name
chkSitio
chkSitio.Text
Tiene sitio Web?
TextBoxl.Name
txtURL
txtURL.Enabled
False
Buttonl.Name
btnVerSitio
btnVerSitio.Text
&Ver
btnVerSitio.Enable
False
WebBrowserl.Name
webPagina
txtURL.ToolTip on ToolTipI
Coloque aquí la ruta http del sitio
ToolTipI.ToolTipTitle
Mensaje del sistema
www.FreeLibros.me
384
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
6.
La interfaz debe lucir de la siguiente forma:
Datos generales □
7.
Presona de contacto
Sitio en Internet Ver
Tiene sitio W eb?
Las propiedades Text de los controles indican la parte textual visible de los objetos. La propiedad ToolTip.ToolTipTitie sirve para especificar el título de encabeza do que aparecerá con el mensaje de ayuda fugaz, que se especifica en la propiedad TextBox.ToolTip. La propiedad Control.Enabied de los controles indica si están o no disponibles para su uso en tiempo de ejecución, no obstante de que estén visibles.
> Lanzamiento de tareas desde la barra de menús 8.
Una de las tareas más comunes en el desarrollo de interfases es la de limpiar los datos existentes en los campos para iniciar una nueva captura. En nuestro ejemplo, colóquese en cualquier parte del formulario en tiempo de diseño, despliegue el menú contex tual y seleccione la opción View Code para ver el código del programa. Como no he mos codificado nada, aparecerá la declaración de una clase en blanco. Codifique la siguiente rutina que limpiará todos los campos que podemos editar en nuestra interfaz (debe ir entre el inicio y el fin de la declaración de la clase).
Codificación de Empresas - Forni.vb - LimpiaCampos 1 2 3 4 5
Sub LimpiaCampos() ' Campos del primer TabPage mtbIDEmpresa.Text = "" txtNombre.Text = "" txtDireccion.Text = ""
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
6
txtNIP.Text = ""
"7
í
8 9 10 11 12 13 14 15 16 17 18 19
1 Campos del segundo TabPage txtNombreCon.Text = "" mtbTelefono.Text = "" rbtnMasculino.Checked = True cboTitulo.Selectedlndex = 0 1 Campos del tercer TabPage chkSitio.Checked = False txtURL.Text = "" txtURL.Enabled = False btnVerSitio.Enabled = False End Sub
9.
Como puede ver, se limpian todos los campos textuales y se reestablecen los valores iniciales del formulario. 10. Vaya a Fonti Designer y en tiempo de diseño seleccione la opción Limpiar Campos, haciendo doble clic sobre la opción. Aparecerá nuevamente el código, pero habrá agre gado un procedimiento de evento que se lanzará cuando el usuario seleccione la op ción en tiempo de ejecución. El procedimiento se llama LimpiarCamposToolStripMe nuItem_Click. En dicho procedimiento mande llamar el procedimiento LimpiaCampos, que acabamos de desarrollar.
Codificación de Empresas - Forni.vb - LimpiarCamposToolStripMenuItem_Click Private Sub LimpiarCamposToolStripMenuItem_Click(
11. Aunque la instrucción Cali para mandar a ejecutar un procedimiento puede omitirse, se incluye para mejorar la claridad del código. 12. Vaya a Form Designer y en tiempo de diseño seleccione la opción Cerrar, haciendo doble clic sobre la opción. Aparecerá nuevamente el código, que deberá complemen tar de la siguiente manera:
www.FreeLibros.me
386
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
C o d ific a ció n d e Empresas - Forml.vb - CerrarToolStripMenuIten_Click Prívate Sub CerrarToolStripMenuIten^Clickf^ ByVal sender As System.Object, ByVal e As System.EventArgs)
13. Al aplicar el método ció se () sobre el formulario (que se reconoce a sí mismo como Me), se cierra el formulario. 14. Guarde todos los cambios realizados en su solución e inicie la depuración (oprima la tecla F5). Ejecute la aplicación, escriba en los campos textuales del formulario y se leccione la opción de menú Limpiar Campos. Luego compruebe que al utilizar la op ción de menú Cerrar, el formulario se cierra. Con ello habrá aprendido cómo enviar comandos a través del menú.
>• Procedimiento para el evento de arranque (Load) 15. Un formulario tiene un procedimiento de evento de arranque, denominado Load. El evento Forn.Load sucede antes de que el formulario sea desplegado por primera vez, y es ahí donde podemos especificar aquellas cosas que sean establecidas antes que cualquier cosa suceda en la interfaz. Una cosa que nos gustaría es que los campos es tuvieran limpios antes de comenzar a trabajar con la interfaz. Para lograrlo podemos ejecutar el procedimiento UmpiaCampos en el procedimiento de evento de arranque. 16. Un evento por omisión (default event), es el procedimiento de evento más común para un determinado tipo de objeto; al estar en Form Designer y hacer doble clic sobre un de terminado objeto, Visual Studio abrirá Text Editor y preconstruirá la estructura del procedimiento del evento por omisión. Cuando hacemos doble clic sobre un botón, por ejemplo, s e precodificará el procedimiento de evento para el evento Button.Click, dado que Button .Click es el evento más común del tipo de objeto. 17. Para codificar el evento Forn.Load de nuestro formulario bastará hacer doble clic en cualquier parte no ocupada dentro del formulario, dado que Forn.Load es el evento por omisión de Form. Desde Form Designer, haga doble clic en cualquier parte no ocupada del formulario. 18. Aparecerá la codificación del procedimiento de evento frnEnpresa.Load. Edite el programa de tal manera que el procedimiento quede de la siguiente forma:
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
C odificación d e Empresas - Formi.vb - frmEnpresa Load 1 2 3 4 5
P r iv a t e Sub frm E m p re s a ^ o a d í^ B yV a l send er A s S y ste m .O b je c t, B yV al e A s S y ste m .E ve n tA rg s) H and les M yBase.Load C a l i Lim piaC am pos() End Sub
19. De esta manera, antes de que el formulario se muestre por primera vez, será ejecuta do el procedimiento que iniciará los valores del formulario.
> Uso de Tab Order para establecer el orden de tabulación 20. El orden de tabulación es el orden en que los objetos adquieren el enfoque de manera secuencial al presionar la tecla TAB. Lo ideal es que el orden de tabulación obedezca a la forma natural en que el usuario de la aplicación está acostumbrado a ordenar los datos de entrada. En tiempo de diseño procuramos ser ordenados, pero no siempre po demos agregar los objetos en el orden de tabulación que deseamos. Eso no nos debe preocupar, dado que es posible modificar el orden de tabulación utilizando la propie dad Control.Tablndex de los objetos. 21. Otra opción es hacer clic en el botón Tab Order —* de la barra de herramientas de formato en tiempo de diseño. Seleccione tp Contacto y haga clic en el botón Tab Order. Aparecerá una interfaz muy parecida a la siguiente: Figura 12.12
TabOrder.
ï .f ÿ û t 'j
'J*
•■siiiytVÿj
A cio n e s
BWWilï: ETWlo: m a
0 5 2 **:
..... ....... E2JQ
m a
g]
MM QS£l*no Œ Q iin o - .......................................................... J , ;j
*
A c e p to
www.FreeLibros.me
M ¡ £ancelai
388
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
22. Los números que aparecen en los controles son los índices de orden, e indican el or den y la profundidad del mismo. De acuerdo con la figura 12.12, el menú es el punto de donde parte el orden de tabulación (0), siguiendo el botón Aceptar (1), luego el bo tón Cancelar (2) y finalmente el TabControl (3). Como TabControl es contenedor, su contenido tendrá un orden 3 jc.y.z, donde x es el orden de las páginas, y es el orden de los controles dentro de la página, y z sería el orden de los controles dentro de un con trol contenedor dentro de la página. 23. Se recomienda que las etiquetas (Label) sean las primeras en el orden, dado que no reciben el enfoque. Después debe darse el orden de acuerdo a como se desee el or den de tabulación. Para modificar el orden sólo se requiere hacer clic sobre el control hasta que tenga el índice de orden que queremos. Al tener activada la herramienta de Tab Order, al posicionar el puntero del ratón sobre el control, aparece un borde som breado y el puntero cambia a cruz. Al hacer clic en ese momento, el índice de orden cambia, y cambia el orden del resto de los controles de tal manera que no haya dos iguales.
atos generales
P resona d e contacto
Sitio e n Internet
H M
E U lT
___
E3H'° :
i
24. Modifique el orden de tabulación de tal manera que quede de la siguiente manera:
Acciones
H a t o s generales
Pres o n a d e contacto
Sitio e n Internet
r..................................................................................................-¡ ESE* E2SI EEJio: E5JE1__ -__ B in MM Q Q a l e s :
FUI m < i¡n o B E Z I’ino
1
V '
Aceptar
www.FreeLibros.me
,
Cancelar
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
389 i
25. Al terminar de colocar el orden deseado, basta hacer clic en el botón Tab Order L- ‘l nuevamente para dar por aceptados los cambios. Se recomienda aplicar el orden de ta bulación cuando ya se está bastante seguro de que no modificará la interfaz.
> Bloqueo de controles (Lock Controls) 26. Cuando ya la interfaz está bastante depurada y en orden, lo conveniente es aplicar el bloqueado de controles, que consiste en inhabilitar la posibilidad de modificaciones a los controles en tiempo de diseño; se permitirá sólo la codificación. Para bloquear los controles sólo se tiene que seleccionar la opción Formal - Lock Controls; aparecerá un pequeño candado en la esquina superior izquierda de los controles, lo que indica que están bloqueados.
>- Activación dinámica de elementos 27. Una de las principales actividades preventivas que una interfaz puede realizar es no permitir la ejecución de trabajos si los datos para un proceso no son completos y co rrectos. Una forma de hacerlo es que el botón de comando que ejecute el procesamien to o el almacenamiento se mantenga inhabilitado, en tanto no se cuente con todos los datos requeridos. 28. En nuestro caso, deseamos que antes de que se pueda presionar el botón Aceptar los objetos siguientes tengan un valor: mtbIDEmpresa, txtNombre, txtDireccion, txtNIP, txtNombreCon, mtbTelefono. El valor de todos ellos está representado por la pro piedad Text. 29. En Form Designer, despliegue el menú contextual y seleccione View Code. En Text Editor codifique el siguiente procedimiento dentro de la clase:
I Codificación de Empresas - Formi.vb - ActivaAceptar
1
2 3 4 5 6 7 8 9
Sub ActivaAceptar(ByVal sender As Object, ByVal e As EventArgs)<£ Handles mtblDEmpresa.LostFocus, txtNombre.LostFocus,
www.FreeLibros.me
390
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
30. En la línea 1 del bloque anterior se declara el procedimiento. Después del nombre del procedimiento (ActivaAceptar) se abren paréntesis declarando dos argumentos. Es tos argumentos se denominan argumentos implícitos, dado que CLR en tiempo de eje cución provee los datos a los argumentos sin que el usuario tenga que enviarlos me diante una llamada Cali. La mayoría de los eventos manejados en .NET requieren de dos argumentos implícitos: sender, que puede ser cualquier tipo de objeto (Object) transferido en modo valué type y que hace referencia al objeto desde el cual se desen cadena el evento; y e que es de tipo EventArgs (manejador de argumentos de even tos), que también es pasado en modo valué type. En la misma declaración del proce dimiento se agrega la referencia Handles, que indica qué eventos controlará el procedimiento codificado. En nuestro caso, el procedimiento se ejecutará cuando se cause el evento Control.LostFocus para los objetos mtbIDEmpresa, txtNombre, txtDireccion, txtNIP, txtNombreCon, mtbTelefono. En todo el código no verá un lla mado a ejecución de ActivaAceptar; CLR lo lanzará a ejecución y será quien también le dirá qué objeto es el que provocó, así como los argumentos pertinentes del evento. 31. En la líneas 2 a la 4 se evalúa si alguno de los objetos no ha sido capturado (Text=""), en cuyo caso inhabilita el botón Aceptar. De lo contrario, es decir, si todos tienen va lor, el botón Aceptar se habilita. 32. Otra activación automática que podemos hacer es que, en la tercera página, sólo se pueda capturar información de URL y ver la página en Internet si la casilla de verifi cación está marcada. En Fortn Designer haga doble clic en chkSitio. Se precodificará el procedimiento por omisión aplicable al cuadro de verificación. Se trata del even to CheckBox.CheckedChanged, que se lanzará cuando se cambie el estado de marcado de la casilla de verificación. Codifique lo siguiente:
~ 1 2 3 4
I Codificación de Empresas - Forni.vb - chkSitioCheckedChanged
Private Sub chkSitio_CheckedChanged(
33. Nos aprovechamos de que la propiedad que almacena si la casilla de verificación está o no marcada es Boolean. Si la casilla de verificación no está marcada, la propiedad CheckBox.Checked es False, y si está marcada la propiedad CheckBox.Checked es True. Asigne el valor de CheckBox.Checked a las propiedades Control.Enabled de los objetos dependientes: al marcar la casilla de verificación, los objetos se activarán, y al desmarcarla se inhabilitarán (líneas 2 y 3).
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
34. Guarde todos los cambios realizados en su solución e inicie la depuración (oprima la tecla F5). Ejecute la aplicación y verifique que el botón Aceptar está disponible sólo si todos los campos requeridos tienen datos. Verifique que el cuadro de verificación gobierna la disponibilidad del cuadro de texto en el que se solicita el URL y el botón de ver sitio. FIN DEL EJERCICIO*
*
Ejercicio 12.5 Uso de controles para la visualización de páginas Web
Aprenderá a utilizar los controles para la visualización de contenidos Web desde formula rios Windows. 1. 2. 3.
Abra la solución Ejercicios, que debe encontrarse en C: \a p v b n e t v s \Ejercicios (ar chivo de extensión sin). Continúe trabajando con el proyecto Empresa del ejercicio anterior. En Form Designer seleccione tpSitio y haga doble clic en btnVerSitio para editar el procedimiento que ha de ejecutarse al hacer clic en el botón Ver. Codifique lo siguiente:
Codificación de Empresas - Formi.vb - btnVerSitio_Click 1 2 3
4.
5.
Private Sub btnVerSitio_Click(
La línea 2 se encarga de ir, en el objeto WebBrowser, a la dirección en Internet que se haya proporcionado en txtURL. La liga no puede proporcionarse de forma textual, y por ello tiene que ser una nueva instancia de la clase WebBrowser.Uri, que permite es pecificar recursos en Internet. Guarde todos los cambios realizados en su solución e inicie la depuración (oprima la tecla F5). Ejecute la aplicación, active la casilla de verificación que pregunta si tiene sitio Web, escriba como liga http://www.aprendapracticando.com y haga clic en Ver. La página debe aparecer en el formulario.
FIN DEL EJERCICIO*
www.FreeLibros.me
392
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
M
a p a m e n t a l d e l c a p ít u l o
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
393 i
T e r m in o l o g ía For Each, 362
Menús, 357
AcceptReturn, 378
Controls, 362
Got Focus, 364
MenuStrip, 357
Add, 361
Count, 361
Graphic User
MenuStrip, 366
BackgroundWorker,
Cuadros de diálogo,
AcceptButton, 370
358
de menú, 357
GroupBox, 357
360
Barra de herramien DataGridView, 358 tas, 357 Binding Navigator, 358 BindingSource, 358 Bloqueo de con troles, 389
Grupo(s)
MessageQueue, 359 M od o arrastre, 348
DataSet, 358
de controles, 347
inserción, 348
DateTi me Picker, 355
de objetos, 372
trazo, 348
Default event, 386
GUI, 344
MonthCalendar, 356
Delimitadores de
Guías
Multiline, 378
tamaño,
de alineación, 369
372
Boxing, 361
Dialogs, 360
Button, 355
Directory Searcher,
Cali, 385
Interface, 344
de proximidad, 369
Notifylcon, 356 NumericUpDown, 356 Objeto
HelpProvider, 359
contenedor, 346
Cancel Button, 370
Di rectory Entry, 358
Image, 370
hijo, 346
CharacterCasing,
Elemento de menu,
ImageAlign, 371
padre, 346
ImageList, 359
principal de refe
378 CheckBox, 355 Checked List Box, 355
359
367 Elementos gráficos de interfaz, 346
Input Mask, 378 Interfaz de usuario,
rencia, 372 OpenFileDialog, 360
Child, 346
Enabled, 363
Cióse, 386
Enfoque, 363
Colección, 361
Enter, 364
ColorDialog, 360
ErrorProvider, 359
ltem(s), 361, 381
ComboBox, 355
Etiqueta de ele
Label, 356
Panel, 357
mento, 368
Com m on Controls, 355 Containers, 357 ContextMenuStrip, 357 Controles, 347 Controles
344 Interfaz gráfica de usuario, 344
PageSetupDialog, 360 Páginas de con troles, 375
Leave, 364
Parent, 346
EventLog, 359
Líneas guía, 369
PasswordChar, 378
Evento por omisión,
LinkLabel, 356
Performance
386
ListBox, 356
FileSystem Watcher, 359 FlowLayout Panel,
Counter, 359
ListView, 356
PictureBox, 356
Load, 386
Pointer, 355
Lock Controls, 389
PrintDialog, 360
LostFocus, 364
PrintDocument,
comunes, 355
357
contenedores,
Focus, 363
Mask, 377
FolderBrowserDia-
MaskedTextBox, 356 Printing, 359-60
357 de impression, 359-60
log, 360 FontDialog, 360
MaxLength, 378 Menu item, 367
www.FreeLibros.me
360 PrintPreview Control, 360
394
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Print Preview Dialog, 360 Procedimiento de evento de
RichTextBox, 356
Tablndex, 363
SaveFileDialog, 360
TableLayoutPanel,
Serial Port, 359 Service Controller,
arranque, 386
359
357 Tareas de objeto, 376
Container, 358 Designer, 366 ToolTipTitle, 383 ToolTrip, 356 TreeView, 356
Process, 359
Smart tag, 376
Tecla de atajo, 370
Progress Bar, 356
Snaplines, 369
Text, 370
Uri, 391
RadioButton, 356
SplitContainer, 357
TextBox, 356
Validated, 364
Remove, 361
StatusStrip, 357
Tlmer, 359
Validating, 364
ReportViewer, 358
TabControl, 357,
Toolbars, 357
Visible, 363
ToolStrip, 358
WebBrowser, 356
RESX, 371
375
Unboxing, 361
P r e g u n t a s __________________________________________________________________________________________
12.1 ¿Cuál es el principal propósito de una interfaz? 12.2 Explique qué son los objetos contenedores y cuándo se da una relación padre-hijo
entre objetos. 12.3 ¿Cuáles son las tres formas de agregar objetos en Form Designer? 12.4 Mencione los pasos que integran la estrategia para el estudio efectivo de controles. 12.5 ¿Qué importancia tiene que los controles deriven de la clase Control y Object? ¿En
qué nos beneficia? 12.6 Seleccione 15 controles que considere que utilizará en sus interfases Windows.
www.FreeLibros.me
Capítulo 12. Desarrollo de Aplicaciones W in d o w s
Notas:
www.FreeLibros.me
396
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Exam en
r á p id o d e l c a p ít u l o
Parte 1: M arque con una cruz el inciso que responda a la pregunta. L
Elemento a través del cual un programa recibe datos: á) Formulario b ) Control c) Interfaz de usuario
Z
Es un objeto que contiene a otros objetos: a ) Formulario b) Objeto contenedor c) Objeto receptor
3.
Las propiedades, métodos y eventos, son: a) Argumentos b) Elementos de interfaz
c) Miembros 4. Todos los controles de Windows.Forms.Controls derivan de:p a ) Namespace b) Enumeraciones c) Clases Object y Control 5.
Es la forma de agregar controles en donde mayor control se tiene de la posición y las dimensiones de los objetos: á) Inserción b) Arrastre c) Trazo
Parte 2: Coloque en la línea la letra «F» si el enunciado es falso y «V» si es verdadero. 6. Los objetos no pueden anidarse.
______________
7. Los manejadores permiten asociar un procedimiento con un evento.
----------------------
8. En unboxing, un objeto pasa a ser un tipo de dato primitivo.
______________
9.
Un grupo de controles puede tener sólo objetos de un mismo tipo.
______________
La clase Object deriva de la clase Control.
______________
10.
www.FreeLibros.me
i 0 1° 1
i
0
1
om v m
0
\*' i/t (?' 5
j
k i f
1 1 1
w 1 J
C a p ít u l o 1 4
y
'1 $ L
Desarrollo de aplicaciones Web con ASP.NET Objetivos: Aprender la estructura general de una página Web codificada en
ASP.NET. 1. Conocer los requerimientos para el desarrollo de aplicaciones Web en .NET. 2. Identificar los elementos que pueden integrarse en una página Web ASP.NET para guardar compatibilidad con desarrollos pasados. 3. Identificar las directivas y conocer cómo se agregan a una página Web. 4. Aprender qué son los formularios del servidor y cómo se agregan a una página Web. 5. Conocer los controles del servidor, qué tipos hay y cómo se agregan a una página Web. 6. Aprender qué es el código declarativo y cómo se agrega a una página Web.
397
www.FreeLibros.me
398
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Contenido M o t iv o s del a u g e d e las a p lic a c io n e s W e b .................................................. R e q u e rim ie n to s p a ra el d e s a rr o llo d e A SP .N E T ..........................................
399 400
E n t o r n o o p e r a t i v o ............................................................................. H e rra m ie n ta s d e d e s a r r o l l o ...............................................................
400 401
P ro c e sa m ie n to d e p á g in a s W e b en .N ET .................................................... C aracterísticas d e A S P . N E T .........................................................................
402 403
E le m e n to s d e u n a p á g in a W e b A S P . N E T .................................................... E stru ctu ra b ásica d e u n a p á g in a A S P . N E T ..........................................
410 410
C o n t e n id o H T M L .............................................................................. B lo q u e s p ro v e e d o re s d e c ó d ig o ....................................................... D ir e c t iv a s .......................................................................................... F o rm u la rio del s e r v i d o r ..................................................................... C o n tro le s del s e r v i d o r .......................................................................
411 411 412 414 415
A d ic ió n d e c ó d ig o a u n a p á g in a : C ó d ig o d e c la r a t iv o ......................... C o n tro le s c o m u n e s en a p lic ac io n e s W e b ....................................................
417 419
G r u p o d e co n tro le s e stá n d a r ( S t a n d a r d ) ............................................ G r u p o d e co n tro le s d e d a to s (D a ta ) .................................................
419 421
G r u p o d e co n tro le s d e v a lid a c ió n ( V a l i d a t i o n ) ................................. G r u p o d e co n tro le s d e n a v e g a c ió n (N a v ig a tio n ) ..............................
422 422
G r u p o d e co n tro le s d e a cce so ( L o g i n ) ............................................... G r u p o d e co n tro le s H T M L ( H T M L ) ......................................................
423 423
Creación de una página Web ASP.NET, prueba e identificación de sus elem entos.....................................................................
424
> C o n f ig u ra c io n e s in iciales del d is e ñ a d o r d e p á g in a s W e b p a ra las vistas y el p o s ic io n a m ie n to d e c o n tro le s . . > A d ic ió n d e e le m e n to s a u n s itio W e b ...........................
425 427
> >
E sta b le c im ie n to d e v a lo re s g e n e ra le s d e f o r m u la r io . . . R e v isió n del c ó d ig o g e n e r a d o p o r el s e rv id o r .............
427 437
M a p a m e n ta l del c a p ítu lo ......................................................................... T e r m in o lo g ía ..............................................................................................
439 440
P r e g u n t a s .................................................................................................. E x a m e n r á p id o del c a p í t u l o .......................................................................
441 443
www.FreeLibros.me
Capítulo 13. Desarrollo de aplicaciones W e b con ASP.NET
399 |
El tema de ASP.NET es suficientemente amplio para dedicarle un libro aparte. Dado que es una de las formas más populares en que se consume código en Visual Basic, este capítulo se ocupa del tema desde la perspectiva más amplia de la programación orientada a objetos.
Motivos del auge de las aplicaciones Web Quizá el futuro inmediato de las aplicaciones distribuidas esté en el desarrollo de aplica ciones Web. Conforme la tecnología de desarrollo Web avanza (y lo hace a pasos agigan tados), las plataformas son cada vez más sencillas, confiables, seguras y escalables. A continuación se explican algunas de las principales razones por las cuales la Web se ha convertido en un campo fructífero para el desarrollo. U so de Internet com o red privada corporativa. A medida que los negocios se globalizan, la Internet cobra importancia como red privada corporativa. Dos son los deto nadores: por un lado, las organizaciones requieren comunicar datos con sus socios comer ciales; por otro, instalar redes privadas para hacerlo sería demasiado costoso, incluso ocioso, ya que no hay razones para intentar la instalación de una red global nueva cuan do ya existe una. Evolución en la confiabilidad de la Web. Ciertamente, cada nueva alternativa tiene sus ventajas y desventajas. Tópicos como la seguridad en Internet, la disponibilidad de ser vicios de telecomunicaciones, la compatibilidad entre diversas plataformas operativas, la complejidad de la técnica de desarrollo de aplicaciones Web, entre otros problemas, debe rán ser resueltos gradualmente.
Afortunadamente, las nuevas técnicas de cifrado, la existencia de protocolos universales reconocidos por todas las plataformas y el desarrollo basado en lenguajes de alta portabilidad, garantizan que los paquetes de datos que deben ser enviados de un lado a otro del globo, lleguen completos y seguros, utilizando para ello programas cada vez más sencillos, rápidos y estables. Posibilidad de desarrollo profesional. La evolución de las operaciones de datos de los negocios nos llevará poco a poco hacia un esquema de aplicaciones que utilicen los ser vicios de Internet para la comunicación de datos.
Esto abre un campo inmenso para los servicios de desarrollo de aplicaciones basadas en la Web; en consecuencia, los desarrolladores deberán buscar las herramientas que les permi tan brindar soluciones estables, fáciles de generar y con posibilidades de crecimiento. No será extraño saber que programadores, desarrolladores gráficos y administradores de bases de datos formen pequeñas organizaciones dedicadas al desarrollo profesional de apli caciones para su uso en la Web, con una cartera respetable de clientes ansiosos.
www.FreeLibros.me
400
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Lo más interesante de todo es que la comunidad de desarrolladores, a la vez que es provee dora de servicios, se convierte al mismo tiempo en promotora, generando un nicho econó mico en el que es mejor estar dentro. Plataform as de desarrollo estandarizadas y disponibles. La nueva plataforma de
desarrollo, Microsoft.NET, maximiza el uso de Internet como medio de comunicación al tiempo que resuelve los problemas inherentes al desarrollo en ambiente Web, facilitando como nunca antes el proceso de desarrollo, y logrando un equilibrio entre simplicidad, con sistencia y potencia. El respaldo de Microsoft hacia la tecnología .NET Framework asegura la máxima penetra ción de los productos en las organizaciones, lo cual permite generar un círculo virtuoso en tre productos y servicios relacionados (market sharé). Esto promueve que cada vez más empresas y desarrolladores la adopten como su plataforma de desarrollo y operación, lo que gradualmente garantizará el máximo conocimiento sobre la tecnología, servicios de desarrollo y consultoría disponibles, así como precios justos de productos y servicios. Ese fenómeno ya se vivió con Visual Basic. Ahora es el turno de .NET. Antes de adentramos en la programación de ASP.NET, es conveniente analizar de manera breve algunos conceptos de programación Web.
Requerimientos para el desarrollo de ASP.NET Los requerimientos para desarrollar con ASP.NET varían un poco respecto a los demás ti pos de aplicaciones. Éstas son algunas de las particularidades del desarrollo en ASP.NET:
Entorno operativo □ M o to r de ejecución Web. Es el que se encargará de recibir las peticiones de pági
nas y resolverlas, entrando en contacto con los componentes involucrados por la pági na Web requerida, así como con los componentes de .NET Framework, tales como CLR y BCL. En el caso de una plataforma Microsoft, el motor de ejecución Web se llama In ternet Information Server, conocido también como ES. Para verificar que IIS esté disponible en su equipo, trate de desplegar la siguiente página: h ttp ://lo c a lh o s t Con ello deberá aparecer la página de presentación de US. Se recomienda ampliamen te contar con la versión 5.5 o superior.
www.FreeLibros.me
Capítulo 13. Desarrollo de aplicaciones W e b con ASP.NET
HS sólo está disponible en las versiones Server de Windows (2000,2003 y posteriores), así como las versiones Professional de los sistemas de escritorio de Windows (XP, 2000, etcetéra). No siempre se instala de manera predeterminada, y por ese motivo es necesa rio verificar la disponibilidad de HS. En caso de que no lo tenga instalado, proceda a instalarlo; es indispensable. No olvide que deberá tener instalado HS y levantar los servicios Web antes de instalar .NET Framework SDK! Si instala .NET Framework SDK y luego instala y habilita HS, las aplicaciones ASP.NET no funcionarán, dado que no hay manera que se registre la articulación entre herramientas. Si ya instaló .NET Framework SDK y después instala HS, será necesario que establezca el registro de articulación con la siguiente instrucción en línea de comandos: aspnet_regiis.exe -i
□ Privilegios de depuración. Para depurar páginas en ASP.NET es necesario que la
cuenta con la que esté desarrollando pertenezca al grupo de usuarios de depuración (Debugger Users). Los trabajos de depuración sostienen un diálogo intenso con el sis tema operativo y es necesario que el desarrollador tenga los permisos necesarios para interactuar con los servicios de monitoreo de problemas del equipo. □ .NET Framework. Es necesario que el equipo sea capaz de resolver el contenido Web ASP.NET, y para ello es necesario que disponga de .NET Framework instalado, lo que permitirá acceder a CLR y BCL. El código ASP.NET es compilado al momento de rea lizar peticiones a páginas ASP.NET, y los ensamblados que se generan en el proceso son administrados y requieren de CLR para funcionar. Además, los controles Web del ser vidor son clases de BCL (que debe estar presente en el entorno operativo del equipo de desarrollo).
Herramientas de desarrollo □ Visual Studio. Definitivamente la mejor opción para el desarrollo profesional de pá
ginas ASP.NET es Visual Studio, que integra facilidades de diseño y depuración de páginas Web. Aunque no es necesario para el desarrollo de páginas Web ASP.NET, sí agiliza enormemente la labor de desarrollo. □ Visual W eb Developer Express Edition. Es un entorno integrado de desarrollo de aplicaciones Web, para uso semiprofesional. Similar a Visual Studio, incluye diseñado res y asistentes interesantes, pero es más limitado respecto de la producción de software y el trabajo en equipo.
www.FreeLibros.me
402
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Procesamiento de páginas Web en .NET (0 r Forma en que se resuelven las páginas ASP.NET
El hecho de que ASP sea “.NET”, pone de manifiesto que las páginas activas operan aho ra bajo las reglas de funcionamiento de la plataforma .NET. No se trata de mejoras sobre la misma forma de funcionar; esto implica cambios radicales que producen mejoras. En ASP clásico (ASP antes de .NET) las páginas se resolvían de modo interpretado; es de cir, cada vez que se solicitaba una página ASP al servidor, ésta debía ser analizada, inter pretada y transformada en código HTML equivalente, el cual finalmente era remitido al cliente. En ASP.NET la forma de ejecución es distinta, dado que trabaja bajo el modelo petición - respuesta dinámico orientado a eventos, en donde hay contenidos que se resuelven en el servidor. Además el código remitido al cliente está preparado para la captura de eventos y la ejecución automática de procesos, sin necesidad de que el usuario haga peticiones explí citas. Al hacer la petición, el servidor se percata de que la página requerida es ASP.NET (a s p x ); la página, que es tratada como un programa, primeramente es procesada por un analizador de código (Parser), que verifica que el programa esté bien escrito y que no presente erro res de sintaxis o referencias perdidas (uso de variables, procedimientos, o miembros ine xistentes). Si el programa no tiene errores de sintaxis o referencias perdidas, el programa es puesto a disposición del compilador de páginas de .NET Framework; el compilador se encargará de generar un ensamblado de extensión DLL, de nombre único, que define una clase ca paz de generar el código HTML que ha de ser devuelto al navegador del cliente. Este ensamblado se almacena en un área denominada caché de ensamblados (Assembly Cache), donde se almacenan todos los ensamblados generados por el compilador de pá ginas. Ya que está generado el ensamblado capaz de producir el contenido Web que ha de ser de vuelto al cliente, un elemento denominado HTTP Runtime se encarga de solicitar la ejecu ción de la clase generada, para crear la instancia del objeto generador y producir el conte nido Web. El contenido Web generado por la clase es almacenado en una área denominada caché de salida (Output Caché)', en ese espacio se almacenan los contenidos HTML, los guiones de ejecución de parte del cliente e incluso los datos generados como parte de la salida. De ahí, el contenido es enviado al cliente solicitante. Si posteriormente se solicita la misma página, se buscará primeramente en el caché de sa lida; si el contenido Web se encuentra todavía ahí, no se realizará procesamiento alguno, por lo cual la respuesta es extremadamente rápida.
www.FreeLibros.me
Capítulo 13. Desarrollo de aplicaciones W e b con ASP.NET
403 |
En el peor de los casos, si el contenido Web no se encuentra en el caché, se producirá la ejecución de la clase creándose un nuevo contenido Web, lo cual de todas maneras es mu cho más rápido que utilizar código interpretado.
F i g u r a 1 3 .1
Procesamiento de páginas Web ASP.NET.
C lie n te
0
o a — ».
Se rv id o r
t¿t
P a rse r
.i i »
W on I : M tM »). SvC-'tíJi EY*.
C o m p ila d o r de p á g in a s
yoi*L
■ CjáCBUt I
(
.
w Assembly Caché H TTP R u n tim e
Características de ASP.NET ASP.NET es la implementación en plataforma Microsoft para aplicaciones bajo el modelo petición-respuesta dinámica orientada a eventos. En sí se trata de un modelo de servicios necesarios para construir aplicaciones empresariales en plataforma Web. Antes de ASP.NET contábamos con lo que ahora se ha dado en llamar ASP Clásico, que operaba bajo el modelo petición-respuesta dinámico. Esta tecnología está perdiendo vigen cia rápidamente, ya que ASP.NET es más potente, sencillo y organizado; en términos ge nerales, hay ciertas características de ASP.NET que lo están convirtiendo rápidamente en el estándar para el desarrollo Web. Las características particulares más relevantes de ASP.NET son las siguientes: □ □ □ □ □
Aceptación de varios lenguajes Desempeño mejorado Código compilado Manejo automático de estado Código separado del diseño (Code Behind)
www.FreeLibros.me
404
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
□ □ □ □ □ □ □ □ □ □ □
Uso de bibliotecas de clase de .NET Framework Controles Web del servidor Independencia del navegador Servicios Web XML Seguridad mejorada Mayor escalabilidad Permite sesiones cookie-less Fácil configuración Fácil implementación (Copy Deployment) Personalización basada en Web Parts Recursos de personalización: Máster pages, Skins y Themes
Aceptación de varios lenguajes. ASP Clásico permitía desarrollar en un solo lengua je llamado código ASP, que era más bien un subconjunto de Visual Basic. Si usted terna experiencia en algún otro lenguaje, por ejemplo Java o C, de nada le servía. Era necesario que aprendiera código ASP para poder instruir al servidor en cualquier tarea. ASP.NET es la alternativa de desarrollo de aplicaciones Web para la plataforma .NET y por ese motivo posee muchas de las características que hacen de .NET la plataforma de desa rrollo más fuerte del mercado; una de ellas es que acepta varios lenguajes de .NET, como Visual Basic, C#, JScript .NET y J#, entre muchos otros. No importa qué lenguaje .NET sea el que domine: podrá desarrollar procedimientos en cualquier lenguaje .NET aceptado, e integrar la funcionalidad a sus páginas Web. Si es de sabollador de aplicaciones de consola o aplicaciones Windows, no tendrá que cambiar de lenguaje por el simple hecho de cambiar de ambiente. Una ventaja adicional es que toda la programación Web puede hacerse bajo el enfoque orientado a objetos; el desarrollador usa etiquetas para controlar propiedades y desde el có digo puede manejar eventos y ejecutar métodos.
Desempeño mejorado. En ASP Clásico, los bloques de código de parte del servidor debían ser interpretados y ejecutados cada vez que se invocaba la página; la acción de in terpretar el código una y otra vez degradaba el desempeño de las aplicaciones. En ASP.NET el código se compila hasta terminar siendo código ejecutable para el servi dor. Es interpretado una sola vez y a partir de ahí, cada vez que ejecutemos la página Web invocaremos la versión interpretada y depurada de la página. El hecho de que ya no tengamos que interpretar código de manera recurrente hace que las aplicaciones tengan un mejor desempeño; si además consideramos que el código compila do es más rápido que el código interpretado, la ventaja en velocidad es significativa.
Código compilado. En ASP Clásico los bloques de código que el servidor resolvía ter minaban siendo código interpretado; es decir, cada vez que se tenía acceso a la página ASP,
www.FreeLibros.me
Capítulo 13. Desarrollo de aplicaciones W e b con ASP.NET
ES debía interpretar el código, buscar errores de sintaxis, generar el código HTML corres pondiente y resolver la página. En el caso de ASP.NET, el código se compila en el servidor. La primera vez que acceda a la página probablemente tarde un poco, pero a partir de ahí el ensamblado que generará el código HTML a remitir al navegador ya estará disponible en un área de caché. En ese sen tido, después de la primera vez que se entra a una página, el servidor ya no resuelve nada, sólo ejecuta el programa ya existente. En virtud de que el servidor mantiene el caché, no importa qué usuario haya llamado por primera vez la página; la versión compilada del código estará disponible para todos los que la requieran posteriormente. Otra ventaja es que .NET Framework se encarga de realizar las compilaciones y ejecucio nes cuando son necesarias de manera automática; el desarrollador sólo requiere intentar cargar la página en un navegador. .NET Framework decidirá el tratamiento óptimo de la solicitud realizada. Al ejecutar una página ASP.NET se genera un ensamblado de extensión d l l que se aloja rá en el directorio \Bin del sitio, desde donde se consumirá su funcionalidad.
M anejo autom ático del estado. En ASP Clásico mantener el estado de los formula rios (Form-state) era un suplicio. Si se querían trasladar datos de una página a otra de ma nera confiable era necesario realizar una labor intensa que consistía en declarar objetos ocultos (hidden objects), así como variables de sesión, que generalmente en un momento dado de la ejecución perdían vigencia y arruinaban todo el proceso. Otra alternativa era manejar los valores mediante cookies; el problema es que con tantos ataques a la privacidad realizados en Internet, inhabilitar la admisión de cookies es una práctica común. Ese hecho, obviamente, dejaba a la aplicación sin una función completa. En ASP.NET, el estado de formulario se mantiene de manera automática a través de un ob jeto oculto y cifrado; las páginas ya no llaman a otras páginas para hacer un mismo proce so en partes. En lugar de ello, las páginas se mandan llamar a sí mismas y realizan el tras lado de datos de manera transparente para el usuario.
Código separado (Code Behind). En ASP Clásico, los programas eran una verdade ra ensalada de tecnologías que confundía a los inexpertos y dificultaba el mantenimiento de los programas a los expertos. En un mismo programa era común encontrar etiquetas HTML (lenguaje de marcas), llama das a componentes (objetos COM), bloques de código de parte del cliente codificados en VBScript, bloques de código de parte del cliente codificados en JavaSctipt y bloques de código de parte del servidor (código ASP).
www.FreeLibros.me
406
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
En ocasiones, los encargados del diseño de las páginas modificaban código ASP o código de los guiones; a su vez, los programadores de procedimientos modificaban la codificación de diseño, etcétera. En resumen, era un caos. Con ASP.NET el código puede estar separado del diseño de la página (capacidad llamada Code Behind). En su totalidad, se trata de código de parte del servidor, y las etiquetas HTML se reducen al mínimo. Como producto obtenemos programas más limpios y estruc turados. Tranquilamente se puede encargar a un grupo de diseño que trabaje sobre la for ma de la página, mientras que los programadores podrán estar desarrollando procedimien tos de manera independiente. Como en Visual Studio el código se maneja en modo Code Behind', por cada aplicación se tendrá la página Web ASPX, que será la página en donde se encuentren las etiquetas ASP.NET; por otro lado, se tendrá un programa de extensión v b o es (dependiendo el lengua je que decidamos utilizar), en donde se encontrará la programación de una clase que pro vee la funcionalidad de orientación a eventos de la página. Al ejecutarse la página, la clase se compilará generando un ensamblado que después se puede consumir.
Uso de BCL. Con ASP Clásico era posible utilizar los componentes registrados en el ser vidor y, aunque se empleaba una buena cantidad de ellos, este uso era de alguna manera ajena al código ASP y no estaba plenamente integrada. En ASP.NET, en virtud de que codificamos con lenguajes .NET, podemos hacer uso de la biblioteca de clases de .NET Framework, lo que permite agregar funcionalidad sin prece dentes a las aplicaciones Web. Como sabe, la biblioteca de clases de .NET Framework po see un gran número de clases disponibles para su uso en los programas; aunque probable mente no pueda utilizarlas todas en ambiente Web, la cantidad de elementos que puede utilizar es bastante amplia.
Controles Web del Servidor. En ASP Clásico desarrollábamos con Front Page o con Visual InterDev; aunque dichas herramientas poseían una caja de herramientas con “con troles”, realmente se trataba de vínculos a generadores de código que implementaban un determinado objeto utilizando código HTML y DHTML. En ASP.NET se tienen verdaderos controles Web de parte del servidor. Al agregar un ele mento gráfico en Visual Studio se agregan etiquetas que serán resueltas en el servidor y se traducirán en objetos plenamente funcionales de parte del cliente, capaces de percibir even tos y realizar llamadas automáticas al servidor. Otra ventaja de los controles Web del servidor es que son objetos de BCL que pueden ser identificados y utilizados de forma programática.
Independencia del navegador. En ASP Clásico terminábamos de codificar las páginas y las probábamos; cuando comprobábamos que todo funcionaba bien hacíamos la publica ción. El problema surgía cuando el usuario revisaba nuestras aplicaciones en un navegador
www.FreeLibros.me
Capítulo 13. Desarrollo de aplicaciones W e b con ASP.NET
distinto al que nosotros utilizamos (por ejemplo, Netscape Navigator). La aplicación per día la estética y algunos elementos ya no funcionaban. El problema era que la funcionali dad de nuestras aplicaciones dependía del navegador; en un mundo de aplicaciones globa les no podemos obligar a nuestros clientes a que tengan tal o cual navegador. Eso hacia necesario indagar qué navegador utilizaba el cliente, a fin de proporcionarle un resultado funcional acorde al mismo. Prácticamente se desarrollaban dos programas para dos diferentes navegadores. En ASP.NET, los controles Web del servidor son capaces de determinar por sí mismos qué navegador utiliza el cliente para que el servidor genere el código correspondiente. En otras palabras, las aplicaciones serán independientes de la plataforma que las lea.
Servicios Web XML. En ASP Clásico no existían los servicios. Para poder distribuir funcionalidad era necesario desarrollar componentes, registrarlos en el servidor y esperar que no se dieran problemas técnicos y de permisos para poder utilizarlos en aplicaciones Web desde estaciones remotas. Los componentes son paquetes binarios ejecutables, por lo cual no son afínes a los firewalls y los servidores proxy; otro problema adicional: sólo funcionan para la misma plata forma operativa, es decir, Windows. En ASP.NET se puede hacer uso de Servicios Web XML, componentes funcionales que pueden ser utilizados mediante peticiones Web y facilitan el intercambio de funcionalidad utilizando Internet como medio. Los Servicios Web XML utilizan protocolos estándar como SOAP (Simple Object Access Protocol) y XML (eXtensible Markup Language) para trabajar, por lo que permiten la in teracción con plataformas operativas distintas a Windows.
Seguridad mejorada. De manera predeterminada, el ambiente Web proporciona acce so anónimo a los sitios; no obstante ello, es posible que se desee restringir el acceso de al guna manera. En ASP Clásico sólo se tenía un tipo de seguridad: Autenticación Windows. Bajo este es quema, el IIS podía ejecutar una validación de seguridad, dando acceso de acuerdo con el sistema de usuarios y roles de usuarios de Windows. En ASP.NET, además de la autenticación Windows, se emplea la autenticación de form u larios, a través de la cual usted puede restringir el acceso por medio de programación. ASP.NET también proporciona seguridad mediante los servicios de Microsoft Passport, que es un servicio centralizado de autenticación brindado por Microsoft. Además, ASP.NET cuenta con un nuevo mecanismo, denominado membresía ASP.NET (ASP.NET membership\ que es una funcionalidad interconstruida de ASP.NET que permi
www.FreeLibros.me
408
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
te crear y administrar un esquema de control de usuarios y puede ser utilizada a través de controles de Login disponibles en Toolbox. Si se implementa el esquema basado en membresía ASP.NET, llevar a cabo las labores de registro de usuarios y cambios de contraseña, entre otras, será tan sencillo como arrastrar y colocar.
Mayor escalabilidad. En ASP Clásico los estados de las sesiones eran mantenidos en el mismo servidor en donde se encontraba el motor de ejecución Web (IIS); esto provocaba que para poder utilizar información relativa a las sesiones era necesario invocarla en el mis mo servidor. En caso de que se presentara un incremento en el tráfico de transacciones, la única opción para manejarlas era incrementar la capacidad del servidor. Una de las consecuencias de esta situación era la potencial sobrecarga del servidor, debi do a que el procesamiento y el estado de sesiones no se podían distribuir. En ASP.NET el estado de las sesiones puede ser mantenido en un proceso separado, en una máquina o base de datos aparte, lo que permite la existencia de una sesión con servidores combinados (cross-server session). La ventaja de esto es que se pueden conectar servidores adicionales para absorber los in crementos de tráfico de transacciones.
Sesiones cookie-less. Algunas ocasiones, en ASP Clásico se desarrollaban aplicacio nes que hacían uso de cookies; el problema sobrevenía cuando el usuario inhabilitaba la ca pacidad de su navegador de admitirlas, en cuyo caso las aplicaciones dejaban de funcionar normalmente. Con ASP.NET es posible mantener el estado de las sesiones incluso si la capacidad del na vegador para manejar Cookies está inhabilitada. A este funcionamiento se le ha dado el nombre de cookie-less. ASP.NET maneja de manera cifrada la información que se manejaría a través de Cookies (SessionID), trasladando los valores por medio del URL (Uniform Resource Locator).
Fácil configuración. Con ASP Clásico la configuración de las aplicaciones era un poco oscura; era necesario conocer bien el ambiente de la aplicación y Visual InterDev. Con ASP.NET la configuración se mantiene en un archivo textual XML, llamado viteb .conf ig, que es entendible si se lo quiere leer.
Fácil implementación (Copy Deployment). Con ASP Clásico copiar una aplicación Web a otro servidor requería precisión. Las razones eran simples: los archivos del sitio se encontraban en la carpeta del sitio, las librerías se encontraban en la carpeta \ SYSTEM del sistema operativo, y se encontraban registradas en el Registro de Windows del equipo ori gen. Para migrar una aplicación había que estar seguro de copiar la carpeta de la aplicación y además verificar que todas las librerías de un equipo estuvieran debidamente copiadas y registradas en el equipo destino. Lo peor de todo, si la aplicación requería una librería que
www.FreeLibros.me
Capítulo 13. Desarrollo de aplicaciones W e b con ASP.NET
no estaba registrada en el servidor destino, era necesario dar de baja el servidor Web para poder integrar la nueva librería; este escenario es el peor de todos para las aplicaciones que requieren la máxima disponibilidad. Con ASP.NET todos los archivos que una aplicación necesita se encuentran en la carpeta del sitio. Para copiar un sitio a otro servidor basta con copiar la carpeta del sitio en su to talidad. A este tipo de implementación se le ha dado el nombre de Copy Deployment.
Recursos de personalización: M aster pages, Skins y Themes. En ASP.NET se pueden utilizar recursos adicionales para la personalización y estandarización de los sitios desarrollados. Las páginas maestras (master pages) son páginas generales que definen la apariencia, el comportamiento y el enfoque del sitio en general. Las variaciones se manejan a través de páginas de contenido («contení pages). Para definir este tipo de páginas es necesario crear una página de extensión .master que contendrá una apariencia predefinida (layout) com puesta en HTML y controles Web del servidor; esta página contendrá, en lugar de directi vas @ Page, una directiva @ Master. Una página maestra puede tener dos o más controles delimitadores de contenido (ContentPlaceHolder), que no son otra cosa que regiones en la página Web en donde se pueden integrar elementos de contenido. Las páginas de conte nido dispondrán de la directiva @ Page, en donde el argumento MasterPageFile permite el enlace con la página maestra; en la página de contenido se agregan controles de conte nido que permiten especificar el ContentPlaceHolder en donde el contenido ha de inte grarse. En tiempo de ejecución, las páginas maestra y de contenido se enlazan para produ cir un resultado coherente y estandarizado. Las páginas de apariencia (skins) son archivos con extensión .sk in que definen las pro piedades de apariencia para las páginas ASP.NET; junto con las páginas de cascadas de es tilos (.c s s ) determinan el look de las páginas Web. Se definen escribiendo una página con los controles Web del servidor a los que se les desea establecer propiedades de apariencia predeterminadas junto con las propiedades que se desea establecer como predeterminadas. No se especifica la propiedad Id, dado que no se utilizarán más que como referencia para indicar a ASP.NET que aplique determinados valores en sus propiedades de apariencia a un determinado tipo de controles. Los temas (themes) son conjuntos de recursos adicionales, como imágenes, código de par te del cliente (scripting) y sonido, que se pueden integrar a un sitio Web para darle mayor calidad.
Personalización de la interfaz: Web Parts. En ASP.NET es posible dividir el conte nido de una página en partes autónomas, denominadas Web Parts, que el usuario puede personalizar. Con base en las Web parts es posible reubicar contenido en la página, ocul tar o mostrar partes, e incluso modificarlas dinámicamente respecto de su contenido.
www.FreeLibros.me
410
A p re n d a Practicando Visual Basic 2005 usando Visual Studio 2005
Elementos de una página Web ASP.NET En muchos sentidos, una página Web desarrollada en ASP.NET es una página común que, al ser invocada en el servidor, será interpretada y ejecutada por el motor de ejecución Web (US) y por .NET Framework. Las páginas Web desarrolladas en ASP.NET tienen la extensión ASPX, y son archivos de código textual que no requieren de ninguna herramienta especial para ser desarrollados; basta con un editor de texto simple para desarrollarlas. En el presente texto el término pá ginas Web se refiere a a páginas Web ASP.NET con extensión ASPX. Al invocar una página ASP.NET, el servidor resuelve los elementos que componen la pá gina en sus equivalentes funcionales codificados en HTML, VBScript y JScript. Ya que la página ha sido resuelta se envía al cliente que la solicitó.
Estructura básica de una página ASP.NET Inicialmente, es exactamente igual que una página Web HTML: