Вы находитесь на странице: 1из 648

En complementos de aprendizaje Presentaciones Videos Ejercicios

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005


Mtro. Jos Felipe Ramrez Ramrez
Master en Informtica Administrativa ITIL Certified Trainer Instructor CAP-DEV Nivel 3 Facultad de Contadura Pblica y Administracin Facultad de Ingeniera Mecnica y Elctrica Universidad Autnoma de Nuevo Len, Mxico

REVISIN TCNICA Mtro. Francisco Salazar Universidad Autnoma de Nuevo Len, Mxico Mtro. Csar Tello Univesidad Autnoma de Nuevo Len, Mxico

Datos de catalogacin bibliogrfica RAMREZ, JOS FELIPE. Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005 PEARSON EDUCACIN, Mxico, 2007 rea: Ingeniera y Computacin ISBN: 978-970-26-0912-4 Formato: 18.5 23.5 cm Pginas: 648

Editor: Pablo Miguel Guerrero Rosas e-mail: pablo.guerrero@pearsoned.com Editor de Desarrollo: Bernardino Gutirrez Hernndez Supervisor de Produccin: Jos D. Hernndez Garduo PRIMERA EDICIN, 2007 D.R. 2007 por Pearson Educacin de Mxico, S.A. de C.V. Atlacomulco 500-5to. piso Col. Industrial Atoto 53519, Naucalpan de Jurez, Edo. de Mxico E-mail: editorial.universidades@pearsoned.com Cmara Nacional de la Industria Editorial Mexicana. Reg. Nm. 1031. Prentice Hall es una marca registrada de Pearson Educacin de Mxico, S.A. de C.V. Reservados todos los derechos. Ni la totalidad ni parte de esta publicacin pueden reproducirse, registrarse o transmitirse, por un sistema de recuperacin de informacin, en ninguna forma ni por ningn medio, sea electrnico, mecnico, fotoqumico, magntico o electroptico, por fotocopia, grabacin o cualquier otro, sin permiso previo por escrito del editor. El prstamo, alquiler o cualquier otra forma de cesin de uso de este ejemplar requerir tambin la autorizacin del editor o de sus representantes. ISBN 10: 970-26-0912-7 ISBN 13: 978-970-26-0912-4 Impreso en Mxico. Printed in Mexico 1 2 3 4 5 6 7 8 9 0 - 10 09 08 07

CONTENIDO
Prlogo Agradecimientos Como utilizar este libro Parte 1 Plataforma .NET versin 2005 Captulo 1 Arquitectura de la plataforma .NET Definicin 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 sistemas operativos Ventajas que brinda la infraestructura de .NET Convivencia de .NET y COM Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Captulo 2 .NET como multiplataforma de desarrollo Determinacin de la plataforma .NET requerida Productos de plataforma .NET Desarrollo de aplicaciones en .NET usando SDK Tecnologas cubiertas en este libro vii xv xvii 1 3 5 7 9 10 11 27 28 29 31 32 33 34 35 37 39 49 53

vi

Contenido

Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Captulo 3 Tcnicas de desarrollo con Visual Studio 2005 Fundamentos de desarrollo con Visual Studio Elementos de sintaxis en Visual Basic Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Parte 2 Fundamentos de programacin en Visual Basic Captulo 4 Variables, arreglos y tipos de datos Variables Conversin de datos Acceso a datos Value type y Reference type Strong Typing Manejo elemental de variables Estructuras y enumeraciones Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Captulo 5 Espacios de nombres y desarrollo de libreras Espacios de nombres (namespaces) Uso de espacios de nombres Creacin de namespaces propios Alias para los espacios de nombres Independencia de los ensamblados Referencias Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Captulo 6 Manejo de operadores Operadores aritmticos Operadores de asignacin

55 56 56 58 59 61 67 92 93 93 94 95 97 99 105 107 109 112 133 135 136 136 138 139 141 148 149 150 151 151 170 171 171 173 175 177 178

Contenido

vii

Operadores comparativos Operadores lgicos Prioridad entre operadores Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Captulo 7 Estructuras de decisin y control Estructuras de decisin Estructuras de control Estructuras envolventes y anidadas Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Captulo 8 Manejo estructurado de excepciones Errores y Excepciones Manejo estructurado de excepciones Try...Catch...Finally Filtrado de excepciones Lanzamiento de excepciones propias Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Parte 3 Programacin orientada a objetos Captulo 9 Fundamentos de la programacin orientada a objetos Trminos bsicos de POO Elementos esenciales de los objetos que permiten su programacin Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Captulo 10 Clases, mtodos y propiedades Definicin de una clase Definicin de propiedades

180 185 189 200 201 201 203 205 207 211 215 227 228 228 230 231 233 234 235 241 246 249 250 250 252 253 255 257 265 275 276 276 278 279 281 281

viii

Contenido

Creacin de bibliotecas de clases (libreras) Condiciones para la utilizacin de las bibliotecas de clases Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Captulo 11 Herencia y polimorfismo Herencia Estatutos auxiliares para el manejo de herencia y polimorfismo Polimorfismo Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Parte 4 Interfaces Windows/Web y Servicios Web XML Captulo 12 Desarrollo de aplicaciones Windows Interfaz de usuario Desarrollo de interfaces basadas en objetos Jerarqua de clases relacionadas con controles Clasificacin de los controles Enfoque (Focus) Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Captulo 13 Desarrollo de aplicaciones Web con ASP.NET Motivos del auge de las aplicaciones Web Requerimientos para el desarrollo de ASP.NET Procesamiento de pginas Web en .NET Caractersticas de ASP.NET Elementos de una pgina Web ASP.NET Controles comunes en aplicaciones Web Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo

283 284 307 308 308 310 311 313 323 325 335 336 336 338 339 341 344 345 349 355 363 392 393 394 396 397 399 400 402 403 410 419 439 440 441 443

Contenido

ix

Captulo 14 Servicios Web XML Servicios Web XML Infraestructura de operacin de los Servicios Web Elementos para la creacin de un Servicio Web XML Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Parte 5 Manejo de bases de datos con ADO.NET Captulo 15 Manejo de bases de datos con ADO.NET ADO.NET Historia del acceso a los almacenes de datos Formas de trabajo con bases de datos en .NET Proveedores de datos de .NET Framework Modelo de objetos de ADO.NET Cmo realizar la conexin Command DataReader Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Captulo 16 Manejo de bases de datos desde aplicaciones Windows Modelo de objetos DataSet Alternativas para poblar de datos un DataSet DataAdapter DataSet Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo Captulo 17 Manejo de bases de datos desde aplicaciones Web Data Source Controls y Data Bound Controls Mapa mental del captulo Terminologa

445 447 453 454 463 464 464 466 467 469 471 472 477 481 491 496 503 506 521 522 523 525

527 529 534 535 538 562 563 564 566 567 569 596 597

Contenido

Preguntas Examen rpido del captulo Captulo 18 Colecciones genricas (generics)


Generics Bloques de cdigo usando generics Colecciones genricas List Queue Stack Dictionary Mapa mental del captulo Terminologa Preguntas Examen rpido del captulo

597 599 601


603 604 607 607 610 613 616 619 620 620 622

A mi hermano Gil, Quien verdaderamente sabe escribir.

PRLOGO
Este libro est compuesto por partes seleccionadas del curso de certificacin Aprenda Practicando CAP-Dev 2005, cdigo 2015: Aprenda Practicando Visual Basic 2005 y Visual 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 prcticas no requeran codificacin por parte 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 programacin 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 reservadas y las estructuras que permiten la creacin casi artesanal de los programas; es decir, el profesional cuya curiosidad lo ha convertido en conocedor profundo del funcionamiento de las cosas, y (b) para el desarrollador profesional de alto rendimiento que casi siempre dispone de menos tiempo del que necesita para generar los resultados que las empresas 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 propsito del libro no es tan simple como la frase formar desarrolladores minuciosos pero efectivos. Sera algo demasiado simple. Vamos ms all. Creo firmemente que el mundo en que crecemos encuentra muchas maneras sutiles de volverse ms complejo conforme se globaliza. Queremos hacer de nuestra vida un cortometraje feliz en donde todo transcurre tan rpido que nos olvidamos de que los planes de vida a largo plazo tambin existen. Al or las noticias del da me lamento al darme cuenta de que la violencia y la deshonestidad 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 acta poco; creo que entre el anhelo personal y la accin que produce resultados hay abismos enormes, y la gente quiere tender puentes rpidos y cmodos para ir de un punto a otro. A veces la materia

xiv

Prlogo

prima para esos puentes son acciones delictivas y prcticas ilegales, siempre disponibles y a la mano, que lo enrarecen todo y terminan quitando ms de lo que dan. Si no eres de las personas fciles de seducir por el lado oscuro de la fuerza, sino que buscas caminos lcitos y honestos para tender los puentes, te darss cuenta de que resulta difcil, costoso, complejo y cansado. Este libro es mi pequea contribucin para quien desea dedicarse profesionalmente a la lcita y honesta actividad del desarrollo de aplicaciones. A quien desee llenar su cabeza de conocimientos para despus 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 lder en la construccin de aplicaciones empresariales, as como la ms demandada por los empleadores: Visual Studio. Dominar todos los temas de este libro garantiza la capacidad para el trabajo productivo con tecnologas Microsoft, cosa que ya ha sido un puente para tantos. Como dice Mario Benedetti: Para cruzarlo o para no cruzarlo, ah est el puente.

AGRADECIMIENTOS
Los agradecimientos van, como siempre, para los indispensables en mi vida. Para Adriana, mi compaera vital, y para Sara, por ser la lucecita que ilumina mis senderos. A toda mi familia en general, por estar ah generacin tras generacin, demostrando que se puede ser lcito y honesto, y obtener los anhelos, uno a la vez. A mis compaeros Vernica Lpez, Delia Briones, Rolando Martnez, Gustavo Valds y Rey Manuel, por transformar algo simplemente soportable en algo disfrutable; a Paco Salazar, Jorge Hernndez, Magda Garza, Paco Guevara, Heriberto Gonzlez y todos los que creen que Aprenda Practicando est avanzando gracias a la calidad de los productos y su filosofa. A Vctor Manuel Ortega, que seguro llegar a mucho en su vida: gracias por la revisin lnea a lnea de los programas. Como siempre, mi agradecimiento especial a Isela Martnez por el delicado esmero que hace de un texto opaco un texto con algo de brillo. Siempre es bueno que los libros tengan un ngel de la guarda. Monterrey, Nuevo Len, 2006.

Cmo utilizar este libro


Descargue nuevos captulos prcticas adicionales y archivos complementarios desde nuestro sitio AprendaPracticando.com

Este libro es una herramienta de aprendizaje dirigida a profesionales con especialidad en computacin e informtica, de ah que analice desde elementos de programacin hasta el manejo de bases de datos. El contenido est diseado para que el lector, en un periodo de cuatro a seis meses, aprenda a programar en Visual Basic y utilizar Visual Studio 2005 en forma intensiva. Se espera que, al final, el lector sea capaz de implementar sistemas de informacin con manejo de bases de datos utilizando SQL Server y en interfaz de consola, Windows y Web. De forma autodidacta y con una dedicacin de tiempo completo a la realizacin de los ejercicios del libro se puede aprender todo en dos meses. La configuracin ideal de hardware para lograr las metas de aprendizaje de este libro es la siguiente: a) Un equipo de ltima generacin con Windows XP Professional (o superior) con Service Pack 2 instalado, b) Internet Information Server 5.5 o superior instalado y funcionando, c) .NET Framework 2.0 Redistributable Package, d) .NET Framework SDK 2.0, e) Visual Studio 2005 Standard Edition en ingls y f) SQL Server 2000/2005 o superior. Los nmeros sugieren la secuencia de instalacin. Se recomienda que la cuenta con la que ingrese al sistema tenga privilegios de administrador y que forme parte del grupo de usuarios Debugger Users. Tambin puede cubrirse la totalidad de los temas tomando el curso 2015 Programacin en Microsoft Visual Basic 2005 y Visual Studio 2005, y 2016 Acceso a datos usando Microsoft Visual Basic 2005 y Visual Studio 2005, en algn centro autorizado Aprenda Practi-

xviii

Aprenda 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 gua de un instructor certificado CAP-Dev, quien le asesorar en temas del curso adems de orientarle con respecto a la forma en que puede emplear los conocimientos en casos reales que se encuentre desarrollando.

Cmo estn compuestos los captulos?


Los captulos del presente libro tienen los siguientes elementos que fomentan el aprendizaje: Presentacin profesional en Power Point. Si utiliza el presente libro para la exposicin de ctedra, 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 desarrollado. Estas presentaciones estn sujetas a condiciones de uso. Objetivo general y objetivos particulares. Cada captulo tiene en su primera pgina un objetivo general, que representa la nueva habilidad que el lector habr de adquirir al concluir el estudio del captulo; adems sealar los objetivos particulares, que representan en secuencia lgica los focos de atencin para alcanzar el objetivo general. ndice por captulo. Cada captulo contiene su propio ndice, por lo que ubicar la informacin dentro de un captulo resulta ms fcil; adems, el ndice diferencia visualmente los temas de los ejercicios, a fin de que se puedan localizar estos ltimos de manera ms fcil. Notas informativas. Cada captulo contiene notas adicionales que proporcionan informacin que, en general, no est disponible en la documentacin del producto. Adems, se ofrecen referencias histricas de los productos, as como consejos y advertencias que pueden reducir la curva de aprendizaje. Videos explicativos. Cada captulo puede hacer referencia a videos explicativos que abordan temas que es ms fcil tratar de manera visual y dinmica. Tanto las presentaciones profesionales en Power Point como el libro sealan el momento adecuado de su exposicin. Estos videos estn disponibles en lnea en el sitio Web AprendaPracticando.com.

apvbvsxx.ppt

Cmo utilizar este libro

xix

Figuras. Cada captulo contiene figuras que complementan grficamente los temas tratados; a veces una imagen dice ms que mil palabras. Lo nuevo en Visual Studio 2005. Visual Studio 2005 presenta nuevas capacidades y herramientas de productividad. La seccin Lo nuevo explica detalladamente cada una de estas adiciones. Ejercicios detallados, con explicaciones lnea por lnea y ejecucin guiada. La mayora de los captulos presenta ejercicios que permiten comprobar la teora estudiada. Los ejercicios se desarrollan paso a paso y se complementan con cdigo. Se incluye tambin una ejecucin guiada, que explica lo que cada lnea de cdigo hace y los resultados que se obtienen. Mapa mental. Cada captulo incluye un mapa mental que acta como resumen de los temas del captulo. Tambin es til en el aprendizaje en grupo, para que aquellos que se atrasen en el seguimiento de los temas puedan ponerse al da. Generalmente basta con analizar el mapa mental y repasar en el captulo los trminos clave que contiene. Terminologa. .NET introduce muchos conceptos nuevos que es necesario tener en mente. Cada captulo tiene su propio ndice de trminos, lo que permite su rpida localizacin en el texto del captulo. Preguntas. Al final de cada captulo se incluye una serie de preguntas; si el lector las contesta correctamente, podr tener la certeza de haber aprendido los conocimientos presentados en el captulo. Algunas preguntas requieren anlisis, ms all de la simple consulta, lo que despierta el razonamiento de la tcnica que se est aprendiendo. Examen rpido. Es la evaluacin rpida que se debe resolver despus de haber estudiado los temas y resuelto los ejercicios. Si entendi los objetivos de estudio y la terminologa, llev a cabo los ejercicios y las prcticas individuales, y respondi a las preguntas, es seguro que resuelva la evaluacin correctamente, con conocimiento 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 prctica, algunos ms siendo cuestiona-

xx

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

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 explicaciones 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 slo algunos temas, considere las partes del libro como temas. No caiga en la tentacin de tomar en cuenta slo algunos de los captulos de una parte, dado que estn estructurados en una secuencia funcional. Si ya conoce .NET, puede saltarse captulos dentro de un tema si ya los domina. Una manera de evaluar si est en condiciones que le permitan saltar captulos es la siguiente: trate de contestar las evaluaciones rpidas del captulo. Si responde correctamente a la mayora de las preguntas, puede omitir la lectura del captulo. Decididos los temas que le interesan, lea de manera secuencial cada captulo del tema: a) Lea con detenimiento los objetivos del captulo para que tenga presente que eso es lo que hay que dominar al concluirlo. b) Si interrumpe la lectura de un captulo, cada vez que reinicie la lectura lea de nuevo los objetivos. Es muy importante que los tenga presentes. c) Revise los videos en el momento en que los seale el texto. d) Realice los ejercicios en el momento en que los encuentra en el texto. e) Responda el examen rpidamente; si no contesta correctamente la mayora de las preguntas, vuelva a revisar el captulo hasta que quede satisfecho. 4. Si aprueba satisfactoriamente el examen rpido, intente desarrollar las prcticas individuales. Si ya entendi el contenido del captulo, slo es cuestin de tiempo y dedicacin. Le sugerimos que pruebe los cuestionarios y juegos en lnea que se encuentran en www. aprendapracticando.com para comprobar el grado de experiencia que ha adquirido.

2.

3.

5.

Para el uso con grupos


Si utiliza el libro para la capacitacin de grupos, le sugerimos que tome en cuenta las siguientes consideraciones para alcanzar los objetivos (suponemos que usted es el instructor/facilitador):

Cmo utilizar este libro

xxi

Al iniciar un tema
1. El instructor/facilitador deber dominar el tema a instruir; previo a la instruccin, deber responder a las preguntas, realizar los ejercicios, realizar las prcticas individuales y responder a la perfeccin el examen rpido. Los equipos en los que se pretendan demostrar los ejercicios debern estar configurados con los requerimientos mnimos que aparecen en la primera parte de esta seccin. Las presentaciones profesionales en Power Point estn disponibles en el sitio Web de Aprenda Practicando; descargue las versiones ms actualizadas antes de cada curso. Antes de revisar una parte del libro, explique la importancia del aprendizaje del tema y genere inters por l; sin inters no hay aprendizaje. Lo ideal, para demostrar que la tecnologa estudiada es til, es citar su experiencia personal en el uso de estas herramientas de desarrollo. Tambin esto contribuye a aumentar el inters en su exposicin.

2. 3.

4. 5.

Para revisar cada captulo


1. Solicite, antes de la sesin de instruccin, que los miembros del grupo contesten las preguntas de cada captulo. Puede pedirlo como tarea escrita (de preferencia a mano, para evitar las operaciones irreflexivas de copiar y pegar), para garantizar que los participantes la lean. Al iniciar cada sesin recurdeles los objetivos del captulo que se estudiar. En cada inicio de captulo, despus 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. Proyecte la presentacin profesional que acompaa a cada captulo. Para un mejor aprovechamiento recomendamos que para su uso personal imprima la presentacin como pgina de notas, y lea las notas de cada una de las diapositivas, le ayudarn los consejos y anotaciones relevantes. En caso de que se encuentre con un icono de video en la presentacin proyctelo en ese momento. En una exposicin, solicite a los miembros del grupo que realicen los ejercicios hasta el final, cuando ya se haya expuesto toda la presentacin. Los miembros del grupo debern realizar los ejercicios que el instructor/facilitador les pida. ste deber especificar con claridad cul es el tiempo mximo de realizacin; es importante que los tiempos marcados se respeten. El instructor/facilitador, en caso de detectar dificultades en la realizacin de los ejercicios, deber apoyar a los miembros del grupo, pero sin hacer los programas por ellos.

2. 3.

4.

5. 6. 7.

8.

xxii

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

9. 10.

11.

12.

13.

En caso de detectar un problema comn, es importante comentar con el grupo el problema y la solucin. Al concluir la realizacin de los ejercicios, el instructor/facilitador comentar las experiencias ms relevantes que haya notado; repasar por ltima vez los objetivos del captulo y comentar cmo fue que se cubrieron. Al finalizar los ejercicios, el instructor/facilitador pedir al grupo que conteste el examen lo ms rpido posible, de manera individual. Se darn tres minutos para contestar; despus, en voz alta plantear cada una de las preguntas y revisar qu contest el grupo. Despus de escuchar las diferentes posturas, ofrecer la respuesta correcta y dar sus razones. Los exmenes son una herramienta de aprendizaje ms, no una oportunidad para el premio o el castigo. El instructor/facilitador podr encargar las prcticas individuales como trabajo de refuerzo del conocimiento, ya sea para su desarrollo en sesin, o para que las personas desarrollen las prcticas en casa. De ser posible, motive a los participantes a comprobar sus conocimientos en los diferentes cuestionarios y juegos en lnea que se encuentran en: www.aprendapracticando.com.

Certificacin CAP-Dev
Aprenda Practicando ha desarrollado la primera certificacin en castellano relacionada con la tecnologa 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 (Certificacin Aprenda Practicando .NET Developer) se compone de los siguientes cursos:

Cmo utilizar este libro

xxiii

Solicite sus cursos en los centros autorizados Aprenda Practicando o regstrese a ellos en la pgina www.AprendaPracticando.com Conforme las versiones de los productos de Microsoft van evolucionando, la certificacin y los cursos se actualizan de inmediato.

Captulos:
1 Arquitectura de la plataforma .NET 2 .NET como multiplataforma de desarrollo 3 Tcnicas de desarrollo con Visual Studio 2005

Parte 1
Plataforma .NET versin 2005
En esta parte del libro se estudian los componentes y particularidades de la plataforma de desarrollo Microsoft .NET, en su versin 2005. Desde la perspectiva terica se analizan los conceptos que permiten entender a profunidad cmo funciona la plataforma Microsoft .NET. Adems, se describen las caractersticas de los productos .NET; este conocimiento es necesario para afrontar las responsabilidades del desarrollador, pues le ayuda a responder la pregunta Qu compro y qu instalo? En el aspecto prctico, se trata de forma general lo que Visual Studio 2005 y los lenguajes soportados por .NET Framework versin 2.0 pueden hacer. Esta obra tiene como finalidad el desarrollo profesional del lector, quien a travs del aprendizaje slido de .NET podr aplicar estos conocimientos y crecer gracias a las capacidades que obtendr. Las posibilidades de productividad son muchas, as como 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 slido.

Herramientas de Visual Studio revisadas:


1. 2. 3. 4. 5. 6. Solution Explorer Document Window Text Editor Form Designer Toolbox Properties

Otras herramientas:
1. 2. 3. 4. 5. .NET Framework 2.0 Configuration SDK Command Prompt ILDASM.EXE VBC.EXE IIS Services

CAPTULO

Arquitectura de la plataforma .NET


Objetivos: Conocer los elementos y el funcionamiento de la plataforma .NET, desde la codificacin del programa fuente hasta la ejecucin del programa resultante. 1. Conocer las capas ms importantes de .NET Framework. 2. Distinguir los requisitos que los lenguajes deben cumplir para ser reconocidos 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 organizacin lgica y fsica. 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 anteriores basadas en tecnologa COM.

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Definicin de la plataforma .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Capas principales de la plataforma .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . Capa de lenguajes de .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CLS (Common Language Specification) . . . . . . . . . . . . . . . . . . . . . . . . . Lenguajes .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Capa de servicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Biblioteca de clases base de .NET Framework (BCL) . . . . . . . . . . . . . . . Independencia de la biblioteca de clases y los lenguajes . . . . . . . . . . . CLR (Common Language Runtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compilador para generar cdigo intermedio . . . . . . . . . . . . . . . . . . . . Global Assembly Cache (GAC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Anlisis de las entradas del Cach global para ensamblado (GAC, Global Assembly Cache) . . . . . . . . . . . . . . . . . . . . . . . . . . . .NET PE (.NET Portable Executable) versus PE/COFF . . . . . . . . . . . . . . . Identificacin de diferencias en programas ejecutables, usando el desensamblador de .NET (ildasm.exe) . . . . . . . . . . . . Compiladores JIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Impacto de .NET Framework en los sistemas operativos . . . . . . . . . . . . . . . . Modificacin al cargador de ejecutables . . . . . . . . . . . . . . . . . . . . . . . Registro de biblioteca de clases base . . . . . . . . . . . . . . . . . . . . . . . . . . Prerrequisitos del sistema operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . Ventajas que brinda la infraestructura de .NET . . . . . . . . . . . . . . . . . . . . . . . Convivencia de .NET y COM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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

Captulo 1. Arquitectura de la plataforma .NET

Bienvenidos a otro libro de la serie Aprenda practicando.


Como es costumbre, esta obra se vale del anlisis terico profundo y el uso intensivo de ejercicios para ensearle, en este caso concreto, a desarrollar aplicaciones en esquemas Cliente/Servidor con acceso a bases de datos corporativas, mediante el lenguaje Visual Basic.NET en ambientes de Consola, Windows y Web. Este libro se concentra en las tecnologas .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 prctica necesarios para enfrentar responsabilidades de desarrollo en las tecnologas anteriormente citadas. Estamos seguros de que al concluir la lectura y los ejercicios del presente libro el objetivo se habr cumplido.

NOTA sta es la versin profesional del libro Aprenda Practicando Visual Basic.NET; los archivos complementarios mencionados en el mismo se encuentran en la pgina www.Aprenda Practicando.com. El temario 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 certificacin .NET en espaol, CAP-DEV (Certificacin Aprenda Practicando .NET Developer).

Definicin de la plataforma .NET


La plataforma .NET es un componente de los sistemas operativos Windows, que permite el desarrollo, la liberacin y la ejecucin de aplicaciones. La plataforma posee un conjunto de herramientas de desarrollo y lenguajes de programacin (de propsito general, orientados a objetos, de tercera generacin, de alto nivel y compilacin a cdigo intermedio), que nos permiten utilizar todos los recursos disponibles en la computadora a travs de una librera de clases comn, con la que se pueden desarrollar aplicaciones de Consola, basadas en Windows, y para la Web, que utilizan protocolos abiertos para la interaccin entre los elementos que las componen. .NET no es slo 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 da al desarrollar aplicaciones empresariales.

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

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 comunicacin. 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 produce los siguientes beneficios: En resumen, trabajar con la plataforma .NET

Integracin de aplicaciones multi-lenguaje. Homologacin de las capacidades de los lenguajes. Disponibilidad de una biblioteca de clases comn para los lenguajes. Arquitectura abierta a nuevos lenguajes. Desarrollo simplificado. Implementacin simple. Mejor soporte de componentes. Interoperacin con Internet. Interoperacin con dispositivos mviles. Rentabilidad. Seguridad. Fcil implementacin (Copy Deployment). Permite el desarrollo de aplicaciones de 64 bits.

Uno de los mayores retos implicados en el aprendizaje de cualquier lenguaje .NET es entender la forma en que esta plataforma trabaja. Por otro lado, existen muchos tecnicismos ligados a esta tecnologa que es necesario conocer. Es recomendable entonces consultar el glosario de trminos de .NET disponible en el sitio Web de Microsoft: eso puede ayudarle a reconocer los trminos; para entenderlos cabalmente, lea este libro.

Captulo 1. Arquitectura de la plataforma .NET

Capas principales de la plataforma .NET


Las capas que componen la plataforma .NET son:
Capa de lenguajes.
Composicin de la plataforma .NET

La capa de lenguajes est integrada por la CLS (Especificacin comn para lenguajes, Common Language Specification) y los lenguajes de programacin compatibles con ella. La CLS es una especificacin abierta de Microsoft que los lenguajes deben cumplir para ser considerados .NET. A la fecha Microsoft ha publicado 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 lineamientos CLS y proporcionen los compiladores para generar el cdigo intermedio reconocido por .NET. . NET Framework (Infraestructura y servicios). .NET Framework es la capa compuesta por el ncleo de servicios y recursos de .NET, que incluye los compiladores, la biblioteca de clases comn para todos los lenguajes y los servicios que convierten el cdigo fuente en cdigo mquina para los diversos sistemas operativos a travs del uso de cdigo 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 servicios que permiten la intercomunicacin entre los programas desarrollados en un lenguaje .NET y el resto de los elementos de .NET Framework, con el fin de generar comportamientos a travs del dilogo con el sistema operativo. Existen dos principales: a) Windows Application Services, que dan soporte a las aplicaciones de interfaz grfica estilo Windows y a las de consola en su dilogo con .NET Framework y el sistema operativo; b) ASP.NET Application Services, que apoya a las aplicaciones de interfaz grfica basadas en la Web, servicios Web XML y aplicaciones de cmputo mvil en su dilogo con .NET Framework y el sistema operativo, a travs del motor de servicios Web. En plataforma Microsoft este motor de servicios Web se llama Internet Information Server (IIS). Biblioteca de clases base (BCL/Base Class Library). La Biblioteca de clases base (BCL/Base Class Library) est constituida por un conjunto de bibliotecas de clase que ponen a disposicin de los programas un conjunto de funciones jerrquicamente organizadas, que podrn ser utilizadas como funciones nativas de manera no dedicada por todos los lenguajes de .NET. Motor comn de ejecucin (CLR/Common Language Runtime). El Motor comn de ejecucin (CLR/ Common Language Runtime) es la plataforma comn de ejecucin de los programas desarrollados en cualquier lenguaje .NET. CLR agrupa compiladores de lnea de comando que permiten la creacin de cdigo intermedio, libre de ambigedades, al que se conoce como ensamblado (assembly); contiene adems los compiladores JIT, Just in Time Compilers, que se encargan de generar cdigo mquina a partir de los en-

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

samblados. CLR se encarga de la gestin de errores, la administracin de recursos y el dilogo con el sistema operativo en tiempo de ejecucin. A todo lo que requiere de la intervencin de CLR para funcionar se le da el calificativo de administrado (managed). Soporte operativo. La capa de soporte operativo es la compuesta por las herramientas que se integran al sistema operativo al momento de instalar .NET Framework en un equipo. Con esta operacin, el sistema operativo se modifica para poder interpretar y ejecutar aplicaciones .NET de forma nativa. Esta capa permite que el sistema operativo responda a indicaciones de accin emitidas por CLR en tiempo de ejecucin.

NOTA Microsoft ha denominado de diferentes formas a los productos y lenguajes que componen la tecnologa .NET: en la versin 1.0 de .NET Framework los lenguajes eran Visual Basic.NET, Visual C#.NET y Managed C++, mientras que el entorno integrado de desarrollo se conoca como Visual Studio.NET 2002. Por ser productos nuevos, exista la necesidad de diferenciarlos de las propuestas anteriores; incluso internamente en la compaa se penalizaba a quien osara referirse a Visual Basic.NET como Visual Basic 7. En la versin 1.1 de .NET Framework, los lenguajes pasaron a ser Visual Basic.NET, Visual C# y Managed C++, y se trabajaba con Visual Studio.NET 2003. Ahora, en la versin 2.0 de .NET Framework, las versiones anteriores de los lenguajes resultan anacrnicas, por lo que se conocen como Visual Basic, C# y C++. Se elimina tambin el .NET en Visual Studio; el nombre de la ltima versin queda entones como Visual Studio 2005.

FIGURA 1.1 Estructura de la plataforma .NET

Captulo 1. Arquitectura de la plataforma .NET

Capa de lenguajes de .NET


CLS (Especificacin comn para lenguajes, Common Language Specification)
No siempre prestamos atencin a lo que una herramienta de desarrollo hace tras bambalinas, dado que como programadores nos concentramos en que nuestra codificacin produzca la respuesta esperada. En .NET, sin embargo, es importante conocer lo que sucede desde la codificacin hasta la intervencin del sistema operativo en la atencin de las peticiones. Para saber cmo funciona .NET debemos partir de un concepto denominado CLS (Especificacin comn para lenguajes, Common Language Specification). La CLS es el subconjunto de capacidades mnimas soportadas por el motor de ejecucin de .NET (CLR). Todas las herramientas y componentes de .NET, por ejemplo, conviven y utilizan las clases de BCL, adems de ser orientadas a objetos; esto porque CLS lo determina como condicin para formar parte de la tecnologa .NET. El cumplimiento de estas reglas garantiza un comportamiento homogneo 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 lenguajes permiten hacer prcticamente lo mismo dado que cumplen con un mismo marco original 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 programacin basado en .NET y proponerlo al mercado. Basta con desarrollar las herramientas necesarias para el trabajo con el lenguaje, incluyendo el compilador y el analizador (parser) del mismo. El nico requisito es que debe cumplir con todas las reglas definidas en la CLS. Capacidades multi-lenguaje de .NET. Dado que todos los lenguajes de .NET cumplen con CLS, su programacin es bastante similar. A continuacin ejemplificamos los efectos de esta especificacin mediante el tpico programa HolaMundo que muestra un mensaje. El programa HolaMundo en C# sera el siguiente:

10

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

HolaMundo.cs
1 2 3 4 5 6 8 9 using system; class HolaMundo { static void Main() { Console.WriteLine(Hola Mundo); } }

Y ste sera el cdigo 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 cmo el cdigo es sorprendentemente parecido. Todos los lenguajes en .NET comparten el mismo origen (CLS), y difieren solamente en la forma estructural de la codificacin, determinada por el estilo particular del lenguaje.

NOTA La empresa japonesa Fujitsu enfrent un problema comn para muchas empresas grandes: gran parte de sus desarrollos estn en COBOL. Cmo cambiar a la plataforma .NET sin sacrificar la inversin en desarrollo que ya se tiene? La solucin 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 implementar nuevos lenguajes nunca haba sido tan atractiva. Lo ideal para mucha gente sera disponer de poderosos lenguajes de programacin en su lengua nativa, por ejemplo, en espaol. Alguien se anima?

Adems de proponer una arquitectura que facilita la creacin de lenguajes, la CLS proporciona interoperabilidad entre los mismos. En virtud de que todos los lenguajes .NET cumplen con una misma especificacin, en una solucin o aplicacin pueden coexistir programas desarrollados en diferentes lenguajes sin crear problemas de compatibilidad entre ellos.

Lenguajes .NET
La definicin de lenguaje .NET es simple: todo aquel lenguaje de programacin y sus herramientas de anlisis y compilacin que cumplan con la CLS.

Captulo 1. Arquitectura de la plataforma .NET

11

Los lenguajes .NET requieren someterse a un proceso de compilacin, y el resultado de la compilacin debe ser un programa intermedio, que llamamos ensamblado (assembly); los ensamblados pueden ejecutarse slo en colaboracin con el motor de ejecucin de .NET (CLR). A todo programa que se ejecuta en colaboracin con el Motor comn de ejecucin (CLR) se le da el calificativo de administrado (managed), por lo cual, a los lenguajes de .NET tambin se les conoce como lenguajes administrados (managed languages). En esencia, son administrados aquellos elementos ejecutados por el motor comn de ejecucin (en lugar de ser ejecutados directamente por el sistema operativo). Al ser administrados, los elementos disponen de servicios propios del motor comn de ejecucin como la recoleccin de basura (garbage collection), verificacin de tipos en tiempo de ejecucin (runtime type checking), administracin de la memoria (memory management) y soporte de seguridad (security support), entre otros.

.NET Framework
Capa de servicios
La capa de servicios se encarga de proporcionar los medios de comunicacin 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 travs de lenguaje mquina, es decir, el .NET Framework. La capa de servicios est integrada por dos tipos fundamentales: ASP.NET Application Services y Windows Application Services. Estos servicios son en realidad modelos de programacin que permiten la intercomunicacin entre la interfaz y el ncleo 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 Computacin mvil), mientras que Windows Application Services est dirigido a los desarrollos en ambiente Windows (aplicaciones de escritorio y Cliente/Servidor).

12

Aprenda 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 Library), debemos considerar primero que todo en .NET es un objeto, pues los lenguajes .NET son completamente orientados a objetos. Aunque despus se analizar a fondo la programacin 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 definicin clsica indica que un objeto es una instancia de una clase. Una clase es la definicin formal de un objeto; es como una plantilla que especifica

los datos que un objeto puede manejar para identificarse, definirse y producir resultados; la clase tambin especifica los procesos que es capaz de realizar un objeto (comportamiento) y los resultados que proporciona. Al proceso de derivar un objeto a partir de una clase se conoce como instanciacin. Los objetos tienen propiedades, mtodos y eventos. Los mtodos son las acciones predefinidas que es posible llevar a cabo a travs de un objeto. Para utilizar un mtodo es necesario instanciar un objeto generarlo a partir de una clase; un mtodo siempre es referido a travs 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 instanciacin, se conocen como types.

Con esto en mente, es fcil concluir que los programas desarrollados en .NET tienen como 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 aplicaciones: algunas permiten crear objetos que desarrollan clculos matemticos o trigonomtricos, otras permiten definir objetos que permiten la realizacin de grficos, otras ms permiten crear objetos a travs de los cuales es posible manipular bases de datos, etctera. Es muy difcil manejar y clasificar una cantidad tal de clases. Generalmente, las clases se almacenan en libreras de vnculos dinmicos (DLL) que agrupan clases afines. La BCL se compone de ms de 150 archivos DLL, en los cuales se encuentran diseminadas las clases que componen la biblioteca de clases base. Espacios de nombres (Namespaces). Tratar de encontrar libreras por nombre de archivo fsico es bastante problemtico. Las clases, como son tantas, se han categorizado y

Composicin de la plataforma .NET

Captulo 1. Arquitectura de la plataforma .NET

13

agrupado de manera lgica y jerrquica de acuerdo con su funcionalidad. A dichos grupos de clases se les conoce como Espacios de nombres (Namespaces).

NOTA La forma ms fcil de explorar la jerarqua de clases de .NET Framework es mediante la ayuda electrnica del producto. Tambin est disponible una versin impresa, a travs de Microsoft Press, a un precio no muy accesible para todos. Recomendamos el uso de los medios electrnicos, ya que ahorran rboles, son ms rpidos y van incluidos en el precio del producto.

Un programa puede contener objetos y emplear types; tanto los objetos como los types derivan de clases que indistintamente estn contenidas en libreras (DLL) de .NET, o bien en clases desarrolladas por el usuario. Las clases que dan origen a los objetos y types utilizadas en un programa en .NET no necesariamente estn contenidas en los mismos archivos de libreras, pero al momento de programar eso es irrelevante para el desarrollador. Disponibilidad de las clases: referencia y declaracin de libreras. Para poder hacer uso de una clase, es necesario especificar previamente en qu librera debe buscarse. Esto implica referir el recurso fsico y referir el recurso lgico. En otras palabras, hay que definir qu librera se requiere (referencia fsica) y qu espacio de nombre la refiere (referencia lgica). Para la referencia fsica es necesario que, al compilar, se establezca la referencia a la librera (DLL) requerida. Para la referencia lgica, dependiendo del lenguaje en el que se est codificando, se emplean instrucciones declarativas de espacios de nombre, tales como import, using, include, etctera, para que el programa pueda navegar sin problemas en la jerarqua de clases contenidas en la librera. La instruccin a utilizar vara en funcin al lenguaje que se est utilizando. Instanciacin de objetos. Una vez declaradas las libreras 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 mtodos para realizar alguna tarea determinada. Cdigo type safe. Cuando los mtodos de los objetos y los types utilizados por el programa son reconocidos por la plataforma .NET (como consecuencia de que todas las libreras estn 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 librera especfica en la cual se debe buscar la clase, o bien, cuando no se han declarado los espacios de nombres que faciliten la ubicacin de la clase buscada dentro de la jerarqua.

14

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Jerarquas 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 jerrquica 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 jerarquas, se les llama jerarquas de clases superiores. La organizacin de clases a travs de espacios de nombres es lgica; .NET Framework se encarga de saber en todo momento qu librera o componente fsico est asociado con un determinado espacio de nombres. Realmente, especificar el espacio de nombres System implica tener acceso a una librera que fsicamente se llama Mscorlib.dll, y que se encuentra en algn lugar de su equipo. Como puede ver, es ms sencillo hacer referencia a la librera a travs del espacio de nombres que mediante una ruta de archivo fsico. Con los anteriores elementos es posible definir a la biblioteca de clases de .NET Framework como una coleccin de clases incluidas en el ambiente de desarrollo .NET, disponibles para todos los lenguajes .NET y organizadas en espacios de nombres que permiten realizar tareas diversas a travs del uso de objetos y types. .NET Framework proporciona un sinfn de recursos para desarrollar aplicaciones; basta con encontrar dnde estn esos recursos. Al desarrollar en .NET es indispensable saber qu mtodos y types utilizar, en qu clase se encuentran y qu espacios de nombres permiten disponer de dichas clases. Si la funcionalidad requerida no est en ninguna de las clases de BCL, entonces ser necesario desarrollar las propias.

FIGURA 1.2 Organizacin de clases en BCL

Captulo 1. Arquitectura de la plataforma .NET

15

Independencia de la biblioteca de clases y los lenguajes


Ninguno de los lenguajes tiene uso exclusivo de la librera de objetos de .NET; por el contrario, est disponible para todos. Este hecho es bastante significativo ya que todos los lenguajes pueden hacer uso de las mismas clases, y, por tanto, podrn servir para lo mismo. Anteriormente, los programadores de C++ presuman de conocer un lenguaje que les permita manejar los recursos de la computadora de una manera ms profunda, y subestimaban 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 funcionalidad que C++, era necesario que aprendiera el manejo de API (Interfaz para la programacin de aplicaciones, Application Programming Interface) de Windows, y dicha opcin poda ser bastante compleja. Ahora eso ha cambiado, ya que con todos los lenguajes en .NET es posible hacer las mismas cosas. Uno de los mayores beneficios que se obtienen al disponer de una biblioteca de clases para su uso en varios lenguajes, es que el programador aprende un solo lenguaje y al mismo tiempo aprende todos, en trminos generales. Compare los cdigos HolaMundo.cs (C#) y HolaMundo.vb (Visual Basic), que se encuentran en este mismo captulo; aun codificados en distintos lenguajes, ambos utilizan un mismo espacio de nombres System, una misma clase Console y un mismo type WriteLine( ). La forma de invocar a las clases y los types en todos los lenguajes .NET es uniforme, y obedece a una sintaxis de separacin punteada (dotted) que diferencia espacios de nombres, clases y types (estos ltimos, opcionales en algunos casos):
Namespace.Class[.Type]

Adems, todos los lenguajes tienen el soporte de un mismo entorno integrado de desarrollo, llamado Visual Studio, con el cual es posible codificar al mismo tiempo mltiples proyectos en varios lenguajes. Realizar esto antes de .NET era impensable. El desarrollador deba aprender las palabras reservadas de cada uno de los lenguajes que aprendiera. Cada lenguaje posea su propia biblioteca de clases (Class Foundation), sus propias jerarquas y su propia sintaxis de invocacin. La experiencia que se ganaba con un lenguaje no serva de mucho al intentar desarrollar en otro; adems, cada lenguaje tena su propia herramienta de desarrollo: el programador consuma 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 problemas reales de programacin, como entender la lgica de negocios. La plataforma .NET reduce la curva de aprendizaje y favorece el desempeo de los equipos de desarrollo, ya que la especializacin puede darse ahora en la solucin de los proble-

16

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

mas especficos mismos, y no en las herramientas de desarrollo para resolverlos; con ello se aumenta la rentabilidad de los programadores y el retorno de la inversin en programas y capacitacin.

CLR (Motor comn de ejecucin, Common Language Runtime)


Motor comn de ejecucin. Una de las caractersticas ms interesantes que aporta .NET es la modificacin en la forma de compilar y ejecutar los programas. Compilacin en dos fases en .NET. La plataforma .NET compila los programas en dos tiempos, separando la fase de anlisis de la compilacin, de la de sntesis. Para ello, juega un papel muy importante el CLR. El CLR (Motor comn de ejecucin, Common Language Runtime) es el motor de ejecucin de cdigo administrado, que se encarga de proporcionar al programa en ejecucin servicios de alto nivel, tales como la integracin de mdulos multi-lenguaje, seguridad y acceso a mdulos de cdigo, administracin del ciclo de vida de los objetos, administracin de memoria, recuperacin de recursos, pistas de depuracin, etctera. El CLR trabaja en dos tiempos: 1. Tiempo de compilacin. Se inicia cuando el programador utiliza cualquier compilador de lenguaje .NET para compilar un cdigo fuente, y termina cuando se obtiene un cdigo intermedio a partir del cdigo fuente compilado. 2. Tiempo de ejecucin. Se inicia cuando se llama a ejecucin un cdigo intermedio y el CLR se encarga de someterlo a la accin de compiladores Justo a tiempo que producen cdigo nativo, para luego producir los efectos esperados del programa.

Clases y objetos

NOTA Los tiempos en los que se compilan y ejecutan los programas en .NET constituyen el rasgo ms caracterstico 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 ms adelante.

A partir de los anterior, podemos definir al CLR como el motor de ejecucin de cdigo administrado que provee una infraestructura de compilacin y ejecucin que abstrae y coloca en un plano subyacente las diferencias de plataformas de hardware en donde un programa es ejecutado. La definicin anterior es compleja; el concepto mismo del CLR lo es. De manera simplificada podemos decir que el CLR se encarga de administrar la compilacin y ejecucin de

Captulo 1. Arquitectura de la plataforma .NET

17

los programas en .NET, con el fin de que puedan aprovechar la biblioteca de clases y los servicios de .NET Framework.
NOTA No se sienta mal si tarda un poco en entender cmo trabaja el CLR: Piense que es el ncleo de la nueva plataforma de desarrollo de Microsoft y que dicha compaa tard aos en disearlo.

Compilador para generar cdigo intermedio


CLR en tiempo de compilacin. El trabajo de CLR comienza con un cdigo redactado en algn 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 cdigo fuente (source code). El cdigo fuente no es ejecutable. Para poder ejecutar un programa es necesario hacerlo pasar por un proceso de compilacin que consiste en revisar su sintaxis y estructura para generar, si no tiene errores, un archivo que permita ser llamado a ejecucin (ejecutable). El software que se encarga de convertir un programa fuente en ejecutable recibe el nombre de compilador; por ejemplo, el compilador especfico de Visual Basic se llama vb.exe. Ensamblado | 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 ms archivos implementados como una sola unidad de ejecucin sobre la cual se determina la accesibilidad y los permisos. Los ensamblados son la unidad bsica, mnima, de ejecucin en .NET. La compilacin 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 compilacin; si al compilar no se especifica el tipo de ejecutable que se desea generar, por omisin se crear un archivo EXE. Metadatos. No obstante que tienen la misma extensin de archivo, no son iguales un ejecutable comn y corriente, y uno generado por un compilador de .NET. El ejecutable creado por alguno de los compiladores de .NET est compuesto por dos elementos: cdigo y metadatos (este ltimo componente no existe en los ejecutables comunes). El cdigo es el conjunto de instrucciones que forman el programa; los metadatos describen cada elemento que ha de ser administrado en tiempo de ejecucin por el CLR; es informa-

18

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

cin relativa al programa y su entorno como tipos de datos, versin del programa, referencias externas a libreras, etctera. 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 cdigo administrado (managed code). Cdigo administrado/managed code. Es importante mencionar que si su computadora no tiene instalado el .NET Framework no podr llamar a ejecucin 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 cooperacin entre el ejecutable y el CLR. El calificativo administrado (managed) puede aplicarse a todo lo que se ejecuta bajo un contrato de cooperacin con el CLR, y que sin ste, no funciona. Diversos nombres de los ensamblados. Los ejecutables que se obtienen despus de compilar el cdigo fuente son conocidos de varias formas: el cdigo administrado tambin se conoce como ensamblado (assembly), MSIL (Microsoft Intermediate Language), IL (Intermediate Language) o cdigo ntermedio. El cdigo intermedio es aquel que no es cdigo nativo an, ya que slo ha sido sometido a la fase de anlisis del proceso de compilacin. El cdigo intermedio es independiente de la plataforma en la que se ejecute y del lenguaje en el cual fue escrito el cdigo fuente que le dio origen; eso garantiza la portabilidad de las aplicaciones, hacindolas universales y multiplataforma. El trmino que ms se est utilizando es el de ensamblado. Por definicin, un ensamblado es una coleccin de funcionalidad, control de versiones e implementacin que acta como la unidad bsica de ejecucin para el .NET Framework. FIGURA 1.3 Tiempos de compilacin en .NET

Captulo 1. Arquitectura de la plataforma .NET

19

Manifiesto. Por poseer metadatos, los ensamblados siempre son autodescriptivos. Cada 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 informacin:

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 informacin en el registro de Windows, pues todo lo que se necesita saber se encuentra en el manifiesto del ensamblado. Copy deployment. Todo lo que necesita un ejecutable para trabajar se encuentra declarado 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; slo se copia el ensamblado. A esto se le ha dado el nombre de implementacin 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 libreras; en caso de que lo sean, existe la posibilidad de utilizarlas en diferentes escenarios y aplicaciones, dado su carcter compartido (shared ). Tambin es posible que existan otros desarrolladores en la misma organizacin que desarrollen sus propias libreras. Aunque remota, existe la probabilidad de que dos desarrolladores distintos generen, para utilizar en una misma aplicacin, una librera compartida con el mismo nombre. De permitirlo .NET, se caera en la misma situacin catica de los DLL que tanto quisimos evitar en Windows DNA. Afortunadamente, en el caso de las libreras .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 libreras .NET, registrando para cada uno diferentes especificaciones, de entre las cuales destaca PublicKeyToken, que constituye un identificador nico del componente.

20

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

En el GAC se encuentran las referencias lgicas de los componentes que, junto con la referencia fsica que especificamos al momento de compilar, evita la utilizacin accidental de un recurso. Puede haber dos componentes compartidos del mismo nombre fsico, pero un programa sabr siempre cul es el que debe utilizar. Administrador de GAC. Existe una herramienta de .NET Framework, llamada gacutil. 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 eliminar uno previamente registrado.

Ejercicio 1.1
Anlisis de las entradas del Cach global para ensamblado (GAC, Global Assembly Cache)

Se utilizar el administrador de GAC para conocer cules son los componentes .NET disponibles. Esta prctica asume que se tiene instalado .NET 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 configuracin de .NET Framework 2.0. 2. En el panel de la izquierda haga clic en el nodo My Computer; en el panel de la derecha aparecer el vnculo Manage the Assembly Cache (Global Assembly Cache).

Captulo 1. Arquitectura de la plataforma .NET

21

3. Haga clic en el vnculo View List of Assemblies in the Assembly Cache. 4. Existe una columna llamada Locale, 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 Unique Identifier), para qu cree que sirva dicha clave?

6. Cierre el programa de configuracin de .NET Framework 2.0.

.NET PE (.NET Portable Executable) versus PE/COFF


Si tanto usted como la empresa en que trabaja se estn iniciando en la experiencia llamada .NET, es probable que desee conocer cules son las diferencias entre los ejecutables generados en versiones anteriores de Visual Basic 6.0 y los generados en .NET. Es muy probable que al tratar de implementar proyectos en .NET surjan cuestiones del porqu hay que instalar .NET Framework en las mquinas para poder ejecutar los programas .NET. Esto genera suspicacias y dudas: seguirn 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, pero no la versin de desarrollo, sino el ncleo del producto, que es gratuito e independiente de la instalacin que un equipo tenga, por lo que no modifica las aplicaciones existentes.

22

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Lo que s se modifica es el cargador de programas (program loader); es decir, la parte del sistema operativo que se encarga de reconocer a un programa ejecutable y de ejecutar las acciones. Archivo PE. Un ejecutable de Windows (Windows executable), sea EXE o DLL, debe poseer un formato llamado PE Format (Portable Executable Format), que es un derivado del Microsoft Common Object File Format (COFF). A los programas ejecutables, por cumplir con la especificacin PE, se les ha dado a llamar tambin Archivos PE. Tanto PE como COFF estn claramente especificados y disponibles pblicamente, de tal forma que todos los desarrolladores cuyas aplicaciones generen ejecutables puedan utilizarlos para incluir en ellas los elementos que permitirn a los programas generados ser reconocidos como tales. Cualquier compilador o aplicacin que desee generar ejecutables de Windows debe cumplir con la especificacin PE/COFF. Un programa ejecutable contiene dos secciones: la seccin de encabezados PE/COFF (PE/COFF Headers) y la seccin de imagen nativa del programa (Native Image Section). La seccin de encabezados PE/COFF indica al sistema operativo cmo est compuesto el programa y cmo debe ser ejecutado; la seccin de imagen nativa se encarga de contener al programa en s, as como los recursos que lo componen, usando para ello subsecciones bastante conocidas para los que han desarrollado compiladores, como lo son .data, .rdata, .rsrc, y .text. Archivo .NET PE. Un archivo PE de .NET es ms complejo pues contiene dos secciones ms: la seccin de encabezados CLR (CLR Header Section) y la seccin de datos CLR (CLR Data Section). El encabezado CLR almacena informacin que identifica al programa como ejecutable de .NET para que como tal sea tratado por el cargador de programas. Por otro lado, la seccin de datos CLR contiene metadatos y el cdigo 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 reconocidas (encabezado CLR y datos CLR), y no sabr qu hacer con ellas. Como no fueron reconocidas dichas secciones y el cdigo ejecutable de .NET no es cdigo nativo, el programa generar un error. Slo teniendo .NET Framework instalado ser posible reconocer las nuevas secciones del ejecutable, que ordenarn la compilacin JIT de la informacin contenida en datos CLR.

Tiempos de compilacin de CLR

Captulo 1. Arquitectura de la plataforma .NET

23

FIGURA 1.4 Diferencia de ejecutables .NET

Desensamblador de ensamblados. .NET Framework posee una herramienta de lnea de comando para desensamblar los archivos ejecutables, llamada ildasm.exe. Con ella es posible comprobar si un programa es o no .NET, mediante la ejecucin del siguiente comando:
ildasm/TEXT

NombreEjecutable/HEADER

Donde NombreEjecutable es el nombre del ejecutable a analizar. La especificacin /TEXT provoca que la salida sea a consola, y /HEADER provoca que aparezcan en el resultado todos los encabezados del ejecutable. Slo si las definiciones muestran que el programa posee encabezados CLR, el programa es .NET.

Ejercicio 1.2
Identificacin de diferencias en programas ejecutables, usando el desensamblador de .NET (ildasm.exe)

Desensamblar dos ejecutables para determinar cul de los dos es un ejecutable .NET. 1. Abra el directorio APVBNETVS\Cap01; se ser su directorio de trabajo. 2. En ese directorio hay dos programas: HolaMundoA.exe y HolaMundoB.exe. Los dos hacen lo mismo, pero slo uno de ellos es un .NET PE. 3. Ejecute el desensamblador de .NET Framework (ILDASM.EXE), que se encuentra en el directorio base de .NET (C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727). 4. Seleccione Inicio Todos los programas Microsoft .NET Framework SDK v2.0 SDK Command Prompt.

24

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

5. Vaya al directorio de trabajo. En la lnea 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 cul de los dos archivos no contiene un ejecutable .NET, dado que no puede ser desensamblado. 7. Edite el archivo b.txt y busque la seccin Metadata Version. Qu ensambles externos se mandan llamar desde este programa?

8. Cierre la sesin de lnea de comandos. FIN DEL EJERCICIO*

Compiladores JIT
CLR en tiempo de ejecucin. El ejecutable generado por los compiladores de .NET no est en cdigo nativo, y, por tanto, su ejecucin no implica que el equipo en el que es ejecutado realice alguna accin. 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 secciones 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 considerndolo 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 cdigo nativo, y procede a generar cdigo nativo a travs de compiladores que actan en tiempo de ejecucin, a los cuales se les llama compiladores Justo a tiempo (compilador JIT / Just In Time Compiler). Slo para aclarar el punto: los compiladores JIT trabajan sobre ensamblados, no sobre cdigo fuente.

Captulo 1. Arquitectura de la plataforma .NET

25

El compilador JIT evala el ensamblado, la disponibilidad de los types utilizados por el ensamblado y los recursos disponibles del sistema en que se est ejecutando el ensamblado. A partir de ese anlisis, genera el cdigo nativo aplicable al equipo y procede a ejecutarlo. Los compiladores JIT son los que realizan la fase de sntesis de la compilacin, transformando el cdigo intermedio que se encuentra en la seccin de datos CLR en su equivalente a cdigo nativo de la mquina, considerando la plataforma de la misma y la disponibilidad de recursos. NOTA
El hecho de que se realice la compilacin JIT la primera vez que se ejecuta un programa ejecutable en .NET, hace que el proceso sea ms lento. Algunos programadores se decepcionan con .NET, pues argumentan que es ms lento que las plataformas de desarrollo anteriores; quiz sea ms lento la primera vez, pero la segunda vez que lo ejecute, el CLR detecta que ya existe cdigo nativo creado, por lo que no procede a la compilacin JIT, y por tanto se puede ver la velocidad real a la que el programa se ejecutar.

Gracias al CLR los programas ejecutables de .NET son altamente portables. Quien determina la diferencia del cdigo 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 distintos, uno con mucha memoria y varios procesadores, y otro con poca memoria y un solo procesador, el CLR a travs del compilador JIT generar el cdigo nativo apropiado para tomar ventaja de todos los recursos disponibles. Vea las posibilidades: se puede tener una versin de .NET Framework en un equipo basado en UNIX, otro en Linux y una versin compacta de .NET Framework en un telfono celular o en un PDA como la Palm Pilot. El mismo ensamblado puede ser ejecutado en todas las plataformas, y es el CLR a travs del compilador JIT el que genera el cdigo nativo y la funcionalidad disponible para cada una de las plataformas mencionadas. Poco importa tambin en qu lenguaje estaba desarrollado el cdigo fuente que dio origen al ejecutable: despus de compilarlo, todo es IL.

NOTA
Resulta adecuado el nombre que se le da al ejecutable que generan los compiladores de .NET, cdigo intermedio (IL), ya que lo generado es un cdigo entre el cdigo fuente y el cdigo nativo. Los programadores de Java encontrarn la semejanza rpidamente: el IL sera como el Bytecode, mientras que el CLR sera como el Java Virtual Machine. Slo un lenguaje de .NET permite (por el momento) la compilacin directa a casi cdigo nativo: C++.

26

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

No tener instalado el .NET Framework en una mquina tambin afecta al momento de ejecucin, ya que el equipo no sabr cmo interpretar el ejecutable, adems de no ser posible transformar el IL en cdigo nativo, por la ausencia de CLR. En ese contexto y dicho de otra forma, su programa nunca podra producir a partir del ensamblado la secuencia de nmeros binarios que provoquen una respuesta en su computadora. NOTA
En octubre de 2000, Microsoft propuso a la ECMA (Asociacin Europea de Fabricantes de Computadoras, European Computer Manufacturers Association), encargada de la estandarizacin de sistemas de informacin y comunicacin, un subconjunto funcional del CLR, denominado CLI (Infraestructura de lenguaje comn, Common Language Infraestructure) para que fuera aprobado como estndar de desarrollo junto con el lenguaje C#. En diciembre de 2001 se ratific por ECMA (ECMA-335), por lo cual cualquier plataforma de sistema operativo que as lo desee podr disponer de su propio subconjunto de CLR, haciendo posible que las aplicaciones desarrolladas en .NET puedan ser ejecutadas en dichas plataformas sin modificar el cdigo.

Microsoft ha puesto a disposicin de todos un producto base denominado .NET Framework Redistributable Package en su sitio Web corporativo. Al instalarlo en su equipo ya es posible ejecutar aplicaciones desarrolladas en plataforma .NET. Tambin lo est incluyendo en los Service Pack de sus sistemas operativos, y seguramente todos los sistemas operativos con versiones OEM lo incluirn. FIGURA 1.5 Proceso de ejecucin .NET
Inicio

Se solicita ejecucin de ensamblado

Se busca en Assembly Cache una imagen nativa del Assembly

No Compilador JIT realiza la fase de sntesis de compilacin

Se encontr imagen?

Si

No

Es imagen vigente?

Si Se enva imagen nativa a Assembly Cache

Se carga imagen nativa en RAM

Se ejecuta la imagen nativa

Fin

Captulo 1. Arquitectura de la plataforma .NET

27

Ensamblador de .NET. Existen tambin herramientas de .NET Framework que permiten realizar la fase de sntesis de la compilacin, adems del compilador JIT. El programa ilasm.exe es el ensamblador de .NET Framework; su funcin consiste en transformar un programa en cdigo intermedio (MSIL) en archivo .NET PE. Para aquellos que deseen desarrollar un lenguaje .NET, esta herramienta es muy importante. Slo tendrn que preocuparse por generar un compilador que traduzca el cdigo fuente a MSIL; es decir, que se encargue de realizar la fase de anlisis. La fase de sntesis podr ser desarrollada por el ensamblador de .NET. Tambin es posible desensamblar un archivo .NET PE, a travs de la herramienta de .NET Framework llamada ildasm.exe. Tanto ilasm.exe como ildasm.exe estn disponibles desde la lnea de comandos del sistema operativo.

Impacto de .NET Framework en los sistemas operativos


Los sistemas operativos son, a fin de cuentas, los que reciben las instrucciones de bajo nivel para producir los efectos buscados en los programas, por lo cual no pueden sustraerse a los cambios que .NET requiere para funcionar.

Modificacin al cargador de ejecutables


Ya se indic que los ejecutables de .NET no son iguales a los ejecutables PE/COFF; el sistema 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. Despus 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 libreras 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 libreras de .NET no se registran de alguna forma.

28

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

.NET sigue teniendo entradas en el Registro de Windows, ya que es el mecanismo optimizado que los sistemas operativos Windows entienden mejor; sin embargo, los desarrollos en .NET que usted realice no estarn basados en componentes, sino en ensamblados. De esa forma, el ncleo de .NET puede mantener manejo binario y registrado en los equipos locales a travs de componentes, mientras que las aplicaciones que usted desarrolle en .NET ya no sern basadas en componentes, y se comunicarn a travs de protocolos abiertos; en cierta forma, se aprovecha lo mejor de la tecnologa disponible. A medida que los sistemas operativos comiencen a reconocer elementos .NET, la tecnologa basada en componentes desaparecer, aunque eso puede llevar tiempo.

Prerrequisitos del sistema operativo


El sistema operativo debe disponer de un mnimo de actualizacin; por ejemplo, se asume que cuenta con una versin mnima de Internet Explorer, que tiene una amplia integracin con los sistemas operativos Windows. Tambin se requiere una versin 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 coordinacin con el CLR, se encargan del manejo inteligente de los componentes de una aplicacin. La capa de presentacin y la de reglas de negocio que propone DNA pueden modificarse drsticamente, ya que el procesamiento y la interfaz de usuario pueden dividirse la carga de trabajo entre servidor y cliente de manera flexible. Se podrn generar programas portables (IL) que facilitarn el desarrollo de aplicaciones empresariales distribuidas en diversas plataformas de sistema operativo con slo instalar el CLI en ellas. El desarrollo de aplicaciones nunca haba sido tan diverso: se pueden desarrollar aplicaciones de escritorio y Cliente/Servidor a travs de formularios de Windows (Windows Forms). Tambin es posible desarrollar aplicaciones de consola (Console Applications), y

Captulo 1. Arquitectura de la plataforma .NET

29

aplicaciones Web (Web Forms) que tendrn una interfaz ms rica y funcional, adems de ser ms fciles de elaborar para el desarrollador porque tendrn una lgica ms depurada. Podrn desarrollarse servicios para los nuevos sistemas operativos de Windows, incluyendo las versiones de 64 bits, con lo que se puede fortalecer la plataforma BackEnd. Con la introduccin 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 fcil como enlazarnos a una liga en Internet; no se requerirn inversiones fuertes por compra de software, sino el pago bajo y peridico por el acceso a un servicio. La piratera se reducir, como efecto secundario. Los equipos de desarrolladores que estaban divididos por su especialidad en determinadas herramientas de desarrollo podrn colaborar de manera coordinada. Los programadores de C++, C#, Visual Basic y Java podrn contribuir con partes de una misma solucin, 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 ms le favorezca. .NET coexiste con aplicaciones pasadas. Toda la inversin realizada en desarrollo de aplicaciones basadas en COM sigue siendo til; se puede convertir un componente COM en uno .NET, y viceversa. Se desarrollar computacin mvil como nunca antes, como consecuencia de las facilidades proporcionadas por el CLR, que gestionar por nosotros las caractersticas de cada dispositivo.

En el captulo siguiente podr instalar todo lo que necesita para desarrollar en plataforma .NET, y comprobar a travs de aplicaciones de consola gran parte de lo que se explica en este captulo. NOTA
Si conoce la estructura de un lenguaje .NET y el uso de las clases de .NET Framework, ya puede desarrollar aplicaciones. Visual Studio no es necesario para desarrollar. Por supuesto, ayuda enormemente, pero en caso de que no disponga de dicho software, puede editar el cdigo en cualquier editor de textos, como el Bloc de Notas (NotePad.exe), compilar su programa y ejecutarlo.

Convivencia de .NET y COM


Seguramente las organizaciones tienen desarrollos basados en componentes COM; cambiar 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 herramientas de .NET Framework: el exportador de libreras y el importador de libreras.

30

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

El exportador de libreras (Type Library Exporter) est representado por el programa tlbexp.exe, que se encarga de generar, a partir de un ensamblado, una librera con la cual los componentes COM puedan interactuar. El importador de libreras (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 representado por el programa tlbimp.exe.

Captulo 1. Arquitectura de la plataforma .NET

31

MAPA

MENTAL DEL CAPTULO

32

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

TERMINOLOGA
Administracin de la memoria, 11 Administrado, 8, 11, 18 Administrador de GAC, 20 Application Programming Interface, 15 Archivo(s) .NET PE, 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 Clase, 12 CLR, 7, 16 Data Section, 22 Header Section, 22 CLS, 7, 9 Cdigo, 17 administrado, 18 fuente, 17 COFF, 22 Common Language Runtime, 7, 16 Specification (CLS), 7, 9 Compilacin, 17 en dos fases, 16 Compilador(es), 17 JIT, 7, 24 Copy Development, 6, 19 Desensamblador de ensamblados, 23 DLL, 12 DNA, Windows, 28 Ejecutable, 17 de Windows, 22 Ensamblado, 7, 11, 17 Espacios de nombres, 12-3 Especificacin comn para lenguajes, 7, 9 Eventos, 12 Exportador de libreras, 30 GAC, 19 gacutil.exe, 20 Garbage collection, 11 Global Assembly Cache, 19 IIS, 7 IL, 18 ilasm.exe, 27 ildasm.exe, 23, 27 Implementacin por copia, 19 Importador de libreras, 30 Instanciacin (de objetos), 12, 13 Instrucciones declarativas de espacios de nombre, 13 Interfaces, 12 Intermediate Language, 18 Intermedio, 18 Internet Information Server (IIS), 7 Jerarquas de clases superiores, 14 JIT, compiladores, 7, 24 Just in Time Compilers, 7, 24 Lenguaje(s) administrados, 11 .NET, 10 Libreras de vnculos dinmicos (DLL), 12 Managed, 8, 11, 18 code, 18 languages, 11 Manifiesto, 19 Memory management, 11 Metadatos, 17 Mtodos, 12 Microsoft Common Object File Format (COFF), 22 Intermediate Language (MSIL), 18 Motor comn de ejecucin (CLR), 7, 16 MSIL, 18 Multilenguaje, ambiente, 9 Namespaces, 12-3 Native Image Section, 22 .NET lenguaje, 10 proceso de ejecucin, 26 .NET Framework, 7 Redistributable Package, 26 .NET PE (Portable Executable), 21 archivo, 22 Objeto, 12 PE /COFF Headers, 22 archivos, 22 format, 22 Plataforma .NET, 5 Portable Executable Format, 22 Proceso de ejecucin .NET, 26 Program loader, 22 Propiedades, 12 Public Key Token, 19 Recoleccin de basura, 11

Captulo 1. Arquitectura de la plataforma .NET

33

Referencia fsica, 13 lgica, 13 y declaracin de libreras, 13 Runtime type checking, 11 Seccin de datos CLR, 22 de encabezados CLR, 22

PE/COFF, 22 de imagen nativa del programa, 22 Security support, 11 Servicios Web XML, 29 Soporte de seguridad, 11 Source code, 17 Tiempo

de compilacin, 16 de ejecucin, 16 Tipos de valor, 12 tlbexp.exe, 30 tlbimp.exe, 30 Type Library Exporter, 30 Importer, 30 Types, 12, 19 safe code, 13

vbc.exe, 17 Verificacin de tipos en tiempo de ejecucin, 11 Windows Application Services, 7, 11 DNA, 28 executable, 22 XML Web Service, 29

PREGUNTAS
1.1 Cules son las capas principales de la plataforma .NET y qu funcin cumple cada una? 1.2 Cmo es el proceso de compilacin de las aplicaciones desarrolladas en .NET y cules son los momentos en los que se desarrolla? 1.3 Cules son las diferencias entre los ejecutables de .NET y los ejecutables Windows comunes? 1.4 Cules 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?

34

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Es el conjunto de reglas mnimas que debe cumplir un lenguaje para ser considerado lenguaje .NET: a) .NET Framework b) CLR c) CLS 2. Proporcionan los medios de comunicacin de datos entre los lenguajes y las herramientas de desarrollo, 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 informacin relativa al programa y su entorno, incluida dentro del mismo programa: a) Metadatos b) Ensamblado c) Cdigo administrado 5. Es el compilador que se encarga de la fase de sntesis de compilacin, en el caso de programas .NET: a) .NET PE b) Compiladores JIT c) csc

Parte 2: Coloque en la lnea 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 programas .NET PE. 7. 8. Las clases de .NET Framework estn disponibles para todos los lenguajes de .NET. Es imposible que los componentes compartidos en .NET entren en conflicto, gracias al GAC. 9. 10. Los ensamblados de extensin EXE son cdigo mquina ejecutable. .NET Framework no est basado en COM, y no convive con dicha tecnologa.

CAPTULO

.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 aplicaciones de consola, Windows y Web con el mismo lenguaje de programacin. 1. Aprender a decidir qu producto instalar .NET Framework 2.0 Redistributable Package, .NET Framework 2.0 SDK o Visual Studio 2005 considerando sus necesidades de uso y desarrollo. 2. Conocer los requerimientos de instalacin de los productos de .NET. 3. Aprender qu tipos de aplicaciones es posible desarrollar en .NET y los requisitos para hacerlo.

35

36

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Determinacin de la plataforma .NET requerida . . . . . . . . . . . . . . . . . . . . . . Propsito de usar .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de aplicaciones posibles en .NET . . . . . . . . . . . . . . . . . . . . . . . . . Interaccin con bases de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alcance operativo de la plataforma . . . . . . . . . . . . . . . . . . . . . . . . . . . Tecnologa de bus y procesador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Productos de plataforma .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .NET Framework 2.0 Redistributable Package . . . . . . . . . . . . . . . . . . . . .NET Framework 2.0 SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Visual Studio 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .NET Compact Framework 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Visual Studio 2005 Express . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seleccin del producto adecuado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Consideraciones respecto del idioma de los productos . . . . . . . . . . . . . Comprobacin del funcionamiento de la plataforma .NET . . . . . . . . . Determinacin de los productos .NET a instalar en un escenario de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Desarrollo de aplicaciones en .NET usando SDK . . . . . . . . . . . . . . . . . . . . . . Compilacin de programas desde lnea de comandos . . . . . . . . . . . . . Aplicaciones de consola (Console Applications) . . . . . . . . . . . . . . . . . . Aplicaciones Windows (Windows Applications) . . . . . . . . . . . . . . . . . . Aplicaciones Web (Web Applications) . . . . . . . . . . . . . . . . . . . . . . . . . . Desarrollo y compilacin de un programa desde la lnea de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tecnologas cubiertas en este libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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

Captulo 2. .NET como multiplataforma de desarrollo

37

El captulo anterior incluy una gran cantidad de trminos nuevos relacionados con el nuevo 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 plataforma de desarrollo .NET a travs de programas sencillos escritos en Visual Basic.NET. Este captulo es particularmente importante para quienes tienen bajo su responsabilidad decidir la migracin a .NET de entornos de desarrollo anteriores, pues se aclaran cules 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 esta 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 diferentes tipos de dispositivos.

Determinacin de la plataforma .NET requerida


La primera pregunta a plantear es: Para qu queremos tener la plataforma .NET en nuestros equipos? .NET cubre una gama sorprendente de aplicaciones. El producto .NET a instalar, los requerimientos de hardware y software correspondientes, y el precio a pagar dependen de lo que se desee hacer.

Propsito de usar .NET


Hay dos propsitos principales que determinan las primeras decisiones: 1. Propsito de ejecucin. Se refiere a slo ejecutar aplicaciones .NET. 2. Propsito de desarrollo. Se aplica cuando se desea ejecutar y desarrollar aplicaciones .NET.

Tipos de aplicaciones posibles en .NET


Si el objetivo es el desarrollo, ser necesario determinar el tipo especfico. Puede tratarse de alguna de las siguientes aplicaciones:

38

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

1. Aplicaciones de consola ( Console Applications). Son aquellas aplicaciones textuales que reciben y muestran datos en el intrprete de comandos. 2. Aplicaciones Windows (Windows Applications/Windows Forms). Son las aplicaciones que tienen interfaz grfica basada en Windows. 3. Aplicaciones Web ( Web Applications/Web Forms / XML Web Services). Son aquellas que utilizan para su ejecucin un navegador Web como Internet Explorer. La interfaz Web puede tener interaccin con el usuario en un modelo peticin-respuesta, basado en Cliente/Servidor. 4. Servicios Web XML (XML Web Services). Son mdulos de funcionalidad distribuida de aplicacin a aplicacin que utilizan como transporte protocolos estndares de Internet, como HTTP y SOAP. 5. Aplicaciones de cmputo mvil ( Mobile Applications). Son aplicaciones que se ejecutarn en dispositivos de cmputo mvil, como los PDA (Personal Data Assistant) y otros dispositivos inteligentes (smart devices). Funcionan en coordinacin con .NET Compact Framework, y son codificados mediante lenguajes de marcacin.

Interaccin con bases de datos


Considerando el uso de bases de datos que tendrn nuestras aplicaciones, la clasificacin es la siguiente: 1. Aplicaciones sin bases de datos. Son aquellas que no utilizarn bases de datos. No realizan conexin con ningn 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 especfica. 3. Aplicaciones con acceso a base de datos soportadas de manera no nativa. Son aquellas aplicaciones que tienen acceso a bases de datos a travs de proveedores de datos genricos ODBC u OLEDB, que no estn optimizados para el manejo de bases de datos especficas.

Alcance operativo de la plataforma


De acuerdo con el alcance operativo de la plataforma, la clasificacin 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 Access, y de orientacin monousuario.

Captulo 2. .NET como multiplataforma de desarrollo

39

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 orientacin multiusuario.

Tecnologa de bus y procesador


Considerando la tecnologa de CPU (procesador y bus) que se va a emplear: 1. 32 bits (x86). Cuando el equipo de desarrollo a utilizar ser un equipo basado en plataformas x86 a 32 bits. 2. 64 bits (x64). Es cuando el equipo de produccin a utilizar ser un equipo basado en plataformas x64 a 64 bits. Considerando estas caractersticas, es posible determinar la plataforma .NET adecuada.

Productos de plataforma .NET


Para cada combinacin 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

40

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

ii. Visual C# 2005 Express Edition iii. 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 distribucin .NET. .NET Framework 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 trminos generales, SDK habilita en los equipos el motor de ejecucin de la plataforma (CLR) y la biblioteca de clases base (BCL). .NET Framework 2.0 Redistributable Package se recomienda para ambientes de produccin, tanto de aplicaciones de escritorio como Web. Un ambiente de produccin se compone de un equipo, generalmente un servidor, en donde se ejecutan las aplicaciones liberadas de forma definitiva en operacin real. Un ambiente de produccin no debe ser ambiente de desarrollo, para garantizar el mximo de disponibilidad de las aplicaciones para los usuarios. .NET Framework 2.0 Redistributable Package provee a los equipos el motor de ejecucin (CLR) y la biblioteca de clases base (BCL), necesarios para ejecutar aplicaciones. Este producto es indispensable para la ejecucin de aplicaciones desarrolladas en .NET, pero con l no se podrn 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 desarrollos Web (Web Applications y Web Services), se deber instalar slo .NET Framework 2.0 Redistributable Package en el servidor, dado que es ah donde se requiere el motor de ejecucin y la biblioteca de clases. Requerimientos. Para conocer los requerimientos de hardware y software de este producto, lo ideal es consultar la pgina Web de Microsoft, que se mantiene actualizada conforme se liberan productos. Para disponer de la versin 2.0 de .NET Framework Redistributable Package en su versin para 32 bits, deber descargar de la Web el archivo dotnetfx.exe. Lo podr instalar en Windows 2000 con Service Pack 3 o superior; Windows 98; Windows 98 Second Edition; Windows ME; Windows Server 2003 y Windows XP con Service Pack 2 o superior. sta es la versin que se recomienda para los equipos de produccin (operacin real). En produccin generalmente se tienen servidores; se recomienda en esos casos contar con Microsoft Data Access Components 2.8 o superior. Tambin se recomienda Internet Informa-

Captulo 2. .NET como multiplataforma de desarrollo

41

tion Services (IIS) version 5.0 o posterior. Para proporcionar las capacidades de ASP.NET se sugiere IIS con los ltimos parches de seguridad, antes de instalar .NET Framework. ASP.NET slo es aceptado por las siguientes plataformas: Microsoft Windows 2000 Professional (Service Pack 3 o superior recomendado), Microsoft Windows 2000 Server (Service Pack 3 o superior recomendado), Microsoft Windows XP Professional y Microsoft Windows Server 2003. En su versin para 64 bits, se deber descargar el archivo NetFx64.exe e instalar en Windows 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 sern mayores.

.NET Framework 2.0 SDK


Kit de Desarrollo de Software de .NET Framework. .NET Framework Software Development Kit. Es el producto de plataforma .NET que se debe instalar si adems de ejecutar aplicaciones se desea desarrollarlas. .NET Framework 2.0 SDK provee la funcionalidad de .NET Framework 2.0 Redistributable Package, pero adems cuenta con todas las herramientas para escribir, construir, probar e implementar aplicaciones. .NET Framework contiene documentacin, ejemplos y herramientas de lnea 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 versin igual o posterior, a fin de garantizar que todo funcionar. Por lo general, las versiones ms nuevas de .NET Framework Redistributable Package ejecutarn sin problemas los programas desarrollados con .NET Framework SDK de versiones anteriores. Slo 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 aplicaciones de escritorio como Web. Un ambiente de desarrollo se compone de un equipo que generalmente emula a las capacidades de los equipos utilizados en produccin, en donde se codifican, disean y prueban las aplicaciones en desarrollo. Recuerde: Un ambiente de desarrollo no debe ser utilizado como ambiente de produccin, para garantizar el mximo de disponibilidad de las aplicaciones para los usuarios. .NET Framework 2.0 SDK debe utilizarse cuando se pretende desarrollar y ejecutar programas en .NET, sin generar costos por la adquisicin 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-

42

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

sarrollo con SDK es mucho mayor que utilizando herramientas grficas de desarrollo. Opte por SDK slo si no quiere gastar y dispone de mucho tiempo. Requerimientos. Para disponer de la versin 2.0 de .NET Framework SDK, en su versin 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 Windows XP con Service Pack 2 o posterior. En su versin para 64 bits, se deber descargar el archivo setup.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 archivo a descargar tiene el mismo nombre, debe descargarse la versin adecuada a la plataforma operativa. Es necesaria la instalacin de .NET Framework 2.0 Redistributable Package, para poder instalar .NET Framework 2.0 SDK. NOTA
Por el momento .NET Framework SDK es gratuito y probablemente siga as. La razn es muy sencilla: por sus caractersticas particulares, la competencia directa de la plataforma .NET es Java. Para desarrollar en Java, desde hace mucho tiempo usted puede descargar el JDK (Java Development Kit) de forma gratuita; por tanto, ponerle precio a .NET Framework SDK sera darle ventaja a la competencia, por el momento Microsoft no puede darse ese lujo.

Visual Studio 2005


FIGURA 2.1 Visual Studio 2005 IDE

Captulo 2. .NET como multiplataforma de desarrollo

43

Entorno Integrado de Desarrollo .NET. IDE / Integrated Development Environment. Es el producto de plataforma .NET que permite desarrollar en un ambiente grfico e integrado totalmente a .NET Framework; Visual Studio 2005 es la herramienta de desarrollo asistido ms sofisticada de la historia: incluye editores con ayuda contextual, diseadores grficos de aplicaciones, asistentes de desarrollo, generadores de cdigo, etctera. Visual Studio 2005 instala automticamente .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 aplicacin admitida por .NET, incluyendo las aplicaciones de computacin mvil. Se puede elegir, desde la misma plataforma, mltiples lenguajes .NET para desarrollar mdulos que coexistan dentro de una misma aplicacin. Adems, Visual Studio 2005 se integra con SQL Server 2005 para facilitar el acceso de datos desde las aplicaciones .NET que se desarrollan. La utilizacin de Visual Studio 2005 se recomienda cuando se dispone de un equipo robusto para el desarrollo, cuando se tiene la necesidad de desarrollar de forma rpida y efectiva varios tipos de aplicaciones, cuando existe la posibilidad de interaccin multi-lenguaje para el desarrollo de aplicaciones profesionales con acceso a recursos de bases de datos. La desventaja es el costo de la herramienta (el caso de desarrolladores profesionales, se justifica). Existen varias versiones de Visual Studio 2005. La ms elemental es la Standard Edition, que est orientada a los desarrolladores individuales profesionales; el kit Tools for the Microsoft Office System es la versin de Visual Studio 2005 para la integracin de aplicaciones con la suite Microsoft Office; la Professional Edition permite los desarrollos individuales profesionales de alto desempeo, con funcionamiento multicapa; el ms especializado de los productos es Team System, que incluye herramientas para el desarrollo de aplicaciones de alto desempeo. sta es ideal para equipos de desarrollo profesionales. Obviamente, entre ms especializada la edicin, mayor es su costo. Requerimientos de Visual Studio 2005. Si tiene la versin 2005 de Visual Studio Standard Edition, que fue la que utilizamos para este libro, deber disponer de 2 GB de espacio en el disco duro, lo cual es un requerimiento importante. Se requiere tener instalado el MDAC 9 o posterior, bsicamente 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 versin profesional de Windows 2000 y XP, ya que son los que proveen IIS. Se debe contar, adems, con Internet Explorer 6.0 o posterior.

44

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Para otras versiones de Visual Studio 2005, consulte las especificaciones tcnicas en el sitio de Microsoft.

> Lo nuevo
En Visual Studio 2005 se tienen varias configuraciones predefinidas. Al iniciar por primera vez el uso de la herramienta se solicita el tipo de configuracin que el desarrollador prefiere utilizar. En caso de este libro seleccionamos las preferencias para un desarrollador en Visual Studio (General Development Settings). Esto determina las herramientas activas y visibles por omisin, las teclas de atajo y la distribucin de los mens. Todas las modificaciones que hagamos pueden ser guardadas a travs de la opcin Tools Import and Export Settings. En otras palabras, si tenemos que desarrollar en un equipo distinto al que utilizamos regularmente, podemos llevarnos la configuracin 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 funciones 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 cmputo, desde PDA hasta telfonos celulares. Por su parte, los controles de computacin mvil atienden a todo tipo de dispositivos que tienen capacidad de enlazarse a una pgina en Internet, mientras que .NET Compact Framework se encarga de aquellos dispositivos que poseen sus caractersticas de operacin independientes de una conexin a Internet. .NET Compact Framework 2.0 debe instalarse en aquellos dispositivos inteligentes en donde se pretendan ejecutar aplicaciones .NET; es muy similar en concepto a .NET Redistributable Package, con las limitaciones obvias que se aplican a los dispositivos mviles, pues instala versiones reducidas de CLR y de BCL aplicables a los ambientes de cmputo mvil. En s, .NET Compact Framework es un subconjunto de .NET Framework; consiste en una librera de clases base, adems de libreras especficas para dispositivos mviles. .NET Compact Framework ejecuta una versin avanzada del compilador JIT que forma parte de un depurado CLR capaz de manejar eficientemente la escasez de recursos de los dispositivos mviles, cuidando el espacio de memoria y el consumo de batera. Visual Studio 2005 y .NET Framework 2.0 SDK contienen los elementos de .NET Compact Framework, para que el desarrollador pueda producir aplicaciones de cmputo mvil.

Captulo 2. .NET como multiplataforma de desarrollo

45

Los dispositivos que han de ejecutar aplicaciones basadas en el .NET Compact Framework deben aceptar el .NET Compact Framework runtime (Motor de ejecucin de .NET Compact Framework). El motor de ejecucin requiere como mnimo Windows CE .NET o Windows Mobile 2003 software for Pocket PCs. Los dispositivos debern 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 tecnologas .NET en un ambiente grfico, Microsoft ha liberado lo que denomina versiones express. Las versiones express son subconjuntos de las herramientas de desarrollo grfico para plataforma .NET, especficamente Visual Studio 2005. Las versiones express se orientan a tipos de desarrollo y lenguajes utilizados; es decir, se puede disponer de productos para desarrollo Web o para desarrollo Windows, pero no ambas. Tambin se puede optar por un lenguaje: Visual Basic.NET, Visual C#, Managed C++ o Visual J#, pero no de todos de manera 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 Visual Studio 2005. Dentro de las ventajas de las versiones express es que son gratuitas el primer ao, exigen menos recursos que Visual Studio 2005 y permiten experimentar el ambiente grfico de Visual Studio 2005 sin hacer una inversin inicial. Ciertamente, las versiones express no se recomiendan para ambientes profesionales de desarrollo dadas sus limitaciones.

Seleccin del producto adecuado


La versin 2.0/2005 de los productos que componen la tecnologa Microsoft .NET pueden seleccionarse atendiendo los siguientes parmetros:

46

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

FIGURA 2.2 Seleccin de producto

Consideraciones respecto al idioma de los productos


Algunos recomiendan que instale los productos en su idioma nativo, es decir, el ingls, ya que contar con el soporte ms actual, correccin de errores, ayuda y documentos tcnicos actualizados todo el tiempo. El resto de los lenguajes siempre estarn rezagados. Aunque Microsoft no es ajeno a la globalizacin y progresivamente se desarrollan los productos en diversos idiomas, nuestra recomendacin es instalar los productos en ingls, a fin de que cuente con lo ms reciente todo el tiempo. Como desarrollador, seguramente tendr que consultar foros en Internet, as como MSDN, en ingls. Entre ms 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 instalacin 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 instalacin de los prerrequisitos reemplace elementos del sistema operativo. Si se mezclan idiomas es probable que comience a ver las opciones de los mens 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 ingls. De esa forma tanto el sistema operativo como Visual Studio 2005 estarn en ingls, lo que garantiza la mxima actualizacin de herramientas, service packs, parches de seguridad, entre otros.

Comprobacin del funcionamiento de la plataforma .NET


Es sencillo comprobar la instalacin, tanto de Visual Studio 2005 como de .NET Framework 2.0 SDK, ya que ambos agregan entradas al men principal de Windows.

Captulo 2. .NET como multiplataforma de desarrollo

47

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 software que requiere para trabajar. Se trabajar desde lnea de comandos para mejorar el entendimiento de la plataforma; posteriormente se trabajar con Visual Studio 2005 para mayor rapidez. Se debe tener instalado en su equipo Microsoft .NET Framework 2.0 SDK y adems Visual Studio 2005. El uso de una u otra plataforma se determinar por la didctica del tema que se est tratando.

Ejercicio 2.1
Determinacin 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:

Las aplicaciones de una empresa se encuentran en una distribucin multicapa, de la siguiente 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

48

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

sobre Windows Server 2003, Datacenter x64 Edition. Otro de los servidores es de aplicaciones y hospeda todos los objetos de lgica de negocio, as como las aplicaciones de escritorio 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 Operaciones), que proporciona todo el control de los procesos de produccin. Por lo complejo de las interfases, se decidi que fuera una aplicacin Windows Forms. La otra aplicacin importante es SICOM (Sistema de Comercializacin), que proporciona informacin y pronsticos de ventas, as como informacin relevante para la administracin financiera del negocio. Como la informacin puede ser consultada tanto dentro como fuera de la empresa, se decidi que fuera un desarrollo Web. Esta aplicacin est desarrollndose 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 desarrollar con mayor calidad y potencia. Por el momento slo tres usuarios utilizan SIO. Por otro lado, dos personas utilizan SICOM; uno de ellos es el director general, que puede enlazarse desde su equipo, cuando est 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 mantenimiento de SIO, y otro que se ocupa del desarrollo y mantenimiento de SICOM. Los tiempos de desarrollo asignados son muy estrechos, pues SIO es crtica y compleja, mientras que SICOM es un poco ms sencilla, y como se dijo, es prueba de concepto. Qu cantidad de cada producto es necesaria para dar soporte a la operacin de la empresa? Cuide el mayor aprovechamiento de los recursos de cmputo y el menor costo. Producto .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 EJERCICIO* Cantidad

Captulo 2. .NET como multiplataforma de desarrollo

49

Desarrollo de aplicaciones en .NET usando SDK


Compilacin de programas desde lnea de comandos
En esta seccin se compilarn programas desde lnea de comandos, por lo que es importante saber cmo hacerlo. La forma ms sencilla de compilar un programa de Visual Basic.NET es la siguiente:
vbc NombreCdigoFuente.vb

El programa vbc.exe es el compilador de Visual Basic.NET. Al someter a compilacin al programa NombreCdigoFuente.vb, se generar de inmediato un ensamblado de nombre NombreCdigoFuente.exe. Observe cmo es necesario especificar la extensin del archivo que contiene el cdigo 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 recurrimos a la especificacin /r:. Suponga que un programa requiere clases que se encuentran en una librera de nombre System.dll. La sintaxis sera la siguiente:
vbc NombreCdigoFuente.vb /r:System.dll

Si se requieren varias libreras, podemos separarlas por comas (sin dejar espacio entre una y otra) o repetir la especificacin /r:. Si adems de System.dll, requerimos System. Drawing.dll, sta sera la sintaxis:
vbc NombreCdigoFuente.vb /r:System.dll,System.Drawing.dll o vbc NombreCdigoFuente.vb /r:System.dll /r:System.Drawing.dll

Las diferentes especificaciones que se utilizan para compilar archivos en Visual Basic.NET se irn revisando conforme los ejemplos lo vayan requiriendo.

Aplicaciones de consola (Console Applications)


Las aplicaciones de consola son aquellas aplicaciones textuales que reciben y muestran datos en el intrprete de comandos.

50

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

La secuencia de desarrollo de este tipo de aplicaciones es la siguiente: 1. Se abre una sesin de comando (MS-DOS). 2. Con un editor de texto se edita el programa (con extensin vb). 3. Se compila el programa sin olvidar establecer las referencias con las libreras de .NET que se requieren para la funcionalidad propuesta por el mismo. 4. Se ejecuta el programa.

Aplicaciones Windows (Windows Applications)


Son aquellas que tienen interfaz grfica basada en Windows. La secuencia de desarrollo de este tipo de aplicaciones es la siguiente: 1. Se abre una sesin de comando (MS-DOS). 2. Con un editor de texto se edita el programa (con extensin vb). 3. Se compila el programa, sin olvidar establecer las referencias con las libreras de .NET requerida para la funcionalidad propuesta por el mismo. Son indispensables, al menos, las libreras System.dll, System.Drawing.dll y System.Windows.Forms.dll. 4. Se ejecuta el programa.

Aplicaciones Web (Web Applications)


Son aquellas aplicaciones que utilizan para su ejecucin 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 combinacin con el motor de Servicios Web XML de Microsoft; es decir, el Internet Information Services (IIS), que debe estar instalado en la mquina donde se alojar el programa. Para comprobar que se tiene instalado IIS, 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 http://localhost si se trata de nuestro equipo; si no es nuestro equipo el que posee IIS, deber sustituirse localhost por el nombre del equipo que lo posea. Si aparece contenido en el navegador, es que est funcionando IIS.

Captulo 2. .NET como multiplataforma de desarrollo

51

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 Servicios Web XML. Dentro del directorio de Servicios Web XML se encuentra el directorio raz de aplicaciones Web, llamado \inetpub\wwwroot; todo lo que se encuentre en dicho directorio o en algn directorio contenido en l ser tratado como sitio Web, y, por tanto, .NET Framework aplicar los procesos de compilacin y ejecucin de aplicaciones Web de manera automtica. 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 sesin de comando (MS-DOS). 2. Con un editor de texto, se edita el programa (extensin aspx). 3. Se copia el archivo a un directorio que de manera fsica o virtual se encuentre dentro del directorio de Servicios Web. 4. Se ejecuta el programa abrindolo 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 ejecucin. Aprenda Visual Basic.NET para todos los tipos de aplicaciones.

Ejercicio 2.2
Desarrollo y compilacin de un programa desde la lnea 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).

52

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Codificacin de HolaMundo.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 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

Captulo 2. .NET como multiplataforma de desarrollo

53

2. Seleccione Inicio Todos los programas - Microsoft .NET Framework SDK v2.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 lnea de comandos.


vbc HolaMundo.vb

5. Ejecute el programa.
HolaMundo

6. Si el programa funciona, habr comprobado que puede desarrollar aplicaciones Windows sin contar con una herramienta de desarrollo grfico. FIN DEL EJERCICIO *

Tecnologas cubiertas en este libro


Como ya aprendi, existen mltiples opciones de productos en tecnologa .NET, y este libro tiene que decidirse por una configuracin que permita demostrar todos los tpicos que lo componen. Adems, esta opcin debe ser razonable en cuanto a la cantidad de requerimientos de hardware y software. Se considera un escenario de trabajo en espaol y se asume que usted cuenta con un equipo en plataforma de 32 bits con el siguiente software bsico instalado:
Sistema operativo Windows XP Professional en espaol, con Service Pack 2, instalado. Internet Information Server 5.0 (IIS), instalado y operando. Internet Explorer 6.0, en espaol. MDAC (Microsoft Data Access Components) 2.8. SQL Server 2005, en ingls. .NET Framework 2.0 Redistributable Package, en ingls. .NET Framework 2.0 SDK, en ingls. Visual Studio 2005, Standard Edition, en ingls.

Son tiles otras versiones, superiores o ms robustas, del sistema operativo, de Internet Explorer, Internet Information Server y MDAC.

54

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Se puede comprobar si IIS est instalado y funcionando, si desde el Internet Explorer se obtiene respuesta al abrir la pgina http://localhost. Para simplificar el texto, se tienen las siguientes equivalencias: Si se hace referencia a: Windows / Sistema Operativo Internet Explorer MDAC .NET Framework Estamos hablando de: Windows XP Professional, con Service Pack 2 en espaol. Internet Explorer 6.0 o posterior, en espaol. MDAC 2.8 o posterior. Plataforma .NET Framework, compuesta por .NET Framework 2.0 Redistributable Package y .NET Framework 2.0 SDK, en sus versiones en espaol. SQL Server 2005, en ingls. Visual Studio 2005, en ingls. Visual Basic.NET 2005 Visual C# 2005 Managed C++ 2005 ASP.NET 2.0 ADO.NET 2.0

SQL Server Visual Studio Visual Basic C# C++ ASP.NET ADO.NET

Captulo 2. .NET como multiplataforma de desarrollo

55

MAPA

MENTAL DEL CAPTULO

56

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

TERMINOLOGA
Ambiente de produccin, 40 Aplicaciones de cmputo mvil, 38 de consola, 38, 49 Web, 38, 50 Windows, 38, 50 Cliente, 38 Console Applications, 38 Controles de computacin mvil, 44 Dispositivos inteligentes, 38 dotnetfx.exe, 40 IDE, 43 Integrated Development Environment (IDE), 43 Kit de desarrollo de software de .NET Framework, 41 Managed Providers, 38 Mobile Applications, 38 .NET Compact Framework, 38, 44 .NET Framework 2.0 Redistributable Package, 40 Software Development Kit, 41 NetFx64.exe, 41 ODBC, 38 OLEDB, 38 PDA, 38 Personal Data Assistant (PDA), 38 Proveedores de datos genricos ODBC u OLEDB, 38 .NET nativos, 38 Servicios Web XML, 38 Servidor, 39 setup.exe (32 bits), 42 setup.exe (64 bits), 42 Smart devices, 38 vbc.exe, 49 Visual Studio 2005, 43 Express Edition, 45 Web Applications, 38, 50 Web Forms, 38 Windows Applications, 38, 50 Forms, 38 XML Web Services, 38

PREGUNTAS
2.1 Cules 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, cul es el producto .NET que mejor satisface sus necesidades?

Captulo 2. .NET como multiplataforma de desarrollo

57

Notas:

58

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que considere que responde a la pregunta. 1. Es el producto de plataforma .NET ideal cuando se desea slo ejecutar aplicaciones: a) .NET Framework 2.0 Redistributable Package b) Visual Studio 2005 c) .NET Framework 2.0 SDK 2. Es el producto de plataforma .NET ideal para desarrollar aplicaciones sin usar herramientas grficas: a) .NET Framework 2.0 Redistributable Package b) .NET Compact Framework c) .NET Framework 2.0 SDK 3. Permite la ejecucin 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 aplicacin .NET: a) Aplicacin de consola b) Aplicacin Web c) Aplicacin batch 5. Es el compilador de Visual Basic: a) VB b) VBC c) JITVB

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero. 6. 7. 8. 9. Visual Studio Standard puede instalarse en Windows 98. Los programas desarrollados en .NET no se pueden ejecutar en Windows 95. Es necesario instalar .NET Framework Redistributable Package para poder instalar Visual Studio 2005. Ejecutar ASP requiere que los programas se encuentren en la raz de aplicaciones Web, o alguno de sus directorios. 10. Es posible desarrollar aplicaciones robustas utilizando las versiones Express de Visual Studio 2005.

CAPTULO

Tcnicas 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 organizacin de trabajo de Visual Studio, basado en soluciones y proyectos. 2. Conocer la mecnica de creacin 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 bsicas de Visual Studio.

59

60

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Fundamentos de desarrollo con Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . Soluciones y proyectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Recomendaciones para la creacin de proyectos y soluciones en desarrollos colaborativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin de aplicaciones en Visual Studio . . . . . . . . . . . . . . . . . . . . . . Elementos de sintaxis en Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin de una aplicacin de Consola en Visual Basic usando Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin de una solucin en blanco . . . . . . . . . . . . . . . . Adicin de un proyecto a una solucin . . . . . . . . . . . . . Herramientas de Text Editor . . . . . . . . . . . . . . . . . . . . . . Colocacin de nmeros de lnea en Text Editor . . . . . . . Intellisense y deteccin dinmica de errores . . . . . . . . . Modificacin de cdigo usando Text Editor . . . . . . . . . . Generacin de una solucin en Visual Studio . . . . . . . . Depuracin de una solucin . . . . . . . . . . . . . . . . . . . . . . Creacin de una aplicacin Windows en Visual Basic con Visual Studio, trabajando varios proyectos en una solucin . . . Generacin de una aplicacin Windows . . . . . . . . . . . . . Fijacin de una herramienta en el espacio de trabajo . . Adicin de objetos de interfaz en tiempo de diseo . . . Navegacin entre documentos de una solucin . . . . . . . Cmo guardar documentos en una solucin . . . . . . . . . Establecimiento del proyecto de inicio para una solucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin de una aplicacin Web en Visual Basic con Visual Studio, trabajando varios proyectos en una solucin . . . . . . . . . Creacin de un directorio virtual para un sitio Web . . . Creacin de una aplicacin Web ASP.NET . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

61

Fundamentos de desarrollo con Visual Studio


Soluciones y proyectos
En .NET, desarrollar en SDK es igual que hacerlo en Visual Studio; sin embargo, la organizacin del trabajo de desarrollo tiene importantes diferencias. Si se utiliza Visual Studio, todo el trabajo se organiza en soluciones y proyectos. Una solucin es el nivel ms alto o global de organizacin en Visual Studio, y consiste en una coleccin de proyectos administrados en una sola estructura. Las soluciones almacenan informacin respecto de los proyectos que agrupan las dependencias entre stos y el orden de construccin (compilacin y generacin de ensamblados) que deben guardar entre s. Las soluciones tienen la extensin sln y presentan algunas limitaciones: la primera es que slo se puede tener una solucin abierta en una instancia de Visual Studio; la segunda es que una solucin no puede contener a otra. Los proyectos son colecciones de archivos fuente, compilados conjuntamente como un archivo de salida .NET (ensamblado). Cada proyecto puede componerse por interfaces de usuario (Windows Forms, Web Forms, Mobile), archivos de cdigo (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 ms de 90 tipos de proyectos. La ventaja de utilizarlos es que seleccionando el tipo de proyecto adecuado, Visual Studio se encarga de crear los archivos mnimos para el tipo de aplicacin correspondiente, y adems establece de forma automtica las referencias a clases de .NET Framework usualmente requeridas.

62

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

FIGURA 3.1 Organizacin de soluciones y proyectos

Es importante mencionar que algunos proyectos muy especiales no generan ensamblados, como los de setup, pero constituyen una minora. Un proyecto puede formar parte de varias soluciones, por lo que es posible organizar por mdulos una aplicacin y, al mismo tiempo, se puede tener una solucin maestra que englobe a todos los proyectos. Subdividir es una prctica recomendable, ya que al momento de estar desarrollando y solicitar la compilacin de los programas, se compilarn todos los proyectos de la solucin. Esto puede convertirse en un problema en el caso de aplicaciones grandes: en primera instancia, 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 posible tener que lidiar con proyectos que ya funcionaban pero que ahora estn presentando errores, que se tendrn que corregir antes de que el programa pueda ser compilado correctamente. Las soluciones deben planearse cuidadosamente con todo el equipo de desarrolladores. Que una solucin integre a todos los proyectos de otra solucin no implica que una solucin est dentro de otra. Eso permite que cada persona cree las soluciones que requiera sin afectar el trabajo de otros ni perjudicar la integracin de software que se da por la unin de proyectos. Es importante notar que en una misma solucin pueden coexistir proyectos escritos en diferentes lenguajes .NET; sin embargo, un proyecto puede tener cdigo fuente en un solo lenguaje.

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

63

> Lo nuevo
En Visual Studio 2005 se tienen las siguientes prestaciones relativas a los proyectos y las soluciones. Es posible crear proyectos temporales (temporary projects) que no requieren guardarse con el fin de hacer pruebas sin necesidad de crear proyectos y soluciones. Tambin es posible crear proyectos autnomos (stand-alone projects): cuando una solucin slo se compone de un proyecto, no es necesario hacer la gestin de la solucin, aunque de todas formas se genere. Para la organizacin del trabajo ya es posible crear directorios o carpetas de solucin, en los cuales es posible clasificar los archivos involucrados en la solucin. Tambin podemos administrar todos los recursos de un proyecto a travs de Project Designer, y es posible referir archivos EXE como orgenes de clases, y no slo archivos DLL.

Recomendaciones para la creacin de proyectos y soluciones en desarrollos colaborativos


Se conoce como desarrollos colaborativos a las iniciativas de desarrollo que son tan grandes 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 desarrolladores haya estado a cargo de todas y cada una de las funciones del paquete. Seguramente un equipo de desarrolladores se ocup de la interfaz grfica, otro del Solver, otro ms de las capacidades de graficacin, etctera. Imagine, por otro lado, que alguien deseara compilar su parte y que ello implicar compilar todos los programas de todos los equipos de trabajo. En trminos de tiempo y procesamiento, eso sera inadmisible. Se parte del supuesto que mantener las cosas simples es lo mejor. Trabajar con el mnimo de elementos, los suficientes y necesarios para obtener los resultados calculados, permite una mejor concentracin en el trabajo. Cuando se trabaja en ambientes colaborativos se recomiendan las siguientes prcticas relacionadas con los proyectos y las soluciones: 1. Se debe dividir la aplicacin en mdulos, e incluso en submdulos. Cada mdulo y submdulo es una unidad de labores de desarrollo que contar con un responsable. De esa forma se trabaja slo con los archivos del mdulo; la compilacin y depuracin se realizar slo sobre ellos sin necesidad de manipular el trabajo de otros. 2. Se recomienda que el trabajo de desarrollo de mdulos y submdulos se haga en un equipo local, y nunca en un ambiente de produccin.

64

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

3. Se debe tener una solucin por cada mdulo y una solucin por cada submdulo, si fuera pertinente. 4. Cada solucin debe tener un responsable. 5. Los desarrollos de los submdulos se agregan al mdulo slo despus de ser probados. 6. Todas las libreras de uso comn deben ser administradas por un responsable, aun cuando no sea quien las desarrolle. Debe haber una solucin para el manejo de las libreras de uso comn. 7. Slo el responsable de la solucin que contiene las libreras de uso comn puede autorizar las modificaciones a las libreras; al autorizar una modificacin deber comunicar la actualizacin a todos los equipos de trabajo. 8. Se debe tener una solucin que integre todos los recursos y programas que componen la aplicacin, pero no se trabaja sobre ella. En esta solucin slo se integran los recursos que ya han sido probados a nivel mdulo. 9. La solucin que integra toda la aplicacin es la que se compilar finalmente para generar una versin para entregar.

FIGURA 3.2 Trabajo colaborativo

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

65

Creacin de aplicaciones en Visual Studio


El procedimiento ms sencillo para la creacin de una solucin es ejecutar Visual Studio. Aparecer la pgina principal de la herramienta, denominada Start Page (Pgina de inicio), desde la cual se pueden abrir proyectos nuevos o existentes, as como consultar informacin de Visual Studio y la plataforma .NET.

> Lo nuevo
En Visual Studio 2005 la pgina de inicio fue rediseada totalmente. Ahora las cuatro secciones (Open an existing project, Getting Started, Headlines y News) aparecen en una sola pgina.

3
FIGURA 3.3 Start Page

En Start Page se selecciona File New Project (o se oprime la combinacin de teclas Control-Mays-N). Aparecer la ventana New Project, que permite seleccionar el lenguaje a utilizar, as como el tipo de proyecto que se desea construir.

66

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

FIGURA 3.4 New Proyect

Al proporcionar los datos del proyecto a agregar, automticamente se crea una solucin con el mismo nombre. La desventaja de esta modalidad es que en aplicaciones grandes nunca un proyecto y una solucin se denominan de la misma forma, ya que la solucin es un concepto global mientras que un proyecto es especfico. Cuando la creacin de un proyecto motiva la creacin automtica de una solucin homnima, Visual Studio entiende que la solucin se compone de un solo proyecto, a lo que se llama proyecto autnomo (stand-alone project); en este tipo de proyecto no se da mucha relevancia al concepto de solucin dentro del entorno integrado de desarrollo. Es indispensable saber qu lenguaje .NET se utilizar para el desarrollo (Project Type); decidido esto, es necesario conocer el tipo de aplicacin deseada (Templates). Las plantillas o templates permiten predeterminar los recursos iniciales de la aplicacin. Visual Studio preguntar dnde se desea guardar la aplicacin (Location) y con qu nombre (Name). Los archivos fuente que usted genere se encontrarn en el directorio que especifique. Se generar un archivo que mantendr la referencia de todos los archivos involucrados en la solucin y tendr la extensin sln. Es posible que la solucin tenga un nombre distinto al del proyecto, por lo que se podr denominar especficamente (Solution Name).

> Lo nuevo
En Visual Studio 2005 la organizacin es ms eficiente, dado que todos los recursos de una solucin estn en la misma ubicacin. La versin 2003 almacenaba los archivos del proyecto en el directorio que nosotros especificbamos, pero colocaba el archivo de solucin (SLN) en Mis documentos/Proyectos de Visual Studio, lo que creaba problemas en equipos en donde trabajaban diversos usuarios. Ahora la solucin y los proyectos se almacenan en el mismo directorio.

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

67

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 bsico de la sintaxis del lenguaje, enumeramos algunas caractersticas esenciales: 1. Visual Basic no es sensible al uso de maysculas y minsculas (non case sensitive). 2. Las lneas de cdigo terminan al encontrarse un salto de lnea (CR/LF). 3. El continuador de lnea es un guin bajo (_) y no debe interrumpir expresiones; antes de l debe haber un espacio en blanco y despus de l no debe escribirse nada. 4. Un bloque de cdigo es el conjunto de lneas que deben ser tratadas como unidad de ejecucin. Los bloques de cdigo generalmente se delimitan por estructuras con inicio y fin (Module End Module, Sub End Sub, etctera). 5. Todo bloque de cdigo que se inicie debe cerrarse. 6. El ltimo bloque de cdigo 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 parntesis para delimitar expresiones que deban resolverse, o para delimitar argumentos. 9. Las variables que se utilicen en un programa deben estar definidas de manera explcita. 10. Aunque no es relevante para el compilador, evite la codificacin de todo maysculas o todo minsculas. Procure iniciar las palabras reservadas con maysculas. ste es un ejemplo tpico de un programa en Visual Basic:
1 2 3 4 5 6 7 8 9 10 Imports System Imports System.Console Module MiPrograma Sub Main() Write(Pulse INTRO) ReadLine() WriteLine(Hola mundo) End Sub End Module

68

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejercicio 3.1
Creacin de una aplicacin de Consola en Visual Basic usando Visual Studio Desarrollar una aplicacin de consola, que al presionar INTRO muestre un mensaje Hola Mundo.

Creacin de una solucin en blanco


1. Ejecute Visual Studio. 2. En la barra de mens seleccione File New (CTRL-MAYS-N) para desplegar el cuadro de dilogo New Project.

3. En la seccin Project Type seleccione Other Project Types Visual Studio Solutions, porque trabajar con soluciones de Visual Studio. 4. En la seccin Templates seleccione Blank Solution. Al seleccionar el tipo de proyecto, Visual Studio se encargar de generar un contenedor de proyectos que podr ser compilado para producir una aplicacin. 5. En el cuadro de texto Name coloque el nombre de la solucin, Ejercicios; en el cuadro de lista Location especifique la ruta en la que se han de almacenar los archivos fsicos

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

69

que componen la solucin. Escriba la ruta del directorio de trabajo del libro, que es
C:\APVBNETVS.

6. Vea cmo la casilla de verificacin Create directory for solution est marcada de forma predeterminada. Esto es recomendable para que la solucin se organice mejor dentro del medio de almacenamiento. Haga clic en Ok para que se genere la solucin 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 Ejercicios.sln, que almacenar las referencias a los proyectos que componen la aplicacin.

Adicin de un proyecto a una solucin


8. La herramienta Solution Explorer permite ver todos los elementos que componen una solucin; mediante una interfaz de rbol de nodos, es posible ver todos los proyectos y componentes almacenados en archivos fsicos que se tienen en una solucin. Para disponer de forma visual de Solution Explorer, en la barra de mens seleccione View Solution Explorer (Ctrl-Alt-L). 9. Aparecer slo un nodo, correspondiente a la solucin Ejercicios. En el nodo se hace referencia a que actualmente la solucin tiene cero proyectos asociados.

10. Seleccione en Solution Explorer el nodo Solution Ejercicios y despliegue el men contextual (haga clic en el botn derecho del ratn). Seleccione la opcin Add New Project. 11. Aparecer la ventana New Project.

70

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

12. En la seccin Project Type seleccione Visual Basic - Windows, porque desarrollar una aplicacin de consola utilizando Visual Basic; recuerde que los proyectos de consola se ejecutan utilizando el servicio Windows Application Services, aunque no sean interfaces grficas; de ah que se traten como aplicaciones Windows. 13. En la seccin Templates seleccione Console Application. Al seleccionar el tipo de proyecto, Visual Studio se encargar de proporcionar de forma automtica todos los elementos tpicos de una aplicacin de consola, incluyendo archivos de cdigo fuente, datos y configuraciones pertinentes. 14. En el cuadro de texto Name 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 archivos fsicos a desarrollar. Escriba la ruta del directorio de trabajo de la solucin, que es C:\APVBNETVS\Ejercicios.

15. Haga clic en Ok, con lo cual se generar dentro del directorio de trabajo de la solucin un directorio llamado HolaMundoCon. En dicho directorio se encontrar el archivo de cdigo fuente del programa de Consola (.VB) y el archivo del proyecto (.VBPROJ) que concentrar las referencias de los archivos fsicos involucrados en este ltimo. Se generan tambin directorios de trabajo: en \Bin se colocarn los ensamblados que se generen cuando se realice la compilacin del proyecto; en \My Project se almacenarn archivos de configuracin y especificaciones tiles para la compilacin del proyecto, y en \obj se colocarn archivos temporales involucrados en el proceso de compilacin y depuracin.

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

71

16. Al haber especificado como Template una Console Application, Visual Studio genera de forma automtica los archivos y referencias comunes para una aplicacin de consola. El componente principal ser un programa de cdigo fuente llamado Module1.vb, que es un mdulo en Visual Basic. 17. Document Window es el espacio principal de trabajo en Visual Studio, en donde la mayora de las herramientas se ubicarn en tiempo de diseo. En Document Window aparecer Text Editor, que es el editor de texto simple donde se podr modificar el cdigo de Module1.vb. 18. En este momento Solution Explorer debe mostrar todos los elementos fsicos que componen la solucin, y en Document Window se tendr a Text Editor modificando el cdigo de Module1.vb.

72

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Herramientas de Text Editor


19. Text Editor tiene los siguientes elementos: FIGURA 3.5 Elementos de Text Editor

20. Text Editor es una fascinante herramienta de edicin de cdigo, dadas todas las prestaciones que ofrece, como las siguientes: a ) Barra de seleccin de documentos. En la parte superior de Text Editor aparecer una barra que mostrar las pestaas (Tabs) para seleccionar el documento con el que deseemos trabajar. b ) Tabs. Llamadas tambin pestaas de seleccin, identifican y permiten seleccionar los documentos abiertos con los que se puede trabajar. A los documentos que se encuentran abiertos y en la barra de seleccin de documentos, se les llama documentos activos. c ) Selector de documentos activos. Dado que se pueden tener tantos documentos activos que se llene la barra de seleccin de documentos, hacer clic en el Selector 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 cdigo (branching). Como se puede observar, al inicio de un procedimiento, mdulo o clase, en las lneas delimitadoras de branching aparecen smbolos () y (+); stos permiten visualizar y

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

73

ocultar el cdigo delimitado, con lo que podemos hacer ms clara la codificacin mostrando slo aquellas partes del cdigo que realmente nos interesa observar. f ) Complementacin automtica de cdigo. Es la capacidad de Text Editor de agregar de forma automtica lneas de cdigo que por regla de lenguaje deben escribirse. Esto simplifica el proceso de codificacin, adems de que evita errores por omisin de cdigo. g ) Coloring. Es la capacidad de Text Editor de diferenciar por colores los elementos del cdigo. Generalmente las palabras reservadas estarn 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 reservadas. Si no aparecen en azul, es porque no estn bien escritas. h ) Divisores de procedimientos. los procedimientos en el cdigo. Son las delimitaciones horizontales que separan

i ) Divisor de paneles de edicin. Si se arrastra el icono Divisor de paneles de edicin, podr dividirse el espacio de edicin de Text Editor en mitades. En cada una de ellas podr desplazarse, ver y editar diferentes partes del cdigo. Esto es especialmente til en programas muy extensos, donde a veces es necesario comparar porciones de cdigo ubicadas en distintas partes del archivo. j ) Selector de elementos. Se trata de un combo que muestra los diferentes mdulos y elementos globales de una aplicacin. En caso de que el programa posea muchos elementos globales, este combo permite ir directamente a la parte de cdigo que interesa, sin tener que navegar entre las lneas de cdigo para buscar. k ) Selector de miembros. Trabaja de la misma forma que Selector de elementos, slo que a un nivel ms bajo. Permite seleccionar un miembro de un elemento global. l ) Intellisense. Capacidad a travs de la cual Text Editor propone los objetos y miembros ms comunes conforme se escribe el cdigo.

Colocacin de nmeros de lnea en Text Editor


21. Los nmeros de lnea son muy tiles para identificar partes del cdigo. Muy probablemente, si se presentan problemas al momento de la compilacin o ejecucin, Visual Studio referir el nmero de lnea que presenta problemas. Lo ideal es conocer el nmero de lnea que corresponde a cada parte del cdigo. 22. Si los nmeros de lnea no aparecen en su editor de textos, puede desplegarlos de la siguiente manera: en la barra de mens seleccione Tool Options para desplegar la ven-

74

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

tana Options. Seleccione el nodo Text Editor Basic General, en la seccin Display marque la casilla de verificacin Line Numbers y haga clic en Ok.

Intellisense y deteccin dinmica de errores


23. Dentro del procedimiento Main() introduzca la siguiente lnea:
Console.WriteLine(Presione INTRO)

Esto se deber escribir en varios tiempos. Primero escriba Console.. Al llegar al punto, aparecer un men dinmico que propone los elementos del lenguaje que concuerdan con el cdigo que se comenz a escribir para que el desarrollador complete el enunciado con la ayuda de Visual Studio. Esto simplifica el proceso de codificacin y evita errores de sintaxis. A esta funcionalidad se le llama Intellisense. En la parte baja del men dinmico Intellisense hay dos pestaas: Common y All. Dado que los elementos de un objeto pueden ser muchos, Visual Studio permite ver los ms comunes, o bien todos. De manera predeterminada muestra los ms comunes, lo cual es muy prctico. De la lista de elementos que aparece, es posible seleccionar con el ratn, con las flechas de direccin o por concordancia con lo escrito. Slo en caso de que lo que busque no se encuentre en Common, recurra a All.

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

75

3
Siga escribiendo hasta Console.WriteL. La informacin que hemos escrito permite una concordancia exacta con un elemento del men, mismo que se selecciona.

Para ahorrarnos esfuerzo y dado que ya est seleccionado el cdigo que pretendemos escribir, basta con poner el carcter que seguira, en caso de escribir nosotros el cdigo. En este caso sera un parntesis ( . Escriba un parntesis derecho y vea cmo Intellisense complementa el cdigo de forma automtica, desapareciendo el men correspondiente.

76

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Se recomienda ampliamente el uso de Intellisense, dado que se ha demostrado que reduce en gran medida los errores de sintaxis. Siga escribiendo la lnea de cdigo, y vea cmo aparece una ayuda interactiva de llenado de los elementos. En este caso, la ayuda indica que si se escribe WriteLine(), lo que obtendramos sera un terminador de lnea. La ayuda interactiva indica 18 formas de utilizar WriteLine, dado el polimorfismo con que el objeto fue programado. Utilizando los iconos de la ayuda interactiva, busque la alternativa 14 de 18, para que vea la forma en que se utiliza WriteLine con un String.

En este punto ya debi haber escrito la lnea de ejemplo por completo. 24. Modifique la lnea, de tal forma que escriba Console con doble s, a fin de causar un error. Vea cmo al introducir una lnea que presenta errores de sintaxis, Visual Studio le seala la falta al estilo de Microsoft Word, subrayando el error en color azul. Si se colo-

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

77

ca sobre la parte del cdigo 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.

3
25. Corrija la lnea para que ya no genere errores.

Modificacin de cdigo por medio de Text Editor


26. Como todo programa Hola Mundo, se espera que el usuario interacte con el programa y que ste despliegue el mensaje Hola Mundo. Para hacer esto, nuestro programa enviar un mensaje, esperar el uso del teclado y finalmente desplegar el mensaje Hola Mundo. Modifique el procedimiento Main(). El cdigo deber quedar de la siguiente forma:

Codificacin de HolaMundoCon
1 2 3 4 5 6 7 8 9 Module Module1 Sub Main() Console.Write(Presione INTRO) Console.ReadLine() Console.WriteLine(Hola mundo.) End Sub End Module

27. Realmente usted slo tuvo que agregar las lneas 4, 5 y 6, que muestran un mensaje, esperan que se oprima una tecla y muestran otro mensaje, respectivamente.

78

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Generacin de una solucin en Visual Studio


28. Generar una solucin consiste en tratar de compilar todos los programas y elementos de todos los proyectos asociados a una solucin. Al realizarse la compilacin se generan los ensamblados correspondientes a cada uno de los proyectos, quedando listos para su ejecucin. 29. Vaya al men Build Build Solution (Ctrl-Mays-B) para generar la solucin. 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 lnea de comandos de .NET Framework, as como con otros elementos de la plataforma. Si al final de la generacin aparece el siguiente mensaje, su programa es correcto, dado que se tuvo xito en la construccin de un proyecto.

Depuracin de una solucin


31. En la barra de mens seleccione Debug Start Debugging (u oprima la tecla F5) para depurar la aplicacin. En esta operacin se comprueba que el programa est correcto sintcticamente y al mismo tiempo se ejecuta la aplicacin para verificar que no cause problemas en tiempo de ejecucin. Para efectos prcticos, depurar es ejecutar en ambiente de desarrollo. 32. Con ello aparecer la aplicacin de consola ejecutando. Al hacer clic se mostrar muy rpidamente el mensaje Hola Mundo. FIN DEL EJERCICIO *

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

79

Ejercicio 3.2
Creacin de una aplicacin Windows en Visual Basic con Visual Studio, trabajando varios proyectos en una solucin

Desarrollar una aplicacin Windows tal que al hacer clic en un botn muestre un mensaje Hola Mundo. 1. En este ejercicio trabajar con la solucin creada en el ejercicio anterior.

Generacin de una aplicacin Windows


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 seleccione Windows Applications. En Name especifique el nombre del proyecto, que ser HolaMundoWin, y se almacenar en el directorio de trabajo de la solucin. Haga clic en Ok. 5. En Document Window aparecer una herramienta llamada Form Designer, que permite el diseo de interfaces de forma grfica y dinmica. 6. En la barra de mens seleccione View Toolbox (Ctrl-Alt-X). Aparecer la herramienta Toolbox, que muestra de forma clasificada los controles grficos disponibles para una aplicacin Windows.

80

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

7. Los controles son enlaces grficos que permiten acceder a las clases de .NET Framework para la elaboracin de interfaces grficas; a travs de los controles es posible agregar objetos de interaccin en una interfaz. Visual Studio se encarga de agregar el cdigo necesario para la integracin en los programas. 8. Observe cmo Toolbox no permanece en su lugar por mucho tiempo.

Fijacin de una herramienta en el espacio de trabajo


9. Cuando una herramienta de Visual Studio se encuentra en modo de ocultacin automtica, al no hacer uso de dicha herramienta, sta se contrae, liberando espacio de trabajo en Document Window. Se dice que una herramienta est en modo fijo cuando permanece 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 ocultacin automtica 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 ocultacin automtica que se encuentra en la esquina superior derecha de la herramienta (barra de ttulo del Toolbox). Despus de haber hecho clic en el icono, debe lucir de la siguiente forma.

Modo fijo

Modo ocultacin automtica

Si el Icono de ocultacin automtica aparece en modo fijo, hacer clic sobre l pondr a la herramienta en modo de ocultacin automtica; si aparece en modo ocultacin automtica, hacer clic sobre l pondr a la herramienta en modo fijo. 11. En caso de que Toolbox est en modo de ocultacin automtica, cambie su estado a modo fijo. La interfaz deber quedar de la siguiente manera:

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

81

Adicin de objetos de interfaz en tiempo de diseo


12. En Form Designer se pueden agregar objetos de interfaz de tres maneras: Modo insercin, 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 categoras de controles que pueden ser incluidos en una interfaz. Expanda en Toolbox la categora Common Control, haciendo clic en (+). 14. Haga doble clic sobre el control Button, que se encuentra en Toolbox Common Control.

15. Arrastre el control Label, que se encuentra en el Toolbox, y colquelo debajo del botn que acaba de agregar en el punto anterior.

82

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

16. En los puntos anteriores se agreg un objeto en modo insercin y uno en modo arrastre. 17. Acomdelos de tal forma que queden distribuidos de la siguiente manera (slo arrstrelos; no haga doble clic sobre ellos):

18. Seleccione el objeto Label1 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 carcter, posee propiedades que determinan su apariencia y sus capacidades de comportamiento. La herramienta Properties permite modificar los valores de las propiedades de los objetos. En la barra de mens seleccione View - Properties Windows (u oprima la tecla F4) para ver las propiedades del objeto seleccionado.

20. Como tena seleccionado el objeto sus propiedades.

Label1,

Visual Studio permite la modificacin 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 (Name) y cam-

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

83

bie el nombre Label1 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 interaccin con el usuario. Para ello debemos codificar procedimientos de evento, que son bloques de cdigo que se ejecutarn cuando el usuario o el programa interacten de cierta manera con la aplicacin. 23. Deseamos que al hacer clic en el botn se coloque el texto Hola Mundo en el objeto lblResultado. Para ello debemos codificar el procedimiento que responda al evento Click del botn. 24. Haga doble clic en el botn que agreg a la interfaz. Automticamente aparece el procedimiento precodificado que se ha de ejecutar al momento de hacer clic (Click) en el botn (Button1) (de ah que el procedimiento se llame Button1_Click). Vea cmo el editor queda listo para codificar lo que debe suceder cuando se haga clic en el botn en tiempo de ejecucin. 25. Dentro del procedimiento deber agregar una lnea que especifique que al hacer clic en el botn, se cambiar la propiedad Text del objeto lblRespuesta a Hola Mundo. El cdigo debe lucir como sigue:

Codificacin de HolaMundoWin

Navegacin entre documentos de una solucin


26. En la parte superior de Document Window aparece la Barra de seleccin de documentos, en la cual se muestran todos los elementos de la solucin abiertos al momento. Cada elemento posee su propia pestaa de seleccin (o Tab).

27. En este ejemplo aparecen cuatro documentos o herramientas que pueden ser seleccionadas en la Barra de seleccin de documentos. Cada documento se activa, al hacer clic sobre la pestaa correspondiente, en Document Window, la herramienta utilizada por el documento para su edicin. Form1.vb y Module1.vb, por ser cdigo fuente, aparecern utilizando Text Editor, mientras que Form1.vb [Design] se mostrar usando Form Designer. Por otro lado, Start Page aparecer como un navegador de pginas Web intrnseco de Visual Studio, dado que es una pgina Web.

84

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

28. Seleccione alternativamente las distintas pestaas 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 seleccin de documentos.

Cmo guardar documentos en una solucin


29. Si el Tab de un documento muestra un asterisco (*), eso indica que el documento posee modificaciones que no han sido guardadas. 30. Guarde todos los cambios. Para ello, en la barra de mens seleccione File Save All u oprima Ctrl-Mays-S.

Establecimiento del proyecto de inicio para una solucin


31. Cada proyecto tiene un objeto de inicio (startup object) que puede ser una pgina Web o un programa que permita su ejecucin. 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 solucin en Visual Studio puede tener uno o ms proyectos, pero todas deben tener un proyecto de inicio (startup project). Cuando ejecutemos una solucin desde Visual Studio, lo que veremos como resultado ser la ejecucin del objeto inicial del proyecto seleccionado como proyecto de inicio. 33. Vea la ventana del Solution Explorer. En la solucin Ejercicios hay dos proyectos registrados: el programa de consola del ejercicio anterior (HolaMundoCon) y el proyecto 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 solucin. Si depura (oprimiendo la tecla F5) se ejecutar la aplicacin de consola, y no la de Windows que estamos trabajando.

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

85

34. Para hacer que nuestro nuevo proyecto de aplicacin Windows sea el proyecto de inicio, 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 aplicacin Windows contiene slo un formulario Windows, establecer nuestro proyecto como proyecto de inicio provoca que el nico formulario sea el objeto de inicio. Si nuestra aplicacin tuviera ms de un formulario Windows sera necesario especificar cul 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.

37. Generar una solucin permite que los elementos de todos los proyectos de una solucin sean compilados, generando los ensamblados correspondientes. En este caso, generar la solucin implicara la compilacin de los dos proyectos que hemos desarrollado. 38. Guarde la solucin y genrela, para comprobar que no haya problemas con el trabajo realizado. Si aparece el siguiente resultado es que todo fue bien (vea cmo se han construido dos ensamblados (EXE) uno por cada proyecto de la solucin):

86

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

39. Si no hubo problemas, depure la aplicacin (tecla F5). Se depurar el proyecto de inicio; es decir, la aplicacin Windows. 40. Al aparecer la interfaz en tiempo de ejecucin, haga clic en el botn, y vea cmo el texto de la etiqueta cambia. En ese caso, la aplicacin funcion adecuadamente. 41. Guarde su aplicacin y cirrela. FIN DEL EJERCICIO*

Ejercicio 3.3
Creacin de una aplicacin Web en Visual Basic con Visual Studio, trabajando varios proyectos en una solucin Desarrollar una aplicacin Web tal que, al hacer clic en un botn, muestre el mensaje Hola Mundo.

Creacin de un directorio virtual para un sitio Web


1. Una aplicacin ASP.NET funciona con base en la colaboracin de .NET Framework e Internet Information Server. Si creamos una aplicacin ASP.NET, Visual Studio intentar 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 ejecucin Web. 2. No siempre deseamos que nuestro sitio se almacene fsicamente en C:\inetpub\ wwwroot, por lo que es necesario especificar que un directorio cualquiera acte 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:\APVBNETVS) un directorio que se llame HolaMundoWeb. Ese ser el directorio de trabajo de la aplicacin Web que crear. 4. Seleccione Inicio Panel de control Herramientas administrativas Servicios de Internet Information Server.

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

87

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 opcin de men Nuevo Directorio virtual.

7. Aparecer el Asistente para crear un directorio virtual. Haga clic en Siguiente en la pantalla inicial. Cuando el asistente pregunte por el alias de su sitio, escriba APVBNETVS 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 estn. Haga clic en Siguiente 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 Information Server y seleccinelo. En el panel de la derecha podr observar que no hay elementos disponibles en dicho sitio. Cierre el programa Servicios de Internet Information Server.

88

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Creacin de una aplicacin Web ASP.NET


12. En el Solution Explorer seleccione el nodo de la solucin Ejercicios y en el men contextual seleccione Add New Web Site. Aparecer la ventana Add New Web Site.

13. En Templates seleccione ASP.NET Web Site. En Location haga clic en el botn Browse; se desplegar la ventana Choose Location, que permite seleccionar una ruta fsica del sistema operativo (si est codificando en \InetPub\wwwroot) o un directorio virtual. 14. Seleccione en el panel derecho el origen Local IIS para indicar que el desarrollo se trabajar en un directorio virtual dentro de la mquina. Al seleccionar Local IIS, aparecern en organizacin de rbol de nodos todos los sitios registrados. Seleccione su sitio APVBNETVS. Haga clic en Open para aceptar.

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

89

15. Se generar el sitio Web ASP.NET. La pgina principal sobre la que se estar trabajando es Default.aspx; las pginas pueden trabajarse en modo de diseo (Design) y en modo codificacin (Source). La forma de alternar entre uno y otro modo es seleccionando las pestaas 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.

90

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

16. Cambie a modo de diseo (Design) y utilizando Toolbox (CTRL-ALT-X), agregue un Button y un Label. 17. Seleccione el objeto Label1 y asigne en la propiedad Name, el mismo nombre que asign en Windows: lblResultado. 18. Haga doble clic en el botn que agreg a la interfaz. Aparecer el procedimiento de evento que se ejecutar al momento de hacer clic en el botn. Codifique lo siguiente en el procedimiento Button1_Click:

Codificacin de HolaMundoWeb

19. Seleccione el nodo http://localhost/APVBNETVS en el Solution Explorer y establzcalo como proyecto de inicio.

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

91

20. Vuelva a generar la solucin (Ctrl-Mays-B) y, si no hay problemas en la generacin, depure la aplicacin (tecla F5). Debe funcionar igual que la aplicacin Windows: al hacer clic en el botn, el mensaje de la etiqueta debe cambiar. 21. En este ejercicio comprobamos que el desarrollo Windows y Web realizado desde Visual Studio es prcticamente idntico. 22. Finalmente nuestro proyecto quedara como sigue.

23. En cualquier momento puede llamar a edicin cualquier elemento de la solucin. Dependiendo 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 Module1.vb, luego haga doble clic en HolaMundoWin Form1.vb; haga clic en http://localhost/ APVBNETVS/ - Default.aspx, y finalmente haga clic en http://localhost/APVBNETVS/ - Default.aspx Default.aspx.vb. Vea cmo se comporta Visual Studio. 25. Guarde su aplicacin y cirrela. FIN DEL EJERCICIO*

92

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

MAPA

MENTAL DEL CAPTULO

Captulo 3. Tcnicas de desarrollo con Visual Studio 2005

93

TERMINOLOGA
Barra de seleccin de documentos, 72, 83 Bloque de cdigo, 67 Categoras de controles, 81 Desarrollos colaborativos, 63 Directorio virtual, 86 Document Window, 71 Guin bajo (_), 67 Intellisense, 74 Internet Information Server, 86 Modo fijo, 80 Mdulo de ocultacin automtica, 80 Objeto de inicio, 84 Pestaa de seleccin, 83 Project Type, 66, 68, 70 Properties, 82 Proyectos, 61 Selector de documentos activos, 72 de elementos, 73 de miembros, 73 sln, 66 Solucin(es), 61 Solution Explorer, 69 Start Page, 65 Startup object, 84 Tab, 83 Tabs, 72 Templates, 66, 68, 70 Text Editor, 71-2 Toolbox, 79

PREGUNTAS
3.1 Cules son las recomendaciones generales de organizacin de soluciones y proyectos en Visual Studio? 3.2 Cules son los elementos bsicos de sintaxis del lenguaje Visual Basic? 3.3 Cules son las principales diferencias entre los proyectos de Consola, Windows y Web? 3.4 Para qu sirve Solution Explorer? 3.5 Para qu sirve Toolbox? 3.6 Cules son las principales caractersticas de Text Editor?

94

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que considere que responde a la pregunta. 1. Es el nivel ms alto de organizacin de trabajo en Visual Studio: a) Proyecto b) Solucin c) Ensamblado 2. Son colecciones de archivos fuente que producen un ensamblado al momento de ser compilados: a) Proyecto b) Solucin c) Paquete 3. Herramienta que nos permite ver los elementos que componen una solucin, en forma de rbol de nodos: a) Solution Explorer b) Solution Viewer c) Start Page

4. Es la capacidad de Text Editor para proponer objetos y miembros, al momento de editar el cdigo: a) Intellisense b) Coloring c) Tooltip interactive 5. Consiste en tratar de compilar todos los programas y elementos asociados a un proyecto o solucin para la generacin de ensamblados. a) Build b) Compile c) Debug Parte 2: Coloque en la lnea la letra F si el enunciado es falso, y V si es verdadero. 6. 7. 8. 9. 10. Visual Basic es sensible al uso de maysculas y minsculas. Text Editor y Document Window son, en esencia, lo mismo. La ocultacin automtica est disponible slo en Text Editor y Toolbox. Para probar la aplicacin Web es necesario tener instalado y funcionando IIS. Las plantillas (templates) permiten predefinir recursos disponibles durante la creacin de una aplicacin.

Captulos:
4 Variables, arreglos y tipos de datos 5 Espacios de nombres y desarrollo de libreras 6 Manejo de operadores 7 Estructuras de decisin y control 8 Manejo estructurado de excepciones

Parte 2
Fundamentos de programacin en Visual Basic
En esta parte del libro se analizan los fundamentos de la programacin en lenguaje Visual Basic. Utilizando al mximo las herramientas de Visual Studio 2005, se estudia el manejo de las variables de memoria, as como las estructuras de decisin y control desde las cuales se realizar el consumo 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 programacin, las acciones procedentes en caso de que se tengan problemas en tiempo de ejecucin. Nuestra reflexin es la siguiente: la discusin si Java es mejor que .NET es irrelevante. Lo importante no es el lenguaje de programacin que escogemos para trabajar, sino lo que podemos hacer con el lenguaje. Un excelente lenguaje en manos de alguien que no tiene nada que decir es una herramienta mal aprovechada. Preocpese por tener un objetivo valioso a alcanzar, y luego emplee representaciones abstractas de datos e instrucciones precisas para desarrollar programas que cumplan de forma ptima con el objetivo planteado.

Herramientas de Visual Studio revisadas:


1. 2. 3. 4. 5. 6. 7. 8. Debug / Breakpoints Command Window Autos / Locals / Watch Immediate Window Comment / Uncomment Clipboard Ring Task List Error List

CAPTULO

Variables, arreglos y tipos de datos


Objetivos: Conocer las generalidades del manejo de variables y arreglos, as como la definicin de sus caractersticas 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 caractersticas de las variables de memoria. 4. Conocer los tipos de datos admitidos por .NET y la forma en que se realizan conversiones. 5. Entender el alcance de las variables de memoria dentro de un programa. 6. Comprender qu son los arreglos, cules son sus tipos y la forma de definirlos. 7. Aprender a implementar esquemas Strong Typing.

97

98

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Identificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de datos en Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conversin de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conversin implcita (Casting) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conversin explcita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conversin por mtodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Acceso a datos Value type y Reference type . . . . . . . . . . . . . . . . . . . . . . . . . Capacidades de los tipos valor y referencia . . . . . . . . . . . . . . . . . . . . . Naturaleza de tipo de los datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ByVal y ByRef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Strong Typing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Option Explicit [On/Off] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Option Strict [On/Off] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Demostracin del alcance de las variables y la forma en que preservan valores (I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Manejo elemental de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Declaracin de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Literales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Valores por omisin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Demostracin de la declaracin de variables y constantes, y la realizacin de conversiones . . . . . . . . . . . . . . . . . . . . . . . . . Construccin de un solo proyecto . . . . . . . . . . . . . . . . . . Origen de las variables: clases y estructuras . . . . . . . . . . . . . . . . . . . . . Alcance de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Shadowing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Accesibilidad de las variables (accesibility) . . . . . . . . . . . . . . . . . . . . . . Demostracin del alcance de las variables y la forma en que preservan valores (II) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arreglos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arreglos unidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arreglos multidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arreglos escalonados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comprobacin del uso de arreglos unidimensionales, multidimensionales y escalonados . . . . . . . . . . . . . . . . . . . . . . . Estructuras y enumeraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Enumeraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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

Captulo 4. Variables, arreglos y tipos de datos

99

El mundo de la computacin es, en ltima instancia, un mundo de datos. Los principales objetivos de toda aplicacin son procesar datos para transformarlos en informacin, hacerlos llegar en la cantidad y la forma precisas a las personas indicadas (y autorizadas), y almacenarlos de manera eficiente. No es asunto menor entender los datos y la forma en que se comportan. Una ineficiente seleccin de la forma en que se manejan los datos puede acarrear errores y mal desempeo de la aplicacin. Es importante recordar tambin que los lenguajes de programacin son estructuras simblicas que permiten hacer uso de los dispositivos y recursos de una computadora. Uno de los componentes ms importantes de una computadora es la memoria de acceso aleatorio (RAM/Random Access Memory). La RAM es indispensable para una computadora debido a que los programas y datos deben residir en ella para que puedan ser tomados de ah por el procesador; nada puede ser procesado por una computadora si no est antes en la memoria. Dicho de otra manera, el procesador no habla con nadie ms 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 nmero hexadecimal cuando Windows causa un volcado de memoria). La memoria puede ser utilizada por el sistema operativo para que todos los programas funcionen; puede un programador disponer de posiciones de memoria? Por supuesto que s: a travs de las variables de memoria. El presente captulo analiza la forma en que es necesario codificar el almacenamiento de valores en memoria en Visual Basic, de forma que los procesos puedan utilizarla eficientemente.

Variables
Una variable de memoria es la referencia lgica a una posicin fsica de memoria RAM. Por medio de las variables es posible almacenar valores en la memoria, asignarles un nombre determinado y disponer del valor almacenado cuando se requiera. Estos valores almacenados estarn disponibles en tanto que no liberemos la memoria, ya sea por medio de programacin o como resultado de haber cerrado la sesin de programa donde fueron definidos. Por supuesto, apagar la mquina produce el cierre de todos los programas y, por tanto, la prdida de los valores almacenados en las variables.

100

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Las variables tienen siempre las siguientes caractersticas:


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 cdigo dentro de un programa en que una

variable puede ser utilizada sin utilizar calificador; es el estado de existencia y la persistencia del valor de la variable en tiempo de ejecucin.
Accesibilidad (accessibility). Es el permiso que se proporciona al cdigo para leer la

variable o escribir en ella.


Tiempo de vida ( lifetime). Es el periodo de ejecucin en el cual la variable est dis-

ponible. FIGURA 4.1 Disposicin de memoria en .NET

Identificadores
Se le llama identificador (identifier) al nombre lgico de un elemento de programacin 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 travs de l, dichos elementos son utilizables de manera programtica. Reglas de composicin de los identificadores. con las siguientes reglas: Los identificadores deben cumplir

Captulo 4. Variables, arreglos y tipos de datos

101

Deben iniciar con un carcter alfabtico o guin bajo ( _ ). Pueden contener slo caracteres alfabticos, dgitos decimales o guiones bajos. Si se inician con un guin bajo, deben contener al menos un dgito decimal o un carc-

ter alfabtico.
No pueden contener espacios intermedios.

Reglas no escritas de composicin 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 ms 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
Producto

ms prctico emplear nombres cortos. Entre Nombre y NombreDelClienteQueAdquiere lo ms recomendable es emplear la primera opcin.
Ventas

Use el guin bajo slo si es necesario hacerlo. Recuerde que el guin bajo es el conti-

nuador de lnea del lenguaje y puede crearse confusin innecesaria. Prefiera Mensuales a Ventas_Mensuales.

Se recomienda el manejo de mayscula 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 maysculas, minsculas y prefijos para la denominacin de variables en Visual Basic, se consideran algunos estilos que constituyen convencionalismos internacionalmente reconocidos. Aunque Visual Basic permite formar los identificadores como le plazca, es mejor seguir las reglas que todos los desarrolladores del mundo parecen estar siguiendo. Pascal casing. El estilo Pascal casing consiste en usar mayscula al principio del nombre y al inicio de cada una las palabras que compongan el identificador. ste es el estilo ms utilizado en Visual Basic; por ejemplo, VentasMensuales.

102

Aprenda 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 Mtodos y propiedades

Camel casing. El estilo Camel casing se caracteriza por colocar en mayscula la primera letra de cada palabra de un identificador, excepto la primera. Por ejemplo, ventas Mensuales. Este estilo est muy difundido entre los programadores de C# o Java. Se recomienda utilizar este estilo:
Al denominar parmetros; si el parmetro se compone de una sola palabra, toda la pa-

labra va en minscula.
En elementos de alcance privado, como campos y variables.

Notacin hngara (Hungarian notation). La Notacin hngara se caracteriza por colocar un prefijo a las variables para indicar su tipo o funcin. A decir de Microsoft, este estilo est cayendo en desuso, por lo cual sugerimos evitarlo. Por ejemplo, intVentasMensuales, da a entender que se trata de un dato Integer. NOTA
Evitar la notacin hngara es la recomendacin de Microsoft. En realidad, la notacin hngara sigue siendo utilizada mucho por la comunidad de desarrollo, e incluso en el sitio de Microsoft encontramos muchos ejemplos con dicha notacin. Utilizar la notacin hngara ser a fin de cuentas una decisin del equipo de desarrollo, y no afecta la funcionalidad de las aplicaciones.

Este apartado presenta recomendaciones que puede o no seguir. En cualquier caso, lo importante no es el estilo que elija usar, sino que todos los miembros de un equipo de desarrollo 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 nmero o una fecha. Dependiendo del tipo, ser posible hacer tal o cual cosa con

Captulo 4. Variables, arreglos y tipos de datos

103

el contenido de la variable. Esto implica la necesidad de definir qu tipo de valor almacenar la variable para saber qu es posible hacer con ella. Adems 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 podrn realizar con el mismo. Se conoce como dominio el conjunto de valores vlidos para un dato. Por ejemplo, el dominio de un dato que almacenar un nmero de mes, consiste en los nmeros 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 nmeros enteros del 0 al 255. Todo en Visual Basic es un objeto, y todo objeto tiene un determinado tipo, lo que se conoce como type. Se tienen dos clases de types en el lenguaje:
Types que forman parte del lenguaje, llamados types intrnsecos. Types de usuario, llamados tambin 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 travs del cual se invoca la funcionalidad desde el cdigo fuente en un determinado lenguaje. El nombre del type puede ser ms corto en un lenguaje que en .NET Framework. Por ejemplo, para Visual Basic la referencia Integer es equivalente a referir el type System.Int32 de .NET Framework, que es ms complejo. Todos los lenguajes tienen acceso a la misma biblioteca de clases, lo que vara la implementacin que cada lenguaje requiere para llegar a System.Int32 (Visual Basic, Integer; C#, int; C++, int o long; JScript, int). Adems de nombre, los types tambin poseen un tamao, que representa su el consumo en bytes. Esto es importante dado que la memoria RAM es siempre limitada. Los types intrnsecos pueden ser clases, estructuras e interfaces preconstruidas en .NET Framework, que ayudan a estandarizar el manejo de valores de datos o a producir comportamientos. En ese sentido, Integer es un type que representa un valor, mientras que WriteLine es un type, en el sentido de que es un mtodo de una clase de BCL que no debe ser instanciada para funcionar.

104

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Visual Basic acepta los siguientes tipos de datos intrnsecos:


Tipo de dato Estructura o Clase.NET Framework a la que se hace referencia System.Boolean (estructura) System.Byte (estructura) System.Char (estructura) System.DateTime (estructura) System.Decimal (estructura)

Consumo en bytes 1 byte 1 byte 2 bytes 8 bytes 12 bytes

Rango de valores (dominio de tipo) True o False De 0 a 255 (sin signo) Caracteres UNICODE De enero 1, 0001 a diciembre 31, 9999 a) +/-79,228,162,514,264,337, 593,543,950,335 sin punto decimal; b) +/-7.9228162514264337593543950335 con 28 posiciones despus del punto decimal; c) el mayor nmero menor a cero representable es: +/-0.0000000000000000000000000001 a) -1.79769313486231E+308 a -4.94065645841247E-324 para valores negativos; b) 4.94065645841247E-324 a 1.79769313486231E+308 para valores positivos De -2,147,483,648 a 2,147,483,647 De -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 De -32,768 a 32,767 a) -3.402823E+38 a -1.401298E-45 para nmeros negativos; b) 1.401298E-45 a 3.402823E+38 para valores positivos De 0 a aproximadamente dos mil millones de caracteres Unicode

Boolean Byte Char Date Decimal

Double

System.Double (estructura)

8 bytes

Integer Long Short Single

System.Int32 (estructura) System.Int64 (estructura) System.Int16 (estructura) System.Single (estructura)

4 bytes 8 bytes 2 bytes 4 bytes

String

System.String (clase)

Depende de la plataforma

Se consideran tipos de dato numrico los siguientes: Byte, Double, Integer, Long, Short y Single. Se consideran tipos de dato no numrico los siguientes: Boolean, Date, Decimal, Object y String. Aunque Decimal almacena nmeros, el manejo que hace del punto flotante complica su manejo; Object, por su parte, puede asumir cualquier valor.

Captulo 4. Variables, arreglos y tipos de datos

105

Algunas recomendaciones pertinentes con respecto a la definicin de tipos de datos son las siguientes:
Determine cuidadosamente el tipo de dato ms adecuado para una variable, de forma que

las operaciones a realizar con los valores no produzcan conflictos de tipos. Si, por ejemplo, va a realizar operaciones de alta precisin, el tipo de datos Integer no le servir.
Utilice el tipo de datos que consuma slo la cantidad de memoria necesaria. Si va a al-

macenar la edad de una persona, escoja Byte porque consume menos memoria que, por ejemplo, Integer.
Use, en lo posible, tipos de datos numricos, pues son los que ms eficientemente ma-

neja la computadora.
En trminos de tiempo de procesamiento, el tipo de dato ms eficiente, indiscutiblemen-

te, es Integer, mientras que el menos eficiente es Object.


Visual Basic puede realizar lo que se llama conversin de tipo cast; es decir, una con-

versin de tipos de datos en tiempo de ejecucin entre tipos de datos compatibles. Es preferible que usted mismo haga las conversiones; aunque es ms cmodo dejar que el lenguaje lo haga, usted pierde el control de su programa y, en caso de que se presenten problemas, ser ms difcil determinar en dnde se encuentran.
Sea previsor y acte en concordancia con respecto a las posibilidades de que un dato, y

especialmente uno de tipo numrico, pueda exceder los dominios de tipo al ser manipulado. Considere el siguiente ejemplo: un programador elige un tipo Integer partiendo del razonamiento matemtico de que la suma de dos nmeros enteros siempre es un nmero entero. Sin embargo, si se suma 2,000,000,000 ms 2,000,000,000, el resultado exceder el lmite 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 Integer. En ocasiones los problemas originados por esta situacin (numeric overflow), se presentan despus de haber utilizado la aplicacin durante mucho tiempo.

Conversin de datos
En muchas ocasiones requerir realizar conversiones de tipos de datos, y principalmente del tipo String a otros. Se conoce como conversin de datos a cambiar el tipo de dato de un valor por otro. Existen tres formas de conversin de datos en Visual Basic.

106

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Conversin implcita (Casting)


La conversin implcita, conocida como casting, se da cuando el CLR realiza la conversin en tiempo de ejecucin sin que el programa lo especifique. Este tipo de conversin es comn en los tipos de datos numricos. Hay un fenmeno que se conoce como narrowing, cuando la conversin se realiza de un tipo con mayor dominio a uno de menor dominio (Integer a Byte, por ejemplo); por otro lado, se conoce como widening cuando la conversin se realiza de un tipo de menor dominio a uno de mayor dominio (Byte a Integer, por ejemplo). En el caso de narrowing, hay que prestar mucha atencin en no proporcionar datos que excedan el dominio de tipo; por ejemplo, tratar de pasar 100000I (Integer) a 100000S (Short), dado que los datos pueden truncarse, e incluso provocar excepciones.

Conversin explcita
La conversin explcita consiste en aplicar funciones especficas mediante cdigo para realizar la conversin. Se utiliza principalmente para convertir tipos String/Char a otros. La conversin explcita puede hacerse mediante funciones especficas y funciones genricas. Las principales funciones especficas utilizadas son las siguientes:
Funcin CBool(Expresin) CByte(Expresin) CChar(Expresin) CDate(Expresin) CDbl(Expresin) CDec(Expresin) CInt(Expresin) CLng(Expresin) CObj(Expresin) CShort(Expresin) CStr(Expresin) Consecuencia Convierte Expresin a Boolean. Convierte Expresin a Byte. Convierte Expresin a Char. Convierte Expresin a Date. Convierte Expresin a Double. Convierte Expresin a Decimal. Convierte Expresin a Integer. Convierte Expresin a Long. Convierte Expresin a Object. Convierte Expresin a Short. Convierte Expresin a String.

La principal funcin de conversin genrica es CType, cuya sintaxis es la siguiente:


CType(Expresin,

NombreTipoDato)

Donde Expresin es la expresin a convertir, y NombreTipoDato es el nombre del tipo de dato al que se desea convertir la expresin. Por ejemplo:
CType(4, Integer)

Captulo 4. Variables, arreglos y tipos de datos

107

Conversin por mtodo


Algunos tipos de datos, por ejemplo la mayora de los numricos, tienen implcito un mtodo que permite hacer una conversin. El ms comn de stos es ToString, que permite convertir a la representacin String un valor dado. Por ejemplo:
Dim Edad As Integer = 30 Dim EdadTexto As String = Edad.ToString()

En este caso, se declara una variable llamada Edad, de tipo Integer, a la cual se le asigna el valor 30. Despus se declara una variable llamada EdadTexto que tomar la representacin String de la variable Edad; es decir, 30.

Acceso a datos Value type y Reference type


Datos de referencia y datos de valor

Visual Basic, como todo lenguaje de programacin, permite el uso de la memoria de la mquina a travs de las variables. Es posible acceder a los datos almacenados en las variables mediante dos tipos de acceso: tipos de valor (value 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 economa difieren. Con los tipos de valor (value 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 asignacin 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).

108

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Las variables mantienen una referencia apuntando a la posicin 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 intrnseca en relacin con un tipo de acceso. Son value type:
Todos los tipos de datos que almacenan nmeros: Byte, Decimal, Double, Integer,
Long, Short, Single.

Los tipos de datos Boolean, Char 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 value 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 ByVal y ByRef. Si se utiliza ByVal, se le est especificando al procedimiento o funcin que utilice su propia versin del dato y que mantenga intacto su el valor original. Si se utiliza ByRef, se le est especificando al procedimiento o funcin que utilice la misma posicin 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

ByRef

es respetado siempre y cuando la

Cuando sus procedimientos o funciones sean de uso genrico para varios objetos o datos, se recomienda ampliamente utilizar ByVal, a fin de que se realicen operaciones de la manera ms segura posible.

Captulo 4. Variables, arreglos y tipos de datos

109

Strong Typing
Antes de Visual Basic, el lenguaje haba sido muy permisivo con los programadores; obviaba muchas cosas y les permita no ser formales con la tcnica, lo que a largo plazo siempre causaba problemas. Si no se declaraban las variables, si no se especificaban los tipos de datos o si no se planeaban las conversiones, Visual Basic lo haca de manera automtica. Eso provocaba que los errores de fondo fueran difciles de encontrar, ya que el universo de cosas que podan estar equivocadas exceda nuestro conocimiento dado que no todo estaba bajo nuestro control. Resultaba pattico pasar horas revisando un programa en busca de un error de lgica o algoritmo, para descubrir finalmente que el verdadero problema era un error de dedo que Visual Basic haba arreglado por nosotros sin que nos diramos cuenta. Para evitar esas penosas situaciones, existen dos estatutos que se agregan antes de cualquier cosa en el cdigo y que aseguran que la codificacin siga una tcnica formal, de tipo strong typing; es decir, donde todos los datos estn asociados de manera explcita y no ambigua a un tipo determinado.

Option Explicit [On/Off]


La instruccin Option Explicit, cuando est activada (On), obliga al programador a declarar 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 instruccin Option Strict, cuando est activado (On), obliga a que las conversiones de datos se realicen de manera explcita. En tal caso, las conversiones implcitas (casting) no estn disponibles ni para las conversiones amplias. Option Strict permite generar programas de tipo de datos reforzados (strong type), en el sentido de que todas las conversiones deben ser explcitas. Si usted especifica Option Explicit y Option Strict es muy probable que su cdigo sea bastante formal, y no se encontrar con errores extraos en tiempo de ejecucin. El valor predeterminado de Option Explicit y Option Strict es Off. Una excelente prctica 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 declarar y utilizar variables.

110

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejercicio 4.1
Demostracin 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 Visual Basic y la forma en que podemos aprovechar su manejo para preservar valores en memoria con eficiencia. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado ValRef. 3. Edite el programa de tal forma que aparezca como sigue:

Codificacin de ValRef-Module1.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 26 27 Option Explicit On Option Strict On Module Module1 Sub Main() Dim Texto As String = Texto Original Console.WriteLine(Texto) Valor(Texto) Console.WriteLine(Texto) Referencia(Texto) Console.WriteLine(Texto) Console.Write(Pulse INTRO para continuar) Console.ReadLine() End Sub Sub Valor(ByVal Texto As String) Texto = Texto Valor Console.WriteLine(< & Texto & >) End Sub Sub Referencia(ByRef Texto As String) Texto = Texto Referencia Console.WriteLine(< & Texto & >) End Sub End Module

Captulo 4. Variables, arreglos y tipos de datos

111

Ejecucin guiada de

ValRef Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (oprima las teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (Oprima F5). 5. Este programa es type safe, dado que todas las variables debern declararse antes de ser utilizadas (Option Explicit) y las conversiones tienen que hacerse de forma explcita (Option Strict). 6. El programa declara una variable de memoria, llamada Texto, que se ver sometida a modificaciones en su contenido (lnea 7); de inicio, se le asigna un valor de Texto original, mismo que es mostrado en la consola (lnea 8). La variable ser proporcionada como argumento a dos procedimientos, uno de los cuales tratar el dato como valor (lneas 17 a la 20), y otro como referencia (lneas 22 a la 25). 7. Uso del dato como tipo valor. En la lnea 9 se proporciona la variable como argumento de un procedimiento llamado Valor; dicho procedimiento recibe el valor y le da tratamiento como tipo valor. En la lnea 18 se modifica el valor de Texto, por Texto Valor, y se muestran los efectos del cambio en la lnea 19. Despus de ejecutar Valor(), se muestra el contenido de la variable Texto (lnea 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 como tipo valor, lo que provoca que el argumento genere su propia copia del dato, dejando al dato original intacto. 8. Uso del dato como tipo referencia. En la lnea 11 se proporciona la variable como argumento de un procedimiento llamado Referencia; dicho procedimiento recibe el valor y le da tratamiento como tipo referencia. En la lnea 23 se modifica el valor de Texto, por Texto Referencia, y se muestran los efectos del cambio en la lnea 24. Despus de ejecutar Referencia, se muestra el contenido de la variable Texto (lnea 12); es posible notar que el valor original se modific. Esto se debe a que el dato fue manejado como tipo referencia, lo que provoca que el argumento no genere su propia copia del dato, sino que utilice para el manejo de informacin la misma posicin de memoria que el valor original.

112

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Si todo ocurri como se esperaba, la salida ser la siguiente:


Texto Original <Texto Valor> Texto Original <Texto Referencia> Texto Referencia Pulse INTRO para continuar

FIN DEL EJERCICIO*

Manejo elemental de variables


Declaracin de variables
Para utilizar una variable es necesario declararla; declarar una variable es el proceso mediante el cual se establece un identificador, que ser reconocido en tiempo de ejecucin, para almacenar uno o ms valores de un determinado tipo. No se pueden utilizar variables que no hayan sido declaradas previamente. La declaracin de una variable se lleva a cabo a travs de la instruccin de declaracin: Dim. La sintaxis ms sencilla de Dim es la siguiente:
Dim

Identificador [As TipoDato] [ = ValorInicial]

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 declaracin (ValorInicial).

NOTA
La expresin almacenar valores en las variables de memoria es una expresin en sentido figurado: los valores no se almacenan en las variables sino en posiciones fsicas de la RAM, y las variables son slo el medio a travs del cual se tiene acceso a dichas posiciones de memoria. Cuando se dice que almacenamos valores en las variables, nos referimos a que almacenamos valores en una posicin fsica de memoria, que es referida por el identificador de la variable.

Captulo 4. Variables, arreglos y tipos de datos

113

La especificacin del tipo de dato a travs de la palabra reservada As es opcional; si se omite la especificacin de tipo de dato, la variable se declara automticamente bajo el tipo Object. Esta declaracin automtica garantiza que no se utilice una variable que no ha sido declarada; sin embargo, es la alternativa ms ineficiente, ya el CLR tendr que invertir tiempo constantemente en determinar qu tipo de valor es el que est almacenado en la variable. A continuacin se muestran ejemplos de declaracin de variables:
1 2 3 4 5 6 Dim Dim Dim Dim Dim Dim Edad Edad As Edad As Edad As Nombre, Nombre,

Integer System.Int32 Integer = 50 Apellido As String Apellido As String, Edad As Integer

La lnea 1 declara una variable Object. La lnea 2 declara una variable Integer. La 3 es exactamente igual a la lnea 2, ya que Integer es la referencia a System.Int32. La lnea 4, adems de declarar la variable, le asigna un valor de inicio. La lnea 5 demuestra que se pueden declarar varias variables de un mismo tipo, separando los identificadores con comas. La lnea 6 demuestra que Dim acepta la declaracin de dos o ms variables de un mismo tipo, y de dos o ms tipos.

Constantes
Se conoce como constantes a las variables que slo cambiarn su valor una vez en su tiempo de vida. Para definirlos se utiliza la siguiente sintaxis.
Const

Identificador [As TipoDato] = ValorInicial

Donde Identificador es el identificador de la constante, TipoDato es el tipo de dato que tendr la constante y ValorInicial es el valor que tendr la constante durante todo su tiempo de vida. Por ejemplo:
Const PI As Single = 3.1416

Literales
Si se menciona un nmero 4, no tenemos suficiente informacin para saber si el nmero es Byte, Integer, Double, Decimal, dado que 4 puede ser de cualquiera de esos tipos. Lo mismo ocurrira con A, dado que no sabramos si se trata de un dato String o Char.

114

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Se tienen literales que permiten definir un valor, liberndolo de las ambigedades de tipo que pudiera tener. Las literales son las siguientes:
Type Boolean Char Decimal Double Integer Long Short Single String Literal True False C D R I L S F Ejemplo de uso True False AC 3.1416D 3.1416R 10I 10L 10S 3.14F A

Valores por omisin


Cada variable, en caso de que no se le asigne un valor, tendr un valor por omisin. A continuacin se muestra una relacin de los valores por omisin para los tipos de datos.
Tipo de dato Tipos de datos numricos Boolean Date Decimal Object String Valor por omisin 0 False 01/01/0001 12:00 A.M. 0 Nothing

Ejercicio 4.2
Demostracin de la declaracin de variables, constantes, y la realizacin de conversiones

En este ejercicio se utilizar una aplicacin de consola para comprobar la declaracin y uso de variables en un proceso.

Captulo 4. Variables, arreglos y tipos de datos

115

1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado AreaRectangulo. 3. Edite el programa de tal forma que aparezca como sigue.

Codificacin de AreaRectangulo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Module Module1

- Module1.vb

Sub Main() Const Titulo As String = - Rectngulo - Dim Base As Integer Dim Altura As Single = 0 Dim Resultado As Single, Entrada As String Console.WriteLine(Titulo) Console.Write(Base: ) Entrada = Console.ReadLine() Base = CInt(Entrada) Console.Write(Altura: ) Entrada = Console.ReadLine() Altura = CType(Entrada, Single) Resultado = (Base * Altura) Console.WriteLine(Resultado: & Resultado.ToString()) End Sub End Module

Construccin de un solo proyecto


4. Al agregar ste, se tendrn cuatro proyectos en la solucin. En ocasiones, cuando las soluciones son muy grandes, reconstruir una completamente para saber si se tienen problemas 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 solucin, basta con seleccionar el proyecto en Solution Explorer, desplegar el men contextual y seleccionar la opcin Build. De esa forma se construir slo el proyecto seleccionado.

116

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

6. Seleccione en Solution Explorer el proyecto; para ello coloque el puntero sobre el nombre del proyecto AreaRectangulo, haga clic con el botn derecho del ratn para desplegar el men contextual y seleccione Build.

7. Vea en Output cmo se procesa solamente el proyecto recin desarrollado. Cuando su proyecto ya no presente errores, podr construirse la solucin, y ejecutarse con confianza.

Ejecucin guiada de AreaRectangulo

Module1.vb

8. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que haya realizado en la solucin (oprima las teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (F5). 9. La lnea 4 declara una constante, a la cual se le asigna como valor el mensaje que ha de aparecer como encabezado del programa (lnea 9); en la lnea 5 se muestra una declaracin de variable en su forma ms sencilla; en la lnea 6 se comprueba que es posible asignar un valor inicial al momento de la declaracin; en la lnea 7 se comprueba la posibilidad de declarar mltiples variables de mltiples tipos en una misma lnea (aunque esta prctica no se recomienda porque podra hacer perder claridad al cdigo). 10. En la lnea 9 se muestra el ttulo del programa en la consola, en la 10 se muestra el mensaje que pregunta la base del rectngulo y en la 11 se asigna a la variable Entrada el valor que el usuario ingresa desde la consola. 11. Como el dato se recibe en formato String desde la consola, la lnea 12 se encarga de convertirlo en Integer, utilizando para ello la funcin especfica CInt; el resultado es asignado a la variable Base. La misma mecnica se seguir para preguntar y convertir

Captulo 4. Variables, arreglos y tipos de datos

117

la altura del rectngulo, con la diferencia de que se utilizar para la conversin la funcin genrica CType. 12. La lnea 17 calcula el rea del rectngulo, asignando el valor a la variable Resultado. Como Resultado es de tipo Single, posee de forma intrnseca el mtodo ToString, que es utilizado en la lnea 18 para mostrar los resultados. 13. Todas las conversiones que realizamos en este programa pudieron haberse obviado, dado que el programa no es type safe; es decir, el CLR hubiera realizado la conversin cast en caso de que nosotros no la hubiramos llevado a cabo de manera explcita. 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:
Entrada - Rectngulo Base: 10 Altura: 15 Resultado: 150

FIN DEL EJERCICIO*

Origen de las variables: clases y estructuras


Decamos que en Visual Basic las variables son instancias de una clase o una estructura:
Variables basadas en clase (intermediacin requerida).

Sabemos que una clase es la definicin formal de un tipo de objeto. Un objeto es la instancia de una clase; ste puede contener informacin y comportamiento. En el caso de los datos almacenados en memoria a travs de un objeto, stos pueden estar disponibles al usuario mediante referencias. Uno hace referencia al objeto, y el objeto hace referencia a una posicin de memoria en donde se encuentra el dato; esa intermediacin que realiza el objeto para llegar al dato consume recursos de almacenamiento temporal en la computadora (lo que se conoce como heap allocation). Este tipo de variables exigen ms recursos, pero ofrecen mayor funcionalidad.

Variables basadas en estructura (acceso directo, sin intermediacin).

Una estructura (structure) es muy similar a una clase, en el sentido de que puede almacenar datos y mtodos; 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 estructura; esto elimina la necesidad de una intermediacin entre la variable y el dato, por lo que no se consumen recursos adicionales de la computadora en el rea de almacenamiento 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.

118

Aprenda 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 lenguaje con vida propia.

Alcance de las variables


El alcance (scope) de las variables determina en qu partes del cdigo podr ser utilizada una variable sin utilizar un calificador. Para entender el alcance debemos entender primero el concepto de bloque de cdigo. Un bloque de cdigo (code block) es el conjunto de lneas que constituyen una unidad de ejecucin. Generalmente se encuentran delimitados por una lnea de inicio y una lnea de conclusin (a lo que se conoce como branching); todas las instrucciones que culminen con End son delimitadores de bloque de cdigo (Module-End Module, Sub-End Sub, If-End If, etctera). Existen otras instrucciones, como For-Next y Do-Loop, que aunque no concluyen con End, tambin contienen bloques de cdigo. Los bloques pueden ser condicionales o no. Son bloques condicionales cuando su ejecucin depende del valor obtenido al resolver una expresin lgica (If-End If, Do-Loop, por ejemplo), mientras que son bloques no condicionales aquellos que no dependen de una evaluacin para ejecutarse (Module-End Module, Namespace-End Namespace, por ejemplo). Un aspecto importante a tomar en cuenta es que un bloque de cdigo puede formar parte de otro bloque de cdigo. Las variables tienen los siguientes alcances:
Alcance de bloque (Block scope).

El alcance de bloque se presenta cuando la variable est disponible slo en el bloque de cdigo en el que est declarada. El alcance de bloque es el ms estrecho, en el sentido de que la variable tiene la menor vigencia posible. Cmo se define: declarando la variable dentro de un bloque de cdigo.

Este tipo de alcance se aplica en los siguientes estatutos:


Do-Loop For [Each]-Next If-End If Select-End Select SyncLock-End SyncLock Try-End Try While-End While With-End With

Captulo 4. Variables, arreglos y tipos de datos

119

Alcance de procedimiento (Procedure scope).

El alcance de procedimiento se presenta cuando la variable est disponible slo para el procedimiento en el que est declarada. Cuando las variables pueden ser utilizadas slo dentro del procedimiento que las declara, reciben el nombre de variables locales. Cmo se define: declarando la variable dentro de un procedimiento, pero no dentro de un bloque; se recomienda declarar al inicio del procedimiento, antes de cualquier bloque de cdigo. El alcance de mdulo se presenta cuando la variable est disponible para todos los procedimientos de un determinado mdulo, clase o estructura en la que est declarada. Cmo se define: declarando la variable dentro del captulo, clase o estructura, antes de declarar cualquier procedimiento.

Alcance de mdulo (Module scope).

Alcance de espacio de nombres (Namespace scope). El alcance de espacio de

nombres se presenta cuando la variable est disponible para todos los mdulos, clases o estructuras contenidas en un espacio de nombres. Este alcance es el de mayor amplitud. Cmo se define: declarando una variable a nivel mdulo, con accesibilidad Friend o Public (que se ver ms 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 haba expresado que cada variable debe 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 homnimas si se declaran con diferente alcance; en ese sentido, podemos declarar una variable variableZ a nivel mdulo, y una variable variableZ dentro de un procedimiento, lo cual no causar problemas al momento de compilar, pero s se podr generar un procesamiento particular en tiempo de ejecucin. El hecho de que dos variables tengan el mismo identificador no causa problema para Visual Basic siempre y cuando tengan alcances distintos; el programa utilizar para el procesamiento de datos aquella variable con alcance ms estrecho; a este comportamiento se le da el nombre de shadowing. Los valores de variables con el mismo nombre y distinto alcance sern mantenidos en tiempo de ejecucin, a fin de utilizar el valor de menor alcance segn se requiera en el programa.

120

Aprenda 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 cdigo 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 travs de cdigo. Las diferentes opciones que se tienen de accesibilidad son:
Public.

Conocidas como variables pblicas. Se proporciona acceso pblico a la variable; es decir, no hay restricciones de uso de la variable cuando se define como pblica. Slo se puede definir a nivel captulo, espacio de nombres o archivo fsico; nunca a nivel procedimiento. Conocidas como variables protegidas. Se proporciona acceso protegido a la variable; es decir, pueden ser utilizadas slo por la clase en que se declar la variable, o en aquellas clases derivadas de sta. Slo se puede definir a nivel clase, nunca a nivel procedimiento.

Protected.

Friend.

Se proporciona acceso que asume confianza hacia el usuario (de ah lo amistoso); pueden ser utilizadas por el programa que la declara, y por todos aquellos que se encuentren en el mismo ensamblado. Slo se puede definir a nivel captulo, espacio de nombres o archivo fsico; nunca a nivel procedimiento. Se proporciona la unin de restricciones de
Protected

Protected Friend.
Friend.

y de

Private.

Conocidas como variables privadas. Se proporciona acceso privado a una variable. Slo estn disponibles para el alcance en el que fueron declaradas. Slo se puede definir a nivel captulo, espacio de nombres, o archivo fsico; nunca a nivel procedimiento.

Static.

Conocidas como variables estticas. Permite incrementar la persistencia del valor de las variables, manteniendo el ltimo valor que haya asumido aun despus de la terminacin del procedimiento que la declar. Slo se puede definir a nivel procedimiento. No se pueden declarar variables estticas en los procedimientos de una estructura; slo se aceptan para los procedimientos de clases. Static es muy similar a una variable Public pero se diferencian por el lugar en donde se declaran. En cierta forma, las variables Static seran como variables pblicas declaradas en los procedimientos.

Shared.

Conocidas como variables compartidas. Indica que la variable no est asociada con la instancia de una clase o estructura determinada. Se puede acceder a una variable compartida a travs de un calificador anteponiendo al nombre de la variable el nombre de la clase en donde se declar inicialmente, ms un punto separador. Slo se puede definir a nivel captulo, espacio de nombres o archivo fsico; nunca a nivel pro-

Captulo 4. Variables, arreglos y tipos de datos

121

cedimiento. Las variables compartidas (shared variables) identifican una sola unidad de almacenamiento, sin importar cuntas 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 propio valor. Este tipo de variables es especialmente til para trasladar valores de un formulario a otro, en aplicaciones de formularios mltiples, ya que no basta con que las variables sean pblicas.
ReadOnly.

Especifica que se trata de una variable de slo lectura.

Si no se especifica alguna opcin de accesibilidad, las variables sern variables de instancia y privadas (instance variable, private). En caso de que se desee asignar alguna opcin de accesibilidad, la especificacin pasa a ser el estatuto de declaracin y puede sustituir a Dim. Por ejemplo:
Static Dim Edad As Integer

Es lo mismo que:
Static Edad As Integer

4
NOTA
En el caso de la accesibilidad es importante tener en cuenta la accesibilidad del objeto contenedor de la variable (objeto que contiene a otro objeto). Se puede proporcionar permiso a nivel procedimiento, pero si no se tiene permiso para disponer del captulo, clase o estructura que contiene el procedimiento mencionado, no ser posible llegar nunca a l.

Ejercicio 4.3
Demostracin 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 Visual Basic y la forma en que podemos aprovechar su manejo para preservar valores en memoria con eficiencia. 1. Abra la solucin Ejercicios, que debe encontrarse en (archivo de extensin sln). 3. Edite el programa de tal forma que aparezca como sigue:
C:\APVBNETVS\Ejercicios

2. Agregue a su solucin un proyecto Windows Console Application, llamado Alcance.

122

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Codificacin de Alcance
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 Option Explicit On Option Strict On

- Module1.vb

Module Module1 Dim Texto1 As String = Alcance mdulo Sub Main() Console.WriteLine(Texto1) Dim Texto2 As String = Alcance procedimiento If Texto2 <> Then Console.WriteLine(Texto2) Dim Texto3 As String = Alcance block Console.WriteLine(Texto3) End If Procedimiento1() Procedimiento1() Procedimiento1() Procedimiento2() Console.WriteLine( ) Console.Write(Pulse INTRO para continuar) Console.ReadLine() End Sub Sub Procedimiento1() Static Texto4 As String Texto4 = Valor + & Texto4 Dim Texto5 As String = Texto 5 Console.WriteLine(Procedimiento 1 ) Console.WriteLine(Texto 1: & Texto1) Console.WriteLine(Texto 4: & Texto4) Console.WriteLine() End Sub Sub Procedimiento2() Console.WriteLine(Procedimiento 2 ) If Texto1 <> Then Dim Texto1 As String = Shadow Console.WriteLine(Texto 1: & Texto1) End If Console.WriteLine(Texto 1: & Texto1) Console.WriteLine() End Sub End Module

Captulo 4. Variables, arreglos y tipos de datos

123

Ejecucin guiada de Alcance

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que haya realizado en la solucin (oprima las teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (Oprima F5). 5. Este programa es type safe, dado que todas las variables debern declararse antes de ser utilizadas (Option Explicit) y las conversiones tienen que hacerse de forma explcita (Option Strict) (lneas 1 y 2). 6. Se declaran variables con diferente alcance en las lneas 5, 9 y 12. En la lnea 5 se declara la variable Texto1; sta tiene un alcance a nivel mdulo, debido a que se declara dentro del mdulo, fuera de cualquier procedimiento.
Main(), Procedimiento1()

Esta variable podr ser utilizada por todos los procedimientos del mdulo, es decir, y Procedimiento2(); esto se comprueba en la lneas 8 y 29, pues se despliega en la consola una variable no definida en esos procedimientos. En la lnea 9 se declara la variable Texto2, que tiene un alcance a nivel procedimiento, por estar declarada dentro de un procedimiento especfico, pero fuera de un bloque de cdigo; por esa razn se trata de una variable local. Esta variable estar disponible slo para Main(), pero no para otros procedimientos.

En la lnea 12 se declara la variable Texto3, que tiene un alcance a nivel bloque de cdigo y estar disponible desde que se declara (lnea 12) hasta que se encuentre el estatuto que marca el final del bloque de cdigo (en este caso End If, en la lnea 14). Si se trata de utilizar la variable Texto3 despus de la lnea 14, pensando que es una variable local (de alcance a nivel procedimiento), nuestro programa generar error, ya que la variable slo existe declarada para el bloque en que se declara. 7. Comprobacin de la variable esttica. En la lnea 15 se manda ejecutar Procedimiento1(); en dicho procedimiento se define una variable esttica llamada Texto4 (lnea 25). Esta variable tendr un tiempo de vida que excede el tiempo de vida del procedimiento que la declara, ya que por ser esttica, mantendr los valores en memoria aun despus de concluida la ejecucin del procedimiento. En la lnea 26 se asigna a Texto4 la constante String Valor + que se concatenar con el valor que tenga la misma Texto4; en virtud de que la variable es esttica, el valor que va adoptando se comporta como un acumulador, que nunca pierde el valor que tena, obtenido de procesamientos anteriores.

124

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Las lneas 16 y 17 mandan ejecutar Procedimiento1(), a fin de que se compruebe que efectivamente la variable mantiene su valor al correr de las mltiples ejecuciones del procedimiento. 8. Comprobacin de shadowing. Ya vimos que en la lnea 5, Texto1 se defini con un alcance a nivel mdulo y, al momento de declarar la variable, se le asign el valor Alcance mdulo. En Procedimiento2(), se vuelve a definir la variable Texto1 (lnea 37) y se le asigna al momento de declaracin el valor Shadow. 9. a) Qu alcance tiene la variable Texto1, declarada en la lnea 37?

b) Qu valor posee Texto1 cuando es desplegada en la consola en la lnea 38?

c) Qu valor posee Texto1 cuando es desplegada en la consola en la lnea 40?

Como podr darse cuenta, el programa no genera conflicto con la doble declaracin de la variable; simplemente utiliza aquella que tenga menor alcance. Si todo ocurri como se esperaba, la salida ser la siguiente:
Alcance mdulo Alcance procedimiento Alcance block Procedimiento 1 Texto 1: Alcance mdulo Texto 4: Valor + Procedimiento 1 Texto 1: Alcance mdulo Texto 4: Valor + Valor + Procedimiento 1 Texto 1: Alcance mdulo Texto 4: Valor + Valor + Valor + Procedimiento 2 Texto 1: Shadow Texto 1: Alcance mdulo Pulse INTRO para continuar

Captulo 4. Variables, arreglos y tipos de datos

125

10. Modifique la lnea 21, sustituyendo el estatuto de declaracin Static por Dim. Ejecute el programa nuevamente, y explique qu sucede:

FIN DEL EJERCICIO *

Arreglos
Se conoce como arreglos (arrays) tambin 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 posicin de memoria dentro de un arreglo a travs de un subndice, que es la posicin secuencial de cada elemento dentro de la coleccin. Los subndices, como en todos los lenguajes de .NET, son de base cero; es decir, inician en cero. En Visual Basic, los arreglos tienen un tratamiento de colecciones, por lo cual los subndices siempre se especifican entre parntesis. Las colecciones son conjuntos de objetos lgicamente relacionados, diferenciados por un subndice. En su calidad de colecciones, pueden ser explorados con la instruccin For taxis es la siguiente:
For Each Each, cuya sin-

Elemento [As TipoDato] In Coleccin BloqueCdigo [Exit


For]

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 coleccin. Coleccin es la coleccin de objetos que podrn ser ledos de forma secuencial utilizando For Each. BloqueCodigo es el bloque de cdigo que se ejecutar de forma iterativa para cada elemento de la coleccin explorado. Al encontrar Next, el proceso iterativo comienza nuevamente; es posible interrumpir el ciclo en cualquier momento utilizando Exit For.

126

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Arreglos unidimensionales
Los arreglos unidimensionales se conocen simplemente como arreglos, y requieren de un slo subndice para tener acceso a un elemento del arreglo. La forma de declarar un arreglo en Visual Basic es la siguiente.
Dim Arreglo(MximoSubndice) As TipoDato

Donde Arreglo es el identificador del arreglo; su denominacin sigue las mismas reglas que las variables. MximoSubndice es el nmero mayor de subndice 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 tipo Integer. En caso de que no se especifique un nmero determinado de elementos, el arreglo ser de un nmero indeterminado de elementos.
Dim VentaMensual() As Integer

A este tipo de arreglos se les llama arreglos unidimensionales, pues nicamente es necesario especificar un subndice para tener acceso a una de sus posiciones en memoria. Tambin es posible asignar valores al momento de declarar un arreglo. En ese caso no se deber especificar nmero de elementos, ya que ste se calcular automticamente considerando el nmero de valores que se especifiquen entre llaves ({ }), separados por comas (,). La sintaxis correspondiente es la siguiente:
Dim

Arreglo() As TipoDato = {SerieValores}

Donde Arreglo es el nombre del arreglo, TipoDato es el tipo de dato de los elementos y SerieValores es la serie de valores que asumirn los elementos; los valores debern estar separados por comas. Por ejemplo:
Dim Numeros() As Integer = {10,20,40,100}

En este caso, Numeros(1) tendr el valor de 20.

Captulo 4. Variables, arreglos y tipos de datos

127

Arreglos multidimensionales
Se conoce como arreglo multidimensional a un conjunto de posiciones en memoria que son referidas por un solo identificador a travs de dos o ms subndices. Al nmero de subndices que es necesario especificar para tener acceso a una posicin de memoria de un arreglo se le llama dimensionalidad (dimensionality) o rango (rank); Visual Basic acepta hasta 32 dimensiones. A los arreglos de dos dimensiones (dimensionalidad 2), que son los multidimensionales ms 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 denominacin sigue las mismas reglas que las variables. MS1 es el nmero mayor de subndice para la dimensin 1, MS2 es el nmero mayor de subndice para la dimensin 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 posiciones; 3 posiciones 4 posiciones=12), donde los elementos son de tipo Integer. En caso de que no se especifique un nmero determinado de elementos, el arreglo ser de un nmero indeterminado de elementos.
Dim VentaTrim(,) As Integer

A este tipo de arreglos se les llama arreglos multidimensionales, pues es necesario especificar un subndice para tener acceso a una posicin en memoria del arreglo. Tambin es posible asignar valores al momento de declarar un arreglo. En ese caso no se deber especificar nmero de elementos, ya que el nmero de elementos se calcular automticamente considerando el nmero de valores que se especifiquen entre llaves ({ }), separados por comas (,). Cada llave constituye la serie de valores para una dimensin. La sintaxis sera la siguiente.
Dim

Arreglo(,) As TipoDato = {{SerieValores1},{SerieValores2}}

Donde Arreglo es el nombre del arreglo, TipoDato es el tipo de dato de los elementos, y SerieValores1 y SerieValores2 es la serie de valores que asumirn los elementos; los valores debern estar separados por comas.

128

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejemplo.
Dim VentaTrim(,) As Integer = {{1000,20000,10000,5000}, _ {2000,30000,15000,2000}}

En este caso, VentaTrim(1,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 definicin sera la siguiente.
Dim

Arreglo()() As TipoDato

Donde Arreglo es el identificador del arreglo; su denominacin sigue las mismas reglas que las variables. Dependiendo el nmero de arreglos que se desee incluir, se debern agregar pares de parntesis despus del nombre de variable. TipoDato es el tipo de dato que tienen los elementos en los arreglos. Por ejemplo:
Dim Numeros()() As Byte

En este caso se tiene un arreglo que almacenar dos arreglos, donde los elementos son de tipo Byte. Tambin es posible asignar valores al momento de declarar un arreglo. En ese caso, los valores son definiciones de arreglos.
Dim

Arreglo()()As TipoDato = {Arreglo1,Arreglo2}

Donde Arreglo es el nombre del arreglo, TipoDato es el tipo de dato de los elementos, y Arreglo1 y Arreglo2 son arreglos con elementos que son TipoDato; los arreglos debern estar separados por comas. Por ejemplo:
Dim Numeros()() As Byte = { Byte(){10,15,12,11}, _ Byte() {40,50,60} }

Captulo 4. Variables, arreglos y tipos de datos

129

En este caso, Numeros(0)(3) tendr el valor de 11. Estaramos extrayendo, del arreglo 0, el elemento 3. El primer subndice indica el nmero de arreglo del que se trata, mientras que el segundo indica el o los subndices 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 ltimos pueden llegar a consumir cantidades muy grandes de memoria. Por ejemplo, si se quiere almacenar en un arreglo el nmero de identificacin de 1000 empleados y 5 nmeros de categoras de empleados, un arreglo multidimensional ocupara 1000 5 posiciones de memoria, es decir, 5000; un arreglo escalonado, por el contrario, requerira slo 1000 5, es decir, 1005. Si el arreglo fuera de datos Long (8 bytes), la diferencia en consumo de memoria sera de 31,960, que podra 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 trabajarn adecuadamente slo en implementaciones Microsoft, y no en otras plataformas que implementen considerando CLS como base.

Ejercicio 4.4
Comprobacin del uso de arreglos unidimensionales, multidimensionales y escalonados En este ejercicio se comprobar la forma en que funcionan los alcances de variables en Visual Basic y la forma en que podemos aprovechar su manejo para preservar valores en memoria con eficiencia. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado Arreglos. 3. Edite el programa de tal forma que aparezca como sigue:

130

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Codificacin de Arreglos

- Module1.vb

1 2 3 4 5 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 Module1 Sub Main() Dim i As Integer Console.WriteLine(Arreglo unidimensional 1:) Dim Uni1() As Integer = {22, 49, 20, 40} For Each i In Uni1 Console.WriteLine(i) Next Console.WriteLine(Arreglo unidimensional 2:) Dim Uni2() As Integer = {55, 66, 77} For Each i In Uni2 Console.WriteLine(i) Next Console.WriteLine(Arreglo Dim Multi(,) As Integer = Console.WriteLine( _ String.Format(Fila 0: Multi(0, 1))) Console.WriteLine( _ String.Format(Fila 1: Multi(1, 1))) Console.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),

Console.WriteLine(Arreglo escalonado:) Console.WriteLine(Arreglo 1, posicin 2) Dim Esca()() As Integer = {Uni1, Uni2} Console.WriteLine(Esca(1)(2)) Console.Write(Presione INTRO) Console.ReadLine() End Sub End Module

Captulo 4. Variables, arreglos y tipos de datos

131

Ejecucin guiada de Arreglos

Module1.vb

4. Construya la solucin (Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (oprima F5). 5. En la lnea 10 se declara un arreglo unidimensional, llamado Uni1, 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 subndices irn de 0 a 3. 22 49 20 40

4
En la lnea 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 Uni1. La estructura For Each comenzar una lectura secuencial de todos los elementos, desde el subndice 0 hasta 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 lnea 12 provoca que se vea en la consola el contenido de cada una de las posiciones en memoria. La lnea 16 declara un arreglo unidimensional de tres posiciones, llamado Uni2, que ser utilizado junto con Uni1 ms adelante. El proceso para el mostrado de contenido se repite con Uni2. Sus valores son los siguientes: 55 66 77 6. En la lnea 22 se declara un arreglo multidimensional, llamado Multi, constituido por dos dimensiones. Se asignan valores al momento de la declaracin, que nos indican que el arreglo ser de dos columnas y tres filas. Vea cmo el nmero de series de valores de-

132

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

termina el nmero de filas, mientras que el nmero de elementos de cada serie de valores determina el nmero de columnas: 92 44 10 49 20 48

Las lneas de la 23 a la 28 se encargan de mostrar los valores que componen cada fila. Para ello nos apoyamos de la funcin String.Format, que hace una sustitucin directa de parmetros. Vea cmo funciona:
String.Format(Primer valor {0} segundo valor {1}, 10, 20)

generara como resultado:


Primer valor 10 segundo valor 20

Los parmetros se incluyen con base 0, y deber proporcionarse una serie de valores separados por comas despus del String que queremos construir. El primer valor de la serie toma la primera posicin ({0}), el segundo la segunda ({1}), y as sucesivamente. Los subndices en los arreglos indican la fila y la columna, considerando una base cero. 7. La lnea 32 define un arreglo escalonado, llamado Esca, que almacena los arreglos Uni1 y Uni2: 22 49 20 40 La lnea 33 muestra, del segundo arreglo almacenado (subndice 1), el tercer elemento almacenado (subndice 2). Entre los primeros parntesis ir el subndice del arreglo escalonado; es decir, permite seleccionar al arreglo a inspeccionar. En los siguientes parntesis se coloca el subndice (o subndices) del arreglo seleccionado. A diferencia de un arreglo multidimensional, en donde todas las filas tienen igual nmero de columnas, en un arreglo escalonado la forma y dimensiones dependen de los arreglos almacenados. 55 66 77

Captulo 4. Variables, arreglos y tipos de datos

133

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, posicin 2 77 Presione INTRO

8. Vea el siguiente ejemplo y coloque las referencias que hacen falta. a) Para utilizar Uni1 b) Para utilizar Uni2 c) Para utilizar Multi d) Para utilizar Esca 49 =
Uni1(1)

55 = _________________________ 10 = _________________________ 66 = _________________________

Estructuras y enumeraciones
Estructuras
Las estructuras (structures) son la implementacin de estructuras de datos definidos por el usuario en Visual Basic. Las estructuras son elementos value 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

134

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

donde NombreEstructura es el nombre de la estructura en cuestin, y Elementos podrn ser variables, funciones, procedimientos y eventos asociados a aqulla. Por ejemplo:
Structure NombreCompleto Public Nombre As String Public ApellidoPaterno As String Public ApellidoMaterno As String Function End Structure

En este caso se declar una estructura que almacena el nombre y los apellidos de una persona. Las variables que componen la estructura tienen acceso pblico, a fin de ser utilizadas de forma abierta. En caso de que se tengan en una estructura variables que se utilicen slo 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 vlidos para elementos clasificados, como podran ser colores, categoras, estados, etctera. La forma de implementar enumeraciones se realiza de acuerdo con la siguiente sintaxis:
Enum

NombreEnumeracin Elementos

End Enum

Donde NombreEnumeracin es el nombre de la enumeracin, y Elementos podrn ser las constantes permitidas. A las constantes se les puede asignar o no un valor de inicio. Por ejemplo:
Enum Estado Activo Inactivo End Structure

En este caso se declar una enumeracin que permite el uso de las referencias Estado.Activo y Estado.Inactivo como valores vlidos. Pudo haber sido tambin de la siguiente forma:
Enum Estado Activo = A Inactivo = I End Structure

Donde adems de limitarse el dominio, se permite asignar un valor interno a la constante.

Captulo 4. Variables, arreglos y tipos de datos

135

MAPA

MENTAL DEL CAPTULO

136

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

TERMINOLOGA
Accesabilidad, 100, 120 Accessibility, 100, 120 Alcance, 100, 118 de bloque, 118 de espacio de nombres, 119 de mdulo, 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 cdigo, 118 no condicionales, 118 Boolean, 104 ByRef, 108 Byte, 104 ByVal, 108 Camel casing, 102 Casting, 106 Char, 104 Code block, 118 Colecciones, 125 Constantes, 113 Conversin de datos, 104 explcita, 106 implcita, 106 por mtodo, 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 Instruccin de declaracin (Dim), 112 Integer, 104 Jagged arrays, 128 Lifetime, 100 Literales, 113 Long, 104 Matrices, 125 Module scope, 119 Namespace scope, 119 Narrowing, 106 Notacin hngara, 102 Option Explicit, 109 Strict, 109 Pascal casing, 101 Private, 120 Procedure scope, 119 Programas de tipo de datos asegurados, 109 reforzados, 109 Protected, 120 Friend, 120 Public, 120 Rango, 127 Rank, 127 ReadOnly, 121 Reference type, 107 Scope, 100, 118 Shadowing, 119 Shared, 120 Short, 104 Single, 104 Static, 120 String, 104 Strong type, 109 typing, 109 Structure(s), 117, 133 Subndice, 125 Tiempo de vida, 100 Tipo de dato, 100, 103 no numrico, 104 numrico, 104 Tipos de referencia, 107 de valor, 107 Type safe, 109 Value type, 107 Variable(s) basadas en clase (intermediacin requerida), 117 basadas en estructura(sin intermediacin requerida), 117 compartidas, 120 de instancia, 121 de memoria, 99 de solo lectura, 121 estticas, 120 privadas, 120 protegidas, 120 pblicas, 120 Widening, 106

PREGUNTAS
4.1 Qu son las variables y cules son sus principales caractersticas? 4.2 Qu son los arreglos y de qu tipos hay? 4.3 Explique la diferencia entre Value Type y Reference Type. 4.4 Cmo se puede lograr que un programa sea strong typing? 4.5 Qu tipos de datos acepta .NET? Enumrelos y proponga un ejemplo de un dato de la vida real que encaje dentro del dominio de tipo.

Captulo 4. Variables, arreglos y tipos de datos

137

Notas:

138

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que considere que responde a la pregunta.
1. Es la referencia lgica a una posicin fsica de la memoria RAM: a) Estructura b) Variable c) Tipo de dato 2. Es el estatuto que ayuda a que el cdigo sea type safe: a) Option Explicit b) Option Strict c) Option Compare 3. Es el atributo que define la cantidad de cdigo 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 cdigo 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 ms estrecho: a) Selecting b) Scoping c) Shadowing

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. 7. Las variables pblicas son las que tienen mayores restricciones. Una de las nuevas capacidades de .NET es poder utilizar variables aun sin haberlas declarado. 8. Los arreglos multidimensionales tienen un manejo de memoria ms econmico que los arreglos escalonados. 9. 10. El alcance de mdulo es ms estrecho que el alcance de bloque. El identificador de una variable no puede repetirse en un mismo alcance.

CAPTULO

Espacios de nombres y desarrollo de libreras


Objetivos: Aprender qu son los espacios de nombres y cmo crearlos y

utilizarlos.
1. Conocer qu son los espacios de nombres. 2. Sabr cules son los espacios de nombres ms 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 libreras. 6. Aprender el uso de alias de espacios de nombres.

139

140

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Espacios de nombres (namespaces) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nomenclatura para los espacios de nombres . . . . . . . . . . . . . . . . . . . . Microsoft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uso de espacios de nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin de namespaces propios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alias para los espacios de nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Independencia de los ensamblados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin y consumo de una librera (DLL) basada en un espacio de nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin de una librera DLL . . . . . . . . . . . . . . . . . . . . . Revisin de todos los elementos asociados a un proyecto, usando Solution Explorer . . . . . . . . . . . . . . . . Establecimiento de una referencia a una librera desde Solution Explorer . . . . . . . . . . . . . . . . . . . . . . . . . Consumo de una librera programticamente . . . . . . . . Utilizacin del depurador (Debug) de Visual Studio y la ejecucin lnea a lnea basada en puntos de interrupcin (breakpoints) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Establecimiento de un punto de interrupcin (breakpoint) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejecucin lnea por lnea (Code Stepping) . . . . . . . . . . . Modificacin de programas en tiempo de ejecucin . . . Puntos de interrupcin condicionales . . . . . . . . . . . . . . . Habilitacin e inhabilitacin de puntos de interrupcin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eliminacin de los puntos de interrupcin (breakpoint) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Utilizacin de Command Window . . . . . . . . . . . . . . . . . . . . . . . . Escritura de comandos de Visual Studio usando Command Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uso de herramientas avanzadas para la depuracin . . . . . . . . . Apilado de herramientas en Visual Studio . . . . . . . . . . . Ventanas de variables (variable windows) . . . . . . . . . . . Ventanas de inspeccin de cdigo . . . . . . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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

Captulo 5. Espacios de nombres y desarrollo de libreras

141

Espacios de nombres (namespaces)


Por definicin, un espacio de nombres (namespace) es un esquema lgico que permite agrupar clases y types relacionados a travs de un nombre. En trminos generales, es una referencia lgica a las libreras utilizadas por un programa. Las libreras, como seguramente ya sabe, son archivos binarios ejecutables, preferentemente con extensin DLL, que contienen procedimientos de uso comn (en forma de clases) disponibles para que los programas los utilicen. La extensibilidad de un lenguaje es su capacidad para integrar libreras desarrolladas por otros. Seguramente le habr sucedido que al tratar de ejecutar un programa (con extensin EXE) que copi desde otra mquina ste no funciona y despliega una mensaje de error donde dice que no puede encontrar un DLL que necesita para trabajar. Podemos concluir algo: que los programas se apoyan en las libreras, pues mandan llamar a ejecucin procedimientos contenidos en ellas. Los espacios de nombres hacen que la identificacin, localizacin y uso de las libreras se realice de manera sencilla y lgica. Cuando se desarrolla en Visual Basic se crean muchos objetos que de manera conjunta representan la interfaz de usuario, y que a travs de su comportamiento forman lo que llamamos aplicacin. A cada objeto de la aplicacin se le pueden alterar las propiedades o ejecutar sus mtodos, y stos pueden ser utilizados por funciones o estructuras de decisin y control. Tanto las clases de las que derivan los objetos como las funciones del lenguaje deben estar definidas en alguna parte. Fsicamente, los archivos de clases de .NET Framework tienen la extensin DLL; en .NET las cosas no cambian y cada vez que usted declara una variable de tipo int, por ejemplo, realmente est generando una instancia de una clase que se encuentra definida en un archivo 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 disposicin un nmero muy grande de clases ya preparadas para que usted las utilice; stas se distribuyen en muchas libreras de vnculos dinmicos (DLL), algunas de ellas de ms de 2 MB de cdigo puro, que satisfacen casi cualquier requerimiento general de programacin. Tener en mente los nombres fsicos de los archivos DLL y la referencia exacta de las clases que contienen puede ser una labor titnica. Si desarrolla utilizando Visual Studio quiz se facilite su trabajo, porque la herramienta de desarrollo establece los enlaces con los DLL de manera automtica.

142

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Tener muchos archivos fsicos de libreras constituye una ventaja, pues implica que el lenguaje ya contiene muchas funciones que no ser necesario programar; por otro lado, plantea un problema, pues encontrar tantos archivos no resulta prctico. NOTA
Las libreras de vnculos dinmicos que conforman 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 funcionarn: si no tiene instalado .NET Framework no lo harn porque son ensamblados y, por tanto, son cdigo administrado que requiere la presencia del CLR.

Buscando la simplificacin, Microsoft cre un sistema lgico que permite organizar y categorizar las clases disponibles en las libreras que componen el .NET Framework, basndose en un concepto: los espacios de nombres (namespaces). Los espacios de nombres proporcionan una estructura que organiza y simplifica la referencia a las clases a travs del .NET Framework, y no slo Microsoft Visual Basic puede usar los espacios de nombres; tambin pueden hacerlo el resto de los lenguajes .NET, ya que realmente conviven con el CLR. Es muy importante sealar que los espacios de nombres no tienen nada que ver con la herencia entre las clases. Los espacios de nombres slo estn relacionados con la identificacin de clases, y no con la jerarqua madre-hija de stas. Ciertamente, los espacios de nombres sugieren una jerarqua, pero sta no tiene nada que ver con la herencia entre clases; realmente se trata de un agrupamiento basado en funcionalidad. Quienes desarrollan basndose en la tecnologa COM estn conscientes de que los espacios de nombres son la evolucin lgica de los identificadores ProgID. Un espacio de nombres es dos cosas: a) un convencionalismo de nomenclatura y b) un esquema lgico de organizacin de clases de .NET Framework. Los espacios de nombres organizan colecciones de clases y eliminan la ambigedad al momento 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.

Captulo 5. Espacios de nombres y desarrollo de libreras

143

Nomenclatura de los espacios de nombres


La nomenclatura de los espacios de nombres se basa en la notacin Pascal casing, con divisin basada en puntos para representar la jerarqua. En el caso de System.Console.WriteLine que ya hemos utilizado, System es el espacio de nombres, Console es la clase y WriteLine es el mtodo de la clase. Generalmente, el ltimo elemento del nombre es un type (mtodo, propiedad, campo, etctera), el penltimo es una clase de BCL, y todo lo que anteceda es la jerarqua de espacios de nombres para llegar a la clase. Es importante mencionar que el desarrollador puede crear sus propias jerarquas de espacios de nombres, que tambin se regirn por las mismas reglas de nomenclatura. Algunos de los espacios de nombres ms utilizados de la librera de clases de .NET Framework son los siguientes: NOTA
Por su extensin, no se listan todos los espacios de nombres disponibles en .NET Framework, sino slo los que a criterio del autor son los ms usuales.

Microsoft
El espacio de nombre Microsoft y todas sus dependencias ayudan a integrar las tecnologas Microsoft a los desarrollos. Adems integra los elementos principales de los nuevos lenguajes de Microsoft.
Espacio de nombre (Namespace) Microsoft.SqlServer.Server Microsoft.Csharp Microsoft.Jscript Microsoft.VisualBasic Microsoft.VisualBasic.FileIO Microsoft.Win32 Utilidad Contiene clases que permiten integrar CLR en Microsoft SQL Server y su motor de ejecucin. Contiene clases que dan soporte a la compilacin y generacin de cdigo usando C#. Contiene clases que apoyan a la compilacin y generacin de cdigo usando Jscript. Contiene clases que apoyan a la compilacin y generacin de cdigo usando Visual Basic. Contiene tipos que dan soporte al manejo del sistema de archivos usando Visual Basic. Provee dos tipos de clases: aquellas que manejan eventos iniciados por el sistema operativo y las que manipulan el registro del sistema (Windows Registry).

144

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

System
El espacio de nombre System y todas sus dependencias contienen las clases fundamentales de la plataforma .NET. En esta jerarqua se encuentran las clases base para definir valores, referencias, tipos de datos, eventos y manejadores de eventos; adems contienen los elementos para la declaracin de interfaces, atributos, excepciones de procesos, etctera. Tambin se incluyen en ella todas las clases que hacen de los lenguajes de .NET herramientas de propsito general, dado que se encuentran clases de graficacin, acceso a datos, telecomunicaciones, criptografa, matemticas, etctera.
Nombre del espacio de nombre (Namespace) System.Collections

Utilidad Contiene interfaces y clases que definen varias colecciones de objetos, como lists, queues, arreglos de bits, hashtables y diccionarios. Contiene interfases y clases que definen colecciones genricas, que permiten a los usuarios crear colecciones strong type que proveen mejor tipo de seguridad y desempeo. Contiene los tipos que proveen el modelo de programacin para manejo de datos de configuracin. Contiene clases que constituyen la mayor parte de la arquitectura de ADO.NET. La arquitectura de ADO.NET permite el acceso y manipulacin eficiente de bases de datos de diversas tecnologas (SQL Server, Acces, Oracle, ODBC, OLEDB, etctera). Contiene clases compartidas por los proveedores de datos de .NET Framework. Un proveedor de datos de .NET Framework, describe una coleccin de clases usadas para acceder orgenes de datos, como bases de datos, en el espacio administrado. Contiene clases que pueden ser usadas para generar typed-datasets personalizados. Contiene clases que el proveedor de datos para ODBC de .NET Framework encapsula. Contiene clases que el proveedor de datos para OLE DB de .NET Framework encapsula. Contiene clases que el proveedor de datos para Oracle de .NET Framework encapsula. Contiene clases que apoyan funcionalidad especfica de SQL Server. Complementa a System.Data.SqlClient, sobre todo en el manejo integrado de SQL Server 2005 y CLR.

System.Collections.Generic

System.Configuration

System.Data

System.Data.Common

System.Data.Design System.Data.Odbc System.Data.OleDb System.Data.OracleClient System.Data.Sql

Captulo 5. Espacios de nombres y desarrollo de libreras

145

System.Data.SqlClient

Contiene clases que el proveedor de datos para SQL Server de .NET Framework encapsula. Describe una coleccin de clases que pueden ser usadas para acceder a una base de datos en SQL Server CE para dispositivos Windows CE-based en el espacio administrado. Contiene clases para tipos de datos nativos en SQL Server. Estas clases proveen una alternativa ms rpida que otros tipos de datos. Ayuda a prevenir errores de conversin que puedan derivar en prdida de precisin. Provee de clases que permiten interactuar con los procesos del sistema, logs de eventos, desempeo de contadores. Tambin provee clases que permiten buscar errores en la aplicacin y rastrear la ejecucin de cdigo. Provee acceso sencillo al Active Directory. Provee un modelo abstracto de alto nivel para la manipulacin de las tareas de servicio del directorio de Microsoft Active Directory. Provee acceso a la funcionalidad de grficos bsicos GDI+. Contiene clases que extienden la interfaz de usuario en tiempo de diseo. Provee funcionalidad grfica avanzada (bidimensional y vectores). Incluye paletas de gradientes, la clase Matrix (usadas para definir transformaciones geogrficas) y la clase GraphicsPath. Provee de servicios de impresin de grficos. Provee funcionalidad de tipografa GDI+ avanzada. Permite a los usuarios crear una coleccin de fuentes. Contiene clases que definen informacin relacionada con la cultura, incluyendo lenguajes, el pas/regin, el calendario en uso, el formato de fechas, moneda, nmeros y el orden de cadenas. Indispensable su uso si se desarrollan aplicaciones de alcance internacional.

System.Data.SqlServerCE

System.Data.SqlTypes

System.Diagnostics

System.DirectoryServices System.DirectoryServices.ActiveDirectory

System.Drawing System.Drawing.Design System.Drawing.Drawing2D

System.Drawing.Printing System.Drawing.Text

System.Globalization

146

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

System.IO

Contiene tipos que permiten lectura sincrnica y asincrnica de flujos de datos y archivos. Contiene clases que proveen compresin y descompresin bsica de flujos de datos. Contiene clases para el control y uso de puertos. Provee clases que permiten la conexin, monitoreo y administracin de mensajes de colas en la red para enviar y recibir mensajes. Proveen una interfaz de programacin para los principales protocolos usados en redes actuales. Contiene clases para la configuracin programtica de System.Net. Contiene clases usadas para enviar correos electrnicos a un servidor SMTP (Simple Mail Transfer Protocol). Permite representar encabezados MIME (Multipurpose Internet Mail Exchange). Provee acceso a datos de trfico de datos, informacin de direcciones de red y notificaciones de cambios de direcciones de la computadora local. Tambin contiene clases para implementar Ping. Provee una implementacin de interfaces Windos Sockets(Winsock), para ayudar a los desarrolladores que necesitan control de acceso a la red. Provee de clases e interfaces que permiten a desarrolladores crear y configurar aplicaciones distribuidas. Provee de una estructura subyacente del sistema de seguridad de .NET Framework, incluyendo clases base para permisos. Provee servicios criptogrficos. Incluye codificacin y descodificacin segura de datos, as como muchas otras operaciones, como hashing, generacin de nmeros aleatorios, y autentificacin de mensajes. Contiene lenguaje de implementacin del certificado Authenticode X.509 v.3. Contiene clases que apoyan la creacin y validacin de firmas digitales XML.

System.IO.Compression System.IO.Ports System.Messaging

System.Net

System.Net.Configuration System.Net.Mail

System.Net.Mime System.Net.NetworkInformation

System.Net.Sockets

System.Runtime.Remoting

System.Security

System.Security.Cryptography

System.Security.Cryptography.X509Certificates System.Security.Cryptography.Xml

Captulo 5. Espacios de nombres y desarrollo de libreras

147

System.Text

Contiene clases para la representacin y conversin de sistemas textuales, como ASCII, Unicode, UTF-7 y UTF-8. Contiene clases que proveen acceso al motor de expresiones regulares de .NET Framework. Provee clases e interfaces que habilitan programacin multitarea. Provee de un componente temporizador, que permite disparar un evento en intervalo especfico. Contiene clases que permiten al cdigo participar en transacciones. Provee clases e interfaces que habilitan el modelo de peticin respuesta para ambientes Web, basados en el protocolo HTTP, adems del manejo de cookies. Contiene clases que son usadas para configurar ASP.NET. Contiene las capacidades principales, incluyendo autentificacin y manejo de errores, requerido para construir aplicaciones mviles ASP.NET. Provee clases e interfaces que habilitan el almacenamiento de datos desde un cliente especfico en una aplicacin Web en el servidor. Provee clases e interfaces que permiten crear interfaces de usuario en ambiente Web. Contiene clases que permiten crear elementos grficos de interfaz de usuario en una aplicacin Web. Contiene clases para crear aplicaciones basadas en Windows para aprovechar las caractersticas de la interfaz grfica disponibles en el sistema operativo de Microsoft Windows. Provee soporte de procesamiento XML. Contiene clases que son usadas para serializar documentos en formato XML.

System.Text.RegularExpressions System.Threading System.Timers

System.Transactions System.Web

System.Web.Configuration System.Web.Mobile

System.Web.SessionState

System.Web.UI System.Web.UI.WebControls

System.Windows.Forms

System.Xml System.Xml.Serialization

148

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

No son todos los espacios de nombres; la mayora tiene niveles jerrquicos de mayor profundidad que sera imposible tratar en este texto. Utilice la tabla como punto de partida para buscar ms informacin. En la ayuda de Visual Studio puede buscar .NET Framework Class Library, y de ah seleccionar un tema que le interese.

Uso de espacios de nombres


Tiempos de compilacin de CLR

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 preciso de sta. Una forma en que se pueden referir los recursos de BCL es a travs de lo que se conoce como nombres calificados (fully qualified name), que son la especificacin textual de la jerarqua de espacios de nombres que permite ubicar una clase o type (Namespace.Clase.Type). Es posible utilizar todas las clases disponibles de .NET Framework a travs de sus nombres calificados, pero eso no es del todo prctico pues en ocasiones stos pueden ser bastante largos (System.Runtime.Remoting.Channels.Http, por ejemplo). Una forma de obviar la escritura del nombre calificado completo es importando los espacios de nombres. Para ello se utiliza la instruccin 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 cdigo puede llegar a simplificarse bastante. Puede darse el caso de que en dos o ms ensamblados se repita el nombre de clases, referencias o mtodos; en ese caso, la ambigedad debe eliminarse a travs de nombres calificados, los cuales permiten definir el origen de los recursos referidos.

Captulo 5. Espacios de nombres y desarrollo de libreras

149

Los siguientes dos programas funcionaran de la misma forma: Sin uso de instruccin Imports:
Module Module1 Sub Main() System.Console.Write(Presione INTRO) system.Console.ReadLine() System.Console.WriteLine(Hola mundo.) End Sub End Module

Con uso de instruccin Imports:


Imports System.Console Module Module1 Sub Main() Write(Presione INTRO) ReadLine() WriteLine(Hola mundo.) End Sub End Module

Contaminacin de espacios de nombres y colisiones de nombre. Como puede apreciar, los espacios de nombres permiten obviar la jerarqua de clases que permite tener acceso a una clase o a un mtodo (type). Puede darse el caso, principalmente cuando un equipo de desarrollo trabaja sobre un mismo proyecto, de que dos o ms programadores denominen a un mtodo de la misma forma; cuando se da esa repeticin de nombres de mtodos en diferentes jerarquas, se dice que estamos ante contaminacin de espacios de nombres (namespace pollution). Si, existiendo contaminacin de nombres, en un mismo programa se tratan de utilizar mtodos homnimos, CLR es incapaz de diferenciarlos, por lo que se presenta el fenmeno de colisin de nombres (name collisions). Las colisiones de nombres se resuelven utilizando nombres calificados, mientras que la contaminacin de espacios de nombres se evita mediante una planeacin minuciosa del proyecto de desarrollo, adems de utilizar mtodos estructurados de desarrollo.

Creacin de namespaces propios


.NET Framework proporciona una cantidad enorme de clases, accesibles a travs de sus muchos espacios de nombres. Pero eso no es suficiente, pues todo lenguaje que presuma de ser extensible debe permitir a los desarrolladores agregar funcionalidad especfica que no est presente de manera genrica.

150

Aprenda 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 cdigo de una librera (programa de extensin de Microsoft Visual Basic), delimitando el contenido de la librera a travs del estatuto Namespace. 2. Compilar el cdigo de la librera como tipo library, con lo cual no se generara un archivo ejecutable (EXE), sino una librera de vnculos dinmicos (DLL). 3. Para hacer uso de la funcionalidad de una librera, es necesario hacer referencia a ella; eso se puede hacer desde Visual Studio (si se trata de una aplicacin Windows o Web, a travs de la opcin de men Project Add Reference...), o en tiempo de compilacin si se trata de una aplicacin de consola y no se utiliza Visual Studio. 4. Es opcional utilizar nombres calificados una vez que se establece la referencia. La sintaxis para crear un espacio de nombres es la siguiente:
Namespace

EspacioNombre Codigo de elementos

End Namespace

Donde EspacioNombre es el nombre a travs del cual se referirn los elementos contenidos en espacio de nombres que se genera. Una cosa importante a tomar en cuenta es que para crear una jerarqua dentro de un espacio de nombres es posible anidarlos, por lo cual una declaracin Namespace puede estar definida dentro de otra, creando el efecto EspacioNombre1.EspacioNombre2.Type.

Alias para los espacios de nombres


Codificar utilizando nombres calificados puede ser muy complicado debido a que, en ocasiones, los espacios de nombres no son muy cortos (de ah que recurriramos a importarlos). Esto plantea un nuevo problema: nos quedamos sin informacin con relacin a qu espacio de nombres contiene qu elementos. Un escenario ideal sera que los espacios de nombres no tuvieran el nombre muy largo, a fin de poder integrarlos al cdigo sin necesidad de mucho esfuerzo; con ello obtendramos informacin con relacin al espacio de nombres de origen y, al mismo tiempo, comodidad al codificar. En pocas palabras, queremos espacios de nombres con nombres no muy largos, pero tampoco de nombre inexistente.

Captulo 5. Espacios de nombres y desarrollo de libreras

151

Esto es posible si asignamos un alias al espacio de nombres. Un alias de importacin 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 travs de Alias.

Independencia de los ensamblados


Una referencia del ejecutable hacia el archivo DLL se realiza en el momento en que se genera el ejecutable, y la referencia es directa entre el ejecutable y la librera. El DLL se encuentra en el mismo directorio que la aplicacin; otros ensamblados podrn hacer referencia al DLL, incluso con el mismo nombre y no importa: el metadatos sabr reconocer qu librera le corresponde al ejecutable. Esta sencilla modificacin que aporta .NET tiene implicaciones trascendentales. Anteriormente, se generaba un componente o una librera y sta deba ser registrada en el Registro de Windows antes de poder ser utilizada (por lo general se almacenaba en un recipiente comn \Windows\System o \WINNT\System, segn el sistema). Cuando una librera se actualizaba, los programas que la utilizaban podran ya no ser compatibles, dando lugar al infierno de los DLL. Ahora, cada ejecutable puede disponer de su propia versin de la librera, y .NET no dejar que se pierdan las referencias entre libreras y ejecutables. En .NET, las libreras desarrolladas por el usuario tienen total independencia del Registro de Windows. Para distribuir una aplicacin, basta copiar el ejecutable y las libreras que utiliza. Sobra decir que no necesitar copiar las libreras 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 libreras se tienen por disponibles.

Referencias
Una referencia puede definirse como la especificacin de enlazado entre un programa y una librera, en donde la librera pone su funcionalidad a disposicin del programa hasta donde la accesibilidad lo permite.

152

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Las referencias pueden establecerse fcilmente 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 ms usuales para el tipo de aplicacin. En el Solution Explorer pueden observarse claramente, ya que bajo el nodo de un proyecto 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.

La ventana muestra varias fichas. En la ficha .NET podrn seleccionarse las libreras de .NET Framework o aquellas que se registren en GAC utilizando nombres fuertes (strong names). En la ficha COM se pueden seleccionar aquellas libreras COM que se desee utilizar, dado que la plataforma .NET les da soporte. En la ficha Projects es posible seleccionar 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 algn DLL. La ficha Recent permite invocar las libreras de reciente uso o creacin, a fin de encontrarlas sin buscar en todos lados.

Captulo 5. Espacios de nombres y desarrollo de libreras

153

En cualquiera de las fichas es posible seleccionar los componentes seleccionando la librera a referir y haciendo clic en el botn Ok, a fin de que las referencias queden establecidas.

Ejercicio 5.1
Creacin y consumo de una librera (DLL) basada en un espacio de nombres En este ejercicio se comprobar la forma en que funcionan los alcances de variables en Visual Basic, y la manera en que podemos aprovechar su manejo para preservar valores en memoria con eficiencia. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln).

Creacin de una librera DLL


2. Agregue a su solucin un proyecto Windows Class library, llamado MisUtilerias. Es muy importante que el proyecto sea una librera de clases, para que al compilar el proyecto se genere un ensamblado de extensin DLL. 3. Edite el programa de tal forma que aparezca como sigue:

Codificacin de
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

MisUtilerias - Continuar.vb

Imports System.Console Namespace Funciones Public Class Continuar Public Shared Sub EsperaINTRO() WriteLine() WriteLine(Pulse INTRO para continuar) ReadLine() End Sub End Class End Namespace

4. Esta librera generar el archivo MisUtilerias.DLL. Posee un espacio de nombres denominado Funciones, que a su vez contiene una clase llamada Continuar que tiene defi-

154

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

nido un mtodo llamado EsperarINTRO. El mtodo se encarga de mostrar un mensaje y esperar a que se pulse INTRO para continuar. Como lo recordar, hemos estado utilizando cdigo similar en los ltimos ejercicios, por lo que en ste constituye una manera de automatizar esa labor tan comn. 5. Es muy importante notar que la clase es pblica (Public) dado que le daremos un uso de librera, y deseamos que sea utilizable por cualquier proyecto (incluso aquellos que no pertenecen a la solucin). Tambin es importante ver que el mtodo es pblico 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 solucin (oprima las teclas Ctrl-Mays-S). 7. Compruebe que al generar el proyecto se haya creado una librera Busque en la siguiente ruta:
C:\APVBNETVS\Ejercicios\MisUtilerias\bin\Debug DLL

en su equipo.

Revisin de todos los elementos asociados a un proyecto, por medio de Solution Explorer
8. Agregue a su solucin un proyecto Windows Console Application, llamado meUtilerias. 9.
Consu-

Seleccione en Solution Explorer el proyecto ConsumeUtilerias. Haga clic en el botn Show All Files de la barra de herramientas de Solution Explorer. Con ello aparecern elementos que hasta el momento no haba visto. Vea el rbol jerrquico de recursos asociados a su proyecto. El que nos interesa ms en estos momentos es el nodo References; haga clic en dicho nodo con el fin de ver qu contiene.

Captulo 5. Espacios de nombres y desarrollo de libreras

155

10. Al seleccionar un Template al momento de crear un proyecto en Visual Studio, la herramienta sabe qu espacios de nombres son los ms comunes para el tipo de proyecto, y procede a establecer referencias con las libreras correspondientes. Eso nos libera del trabajo de establecer referencias que son obvias, dado un tipo de archivo. Como podemos comprobar, nuestra librera MisUtilerias no se encuentra dentro de las referencias, por lo que no podramos utilizar su funcionalidad en nuestro programa.

Establecimiento de una referencia a una librera 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 proyecto MisUtilerias. Haga clic en Ok.

12. Vea cmo al agregar la referencia, Solution Explorer actualiza el rbol de elementos del proyecto, incluyendo nuestra librera.

156

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Consumo de una librera programticamente


13. Ahora codifique el programa que consume la librera.

Codificacin de ConsumeLibrera
1 2 3 4 5 6 7 8 9 10 11 Imports System.Console Imports MisUtilerias.Funciones Module Module1

Module1.vb

Sub Main() WriteLine(Mensaje desde el programa) Continuar.EsperaINTRO() End Sub End Module

14. Vea cmo al editar las lneas de importacin de espacios de nombres, ya tenamos disponible nuestro espacio de nombres en Intellisense.

Captulo 5. Espacios de nombres y desarrollo de libreras

157

15. Se importa el nombre de la librera y el espacio de nombres (lnea 2). Ya en el cdigo, slo es necesario invocar el nombre de la clase y el type (lnea 8). Podramos haber simplificado an ms, incluyendo la clase en el Imports.

Ejecucin guiada de ConsumeLibrera

Module1.vb

16. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (oprima Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (oprima F5). 17. Si todo sali bien, el programa debe producir el siguiente resultado:
Mensaje desde el programa Pulse INTRO para continuar

18. Con este pequeo ejemplo ya comprob cmo se generan bibliotecas de clases en .NET y cmo se consumen desde otros proyectos. FIN DEL EJERCICIO *

Ejercicio 5.2
Utilizacin del depurador (Debug) de Visual Studio y la ejecucin lnea a lnea basada en puntos de interrupcin (breakpoints) Se agregarn puntos de interrupcin a una aplicacin, y se revisarn las opciones de ejecucin lnea a lnea usando Visual Studio.

158

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

1. Usando Visual Studio, abra la solucin Ejercicios. 2. En el Solution Explorer encuentre el nodo correspondiente a ConsumeLibreria Module1.vb. Haga doble clic en dicho nodo para editar el cdigo. Establezca el proyecto como proyecto de inicio (StartUp Project).

Establecimiento de un punto de interrupcin (breakpoint)


3. Seleccione la lnea Sub Main() y establezca un punto de interrupcin con la opcin Debug Toggle Breakpoint (F9), o bien, haciendo clic en el borde externo izquierdo de Text Editor, junto a la lnea en la que desea agregar un punto de interrupcin. Aparecer una marca en el borde externo izquierdo de Text Editor, indicando que la lnea tiene un punto de interrupcin.

4. Genere nuevamente la solucin y ejectela.

Ejecucin lnea por lnea (code stepping)


5. Al momento de llegar a la lnea 6 el programa se detendr.

6.

Al lanzar a ejecucin una aplicacin (oprimiendo la tecla F5), se entra en modo debug, que es un estado de ejecucin en donde Visual Studio provee todas las herramientas para la depuracin de aplicaciones en tiempo de ejecucin. Seleccione repetidamente Debug Step Over (F10), hasta terminar la ejecucin del programa. La ejecucin continuar en modo lnea a lnea. Al encontrar un llamado a un recurso externo al programa (clases, libreras, funciones, etctera), las tomar como una sola lnea; es decir, no profundizar en lo que pasa dentro del recurso externo al programa. Las lneas que se vayan ejecutando aparecern resaltadas en amarillo.

7.

Captulo 5. Espacios de nombres y desarrollo de libreras

159

8.

Ejecute nuevamente la aplicacin (oprima F5). Seleccione repetidamente Debug Step Into (F11), hasta terminar la ejecucin del programa. La ejecucin continuar en modo lnea a lnea. Al encontrar un llamado a un recurso externo al programa (clases, libreras, funciones, etctera), realizar tambin una inspeccin lnea a lnea de dichos recursos. Las lneas que se vayan ejecutando aparecern resaltadas en amarillo. Ejecute nuevamente la aplicacin (oprima F5). Seleccione repetidamente Debug Step Into (F11), hasta llegar a las lneas de cdigo de la librera de MisUtilerias. Seleccione Debug Step Out (Mays-F11) para terminar de ver el contenido de la librera y continuar con la ejecucin en el programa que mand llamar la librera. En cualquier momento, cuando se est en tiempo de depuracin, se puede continuar la ejecucin normalmente (Continue), detener momentneamente la ejecucin (Break All) o terminar la depuracin (Stop Debugging).

9.

10.

Modificacin de programas en tiempo de ejecucin (Edit and Continue)


> Lo nuevo
Anteriormente, una vez que se iniciaba la depuracin de un programa (oprimiendo F5), no haba forma de modificar el programa en el momento. Si detectbamos un error de ortografa en un mensaje del sistema, por ejemplo, y nos percatbamos del error al estar ejecutando el programa lnea por lnea, no era posible hacer la modificacin en el momento. Si queramos corregir el error de inmediato era necesario suspender la ejecucin, hacer las modificaciones, volver a construir la aplicacin y volver a ejecutarla. En Visual Studio 2005, en cambio, es posible modificar un programa en tiempo de depuracin, viendo los cambios de manera inmediata.

11. Ejecute nuevamente la aplicacin (F5). Al llegar al punto de interrupcin, contine la ejecucin con Step Over (F10). Al llegar a la lnea 7, que despliega Mensaje desde el programa, cambie en ese momento el mensaje por Mensaje editado en tiempo de depuracin. 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

160

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

tiempo de depuracin. A esta capacidad de Visual Studio se le denomina Edit and Continue, y slo est disponible si el archivo est en vista de cdigo fuente (source view).

Puntos de interrupcin condicionales


12. En ocasiones queremos que un punto de interrupcin detenga la depuracin slo en caso de que sea necesario. La necesidad de interrupcin debe estar expresada en trminos de una condicin lgica. A los puntos de interrupcin que detienen la depuracin slo con base en una condicin se les llama puntos de interrupcin condicionales. 13. En el Solution Explorer encuentre el nodo correspondiente a AreaRectngulo Module1.vb. Haga doble clic en dicho nodo para editar el cdigo. Establezca el proyecto como proyecto de inicio (StartUp Project). 14. Coloque un punto de interrupcin en la lnea Base=CInt(Entrada). 15. Coloque el puntero del ratn sobre el punto de interrupcin, despliegue el men contextual y seleccione Condition....

16. Aparecer la ventana Breakpoint Condition, en donde se podr especificar la condicin que provocar que el punto de interrupcin detenga la depuracin. Especifique que si el dato proporcionado es menor o igual a cero se detenga la depuracin (CInt(Entrada)<=0).

Captulo 5. Espacios de nombres y desarrollo de libreras

161

17. Inicie la depuracin de la solucin (oprima F5). Cuando el programa le pregunte la base, proporcione el nmero 10. Proporcione una altura de 15 y vea cmo el programa no detiene la depuracin en ningn momento. 18. Inicie nuevamente la depuracin de la solucin (oprima F5). Cuando el programa le pregunte la base, proporcione el nmero 0. Al cumplirse la condicin, el programa se detiene.

Habilitacin e inhabilitacin de puntos de interrupcin


19. En ocasiones se desea iniciar la depuracin de un programa sin tener que lidiar con los puntos de interrupcin. Una alternativa definitiva es eliminar los puntos de interrupcin; si no se desea que los puntos de interrupcin se pierdan pero que tampoco detengan la depuracin en un momento dado, la opcin ms recomendable es inhabilitarlos. 20. Seleccione la opcin Debug Disable All Breakpoints. Inicie la depuracin y proporcione como valor base el 0. En teora debera detenerse la depuracin, dado que la condicin del punto de interrupcin se cumple; sin embargo, la depuracin no se detiene. 21. Seleccione la opcin Debug Enable All Breakpoints. Inicie la depuracin y proporcione como valor base el 0. Vea cmo el punto de interrupcin ha vuelto a su comportamiento normal.

Eliminacin de los puntos de interrupcin (breakpoints)


22. Para eliminar un punto de interrupcin, 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 interrupcin agregados, hay que ir al men Debug Delete All Breakpoints (Crtl-Mays-F9). Aparecer una ventana de confir-

162

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

macin que debe responder afirmativamente en caso de que desee eliminar los puntos de interrupcin. 24. Elimine todos los puntos de interrupcin que tiene su programa. 25. Guarde todos los cambios en la solucin. FIN DEL EJERCICIO*

Ejercicio 5.3
Utilizacin de Command Window En este ejercicio se comprobar el uso de Command Window para la ejecucin de comandos de Visual Studio en forma textual. 1. Usando Visual Studio, abra la solucin Ejercicios. 2. En el Solution Explorer encuentre el nodo correspondiente a Alcance Module1.vb. Haga doble clic en dicho nodo para editar el cdigo. 3. Establezca el proyecto como proyecto de inicio (StartUp Project).

Escritura de comandos de Visual Studio usando Command Window


4. Casi todas las actividades que es posible realizar en Visual Studio a travs de opciones de men o la barra de herramientas tienen un equivalente textual que es posible aplicar desde la lnea de comandos de Visual Studio (Command Window). Los usuarios de FoxPro estarn habituados a dicha ventana, dado que muchas operaciones pueden ser especificadas ms rpidamente de forma textual, sobre todo cuando se es rpido escribiendo y cambiar del teclado al ratn implica ms esfuerzo. 5. Para mostrar Command Window se puede utilizar la opcin View Other Widows Command Window (teclas Ctrl-Alt-A). En tiempo de depuracin, Command Window aparece automticamente.

Captulo 5. Espacios de nombres y desarrollo de libreras

163

6. Esta ventana es la lnea de comandos de Visual Studio. Al escribir un comando y presionar Intro, ste se ingresa a Visual Studio y se ejecuta. Los comandos son muy parecidos a las opciones que tendramos que seleccionar en el men; por ejemplo, la opcin File Close tiene su comando equivalente, que es File.Close. Para simplificar an ms, algunos comandos poseen alias de comando (command alias), que permiten reducir la escritura de comandos. Por ejemplo, Close es el alias de File.Close. En otras palabras, escribir Close en Command Window es lo mismo que seleccionar en el men File Close. El proceso se simplifica an ms dado que Command Window tiene Intellisense, y adems nos permite definir nuestros propios comandos. Si es rpido con los dedos, presionar Ctrl-Alt-A, Close es equivalente a seleccionar la opcin File Close. La ms importante contribucin de Command Window es permitir la ejecucin de comandos que no aparecen en ninguna opcin de men en Visual Studio. 7. stos son algunos de los comandos ms usuales que cuentan con un alias predeterminado 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 F1Help 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 cls 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.AddNewProject 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.F1Help 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

164

Aprenda 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

Lcase Ucase Memory Memory1 Memory2 Memory3 Memory4 nf np NewProj NextBook of Open op ParamInfo PrevBook ? print props ?? redo registers rtc SaveAll SaveAs save ScriptOnly shell nav navigate g t pr p q StopFind SwapAnchor tabify TaskList Threads TileH TileV ToggleBook bp WordWrap toolbox undo Untabify code designer Watch

Edit.MakeLowercase Edit.MakeUppercase Debug.Memory1 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.SaveSelectedItemsAs File.SaveSelectedItems View.ShowScriptOnly Tools.Shell View.ShowWebBrowser Debug.Start Debug.StepInto Debug.StepOut Debug.StepOver Debug.StopDebugging Edit.FindInFiles /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

Captulo 5. Espacios de nombres y desarrollo de libreras

165

8. La mayora de los comandos puede inferirse fcilmente. Slo piense cmo estn localizables en los mens. Por ejemplo, para iniciar la depuracin de una solucin la opcin de men es Debug Start Debugging; el comando es Debug.Start, lo cual es bastante obvio. Aproveche Intellisense en Command Window para descubrir los comandos que le interesan. 9. En Command Window escriba los siguientes comandos:
>GotoLn 7 >Debug.ToggleBreakpoint >Debug.Start >Debug.StepOver >Debug.StepOver >Debug.StepOver >Debug.StopDebugging >Debug.DeleteAllBreakpoints

10. Lo que hicimos fue ir a la lnea 7 del cdigo, establecer un punto de interrupcin, iniciar la depuracin, ejecutar tres lneas, lnea por lnea, y detener la depuracin. En el caso de comandos que se repiten, podemos ahorrarnos la escritura consultando la historia de comandos de Command Window (oprimiendo la tecla de direccin hacia arriba). FIN DEL EJERCICIO*

Ejercicio 5.4
Uso de herramientas avanzadas para la depuracin

5
Se agregarn puntos de interrupcin a una aplicacin y se revisarn las opciones de ejecucin lnea a lnea, usando Visual Studio. 1. Usando Visual Studio, abra la solucin Ejercicios. 2. En el Solution Explorer encuentre el nodo correspondiente a Alcance Module1.vb. Haga doble clic en dicho nodo para editar el cdigo. Establezca el proyecto como proyecto de inicio (StartUp Project).

Apilado de herramientas en Visual Studio


3. Seleccione la lnea Module
Module1

y establezca un punto de interrupcin.

4. Inicie la depuracin de la solucin (tecla F5). 5. En tiempo de depuracin aparecen dos herramientas principales: Auto y Command Window. En realidad son muchas ms herramientas, slo que no estn visibles por el momento. Como podr comprobar, en tiempo de depuracin Command Window comparte su espacio con otras herramientas: Call Stack, Breakpoints, Immediate Window y Output.

166

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

6. Por otro lado, Autos comparte su espacio con otras herramientas: Locals y Watch 1.

7. Cuando hay varias herramientas apiladas en un mismo espacio en Visual Studio, cada una constituye una ficha de seleccin horizontal (Tabs). La forma de seleccionar alguna de las herramientas es haciendo clic sobre la ficha. En caso de que las herramientas estn en modo de ocultacin automtica, lo que usted ver sern las pestaas de seleccin vertical de las fichas; cumplen con la misma funcionalidad que las horizontales, slo que se distribuirn 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 depuracin. A estas herramientas se les da el nombre de ventanas de variables (variable windows). Ordinariamente se trata de Locals, Autos, Watch y Quick Watch. Cada una de las ventanas muestra tres columnas: nombre de la variable (name), valor (value) y tipo de dato (type). 9. La ventana Autos sirve para mostrar las variables utilizadas por la lnea de cdigo que actualmente se est ejecutando, as como las variables utilizadas por las lneas anteriores a la que se est ejecutando, dentro de un mismo alcance. Esta ventana cambia dinmicamente 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 experimenta la ventana Autos.

Captulo 5. Espacios de nombres y desarrollo de libreras

167

11. Vea cmo se muestran dos variables. Al llegar a Sub Main() detecta que el procedimiento tiene una variable llamada Texto2, que an no toma valor. La variable Texto1, aunque no forma parte del procedimiento, se muestra porque est disponible dado que tiene alcance de mdulo. En otras palabras, es una variable utilizada por las lneas anteriores a la actual. 12. Seleccione la pestaa Locals. Esta herramienta slo mostrar las variables locales del alcance en que se encuentra la lnea de cdigo que actualmente se est ejecutando. Dada la lnea en la que nos encontramos, slo aparecer la variable Texto2.

13. Seleccione Watch 1. Esta herramienta permite agregar variables y expresiones que deseamos saber cunto valen en todo momento. Esta herramienta no carga variables automticamente, 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 slo el contenido de una variable o expresin en un momento dado. Por ejemplo, si queremos saber qu valor tiene la variable Texto4 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, Texto4 no est dentro del alcance en donde nos encontramos, por lo cual se reporta como no declarada.

168

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

15. Si estando en Quick Watch hacemos clic en Add Watch, la variable que evaluamos se agregar a Watch.

Ventanas de inspeccin de cdigo


16. Seleccione Call Stack, que se encuentra apilada junto con Command Window. En esta herramienta se muestran los programas, procedimientos y mtodos que se estn ejecutando en un momento dado. En caso de que un procedimiento llame a otro procedimiento, aparecern los dos.

17. En nuestro caso, muestra que actualmente nos encontramos en la lnea 37, en el Procedimiento2() que fue llamado en la lnea 18 por el procedimiento Main(). Saber de dnde nace la ejecucin de un procedimiento ayuda a resolver el origen de los problemas, en caso de que se presenten. Resulta interesante ver que Call Stack revisa el origen de los procedimientos hasta llegar al ensamblado (Alcance.exe), dando informacin del proyecto (Alcance), el programa (Module1) y finalmente el procedimiento.

Captulo 5. Espacios de nombres y desarrollo de libreras

169

18. Seleccione Breakpoints, que sirve para mostrar todos los puntos de interrupcin y su estado. Con esta herramienta podemos saber la lnea en que se encuentran, si estn activos o no, si les aplican condiciones y en qu casos detendrn la depuracin. En nuestro caso aparece el nico punto de interrupcin que agregamos.

19. Seleccione Immediate Window, que sirve para evaluar expresiones y variables de una forma programtica y a peticin. 20. Para desplegar valores podemos utilizar el comando Print, con su alias ? 21. Escriba en Immediate Window la siguientes instrucciones:
? Texto1 Debug.StepInto ? Texto1

22. Lo que hicimos fue mostrar el contenido de Text1. Luego provocamos que la depuracin avanzara en modo Step Into, con lo cual la variable adquiri valor; se volvi a mostrar el contenido de la variable Texto1 y pudimos comprobar el nuevo valor de la variable. 23. Detenga la depuracin, elimine todos los puntos de interrupcin y guarde su solucin. FIN DEL EJERCICIO*

170

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

MAPA

MENTAL DEL CAPTULO

Captulo 5. Espacios de nombres y desarrollo de libreras

171

TERMINOLOGA
Alias de importacin, 151 Aplicacin, 141 Autos, 166 Breakpoint, 158 Code steping, 158 Edit and continue, 160 Ejecucin lnea por lnea, 158 Espacio de nombres, 141 Extensibilidad, 141 Fully qualified name, 148 Imports, 148 Locals, 166 Namespace, 141 Nombres calificados, 148 fuertes, 152 Punto(s) de interrupcin, 158 condicionales, 160 Quick Watch, 166 References, 152 Referencia, 151 Strong names, 152 Variable windows, 166 Watch, 166

PREGUNTAS
5.1 Cules son los espacios de nombres principales de BCL? 5.2 Qu funcin tiene el estatuto Import? 5.3 Qu beneficio deriva de programar libreras? 5.4 Mencione los espacios de nombres que cree usted que contengan la funcionalidad necesaria para dar soporte a sus aplicaciones profesionales.

172

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Notas:

Captulo 5. Espacios de nombres y desarrollo de libreras

173

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Sistema lgico de organizacin de clases de .NET Framework, de acuerdo a su funcionalidad: a) Global Assembly Cache b) Biblioteca de Clases Base c) Espacios de nombres 2. Es la especificacin textual de la jerarqua de espacios de nombres que permite ubicar una clase o type: a) Nombres calificados b) Espacios de nombres c) Object Hierarchy 3. Es la instruccin a travs de la cual se especifican los espacios de nombre que utilizar un programa: a) Imports b) Reference c) Using 4. Es la equivalencia de nombre que le damos a un espacio de nombres: a) Alias de importacin b) Reference c) Nombre calificado 5. Es el fenmeno que se presenta cuando en un programa se refieren dos mtodos, pertenecientes a espacios de nombres diferentes, pero que tienen el mismo nombre: a) Colisin de nombre b) Contaminacin de espacios de nombres c) Concurrencia de nombres

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. 7. 8. 9. 10. Los espacios de nombres reflejan la jerarqua lgica y fsica de las clases en .NET Framework. Las libreras de .NET Framework son totalmente independientes del Registro de Windows. Las principales jerarquas de espacios de nombres en .NET Framework son System y Objects. El explorador de objetos permite verificar los objetos que estamos utilizando y sus caractersticas. En .NET, cada programa puede disponer de su propia versin de una librera, como consecuencia de la informacin contenida en el metadatos.

CAPTULO

Manejo de operadores
Objetivos: Aprender el manejo de los operadores aritmticos, de asignacin, de comparacin y lgicos, con todas sus variantes. 1. Reconocer los operadores aritmticos y la forma en que se emplean. 2. Sabr qu son los operadores de asignacin y de asignacin incluyente, y cmo se manejan. 3. Se familiarizar con los operadores comparativos y cmo se manejan. 4. Aprender a manejar los operadores Is y Like, para llevar a cabo comparaciones complejas de datos String. 5. Entender qu son los operadores lgicos y los operadores lgicos de circuito corto, y cmo se manejan. 6. Comprender cul es la prioridad de ejecucin de los operadores, y cmo se maneja sta utilizando parntesis.

175

176

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Operadores aritmticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores de asignacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Expresin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores de asignacin incluyente . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores comparativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Consideraciones relativas al cdigo ASCII . . . . . . . . . . . . . . . . . . . . . . . Option Compare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores Is, IsNot y TypeOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operador Like . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores lgicos de circuito corto . . . . . . . . . . . . . . . . . . . . . . . . . . Tabla de comportamiento de operadores lgicos . . . . . . . . . . . . . . . . . Prioridad entre operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uso de parntesis para otorgar preferencia de ejecucin . . . . . . . . . . Utilizacin general de operadores de Visual Basic . . . . . . . . . . . Comentarios en bloques de cdigo . . . . . . . . . . . . . . . . Uso de Clipboard Ring . . . . . . . . . . . . . . . . . . . . . . . . . . Seleccin basada en bloques de cdigo (Block Selection) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uso de operadores de asignacin incluyente y operadores de circuito corto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 178 178 179 180 181 182 183 183 185 187 188 189 190 191 192 193 195 196 200 201 201 203

Captulo 6. Manejo de operadores

177

Sabemos que el procesador constituye el corazn de un sistema de computacin: ah es donde esencialmente se lleva a cabo el procesamiento de la informacin en forma de operaciones aritmticas y lgicas. Los operadores son los elementos de que se vale un lenguaje de programacin para la transformacin de expresiones mediante clculos 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 cmo se definen; el presente captulo explica que no slo es importante declarar y almacenar datos, sino manipularlos de tal forma que a partir de ellos se genere informacin nueva. sta es la esencia del cmputo.

Operadores aritmticos
Quin no conoce los operadores aritmticos? Debido a que forman parte de la educacin bsica difcilmente podramos agregar algo que no se sepa con respecto a ellos. Quiz lo nuevo sea la forma en que Visual Basic utiliza los operadores aritmticos. No obstante lo obvio del tema, para no ser omisos definiremos a los operadores aritmticos como los smbolos que producen, a partir de dos expresiones numricas conocidas, una nueva expresin numrica, como resultado de la aplicacin de un clculo aritmtico entre aqullas. El lenguaje dispone de los siguientes operadores aritmticos bsicos:
+ * / \ Mod ^ Suma (concatenacin) Resta Multiplicacin Divisin Divisin entera Mdulo Exponenciacin Suma expresiones numricas. Concatena expresiones de tipo String. Representa la diferencia entre dos nmeros o especifica la condicin negativa de uno. Multiplica dos nmeros. Divide un nmero entre otro. Divide un nmero entre otro, dando un resultado necesariamente entero. Divide un nmero entre otro, dando como resultado el residuo. Sirve para elevar un nmero a una determinada potencia; un nmero puede ser negativo si el

exponente es un entero.

178

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

La forma en que se resuelven este tipo de operadores es la siguiente: Resultado = Expresin1 Operador Expresin2 Donde Expresin1, Expresin2 y Resultado son siempre datos numricos; Operador es el operador aritmtico 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 divisin de un Integer 3, entre 2, no dar un nmero Integer. NOTA
En el caso de los datos de tipo String, es posible utilizar el operador de suma, que se encarga de concatenar o unir las expresiones. Para evitar la ambigedad del operador +, Visual Basic acepta el uso del smbolo & para concatenacin de expresiones String. En realidad, la concatenacin no se considera una operacin aritmtica.

Operadores de asignacin
Los operadores de asignacin son los que permiten asignar un valor a una variable o propiedad. El ejemplo clsico 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 expresin vlida para el tipo de dato de Variable.

Expresin
Aunque puede resultar obvio, una expresin es un valor, existente o derivado: es expresin existente si corresponde a una literal vlida para un determinado tipo de dato, o una variable que la contenga; es expresin derivada, cuando es el resultado de someter varios valores existentes, sean stos variables o literales, a la accin de operadores. Vea los siguientes ejemplos de expresiones: 4 A 4+5 3=2 A & B Existente. Valor numrico 4 Existente. Valor String A Derivado. Valor numrico 9 Derivado. Valor lgico False, pues 3 y 2 no son iguales Derivado. Valor de concatenacin String AB

Captulo 6. Manejo de operadores

179

Considere los siguientes ejemplos, despus de definir la siguiente variable:


Dim Edad As Integer = 20

Expresiones que podemos utilizar:


Edad str(Edad) Edad: & Str(Edad)

La variable misma La transformacin de la variable La transformacin de la variable y otras literales

Operadores de asignacin incluyente


Son operadores de asignacin incluyente aquellos que consideran el valor que posee la variable o propiedad a la que se le asigna el valor como primera expresin de una operacin, asignando el resultado de la operacin a la variable misma. Los operadores de asignacin incluyente existen para los siguientes operadores: ^, *, /, \, +, , &, y la forma de representarlos es el operador seguido inmediatamente por un signo de igual. Veamos las siguientes asignaciones equivalentes:
x = x +1 x = x-1 x = x * 4 x = x ^ 2

Es lo mismo que Es lo mismo que Es lo mismo que Es lo mismo que

x += 1 x = 1 x *= 4 x ^= 2

Vea los siguientes ejemplos:


Hace que Var1 Si Var1 vale 10 10 12 10 10 ABC 10 Y Var2 vale 3 3 3 3 3 DEF 3 La operacin var1 ^= var2 var1 *= var2 var1 /= var2 var1 \= var2 var1 += var2 var1 &= var2 var1 -= var2 valga 1000 30 4 3 13 ABCDEF 7

180

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Operadores comparativos
Los operadores comparativos permiten comparar expresiones, una en relacin con otra, para dar como resultado un valor de falso (False), verdadero (True) o nulo (Null), dependiendo de si la comparacin 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 especficas en donde la afectacin de un valor es importante. La siguiente tabla presenta los operadores comparativos que Visual Basic maneja:
Operador < (Menor que) <= (Menor o igual que) > (Mayor que) >= (Mayor o igual que) = (Igual a) <> (Distinto de) Verdadero si expresin1 < expresin2 expresin1 <= expresin2 expresin1 > expresin2 expresin1 >= expresin2 expresin1 = expresin2 expresin1 <> expresin2 Falso si expresin1 >= expresin2 expresin1 > expresin2 expresin1 <= expresin2 expresin1 < expresin2 expresin1 <> expresin2 expresin1 = expresin2 Nulo si expresin1 o expresin2
= Null

expresin1 o expresin2
= Null

expresin1 o expresin2
= Null

expresin1 o expresin2
= Null

expresin1 o expresin2 = Null expresin1 o expresin2


= Null

La forma en que se resuelven este tipo de operadores es la siguiente: Resultado = Expresin1 Operador Expresin2 Expresin1 y Expresin2 pueden ser cualquier tipo de expresiones comparables entre s. Resultado ser siempre lgico (True, False), o nulo (Null). Operador es el operador utilizado para la comparacin.

Captulo 6. Manejo de operadores

181

Algunos ejemplos del uso de estos operadores son:


A = B 1 > 0.5 2 >= 2 S < s

Retorna False Retorna True Retorna True Retorna True

Tome en cuenta que las letras maysculas, para efectos de comparacin, tienen un valor en cdigo ASCII menor a las minsculas; por tanto, son menores. Adicionalmente, la A es menor que la Z.

Consideraciones relativas al cdigo ASCII


El juego de caracteres de siete bits denominado ASCII (American Standard Code Information Interchange / Cdigo Estndar Estadounidense para el Intercambio de Informacin) es ampliamente utilizado para representar letras y smbolos de un teclado estndar de Estados Unidos. El juego de caracteres ASCII es igual que los primeros 128 caracteres (0-127) del juego de caracteres ANSI, utilizado por las mquinas antiguas. Es importante que conozca algunas referencias del cdigo ASCII que pueden serle de utilidad:
Cdigo ASCII 8 13 32 64 92 Cdigo ASCII 48 al 57 65 al 90 97 al 122 225, 233, 237, 243, 250, 241 Representa BackSpace (RETROCESO) Enter (INTRO) SpaceBar (BARRA ESPACIADORA) @ \ Representa 0 al 9 A a la Z a a la z , , , , ,

Algunas personas, sobre todo aquellas que no tienen su teclado configurado adecuadamente, saben que presionando la tecla ALT y las correspondientes del teclado numrico a un cdigo ASCII, ste aparecer. Para ello es necesario que el teclado nu-

182

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

mrico est activado (teniendo el BLOQ NUM / NUM LOCK activado). Por ejemplo:
Alt + 64

equivale a teclear

Visual Basic, por otro lado, tiene funciones que permiten obtener la representacin simblica de un cdigo ASCII, as como el cdigo ASCII a partir de una representacin simblica. Las funciones que lo permiten son Chr( ) y Asc( ), respectivamente. Estas funciones emplean la siguiente sintaxis:
Chr(CdigoASCII ) Asc(Caracter)

Por ejemplo:
Chr(64) Asc(@) @ 64

Option Compare
Uno de los conceptos importantes relacionado con la comparacin de datos (especficamente de los de tipo String), es su sensibilidad al uso de maysculas y minsculas. Se dice que un esquema de comparacin es case-sensitive cuando una comparacin es sensible a la diferencia entre maysculas y minsculas (A a). Se dice que un esquema de comparacin es non case-sensitive, cuando una comparacin no lo es (A = a). En el caso de Visual Basic, podemos especificar de qu manera queremos que nuestros 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 realizarn bajo el esquema insensible al uso de maysculas y minsculas; si se especifica Option Compare Binary, las comparaciones se realizarn bajo el esquema sensible.
Option Compare

debe especificarse al inicio de los programas, antes de cualquier lnea de cdigo. Si se omite la especificacin, el esquema de comparacin ser sensible (Binary).

Captulo 6. Manejo de operadores

183

Operadores Is, IsNot y TypeOf


Adems de los operadores comparativos comunes, Visual Basic proporciona dos operadores comparativos especiales: Is y Like. El operador Is es un operador que determina si una variable hace referencia a la misma posicin de memoria que otra. La forma en que se resuelve este operador es la siguiente: Resultado = Expresin1 Is Expresin2 Expresin1 y Expresin2 deben ser variables reference type. Resultado siempre es lgico (True, False).
Is

devolver verdadero (True) si las variables comparadas refieren a la misma posicin 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 posicin que otro. Anteriormente, la tarea se deba realizar combinando los operadores Not e Is, de la siguiente forma:
If Not Objeto1 Is Objeto2 Then WriteLine(Diferentes)

Dado que esta expresin 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 posicin de memoria. La lnea de cdigo quedara como sigue:
If Objeto1 IsNot Objeto2 Then WriteLine(Diferentes)

En ocasiones la comparacin 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 verdadero en caso de que un objeto sea de un tipo determinado. Por ejemplo, si deseamos saber si la variable X es de tipo Integer, tendramos 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 trminos de igualdad, sino en trminos de cumplimiento de un patrn determinado. Este operador es especialmente til cuando se verifica si una cadena de caracteres compuesta obedece a un formato predefinido. Imagine un cdigo de producto que siempre sea de tres letras, un guin y cuatro nmeros; en tal caso se tienen dos opciones: utilizar Like

184

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

o desarrollar una rutina que analice carcter por carcter la expresin y sus posiciones. Sobra decir que utilizar Like es mucho ms efectivo. La forma en que se resuelve este operador es la siguiente: Resultado = Expresin1 Like Expresin2 Expresin1 debe ser una expresin de tipo String; Expresin2 es un patrn String que se pretende reconocer como existente en Expresin1. Resultado siempre es lgico (True, False).
Like retornar verdadero (True) si el patrn a buscar es reconocido dentro del dato String

base de la comparacin, y falso (False) en caso de que no se reconozca. El patrn a buscar, llamado patrn nominado, es una literal conformada por caracteres especiales que representan el contenido de caracteres a buscar; a continuacin una tabla que muestra dichos caracteres y su significado.

Carcter de patrn ? * # [lista] [!lista]

Significado Cualquier carcter Varios caracteres o ninguno Cualquier dgito (0-9) Cualquier carcter de la lista Cualquier carcter que no est en la lista

Considere los siguientes ejemplos:


F Like F 24/10/2002 Like ##/##/#### ABC Like AB* MP3 Like [A-Z][A-Z]# MPG Like [A-Z][A-Z]# MP3 Like [A-Z][A-Z]? MPG Like [A-Z][A-Z]? AMERICA Like A*A HP2992 Like [!H]* DP2992 Like [!H]* micorreo@mail.com Like *@*

Devuelve True Devuelve True Devuelve True Devuelve True Devuelve False Devuelve True Devuelve True Devuelve True Devuelve False Devuelve True Devuelve True

Captulo 6. Manejo de operadores

185

Recomendamos utilizar los patrones para determinar la validez de formatos mixtos de datos; por ejemplo, claves de cuatro letras y tres nmeros. Si lo que va a evaluar son formatos ms estndar, como nmeros o fechas, recomendamos otras funciones ms sofisticadas como IsNumeric() o IsDate().

Operadores lgicos
Los operadores lgicos son aquellos que sirven para unir o negar condiciones, produciendo un valor lgico. Los operadores lgicos bsicos son:
Not Niega el resultado de una condicin. Revierte el valor; si la condicin que afecta es
True

producir False, y viceversa.

And Cuando de entre dos condiciones las dos deben ser True para que en su conjunto

la expresin sea True. (Con todas las condiciones True, devolver True).
Or Cuando de entre dos condiciones, al menos una debe ser True para que en su con-

junto la expresin sea True. (Con al menos una condicin True, devolver True.)
Xor Cuando entre dos condiciones, al menos una cumple por True, pero no las dos.

La forma en que se resuelven este tipo de operadores es la siguiente: Resultado = [Expresin1] Operador Expresin2 Expresin1 y Expresin2 son expresiones de tipo lgico. En el caso de Not, Expresin1 no se debe poner, ya que el operador acta sobre una sola expresin. Resultado ser siempre lgico (True, False). Cuando una expresin lgica se compone de una sola comparacin, se dice que es una expresin lgica simple debido a que se resolver en slo un tiempo; si involucra dos o ms comparaciones, o la utilizacin de un operador lgico, se dice que es una expresin lgica compuesta, debido a que la expresin lgica deber resolverse en dos o ms tiempos (se resuelve la comparacin y luego se resuelve dentro del contexto en que se encuentra). Una expresin lgica compuesta siempre se compone de expresiones lgicas simples, afectadas por operadores lgicos que las obligan a resolverse como una sola expresin lgica.

186

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejemplos:

Not True Not False Not A = B A = B And 1 > 0.5 A = B Or 1 > 0.5

Es False, porque es lo contrario a True. Es True, porque es lo contrario a False. Es True, porque A = B es False, pero negado es True. Es False, porque no todas las condiciones son True. Es True, porque al menos una condicin es True.

En caso de tenerse ms de dos condiciones conjuntas, entra en operacin lo que se conoce como preferencia, que consiste en determinar el orden en que las condiciones u operaciones se han de resolver. Por ejemplo:
A = B OR 1 > 0.5 AND 2 >= 2 AND S > s

es False. Las condiciones se resuelven de izquierda a derecha. Vea la explicacin en la figura 6.1: FIGURA 6.1 Resolucin de una expresin con mltiples condiciones

Primero se resuelven las condiciones de comparacin. Una vez resueltas las condiciones de comparacin, se sigue el orden de izquierda a de-

recha: se resuelve la primera condicin de tipo lgico; el resultado de sta forma parte de la siguiente condicin, y as hasta terminar.
La expresin inicia siendo una expresin lgica compuesta, formada por cuatro expre-

siones lgicas simples, que con la ayuda de tres operadores lgicos se ven obligadas a resolverse como una sola expresin lgica que termina con un valor False.

Captulo 6. Manejo de operadores

187

Las condiciones se resuelven como si tuvieran parntesis imaginarios:


( ( (A = B Or 1 > 0.5) And 2 >= 2) And S > s)

En donde las condiciones encerradas en los parntesis de mayor profundidad se resuelven primero. Si usted agrega de manera explcita parntesis en las condiciones, les asignar preferencia. Por ejemplo, cambiemos un poco el orden del ejemplo anterior y veamos qu sucede:
S > s Or 2 >= 2 And 1 > 0.5 And A = B

De acuerdo a lo que vimos, se resolvera la primera condicin con la segunda (False Or True, se resuelve como True), el resultado se resolvera con la tercera (True And True, devuelve True), y el resultado se resolvera con la cuarta (True And False, devuelve False). El resultado de lo ltimo que se resolvi fue False. Cmo cambiaramos la condicin, mediante el uso de parntesis, para que el resultado fuera verdadero? A continuacin una solucin:
(S < s OR ( 2 >= 2 AND 1 > 0.5 And A = B))

De esta forma forzamos que en primera instancia se resuelva el parntesis de mayor profundidad, que contiene la segunda, tercera y cuarta expresiones (True And True And False, devuelve False), el resultado se resuelve con la primera condicin, por ser el parntesis de mayor profundidad que sigue (True Or False, devuelve True). Una regla es que siempre debe cerrar los parntesis que abra. Una inadecuada colocacin de condiciones puede arrojar resultados errneos; le recomendamos que aunque de forma predefinida existe una preferencia, usted determine claramente cul desea, utilizando parntesis cuando tenga ms de una condicin por resolver.

Operadores lgicos de circuito corto


En programacin es comn que para que algo suceda, debe cumplirse ms de una condicin. Uno de los problemas que tena la anterior versin de Visual Basic, es que no era lo suficientemente inteligente para saber que ya no tena caso resolver ciertas condiciones, en el caso de And y Or. Sabemos que en el caso de And, si una expresin lgica es False todo es False; si en una comparacin nos encontramos que la primera expresin lgica es False, qu caso tiene resolver la segunda expresin?

188

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Se denominan operadores lgicos de circuito corto (short- circuiting), aquellos que son capaces de determinar la necesidad de continuar evaluando condiciones posteriores a las primeras. Son dos:
AndAlso

Procesa comparaciones lgicas de circuito corto, de tipo And; produce False a la primera expresin False que se encuentra, y concluye con la resolucin de expresiones.

OrElse

Procesa comparaciones lgicas de circuito corto, de tipo Or; produce True a la primera expresin True que se encuentra, y concluye con la resolucin de expresiones.

Tabla de comportamiento de operadores lgicos


La siguiente tabla muestra el comportamiento de los operadores lgicos:

Operador And And And And Or Or Or Or Xor Xor Xor Xor AndAlso AndAlso AndAlso AndAlso OrElse OrElse OrElse OrElse

Si Expresin1 es True True False False True True False False True True False False True True False False True True False False

Y Expresin2 es True False True False True False True False True False True False True False Ni siquiera se evala Ni siquiera se evala Ni siquiera se evala Ni siquiera se evala True False

Resultado True False False False True True True False False True True False True False False False True True True False

Captulo 6. Manejo de operadores

189

Prioridad entre operadores


Cuando hay varias expresiones dentro de una expresin que las engloba, cada parte de sta se evala y resuelve en un orden predeterminado donde ciertos operadores han de resolverse 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 antes de ser resueltas. Por ejemplo:
(2+5) > (3+1)

No podemos resolver la expresin que implica el operador comparativo (>), si antes no resolvemos las expresiones que involucran el operador de suma (+). El procesador no resuelve operaciones a nivel abstracto. Cuando hay expresiones que contienen operadores de ms de una categora (aritmticos, de comparacin y lgicos), se resuelven en este orden: 1. Las expresiones que tienen operadores aritmticos. 2. Las expresiones que tienen operadores de comparacin. 3. Las expresiones que involucran operadores lgicos. Esto tiene sentido si tomamos en cuenta que la materia prima para los operadores aritmticos son generalmente expresiones numricas o expresiones String, y con ellos se genera una nueva expresin numrica o expresin String. Los operadores de comparacin, por su parte, tienen como materia prima dos expresiones numricas o expresiones String, y con ellos se determina un valor lgico. Por ltimo, los operadores lgicos permiten generar una expresin lgica de dos expresiones lgicas. Los operadores de comparacin tienen la misma prioridad; es decir, se evalan de izquierda a derecha en el orden en que aparecen. Los operadores se evalan en el siguiente orden de prioridad: Aritmticos
Exponenciacin (^) Negatividad de expresin () Multiplicacin y divisin (*, /) Divisin de enteros (\) Mdulo aritmtico (Mod) Adicin y sustraccin (+, )

190

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Comparacin Igualdad (=) Desigualdad (<>) Menor que (<) Mayor que (>) Menor o igual que (<=) Mayor o igual que (>=)

Lgicos Not And Or Xor

Cuando hay multiplicacin y divisin en la misma expresin, cada operacin se evala a medida que aparece, de izquierda a derecha. Del mismo modo, cuando se presentan adiciones y sustracciones en una misma expresin, cada operacin se evala tal como aparecen de izquierda a derecha.

Uso de parntesis para otorgar preferencia de ejecucin


Es posible usar parntesis para saltar el orden de preferencia y forzar que algunas partes de una expresin se evalen antes que otras. Las operaciones entre parntesis se realizarn antes que aquellas que se encuentren fuera. Sin embargo, dentro de los parntesis, la prioridad de los operadores se mantiene segn las reglas. Cuando se emplean parntesis para determinar un orden de resolucin de expresiones, se est especificando la preferencia de ejecucin explcita. 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 ejecucin automtica. Los programadores profesionales acostumbran el uso de la preferencia de ejecucin explcita, ya que es ms fcil 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 concatenacin de cadenas (&) no es realmente un operador aritmtico, pero en orden de prioridad se encuentra a continuacin de todos los operadores aritmticos y antes que todos los operadores de comparacin.

Captulo 6. Manejo de operadores

191

No olvide que por ms larga que parezca una expresin, todos los operadores actan sobre dos expresiones, y de dos en dos, hasta dejar una sola expresin final que podr ser asignada a una variable o propiedad, o utilizada por algn estatuto o funcin.

Ejercicio 6.1
Utilizacin general de operadores de Visual Basic En este ejercicio se utilizar una aplicacin de consola para comprobar la declaracin y uso de variables en un proceso. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Operadores.

Windows Console Application, llamado

3. Edite el programa de tal forma que aparezca como sigue:

Codificacin de Operadores
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 Module1

- Module1.vb

Sub Main() Dim Numero1 As Integer = 5 Dim Numero2 As Single = 2 Dim Texto1 As String = Visual Dim Texto2 As String = Basic.NET Console.WriteLine(Numero1) 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

192

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejecucin guiada de Operadores

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que haya realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 5. Los resultados son simples resoluciones de operadores que no requieren explicacin. Lo nico novedoso es el uso del mtodo Trim del objeto String, que se encarga de eliminar 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 INTRO para continuar

Comentarios en bloques de cdigo


6. En ocasiones se requiere comentar una buena cantidad de lneas de cdigo. La alternativa ms laboriosa y demorada es colocar un apstrofo al inicio de cada lnea; la otra alternativa es utilizar las herramientas de Visual Studio. 7. Seleccione de la lnea 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 inmediatamente presionando Ctrl-C. Se debieron haber comentado todas las lneas que estaban seleccionadas:

Captulo 6. Manejo de operadores

193

9. Marque nuevamente las lneas de la 8 a la 20, que se encuentran comentadas. 10. Seleccione Edit Advanced Uncomment Selection, o presione la secuencia de teclas Ctrl-K, Ctrl-U. Los apstrofos debieron desaparecer.

Uso de Clipboard Ring


11. Una de las tareas ms comunes realizadas dentro de un editor de textos es copiar y pegar cdigo (copy and paste). Generalmente al seleccionar cdigo se parte de una posicin determinada en una lnea, se selecciona todo lo que resta de la lnea hacia la derecha, se incluyen varias lneas y se llega a una posicin determinada de una lnea de fin. En trminos generales, el copiado se hace con base en lneas de cdigo, a lo que se conoce como line-based copy-paste.

194

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

12. Se oprime la combinacin 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 generalizada de que slo se mantiene en el portapapeles lo ltimo que se copia. 13. Realice, utilizando Ctrl-X y Ctrl-V, los siguientes cambios: mueva la lnea 9 justo antes de la lnea 8, y ponga la lnea 17 inmediatamente antes de la 16. Ponga atencin a cmo lo hace. 14. Seguramente seleccion la lnea 9 de manera completa, oprimi Ctrl-X, se coloc al inicio de la lnea 8 y oprimi Ctrl -V. Despus seleccion la lnea 17 de manera completa, oprimi Ctrl -X, se coloc al inicio de la lnea 16 y oprimi Ctrl -V. Es correcto? 15. El portapapeles realmente almacena hasta las ltimas 20 cosas que haya copiado o colocado en l, y pueden ser extradas utilizando Ctrl-Mays-V. Al reunirse 20 contenidos en portapapeles y tratar de agregar uno ms, el contenido ms antiguo se pierde y el nuevo contenido toma la primera posicin de recuperacin. El portapapeles tiene una organizacin de recuperacin LIFO (Last In, First Out / ltimas entradas, primeras salidas), 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 lneas 8 y 17 originales a su lugar. Para ello utilizaremos el circuito del portapapeles. 17. Seleccione completamente la que ahora es la lnea 16. Oprima Ctrl-X. Con ello el portapapeles tiene almacenados los siguientes valores:
1: Console.WriteLine(Texto1 IsNot Texto2) ...

18. Seleccione completamente la que ahora es la lnea 8. Oprima Ctrl-X. Con ello el portapapeles tiene almacenados los siguientes valores:
1: Console.WriteLine(Numero2) 2: Console.WriteLine(Texto1 IsNot Texto2) ...

19. Vaya a la que ahora es la lnea 9 y oprima Ctrl-Mays-V una vez. Visual Studio retornar lo que se tenga en la posicin 1, que es lo ltimo que colocamos en el portapapeles. 20. Vaya a la que ahora es la lnea 17 y oprima Ctrl-Mays-V dos veces. Visual Studio retornar en la primera ocasin la posicin uno, y en la segunda la posicin dos. Vea cmo se sustituye automticamente lo que est retornndose del portapapeles.

Captulo 6. Manejo de operadores

195

21. Imagine las posibilidades de almacenar en el portapapeles los nombres de las variables de uso ms comn en un proceso, y estarlas invocando de manera rpida en nuestra edicin.

Seleccin basada en bloques de cdigo (Block Selection)


22. Analizando el cdigo podemos darnos cuenta de que Console se repite en mltiples ocasiones. Se puede simplificar el cdigo agregando un Import al inicio del programa, eliminando el nombre de la clase Console en todo nuestro cdigo. El problema es quitar Console de las lneas, dado que tendramos que hacerlo lnea por lnea. 23. Utilizando la seleccin basada en lneas no podemos seleccionar nicamente el nombre del objeto Console de todas ellas sin marcar el resto de la lnea. 24. Visual Studio permite lo que se conoce como seleccin basada en bloques (Block Selection), que implica seleccionar un rea rectangular del rea de edicin. 25. Trace un rectngulo que encierre los nombres de objeto Console en el rea de edicin. Para hacerlo, arrastre el puntero del ratn desde la esquina superior izquierda de lo que quiere marcar hasta la esquina inferior derecha mientras oprime la tecla Alt. No olvide incluir el punto de Console.

196

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

26. Oprima las teclas Ctrl-X para enviar el contenido al portapapeles, con lo cual se eliminan las referencias del cdigo. 27. Vaya al inicio del programa, y antes de cualquier otra lnea agregue la siguiente:
Imports System.Console

28. Construya la solucin (teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). FIN DEL EJERCICIO *

Ejercicio 6.2
Uso de operadores de asignacin incluyente y operadores de circuito corto En este ejercicio se utilizar una aplicacin de consola para comprobar los operadores de asignacin incluyente, as como los operadores de circuito corto. El programa solicita tres nmeros entre 1 y 10. A travs de asignacin incluyente se acumularn los valores capturados, y mediante los operadores de circuito corto se har ms eficiente un proceso, detectndose de entre los nmeros capturados alguno que sea primo. Recuerde que un nmero primo es aquel que se divide slo entre 1 y entre s mismo; en el rango de nuestro ejemplo, los nicos nmeros primos son 1, 2, 3 y 7. En este ejercicio se utilizar una aplicacin de consola para comprobar la declaracin y uso de variables en un proceso. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado Primos. 3. Edite el programa de tal forma que aparezca como sigue:

Captulo 6. Manejo de operadores

197

Codificacin de Primos
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 Option Explicit On Option Strict On Module Module1 Sub Main() Dim Dim Dim Dim N1 As N2 As N3 As Total

- Module1.vb

Integer Integer Integer As Integer = 0

Console.WriteLine( Suma de 3 nmeros -) Console.WriteLine( Slo capture enteros del 1 al 10) Console.Write(Nmero 1 de 3:) N1 = CInt(Console.ReadLine()) Console.Write(Nmero 2 de 3:) N2 = CInt(Console.ReadLine()) Console.Write(Nmero 3 de 3:) N3 = CInt(Console.ReadLine()) Total += N1 Total += N2 Total += 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 nmeros es primo) Else Console.WriteLine(Ninguno de los nmeros es primo) End If Console.WriteLine(Total: & CType(Total, String)) Console.WriteLine(Pulse INTRO para continuar) Console.ReadLine() End Sub End Module

198

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejecucin guiada de Primos

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que haya realizado en la solucin (CTRL-MAYS-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 5. El programa declara las variables de trabajo de la lnea 5 a la 8. 6. Es importante que est consciente de cmo estamos haciendo la conversin de datos, tanto al momento de recibir los valores de consola, como al mostrarlos, dado que nuestro programa es type safe. 7. Capture como datos de entrada los nmeros 4, 6, 8. La lnea 22 ejecuta una asignacin incluyente basada en suma; Total += N1, es igual que haber escrito Total = Total + N1. En este caso, N1 vale cero porque no se le especific valor al momento de ser declarada. Despus de la lnea 22, Total vale 0 + 4; es decir, 4; despus de la lnea 23, vale 4 + 6, es decir 10, y despus de la lnea 24, vale 10 + 8, es decir 18. Las lneas 26, 27 y 28 realmente son una sola lnea de cdigo. Se estar evaluando si N1 es alguno de los nmeros 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 expresin es True. La misma comparacin se realiza con N2 y con N3. Internamente, con los nmeros que se proporcionaron, las operaciones se resolveran 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 sera lo mismo que:


if (False)

Por tanto, el programa tendra una salida falsa, reportando que ninguno de los nmeros tecleados es primo. Si todo ocurri como se esperaba, la salida ser la siguiente:
Suma de 3 nmeros Slo capture enteros del 1 al 10 Nmero 1 de 3:4

Captulo 6. Manejo de operadores

199

Nmero 2 de 3:6 Nmero 3 de 3:8 Ninguno de los nmeros es primo Total:18 Pulse INTRO para continuar

8. Ahora ejecute el ensamblado, capturando los nmeros 3, 6, 8. Si N1 es igual a 1, o igual a 2, o igual a 3, o si es igual a 7, la primera expresin es True. La misma comparacin se realiza con N2 y con N3. Internamente, con los nmeros que se proporcionaron, las operaciones se resolveran 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 sera lo mismo que:


If (True)

Como puede observar, la forma en que se resuelve la condicin es mucho ms simple debido a que los operadores de circuito corto. La primera condicin se resuelve por True, debido a que con Or, ante la presencia de al menos un True, todo es True. Ya no se sigue evaluando ms condiciones. Si todo ocurri como se esperaba, la salida ser la siguiente:
Suma de 3 nmeros Slo capture enteros del 1 al 10 Nmero 1 de 3:3 Nmero 2 de 3:6 Nmero 3 de 3:8 Al menos uno de los nmeros es primo Total:17 Pulse INTRO para continuar

200

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

MAPA

MENTAL DEL CAPTULO

Captulo 6. Manejo de operadores

201

TERMINOLOGA
And, 185 AndAlso, 188 Clipboard Ring, 193 Comment Selection, 192 Distinto de (<>), 180 Divisin (/), 177 entera (\), 177 Exponenciacin (^), 177 Expresin, 178 Igual a (=), 178, 180 Is, 183 IsNot, 183 Like, 183 Mayor o igual que (>=), 180 Mayor que (>), 180 Menor o igual que (<=), 180 Menor que (<), 180 Mdulo, 177 Multiplicacin (*), 177 Not, 185 Operadores, 177 aritmticos, 177 comparativos, 180 de asignacin, 178 incluyente, 179 lgicos, 185 de circuito corto, 188 Option compare, 182 Or, 185 OrElse, 188 Resta (-), 177 Short-circuiting, 188 Suma (+), 177 TypeOf, 183 Xor, 185

PREGUNTAS
6.1 Cules son los operadores aritmticos, para qu sirven y cul es su precedencia? 6.2 Cules son los operadores de asignacin, para qu sirven y cul es su precedencia? 6.3 Cules son los operadores comparativos, para qu sirven y cul es su precedencia? 6.4 Cules son los operadores lgicos, para qu sirven y cul es su precedencia? 6.5 Por qu son importantes las reglas de precedencia? 6.6 Cules son las ventajas de los operadores de circuito corto con respecto a los operadores lgicos? 6.7 Cules son las ventajas de los operadores de asignacin incluyente con respecto a los operadores aritmticos?

202

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Notas:

Captulo 6. Manejo de operadores

203

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Si lo que quiero es generar un nuevo valor numrico a partir de otros dos valores numricos, debo utilizar un operador: a) De asignacin b) Aritmtico c) Lgico 2. Si quiero comparar un valor en relacin con otro valor, debo usar un operador: a) Comparativo b) Relacional c) Aritmtico 3. Son aquellas expresiones lgicas que involucran ms de una comparacin: a) Complejas b) Abiertas c) Compuestas 4. Son lo adecuado cuando la variable a recibir un valor tambin es considerada como primer factor de clculo: a) Operadores aritmticos implcitos b) Operadores de asignacin 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 ejecucin explcita c) Preferencia de ejecucin automtica

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. 7. Una multiplicacin se resuelve antes que una suma. En una expresin lgica, al aplicar el operador Or, con una expresin que sea False, todo es False. Si se especific Option Compare Text, A es igual que a. Si x es igual a 1, x *= 2 es igual a x += 2. Si una clave se compone de un nmero y una letra, el patrn a utilizar en una comparacin Like, para producir verdadero, sera [0-9][A-Z].

8. 9. 10.

CAPTULO

Estructuras de decisin y control


Objetivos: Familiarizarse con las estructuras de decisin, para realizar procesos condicionales, y con las estructuras de control para el manejo de procesos iterativos. 1. Reconocer las estructuras de decisin. 2. Revisar la utilizacin de If para codificar procesos condicionales. 3. Entender cmo manejar los procesos condicionales con ejecucin en el sentido afirmativo y en el negativo. 4. Comprender cmo utilizar Select Case para ejecutar procesos mutuamente 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 cmo anidar estructuras de decisin y control.

205

206

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Estructuras de decisin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estatuto If Then Else (condicional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Select Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . For Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Do Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estructuras envolventes y anidadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reglas para el anidado de estructuras . . . . . . . . . . . . . . . . . . . . . . . . . Uso de estructuras de decisin . . . . . . . . . . . . . . . . . . . . . . . . . . Uso de For Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adicin de tareas a Task List . . . . . . . . . . . . . . . . . . . . . . Adicin de comentarios de tarea a un programa . . . . . . Identificacin de errores en estructuras anidadas . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 208 210 211 211 212 214 215 215 217 218 223 225 226 227 228 228 230

Captulo 7. Estructuras de decisin y control

207

La industria de la computacin ha prosperado enormemente desde sus inicios. La razn 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 precisin determinada y utilizando una cantidad de recursos determinados. Calcular lo que cuesta desarrollar las actividades como procesar una orden de compra o mantener actualizado un inventario implica calcular los costos de operacin de la organizacin. Para ser ms precisos, podemos decir que una actividad est formada por procesos especficos, 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 computacin es la automatizacin de procesos, que permite desarrollar las actividades de las organizaciones de la manera ms rpida y precisa posible, realizando de manera automtica aquellas partes de la actividad que pueden ser programadas. La automatizacin reduce los costos de operacin, pues las transacciones pueden desarrollarse de manera ms barata. Imagina lo que costara a las aerolneas mantener 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 ahorros por cada transaccin realizada nos lleva a recuperar la inversin aplicada al desarrollo de sistemas. Del dinero que la automatizacin ayuda a ahorrar a las organizaciones recibimos el sueldo muchos desarrolladores; la programacin seria no es un pasatiempo: es un trabajo que debemos mantener siempre rentable. Actualmente, los programas de cmputo realizan las tareas repetitivas que antes hacamos manualmente, agregndoles rapidez y exactitud, y reduciendo los costos. Gracias a esto, las personas disponen de tiempo para realizar otras tareas no automatizadas, lo que permite un mejor aprovechamiento de los recursos humanos. En materia de informtica, las transacciones se ejecutan a travs de secuencias de lneas de cdigo. 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. Adems, debemos estructurar el cdigo para la realizacin de tareas repetitivas evitando duplicar cdigo de manera innecesaria.

Estructuras de decisin
Las estructuras de decisin son estructuras del lenguaje que permiten decidir qu lneas de cdigo se han de ejecutar, dependiendo de una condicin determinada.

208

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Estatuto If Then Else (condicional)


El estatuto condicional (If) ejecutar instrucciones dependiendo del valor de una condicin que deriva en una expresin lgica (dato de tipo Boolean). Como If tiene muchas variantes, examinaremos varias de las sintaxis que emplea. He aqu la ms sencilla:

If

ExpresinLgica Then Instruccin

Donde If es el inicio de la estructura de decisin, ExpresinLgica es la expresin de tipo Boolean que determina la ejecucin de Instruccin, que en este caso puede constar de slo una sola instruccin, por ejemplo:

If Precio < CreditoDisponible Then Cargo = Aprobado

Slo en caso de que ExpresinLgica derive en un valor de True, Instruccin ser ejecutada; es decir, esta sintaxis de If produce la ejecucin slo en el caso afirmativo de la condicin. Esta forma de If es muy til para asignar valores a las variables en caso de que una condicin se cumpla. Un bloque de cdigo es un conjunto de lneas de cdigo que tienen su propio alcance de ejecucin y que est siempre delimitado. Si la ejecucin de un bloque de cdigo depende del cumplimiento de una condicin, es necesario que se delimite la estructura de decisin; el bloque de cdigo ser entonces todo lo que se encuentre entre el estatuto If y el estatuto End If.
If

ExpresinLgica Then Instrucciones

End If

Donde If es el inicio de la estructura de decisin, End If es el fin de la estructura de decisin, y todas las Instrucciones que se encuentran entre el inicio y el fin constituyen el bloque de cdigo que es controlado por la condicional. ExpresinLgica es la expresin de tipo Boolean que determina la ejecucin de Instrucciones, que en este caso puede constar de una sola instruccin o de muchas.

Captulo 7. Estructuras de decisin y control

209

Slo en caso de que ExpresinLgica derive en un valor de True, Instrucciones ser ejecutada; esta sintaxis de If controla slo la ejecucin en el sentido afirmativo de la condicin. 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 apropiadamente. Un error muy comn es abrir estructuras de decisin pero no cerrarlas; para evitarlo, es muy til organizar el cdigo dando a las lneas de inicio y fin de la estructura de decisin una alineacin tabulada distinta a la del bloque de cdigo controlado por dicha estructura. Vea los ejemplos: If y End If nunca tienen el mismo margen izquierdo que el bloque de cdigo que controlan. No trate de ser original al respecto, pues con ello slo lograr que la gente se d cuenta que es un programador novato y poco organizado.

Es posible hacer que If controle al mismo tiempo la ejecucin en el sentido afirmativo y en el sentido negativo, a travs de la especificacin Else. Vea la sintaxis:
If

ExpresinLgica Then InstruccionesAfirmativo InstruccionesNegativo

Else End If

Donde If es el inicio de la estructura de decisin, End If es el fin de la estructura de decisin, y todas las Instrucciones que se encuentran entre el inicio y el fin constituyen el bloque de cdigo controlado por la condicional. El bloque de cdigo del estatuto est dividido en dos bloques menores: uno que se ejecutar slo si ExpresinLgica es True (InstruccionesAfirmativo) y otro que se ejecutar slo si ExpresinLgica es False (InstruccionesNegativo). Por ejemplo:
If Precio < CreditoDisponible Then Cargo = Aprobado CreditoDisponible -= Precio Else Cargo = Denegado End If

210

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Donde ExpresinLgica es la expresin de tipo Boolean que determina ejecucin de InstruccionesAfirmativo o InstruccionesNegativo. Esta sintaxis de If controla la ejecucin en el sentido afirmativo o en el sentido negativo de la condicin. Como puede intuirlo, siempre se ejecutar algo.

Select Case
Select Case es una estructura de decisin que permite ejecutar procesos mutuamente excluyentes en funcin de comparaciones realizadas sobre un mismo valor de referencia. Su sintaxis es la siguiente: Select Case ExpresinAEvaluar Case {Condicin | Else}

Instrucciones
End Select

Donde ExpresinAEvaluar es una expresin de cualquier tipo que ser tomada como referencia. Condicin sirve para especificar una condicin relacionada con ExpresinAEvaluar que, en caso de presentarse, disparar la ejecucin de Instrucciones. Se va construyendo un rbol de decisin basado en ExpresinAEvaluar. Se pueden agregar tantas sentencias Case como se deseen; incluso es posible anidar las estructuras Select Case. Si al momento de evaluar Condicin, un determinado valor de ExpresinAEvaluar cumple en dos casos, se ejecutar para el primero que se encuentre. Case Else se aplica cuando el valor de ExpresinAEvaluar no cumple para ninguno de los casos anteriores dentro de la estructura. Para entender cmo funciona este estatuto, imagnese la siguiente situacin hipottica: Una compaa tiene 35 categoras de empleados; cada categora tiene un ingreso determinado y las categoras de nmero ms alto son las de mayor ingreso; existe una relacin directamente proporcional entre categora y sueldo. Se acaba de autorizar un aumento de sueldo general en la compaa, de acuerdo con las siguientes polticas: el personal de alto nivel (categora superior a 19) no tendr aumento; las categoras 18, 17 y 14 recibirn el 15% de aumento; de la categora 8 a la 13, recibirn el 10% de aumento, a excepcin de la categora 10, que es la categora ms rezagada con respecto al salario: sta recibir el 25%. Al resto del personal se le dar un 5% de aumento.

Captulo 7. Estructuras de decisin y control

211

Cmo se codificara una estructura Select


Select Case Categoria 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

Case que atendiera esta necesidad? Veamos:

Es importante notar que todas las condiciones giran alrededor de la expresin a evaluar (en nuestro ejemplo, Categoria): si no hacen uso de dicha expresin, no son consideradas. Usted podra agregar como instruccin una condicin Case que se resuelva True, pero que no involucre a Categoria; en ese caso, el cdigo dependiente de dicho Case nunca se ejecutar.

Estructuras de control
Son estructuras de control, llamadas tambin bucles, aquellos elementos del lenguaje que permiten la ejecucin de una o ms lneas de cdigo de manera repetida. Mediante las estructuras de control se puede repetir la ejecucin de lneas de cdigo:
Un determinado nmero de veces Hasta que una condicin sea verdadera (True) Mientras que una condicin sea falsa (False) Una vez por cada elemento de una coleccin

A continuacin, podr analizar los elementos del lenguaje que permiten codificar cada una de estas variantes.

For Next
For Next repite la ejecucin de un bloque de cdigo un nmero determinado y conocido de veces. For Next se apoya en una variable que recibe el nombre de contador, que se incrementa o reduce de valor, en intervalos tambin regulares y conocidos. Su sintaxis es la siguiente:

212

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Variable = ValorInicial Instrucciones Next [Variable]


For

To

ValorMximo

[Step

Incremento]

Donde Variable es una variable de memoria de tipo entero que permitir controlar las repeticiones del proceso. ValorInicial es el valor inicial a partir del cual el incremento o decremento se llevar a cabo. ValorMximo es el valor al cual el contador podr llegar. Incremento es la constante entera que marcar la cantidad de incremento o decremento que sufrir Variable en cada repeticin del proceso. Vea los siguientes ejemplos:
Cuenta del 1 al 10 For i = 1 To 10 Console.WriteLine(i) Next i Serie del 5 For i = 0 To 50 Step 5 Console.WriteLine(i) Next i Decremento del 10 al 1 For i = 10 To 1 Step 1 Console.WriteLine(i) Next i

Si se omite la especificacin Step, se da a Incremento el valor de 1 positivo; si Incremento es negativo, se habla de un decremento en trminos reales. Una instruccin que puede ser til en el caso de utilizar For Next es Exit For, que interrumpe la ejecucin del For como si ya hubiese cumplido todas las repeticiones exigidas.

While
While ejecuta un bloque de cdigo un nmero infinito de veces mientras una condicin al inicio del bloque se cumpla (True). Su sintaxis es la siguiente:
While ExpresinLgica Instrucciones End While

Captulo 7. Estructuras de decisin y control

213

Por ejemplo:
Dim Prueba As Byte = 0 While Prueba < 255 Console.WriteLine(Prueba) Prueba += 1 End While

Donde ExpresinLgica es un valor de tipo Boolean (True/False), casi siempre una comparacin que de ser verdadera al inicio del ciclo de ejecucin provoca la ejecucin de Instrucciones. Como recordar, el tipo de datos Byte puede almacenar valores desde 0 a 255, exclusivamente; en nuestro ejemplo, While ejecutar un incremento de 1 para la variable Prueba mientras sea menor a 255. Si dejramos que el ciclo fuera ms all de 255, el programa generara 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 momento el proceso: Exit While. Una de las formas ms tiles de While es el ciclo infinito, en donde ninguna operacin o variable dentro del proceso influye en la condicin que gobierna la estructura. Simple y llanamente, se proporciona el valor de True como ExpresinLgica y no hay forma que deje de ejecutarse el ciclo.

While True

Instrucciones
End While

Por ejemplo:
While True Console.WriteLine(Qu nmero estoy pensando) If Console.ReadLine() = 8 Then Console.WriteLine(Efectivamente: 8) Exit While End If End While

214

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

En este caso, es indispensable que especifique en su programa alguna condicin para ejecutar Exit While ya que, de otra manera, nunca concluir su ejecucin. En el ejemplo que pusimos, mientras no teclee 8, el programa seguir pidiendo nmeros. NOTA
Puede ser que su programa tenga un detalle que impida ejecutar Exit While en un ciclo infinito; recuerde que siempre puede detener la ejecucin de un proceso presionando la combinacin de teclas Ctrl-Intro o Esc.

Do Loop
Do Loop ejecuta un bloque de cdigo un nmero infinito de veces, hasta que una condicin se cumpla (True). Esta instruccin brinda ms flexibilidad que While, en el sentido de que se puede controlar la evaluacin 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 forma ms sencilla que utilizando While. Su sintaxis es la siguiente:
Evaluacin al inicio Do {While/Until} ExpresinLgica Instrucciones Loop Evaluacin al final Do Instrucciones Loop {While/Until} ExpresinLgica

donde ExpresinLgica es un valor de tipo Boolean (True/False), que casi siempre es una comparacin. Instrucciones son las instrucciones que se controlan en el bucle. Si se utiliza Do con While (mientras), el ciclo se repite hasta que ExpresinLgica sea falsa. Si se utiliza Do con Until (hasta), el ciclo se repite hasta que la condicin sea verdadera. Slo se puede implementar While o Until, pero no ambas. Tambin tiene que decidir si la evaluacin de las condiciones es al inicio o al final de la estructura, pero no ambas. Por ejemplo:

Captulo 7. Estructuras de decisin y control

215

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 decisin o de control, pueden contener otras estructuras. A una estructura 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 captulo, 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; asegrese de cerrar todas las estructuras que

abra.
Se recomienda programar de tal manera que las estructuras que se abran se cierren lo

ms pronto posible.

216

Aprenda 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 ms rpi-

da que cualquier otro tipo de dato. Los problemas ms comunes relacionados con las estructuras anidadas (y su solucin) son:
No terminar lo que se inicia.
Problema If Condicin Then Instrucciones Solucin If Condicin Then Instrucciones End If

No iniciar lo que se termina.


Problema Instrucciones Next Variable Solucin For Variable = 0 to 10 Instrucciones Next Variable

Utilizar las mismas variables que controlan el proceso.


Problema For Variable = 0 to 10 For Variable = 0 to 5 Instrucciones Next Variable Next Variable Solucin 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 For Variable = 0 to 10 If Condicin Then Instrucciones Next Variable End If Solucin For Variable = 0 to 10 If Condicin Then Instrucciones End If Next Variable

Captulo 7. Estructuras de decisin y control

217

Ejercicio 7.1
Uso de estructuras de decisin En este ejercicio se utilizar una aplicacin de consola para comprobar las estructuras de decisin. Se parte del supuesto que usted indicar al programa cunto cuesta un producto que desea comprar, as como el tipo de membresa que tiene en la tienda donde desea comprarlo. A cada tipo de membresa se le aplica un determinado descuento que ser informado por el programa. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado Descuento. 3. Edite el programa de tal forma que aparezca como sigue: Codificacin de Descuento
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 26 27 28 29 30 31 Option Explicit On Option Strict On Imports System.Console Module Module1 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(Membresa:) WriteLine(1.- Diamante) WriteLine(2.- Premium) WriteLine(3.- Clsica) Write(Qu membresa 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 - Module1.vb

218

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

32 33 34 35 36 37 38 39 40 41 42 43 44

Case Else FactorDesc = 0 End Select Write(Precio para usted:) WriteLine(Precio - (Precio * FactorDesc)) End If Write(Presione INTRO para continuar) ReadLine() End Sub End Module

Ejecucin guiada de Descuento

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 5. Las lneas 1 y 2 hacen de este programa un programa type safe. En las lneas 10 y 11 se declaran las variables de trabajo. 6. Cuando el programa solicite el precio (lneas 13 y 14), proporcione el valor 0. Vea en el cdigo cmo se utiliza CDbl(), para hacer de lo capturado un dato Double, y evitar errores, dado que el programa es type safe y no permite conversiones tipo cast (lnea 14). En la lnea 16 vemos la primera estructura de decisin del programa, que controla la ejecucin del programa en el sentido afirmativo y en el sentido negativo. En el sentido afirmativo, se ejecutar el bloque de cdigo que va de la lnea posterior al inicio de la estructura (lnea 9), hasta la lnea anterior al Else o End If (lnea 17), que dan por concluido el bloque. En el sentido negativo, se ejecutar el bloque de cdigo que va de la lnea posterior al Else (lnea 19), hasta la lnea anterior al End If (lnea36), que da por concluido el bloque. Como se proporcion el valor de cero, la condicin que gobierna la ejecucin del If se cumple en el sentido afirmativo (Precio = 0 es True), y al encontrar el Else, pasa a ejecutar la lnea 30; vea que el bloque en el sentido negativo es ignorado completamente.

Captulo 7. Estructuras de decisin y control

219

Si todo ocurri como se esperaba, la salida ser la siguiente.


Precio del producto: 0 Nada que calcular Presione INTRO para continuar

7. Ejecute la aplicacin nuevamente. Cuando le solicite el precio, proporcione el valor 2000. Cuando le solicite el tipo de membresa, proporcione el valor 2. Como se proporcion el valor 2000, la condicin que gobierna la ejecucin del If se cumple en el sentido negativo (Precio = 0 es False), y se procede a ejecutar el bloque en el sentido negativo. En la lnea 24 se recibe el valor 2, que es asignado a FactorDesc; en la lnea 25 se especifica FactorDesc como valor de referencia para las comparaciones Select Case que se encuentran en las lneas 26, 28 y 30; en caso de que no se cumpla ninguna de las anteriores, se ejecuta la lnea 32. Como el valor de FactorDesc es 2 (Is = 2), se procede a ejecutar el bloque de cdigo correspondiente al cumplimiento de esa condicin; en otras palabras, se ejecuta la lnea 29. Vea cmo se agrega la literal D al valor para indicarle al programa que el valor es Decimal (de lo contrario podra asumirse otro tipo de dato, y ante la imposibilidad de conversiones cast, se producira un error). Tambin se podra haber resuelto el problema utilizando la funcin CDec(). Concluida la ejecucin del bloque de cdigo correspondiente a la condicin que se cumpli, se enva el control del programa a la lnea posterior a la terminacin de la estructura (End Select); es decir, se ejecuta la lnea 35 y hacia adelante, para desplegar el precio despus de aplicar el factor de descuento que corresponde al tipo de membresa seleccionada. Si todo ocurri como se esperaba, la salida ser la siguiente:
Precio del producto: 2000 Membresa: 1.- Diamante 2.- Premium 3.- Clsica Qu membresa tiene?: 2 Precio para usted: 1680 Presione INTRO para continuar

Si hubiramos especificado un tipo de membresa que no fuera 1, 2 o 3, el programa hubiera ejecutado la lnea 32, que corresponde a la condicin Case Else; es decir, la que corresponde a cuando ninguna de las otras condiciones se cumple.

220

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

8. Guarde todos los cambios en su solucin. FIN DEL EJERCICIO*

Ejercicio 7.2
Uso de For Next En este ejercicio se utilizar una aplicacin de consola para comprobar el funcionamiento de For Next. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado Repite. 3. Edite el programa de tal forma que aparezca como sigue:

Codificacin de Repite
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 26 Option Explicit On Option Strict On Imports System.Console

- Module1.vb

Module Module1 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 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

Captulo 7. Estructuras de decisin y control

221

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 INTRO para continuar) ReadLine() End Sub End Module

Ejecucin guiada de Repite

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (F5).

222

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

5. En las lneas 10 a la 12 se declaran variables de trabajo que ayudarn 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 automtica.

b) Todas las dems estructuras deben apoyarse en un contador implementado manualmente (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 condicin. d) Las estructuras While se ejecutan mientras la condicin sigue siendo verdadera. 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 0 1 2 3 4 Muestra usando Do Loop inicial While 0 1 2 3 4 Muestra usando Do Loop inicial Until 0 1 2 3 4 Muestra usando Do Loop final While 0 1 2 3

Captulo 7. Estructuras de decisin y control

223

4 Muestra usando Do Loop final Until 0 1 2 3 4 Presione INTRO para continuar

6. Modifique las asignaciones de las lneas 25, 32, 39, 46 y 53. En lugar de asignar 0, asigne 10. Se proporciona ese valor porque no es vlido para las condicionales While y Until del programa. Compruebe cmo las estructuras con evaluacin 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

Adicin 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 herramienta tiene el nombre de Task List. 8. En Task List se pueden manejar dos categoras de registros: tareas de usuario y comentarios de tarea. Las tareas de usuario son tareas que el usuario registra, establecindoles prioridad (alta, media, baja) y un indicador de estado, que marca si la tarea ya ha sido concluida (completed). Los comentarios de tarea son comentarios en el cdigo que

224

Aprenda 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 sealar cosas por hacer; HACK, para anotar recordatorios de cosas relacionadas con el desarrollo; y UNDONE, para deshacer cosas que temporalmente se colocaron pero que hay que eliminar antes de liberar el programa en produccin. 9. Para ver Task List es necesario seleccionar la opcin View Task List (oprima las teclas CTRL-\, CTRL-T). Con ello aparecer la ventana Task List. FIGURA 7.1 Task List

10.

En Task List seleccione en el cuadro de lista Categories la categora User Tasks. Haga clic en el icono Create Task User. Se agregar una tarea de forma automtica.

11. En descripcin escriba Enviar por correo electrnico a un amigo. En la misma lnea de la tarea, haga clic en la columna de prioridad, con lo que aparecern las diferentes prioridades que se pueden asignar a una tarea.

Captulo 7. Estructuras de decisin y control

225

> Lo nuevo
En Visual Studio 2005 Task List permite desplegar varias lneas de texto en cada fila, el ordenamiento basado en una o varias columnas, y cambiar la posicin de las columnas de acuerdo con los gustos del desarrollador.

Adicin de comentarios de tarea a un programa


12. En la lnea anterior, en donde se inicia la comprobacin de While (lnea 24), agregue el siguiente comentario:
TODO Cambiar los 10 por ceros, para que funcione normalmente.

13. Agregar un comentario reconocido por Visual Studio (TODO / HACK / UNDONE) agrega un registro a Task List, en donde se especifica el archivo y la lnea en la que se realiz la anotacin.

14. En Task List haga doble clic sobre el comentario que acaba de agregar y vea cmo el control del programa se traslada a donde se encuentra el comentario. 15. Guarde todos los cambios en su solucin.

226

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejercicio 5.1
Identificacin de errores en estructuras anidadas En este ejercicio analizar el cdigo que se proporciona, y explicar cules son los errores que se presentan (si los hay). Si no hay problemas, indquelo en su respuesta.
1) If Edad > 18 Then If Registro = True Then Autorizacion = True End If

2) If Edad > 18 Then If Registro = True Then Autorizacion = True End If

3) For i = 1 to 10 x *= i If x > 30 Then Console.WriteLine(Lmite de treinta o ms) Exit For Next i End If

FIN DEL EJERCICIO*

Captulo 7. Estructuras de decisin y control

227

MAPA

MENTAL DEL CAPTULO

228

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

TERMINOLOGA
Bloque de cdigo, 208 Bucles, 211 Case Else, 210 Do Loop, 214 Else, 209 Estatuto condicional, 208 Estructura(s) anidada, 215 de control, 211 de decisin, 207 envolvente, 215 Exit Do, 215 For, 212 While, 213 ExpresinLgica, 208 For Next, 211 If, 208 Instrucciones, 208 Select Case, 210 Step, 212 Task List, 223 While, 212

PREGUNTAS
7.1 Cules son las estructuras de decisin ms importantes y cul es la sintaxis de cada una de ellas? Cules son las estructuras de control ms importantes y cul es la sintaxis de cada una de ellas? En qu casos es ms recomendable utilizar Do
Loop

7.2

7.3 7.4

que While?

Cules son las reglas que se aplican al anidado de estructuras?

Captulo 7. Estructuras de decisin y control

229

Notas:

230

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Son estructuras que permiten decidir qu lneas de cdigo se han de ejecutar: a) Estructuras de decisin b) Estructuras condicionales c) Estructuras lgicas 2. Es un conjunto de lneas de cdigo que tienen su propia identidad de ejecucin: a) Procedimiento b) Bloque de cdigo c) Transaccin 3. Es la estructura ideal para cuando se han de ejecutar procesos mutuamente excluyentes, dependiendo de un valor determinado: a) If b) For c) Select Case 4. Es la estructura ptima cuando se conoce con certeza el nmero de iteraciones de un proceso: a) While b) For Next c) Select Case 5. Tipo de estructura que se presenta cuando una estructura se encuentra dentro de otra: a) Estructuras anidadas b) Grupo de estructuras c) Jerarqua de estructuras

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. If utiliza una expresin lgica para decidir la ejecucin de cdigo en sentido afirmativo o negativo. Las estructuras de control son conocidas tambin como bucles. Select Case es una estructura de control. Con While se pueden generar ciclos infinitos. La ltima estructura en abrirse debe ser la primera en cerrarse.

7. 8. 9. 10.

CAPTULO

Manejo estructurado de excepciones


Objetivos: Aprender la forma de manejar errores y excepciones en .NET. 1. Aprender cul es la diferencia entre errores y excepciones. 2. Aprender a manejar excepciones, utilizando el bloque Try Catch Finally. 3. Aprender a filtrar de manera especfica las excepciones, a fin de controlar las respuestas de las aplicaciones frente a imprevistos. 4. Aprender a disparar excepciones generadas por el usuario

231

232

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Errores y Excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Manejo estructurado de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Try...Catch...Finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bloque Try . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bloque Catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bloque Finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clase System.Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uso de Try Catch Finally y de las propiedades de la clase System. Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Despliegue de errores en tiempo de diseo usando Error List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filtrado de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Calificadores de excepcin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Objeto Err . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de filtrado de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filtrado de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lanzamiento de excepciones propias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lanzamiento de excepciones definidas por el usuario . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 234 235 235 235 236 236 237 240 241 241 242 242 243 246 246 249 250 250 252

Captulo 8. Manejo estructurado de excepciones

233

Un buen programador no es el que conoce todas las estructuras y funciones del lenguaje, sino aquel que garantiza la solucin de los problemas a travs de los programas que desarrolla. El desarrollo de aplicaciones, como toda actividad humana, es perfectible. Usted no debe preocuparse si sus programas presentan problemas en la primera compilacin: resulta totalmente normal que un programa falle. Lo que no es normal es que desconozcamos cmo manejar las fallas de una manera lgica y estructurada que nos ayude a reducir el nmero de problemas hasta lmites aceptables. La psicologa indica que la madurez de una persona se mide por su capacidad de solucionar por s misma sus propios problemas. Esta afirmacin 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 producen comportamientos inesperados en el programa resultante. Por otro lado, existe un concepto denominado excepcin, que es una violacin a las reglas sintcticas o de alcance de un lenguaje de programacin. Las excepciones pueden ser excepciones de software, si estn relacionadas con una mala aplicacin del lenguaje, o con la asignacin de valores fuera de dominio a propiedades o argumentos; tambin pueden ser excepciones de hardware, cuando su origen tiene que ver con la falla o saturacin de un dispositivo fsico: el programa puede estar correcto, pero cmo escribir informacin en un disco que est lleno, por ejemplo? Una excepcin siempre es un error, debido a que el resultado obtenido no es el deseado, pero un error no siempre es una excepcin; las excepciones por lo general interrumpen la ejecucin 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 frmula aritmtica, por ejemplo, es probable que codifique correctamente una frmula que no es correcta; el programa no reportar errores en tiempo de compilacin o ejecucin, pero sin duda 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 ms amplio de manifestaciones; las excepciones, en cambio, tienen un campo ms reducido: el del uso inadecuado del lenguaje, manejo inadecuado de dominios o problemas de hardware.

234

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

En trminos llanos, hay que temerle ms a los errores que a las excepciones, ya que las excepciones son un aspecto totalmente manejable en Visual Basic. NOTA
Visual Studio brinda una excelente asistencia durante el proceso de desarrollo para reducir el nmero de fallas en los programas. Prcticamente se anticipa al programador en la deteccin de las excepciones; las nicas excepciones que ocurren en tiempo de ejecucin son aquellas relacionadas con la asignacin de valores inadecuados o fuera de rango a variables, argumentos, o propiedades. Las dems son detectadas en el editor de cdigo (excepto algunas excepciones de hardware, que es posible detectar slo hasta el momento de ejecucin).

Manejo estructurado de excepciones


Desde sus inicios, Visual Basic haba manejado los errores a travs del objeto Err. El manejo de errores era no estructurado: era difcil leer, depurar y mantener el cdigo. Los saltos en el cdigo no eran lo ms apropiado para el modelo de programacin estructurada, ya que la secuencia de los procesos se perda. El manejo estructurado de excepciones (SEH/Structured Exception Handling) es la capacidad que tiene un lenguaje para permitir manejar excepciones a travs de una estructura de control que protege porciones localizadas de cdigo, de manera lgica 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 ejecucin es ms sencillo de seguir, ya que no existen saltos en la ejecucin

del cdigo.
Las estructuras para el manejo de excepciones se pueden anidar, ofreciendo mayor con-

trol al manejo de excepciones.

Captulo 8. Manejo estructurado de excepciones

235

Try...Catch...Finally
Se puede implementar el manejo estructurado de excepciones a travs del estatuto ...Catch...Finally.
Bloque para el manejo estructurado de excepciones

8
Try-

Su sintaxis es la siguiente:
Try

Cdigo a ser protegido


Catch

Define el tipo de excepcin a capturar y la accin que deber tomarse


[Finally

Define acciones que podrn ser ejecutadas de manera opcional]


End Try

Bloque Try
stas son las particularidades del bloque Try
... End Try:

Delimita el rea de cdigo en donde puede suceder una excepcin. El cdigo escrito dentro del bloque Try se considera cdigo protegido. Si ocurre una excepcin, el proceso se transfiere al bloque Catch, que contendr el c-

digo que queremos ejecutar dado el caso.


Se puede utilizar Exit Try para salir en cualquier instante del bloque de cdigo prote-

gido, continuando el flujo del programa despus del End

Try.

Bloque Catch
Si una excepcin sucede en el bloque Try, la ejecucin de dicho programa se suspende y contina al principio del bloque Catch. Estos bloques son una serie de estatutos que comienzan con la palabra reservada Catch, seguida de un tipo determinado y reconocido de excepcin, as como la accin que deber realizarse en caso de que la excepcin sea detectada. Estas son las particularidades del bloque Catch:

236

Aprenda 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 lgica 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 excepcin que ocurre con aquellas

reconocidas por .NET Framework, utilizando para ello el nmero nico de excepcin.

Bloque Finally
El bloque Finally se ejecuta despus del bloque Try, en caso de que no ocurran excepciones, o despus del bloque Catch correspondiente, en caso de que s haya sucedido una excepcin.
Finally,

Este bloque es opcional en su definicin, pero no en su ejecucin; si se define un bloque ste se ejecutar siempre.

El uso ms comn de Finally es liberar objetos o cerrar archivos despus de que una excepcin ha sucedido. En cierta forma, es lo mismo declarar Finally que escribir cdigo fuera de Try. Aunque Finally es opcional, recomendamos su utilizacin pues aclara el cdigo y permite la implantacin de un manejo verdaderamente estructurado: primero a) se define qu se hace, luego, b) se define qu hacer si hay excepciones, y finalmente, c) se define qu ocurre despus, hayan ocurrido o no excepciones. Si en el cdigo protegido por Try no ocurren excepciones, el control del programa hace caso omiso del bloque Catch, para pasar directamente a la ejecucin de Finally.

Clase System.Exception
Visual Basic maneja las excepciones a travs de la clase System.Exception. Recuerde que en Visual Basic todo es objeto, incluyendo una excepcin que es capturada. Una sintaxis comn de Catch es la siguiente:
Catch

VariableExcepcin As

System.Exception

En caso de que ocurra una excepcin en el bloque de cdigo protegido, el control del programa pasa a la lnea Catch, se capturar la excepcin y se almacenar en una instancia de la clase System.Exception que se declara en la misma lnea Catch.

Captulo 8. Manejo estructurado de excepciones

237

En nuestro ejemplo, VariableExcepcin sera la variable objeto en donde estara almacenada la informacin del problema ocurrido. En su calidad de objeto, VariableExcepcin tendra las propiedades y los mtodos de la clase que le dio origen, es decir, System.Exception. Algunas de las propiedades ms relevantes de System.Exception son las siguientes:
Propiedad Message StackTrace Descripcin Contiene la informacin de lo que caus la excepcin. Antecedente de ejecucin; muestra primeramente la lnea que caus el error (en su formato interno de ejecucin), sigue con el procedimiento, captulo y otros datos si los hubiere. Esto permite ubicar, en el contexto modular del programa, a la excepcin. Contiene el nombre de la aplicacin u objeto que origin la excepcin. Puede tratarse incluso de la librera de .NET Framework que es llamada a ejecucin y que causa la excepcin. El hecho de que una excepcin 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 aparicin. Muestra el nombre calificado de la excepcin, el mensaje, el anidamiento de excepciones y el antecedente de ejecucin.

Source

InnerException

ToString

Todo esto le quedar claro al hacer el primer ejercicio.

Ejercicio 8.1
Uso de Try Catch Finally y de las propiedades de la clase System.Exception En este ejercicio se proteger un cdigo determinado utilizando Try... Catch... El programa solicita dos nmeros (un dividendo y un divisor), y a partir de ah intentar una divisin. Deliberadamente se causar una excepcin al tratar de dividir entre cero (lo cual, como sabemos, es imposible). 1. 2. 3. Abra la solucin Ejercicios, que debe encontrarse en (archivo de extensin sln).
C:\APVBNETVS\Ejercicios

Finally...

Agregue a su solucin un proyecto Windows Console Application, llamado Excepciones1. Edite el programa de tal forma que aparezca como sigue:

238

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Codificacin de Excepciones1
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 26 27 28 29 30 31 32 33 34 35 Option Explicit On Option Strict On Imports System.Console Module Module1 Sub Main()

Module1.vb

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 ejecucin:) WriteLine(eProblema.StackTrace) WriteLine(> Texto completo:) WriteLine(eProblema.ToString) Finally Write(Pulse INTRO para continuar) ReadLine() End Try End Sub End Module

Ejecucin guiada de Excepciones1 4.

Module1.vb

Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (F5).

Captulo 8. Manejo estructurado de excepciones

239

5.

Cuando se protege un bloque de cdigo y ste no causa excepciones, se ejecutan los bloques Try y Finally, pero no Catch (este ltimo se ejecuta slo en el caso de excepciones). La lnea 12 declara todas las variables que vamos a utilizar en nuestro programa. La lnea 14 preguntar el nmero que actuar como dividendo (N1) y la lnea 16 el que actuar como divisor (N2). La lnea 17 es la que intenta la divisin (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 ningn problema, y por tanto, el programa trasladar el control de la ejecucin de la lnea 18 (bloque Try) a la 28 (bloque Finally); las lneas intermedias, que corresponden al bloque Catch, son ignoradas.

7.

Ejecute la aplicacin nuevamente, pero proporcione el valor 10 como dividendo y 0 como divisor. Cuando intenta resolver la lnea 14, el programa determina que eso no es posible, y genera una excepcin. Al detectar que una excepcin ha ocurrido, el control del programa se trasladar al bloque Catch, en la lnea 19. La excepcin que es capturada se almacenar como un objeto basado en System.Exception (declarada en la misma lnea Catch). En nuestro caso, el objeto se llama eProblema.

Las lneas 21, 23, 25 y 27 muestran algunas propiedades importantes del objeto eProblema que nos ayudarn a entender qu excepcin est ocurriendo y dnde. Despus de ejecutar el cdigo del bloque Catch, el programa ejecutar el bloque de cdigo 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 ejecucin: at System.Decimal.FCallDivide(Decimal& result, Decimal d1, Decimal d2) at System.Decimal.Divide(Decimal d1, Decimal d2) at Excepciones1.Module1.Main() in C:\APVBNETVS\Ejercicios\ Excepciones1\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 Excepciones1.Module1.Main() in C:\APVBNETVS\Ejercicios\ Excepciones1\Module 1.vb:line 17 Pulse INTRO para continuar

240

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Despliegue de errores en tiempo de diseo usando Error List


8. Ya vimos la forma en que se pueden detectar excepciones en tiempo de depuracin; lo ideal, sin embargo, es percatarnos 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 programacin determinado, junto con las referencias errneas el uso de elementos (variables, estructuras, clases, etctera) que no han sido declarados o que no estn disponibles dentro del alcance en el cual queremos utilizarlas son el pan de cada da en las labores de desarrollo. 9. Hay una herramienta en Visual Studio, Error List, que permite ver los errores de sintaxis y las referencias errneas en tiempo de diseo, es decir, durante la edicin. 10. En Error List se muestran los errores (errors), alertas (warnings) y mensajes (messages) que se presentan en el cdigo que estamos editando. Los errores son aquellas cosas que generarn la interrupcin del programa en tiempo de depuracin, las alertas son aquellos detalles que si bien no interrumpen la depuracin, si son prcticas inadecuadas de programacin. Los mensajes son los mensajes informativos proporcionados por Visual Studio, aplicables a lo que estemos editando. 11. Modifique la lnea 12 de su cdigo, cambiando el nombre de la variable N1 por N3. Al hacer esto se generarn mltiples problemas, dado que la variable N1 es utilizada en varias partes del programa y habr quedado sin declararse. 12. Seleccione View Error List (Ctrl-\, Ctrl-E) para ver la herramienta Error List.

Captulo 8. Manejo estructurado de excepciones

241

13. En Error List se muestran los errores que contiene el programa, el archivo fsico donde se encuentran los problemas y la lnea de cdigo en se encuentra (la lnea, la columna 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 slo tenemos dos errores, que son reportados en Error List. 14. Error List mostrar los errores de toda la solucin, por lo que es especialmente til cuando modificamos libreras. De esta forma podemos percibir los efectos que tendrn nuestras modificaciones en otros programas que las consumen. 15. Si se hace doble clic en un error, Visual Studio trasladar el control a la posicin en donde se encontr el mismo, lo que facilita enormemente la navegacin en el cdigo. 16. Haga doble clic en el error 2. Compruebe que se ha trasladado a la lnea y la posicin en donde se encontr el error. 17. Modifique la lnea 12 de su cdigo, y corrija el nombre de la variable que est ocasionando el problema. Cambie N3 por N1. 18. Guarde los cambios realizados en su solucin. FIN DEL EJERCICIO*

Filtrado de excepciones
Visual Basic proporciona mucha flexibilidad en el manejo de excepciones: posibilita tener rutinas genricas, o bien, atender las excepciones de manera particular. Tambin es posible seguir utilizando el objeto Err, que se utilizaba en versiones anteriores de Visual Basic.

Calificadores de excepcin
Los calificadores de excepcin son los nombres reconocidos internamente por .NET para cada una de las excepciones que pueden ocurrir. Generalmente, el calificador de excepcin 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 excepcin determinada por la clase System, que tiene que ver con una divisin entre cero? Las excepciones que existen pueden ser muchas; hay dos formas de conocerlas: que sucedan (lo que no es muy recomendable), o bien, revisando la ayuda de Visual Basic, en donde 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:

242

Aprenda 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 cdigo de Visual Studio, al realizar la declaracin Catch, sugiere a travs de IntelliSense las excepciones vlidas para lo que est desarrollando.

Objeto Err
Visual Basic sigue proporcionando el objeto Err, utilizado en versiones pasadas de Visual Basic, con la limitacin de que no se puede implementar el manejo estructurado de excepciones (Structured Exception Handling) usando Try... Catch... Finally..., y el manejo de errores (Error Handling) usando On Error, de manera simultnea. El objeto Err s puede utilizarse en el manejo estructurado de excepciones. Esto es muy til cuando se desea trabajar con nmeros de error en lugar de calificadores de excepcin, utilizando la propiedad Number.

Tipos de filtrado de excepciones


Cuando al definir un bloque Catch utilizamos un calificador de excepcin 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 excepcin, sino una condicin diversa, estamos creando un manejador de excepciones del usuario (User-Filtered Exception Handler), utilizando el estatuto When. En un bloque Try se pueden especificar tantos bloques Catch como se desee. Entre ms bloques Catch se tengan, ms particular ser el manejo de excepciones.

Captulo 8. Manejo estructurado de excepciones

243

Ejercicio 8.2
Filtrado de excepciones

En este ejercicio se proteger un cdigo determinado, utilizando Try... Catch... FiEl programa solicita dos nmeros (un dividendo y un divisor) y a partir de ah se intentar una divisin. Como sabemos, no se puede dividir un nmero entre cero. Difiere del ejercicio anterior en que en ste no se manejarn las excepciones de manera genrica, sino particularmente, a travs del filtrado de excepciones.
nally....

Deliberadamente se causar una excepcin al tratar de dividir entre cero, o proporcionando un valor que no es numrico. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado ciones2. 3. Edite el programa de tal forma que aparezca como sigue:
Excep-

Codificacin de Excepciones2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Option Explicit On Option Strict Off Imports System.Console Module Module1

Module1.vb

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:) N2 = ReadLine() Resultado = N1 / N2 WriteLine(Resultado: & Resultado.ToString) Catch eProblema As System.DivideByZeroException WriteLine(>>>>>>> Se trat de dividir entre cero)

244

Aprenda 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 conversin cast no es posible) WriteLine(Error: & Err.Number.ToString) Satisfactorio = False Catch When Err.Number = 6 WriteLine(>>>>>>> Manejo fuera de lmite (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

Ejecucin guiada de Excepciones2

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (F5). 5. Es importante tomar en cuenta que este programa no es type safe dado que tiene la indicacin Option Strict Off (lnea 2); esto porque intentaremos conversiones tipo cast. Tambin es importante ver que las variables de trabajo son de tipo Byte (lnea 12) y, por tanto, admiten slo 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 lnea 17, el programa determina que eso no es posible y genera una excepcin. La excepcin es de tipo DivideByZeroException, por lo que el control del programa se trasladar al bloque Catch que, de manera particular, hace referencia a dicho tipo de excepcin. El control del programa ir al bloque Catch que refiere el tipo de excepcin DivideByZeroException en la lnea 19. Se ejecutarn las lneas 20, 21 y 22, y luego se proceder a ejecutar el bloque Finally. Se ejecuta el bloque Catch que corresponde.

Captulo 8. Manejo estructurado de excepciones

245

La lnea 21 muestra el nmero de error del que se trata, utilizando para ello la propiedad Number del objeto Err, que tambin funciona en Visual Basic (en forma mejorada). La lnea 20 muestra un mensaje particular para la excepcin de la que se trata; ste es el mayor beneficio de filtrar los errores, ya que si se tienen excepciones diferentes, es lgico que se necesiten acciones diferentes para manejarlas. El manejo genrico de excepciones trata a todas por igual, lo que resta precisin a la funcin de depuracin de programas. El control del programa, agotado el bloque Catch particular para la excepcin que se provoc, seguir en el bloque Finally. Es importante ver cmo la lnea 9 declara una variable de tipo Boolean (Satisfactorio), que nos servir para saber si el proceso fue satisfactorio (True) o si present excepciones (False). Inicialmente se considera que el proceso es satisfactorio (True). En caso de que suceda alguna excepcin, se cambiar el valor de Satisfactorio a False; con dicho valor le daremos flexibilidad al cdigo del bloque Finally; anteriormente, Finally no diferenciaba si el programa haba causado excepcin o no. Nosotros le damos esa funcionalidad con la variable de apoyo, colocando un condicional que ejecute cierto cdigo si present excepciones, y otro bloque de cdigo 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 lmite (Overflow) Programa con problemas. Pulse INTRO para continuar

8. Ejecute la aplicacin nuevamente (tecla F5), proporcione el valor 10 como dividendo y A como divisor. Vea cmo el programa diferencia entre los tipos de excepciones que pueden ser causadas en un proceso. Al detectar que no es posible hacer la conversin 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 conversin cast no es posible Error:13 Programa con problemas. Pulse INTRO para continuar

246

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

9. Ejecute la aplicacin nuevamente (tecla F5) y proporcione el valor 1000. Vea cmo el programa diferencia entre los tipos de excepciones que pueden ser causadas en un proceso. Al detectar que 1000 excede el lmite de tipo Byte, se genera la excepcin. Si todo ocurri como se esperaba, la salida ser la siguiente.
Prueba de manejo de Excepciones Dame el dividendo:1000 >>>>>>> Manejo fuera de lmite (Overflow) Programa con problemas. Pulse INTRO para continuar

FIN DEL EJERCICIO *

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 cuando se detecta algo indeseable, como si se tratara de una excepcin reconocida por el lenguaje. En trminos generales, sabemos que cuando se produce una excepcin, el CLR genera una instancia de la clase System.Exception automticamente. La instanciacin, en ese caso, es realizada en tiempo de ejecucin por el mismo sistema. Nada nos impide instanciar nosotros: la forma en que podemos hacerlo es a travs 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 cdigo determinado, utilizando Try... Catch... Finally.... El programa solicita dos nmeros (un dividendo y un divisor) y a partir de ah se intentar una divisin. Como sabemos, no se puede dividir un nmero entre cero. Este ejemplo se diferencia de los anteriores en que nos anticiparemos para lanzar una excepcin antes de que el programa lo haga.

Captulo 8. Manejo estructurado de excepciones

247

Deliberadamente se causar una excepcin al tratar de dividir entre cero, y se capturar la excepcin antes de que se realice la divisin (cuando anteriormente se manifestaba la excepcin). 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado ciones3. 3. Edite el programa de tal forma que aparezca como sigue:
Excep-

Codificacin de Excepciones3

Module1.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 26 27 28 29 30 31

Option Explicit On Option Strict On Imports System.Console

Module Module1 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: & eProblema.Message) Finally Write(Pulse INTRO para continuar) ReadLine() End Try End Sub End Module

248

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejecucin guiada de Excepciones3

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 5. Proporcione el valor 10 como dividendo y 0 como divisor. Al intentar resolver la lnea 20, el programa determinara que eso no es posible, y generara una excepcin. No esperamos a que el programa seale la excepcin: sabemos que si el divisor es cero la operacin no puede ser correcta. Con eso en mente, decidimos anticiparnos,y en la lnea 17 evaluamos si N2 (el divisor) es cero, en cuyo caso, lanzaremos una excepcin nueva, creada por nosotros (instanciamos System.Exception), tal como lo muestra la lnea 18. El control del programa se traslada al bloque Catch, y es manejada como cualquier otra excepcin. 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 INTRO para continuar

FIN DEL EJERCICIO*

Captulo 8. Manejo estructurado de excepciones

249

MAPA

MENTAL DEL CAPTULO

250

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

TERMINOLOGA
Calificadores de excepcin, 241 Catch, 235 Cdigo protegido, 235 Err, 234, 242 Error List, 240 Errores, 233 Excepciones de hardware, 233 de software, 233 Excepciones, 233 Exit, 235 Finally, 235-6 InnerException, 237 Manejador de excepciones basado en tipos, 242 del usuario, 242 Manejo estructurado de excepciones, 234 Message, 237 SHE, 234 Source, 237 StackTrace, 237 Structured Exception Handling, 234 System.Exception, 236 Throw, 246 ToString, 237 Try, 235 TryCatchFinally, 235

PREGUNTAS
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 excepcin y para qu sirven? 8.4 De qu manera es posible lanzar excepciones personalizadas?

Captulo 8. Manejo estructurado de excepciones

251

Notas:

252

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Son violaciones a las reglas sintcticas o de alcance de un lenguaje de programacin: a) Errores b) Excepciones c) Bugs 2. Es la capacidad que tiene un lenguaje para permitir manejar excepciones a travs de una estructura de control que protege bloques de cdigo: a) Manejo estructurado de excepciones b) Control de errores c) Depuracin 3. Es la clase de .NET a travs 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 excepcin b) Excepciones nominadas c) Excepciones basadas en tipo 5. Filtrado de errores en el que, utilizando Catch, se especifica una condicin usando where: a) Filtrado de excepciones basado en tipos b) Filtrado de excepciones del usuario c) Filtrado condicional

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. 7. Las excepciones tienen mayor alcance que los errores. La ejecucin del cdigo Finally se llevar a cabo slo si se produce una excepcin. Visual Basic es compatible con Err, utilizado en versiones anteriores. Throw sirve para provocar excepciones. Try y On Error pueden convivir en un mismo procedimiento o mtodo.

8. 9. 10.

Captulos:
9 Fundamentos de la programacin orientada a objetos

Parte 3
Programacin orientada a objetos
En esta parte del libro se presentan los conceptos de la programacin orientada a objetos (POO) utilizando Visual Basic. Aprovecharemos las capacidades de este lenguaje y las herramientas de Visual Studio para la creacin de objetos de negocios y clases, que posteriormente podrn ser utilizados desde cualquier aplicacin, haciendo realidad el esquema de desarrollo reutilizando el cdigo. Aprender a encapsular clases, utilizar la herencia de funcionalidad y el manejo contextualizado de procedimientos por medio del polimorfismo. Nuestra reflexin es la siguiente: la bsqueda de tiempo libre lleva a las personas a ser creativas, para hacer ms cosas con el mnimo esfuerzo. Sin embargo, no todas las personas con estas caractersticas son creativas; slo aquellas con la curiosidad y los conocimientos suficientes podrn utilizar esa creatividad para realizar cosas que trabajen para facilitarles la existencia. El enfoque orientado a objetos nos lleva a identificar algo que ya hemos hecho y reutilizarlo para hacer nuestros desarrollos menos extenuantes.

10 Clases, mtodos y propiedades 11 Herencia y polimorfismo

Herramientas de Visual Studio revisadas:


1. Form Designer. 2. Selector de documentos activos. 3. Class Designer. 4. Class Diagram. 5. Class View.

CAPTULO

Fundamentos de la programacin orientada a objetos


Objetivos: Aprender los conceptos fundamentales de la programacin orientada a objetos, as como las ventajas de dicha orientacin. 1. Conocer los trminos fundamentales de la programacin orientada a objetos: clases, objetos, campos, propiedades, mtodos y eventos. 2. Entender en qu consiste el encapsulamiento, la herencia y el polimorfismo. 3. Aprender las capacidades de adaptacin de los objetos: Overloading, Overriding y Shadowing.

255

256

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Trminos bsicos de POO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clases y objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Campos, propiedades, mtodos y eventos . . . . . . . . . . . . . . . . . . . . . . Encapsulamiento (encapsulation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Herencia (inheritance) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Polimorfismo (polymorphism) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Overloading, Overriding y Shadowing . . . . . . . . . . . . . . . . . . . . . . . . . Elementos esenciales de los objetos que permiten su programacin . . . . . . Identidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comportamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comprobacin de la identidad, el estado y el comportamiento de objetos . . . . . . . . . . . . . . . . . . . . . . . . Instanciacin de objetos en Visual Studio . . . . . . . . . . . Modificacin de la identidad de los objetos en Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Programacin de comportamientos desde Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 258 258 259 261 263 264 265 265 266 269 269 269 273 274 275 276 276 278

Captulo 9. Fundamentos de la programacin orientada a objetos

257

Clases y objetos

El presente captulo expone los conceptos generales de la programacin orientada a objetos (POO). Estos conceptos estn relacionados con los objetos en s y con su relacin con otros objetos.

Todava se habla de la POO con entusiasmo, sobre todo cuando quien lo hace no ha programado con lenguajes como C++ o Java. Es necesario destacar que hace mucho tiempo el tema dej de ser una novedad, y, sin embargo, por alguna extraa razn, se sigue viendo a dicho modelo de programacin como lo nuevo (sobre todo entre aquellos que nunca han desarrollado en POO). Quiz tenga mucho que ver que el lenguaje ms utilizado en el mundo, Visual Basic en su versin 6, no estaba orientado a objetos; cualquiera que programara en POO formaba parte de un grupo ms reducido y diferente, lo que confiere siempre un cierto grado de especialidad. Hasta hace poco, un programador en C++ era ms elogiado que un programador de Visual Basic, en gran medida porque haba menos programadores de C++ que de Visual Basic (simple economa: a menor oferta, mayor el precio). Ahora las cosas estn cambiando, ya que Visual Basic se integra al mundo POO, toma de s mismo la simplicidad de su cdigo, y adopta de la plataforma .NET capacidades que eliminan las limitaciones que anteriormente tena, ganando flexibilidad y potencia, y cubriendo aspectos que antes eran ms sencillos 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 ms sencillas de implementar en una orientacin que en otra, as que no se sienta mal por no haber aprendido a programar en POO con anterioridad. Quiz no lo haya necesitado. Aunque la experiencia previa en programacin es muy til al aprender POO, no todo el que programa Visual Basic 6.0 podr programar en Visual Basic sin modificar algunos paradigmas. Es importante, por no decir que indispensable, comprender el marco terico del modelo orientado a objetos para ser un buen programador en POO.

Trminos bsicos 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 programacin orientada a objetos muy bien dominados. Los conceptos que vea en este captulo son fundamentales para entender la progra-

258

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

macin orientada a objetos en Visual Basic; lalos cuantas veces sea necesario hasta que los comprenda plenamente.

Clases y objetos
Una clase es una definicin formal de un tipo de objeto. La clase define qu datos formarn parte de un objeto, qu tareas desarrollar el objeto, y de qu manera interactuar el objeto con el usuario y con otros objetos. Los objetos son instancias de una clase. Por instancia podemos entender una copia funcional de la clase. A la accin de generar un objeto a partir de una clase, se le denomina instanciacin. Al procedimiento o cdigo que realiza la instanciacin se le denomina constructor. Al procedimiento o cdigo que destruye a un objeto, liberando los recursos que ste consuma, 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 collector, que es el elemento de CLR que se encarga de eliminar objetos no utilizados a fin de liberar los recursos que utilizan.

Campos, propiedades, mtodos y eventos


Las clases, y por tanto los objetos que se derivan de ellas, son un conjunto de datos y comportamientos; tanto las clases como los objetos estn formadas por campos, propiedades y mtodos. Los campos y las propiedades representan la informacin que un objeto contiene. Los campos (fields) son elementos de una estructura que actan como valores equivalentes, nominados. Las propiedades (properties) son muy parecidas a los campos en el sentido de que almacenan valores; su implementacin, sin embargo, es ms formal, ya que para leer y asignar valores a las propiedades es necesario el uso de las instrucciones Property Get y Property Set, las cuales proporcionan un mayor control con respecto a la forma en la que los valores pueden ser asignados o ledos. Cuando se utilizan propiedades, la lectura y la asignacin de valores son directas, lo que implica que entre el programa que usa las propiedades y el valor almacenado existe una capa intermedia de control, que ayuda a aislar (isolate) a la aplicacin de los valores que utilizar, permitiendo que dichos valores puedan ser validados antes de que se lean o asignen.

Captulo 9. Fundamentos de la programacin orientada a objetos

259

Los mtodos son los comportamientos predefinidos que puede presentar un objeto. En cierta forma, los mtodos representan las acciones que el objeto podr realizar. La manera en que se pueden definir los mtodos 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 formarn los mtodos disponibles para el objeto. Un evento es el resultado de la interaccin que un usuario o programa tiene con un objeto, en una circunstancia dada, que desencadena la ejecucin de un procedimiento o mtodo.

FIGURA 9.1 Estructura de un objeto

La interaccin que tiene el usuario o programa con un objeto provoca internamente una interaccin de dicho objeto con otros, que puede ser bidireccional, ya sea que el objeto reciba una peticin de un objeto o aplicacin, o bien que realice una peticin a otro objeto o aplicacin. A las propiedades, mtodos y eventos tambin suele llamrseles miembros (members), que son el conjunto de elementos declarados por una clase.

Encapsulamiento (encapsulation)
Para que una aplicacin realmente est orientada a objetos debe admitir las cualidades de encapsulamiento, herencia y polimorfismo. Estas tres cualidades son representativas de POO.

260

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

El encapsulamiento es la capacidad que tiene un objeto para almacenar datos y procedimientos, como una unidad funcional, y permitir el acceso a ellos sin que los dems objetos tengan la necesidad de conocer cmo se integran dichos datos y dicho comportamiento dentro del objeto. Usted ya sabe que los objetos se hacen peticiones entre s a travs de mensajes, y que un objeto puede hacer uso de otros objetos. Imagine que un objeto (objeto A) realiza un clculo financiero complejo. Imagine que otro objeto (objeto B) realiza un clculo que determina el monto de los gastos de la compaa en un periodo determinado. Resulta que el objeto A, para desarrollar sus operaciones, necesita la informacin que produce el objeto B, y para obtener dicha informacin se comunica con B enviando un mensaje (mensaje X). Como respuesta, el objeto B le enva al objeto A la contestacin a travs de un mensaje (mensaje Y). La persona que desarroll el objeto B se da cuenta de que el clculo que realiza el objeto puede mejorarse. Procede a cambiar el cdigo (comportamiento), hacindolo ms eficiente, 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 informacin que se le pide. El encapsulamiento permite que el estado o el comportamiento de un objeto pueda modificarse para darle mayor o mejor funcionalidad 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, slo que en la mitad del tiempo que antes. El encapsulamiento slo debe respetar una regla: al modificar un objeto, ste debe seguir aceptando los mismos mensajes de peticin, y enviando los mismos mensajes de respuesta. Fuera de eso, el objeto puede ser una caja negra para los dems desarrolladores, sin que ello perjudique la funcionalidad de la aplicacin. Las ventajas que proporciona el encapsulamiento a los programadores son las siguientes:
Facilita la modularidad.

Un mdulo es un bloque de cdigo que desarrolla un proceso especfico. La modularidad es la capacidad que se tiene de dividir los procesos en mltiples procesos ms pequeos. Cuando se inicia un proyecto de programacin orientada a objetos, cada objeto acta como un mdulo; a cada desarrollador se le pide que desarrolle ciertos objetos, que obedeciendo a determinados mensajes de peticin, proporcionen determinados mensajes de respuesta. Al final del proyecto se integran todos los objetos, que de forma complemen-

Captulo 9. Fundamentos de la programacin orientada a objetos

261

taria se dan servicio entre s; en un momento dado, si a una persona se le ocurre modificar un objeto que otra persona est utilizando, esto no impacta negativamente, porque los mensajes que se comunican los objetos no deben de sufrir variacin.
Mantiene la informacin oculta.

El objeto puede por s solo encargarse de modificar los valores de sus propiedades; adems, para hacer uso del objeto no es necesario conocer cmo realiza las operaciones (comportamiento). Slo el objeto se encarga de manejar su estado y comportamiento. Hay procesos tan complejos, importantes y confidenciales que slo el desarrollador del objeto est autorizado para conocerlos. Imagine que tiene un objeto que se encarga de codificar y decodificar informacin confidencial en la organizacin; por ejemplo, si todos los programadores que utilizaran el objeto pudieran conocer los pormenores del algoritmo de codificacin y decodificacin, no estaramos seguros en qu momento podra ser conocido por todos, y, por tanto, copiado y vulnerado. El encapsulamiento elimina la necesidad de que otros conozcan cmo est codificado un objeto y, por tanto, favorece la confidencialidad de la implantacin 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 (derived class), hereda todas las propiedades, mtodos y eventos de la clase base y a partir de ah, es posible agregarle las propiedades y mtodos particulares que la hacen especial. Un ejemplo puede aclararnos las cosas. Imagine que crea una clase llamada Vehculo AutoMotor. Esta clase contendr propiedades que todos los vehculos automotores tienen como son color, tipo de transmisin, tipo de combustible, etctera. Adems, tendr definidos los mtodos aplicables para todos los vehculos automotores; por ejemplo, encender o apagar el motor. Hay un tipo de vehculos automotores que sirven para carga de materiales (vehculo de carga); en ellos, la capacidad de carga en toneladas, las dimensiones mximas de la carga y la necesidad de refrigeracin de la carga son importantes, pero, son esos datos importantes para un vehculo que slo es utilizado para transportar personas? La respuesta es que no. Tenemos las siguientes alternativas de solucin para manejar la informacin del ejemplo:
Definir la clase VehculoAutoMotor con todas las caractersticas posibles para todos los

vehculos automotores posibles; eso sobrecargara a la clase de muchas propiedades no aplicables para todos los vehculos, complicando el trabajo de afirmar o negar las carac-

262

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

tersticas aplicables a un vehculo en particular. En realidad, todo est siendo manejado en un mismo objeto, tal y como sera en una programacin procedural.
Definir una clase independiente de VehculoAutoMotor; por ejemplo, VehculoAutoMotorCarga,

que contenga todas las propiedades y los mtodos que requieren ser especificadas para un vehculo automotor de carga. Obviamente, muchas de las caractersticas de los vehculos automotores de carga son comunes para todos los vehculos automotores. Eso implicara una doble codificacin (codificacin redundante), que revela que, no obstante que ya tenamos codificados los pormenores de los vehculos automotores, no reutilizamos dicho cdigo, pues creamos uno enteramente nuevo. En esta alternativa tampoco funciona la herencia.

Definir una clase independiente, por ejemplo VehculoAutoMotorCarga, que contenga

slo aquellas propiedades y mtodos no definidos en VehculoAutoMotor. La nueva clase (VehculoAutoMotorCarga) se generara a partir de una clase base (Vehculo AutoMotor), aprovechando toda su codificacin. Esta alternativa implica un uso funcional de la herencia, en donde se tiene una clase base y una clase derivada. FIGURA 9.2 Herencia
Clase Base

Las ventajas que proporciona la herencia para los programadores de software son las siguientes:

Clases derivadas

Captulo 9. Fundamentos de la programacin orientada a objetos

263

Reuso de cdigo.

La mayor ventaja de la herencia es que el cdigo se reutiliza de una forma ms eficiente, pues las clases parten de otras clases ms generales; esto garantiza que de inicio las clases ya tienen la funcionalidad de otras anteriormente creadas. Slo se estar desarrollando nueva funcionalidad, evitndose el cdigo redundante. Es posible realizar una jerarqua que distinga procesos generales y especficos.

Jerarqua de clases.

La figura 9.2 muestra de manera conceptual cmo, a partir de una clase base, surgen clases derivadas que pueden disponer de todas las propiedades, mtodos y eventos de la clase base, y que adems incluyen las caractersticas particulares de aquello que no es posible representar usando solamente lo definido en la clase base. En la jerarqua de clases, la clase base no requiere de las clases derivadas, pero las clases derivadas s requieren de lo definido en la clase base.

Polimorfismo (polymorphism)
El polimorfismo es la capacidad de manejar mltiples clases que pueden ser utilizadas de manera intercambiable a travs de una misma implementacin (nombre de clase). El polimorfismo es esencial para la programacin orientada a objetos, ya que permite, a travs de un mismo nombre de clase, agrupar diferentes funcionalidades, dependiendo de las propiedades y mtodos que se utilicen al momento de invocarlas.

NOTA
En Visual Studio puede verse claramente esta capacidad. Si en alguno de sus programas utiliza, por citar un ejemplo, la funcin Val, que convierte a nmero una expresin, aparecer una referencia como sigue:

La misma implementacin (Val) puede comportarse de tres maneras, dependiendo del argumento que reciba. Si la funcin recibe un argumento String, realizar la conversin y devolver un valor de tipo Double; si recibe un argumento de tipo Char, devolver un valor de tipo Integer; y si recibe un argumento Object, devolver un valor de tipo Double. El programador no tendr que preocuparse por saber qu clase ha de utilizar en caso de proporcionar un argumento String, Char u Object. El polimorfismo se encarga de realizar la seleccin adecuada.

264

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Imagine que tiene una aplicacin que controla las ventas de un negocio. Puede ser que tenga un objeto llamado RegistraVenta, que se encargue de almacenar en una base de datos los pormenores de la venta. Suponga que hay un objeto llamado ActualizaLneaCrdito que se encarga de actualizar la lnea de crdito de los clientes que compran en el establecimiento; como ha de suponer, las acciones que realizar ActualizaLneaCrdito tienen que ver si la compra se realiza a crdito o de contado. En enfoque procedural, sera necesario hacer dos procedimientos 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 actualizacin de la lnea de crdito; la diferencia estriba en que para el programa slo existir una. Ser la misma plataforma de ejecucin la que determine, con base en los datos proporcionados, qu clase es la que se emplear.

Overloading, Overriding y Shadowing


Para implementar el polimorfismo, hay que conocer tres conceptos bsicos: Overloading, Overriding y Shadowing. Al explicar el polimorfismo, concluimos que un mismo nombre de mtodo puede tener funcionalidad distinta dependiendo de los argumentos que le son proporcionados. Como sabe, los argumentos van entre parntesis y separados por comas, despus del nombre del mtodo o funcin; por tratarse de una lista de valores, estamos ante la presencia de una serie de valores.

NOTA
La implementacin en programacin de la terminologa descrita en este captulo se demostrar en el captulo siguiente.

Los miembros con caracterstica Overloaded son utilizados para proporcionar diferentes versiones de una propiedad o mtodo que tiene el mismo nombre, pero que acepta diferente nmero de argumentos, o argumentos de diferente tipo de dato. Las propiedades y mtodos con caracterstica Overriden son utilizados para reemplazar una propiedad o mtodo que, habiendo sido heredado de una clase base, no es lo apropiado para la clase derivada. Esto permite sustituir elementos heredados de la clase base, con aquellos que la clase derivada realmente necesita.

Captulo 9. Fundamentos de la programacin orientada a objetos

265

La nica restriccin que se tiene es que los miembros Overriden deben aceptar el mismo nmero 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 caracterstica 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 programacin


Al generar instancias de una clase, estamos generando un objeto. Una vez que los objetos existen, es posible utilizarlos para obtener funcionalidad de la aplicacin. 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 dems. Los objetos tienen tres caractersticas principales:
Identidad Estado Comportamiento

Identidad
La identidad del objeto es su capacidad de tener un nombre que lo identifica y diferencia de los dems. No podemos crear ningn objeto sin asignarle un nombre para su identificacin; de ser as generaramos un elemento al cual no podramos invocar de ninguna manera. Al momento de instanciarse, todos los objetos son exactamente iguales a la clase de la cual derivan; slo se diferenciarn por su identidad. En Visual Basic los objetos poseen una propiedad llamada Name, a travs de la cual se manifiesta su identidad. A la propiedad Name tambin se le conoce como propiedad de identidad. La propiedad Name puede ser utilizada en tiempo de ejecucin para evaluar la identidad de un objeto por su nombre, y no por su identificacin en el programa (nombre de la variable objeto, a lo que se conoce como nombre programtico). El valor que posee la propiedad Name es de tipo String, lo que facilita mucho su utilizacin en los procesos que estemos codificando. Los programadores de Visual Basic en su versin 6 tal vez no le dieran importancia al hecho de que todos los controles que se utilizaban en las aplicaciones deban ser referidos por

266

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

su nombre programtico, pues era la nica posibilidad que haba para identificar los elementos de un programa. Una vez realizada la codificacin, cambiar la identidad a un control (modificar la propiedad Name) era impensable, ya que sera necesario modificar el cdigo para admitir el nuevo nombre asignado. En Visual Basic queda claramente definido que se tiene un nombre programtico (nombre de los objetos) y una identidad de los objetos, en la propiedad Name.

Estado
El estado de un objeto es la situacin de forma y comportamiento que tiene el objeto en un momento determinado en tiempo de ejecucin. El estado est determinado por el juego de valores que tienen sus propiedades. Como sabemos, las propiedades son las caractersticas particulares del objeto y especifican su nombre, posicin, apariencia y hasta sus capacidades de interaccin con el usuario y otros objetos. Un objeto puede estar disponible o no para su uso en una interfaz (Enabled=True o Enabled=False); puede tener un ancho de 10 o 20 pxeles (Width=10 o Width=20). Si cambiamos el valor de cualquiera de las propiedades, como podra ser incrementar el ancho del objeto de 10 a 20 pxeles, ello representa una modificacin de estado. La figura 9.3 nos invita a imaginar el ncleo de un objeto como un conjunto de propiedades establecidas; vea cmo la identidad del objeto tambin forma parte del estado del mismo, pues Name es una propiedad, al igual que las de posicin, apariencia y otras.

Comportamiento
El comportamiento es la capacidad del objeto para funcionar de una determinada manera. Como respuesta a la interaccin 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 ejecucin:
Los mtodos Los procedimientos de evento Los procedimientos y funciones definidas por el usuario

Los mtodos, como sabe, son los comportamientos predefinidos que un objeto puede presentar, y que se encuentran definidos por la clase de la cual el objeto deriva.

Captulo 9. Fundamentos de la programacin orientada a objetos

267

Los procedimientos de evento son aquellos procedimientos que le suceden a un objeto como respuesta a la interaccin 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 decirle a su programa a) que quiere que un objeto determinado sea sensible a los eventos que le sucedan (especificacin WithEvents al momento de la declaracin), b) elaborar un procedimiento y c) especificarle a dicho procedimiento que ser ejecutado en caso de que le suceda el evento a alguno de los objetos que maneje (handles). En versiones anteriores de Visual Basic, un procedimiento de evento poda servir slo para manejar las acciones que deberan suceder cuando a un objeto determinado le suceda un evento determinado; de hecho, el nombre de los procedimientos de evento estaba formado por el nombre del objeto y el nombre de evento, separados por un guin bajo. Haba controles para los cuales se aplicaban las mismas validaciones (por ejemplo, que los cuadros de texto no se dejaran vacos); no obstante que el proceso a realizar era el mismo para todos los cuadros de texto, a cada uno de ellos se le deba definir un procedimiento de evento. Algunas cosas cambiaron en Visual Basic. Un procedimiento de evento puede manejar un mismo evento para uno o ms objetos; por ese motivo, el nombre asociado a un solo objeto y un solo evento ya no tiene sentido. Ahora el nombre del procedimiento de evento puede ser el que sea. La nica cosa que debemos respetar son los argumentos implcitos. Los procedimientos pueden admitir argumentos; con base en ellos es posible modificar el resultado del procesamiento o el valor que devuelven (en el caso de las funciones). Los argumentos implcitos son aquellos que son declarados por Visual Basic de manera automtica; en la declaracin de este tipo de argumentos el programador no participa ms que como espectador y usuario. Cada evento podr exigir la presencia de los argumentos implcitos que necesita para trabajar; cuando nosotros declaramos un objeto especificando que queremos que sea sensible a eventos (WithEvents), tambin le estamos diciendo al programa que queremos que Visual Basic se encargue de actualizar, en tiempo de ejecucin, los datos de los argumentos implcitos de cada uno de los eventos aplicables al objeto. Nosotros no determinamos el valor que tendrn los argumentos implcitos; es el CLR, en tiempo de ejecucin, el que determina qu valores tendrn. 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 ms pura de codificacin. Hace muchos aos, cuando nadie hablaba an de objetos ni de eventos, los procedimientos y funciones definidos por el usuario ya existan.

268

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

NOTA
Algunos desarrolladores, para no estar preocupndose respecto a qu objetos permitirn manejo de eventos y cules no, colocan la especificacin WithEvents a todos los objetos. Aunque es una forma simple de quitarse problemas, no es lo ms estructurado; deja ver que el programador no conoce a profundidad el comportamiento que tendr su interfaz. Sugerimos colocar WithEvents slo a los objetos que realmente manejarn procedimientos de eventos.

La figura 9.3 muestra un panorama completo de la composicin de un objeto. El crculo 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 estn las formas de comportamiento, que mantienen un dilogo con dicho estado, pues los mtodos, procedimientos de evento y procedimientos de usuario pueden modificar el estado, y ste puede determinar la disponibilidad de las formas de comportamiento. Los procedimientos y funciones definidas por el usuario son la parte ms especializada de las aplicaciones, ya que contienen los bloques de cdigo 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 aplicacin. FIGURA 9.3 Estado y comportamiento

Captulo 9. Fundamentos de la programacin orientada a objetos

269

Ejercicio 9.1
Comprobacin 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. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Windows Application, llamado CambiaEstado.

Interfaz CambiaEstado - Form1.vb [Design]

Instanciacin de objetos en Visual Studio


3. Al indicar la creacin de una aplicacin Windows, Visual Studio se encarga de instanciar objetos en tiempo de diseo. El primero de ellos es un objeto que tiene como origen la clase System.Windows.Forms.Form, de nombre predeterminado Form1; este objeto 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 nombre del type que le da origen, ms un nmero consecutivo de todos los objetos del mismo tipo encontrados en el proyecto. Ya que se genera la instancia de System.Windows.Forms.Form, aparece la herramienta Form Designer, que permitir la modificacin del estado del objeto Form1 en tiempo de diseo. Cuando tenemos la posibilidad de manipular objetos en Form Designer se dice que trabajamos en tiempo de diseo.

4.

5.

270

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

FIGURA 9.4 Form Designer

Moderadores de tamao

6.

7. 8.

El formulario, al igual que todos los objetos que son agregados a la interfaz en tiempo de diseo, tienen valores por omisin en todas sus propiedades. El objeto Form1 posee un aspecto que los valores por omisin le proporcionan. Seleccione la opcin View Toolbox (oprima las teclas Ctrl-Alt-X) para que aparezca Toolbox. Si Toolbox est en ocultacin automtica, fjela en Document Window. En Toolbox expanda el grupo de controles Common Controls.

Captulo 9. Fundamentos de la programacin orientada a objetos

271

9.

Haga doble clic en el control Button. Con ello se agregar en modo de insercin un botn en el rea de diseo de Form Designer. 10. Su interfaz ahora debe aparecer como sigue. La pregunta interesante es dnde se guarda el cdigo que genera esta interfaz?

FIGURA 9.5 Interfaz con controles derivados de clases

11. En Solution Explorer haga clic en Show All Files. 12. Seleccione el nodo CambiaEstado Form1.vb. Vea cmo dicho nodo se compone de dos programas: Form1.vb y Form1.Designer.vb. En Form1.vb se editan los comportamientos de la aplicacin, mientras que en Form1.Designer.vb se codifica la interfaz, instanciando todos los objetos.

272

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

13. Haga doble clic sobre el nodo Form1.Designer.vb y vea el cdigo que aparece. Es un poco complejo, pero es el trabajo que Form Designer nos ha ahorrado. Con Visual Studio no nos preocupamos por instanciar los objetos de interfaz, ni por cambiar de forma programtica los valores por omisin de las propiedades. Al agregar un botn, por ejemplo, se agrega automticamente el siguiente cdigo en el programa Form1.Designer.vb:
Me.Button1 = New System.Windows.Forms.Button ... Button1 Me.Button1.Location = New System.Drawing.Point(0, 0) Me.Button1.Name = Button1 Me.Button1.Size = New System.Drawing.Size(75, 23) Me.Button1.TabIndex = 0 Me.Button1.Text = Button1 Me.Button1.UseVisualStyleBackColor = True ... Friend WithEvents Button1 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 dedquese a desarrollar en modo de diseo lo ms que pueda. Slo edite el cdigo si sabe lo que est haciendo, 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 Form1.vb, para regresar al tiempo de diseo del formulario. 16. Seleccione View Properties (F4) para ver la herramienta Properties. 17. Seleccione el objeto Form1, haciendo un solo clic en el formulario que se ve en Form Designer. 18. Busque la propiedad Size, y vea las dimensiones que tiene el formulario. Algunas propiedades pueden expandirse, lo que indica que se forman por otras propiedades. La propiedad Size se compone de dos propiedades: Width y Height.

Captulo 9. Fundamentos de la programacin orientada a objetos

273

Escriba los valores que encuentra.


Height: Width:

________________ ________________

19. Seleccione el modificador de tamao que aparece en el borde inferior del formulario y arrstrelo hacia arriba, de tal forma que el formulario quede a la mitad de su tamao original. Consulte nuevamente los valores que componen Size. Compruebe que las modificaciones en tiempo de diseo afectan directamente las propiedades de los objetos, modificando su estado.
Height: Width:

________________ ________________

20. Para mayor precisin, haga los siguientes cambios en Form1.


Height Text 150 Cambio de estado

21. Seleccione el objeto Button1, haciendo un solo clic en el botn que se ve en Form Designer.
Text Cambiar Color

22. Utilizando el modificador de tamao que se encuentra en el borde derecho del botn, ample el ancho del botn.

23. Arrastre el botn al centro del formulario, para que sea ms esttico. 24. Decida la forma en que prefiere cambiar las propiedades de sus objetos.

Modificacin de la identidad de los objetos en Visual Studio


25. Modificar la identidad de los objetos en Visual Studio es muy sencillo, basta con seleccionar el objeto al que se le desea cambiar la identidad y modificar el valor de su propiedad Name desde Properties. 26. Seleccione el objeto Form1. 27. En Properties busque la propiedad Name y asigne el valor de Formulario. Por omisin Visual Studio le asigna un nombre a cada objeto. Modifique el nombre por omisin slo si cambiar el estado del objeto o si utilizar sus propiedades de forma programtica.

274

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Cuando hacemos referencia a la forma programtica de hacer las cosas, queremos decir que a travs de cdigo hacemos cosas que es posible hacer en tiempo de diseo utilizando las herramientas de Visual Studio. 28. Una recomendacin general es que asigne los nombres de los objetos al inicio de los trabajos de desarrollo, antes de codificar comportamientos; asignados los nombres procure no cambiarlos, dado que el tal caso tendra que actualizar cada lnea de cdigo en donde los objetos eran utilizados, o de lo contrario se generar error. 29. Seleccione a Button1 haciendo un solo clic en el botn, y en Properties cambie el valor de la propiedad Name a Cambiar.

Programacin de comportamientos desde Visual Studio


30. Haga doble clic en Button1. Con ello se podr editar el procedimiento de evento Click; en dicho procedimiento se codifica lo que queremos que pase cuando en tiempo de ejecucin el usuario haga clic en el botn. El programa que se editar es Form1.vb. 31. Agregue el siguiente cdigo al procedimiento:
Me.BackColor = Color.Coral Cambiar.BackColor = Color.LightSkyBlue

El Text Editor presentar lo siguiente:

32. Vea cmo la clase tiene el mismo nombre del objeto Form y cmo el procedimiento es igual al nombre del botn y del evento que se est codificando (Cambiar_Click). La lnea 4 cambia el color de fondo del formulario, mientras que en la lnea 5 se cambia el color de fondo del botn. 33. Es importante notar que los cambios de estado en forma programtica se logran de la siguiente forma:
Objeto.Propiedad = Valor

34. Vea cmo el formulario no se refiere con su nombre (Formulario) 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, tendra que referirse el formulario por su nombre.

Captulo 9. Fundamentos de la programacin orientada a objetos

275

Ejecucin guiada de CambiaEstado - Form1.vb

35. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 36. Haga clic en el botn y vea los cambios de color que provocamos. FIN DEL EJERCICIO *

MAPA

MENTAL DEL CAPTULO

276

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

TERMINOLOGA
Argumentos implcitos, 267 Campos, 258 Clase, 258 Codificacin redundante, 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 Instanciacin, 258 Jerarqua de clases, 263 Members, 259 Mtodos, 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 Programacin orientada a objetos (POO), 257 Properties, 258 Propiedades, 258 Reuso de cdigo, 263 Shadowed, 265 Shadowing, 264 WithEvents, 267

PREGUNTAS
9.1 Cules son las tres caractersticas principales que identifican a la programacin orientada a objetos? 9.2 Defina clase, objeto, propiedad, mtodo y evento. 9.3 Explique qu es el estado de un objeto. 9.4 Explique los conceptos Overloading, Overriding y Shadowing. 9.5 Cules son las ventajas que aporta la herencia? 9.6 Cules son las ventajas que aporta el encapsulamiento? 9.7 Cules son las ventajas que aporta el polimorfismo?

Captulo 9. Fundamentos de la programacin orientada a objetos

277

Notas:

278

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que considere que responde a la pregunta.
1. A la accin de generar un objeto a partir de una clase se le llama: a) Instanciacin b) Generacin de objetos c) Derivacin 2. Es el procedimiento o cdigo 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: a) Polimorfismo b) Herencia c) Encapsulamiento 5. Son asociaciones formales de uno o ms 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 lnea la letra F si el enunciado es falso, y V si es verdadero.


6. 7. La clase derivada hereda su funcionalidad a la clase base. El estado de un objeto es su capacidad de tener un nombre que lo identifica y lo diferencia de los dems objetos. 8. Los objetos que producirn la ejecucin de procedimientos de evento requieren ser creados con la clusula WithEvents. 9. 10. En programacin POO, la codificacin redundante es necesaria. Los mtodos son comportamientos predefinidos de un objeto.

CAPTULO

10

Clases, mtodos y propiedades


Objetivos: Aprender a definir de manera programtica clases, mtodos y propiedades. 1. Aprender qu son las clases y cmo se definen de manera programtica. 2. Conocer las propiedades y cmo se definen de manera programtica. 3. Conocer los mtodos y cmo se definen de manera programtica. 4. Aprender a crear bibliotecas DLL e invocarlas desde programas externos. 5. Sabr qu son los modificadores de acceso y cmo se utilizan en la programacin orientada a objetos.

279

280

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Definicin de una clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Definicin de propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin de bibliotecas de clases (libreras) . . . . . . . . . . . . . . . . . . . . . . . . . . Condiciones para la utilizacin de las bibliotecas de clases . . . . . . . . . . . . . . Creacin de una clase con propiedades y mtodos . . . . . . . . . . . Uso de Code Snippets . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin de un diagrama de clases y modificacin del mismo con Class Designer . . . . . . . . . . . . . . . . . . . . . Uso del selector de documentos activos (Active Documents) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adicin de mtodos usando Class Designer . . . . . . . . . . Uso de Class View para examinar objetos . . . . . . . . . . . Consumo una clase a travs de instancias . . . . . . . . . . . . . . . . . . Uso de Object Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Visualizacin de referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uso de clases en soluciones diferentes . . . . . . . . . . . . . . . . . . . . Integracin de proyectos existentes a una nueva solucin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Distribucin de copias locales de libreras DLL . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 281 283 284 284 285 289 291 292 296 298 302 302 304 304 305 307 308 308 310

Captulo 10. Clases, mtodos y propiedades

281

En captulos 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 Framework es la solucin a nuestros problemas; seguramente hay algn proceso o clculo muy especfico que nosotros deberemos desarrollar. Por esa razn es indispensable aprender a desarrollar una biblioteca de clases propias.

Definicin de una clase


Antes de proceder a desarrollar una clase determinada, asegrese de que no est desarrollada ya y que forme parte de la biblioteca de clases de .NET Framework; sera 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

10

NombreClase CdigoClase

End Class

Donde NombreClase es el nombre a travs del cual la clase puede ser invocada. La instanciacin de la clase se deber llevar a cabo por medio de este nombre. CdigoClase es el contenido de la clase; como sabemos, el contenido de la clase se compone de datos (propiedades) y comportamiento (mtodos y funciones). Por esa razn debemos definir dentro de la clase los procedimientos (Sub - End Sub), funciones (Function - End Function), y propiedades (Property - End Property) que debe tener, entre otros atributos. Una clase, como ya sabe, es la definicin formal de un objeto. Las clases por s mismas no pueden ser utilizadas; es necesario crear unidades funcionales de las clases, es decir, objetos. Para ello debemos recurrir a un constructor, que es el cdigo que genera la instancia de una clase. En Visual Basic, un constructor tpico sera:
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 instruccin constructora por excelencia. Una vez generada la instancia de la clase, podemos utilizar todos sus elementos: mtodos, funciones y propiedades.

282

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Definicin de propiedades
Para una clase se puede, adems de definir su comportamiento a travs de mtodos y funciones, especificar qu propiedades han de conformar su estado. Las propiedades son las caractersticas particulares de un objeto; la clase debe definir qu propiedades tendrn los objetos que deriven de ella. Para su definicin, es necesario definir las propiedades dentro del bloque de cdigo 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 tambin son valores almacenados, tienen un manejo ms formal que las variables de memoria y, de hecho, requieren de una variable de memoria que permita la verificacin de los valores antes de su lectura o asignacin. La siguiente es la sintaxis de la definicin de propiedades:
Class NombreClase Dim Variable As TipoDatoPropiedad Property NombrePropiedad As TipoDatoPropiedad Get

CdigoLecturaValor
End Get Set (VariableArgumento As End Set End Property

TipoDatoPropiedad) CdigoAsignacinValor

... ...
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 tipo de dato que el que pretende almacenar la propiedad (TipoDatoPropiedad). Para recuperar el valor que tiene la propiedad se usa CdigoLecturaValor, que es el bloque de cdigo que se encarga de recuperar el valor de la variable de paso, para considerarlo como valor de la propiedad. Para asignarle un valor a una propiedad se utiliza una variable de trabajo (VariableArgumento) que recibe, a manera de argumento, el valor que se pretende asignar a la propiedad. CdigoAsignacinValor es el bloque de cdigo que se encarga de validar el valor que se pretende asignar a la propiedad; en caso de que sea vlido, realiza la asignacin.

Captulo 10. Clases, mtodos y propiedades

283

En una clase se pueden definir tantas propiedades como se requieran en el programa y, por supuesto, adems se pueden definir mtodos y funciones que formen parte de la misma. Estos mtodos y funciones pueden hacer uso de las propiedades con slo referirlas por su nombre.

Creacin de bibliotecas de clases (libreras)


En nuestros ejemplos hemos experimentado la definicin de clases en el mismo captulo en donde se instancian y utilizan. Este comportamiento no es comn 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 librera y utiliza los mtodos (types) y propiedades que tiene. Dicho de otra forma, hasta donde hemos visto, la clase se encuentra dentro del mismo ensamblado (EXE) que el programa; ahora requerimos saber cmo hacer para que las clases se encuentren en un archivo de vnculos dinmicos (DLL), que es independiente del ejecutable.

10

NOTA
En este texto, como toda la documentacin tcnica relativa al tema, se utilizan los trminos biblioteca de clases y librera de clases indistintamente. Tienen el mismo significado.

Modificadores de acceso
La idea es generar una librera de clases independiente de los programas ejecutables; es apropiado pensar que dicha biblioteca estar disponible para su utilizacin por uno, dos o ms ejecutables (de ah la razn 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 modificadores de acceso. Los modificadores de acceso son calificadores de declaracin que determinan el grado de encapsulamiento de una clase. El acceso se aplica a las entidades (clases, propiedades, mtodos). A continuacin se muestran a grandes rasgos los modificadores de acceso:

284

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Palabra clave
Public

Definicin Las entidades pueden ser llamadas desde cualquier parte; tambin se le conoce como acceso pblico. Las entidades se pueden llamar slo desde el contexto mismo de su declaracin. Tambin se le conoce como acceso privado. El acceso friend permite el acceso a las entidades desde el mismo programa en donde se hace su declaracin. El acceso protegido permite el acceso a las entidades slo desde la misma clase, as como sus clases derivadas. Es la mezcla del acceso friend y el acceso protegido.

Private

Friend

Protected

Protected Friend

La forma de especificar los modificadores de acceso es colocndolos al principio de la definicin de las clases, propiedades y mtodos.

Condiciones para la utilizacin de las bibliotecas de clases


Las condiciones necesarias para la definicin y utilizacin de una biblioteca de clases son las siguientes:

Proporcionar el modificador de acceso requerido. Compilar la biblioteca de clases como librera (/target:library). Establecer la referencia del ejecutable con respecto a la librera (/r:librera.dll).

Si usted desarrolla utilizando Visual Studio, podr despreocuparse de establecer la mayora de las referencias y especificar la salida a DLL al momento de compilar, dado que la herramienta se encarga de dar las indicaciones correspondientes.

Ejercicio 10.1
Creacin de una clase con propiedades y mtodos

En este ejercicio se generar una clase que contiene propiedades y mtodos para su consumo desde otros programas.

Captulo 10. Clases, mtodos y propiedades

285

1. 2. 3.

Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Class Library llamado Clase. En Text Editor desplegar lo siguiente:

10
4. Cambie el nombre de la clase, sustituyendo Class1 por Areas.

Uso de Code Snippets


5. Una de las costumbres ms arraigadas de los programadores es utilizar en programas nuevos cdigo que ya han escrito antes. Con una operacin de copiar y pegar se ahorra mucho tiempo, dado que hay cdigo que requiere de pocas modificaciones para funcionar en casi todos los programas. Visual Studio incorpora muchas pequeas rutinas de uso comn con el fin de que sean integradas y modificadas para su utilizacin en programas; a estos patrones de cdigo preestablecidos se les da el nombre de Code Snippets. Una de las operaciones ms comunes al codificar clases es la incorporacin de propiedades, para lo cual debe de existir un code snippet. Colquese dentro de la clase, despliegue el men contextual y seleccione Insert snippet...

6.

286

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

7.

Aparecer una herramienta parecida a Intellisense, que permite seleccionar los patrones de cdigo preestablecidos de Visual Studio. Seleccione Common Code Patterns.

8.

Seleccione Properties and Procedures.

9.

Seleccione Define a Property.

Captulo 10. Clases, mtodos y propiedades

287

10. Aparecer el patrn de cdigo preestablecido buscado. Observe cmo algunas partes del cdigo estn 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 comn 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; cmbielo por Decimal. Presione TAB y sustituya NewProperty por Base. 11. Vea cmo, automticamente, se actualizan las referencias posteriores.

10

12. Despus 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 NewProperty por Altura. Por el momento su cdigo debe lucir de la siguiente manera:

288

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

13. Despus de la segunda propiedad, desde el men contextual seleccione Insert snippet...., y utilice el code snippet Common Code Patterns Properties and Procedures Define a function. En el elemento variable MyFunc coloque el valor Rectangulo, en Integer coloque Decimal, y en los parntesis que indican el valor de retorno escriba (Base * Altura). 14. Despus de la funcin anterior, escriba otra: desde el men contextual seleccione Insert snippet...., y utilice el code snippet Common Code Patterns Properties and Procedures Define a function. En el elemento variable MyFunc coloque el valor TrianguloRectangulo, en Integer coloque Decimal y en los parntesis que indican el valor de retorno escriba ((Base * Altura)/2). 15. El cdigo debe haber quedado como sigue.

Codificacin de Clase

Class1.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 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

Captulo 10. Clases, mtodos y propiedades

289

> Lo nuevo
En Visual Studio 2005 los code snippets formalizan lo que los desarrolladores hacan todo el tiempo: copiar y pegar.

Creacin de un diagrama de clases y modificacin 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).

10
17. Al visualizar un diagrama de clases, Document Window invoca una herramienta llamada Class Designer, que permite disear de forma visual y dinmica clases de usuario. 18. Si hace clic en el icono para ver detalles , Class Designer se dividir en dos paneles; 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 relacin de propiedades, mtodos y eventos de la clase, adems de permitir agregar o eliminar elementos. En caso 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.

290

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

19. Con el modificador de tamao que tiene el diagrama de la clase en el extremo derecho, ample la dimensin del diagrama, de tal forma que quede con un ancho del doble.

20. En la barra de herramientas de Class Designer aparecern los siguientes iconos:

Utilcelos alternadamente y vea las variaciones que tiene el diagrama de clase. Finalmente seleccione el modo Display Full signature.

Captulo 10. Clases, mtodos y propiedades

291

21. La parte baja de Class Designer muestra la herramienta Class Details. Busque el apartado Properties y haga clic en <add property>. Automticamente se agregar una lnea en donde podr especificar los elementos bsicos de la propiedad. En la columna Name coloque el valor Radio, en Type coloque Decimal, deje el Modifier como Public, y finalmente en Summary escriba Valor de medida del radio.

10
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 podrn seleccionar las herramientas activas, as como los documentos. Para seleccionar alguno de los elementos, puede hacer clic sobre la herramienta o documento, utilizando las flechas de direccin, o mantenga oprimida la tecla Ctrl mientras oprime repetidamente la tecla Tab hasta que se seleccione el documento deseado.

23. Presione Ctrl y mantenga presionada la tecla. Ahora presione Tab en repetidas ocasiones hasta que el programa en que codificamos la clase, Class1.vb (C:\APVBNETVS\ Ejercicios\Clase\Class1.vb) aparezca; cuando se haya seleccionado el archivo deseado, simplemente suelte la tecla Ctrl y el archivo aparecer en Document Window.

292

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

24. Vea cmo lo que agregamos en Class Designer se ha agregado a nuestro cdigo:

25. Qu diferencias encuentra entre las propiedades definidas usando code snippets y la propiedad definida desde Class Designer?

26. Regrese al diagrama de clase (ClassDiagram1.cd) y modifique la informacin de Summary para todos los elementos de la clase:
Miembro Rectangulo TrianguloRectangulo Altura Base pAltura pBase Summary Muestra el rea de un rectngulo Muestra el rea de un tringulo rectngulo Valor de medida de la altura Valor de medida de la base Variable de paso para altura Variable de paso para base Tipo Method Method Property Property Field Field

Adicin de mtodos usando Class Designer


27. Agregar mtodos utilizando Class Designer es casi tan sencillo como agregar propiedades. En el panel Class Details de Class Designer puede agregarlo en el apartado de Methods, haciendo clic en <add method>.

Captulo 10. Clases, mtodos 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 Method; aparecer un men en el cual debe seleccionar New Method.

10

29. Automticamente se agregar una lnea en donde podremos especificar los elementos bsicos del mtodo. En la columna Name coloque el valor Circulo, en Type coloque el tipo del valor de retorno, que en este caso es Decimal; deje el Modifier como Public. 30. En Summary haga clic en el botn Description . En Summary escriba Muestra el rea de un crculo y en Returns escriba rea del crculo (Decimal).

294

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

31. Al lado de cada miembro en Class Details aparece un pequeo icono que indica el tipo de miembro del que se trata. Al hacer doble clic sobre el icono de miembro, Visual Studio permitir la edicin del miembro del que se trate.
Icono Miembro Property Method Events Field

32. Haga doble clic sobre el icono de miembro del mtodo Circulo. El programa deber ir al cdigo en donde se defina el mtodo. 33. Complemente el cdigo, de tal forma que quede de la siguiente manera: Codificacin de Clase
1 2 3 4 5 6 7 Class1.vb Circulo()

<summary> Muestra el rea de un crculo </summary> <returns>rea del circulo (Decimal)</returns> Public Function Crculo() As Decimal Return (3.1416D * (Radio ^ 2)) End Function

34. El cdigo completo debe haber quedado de la siguiente forma: Codificacin de Clase
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Class1.vb

Public Class Areas <summary> Variable de paso para base </summary> Private pBase As Decimal <summary> Valor de medida de la base </summary> Public Property Base() As Decimal Get Return pBase End Get Set(ByVal value As Decimal) pBase = value End Set End Property

Captulo 10. Clases, mtodos y propiedades

295

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

<summary> Variable de paso para altura </summary> Private pAltura As Decimal <summary> Valor de medida de la altura </summary> Public Property Altura() As Decimal Get Return pAltura End Get Set(ByVal value As Decimal) pAltura = value End Set End Property <summary> Muestra el rea de un rectngulo </summary> Function Rectangulo() As Decimal Return (Base * Altura) End Function <summary> Muestra el rea de un tringulo rectngulo </summary> Function TrianguloRectangulo() As Decimal Return ((Base * Altura) / 2) End Function <summary> Valor de medida del radio </summary> Public Property Radio() As Decimal Get End Get Set(ByVal value As Decimal) End Set End Property <summary> Muestra el rea de un crculo </summary> <returns>rea del crculo (Decimal)</returns> Public Function Crculo() As Decimal Return (3.1416D * (Radio ^ 2)) End Function

10

End Class

296

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

35. En este programa, cuntas lneas de cdigo 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 solucin y sus miembros correspondientes. Para ver esta herramienta seleccione View Class View (oprima la combinacin de teclas Ctrl-Mays-C). Class View se compone de una barra de herramientas, una barra de bsqueda, un rbol de archivos y miembros, y un panel de objetos y miembros. FIGURA 10.1 Class View

37. En la barra de bsqueda de Class View escriba Base y haga clic en el botn Search que aparece en la misma barra de bsqueda.

Captulo 10. Clases, mtodos y propiedades

297

38. Aparecern en el rbol de archivos y miembros todos aquellos que contengan la palabra Base, empezando con la que ms concuerde con el patrn a buscar (que es la propiedad que definimos en nuestra clase). Haga clic en el botn 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 colocarse en el miembro Areas. Observe cmo al seleccionar el nodo, todos sus miembros aparecen en el panel de objetos y miembros. De esa forma se pueden examinar los miembros de una clase y seleccionarlos para diferentes operaciones.

10

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 localizar el archivo de la solucin en la cual el miembro fue codificado, permitiendo su edicin. De esta forma se evita estar navegando por el Solution Explorer tratando de encontrar una clase y luego navegar entre el cdigo para encontrar el cdigo que define el miembro.

298

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

41. Guarde los cambios en su solucin. FIN DEL EJERCICIO*

Ejercicio 10.2
Consumo de una clase a travs de instancias En este ejercicio se consumir una clase. Para ello se generar una instancia (objeto) y se utilizarn los mtodos declarados en la clase.

Captulo 10. Clases, mtodos y propiedades

299

1. 2. 3.

4. 5.

Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Console Application, llamado UtilizaClase. En Solution Explorer seleccione UtilizaClase y despliegue el men contextual. Seleccione Add Reference. En la ventana Add Reference seleccione la pestaa Projects y seleccione el proyecto Clase. Con ello habilitamos a nuestra nueva aplicacin para consumir la funcionalidad de la clase que definimos en el ejercicio anterior. Haga clic en Ok. Agregue las lneas necesarias para hacer type safe a su programa; importe el espacio de nombres System con la clase Console. En Text Editor mostrar lo siguiente:

10

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 lnea antes del bloque de mdulo:
Imports Clase

7.

Vea cmo Intellisense ya reconoce la existencia de nuestra clase.

300

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

8.

Dentro del mdulo deber generar una instancia de la clase Areas. Para ello deber escribir la siguiente lnea de cdigo, 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 codificado):
Dim X As Areas

9.

Declarar la variable no implica que ya tengamos un objeto. Simplemente tenemos reservado un lugar para guardar el objeto, pero el objeto an no existe. Para generarlo necesitamos hacer uso de un constructor, lo que implica utilizar la instruccin New. Para generar un objeto a partir de Areas, y almacenar dicho objeto en el rea que hemos reservado, utilizamos la siguiente lnea:
X = New Areas()

10. A travs de la variable X ya podemos hacer uso de toda la funcionalidad programada en la clase. El cdigo de los puntos 8 y 9 puede simplificarse, instanciando al momento en que declaremos, dando una lnea como la que sigue:
Dim X As New Areas

11. Vea cmo Intellisense ya reconoce la existencia de nuestra clase y sus miembros. Incluso da la informacin que nosotros establecimos como comentario.

Captulo 10. Clases, mtodos y propiedades

301

12. El cdigo completo debe haber quedado de la siguiente manera:

Codificacin de UtilizaClase
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

Module1.vb

Module Module1 Sub Main() Dim X As New Areas X.Altura = 10D X.Base = 20D WriteLine(- reas calculadas -) WriteLine(Rectngulo: & CType(X.TrianguloRectangulo(), String)) Write(Presione INTRO para continuar) ReadLine() End Sub End Module

10

Ejecucin guiada de UtilizaClase

Module1.vb

13. Construya la solucin (oprima la combinacin de teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (oprima la tecla F5). 14. La lnea 5 importa el espacio de nombres Clase, que est disponible gracias a que establecimos la referencia con la librera Clase. En la lnea 11 se declara una variable que tiene como origen nuestra clase Areas; en la misma lnea de declaracin se genera la instancia del objeto, utilizando el constructor New. 15. Se proporciona valor a las propiedades Altura y Base del objeto (lneas 13 y 14), y se utiliza el mtodo TrianguloRectangulo() para comprobar la funcionalidad de la clase. Como TrianguloRectangulo() retorna un valor Decimal, se realiza la conversin a String para evitar problemas en la concatenacin.

302

Aprenda 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 Rectngulo: 100 Presione INTRO para continuar

Uso de Object Browser


17. Visual Studio provee una herramienta llamada Object Browser, que permite ver informacin de las clases y sus comentarios. 18. Seleccione en Class View el miembro Circulo() de la clase Area de nuestro proyecto Clase. Despliegue el men contextual y seleccione Browse Definition. Vea cmo aparece, adems de la informacin usual presentada por Class View, un apartado que muestra la informacin de los comentarios que especificamos al crear el mtodo. Es muy importante colocar informacin valiosa en los comentarios, a fin de que sean de utilidad al ser consultados en Object Browser. No est de ms decir que si hacemos doble clic sobre alguno de los miembros en Object Browser, Visual Studio nos trasladar al cdigo de definicin.

Visualizacin de referencias
19. Visual Studio mantiene un complejo sistema de referencias a recursos, de tal forma que todos estn disponibles casi de cualquier parte. Para llegar al cdigo de definicin de un

Captulo 10. Clases, mtodos y propiedades

303

miembro de una clase, por ejemplo TrianguloRectangulo(), basta hacer doble clic sobre TrianguloRectangulo () en Class View, o hacer doble clic sobre TrianguloRectangulo () en Object Browser, e incluso en Text Editor, colocndonos sobre TrianguloRectangulo() y seleccionando Go To Definition en el men de contexto.

10

20. Internamente, Visual Studio conoce dnde se encuentra todo lo que utilizamos en un programa. Vaya a Solution Explorer y, desde el nodo UtilizaClase, despliegue el men contextual y seleccione Build. Vea la ventana Output y perctese de que no slo se construy el proyecto UtilizaClase, sino tambin Clase, dado que contiene clases que son utilizadas por UtilizaClase.

304

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

21. Edite el cdigo de

TrianguloRectangulo()

Coloque el puntero del ratn sobre y despliegue el men contextual; seleccione Find All References. Aparecer una ventana llamada Find Symbols Results, que mostrar todas las referencias fsicas que permiten a Visual Studio encontrar todos los recursos que su programa necesita.

Module1 de UtilizaClase.

22. Por supuesto, al hacer doble clic en cualquiera de los elementos, Visual Studio nos trasladar al cdigo de definicin correspondiente. 23. Guarde los cambios en su solucin. FIN DEL EJERCICIO *

Ejercicio 10.3
Uso de clases en soluciones diferentes

En este ejercicio realizar los trabajos necesarios para poner a disposicin de todos los desarrolladores la funcionalidad de una clase. Es comn que un grupo de desarrolladores, en ambientes profesionales, generen libreras comunes que de forma estandarizada son utilizadas en todas las soluciones que construyen. Usos comunes son clases para gobernar la seguridad de las aplicaciones, clases para el acceso eficiente a los datos, clases para interfaces de usuario uniformes, etctera. Slo un grupo de desarrolladores son los encargados de fabricar las libreras, mientras que todos los dems desarrolladores, en todos los dems proyectos, las utilizan. Veamos cmo se logra esto usando Visual Studio.

Integracin de proyectos existentes a una nueva solucin


1. Genere una nueva solucin, llamada Calculos. Seleccione File New Project. Seleccione en Project types la opcin Other Project types - Visual Studio Solutions, y seleccione en Templates la opcin Blank Solution. En Name coloque Calculos y en Location especifique C:\APVBNETVS.

Captulo 10. Clases, mtodos y propiedades

305

2. 3.

4.

5.

6.

7.

Agregue a la solucin un proyecto Windows Console Application, llamado PruebaLibreria. En Solution Explorer seleccione PruebaLibreria y despliegue el men contextual. Seleccione Add Reference. En la ventana Add Reference seleccione la ficha Projects. Como puede ver, no aparece ningn proyecto, por lo cual no encontramos la librera Clase que definimos en el proyecto anterior. Seleccione la pestaa .NET y busque Clase. Como podr comprobar, tampoco aparece nuestra biblioteca dentro de las que se encuentran registradas en GAC (Global Assembly Cach). Haga clic en Cancel. Hay que agregar un elemento existente, en este caso el proyecto Clase de la solucin Ejercicios. Proceda de la siguiente forma: seleccione la solucin Calculos, despliegue el men contextual y seleccione Add Existing project. Seleccione el proyecto de la librera, que se identifica por el archivo Clase.vbproj (Visual Basic Project) ubicado en el directorio C:\APVBNETVS\Ejercicios\Clase. Si en este momento intenta agregar una referencia, se dar cuenta de que el proyecto de librera Clase ya aparece dentro de la pestaa Projects de Add Reference, con lo cual normalmente podr establecer la referencia sin problemas. El problema es que deber realizar este proceso en cada proyecto en el que desee utilizar la funcionalidad de la clase; ello implica dar permisos sobre los objetos de la librera y exponer el contenido del cdigo a modificaciones no autorizadas. Los problemas no paran ah: imagine que la librera incluya cdigo de cifrado a datos sensibles, todo el mundo sabr cmo se codific el algoritmo de seguridad. En realidad agregar el proyecto a la nueva solucin no es lo que queramos hacer, sino disponer de la funcionalidad de la librera, sin saber nada ms respecto al cdigo o la composicin. Elimine el proyecto Clase que acaba de agregar. Para ello, seleccione en Solution Explorer el nodo Clase, despliegue el men contextual y seleccione Remove. Al solicitarse la confirmacin de eliminacin, confrmela. Esto no impacta fsicamente al proyecto, solamente elimina la referencia de la solucin.

10

Distribucin de copias locales de libreras DLL


8. Una buena prctica es hacer una copia local de la librera DLL en el directorio de trabajo de la nueva solucin. Copie el archivo Clase.DLL que se encuentra en C:\APVBNETVS\Ejercicios\Clase\Bin\Debug, y pguelo en C:\APVBNETVS\Calculos. Aunque la referencia podra hacerse directamente en el archivo original, se recomienda el uso de copias locales para que al momento de integrar paquetes de instalacin el conjunto de recursos est ms organizado. En Solution Explorer seleccione el nodo Calculos, despliegue el men contextual y seleccione Add Existing Item. Aparecer una ventana que le permitir seleccionar archivos. Seleccione la copia local de la DLL que est en C:\APVBNETVS\Calculos.

9.

306

Aprenda 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 pestaa Browse. Seleccione el archivo Clase.DLL que se encuentra en C:\APVBNETVS\Calculos. De esa forma disponemos de la funcionalidad del ensamblado, sin entrar en los pormenores de su desarrollo, desde una copia local. 11. Abra desde Solution Explorer el cdigo de Module1.vb de PruebaLibreria. Agregue un Imports, vea Intellisense y note que ya se puede disponer de la clase.

12. Guarde los cambios de su solucin. FIN DEL EJERCICIO*

Captulo 10. Clases, mtodos y propiedades

307

MAPA

MENTAL DEL CAPTULO

10

308

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

TERMINOLOGA
Class, 281 Designer, 289 Code Snippets, 285 Diagrama de la clase, 289 Friend, 284 GET, 282 Libreras, 283 Modificadores de acceso, 283 Friend, 284 Object Browser, 302 Public, 284 Private, 284 SET, 282 Property, 282 Propiedades, 282 Protected, 284

PREGUNTAS
10.1 Cul es la sintaxis para declarar una clase? 10.2 Cul 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 librera. 10.5 Qu especificaciones deben hacerse en un programa para que pueda consumir la funcionalidad de una clase que se encuentra en una librera externa?

Captulo 10. Clases, mtodos y propiedades

309

Notas:

10

310

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Es la definicin formal de un objeto: a) Clase b) Propiedad c) Mtodo 2. Es la instruccin constructora por excelencia: a) New b) CreateObject c) Dim 3. Son las caractersticas particulares de los objetos: a) Mtodos b) Clases c) Propiedades 4. Calificadores de declaracin que determinan el grado de encapsulamiento de una clase: a) Agregados b) Delegados c) Modificadores de acceso 5. Es la especificacin de destino (target) que aplica para las bibliotecas de clase, al momento de compilar para generar un DLL: a) Library b) Class c) Binary

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. 7. 8. 9. Las clases que pertenecen a la biblioteca de clases de .NET Framework pueden utilizarse directamente, sin necesidad de instanciacin, pero las creadas por el usuario no. Una librera DLL puede ser utilizada slo por un ensamblado, ya que la informacin de sta queda registrada en metadatos. Se pueden definir tantas propiedades al objeto como nuestros programas requieran. Para utilizar una librera 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 aplicacin.

CAPTULO

11

Herencia y polimorfismo
Objetivos: Aprender la implementacin de herencia y polimorfismo de los objetos. 1. Aprender qu es la herencia entre objetos y cundo se debe utilizar. 2. Conocer los modificadores de funcionalidad de los objetos para programar adecuadamente la herencia en una jerarqua de clases. 3. Sabr qu son MyBase y MyClass, y cundo utilizarlas. 4. Aprender en qu consiste el polimorfismo y cmo establecerlo de manera programtica.

311

312

Aprenda Practicando Visual Basic 2005 usando Visual Studio

Contenido
Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cundo se debe utilizar la herencia? . . . . . . . . . . . . . . . . . . . . . . . . . Inherits (Heredar) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Notlnheritable (No heredable) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mustlnherit (Debe heredar) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modificadores de acceso, necesarios para la herencia . . . . . . . . . . . . . Programacin de clases base y clases derivadas . . . . . . . . . . . . . Adicin de clases a un mdulo usando Class Designer . . Estatutos auxiliares para el manejo de herencia y polimorfismo . . . . . . . . . . NotOverridable (No reemplazable) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Overridable (Reemplazable) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MustOverridable (Debe reemplazarse) . . . . . . . . . . . . . . . . . . . . . . . . . Overrides (Reemplaza) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Overloads (Sobrecarga/Sustituye) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MyBase y MyClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comprobacin del polimorfismo basado en herencia y el uso de MyBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Especificacin de modificadores de herencia usando Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 313 314 314 314 315 315 316 323 324 324 324 324 324 325 325 326 327 335 336 336 338

Captulo 11. Herencia y polimorfismo

313

El manejo de propiedades, mtodos y eventos es slo el principio de la programacin orientada a objetos; las caractersticas principales de la POO descansan en la capacidad de los objetos para trabajar en colaboracin con otros objetos, y de aprovechar total o parcialmente su funcionalidad mediante la reutilizacin de cdigo segn lo requieran las aplicaciones. En el presente captulo estudiaremos los principios que permiten el mximo aprovechamiento del cdigo a travs de POO y con sus dos capacidades caractersticas: herencia y polimorfismo.

Herencia
La herencia (inheritance) es un concepto fundamental de la programacin orientada a objetos, y consiste en la capacidad de definir clases que sirven como base de otras clases, evitando la redundancia en la definicin de elementos como mtodos, eventos y propiedades. Hay una clase base y una o varias clases derivadas; las clases derivadas aprovechan todo lo declarado en la clase base, asumindolo como suyo y utilizando capacidades que no estn codificadas en ellas. Las clases derivadas pueden heredar, e incluso extender, las propiedades, los mtodos y los eventos de la clase base. Es posible tambin que las clases derivadas sustituyan o modifiquen (override) la funcionalidad de los mtodos de la clase base. En Visual Basic, por omisin, 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 cdigo slo una vez, para una clase, y disponer en muchas clases de la misma funcionalidad, estableciendo las referencias adecuadas.

11

Cundo se debe utilizar la herencia?


La herencia entre clases no debe utilizarse por el simple hecho de que el lenguaje lo permite. La herencia debe planearse; el desarrollador debe pensar cmo han de ser las clases, organizndolas en lo que se conoce como jerarqua de clases. Se recomienda una jerarqua de clases cuando entre las clases se presenta una relacin 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 caractersticas de los automviles en general (Automviles) tiene mucho que compartirle a una clase que almacena las particularidades de los automviles deportivos (AutomvilesDeportivos), pues un automvil deportivo, antes que ser de tipo deportivo, es un automvil (is-a). Ahora pregntese, qu comparte un dueo de un automvil y un automvil? Automviles y DueosAutomviles, no comparten rasgos. Las personas que poseen automviles no se derivan de los automviles, ni viceversa. Que una persona tenga un (has-a) automvil, no quiere decir que comparta con ste sus mtodos,

314

Aprenda Practicando Visual Basic 2005 usando Visual Studio

propiedades y eventos. Imagnese tener que determinar el tipo de transmisin, nmero de puertas y nmero de serie que una persona posee. Simplemente, de una cosa no puede derivar la otra. Se recomienda una jerarqua de clases, obviamente, slo si el cdigo de una clase brinda alguna funcionalidad que se pueda reutilizar; tratar de heredar aspectos muy particulares que slo son pertinentes para una clase no tiene sentido.

Inherits (Heredar)
El estatuto Inherits se utiliza para especificar que una clase de nueva creacin tiene como base una clase ya existente. La clase nueva es la clase derivada (derived class); la clase ya existente es la clase base (base class). La sintaxis es la siguiente:
Class

NombreClaseDerivada NombreClaseBase ...


Inherits

End Class

En este caso, la clase derivada dispone de todos los elementos declarados en la clase base.

NotInheritable (No heredable)


Ya decamos que por omisin todas las clases en Visual Basic pueden heredarse. Habrn ocasiones en que no queramos que una clase pueda heredarse; en tal caso, hay que especificar, al declarar una clase, que sta no es heredable. La sintaxis para ello es la siguiente:
NotInheritable Class ... End Class

NombreClase

En este caso, intentar heredar NombreClase generara un error (Inherits

NombreClase).

MustInherit (Debe heredar)


Como sabemos, los objetos son instancias de una clase. Ya explicbamos que no se puede tener acceso a la funcionalidad de una clase sino a travs de una instancia de la misma, es decir, de un objeto basado en la clase. Eso es verdadero slo relativamente. Habr alguna forma de que podamos disponer de la funcionalidad de una clase sin generar una instancia de la misma? La respuesta es que s. Podemos declarar una clase que no pueda instanciarse pero que pueda ser utilizada slo si se hereda por otra clase. Para hacer eso es necesario especificar el estatuto MustInherit.

Captulo 11. Herencia y polimorfismo

315

La sintaxis es la siguiente:
MustInherit Class

NombreClase

...
End Class

En este caso, instanciar NombreClase generara error (Dim

Objeto As New NombreClase())

NOTA
Algunos lenguajes como C++ y C#, llaman a las clases calificadas como MustInherit, como clases abstractas (abstract class).

Modificadores de acceso, necesarios para la herencia


Usted debe determinar el alcance que tendr su jerarqua de clases, a efecto de restringir el acceso a las clases, de tal manera que slo puedan heredarlas aquellas porciones de cdigo que deban hacerlo. Calificar una clase como clase pblica (public class), se logra utilizando el modificador de acceso Public al momento de la declaracin de la clase. Esto garantiza que todas las clases podrn 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 jerarqua de clases el acceso puede heredarse slo hacia un acceso igual o mayor, nunca menor: una clase con acceso Public no puede heredar una clase 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 herencia entre ellas.

11

Ejercicio 11.1
Programacin de clases base y clases derivadas

1. 2. 3.

Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Console Application, llamado Herencia. Abra Class View (oprima las teclas Ctrl-Mays-C) y colquese en el nodo Herencia Herencia; despliegue el men contextual y seleccione View Class Diagram.

316

Aprenda Practicando Visual Basic 2005 usando Visual Studio

4.

Se desplegar Class Designer.

Adicin de clases a un mdulo usando Class Designer


5. Colquese en cualquier parte del diagrama de clase y despliegue el men contextual. Seleccione Add Class.

Captulo 11. Herencia y polimorfismo

317

6.

Aparecer la ventana New Class. En este programa queremos codificar clases en el programa de consola que ya comenzamos a construir (Module1.vb). Asignamos en Class Name el nombre MiClaseBase, en Access dejamos el valor de Public, y en File name especificamos que queremos agregar la clase a un archivo existente (Add to existing file), colocando el nombre de nuestro programa de consola (Module1.vb).

7.

Con ello se habr agregado a nuestro programa de consola una clase. Como podr sospechar, las clases no slo se pueden codificar como proyectos independientes, sino tambin integrarse perfectamente en otros proyectos. Aparecer nuestra nueva clase en el diagrama de clase. Seleccione la nueva clase, despliegue el men contextual y seleccione Class Details.

11

8.

318

Aprenda Practicando Visual Basic 2005 usando Visual Studio

9.

Utilizando Class Details, agregue a MiClaseBase dos mtodos, llamados Mensaje1() y Mensaje2(). En la columna Type no coloque nada, debido a que los mtodos no devolvern valores.

10. Haga las modificaciones pertinentes para que nuestro cdigo luzca como sigue. En esencia se hace al programa strong type, se importa un espacio de nombres, se colocan en Main() lneas para que el programa espere una tecla y se provee de comportamiento a los mtodos de MiClaseBase.

Codificacin de Herencia
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 Module1 Sub Main()

Module1.vb

Write(Presione INTRO para continuar) ReadLine() End Sub End Module Public Class MiClaseBase <summary> Enva primer mensaje </summary> Public Sub Mensaje1() WriteLine(Clase Base - Mensaje 1) End Sub

Captulo 11. Herencia y polimorfismo

319

25 26 27 28 29 30 31 32

<summary> Enva segundo mensaje </summary> 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 name especifique MiClaseDerivada, en Access especifique Public, y en File name seleccione Add to existing file, especificando nuestro programa, es decir, Module1.vb.

11

12. Seleccione en el diagrama de clase el objeto MiClaseDerivada, despliegue el men contextual y seleccione Class Details. Agregue un mtodo, cuyo nombre sea Mensaje3().

320

Aprenda Practicando Visual Basic 2005 usando Visual Studio

13. Complemente el cdigo de tal forma que luzca de la siguiente manera:

Codificacin de Herencia
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 Option Explicit On Option Strict On Imports System.Console Module Module1

Module1.vb

Sub Main() Dim MiObjeto As New MiClaseDerivada MiObjeto.Mensaje1() MiObjeto.Mensaje2() MiObjeto.Mensaje3() Write(Presione INTRO para continuar) ReadLine() End Sub End Module Public Class MiClaseBase <summary> Enva primer mensaje </summary> Public Sub Mensaje1() WriteLine(Clase Base - Mensaje 1) End Sub <summary> Enva segundo mensaje </summary> Public Sub Mensaje2() WriteLine(Clase Base - Mensaje 2) End Sub End Class Public Class MiClaseDerivada Inherits MiClaseBase <summary> Enva tercer mensaje </summary> Public Sub Mensaje3() WriteLine(Clase Base - Mensaje 2) End Sub End Class

Captulo 11. Herencia y polimorfismo

321

Ejecucin guiada de Herencia

Module1.vb

14. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 15. En un mdulo lo que se ejecuta es el procedimiento principal, llamado Main(), lneas 22 a la 30. El mdulo completo tiene dos clases: MiclaseBase, de la lnea 20 a la 35, y MiClaseDerivada, de la lnea 37 a la 46.
MiClaseBase

tiene dos mtodos: Mensaje1( ), de la lnea 22 a la 27, y Mensaje2( ), de la lnea 29 a la 34. MiClaseDerivada tiene un solo mtodo: Mensaje3( ), de la lnea 40 a la 45. Tome en cuenta que la clase MiClaseDerivada no posee los mtodos pues la que los posee es la clase MiClaseBase.
Mensaje1()

Mensaje2(),

Lo ms importante de este programa es que MiClaseDerivada hereda la funcionalidad de MiClaseBase al aplicar la instruccin Inherits, en la lnea 38; aun cuando Mensaje1() y Mensaje2() no estn declaradas en MiClaseDerivada, ya forman parte de dicha clase, debido a que son tomadas de la clase base. La integracin es tal que, al estar codificando el programa, Intellisense reconoce los miembros de MiClaseBase como parte de MiClaseDerivada.

11

322

Aprenda Practicando Visual Basic 2005 usando Visual Studio

16. En la lnea 10 se tiene un constructor que genera una instancia de la clase MiClaseDerivada bajo el nombre de MiObjeto. Observe cmo las lneas 11 y 12 hacen uso de mtodos no declarados en la clase MiClaseDerivada; esto es posible gracias a que, al haber establecido una relacin de herencia con MiClaseBase, la clase derivada dispone automticamente de todos los mtodos, propiedades y eventos declarados en la clase base.
ClaseBase.

De esta forma, MiClaseDerivada slo declarar cosas que no estn declaradas en MiDeclarar los mismos mtodos en ambas clases sera redundante. Tome en cuenta las dimensiones que puede tomar su jerarqua de clases, ya que si hereda una clase que a su vez es derivada de otra clase, se hereda tambin la funcionalidad 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 INTRO para continuar

17. Si consultamos el diagrama de clase, nos daremos cuenta que reconoce ya la relacin de herencia existente entre nuestras dos clases.

FIN DEL EJERCICIO *

Captulo 11. Herencia y polimorfismo

323

Estatutos auxiliares para el manejo de herencia y polimorfismo


Tiempos de compilacin de CLR

En ocasiones heredamos una clase, pero nos damos cuenta que algunas entidades (mtodos, 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 elementos heredados son tiles, pero que lo seran ms con algunas pequeas modificaciones. Dichas modificaciones se realizan en la clase derivada, respecto de las definiciones originales existentes en la clase base. La programacin orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un mtodo (override), o de plano reemplazarlo por completo (overload). La funcionalidad heredada puede modificarse por otra que sea ms indicada para el problema de programacin que deseamos resolver; con ello se promueve que la reutilizacin del cdigo sea flexible y adaptable. Por omisin, una clase derivada hereda los mtodos y propiedades de su clase base. Si necesitamos que una propiedad o mtodo heredado se comporte de manera distinta a como se defini en la clase base, puede ser implementada de forma distinta (overridden) o reemplazada (overloaded); esto quiere decir que la herencia sirve hasta donde nosotros deseamos comenzar a hacer modificaciones. Los estatutos auxiliares de herencia sirven para especificar el grado de modificacin que ha de darse entre la clase derivada y la clase base; estos son: Overridable, NotOverridable, Overrides, MustOverride y Overloads. En cuanto a la clase base hay tres escenarios:

11

FIGURA 11.1 Estatutos auxiliares para el manejo de herencia

324

Aprenda 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 mtodo de una clase base pueda ser sustituido en una clase derivada. Por omisin, los mtodos pblicos en una clase base son NotOverridable.

Overridable (Reemplazable)
El segundo escenario es que la clase base admita modificaciones o sustituciones a su funcionalidad. El estatuto Overridable establece que una propiedad o mtodo (elemento) de una clase base puede ser modificado en su implementacin o sustituido en una clase derivada.

MustOverride (Debe reemplazarse)


El tercer escenario es que la modificacin a la funcionalidad de la clase base no slo sea posible, sino que sea obligatoria. El estatuto MustOverride hace que sea obligatorio hacer variaciones, en la clase derivada, de las propiedades o mtodo de la clase base que han sido heredados. Del lado de la clase derivada hay dos escenarios, que slo 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 variacin en la clase derivada, de sus propiedades o sus mtodos. Esto ser siempre y cuando se mantengan los mismos argumentos en el mtodo de la clase base y la clase derivada. Overrides slo permite desarrollar en la clase derivada una implementacin distinta de un elemento de la clase base, y no su sustitucin 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, adems de modificar el comportamiento de los mtodos que participan en una relacin 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 mtodo que mo-

Captulo 11. Herencia y polimorfismo

325

difica al heredado de la clase base requiere una cantidad distinta de argumentos. En este caso, ya no hablamos de una implementacin distinta de lo mismo, sino de dos mtodos 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 sustitucin del mtodo de la clase base por otro de la clase derivada, tengan o no relacin entre s. Overloads es la nica forma de implementar, bajo un mismo nombre, dos mtodos que no coinciden ms que en el nombre.

MyBase y MyClass
Se puede utilizar la palabra reservada MyBase para llamar a ejecucin a un mtodo 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 mtodo, entonces c) es posible mandar llamar a ejecucin al mtodo, 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 aplicacin a que utilice un mtodo de la clase base y no de la clase derivada; en caso contrario, es posible que queramos mandar llamar el mtodo tal y como est en la clase derivada. Para ello utilizamos la palabra reservada MyClass, que se encarga de llamar a ejecucin un mtodo que se encuentra en la misma clase cuando sta es derivada. Es importante saber que tanto MyBase como MyClass, aunque en su manejo parecen objetos, realmente no lo son. No se instancian; existen porque el lenguaje los proporciona para un manejo ms flexible de la herencia y el polimorfismo.

11

Polimorfismo
El polimorfismo es la habilidad que tiene el lenguaje para definir mltiples clases que contengan mtodos y propiedades del mismo nombre, pero que brindan diferente funcionalidad. Cuando se presenta el polimorfismo es posible elegir, en tiempo de ejecucin, aquellos mtodos o propiedades que necesitamos. No importa que varias clases posean los mismos mtodos y las mismas propiedades: la aplicacin debe ser capaz de utilizar precisamente aquellas cuya funcionalidad estemos invocando. La herencia y la sustitucin de mtodos y propiedades tienen mucho que ver con el polimorfismo. Cuando se declara una clase y a partir de sta se derivan otras clases, estamos ante la presencia de la herencia; si adems de esto, los mtodos y propiedades de la clase

326

Aprenda 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 funcionalidad, estamos ante el polimorfismo. Una manifestacin an ms pura del polimorfismo se presenta cuando se utiliza Overloads, que implica una sustitucin completa de mtodos que se encuentran en clases que guardan una relacin de herencia. Cuando en una clase derivada se modifican mtodos o propiedades de la clase base, se dice que hay polimorfismo basado en herencia.

Ejercicio 11.2
Comprobacin del polimorfismo basado en herencia y el uso de MyBase

En este ejercicio se comprobar el polimorfismo basado en herencia; para ello se definirn varias clases, se heredarn 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 puede haber pago normal, agregarse un bono por puntualidad del 25 por ciento, e incluso un bono adicional del 20 por ciento. 1. 2. 3. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue su solucin un proyecto Windows Console Application, llamado Nomina. Edite el programa de tal forma que aparezca de la siguiente manera:

Codificacin de Nomina
1 2 3 4 5 6 7 8 9 10 11 12 13 14 Option Explicit On Option Strict On Imports System.Console

Module1.vb

Module Module1 Const PagoXHoraVig As Decimal = 120D Const BonoPuntualidad As Decimal = 1.25D Sub Main() End Sub End Module

Captulo 11. Herencia y polimorfismo

327

4. 5.

Abra Class View (oprima las teclas Ctrl-Mays-C), seleccione el nodo Nomina y haga clic en el icono View Class Diagram. Agregue, usando Class Designer, una clase llamada Pago, que ser pblica y que se agregar al programa de consola que estamos trabajando.
Nomina

11
Especificacin de modificadores de herencia usando Properties
6. En el diagrama de clase seleccione la clase Pago que acaba de agregar, invoque Class Details y agregue un mtodo de nombre CalculaPago, que ser pblico y que devolver un valor Decimal. En Class Details seleccione el mtodo que acaba de agregar y despliegue el men contextual; seleccione la opcin Properties.

328

Aprenda Practicando Visual Basic 2005 usando Visual Studio

7.

En la propiedad Inheritance

modifier

seleccione el valor Overridable.

8.

En este punto, nuestro cdigo debe lucir de la siguiente manera:

Codificacin de Nomina
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

Module1.vb

Module Module1 Public Const PagoXHoraVig As Decimal = 120D Public Const BonoPuntualidad As Decimal = 1.25D Sub Main() End Sub End Module Public Class Pago <summary> Clculo del pago neto </summary> Public Overridable Function CalculaPago() As Decimal End Function End Class

Captulo 11. Herencia y polimorfismo

329

9.

Coloque como argumentos de CalculaPago() las horas trabajadas y el pago por hora. Complemente el mtodo, a fin de que proporcione un resultado. El procedimiento debe quedar de la siguiente manera:

Codificacin de Nomina
1 2 3 4 5 6 7 8 9 10 11 12 13 14 Public Class Pago

Module1.vb - Pago

<summary> Clculo del pago neto </summary> 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-Mays-C), seleccione el nodo Nomina Nomina y haga clic en el icono View Class Diagram. 11. Agregue, usando Class Designer, una clase llamada PagoBonificado, que ser pblica y que se agregar al programa de consola que estamos trabajando. 12. En el diagrama de clase seleccione la clase PagoBonificado que acaba de agregar, invoque Class Details y agregue un mtodo de nombre CalculaPago(), que ser pblico y devolver un valor Decimal. 13. Edite el programa y agregue una lnea que especifique que la nueva clase hereda la funcionalidad de la clase Pago. Aqu se generara una contaminacin de espacios de nombres, dado que Pago ya posee un mtodo llamado CalculaPago(), y al estar heredando su funcionalidad, equivaldra a estar definiendo dos miembros con el mismo nombre, lo cual no es posible. Para evitar el problema, estando en Class Details seleccione el mtodo CalculaPago() de PagoBonificado, e invoque Properties; deber modificarse la propiedad Inheritance modifier, asignando un valor Overrides. Dado que se est realizando una operacin de reemplazo (overrides), los argumentos del mtodo deben ser exactamente los mismos. La nica variante entre los dos procedimientos es que el mtodo CalculaPago() de la clase PagoBonificado retorna 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 clase Pago, por lo que se consume el mtodo de la clase base. 14. Desarrolle el punto anterior utilizando Class View, Class Designer y Class Details, o bien agregando el siguiente cdigo en el programa:

11

330

Aprenda Practicando Visual Basic 2005 usando Visual Studio

Codificacin de Nomina
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Module1.vb - PagoBonificado

Public Class PagoBonificado Inherits Pago <summary> Clculo de pago con bonificacin </summary> 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-Mays-C), seleccione el nodo Nomina Nomina y haga clic en el icono View Class Diagram. 16. Agregue, usando Class Designer, una clase llamada PagoBonificadoExtra, que ser pblica y se agregar al programa de consola que estamos trabajando. 17. En el diagrama de clase seleccione la clase PagoBonificadoExtra que acaba de agregar, invoque Class Details y agregue un mtodo de nombre CalculaPago(), que ser pblico y devolver un valor Decimal. 18. Edite el programa y agregue una lnea que especifique que la nueva clase hereda la funcionalidad de la clase PagoBonificado. Aqu se generara una contaminacin de espacios de nombres, dado que Pago ya posee un mtodo llamado CalculaPago(), y al estar heredando su funcionalidad, equivaldra a estar definiendo dos miembros con el mismo nombre, lo cual no es posible. 19. Hay otro problema: el nuevo mtodo, adems de los beneficios de puntualidad, integrar un beneficio adicional que el usuario podr especificar, por lo cual el mtodo CalculaPago() no tiene el mismo nmero de argumentos que CalculaPago() de la clase PagoBonificado, por lo que una operacin de reemplazo no es posible. Deber realizarse una operacin de sustitucin (overload) para que los argumentos del mtodo no necesariamente sean los mismos. La sustitucin deber especificarse va cdigo, dado que Properties no ofrece el valor Overload para Inheritance modifier (lo cual tiene mucho sentido si consideramos que la sustitucin tiene que ver ms con el polimorfismo que con la herencia). La nica variante entre los dos procedimientos es que el mtodo CalculaPago() de la clase PagoBonificadoExtra devuelve el monto a pagar multiplicado por la constante de bono de puntualidad (informacin que ofrece el mtodo CalculaPago() de la clase base), y adems le agrega un porcentaje adicional de beneficio.

Captulo 11. Herencia y polimorfismo

331

20. Desarrolle el punto anterior utilizando Class View, Class Designer y Class Details, o bien agregando el siguiente cdigo en el programa.

Codificacin de Nomina
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Module1.vb - PagoBonificadoExtra

Public Class PagoBonificadoExtra Inherits PagoBonificado <summary> Clculo de pago con bonificacin y extra </summary> 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

11

21. Complemente el procedimiento Main() para proveer de funcionamiento al programa. Al final, deber lucir como sigue: Codificacin de Nomina
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 Module1 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))

Module1.vb

332

Aprenda 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

Write(Pulse INTRO para continuar) ReadLine() End Sub End Module Public Class Pago <summary> Clculo del pago neto </summary> Public Overridable Function CalculaPago( _ ByVal HorasTrabajadas As Decimal, _ ByVal PagoXHora As Decimal) As Decimal Return (HorasTrabajadas * PagoXHora) End Function End Class Public Class PagoBonificado Inherits Pago <summary> Clculo de pago con bonificacin </summary> 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 Public Class PagoBonificadoExtra Inherits PagoBonificado <summary> Clculo de pago con bonificacin y extra </summary> 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

Captulo 11. Herencia y polimorfismo

333

Ejecucin guiada de Nomina

Module1.vb

22. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 23. El programa calcula el monto a pagar a los empleados. Hay tres escenarios: un pago para todos los empleados, que es un monto neto; adems hay un monto para los empleados puntuales, que es un poco ms alto; finalmente hay un monto an ms alto para los que son puntuales, pero adems tienen un desempeo excepcional. 24. El programa se compone del procedimiento Main(), lneas 10 a la 26, que se encarga de hacer las instancias de las clases, as como de mostrar los resultados. 25. Al inicio del mdulo se declaran dos constantes de alcance pblico, que por lo mismo estarn disponibles tanto para el mdulo como para las clases del programa. Se anexan estas constantes con el nico fin de no solicitar informacin al usuario para la demostracin del programa. 26. El mtodo Pago.CalcularPago() requiere dos argumentos: horas trabajadas y pago por hora. Con ellos calcula el monto del pago a realizar, que resulta de la multiplicacin de los argumentos. La clase PagoBonificado hereda la funcionalidad de la clase Pago, y de hecho consume el resultado de sus mtodos. A su vez, PagoBonificadoExtra 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 derivada de Pago y clase base para PagoBonificadoExtra; PagoBonificadoExtra slo es clase derivada de PagoBonificado. Respecto al manejo de los mtodos, podemos decir que el mtodo Pago.CalculaPago() es sustituido por PagoBonificado.CalculaPago, y PagoBonificado.CalculaPago es sustituido por PagoBonificadoExtra.CalculaPago. FIGURA 11.2 Relaciones de herencia del programa

11

334

Aprenda Practicando Visual Basic 2005 usando Visual Studio

27. Al ejecutarse el programa, se definen los valores iniciales del pago por hora vigente (lnea 7) y del bono de puntualidad (lnea 8). En el procedimiento principal se genera una instancia de la clase Pago (lnea 11), una instancia de la clase PagoBonificado (lnea 12) y una instancia de PagoBonificadoExtra (lnea 13). La funcionalidad de nuestras clases est disponible a travs de las variables objeto que acabamos de definir. Otro dato que se provee es el nmero de horas por semana sobre las que se calculan los pagos (lnea 14). 28. En las lneas 16 y 17 se muestra un mensaje que para construirse consume el mtodo CalculaPago() de la clase Pago, que es la que dio origen al objeto PagoNoPuntuales. Se proporcionan como argumentos el nmero de horas laboradas y el pago por hora vigente. El mtodo se encarga de recibir los dos valores (lneas 36 a la 38), multiplicarlos y devolver el resultado (lnea 40). Es importante observar que este mtodo fue codificado de tal forma que permite su reemplazo y sustitucin (modificador Overridable). 29. En las lneas 18 y 19 se muestra un mensaje que para construirse consume el mtodo CalculaPago() de la clase PagoBonificado (la que dio origen al objeto PagoPuntuales). Se proporcionan como argumentos el nmero de horas laboradas y el pago por hora vigente. El mtodo se encarga de recibir los dos valores (lneas 51 a la 53) y declara una variable de trabajo (lnea 55) a la cual le asigna el valor retornado el mtodo MyBase.CalculaPago(); en virtud de que la clase base es Pago, sera equivalente a ejecutar Pago.CalculaPago(). Se pasan los datos recibidos a MyBase.CalculaPago() y al resultado se le aplica el bono de puntualidad (lnea 57). Es importante notar que la clase hereda la funcionalidad de la clase Pago (lnea 46) y reemplaza la implementacin del mtodo Pago.CalculaPago(), por lo cual respeta la cantidad y el tipo de los argumentos establecidos en la clase base (lneas 51 a 53). 30. En las lneas 20 y 22 se muestra un mensaje que para construirse consume el mtodo CalculaPago() de la clase PagoBonificadoExtra, que es la que dio origen al objeto PagoPuntualesPlus. Se proporcionan como argumentos el nmero de horas laboradas, el pago por hora vigente y el porcentaje aplicable al pago por buen desempeo. El mtodo se encarga de recibir los tres valores (lneas 68 a la 71) y declara una variable de trabajo (lnea 73) a la cual le asigna el valor retornado el mtodo MyBase.CalculaPago(), es decir, PagoBonificado.ClaseBase(), a la cual le pasa los datos que necesita. Al resultado le aplica el bono extra (lnea 76). Es importante observar que la clase hereda la funcionalidad de la clase PagoBonificado (lnea 63) y sustituye la implementacin del mtodo PagoBonificado.CalculaPago() (lneas 68 a 71), dado que recibe un nmero distinto de argumentos que el mismo mtodo en su clase base. Si todo ocurri como se esperaba, la salida ser la siguiente:
Pago a los no puntuales: 4800 Pago a los puntuales: 6000.00 Pago a los puntuales, + extra: 7200.000 Pulse INTRO para continuar

FIN DEL EJERCICIO*

Captulo 11. Herencia y polimorfismo

335

MAPA

MENTAL DEL CAPTULO

11

336

Aprenda Practicando Visual Basic 2005 usando Visual Studio

TERMINOLOGA
Abstract class, 315 Clase(s) abstractas, 315 base, 313 Clases derivadas, 313 Debe reemplazarse, 324 Herencia, 313 Inheritance, 313 Inherits, 314 Jerarqua de clases, 313 MustInherit, 314 MustOverride, 3234 MyBase, 325 MyClass, 325 No reemplazable, 324 NotInheritable, 314 NotOverridable, 323-4 Overload, 323 Overloaded, 323 Overloads, 323-4 Overridable, 323-4 Overridden, 323 Override, 313, 323 Overrides, 323-4 Polimorfismo, 325 Reemplaza, 324 Reemplazable, 324 Sobrecarga/Sustituy e, 324

PREGUNTAS
11.1 Qu es la herencia? 11.2 En qu casos se recomienda la implementacin de la herencia? 11.3 Cules 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 automatizacin real, en donde pueda usted implementar herencia y polimorfismo.

Captulo 11. Herencia y polimorfismo

337

Notas:

11

338

Aprenda Practicando Visual Basic 2005 usando Visual Studio

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que considere que responde a la pregunta.
1. Es la habilidad de una clase para servir de base a otra clase, trasladndole su funcionalidad: a) Herencia b) Polimorfismo c) Encapsulamiento 2. Tipo de relacin para la que se recomienda la herencia: a) Has-a b) Is-a c) Go-to 3. Permite la variacin en la clase derivada, de las propiedades y mtodos (requiere mantener los mismos argumentos): a) Inherits b) Overrides c) Overloads 4. Habilidad de un lenguaje para definir clases que se comporten distinto, a pesar de llamarse igual: a) Herencia b) Polimorfismo c) Encapsulamiento 5. Permiten generar un tipo de dato compuesto: a) Delegados b) Clases c) Estructuras

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. 7. 8. 9. 10. Por omisin, las clases en Visual Basic son NotInheritable. Si no desea un acceso abierto a su clase puede restringir el acceso al utilizar el modificador Friend. MyClass se utiliza para llamar a ejecucin un mtodo de la clase base. La manifestacin ms pura del polimorfismo es la utilizacin de overloads. Si un auto mvil y su dueo fueran objetos, la relacin entre ellos sera is-a.

Captulos:
12 Desarrollo de aplicaciones Windows 13 Desarrollo de aplicaciones Web con ASP.NET 14 Servicios Web XML

Parte 4
Interfases Windows/Web y Servicios Web XML
En esta parte del libro aprenderemos a desarrollar las interfases que proporcionarn 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 revisin de las posibilidades de las interfases de plataforma Windows, hoy por hoy, las ms sofisticadas y poderosas. Posteriormente analiza la elaboracin de interfases para el ambiente Web con ASP.NET. Finalmente, trata el tema de los Servicios Web XML, que permiten la elaboracin de interfases desatendidas, propias para el consumo aplicacin a aplicacin. Hay quienes argumentan que los datos nunca son suficientes para satisfacer las necesidades; esa percepcin es propia de las aplicaciones mal delimitadas. El desarrollador inteligente siempre sabe producir el mximo de informacin con el mnimo de datos, y se asegura de que los pocos datos requeridos siempre sean proporcionados en la cantidad y la forma correctas.

Herramientas de Visual Studio revisadas:


1. 2. 3. 4. 5. 6. Form Designer Menu Designer Dynamic Help String collection editor HTML Designer Regular Expression Editor

Otras herramientas:
1. disco.exe 2. wsdl.exe

CAPTULO

12

Desarrollo de aplicaciones Windows


Objetivos: Conocer los elementos bsicos del trabajo con controles para la creacin de aplicaciones con interfaz grfica Windows. 1. Conocer los conceptos generales del desarrollo de interfaces y su orientacin a objetos en .NET. 2. Utilizar la ayuda de .NET. 3. Se familiarizar con los grupos de controles ms importantes para el desarrollo de aplicaciones Windows. 4. Aprender el concepto de las colecciones y su relevancia en el desarrollo de aplicaciones Windows. 5. Conocer las generalidades del enfoque. 6. Aprender a desarrollar una interfaz Windows utilizando Visual Studio.

341

342

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Interfaz de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Desarrollo de interfaces basadas en objetos . . . . . . . . . . . . . . . . . . . . . . . . . Controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formas de agregar controles a una interfaz . . . . . . . . . . . . . . . . . . . . . Estrategia para el estudio efectivo de los controles . . . . . . . . . . . . . . . Jerarqua de clases relacionadas con controles . . . . . . . . . . . . . . . . . . . . . . . Uso de la ayuda para conocer los miembros de las clases de BCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uso de Dynamic Help . . . . . . . . . . . . . . . . . . . . . . . . . . . Bsqueda de temas en la ayuda . . . . . . . . . . . . . . . . . . . Estructura de un tpico de ayuda . . . . . . . . . . . . . . . . . . Clasificacin de los controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grupo de controles comunes (Common Controls) . . . . . . . . . . . . . . . . Grupo de controles contenedores (Containers) . . . . . . . . . . . . . . . . . . Grupo de controles de men y barras de herramientas (Menus & Toolbars) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grupo de controles de datos (Data) . . . . . . . . . . . . . . . . . . . . . . . . . . . Grupo de controles componentes (Components) . . . . . . . . . . . . . . . . . Grupo de controles de impresin (Printing) . . . . . . . . . . . . . . . . . . . . . Grupo de controles de cuadros de dilogo (Dialogs) . . . . . . . . . . . . . . Manejo de colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Las colecciones y la programacin de aplicaciones Windows . . . . . . . . For Each . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Enfoque (Focus) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interfaz multipgina con manejo avanzado de cuadros de texto, barra de mens y botones de comando . . . . . . . . . . . Establecimiento de valores generales de formulario . . . Adicin de un sistema de mens usando Menu Designer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lneas gua en tiempo de diseo para la alineacin de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . Cmo agregar imgenes a objetos Button . . . . . . . . . . . Opciones de formato para grupos de objetos . . . . . . . . Cmo establecer pginas de controles (TabControl) . . . Uso de grupos de controles, combos y selectores de nmero . . Orden de tabulacin y activacin dinmica de controles . . . . . . Lanzamiento de tareas desde la barra de mens . . . . . . Procedimiento para el evento de arranque (Load) . . . . . 344 345 347 348 348 349 350 350 352 353 355 355 357 357 358 358 359 360 361 362 352 363 364 365 366 368 370 372 375 380 382 384 386

Captulo 12. Desarrollo de Aplicaciones Windows

343

Uso de Tab Order para establecer el orden de tabulacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bloqueo de controles (Lock Controls) . . . . . . . . . . . . . . . Activacin dinmica de elementos . . . . . . . . . . . . . . . . . Uso de controles para la visualizacin de pginas Web . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

387 389 389 391 392 393 394 396

12

344

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Interfaz de usuario
Se llama interfaz de usuario al sistema de elementos de software a travs de los cuales un programa determinado se articula con el usuario para recibir datos y actuar en consecuencia. La interfaz puede ser grfica (GUI, Interfaz grfica de usuario, Graphic User Interface), si est constituida por elementos grficos (iconos, punteros, ventanas); o textual, cuando el usuario introduce comandos e instrucciones en forma de cadenas de caracteres especficas (por ejemplo, las aplicaciones de consola). En el caso de Visual Basic es posible implementar interfaces de usuario en ambas modalidades. El objetivo principal de una interfaz, sea cual sea su tipo, es recibir los datos vlidos, mnimos, suficientes y necesarios para que un programa produzca los resultados esperados, y para dar al usuario la informacin relacionada con sus operaciones. La interfaz de usuario es el principal elemento de comunicacin entre las aplicaciones y los consumidores de la aplicacin. Pueden ser consumidores de la aplicacin las personas que la utilizan o los programas que se conectan a ella de manera automtica y aprovechan su funcionalidad sin mediar la intervencin 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 salida de datos, encargndose de los enlaces subyacentes que el usuario no tiene necesidad de conocer. El usuario captura informacin y espera un resultado, sin importarle la arquitectura de hardware y software que permitan a la aplicacin producir la respuesta.

FIGURA 12.1 Forma de trabajo de una interfaz.

Captulo 12. Desarrollo de Aplicaciones Windows

345

Una buena interfaz:


Permite la recopilacin de la cantidad precisa de datos que el programa requiere para su

procesamiento. Ms datos de los requeridos es innecesario; menos, es insuficiente.


Permite la recopilacin 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 operacin. Si las reglas de operacin deter-

minan que una fecha a capturar no sea anterior a la fecha del da del sistema, o que un nmero deba estar entre un determinado rango, la interfaz debe garantizar que slo 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, esttica y proporcionada. De preferencia, deben respetar los con-

vencionalismos que el usuario utilice con ms frecuencia; el programador no debe anteponer sus preferencias personales si stas no facilitan la aceptacin de la aplicacin por parte del usuario.
La interfaz de usuario debe proporcionar la informacin de manera organizada y estti-

ca, de manera que el usuario la encuentre en la cantidad y la forma requerida.

NOTA
En computacin hay un fenmeno que se conoce como GIGO (Garbage In, Garbage Out/basura entra, basura sale). Si una aplicacin acepta datos errneos, muy probablemente se generarn errores en el procesamiento. Se puede tener la mejor aplicacin del mundo, pero si la persona que utiliza la aplicacin introduce datos equivocados, obtendr resultados equivocados. Lo ms que puede hacer un programador es validar tantos datos como sea posible, ya sea por tipo de dato o por regla de operacin.

12

Desarrollo de interfaces basadas en objetos


Una interfaz sencilla y prctica para efectos explicativos es el registro de un usuario, tal como se muestra en la figura 12.2. Consiste en un cuadro de dilogo con un espacio para especificar un nombre de usuario, otro para dar una contrasea y un tercero donde se deber confirmar la contrasea. El botn Aceptar no se habilita sino hasta que se hayan proporcionado todos los datos requeridos.

346

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

FIGURA 12.2 Interfaz elemental.

Para cumplir con el propsito de la interfaz, el mnimo de datos que podemos preguntar son el usuario y la contrasea 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 ms grande, al que se conoce como formulario (objeto Form). La interfaz est compuesta entonces por 9 objetos. Un objeto contenedor es el que puede contener otros objetos. Los objetos contenedores son conocidos tambin como objetos padre (parent), mientras que los objetos contenidos son conocidos como objetos hijo (child). Es posible que un objeto contenedor est contenido en otro objeto contenedor, por lo que podemos decir que stos pueden anidarse. Se tienen los siguientes elementos grficos 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 cdigo necesario para dibujar pxel por pxel cada uno de los elementos. La codificacin ya est disponible como parte de BCL en forma de objetos que pueden 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 obtener la apariencia y el comportamiento deseado. Los objetos que se necesitan en nuestra interfaz derivan de las siguientes clases:
Clase BCL System.Windows.Forms.Form System.Windows.Forms.Label System.Windows.Forms.TextBox System.Windows.Forms.Button Tipo Parent Child Child Child Cantidad 1 3 3 2

Captulo 12. Desarrollo de Aplicaciones Windows

347

Controles
Los controles son las representaciones grficas de las clases, disponibles en Visual Studio a travs 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 objetos son cosas distintas, est tan generalizado el uso de la palabra control para designar las instancias de las clases agregadas a una interfaz grfica que es comn encontrarlos como sinnimos. Si desea que su interfaz sea efectiva, requiere saber manejar los objetos que sta incluya; esto slo se logra conociendo la clase de la cual derivan y las capacidades de dicha clase. Los controles estn disponibles en la barra de herramientas, o Toolbox. La herramienta Toolbox se organiza en grupos de controles, clasificndolos de acuerdo con la similitud de su funcionalidad o enfoque. Los grupos de controles pueden expandirse o contraerse con el fin de tener presentes slo los controles que utilicemos. Incluso es posible la generacin de grupos de controles del usuario, colocando ah los controles ms usuales para nosotros; con ello se facilita la operacin de buscarlos y encontrarlos. FIGURA 12.3 Toolbox, o barra de herramientas.

12

348

Aprenda 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 grfica: 1. Modo insercin. Se logra haciendo doble clic sobre un control en Toolbox. El objeto se agregar al espacio de trabajo, donde podr moverse o ajustarse. En este modo no hay control de la posicin en la que el objeto se colocar, ni de sus dimensiones. 2. Modo arrastre. Se logra arrastrando un control desde Toolbox hasta el espacio de trabajo. En este modo tenemos el control de la posicin que ocupar el objeto, pero no de sus dimensiones. 3. Modo 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 control de la posicin 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 disponibles 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 ms adecuada a sus necesidades; no sea de las personas que define la interfaz de usuario a medida que se da cuenta lo que la clase permite hacer; pues es la forma ms fcil de hacer de una interfaz de usuario un laboratorio de aprendizaje de clases, 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 ms especficamente La biblioteca de clases de .NET Framework posee tantas, que seguro encontrar alguna que se adecue a sus necesidades! Incluso si encuentra una que le sea de utilidad, siga buscando; es posible que encuentre otra clase que le funcione de manera ms especfica. Sea profundo en su anlisis para decidir las clases a utilizar; le aseguramos que ser tiempo bien invertido, pues si selecciona una clase que no es la ms adecuada perder tiempo codificando aquellas cosas que la clase no proporciona de origen. Le va a desilusionar bastante romperse la cabeza para obtener cierta funcionalidad, para luego encontrarse una clase ya integrada a la biblioteca de .NET Framework que haca 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 mtodos. 4. Investigue qu eventos reconoce la clase. Esto le permitir determinar si un objeto generado a partir de la clase le sirve para sus propsitos de interaccin y si obede-

Captulo 12. Desarrollo de Aplicaciones Windows

349

ce a la filosofa de la interfaz de usuario que est desarrollando. Investigue primero los eventos por la sencilla razn de que, generalmente, mandamos a ejecucin un mtodo como respuesta a un evento; si el evento no sucede, el mtodo tampoco suceder. 5. Investigue, finalmente, los mtodos que permite la clase. Utilizando los mtodos podr poner a trabajar las capacidades de comportamiento intrnseco del objeto.

Jerarqua de clases relacionadas con controles


En la estrategia expuesta anteriormente queda claro que es necesario aprender las propiedades, los mtodos y los eventos de las clases de las cuales derivan los objetos, a fin de gobernar su apariencia y comportamientos. Una forma lgica de hacerlo es seleccionar los tipos de objeto que necesitamos y explorar sus propiedades, mtodos y eventos; de esta forma podremos darnos cuenta de que muchas de las propiedades, mtodos y eventos se repiten en todos los objetos. La explicacin a ese fenmeno es que derivan de clases genricas comunes, que proveen la funcionalidad bsica para todos los objetos. Aprender las clases genricas automticamente lleva a conocer un alto porcentaje de capacidades de las clases para la definicin de objetos de interfaz. La gran mayora de los controles constituyen una clase derivada de la clase Control, que a su vez es derivada de la clase Object. FIGURA 12.4 Jerarqua de clases para interfaces en Windows.

12

350

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Esto implica que, como ya lo sabe, los controles heredan propiedades, mtodos y eventos de la clase base. La figura 12.4 ejemplifica la jerarqua de clases a la que estn sujetos la mayora de los controles que se utilizan en una interfaz de usuario. Si puede entender cules son los miembros de la clase Object y la clase Control habr entendido el comportamiento general de los controles. El nmero de miembros de dichas clases es muy extenso; no sera prctico mencionarlos todos. Si desea consultar un listado exhaustivo bsquelos 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 informacin de clases en la ayuda de .NET (es necesario que la ayuda est instalada en el sistema). 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Haga clic en el botn Show All Files de la barra de herramientas de Solution Explorer. 3. En Solution Explorer seleccione el nodo HolaMundoWin Form1.vb Form1.Designer.vb.

Uso de Dynamic Help


4. Elija la opcin de men Help Dynamic Help. 5. Aparecer en el espacio de trabajo la herramienta Dynamic Help.

Captulo 12. Desarrollo de Aplicaciones Windows

351

6. La herramienta Dynamic Help es una ayuda dinmica que actualiza vnculos a los temas de ayuda relativos a lo que estemos haciendo. Dependiendo de lo que estemos trabajando, aparecern los vnculos pertinentes. Inicialmente aparecern temas genricos del tipo de proyecto que tengamos en el espacio de trabajo. 7. Busque la siguiente lnea de cdigo y seleccione la palabra Label.
Me.lblResultado = New System.Windows.Forms.Label

8. En Dynamic Help aparecern slo temas relacionados con lo que acabamos de seleccionar.

9. Busque la ayuda de la clase Label. Deber iniciar con Label Class. 10. Vea cmo aparecen varios temas que inician con Label Class, pues la clase Label existe en diferentes jerarquas de espacios de nombres (namespaces). Si una clase apunta hacia System.Web.UI.MobileControls, se refiere a las clases para interfaces de cmputo mvil; 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 controles para la programacin en programas de Microsoft Office, como Word y Excel. Dado que estamos en una aplicacin Windows, seleccione Label Class (System.Windows.Forms).

12

352

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

> Lo nuevo
En Visual Studio 2005, el contenido de la ayuda se distribuye de forma distinta, ms organizada y predecible. Cada clase tendr un encabezado de tema (Class), para posteriormente ofrecer generalidades (about class), miembros (all members), informacin del constructor (constructor), sintaxis declarativa (declarative sintaxis), eventos, mtodos y propiedades (events, methods, properties).

11. Lo anterior despliega la ayuda de Visual Studio.

Bsqueda de temas en la ayuda


12. La ayuda se compone de tres elementos bsicos: Index, que se encarga de enumerar todos los temas incluidos; Topic content, que muestra el contenido de la ayuda correspondiente al tema, e Index Results, que muestra los diferentes temas que se encuentran para una bsqueda. 13. Index tiene dos fichas: Contents, que muestra los tpicos de forma organizada por temas en un esquema de rbol de nodos, e Index, que permite especificar un tema a buscar, ya sea sobre toda la ayuda o aplicando un filtro por tecnologa. 14. Utilizando Index, especifique en Filtered by el valor .NET Framework, con el fin de filtrar la ayuda y ver slo los temas relacionados con la plataforma .NET. Busque la ayu-

Captulo 12. Desarrollo de Aplicaciones Windows

353

da de los cuadros de texto, especificando TextBox Class, about en Look for:, y oprimiendo la tecla Intro al finalizar. 15. Aparecern en Index Results aquellos temas que concuerden con la bsqueda.

16. Seleccione el tpico sobre el mismo.

TextBox Class (System.Windows.Forms),

haciendo doble clic

Estructura de un tpico de ayuda


17. Un tpico de ayuda se compone de explicaciones y vnculos. La ayuda aparece en Topic Content. FIGURA 12.5 Ayuda.

12

354

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

18. Dependiendo del tpico de ayuda mostrado aparecern diversos elementos en Topic Content. En el encabezado del tpico aparecer el nombre del mismo; debajo, vnculos de acceso rpido a temas de inters general o, por lo menos, un vnculo See Also, que lleva a temas relacionados. Dependiendo del tpico los dems vnculos pueden variar. 19. Tambin en el encabezado del tpico aparece un vnculo para expandir o contraer los subtpicos de la ayuda; si los subtpicos estn contrados, aparecer el vnculo Expand All, que permitir expandirlos; en caso de que estn expandidos, aparecer el vnculo Collapse All, para contraerlos. 20. En caso de que los subtpicos correspondientes a TextBox Class no estn expandidos, haga clic en el vnculo Expand All. 21. Con la finalidad de encontrar informacin especfica, la ayuda cuenta con una opcin de filtro que vara dependiendo del contenido que se est buscando. Un filtro tpico es el lenguaje .NET en el que se ejemplifican las instrucciones y sintaxis; si usted slo codifica en Visual Basic, probablemente ver los ejemplos y sintaxis en todos los lenguajes .NET incluidos en la ayuda (C#, C++, J#, JScript) no har ms que complicar la investigacin. En caso de que el tpico tenga ejemplos de codificacin, la ayuda de .NET Framework permitir seleccionar el o los lenguajes en los que desee ver las implementaciones en cdigo. 22. En Language filter seleccione nicamente Visual Basic (usage). Vea cmo en el cuerpo de la ayuda aparecern slo ejemplos en el lenguaje seleccionado. Observe cmo en Visual Basic se puede incluso filtrar la ayuda para ver el uso (usage) o la declaracin de las sentencias (declaration). 23. En el cuerpo de la ayuda aparecer el tema desarrollado en subtpicos y ejemplos. Los subtpicos pueden contraerse o expandirse, haciendo clic en el icono (+ , ) que aparece contiguo al ttulo. Generalmente aparecer un resumen de la funcionalidad del tpico en la parte superior. 24. En el encabezado de la ayuda haga clic en el vnculo Members para examinar las propiedades, los mtodos y los eventos disponibles para el objeto Label en una interfaz Windows. 25. Vea cmo el filtro ha cambiado. Ahora permite filtrar con base en los miembros que desea ver. Ya decamos que los objetos de interfaz derivan de Object y de Controls. Si ya conoce los miembros comunes de dichas clases, es probable que slo le interese 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 propiedad es comn 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 verificacin. Vea cmo BackColor ya no aparece. Esto sucede porque se inhabilit la opcin 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 EJERCICIO *

Captulo 12. Desarrollo de Aplicaciones Windows

355

> Lo nuevo
En Visual Studio 2005 la ayuda viene mejorada, dado que permite la integracin con la comunidad de desarrolladores (se requiere estar en lnea para ello). No slo se puede consultar lo ltimo en documentacin, sino que directamente se pueden agregar preguntas a foros de Visual Studio. Se tiene un nuevo men, llamado Community, que permitir el acceso a los recursos disponibles para la comunidad de desarrolladores a nivel mundial.

Clasificacin de los controles


La herramienta Toolbox muestra los controles de forma categorizada por grupos, de tal manera que puedan ser identificados aquellos con mayor afinidad en cuanto a su propsito. Dependiendo de la aplicacin que se est desarrollando (consola, Windows, Web, mobile) Toolbox mostrar los controles pertinentes. En el caso de las aplicaciones Windows, los controles incluidos en Toolbox son los siguientes (se mencionan las categoras de controles ms importantes):

Grupo de controles comunes (Common Controls)


Concentra los controles ms comnmente utilizados en interfaces basadas en Windows.
Control Nombre Pointer Uso

Indica la no seleccin de otros controles. Este control realmente no se enlaza con ninguna clase de BCL y aparece en todos los grupos de controles. Muestra un botn que al presionarlo desencadena una accin. Representa una casilla de verificacin. Representa una lista de opciones que pueden ser marcadas en forma de casillas de verificacin. Representa un cuadro combinado de opciones (cuadro de texto + lista desplegable). Representa un selector de fechas.

12

Button

CheckBox CheckedListBox

ComboBox

DateTimePicker

356

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Label

Representa una etiqueta textual de slo lectura. Representa una etiqueta que puede desplegar hipervnculos. Representa una lista. Representa una coleccin de elementos, preferentemente grficos, que pueden ser seleccionados. Representa un cuadro de texto que distingue entre una entrada vlida y una invlida, de acuerdo con un patrn. Representa un selector de fechas en modo mes. Representa un icono en el rea de notificacin. Representa un selector de nmeros dentro de un intervalo. Representa un cuadro en el cual se puede desplegar una imagen. Representa una barra de control de avance de un proceso. Representa un botn de opcin. Representa un cuadro de texto RTF (Rich Texto Format, Formato de texto enriquecido). Representa un cuadro de texto. Representa un cuadro de informacin que aparece slo al sobreponer el puntero del ratn sobre un elemento de interfaz. Representa una coleccin jerrquica de elementos (nodos) y permite su seleccin. Representa un navegador de Internet que puede incluirse en un formulario.

LinkLabel

ListBox ListView

MaskedTextBox

MonthCalendar

NotifyIcon

NumericUpDown

PictureBox

ProgressBar

RadioButton RichTextBox

TextBox ToolTip

TreeView

WebBrowser

Captulo 12. Desarrollo de Aplicaciones Windows

357

Grupo de controles contenedores (Containers)


Rene los controles contenedores utilizados en interfaces Windows. Dentro de ellos podrn colocarse otros controles, heredando propiedades de aspecto y disponibilidad.
Control Nombre FlowLayoutPanel Uso

Representa un espacio de trabajo en el cual los controles se acomodan automticamente de forma vertical y horizontal. Representa un marco que agrupa a otros controles, con la opcin de incluir un texto superior explicativo. Representa un espacio de trabajo en el cual se pueden colocar controles que requieren agruparse. Representa un rea de espacio de trabajo que se divide en dos paneles que pueden ajustarse de manera dinmica. Representa un conjunto de pginas de controles, que pueden seleccionarse mediante el uso de fichas. Representa un panel dinmico que se subdivide en celdas.

GroupBox

Panel

SplitContainer

TabControl

TableLayoutPanel

12

Grupo de controles de men y barras de herramientas (Menus & Toolbars)


Concentra los controles para el diseo de sistemas de mens y barras de herramientas basadas en Windows.
Control Nombre ContextMenuStrip MenuStrip Uso

Representa un men contextual. Proporciona un sistema de mens a un formulario. Representa una barra de estado para un formulario.

StatusStrip

358

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

ToolStrip

Representa un contenedor para objetos de barra de herramientas. Proporciona paneles laterales en una forma, y un panel central, en donde se pueden colocar otros controles.

ToolStripContainer

Grupo de controles de datos (Data)


Concentra los controles para el manejo de datos tomados de diversas fuentes.
Control Nombre DataSet Uso

Representa una base de datos desconectada que se almacena en memoria. Representa una rejilla de datos que permite personalizar la apariencia. Encapsula una fuente de datos para una forma. Representa una interfaz de navegacin y manipulacin de datos cuando se tienen en el formulario controles enlazados con las fuentes de datos. Permite la visualizacin de reportes ReportViewer.

DataGridView

BindingSource

BindingNavigator

ReportViewer

Grupo de controles componentes (Components)


Concentra los controles de uso genrico basados en componentes .NET.
Control Nombre BackgroundWorker Uso

Representa la ejecucin de un proceso en un flujo de procesamiento separado (thread). Representa el encapsulamiento de nodos y objetos de Active Directory.

DirectoryEntry

Captulo 12. Desarrollo de Aplicaciones Windows

359

DirectorySearcher

Representa una consulta sobre el Active Directory. Representa una interfaz entre un control y un error asociado con l. Representa una interaccin con el logo de eventos de Windows. Representa un monitoreo que vigila y detecta si un directorio o archivo ha sufrido cambios en su contenido. Representa ayuda popup o en lnea para un control. Representa una coleccin de objetos de imagen. Representa un manejador de colas en .NET. Representa un componente de monitoreo de desempeo de Windows (performance counter). Representa el acceso a procesos que pueden ser detenidos o iniciados de manera local o remota. Representa un recurso de acceso al puerto serial. Representa un servicio de Windows y permite su manipulacin. Representa un temporizador, que permite ejecutar procesos en determinado intervalo.

ErrorProvider

EventLog

FileSystemWatcher

HelpProvider

ImageList

MessageQueue

PerformanceCounter

Process

12

SerialPort

ServiceController

Timer

Grupo de controles de impresin (Printing)


Concentra los controles para la manipulacin de la salida por impresora.

360

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Control

Nombre PageSetupDialog

Uso

Permite a los usuarios establecer la configuracin de las pginas de impresin. Representa un cuadro de dilogo estndar de Windows para la seleccin de impresora y envo de impresin. Representa un documento de impresin que puede disearse. Representa una versin esencial de presentacin preliminar. Representa un cuadro de dilogo estndar de Windows para la visualizacin de presentaciones preliminares.

PrintDialog

PrintDocument

PrintPreview Control PrintPreview Dialog

Grupo de controles de cuadros de dilogo (Dialogs)


Concentra los controles de cuadros de dilogo para incorporar funcionalidad estilo Windows a las aplicaciones.
Control Nombre ColorDialog Uso

Representa un cuadro de dilogo estndar de Windows para la seleccin de colores. Muestra y permite que el usuario seleccione un directorio de los existentes en el sistema de archivos. Representa un cuadro de dilogo estndar de Windows para la seleccin de fuentes. Representa un cuadro de dilogo estndar de Windows para la seleccin de un nombre de archivo existente. Representa un cuadro de dilogo estndar de Windows para la especificacin de nombres de archivo vlidos.

FolderBrowser Dialog

FontDialog

OpenFileDialog

SaveFileDialog

Captulo 12. Desarrollo de Aplicaciones Windows

361

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 especfico de las clases de BCL.

Manejo de colecciones
Uno de los conceptos ms importantes en .NET Framework es el manejo de colecciones. Una coleccin 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, adems de ser elementos individuales y autnomos. Podemos encontrarnos las colecciones como instancias de clases de tipo Collection, como arreglos o como propiedades de objetos que permiten el manejo de colecciones (como es el caso de los contenedores). Es requisito para una coleccin 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 coleccin. A cada uno de los elementos de una coleccin se le da el nombre de item. Los items son accesibles ya sea por un subndice que indica la posicin del elemento dentro de la coleccin, o por un nombre de elemento, en el caso que estos estn denominados. Dado que una coleccin tiene su propia identidad y comportamiento, posee propiedades y mtodos que permiten su manipulacin. Por ejemplo, para conocer el nmero de elementos que componen la coleccin basta con invocar la propiedad Collection.Count de la coleccin; para agregar elementos, podemos utilizar el mtodo Collection.Add, mientras que para eliminarlos podemos utilizar el mtodo Collection.Remove. Existen colecciones genricas para agrupar objetos de tipo indeterminado. Este tipo de colecciones no requiere la especificacin de un determinado tipo de objeto, lo que implica mucha flexibilidad; sin embargo, tambin implica prdida de desempeo de las aplicaciones, ya que es necesaria la realizacin de conversiones en tiempo de ejecucin (boxing, unboxing). Se habla de boxing cuando un tipo de dato primitivo es convertido en su equivalente a objeto (pasa de ser ByVal a ser ByRef), con lo cual podr disponer de toda la funcionalidad de la clase, como lo son los mtodos y propiedades intrnsecos de la clase que le dio origen. 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 slo existen colecciones genricas; 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 ejecucin, lo cual las hace ms eficientes.

12

362

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

NOTA
Las colecciones sern aludidas en este libro con el siguiente estilo tipogrfico: Collection, a fin de que las distinga de las propiedades comunes.

Las colecciones y la programacin de aplicaciones Windows


Es importante entender el concepto de colecciones si se desea desarrollar aplicaciones Windows, pues la interfaz grfica generalmente utiliza objetos contenedores para ser integrada. Un objeto contenedor es aquel que puede contener otros objetos. En el caso de las aplicaciones Windows, se tienen tres objetos contenedores bsicos: Form, GroupBox y Panel. Cada uno de ellos posee una coleccin Controls, a travs de la cual se controlarn los objetos de la interfaz como un todo. La integracin de un formulario basado en Windows que actuar como interfaz es muy sencilla: 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 (asignacin 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 coleccin Form.Controls del objeto contenedor aplicando el mtodo Collection.Add sobre la coleccin. Se muestra el formulario en forma modal, utilizando Form.ShowDialog.

For Each
El ciclo For taxis de For
For Each Each Each

es una estructura de control que sirve para explorar colecciones. La sines la siguiente:

Variable In Coleccin

proceso en donde Variable se establece como referencia del elemento en la coleccin Next

Variable

Captulo 12. Desarrollo de Aplicaciones Windows

363

Donde Variable es una variable de trabajo del mismo tipo de dato que los elementos contenidos en la coleccin. Coleccin ser la coleccin de objetos a explorar.

NOTA
En la tabla de miembros ms utilizados se incluyen slo aquellos que sean inherentes al control que se est documentando; se omitir mencionar propiedades, mtodos y eventos que sean derivados de las clases Control y Object, que ya fueron documentados en el captulo anterior.

Enfoque (Focus)
Se entiende por enfoque (focus) la capacidad de interactuar a travs del teclado con un objeto. Por lgica, en tiempo de ejecucin slo un objeto puede poseer el enfoque en un momento 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 ToolTip). Los objetos que s permiten la interaccin del usuario tienen una propiedad denominada Control.TabIndex que indica el orden en que el control del programa navegar de un objeto a otro al presionar la tecla TAB. Inicialmente, en la ejecucin 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 True) 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 tiene 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.
TabIndex.

12

El orden para adquirir y perder el enfoque est determinado por la propiedad Control. Este orden se respeta slo 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 casos no importa el orden determinado en Control.TabIndex. Al orden en que los objetos van pasando el enfoque se le llama orden de tabulacin (Tab Order).

Hay varios mtodos y eventos relacionados estrechamente con el enfoque. El mtodo 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.

364

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Como puede darse cuenta, el simple hecho de oprimir la tecla TAB o sealar con el puntero del ratn a un objeto que no posee el enfoque, propicia una buena cantidad de eventos, tanto para el objeto que recibe el enfoque como para el que lo pierde. Aqu se genera confusin: Cul ocurre primero? A continuacin le mostramos todos los eventos que suceden si un objeto adquiere el enfoque y lo pierde: 1. 2. 3. 4. 5. 6. 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 vlido o no hacerlo; se provoca el evento Control.Validating. Si la validacin se lleva a cabo, se provoca el evento Control.Validated. Ya que comprobamos que fue vlido dejar el objeto, se pierde la capacidad de interactuar con l, por lo que se provoca el evento Control.LostFocus.

Definir un adecuado orden de tabulacin es indispensable para construir una buena interfaz. Si el orden es catico, el usuario se perder. No trate de ser innovador con respecto al orden de tabulacin: 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. Cramelo, se lo van a agradecer mucho.

Ejercicio 12.2
Interfaz multipgina con manejo avanzado de cuadros de texto, barra de mens y botones de comando

Aprender a crear una aplicacin de interfaz Windows utilizando los controles grficos proporcionados por .NET Framework. 1. 2. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Windows Application, llamado Empresa. Deber aparecer un formulario en el diseador de formularios, que por omisin recibe el nombre de Form1.

Captulo 12. Desarrollo de Aplicaciones Windows

365

Establecimiento de valores generales de formulario


3. Cambie el nombre del formulario, de Form1 a frmEmpresa. Los cambios de nombre se realizan utilizando Properties (tecla F4), localizando la propiedad Name y especificando como valor el nuevo nombre que se desea asignar.

NOTA
En trminos de notacin, cuando hagamos referencia a Clase.Miembro, por ejemplo Form.Name, nos referiremos al miembro de la clase; la explicacin ser vlida para todas las instancias que de dicha clase se generen. Cuando hagamos referencia a Instancia.Miembro, por ejemplo frmEmpresa.Name, especificaremos valores y condiciones que se le apliquen slo a un objeto en particular. En todos los casos, los controles pertenecen a Windows.Forms.Controls.

4.

Modifique las siguientes propiedades:


Propiedad frmEmpresa.Text frmEmpresa.Size.Width frmEmpresa.Size.Height Valor a asignar

Registro de empresa
450 350

5.

Cuando encuentre este tipo de tablas en los ejercicios, lo que debe hacer es lo siguiente: a) En la columna de propiedad se encuentra una referencia que se compone de Objeto.Propiedad. En la herramienta Properties debe asegurarse que tiene seleccionado el objeto al cual desea modificar las propiedades; eso se comprueba si el objeto aparece en el cuadro combinado de seleccin de objetos de Properties. Una forma de seleccionar el objeto es haciendo un solo clic sobre l. b) En algunos casos la propiedad tendr en la tabla dos referencias (Propiedad1.Propiedad2), lo que indica que la primera propiedad engloba a la segunda. c) A fin de cuentas debe encontrarse en la columna izquierda de la rejilla de propiedades la propiedad especificada (Propiedad), y debe establecer el valor de la misma en la columna derecha de la rejilla (Valor a asignar). d) Los valores de las propiedades no se asignan hasta oprimir la tecla Intro al terminar la edicin.

12

6.

La propiedad Form.Text permite asignar el ttulo que ha de mostrarse en la barra de ttulo del formulario; Form.Width permite asignar el ancho en pxeles del formulario, mientras que Form.Height permite asignar el alto en pxeles.

366

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

7.

En Properties busque la propiedad frmEmpresa.Icon, y haga clic en el botn de asistencia de introduccin de valores . Aparecer la ventana de seleccin de archivos. Seleccione el archivo WindowsApp.ico, que se encuentra en los archivos complementarios al captulo, en C:\APVBNETVS\Cap11. La propiedad Form.Icon permite seleccionar el icono del programa. Como puede ver, el icono que aparece en la barra de ttulo de la aplicacin ha cambiado por el que hemos especificado. Por el momento nuestra interfaz luce como sigue:

Adicin de un sistema de mens usando Menu Designer


8. Visual Studio posee controles y herramientas llamados ToolStrip Designer, que permiten la modificacin de propiedades textuales en modo de diseo. Uno de ellos es MenuStrip. Agregue en modo de insercin un objeto MenuStrip; para ello haga doble clic en el control MenuStrip, que se encuentra en el grupo Menu & 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 Form 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.

9.

Captulo 12. Desarrollo de Aplicaciones Windows

367

Form Designer debe lucir como sigue:

10. Vea cmo se ha integrado una barra de mena que muestra el texto Type Here. Esta herramienta se llama Menu Designer, que permite ir diseando sistemas de men con suma facilidad. Por definicin, un sistema de men es un conjunto de opciones que se distribuyen visualmente de forma jerrquica y que al ser seleccionadas desencadenan acciones. FIGURA 12.6 Menu Designer.

12

11. En Menu Designer cada opcin constituye un elemento de men (menu item). Se tienen elementos de primer nivel, que son aquellas opciones que aparecen de forma permanente en la barra de mens, y que no dependen de ningn elemento de men. Tambin 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.

368

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

12. En el rea de edicin donde aparece Type Here se escribe la etiqueta de elemento; si como etiqueta del elemento emplea un verbo, procure utilizar uno en infinitivo. Al comenzar a editar una etiqueta de elemento, automticamente se proponen elementos latentes, 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 elementos 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 formacin de un nuevo nivel de elementos (salvo en el caso de los elementos de primer nivel, 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 elemento latente inferior escriba Limpiar campos; en el elemento latente inferior escriba un guin (-), y finalmente en el elemento latente inferior escriba Cerrar. Nuestro sistema de mens debe lucir como sigue (observe que al aplicar un guin como etiqueta se genera una lnea separadora):

14. El sistema de mens es para Visual Basic un objeto de tipo MenuStrip; los elementos de un sistema de mens constituyen objetos ToolStripMenuItem. Lo que escribimos en la etiqueta de elemento realmente constituye la propiedad ToolStripMenuItem.Text de cada elemento.

Lneas gua en tiempo de diseo para la alineacin de objetos


15. Ahora trabajaremos con objetos basados en el control Button, que se encuentra en el grupo Common controls de Toolbox. Agregue un objeto Button a la interfaz y cambie su nombre Button1 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.

Captulo 12. Desarrollo de Aplicaciones Windows

369

16. Al mover los objetos en la interfaz para colocarlos en el sitio que queremos, podremos usar las lneas gua (snaplines) que Visual Basic muestra; stas permiten una alineacin y distribucin esttica de los controles.

FIGURA 12.7 Lneas gua de Form Designer.

17. Existen diferentes lneas gua: las guas de proximidad, que son las que conectan a objetos entre s, indicando la distancia recomendada entre objetos para una interfaz grfica Windows (tambin pueden asociarse a bordes del espacio de trabajo). Adems existen las guas de alineacin, que permiten evaluar la posicin de un objeto en relacin con otros objetos y elementos del entorno. 18. Mueva btnCancelar de tal forma que se ubique en la esquina inferior derecha. No deje de acomodar el botn hasta que vea las guas de proximidad con el borde derecho e inferior. Eso garantiza las medidas estndar de una interfaz Windows.

12

19. Mueva btnAceptar de tal manera que se muestren las guas de proximidad, tanto con el borde inferior como con btnCancelar; adems deber buscarse que aparezca la gua de alineacin que garantice que el texto interno de los botones estn alineados en su lmite inferior.

370

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

20. Modifique las siguientes propiedades:


Propiedad btnAceptar.Text btnCancelar.Text frmEmpresa.CancelButton Valor a asignar &Aceptar &Cancelar btnCancelar

21. La propiedad Button.Text permite asignar el texto que aparecer en la cara del botn. Si se antepone el carcter & a una de las letras en Button.Text, automticamente se forma una tecla de atajo (shortcut); esto permite que oprimir la combinacin de teclas Alt-A equivalga a hacer clic en btnAceptar, y presionar Alt-C sea equivalente a hacer clic en btnCancelar. 22. La propiedad Form.AcceptButton permite definir a un botn existente en la interfaz como accin de aceptacin, por lo cual oprimir la tecla Intro equivale a hacer clic en el botn especificado. Por otro lado, Form.CancelButton permite definir a un botn existente en la interfaz como accin de cancelacin, por lo cual oprimir la tecla Esc equivale a hacer clic en btnCancelar. En nuestra interfaz se asigna btnCancelar como botn de cancelacin. 23. Nuestra interfaz debe lucir como sigue:

Cmo agregar imgenes a objetos Button


24. Asigne un valor a btnAceptar.Image; para ello haga clic en el botn de asistencia de introduccin de valores . Recuerde que todas las asignaciones de valores se realizan desde Properties (tecla F4). Aparecer la ventana Select Resource:

Captulo 12. Desarrollo de Aplicaciones Windows

371

25. El valor que ha de recibir btnAceptar.Image es de tipo Image, y no puede representarse mediante cdigo. Para ese tipo de valores y contenidos cada proyecto posee un archivo de recursos, de extensin .RESX; en ese archivo se almacenan diversos elementos externos que deseamos sean considerados como parte integral de la aplicacin. 26. Haga clic en Import..., y seleccione el archivo ok.png que se encuentra en el directorio de archivos complementarios del captulo. Haga clic nuevamente en Import... y seleccione el archivo Error.png. En la lista de recursos tendr entonces a Ok y Error. Seleccione Ok de la lista de recursos y acepte haciendo clic en el botn Ok. La imagen seleccionada aparecer en el centro del objeto. 27. Modifique btnCancelar.Image; seleccione el recurso Error de la lista de recursos cuando sta aparezca. Haga clic en Ok para aceptar. La imagen aparecer al centro del botn. 28. Como puede ver, las imgenes al centro de los botones no son las ms adecuadas. Modifique btnAceptar.ImageAlign asignando el valor MiddleLeft. Al hacer la modificacin aparecer una ayuda visual que indica la posicin en donde deseamos colocar la imagen.

12

372

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

29. Asigne tambin el valor de MiddleLeft a btnCancelar.ImageAlign. 30. La propiedad Button.Image representa la imagen que un botn presentar en su cara, mientras que Button.ImageAlign representa la posicin que la imagen ocupar en la cara del botn. 31. Nuestros botones deben lucir de la siguiente manera:

32. Como puede ver, los botones estn muy compactados, por lo que deber incrementar sus dimensiones utilizando los delimitadores de tamao. Incremente el tamao de btnAceptar hasta que el texto y la imagen se ajusten correctamente. Aunque la tentacin sea mucha, no modifique por el momento el tamao de btnCancelar.

FIGURA 12.8 Modificando dimensiones de botn

Opciones de formato para grupos de objetos


33. Un grupo de objetos es la seleccin de varios objetos en tiempo de diseo. Cuando se tiene un grupo de objetos en Properties aparecern slo las propiedades que son compartidas 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 objetos del grupo. 34. Al trabajar con un grupo de objetos, en todos ellos se colocarn delimitadores de tamao. Slo uno de ellos tendr los delimitadores de tamao 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 funcin a dicho objeto. Teniendo seleccionado 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 siguientes:

Captulo 12. Desarrollo de Aplicaciones Windows

373

Icono en barra de herramienta/Opcin de men

Accin

Format Align Lefts Format Align Centers Format Align Rights Format Align Tops Format Align Middles Format Align Bottoms Format Make same size - Width Format Make same size - Height Format Make same size - Both Format Horizontal spacing Make equal Format Horizontal spacing Increase Format Horizontal spacing Decrease Format Horizontal spacing Remove Format Vertical spacing Make equal Format Vertical spacing Increase Format Vertical spacing Decrease Format Vertical spacing Remove

Alinea todos los objetos del grupo con el borde izquierdo del objeto principal de referencia. Alinea todos los objetos del grupo con el eje central vertical del objeto principal de referencia. Alinea todos los objetos del grupo con el borde derecho del objeto principal de referencia. Alinea todos los objetos del grupo con el borde superior del objeto principal de referencia. Alinea todos los objetos del grupo con el eje central horizontal del objeto principal de referencia. Alinea todos los objetos del grupo con el borde inferior del objeto principal de referencia. Establece a los objetos del grupo con el mismo ancho que el objeto principal de referencia. Establece a los objetos del grupo con el mismo alto que el objeto principal de referencia. Establece a los objetos del grupo con el mismo tamao que el objeto principal de referencia. Establece una misma distancia entre los objetos, sobre el eje horizontal. Incrementa de forma proporcional la distancia entre los objetos, sobre el eje horizontal. Disminuye de forma proporcional la distancia entre los objetos, sobre el eje horizontal. Elimina la distancia entre los objetos, sobre el eje horizontal, dejndolos contiguos. Establece una misma distancia entre los objetos, sobre el eje vertical. Incrementa de forma proporcional la distancia entre los objetos, sobre el eje vertical. Disminuye de forma proporcional la distancia entre los objetos, sobre el eje vertical. Elimina la distancia entre los objetos, sobre el eje vertical, dejndolos contiguos.

12

374

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

36. Otras opciones de formato aplicables tanto para los objetos en grupo como para un objeto individual, son las siguientes:
Icono en barra de herramienta/Opcin de men Accin

Format Center in form Horizontally Format Center in form Vertically Format Order Bring to front Format Order Send to back

Centra los objetos respecto al ancho del formulario. Centra los objetos respecto al alto del formulario. Coloca el objeto al frente de los dems, de tal forma que tendr prioridad en la seleccin. Coloca el objeto atrs de los dems, dndoles menor prioridad de seleccin.

37. Trace un rectngulo imaginario que toque los dos botones del formulario.

38. Al soltar el ratn se habrn seleccionado los objetos en modo grupo.

39. El objeto primario de referencia es btnCancelar, dado que tiene delimitadores de tamao en color blanco. Haga, en btnAceptar, a fin de que se establezca como objeto primario de grupo. 40. Seleccione Format Make same size Both . Los botones asumirn el tamao del objeto principal de referencia, es decir, btnAceptar. 41. Apoyndose en las lneas gua, vuelva a distribuir los botones de tal manera que tengan una distribucin esttica. Nuestro formulario debe lucir como sigue:

Captulo 12. Desarrollo de Aplicaciones Windows

375

Cmo establecer pginas 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). FIGURA 12.9 TabControl.

12

376

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

44. Lo que se agrega a la interfaz es un objeto TabControl que contiene dos objetos TabPage; cada TabPage posee su pestaa de seleccin, 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 pestaas de seleccin de pgina, estaremos trabajando con el objeto TabControl en su calidad de contenedor de objetos TabPage. Por otro lado, si hacemos clic en la pestaa de algn TabPage y luego hacemos clic en el cuerpo de la pgina, estaremos trabajando con el objeto TabPage. 45. Haga clic en cualquiera de las pestaas de seleccin de pgina, a fin de seleccionar el TabControl. Cambie el nombre del objeto de TabControl1 a tcDatos. 46. TabControl proporciona herramientas a nivel objeto para la manipulacin de su comportamiento y apariencia (figura 12.09). A travs de los delimitadores de tamao es posible extender o contraer el control, simplemente arrastrando el delimitador en la direccin en que queremos que se expanda o contraiga. Tambin est el icono para mover el objeto de lugar, a travs del cual podemos arrastrar un control hacia otro sitio en la interfaz. Finalmente tenemos el icono de tareas de objeto (smart tag) que proporciona una liga rpida hacia las acciones ms comunes a realizar con el control, y adems permite la modificacin rpida de las propiedades ms comunes; si bien las acciones son generalmente posibles en el men de contexto, smart tag es ms especfico. 47. Haga clic en el smart tag del objeto y seleccione el vnculo Add Tab.

48. Se agregar un TabPage ms a tcDatos. En el plano subyacente, lo que ocurri es que se agreg un elemento ms a la coleccin TabPages. 49. Si seleccionamos la pestaa de un TabPage y luego hacemos clic en el rea del cuerpo del TabPage estaremos trabajando con la pgina. Seleccione la ficha TabPage1 y haga clic en el cuerpo de la pgina; en Properties cambie la propiedad Name, de TabPage1 a tpGenerales. Modifique tambin el nombre de TabPage2 por tpContacto, y el de TabPage3 por tpSitio. 50. Modifique las siguientes propiedades:
Propiedad tpGenerales.Text tpContacto.Text tpSitio.Text btnAceptar.Enabled Valor a asignar

Datos generales Persona de contacto Sitio en Internet False

Captulo 12. Desarrollo de Aplicaciones Windows

377

51. Seleccione tpGenerales y agregue 5 etiquetas (Label), 1 cuadro de texto con mscara (MaskedTextBox), 3 cuadros de texto (Textbox) y un objeto para seleccin de fecha (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 rpido: si al seleccionar un objeto su propiedad por omisin 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, automticamente se actualizar Text. Los controles se relacionan en orden de lectura de izquierda a derecha, de arriba abajo:
Propiedad Label1.Text MaskedTextBox1.Name mtbIDEmpresa.Mask Valor a asignar

12

ID Empresa: mtbIDEmpresa
, seleccionar <Custom> y escribir 9999999999 en Mask

378

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

FIGURA 12.10 Input Mask.

Propiedad Label1.Text Label2.Text TextBox1.Name txtNombre.CharacterCasing txtNombre.MaxLength Label3.Text TextBox2.Name txtDireccion.AcceptsReturn txtDireccion.MaxLength txtDireccion.Multiline

Valor a asignar

ID Empresa: Nombre: txtNombre Upper 40 Direccin: txtDireccion True 200 True (aumentar el alto del objeto, una vez modificada esta propiedad) NIP de acceso: txtNIP 10 * dtpClienteDesde

Label4.Text TextBox3.Name txtNIP.MaxLength txtNIP.PasswordChar DateTimePicker1.Name

Captulo 12. Desarrollo de Aplicaciones Windows

379

54. La interfaz debe lucir de la siguiente manera:

55. Las propiedades Text de los controles indican la parte textual visible de los objetos. La propiedad MaskedTextBox.Mask sirve para representar la mscara o patrn de entrada que aceptar el control; en nuestro caso, el nmero de empresa es un nmero de mximo diez posiciones, por lo que la mscara de entrada es 9999999999. La propiedad TextBox.CharacterCasing determina si el contenido del cuadro de texto ser convertido a minsculas, maysculas, o ser mixto; en nuestro caso pedimos que el nombre de la empresa est en maysculas. La propiedad TextBox.MaxLength permite especificar el nmero mximo de caracteres que podrn ser ingresados en el cuadro de texto. La propiedad TextBox.AcceptsReturn permite que se incluya Intro dentro del contenido, sin darle significado especial. La propiedad TextBox.MultiLine establece que el cuadro de texto puede incluir varias lneas de escritura; al establecer esta propiedad como True, automticamente aparecen delimitadores de tamao que permiten no slo incrementar el ancho del objeto, sino tambin el alto. La propiedad TextBox.PasswordChar permite establecer un smbolo a travs del cual lo que uno escribe en un cuadro de texto queda oculto a la vista. 56. Guarde todos los cambios realizados en su solucin e inicie la depuracin (oprima la tecla F5). Ejecute la aplicacin y verifique que en el ID de la empresa slo se puedan capturar nmeros, hasta un total de diez; que lo capturado en el nombre siempre est en mayscula, que en direccin se pueda capturar ms de una lnea; 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 antigedad del cliente. FIN DEL EJERCICIO*

12

380

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejercicio 12.3
Uso de grupos de controles, combos y selectores de nmero Aprender a utilizar grupos de controles, combos y selectores de nmeros en una interfaz Windows. 1. 2. 3. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Contine trabajando con el proyecto Empresa, iniciado en el ejercicio anterior. Seleccione tpContacto y agregue cuatro etiquetas (Label), un cuadro de texto (TextBox), un cuadro de texto con mscara (MaskedTextBox), un cuadro combinado (ComboBox), un selector de nmero (NumericUpDown) y un cuadro de grupo (GroupBox), dentro del cual se debern agregar en modo arrastre dos botones de opcin (RadioButton). Al seleccionar el cuadro de grupo y moverlo de lugar, los botones de radio debern moverse junto con l. Distribuya los objetos de la siguiente manera:

4.

5.

Modifique las siguientes propiedades:


Propiedad Label6.Text TextBox1.Name txtNombreCon.MaxLength Valor a asignar

Nombre: txtNombreCon 50

Captulo 12. Desarrollo de Aplicaciones Windows

381

txtNombreCon.CharacterCasing Label7.Text MaskedTextBox1.Name mtbTelefono.Mask Label8.Text ComboBox1.Name cboTitulo.Items

Upper Telfono: mtbTelefono 99 (99) 9999-9999 Ttulo: cboTitulo , y escribir las opciones del combo, una en cada lnea.

FIGURA 12.11 String Collection Editor.

12
Propiedad Label9.Text NumericUpDown1.Name nudSucursales.Maximum nudSucursales.Minimum GroupBox1.Text RadioButton1.Name rbtnMasculino.Checked rbtnmasculino.Text RadioButton2.Name rbtnFemenino.Text Valor a asignar

Sucursales: nudSucursales 50 1 Sexo rbtnMasculino True Masculino rbtnFemenino Femenino

382

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

6.

La interfaz debe lucir de la siguiente manera:

7.

8.

Las propiedades Text de los controles indican la parte textual visible de los controles. La propiedad NumericUpDown.Maximum sirve para indicar el nmero mximo hasta donde permitir el selector de nmeros llegar, mientras que NumericUpDown.Minimum determina el mnimo. 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 botn de opcin est seleccionado o no; slo puede haber un botn de opcin seleccionado en un grupo de controles a un tiempo. Guarde todos los cambios realizados en su solucin e inicie la depuracin (oprima la tecla F5). Ejecute la aplicacin y verifique que aparecen todos los elementos que haya agregado en String Collection Editor para el cuadro combinado; que los lmites mximos y mnimos del selector de nmeros se respete, y que al seleccionar un botn de opcin dentro de un grupo, los dems dejan de estar seleccionados.

FIN DEL EJERCICIO*

Ejercicio 12.4
Orden de tabulacin y activacin dinmica de controles Aprender a manipular la activacin dinmica de controles en una interfaz, dependiendo del cumplimiento de condiciones. Aprender tambin el manejo de la herramienta Tab Order.

Captulo 12. Desarrollo de Aplicaciones Windows

383

1. 2. 3.

4.

Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Contine trabajando con el proyecto Empresa, iniciado en el ejercicio 12.2. Seleccione tpSitio y agregue un objeto de casilla de verificacin (CheckBox), un cuadro de texto (TextBox), un botn de comando (Button), un control de navegacin en Internet (WebBrowser) y un control de ayuda fugaz (ToolTip). Este ltimo es invisible en tiempo de ejecucin, 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:

5.

Modifique las siguientes propiedades:


Propiedad CheckBox1.Name chkSitio.Text TextBox1.Name txtURL.Enabled Button1.Name btnVerSitio.Text btnVerSitio.Enable WebBrowser1.Name txtURL.ToolTip on ToolTip1 ToolTip1.ToolTipTitle Valor a asignar

12
chkSitio Tiene sitio Web? txtURL False btnVerSitio &Ver False webPagina Coloque aqu la ruta http del sitio Mensaje del sistema

384

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

6.

La interfaz debe lucir de la siguiente forma:

7.

Las propiedades Text de los controles indican la parte textual visible de los objetos. La propiedad ToolTip.ToolTipTitle sirve para especificar el ttulo de encabezado que aparecer con el mensaje de ayuda fugaz, que se especifica en la propiedad TextBox.ToolTip. La propiedad Control.Enabled de los controles indica si estn o no disponibles para su uso en tiempo de ejecucin, no obstante de que estn visibles.

Lanzamiento de tareas desde la barra de mens


8. Una de las tareas ms comunes en el desarrollo de interfases es la de limpiar los datos existentes en los campos para iniciar una nueva captura. En nuestro ejemplo, colquese en cualquier parte del formulario en tiempo de diseo, despliegue el men contextual y seleccione la opcin View Code para ver el cdigo del programa. Como no hemos codificado nada, aparecer la declaracin 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 declaracin de la clase). Codificacin de Empresas
1 2 3 4 5

Form1.vb - LimpiaCampos

Sub LimpiaCampos() Campos del primer TabPage mtbIDEmpresa.Text = txtNombre.Text = txtDireccion.Text =

Captulo 12. Desarrollo de Aplicaciones Windows

385

6 7 8 9 10 11 12 13 14 15 16 17 18 19

txtNIP.Text = Campos del segundo TabPage txtNombreCon.Text = mtbTelefono.Text = rbtnMasculino.Checked = True cboTitulo.SelectedIndex = 0 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 Form Designer y en tiempo de diseo seleccione la opcin Limpiar Campos, haciendo doble clic sobre la opcin. Aparecer nuevamente el cdigo, pero habr agregado un procedimiento de evento que se lanzar cuando el usuario seleccione la opcin en tiempo de ejecucin. El procedimiento se llama LimpiarCamposToolStripMenuItem_Click. En dicho procedimiento mande llamar el procedimiento LimpiaCampos, que acabamos de desarrollar.

Codificacin de Empresas
1 2 3

Form1.vb LimpiarCamposToolStripMenuItem_Click

12
Private Sub LimpiarCamposToolStripMenuItem_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LimpiarCamposToolStripMenuItem.Click Call LimpiaCampos() End Sub

11. Aunque la instruccin Call para mandar a ejecutar un procedimiento puede omitirse, se incluye para mejorar la claridad del cdigo. 12. Vaya a Form Designer y en tiempo de diseo seleccione la opcin Cerrar, haciendo doble clic sobre la opcin. Aparecer nuevamente el cdigo, que deber complementar de la siguiente manera:

386

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Codificacin de Empresas
1 2 3

Form1.vb CerrarToolStripMenuItem_Click

Private Sub CerrarToolStripMenuItem_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CerrarToolStripMenuItem.Click Me.Close() End Sub

13. Al aplicar el mtodo Close() sobre el formulario (que se reconoce a s mismo como Me), se cierra el formulario. 14. Guarde todos los cambios realizados en su solucin e inicie la depuracin (oprima la tecla F5). Ejecute la aplicacin, escriba en los campos textuales del formulario y seleccione la opcin de men Limpiar Campos. Luego compruebe que al utilizar la opcin de men Cerrar, el formulario se cierra. Con ello habr aprendido cmo enviar comandos a travs del men.

Procedimiento para el evento de arranque (Load)


15. Un formulario tiene un procedimiento de evento de arranque, denominado Load. El evento Form.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 gustara es que los campos estuvieran limpios antes de comenzar a trabajar con la interfaz. Para lograrlo podemos ejecutar el procedimiento LimpiaCampos en el procedimiento de evento de arranque. 16. Un evento por omisin (default event), es el procedimiento de evento ms comn para un determinado tipo de objeto; al estar en Form Designer y hacer doble clic sobre un determinado objeto, Visual Studio abrir Text Editor y preconstruir la estructura del procedimiento del evento por omisin. Cuando hacemos doble clic sobre un botn, por ejemplo, se precodificar el procedimiento de evento para el evento Button.Click, dado que Button.Click es el evento ms comn del tipo de objeto. 17. Para codificar el evento Form.Load de nuestro formulario bastar hacer doble clic en cualquier parte no ocupada dentro del formulario, dado que Form.Load es el evento por omisin de Form. Desde Form Designer, haga doble clic en cualquier parte no ocupada del formulario. 18. Aparecer la codificacin del procedimiento de evento frmEmpresa.Load. Edite el programa de tal manera que el procedimiento quede de la siguiente forma:

Captulo 12. Desarrollo de Aplicaciones Windows

387

Codificacin de Empresas
1 2 3 4 5

Form1.vb - frmEmpresa_Load

Private Sub frmEmpresa_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call LimpiaCampos() End Sub

19. De esta manera, antes de que el formulario se muestre por primera vez, ser ejecutado el procedimiento que iniciar los valores del formulario.

Uso de Tab Order para establecer el orden de tabulacin


20. El orden de tabulacin 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 tabulacin obedezca a la forma natural en que el usuario de la aplicacin est acostumbrado a ordenar los datos de entrada. En tiempo de diseo procuramos ser ordenados, pero no siempre podemos agregar los objetos en el orden de tabulacin que deseamos. Eso no nos debe preocupar, dado que es posible modificar el orden de tabulacin utilizando la propiedad Control.TabIndex de los objetos. 21. Otra opcin es hacer clic en el botn Tab Order de la barra de herramientas de formato en tiempo de diseo. Seleccione tpContacto y haga clic en el botn Tab Order. Aparecer una interfaz muy parecida a la siguiente: FIGURA 12.12 TabOrder.

12

388

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

22. Los nmeros que aparecen en los controles son los ndices de orden, e indican el orden y la profundidad del mismo. De acuerdo con la figura 12.12, el men es el punto de donde parte el orden de tabulacin (0), siguiendo el botn Aceptar (1), luego el botn Cancelar (2) y finalmente el TabControl (3). Como TabControl es contenedor, su contenido tendr un orden 3.x.y.z, donde x es el orden de las pginas, y es el orden de los controles dentro de la pgina, y z sera el orden de los controles dentro de un control contenedor dentro de la pgina. 23. Se recomienda que las etiquetas (Label) sean las primeras en el orden, dado que no reciben el enfoque. Despus debe darse el orden de acuerdo a como se desee el orden de tabulacin. Para modificar el orden slo 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 ratn sobre el control, aparece un borde sombreado 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.

24. Modifique el orden de tabulacin de tal manera que quede de la siguiente manera:

Captulo 12. Desarrollo de Aplicaciones Windows

389

25. Al terminar de colocar el orden deseado, basta hacer clic en el botn Tab Order nuevamente para dar por aceptados los cambios. Se recomienda aplicar el orden de tabulacin 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 diseo; se permitir slo la codificacin. Para bloquear los controles slo se tiene que seleccionar la opcin Format Lock Controls; aparecer un pequeo candado en la esquina superior izquierda de los controles, lo que indica que estn bloqueados.

Activacin dinmica de elementos


27. Una de las principales actividades preventivas que una interfaz puede realizar es no permitir la ejecucin de trabajos si los datos para un proceso no son completos y correctos. Una forma de hacerlo es que el botn de comando que ejecute el procesamiento 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 botn Aceptar los objetos siguientes tengan un valor: mtbIDEmpresa, txtNombre, txtDireccion, txtNIP, txtNombreCon, mtbTelefono. El valor de todos ellos est representado por la propiedad Text. 29. En Form Designer, despliegue el men contextual y seleccione View Code. En Text Editor codifique el siguiente procedimiento dentro de la clase: Codificacin de Empresas
1

12

Form1.vb - ActivaAceptar

2 3 4 5 6 7 8 9

Sub ActivaAceptar(ByVal sender As Object, ByVal e As EventArgs) Handles mtbIDEmpresa.LostFocus, txtNombre.LostFocus, txtDireccion.LostFocus, txtNIP.LostFocus, txtNombreCon.LostFocus, mtbTelefono.LostFocus If mtbIDEmpresa.Text = Or txtNombre.Text = _ Or txtDireccion.Text = Or txtNIP.Text = _ Or txtNombreCon.Text = Or mtbTelefono.Text = Then btnAceptar.Enabled = False Else btnAceptar.Enabled = True End If End Sub

390

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

30. En la lnea 1 del bloque anterior se declara el procedimiento. Despus del nombre del procedimiento (ActivaAceptar) se abren parntesis declarando dos argumentos. Estos argumentos se denominan argumentos implcitos, dado que CLR en tiempo de ejecucin provee los datos a los argumentos sin que el usuario tenga que enviarlos mediante una llamada Call. La mayora de los eventos manejados en .NET requieren de dos argumentos implcitos: sender, que puede ser cualquier tipo de objeto (Object) transferido en modo value type y que hace referencia al objeto desde el cual se desencadena el evento; y e que es de tipo EventArgs (manejador de argumentos de eventos), que tambin es pasado en modo value type. En la misma declaracin del procedimiento 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 cdigo no ver un llamado a ejecucin de ActivaAceptar; CLR lo lanzar a ejecucin y ser quien tambin le dir qu objeto es el que provoc, as como los argumentos pertinentes del evento. 31. En la lneas 2 a la 4 se evala si alguno de los objetos no ha sido capturado (Text=), en cuyo caso inhabilita el botn Aceptar. De lo contrario, es decir, si todos tienen valor, el botn Aceptar se habilita. 32. Otra activacin automtica que podemos hacer es que, en la tercera pgina, slo se pueda capturar informacin de URL y ver la pgina en Internet si la casilla de verificacin est marcada. En Form Designer haga doble clic en chkSitio. Se precodificar el procedimiento por omisin aplicable al cuadro de verificacin. Se trata del evento CheckBox.CheckedChanged, que se lanzar cuando se cambie el estado de marcado de la casilla de verificacin. Codifique lo siguiente:

Codificacin de Empresas
1 2 3 4

Form1.vb chkSitio_CheckedChanged

Private Sub chkSitio_CheckedChanged( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSitio.CheckedChanged txtURL.Enabled = chkSitio.Checked btnVerSitio.Enabled = chkSitio.Checked End Sub

33. Nos aprovechamos de que la propiedad que almacena si la casilla de verificacin est o no marcada es Boolean. Si la casilla de verificacin 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 verificacin, los objetos se activarn, y al desmarcarla se inhabilitarn (lneas 2 y 3).

Captulo 12. Desarrollo de Aplicaciones Windows

391

34. Guarde todos los cambios realizados en su solucin e inicie la depuracin (oprima la tecla F5). Ejecute la aplicacin y verifique que el botn Aceptar est disponible slo si todos los campos requeridos tienen datos. Verifique que el cuadro de verificacin gobierna la disponibilidad del cuadro de texto en el que se solicita el URL y el botn de ver sitio. FIN DEL EJERCICIO*

Ejercicio 12.5
Uso de controles para la visualizacin de pginas Web

Aprender a utilizar los controles para la visualizacin de contenidos Web desde formularios Windows. 1. 2. 3. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Contine 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 botn Ver. Codifique lo siguiente:

Codificacin de Empresas
1 2 3

Form1.vb - btnVerSitio_Click

12

Private Sub btnVerSitio_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerSitio.Click webPagina.Navigate(New Uri(txtURL.Text)) End Sub

4.

5.

La lnea 2 se encarga de ir, en el objeto WebBrowser, a la direccin 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 especificar recursos en Internet. Guarde todos los cambios realizados en su solucin e inicie la depuracin (oprima la tecla F5). Ejecute la aplicacin, active la casilla de verificacin que pregunta si tiene sitio Web, escriba como liga http://www.aprendapracticando.com y haga clic en Ver. La pgina debe aparecer en el formulario.

FIN DEL EJERCICIO*

392

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

MAPA

MENTAL DEL CAPTULO

Captulo 12. Desarrollo de Aplicaciones Windows

393

TERMINOLOGA
AcceptButton, 370 AcceptReturn, 378 Add, 361 BackgroundWorker, 358 Barra de herramientas, 357 BindingNavigator, 358 BindingSource, 358 Bloqueo de controles, 389 Boxing, 361 Button, 355 Call, 385 CancelButton, 370 CharacterCasing, 378 CheckBox, 355 CheckedListBox, 355 Child, 346 Close, 386 Coleccin, 361 ColorDialog, 360 ComboBox, 355 Common Controls, 355 Containers, 357 ContextMenuStrip, 357 Controles, 347 Controles comunes, 355 contenedores, 357 de impression, 359-60 de men, 357 Controls, 362 Count, 361 Cuadros de dilogo, 360 DataGridView, 358 DataSet, 358 DateTimePicker, 355 Default event, 386 Delimitadores de tamao, 372 Dialogs, 360 Directory Searcher, 359 DirectoryEntry, 358 Elemento de menu, 367 Elementos grficos de interfaz, 346 Enabled, 363 Enfoque, 363 Enter, 364 ErrorProvider, 359 Etiqueta de elemento, 368 EventLog, 359 Evento por omisin, 386 FileSystem Watcher, 359 FlowLayoutPanel, 357 Focus, 363 FolderBrowserDialog, 360 FontDialog, 360 For Each, 362 GotFocus, 364 Graphic User Interface, 344 GroupBox, 357 Grupo(s) de controles, 347 de objetos, 372 GUI, 344 Guas de alineacin, 369 de proximidad, 369 HelpProvider, 359 Image, 370 ImageAlign, 371 ImageList, 359 Input Mask, 378 Interfaz de usuario, 344 Interfaz grfica de usuario, 344 Item(s), 361, 381 Label, 356 Leave, 364 Lneas gua, 369 LinkLabel, 356 ListBox, 356 ListView, 356 Load, 386 Lock Controls, 389 LostFocus, 364 Mask, 377 MaskedTextBox, 356 MaxLength, 378 Menu item, 367 Mens, 357 MenuStrip, 357 MenuStrip, 366 MessageQueue, 359 Modo arrastre, 348 insercin, 348 trazo, 348 MonthCalendar, 356 Multiline, 378 NotifyIcon, 356 NumericUpDown, 356 Objeto contenedor, 346 hijo, 346 padre, 346 principal de referencia, 372 OpenFileDialog, 360 PageSetupDialog, 360 Pginas de controles, 375 Panel, 357 Parent, 346 PasswordChar, 378 Performance Counter, 359 PictureBox, 356 Pointer, 355 PrintDialog, 360 PrintDocument, 360 Printing, 359-60 PrintPreview Control, 360

12

394

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

PrintPreview Dialog, 360 Procedimiento de evento de arranque, 386 Process, 359 ProgressBar, 356 RadioButton, 356 Remove, 361 ReportViewer, 358 RESX, 371

RichTextBox, 356 SaveFileDialog, 360 SerialPort, 359 Service Controller, 359 Smart tag, 376 Snaplines, 369 SplitContainer, 357 StatusStrip, 357 TabControl, 357, 375

TabIndex, 363 TableLayoutPanel, 357 Tareas de objeto, 376 Tecla de atajo, 370 Text, 370 TextBox, 356 Timer, 359 Toolbars, 357 ToolStrip, 358

Container, 358 Designer, 366 ToolTipTitle, 383 ToolTrip, 356 TreeView, 356 Unboxing, 361 Uri, 391 Validated, 364 Validating, 364 Visible, 363 WebBrowser, 356

PREGUNTAS
12.1 Cul es el principal propsito de una interfaz? 12.2 Explique qu son los objetos contenedores y cundo se da una relacin padre-hijo entre objetos. 12.3 Cules 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.

Captulo 12. Desarrollo de Aplicaciones Windows

395

Notas:

12

396

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Elemento a travs del cual un programa recibe datos: a) Formulario b) Control c) Interfaz de usuario 2. Es un objeto que contiene a otros objetos: a) Formulario b) Objeto contenedor c) Objeto receptor 3. Las propiedades, mtodos 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 posicin y las dimensiones de los objetos: a) Insercin b) Arrastre c) Trazo

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. 7. 8. 9. 10. Los objetos no pueden anidarse. Los manejadores permiten asociar un procedimiento con un evento. En unboxing, un objeto pasa a ser un tipo de dato primitivo. Un grupo de controles puede tener slo objetos de un mismo tipo. La clase Object deriva de la clase Control.

CAPTULO

13

Desarrollo de aplicaciones Web con ASP.NET


Objetivos: Aprender la estructura general de una pgina 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 pgina Web ASP.NET para guardar compatibilidad con desarrollos pasados. 3. Identificar las directivas y conocer cmo se agregan a una pgina Web. 4. Aprender qu son los formularios del servidor y cmo se agregan a una pgina Web. 5. Conocer los controles del servidor, qu tipos hay y cmo se agregan a una pgina Web. 6. Aprender qu es el cdigo declarativo y cmo se agrega a una pgina Web.

397

398

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Motivos del auge de las aplicaciones Web . . . . . . . . . . . . . . . . . . . . . . . . . . . Requerimientos para el desarrollo de ASP.NET . . . . . . . . . . . . . . . . . . . . . . . Entorno operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Herramientas de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Procesamiento de pginas Web en .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . Caractersticas de ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Elementos de una pgina Web ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estructura bsica de una pgina ASP.NET . . . . . . . . . . . . . . . . . . . . . . . Contenido HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bloques proveedores de cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Directivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formulario del servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Controles del servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adicin de cdigo a una pgina: Cdigo declarativo . . . . . . . . . . . . . . Controles comunes en aplicaciones Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grupo de controles estndar (Standard) . . . . . . . . . . . . . . . . . . . . . . . . Grupo de controles de datos (Data) . . . . . . . . . . . . . . . . . . . . . . . . . . . Grupo de controles de validacin (Validation) . . . . . . . . . . . . . . . . . . . Grupo de controles de navegacin (Navigation) . . . . . . . . . . . . . . . . . Grupo de controles de acceso (Login) . . . . . . . . . . . . . . . . . . . . . . . . . . Grupo de controles HTML (HTML) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin de una pgina Web ASP.NET, prueba e identificacin de sus elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configuraciones iniciales del diseador de pginas Web para las vistas y el posicionamiento de controles . . Adicin de elementos a un sitio Web . . . . . . . . . . . . . . . Establecimiento de valores generales de formulario . . . Revisin del cdigo generado por el servidor . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 400 400 401 402 403 410 410 411 411 412 414 415 417 419 419 421 422 422 423 423 424 425 427 427 437 439 440 441 443

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

399

El tema de ASP.NET es suficientemente amplio para dedicarle un libro aparte. Dado que es una de las formas ms populares en que se consume cdigo en Visual Basic, este captulo se ocupa del tema desde la perspectiva ms amplia de la programacin orientada a objetos.

Motivos del auge de las aplicaciones Web


Quiz el futuro inmediato de las aplicaciones distribuidas est en el desarrollo de aplicaciones Web. Conforme la tecnologa de desarrollo Web avanza (y lo hace a pasos agigantados), las plataformas son cada vez ms sencillas, confiables, seguras y escalables. A continuacin se explican algunas de las principales razones por las cuales la Web se ha convertido en un campo fructfero para el desarrollo. Uso de Internet como red privada corporativa. A medida que los negocios se globalizan, la Internet cobra importancia como red privada corporativa. Dos son los detonadores: por un lado, las organizaciones requieren comunicar datos con sus socios comerciales; por otro, instalar redes privadas para hacerlo sera demasiado costoso, incluso ocioso, ya que no hay razones para intentar la instalacin de una red global nueva cuando ya existe una. Evolucin en la confiabilidad de la Web. Ciertamente, cada nueva alternativa tiene sus ventajas y desventajas. Tpicos como la seguridad en Internet, la disponibilidad de servicios de telecomunicaciones, la compatibilidad entre diversas plataformas operativas, la complejidad de la tcnica de desarrollo de aplicaciones Web, entre otros problemas, debern ser resueltos gradualmente. Afortunadamente, las nuevas tcnicas 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 ms sencillos, rpidos y estables. Posibilidad de desarrollo profesional. La evolucin de las operaciones de datos de los negocios nos llevar poco a poco hacia un esquema de aplicaciones que utilicen los servicios de Internet para la comunicacin de datos. Esto abre un campo inmenso para los servicios de desarrollo de aplicaciones basadas en la Web; en consecuencia, los desarrolladores debern buscar las herramientas que les permitan brindar soluciones estables, fciles de generar y con posibilidades de crecimiento. No ser extrao saber que programadores, desarrolladores grficos y administradores de bases de datos formen pequeas organizaciones dedicadas al desarrollo profesional de aplicaciones para su uso en la Web, con una cartera respetable de clientes ansiosos.

13

400

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Lo ms interesante de todo es que la comunidad de desarrolladores, a la vez que es proveedora de servicios, se convierte al mismo tiempo en promotora, generando un nicho econmico en el que es mejor estar dentro. Plataformas de desarrollo estandarizadas y disponibles. La nueva plataforma de desarrollo, Microsoft.NET, maximiza el uso de Internet como medio de comunicacin 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, consistencia y potencia. El respaldo de Microsoft hacia la tecnologa .NET Framework asegura la mxima penetracin de los productos en las organizaciones, lo cual permite generar un crculo virtuoso entre productos y servicios relacionados (market share). Esto promueve que cada vez ms empresas y desarrolladores la adopten como su plataforma de desarrollo y operacin, lo que gradualmente garantizar el mximo conocimiento sobre la tecnologa, servicios de desarrollo y consultora disponibles, as como precios justos de productos y servicios. Ese fenmeno ya se vivi con Visual Basic. Ahora es el turno de .NET. Antes de adentrarnos en la programacin de ASP.NET, es conveniente analizar de manera breve algunos conceptos de programacin Web.

Requerimientos para el desarrollo de ASP.NET


Los requerimientos para desarrollar con ASP.NET varan un poco respecto a los dems tipos de aplicaciones. stas son algunas de las particularidades del desarrollo en ASP.NET:

Entorno operativo
Motor de ejecucin Web. Es el que se encargar de recibir las peticiones de pginas y resolverlas, entrando en contacto con los componentes involucrados por la pgina 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 ejecucin Web se llama Internet Information Server, conocido tambin como IIS. Para verificar que IIS est disponible en su equipo, trate de desplegar la siguiente pgina:
http://localhost

Con ello deber aparecer la pgina de presentacin de IIS. Se recomienda ampliamente contar con la versin 5.5 o superior.

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

401

IIS slo 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, etcetra). No siempre se instala de manera predeterminada, y por ese motivo es necesario verificar la disponibilidad de IIS. En caso de que no lo tenga instalado, proceda a instalarlo; es indispensable. No olvide que deber tener instalado IIS y levantar los servicios Web antes de instalar .NET Framework SDK! Si instala .NET Framework SDK y luego instala y habilita IIS, las aplicaciones ASP.NET no funcionarn, dado que no hay manera que se registre la articulacin entre herramientas. Si ya instal .NET Framework SDK y despus instala IIS, ser necesario que establezca el registro de articulacin con la siguiente instruccin en lnea de comandos:
aspnet_regiis.exe -i

Privilegios de depuracin. Para depurar pginas en ASP.NET es necesario que la cuenta con la que est desarrollando pertenezca al grupo de usuarios de depuracin (Debugger Users). Los trabajos de depuracin sostienen un dilogo intenso con el sistema 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 cdigo ASP.NET es compilado al momento de realizar peticiones a pginas ASP.NET, y los ensamblados que se generan en el proceso son administrados y requieren de CLR para funcionar. Adems, los controles Web del servidor son clases de BCL (que debe estar presente en el entorno operativo del equipo de desarrollo).

Herramientas de desarrollo
Visual Studio. Definitivamente la mejor opcin para el desarrollo profesional de pginas ASP.NET es Visual Studio, que integra facilidades de diseo y depuracin de pginas Web. Aunque no es necesario para el desarrollo de pginas Web ASP.NET, s agiliza enormemente la labor de desarrollo. Visual Web Developer Express Edition. Es un entorno integrado de desarrollo de aplicaciones Web, para uso semiprofesional. Similar a Visual Studio, incluye diseadores y asistentes interesantes, pero es ms limitado respecto de la produccin de software y el trabajo en equipo.

13

402

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Procesamiento de pginas Web en .NET


Forma en que se resuelven las pginas ASP.NET

El hecho de que ASP sea .NET, pone de manifiesto que las pginas activas operan ahora 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 clsico (ASP antes de .NET) las pginas se resolvan de modo interpretado; es decir, cada vez que se solicitaba una pgina ASP al servidor, sta deba ser analizada, interpretada y transformada en cdigo HTML equivalente, el cual finalmente era remitido al cliente. En ASP.NET la forma de ejecucin es distinta, dado que trabaja bajo el modelo peticin - respuesta dinmico orientado a eventos, en donde hay contenidos que se resuelven en el servidor. Adems el cdigo remitido al cliente est preparado para la captura de eventos y la ejecucin automtica de procesos, sin necesidad de que el usuario haga peticiones explcitas. Al hacer la peticin, el servidor se percata de que la pgina requerida es ASP.NET (ASPX); la pgina, que es tratada como un programa, primeramente es procesada por un analizador de cdigo (Parser), que verifica que el programa est bien escrito y que no presente errores de sintaxis o referencias perdidas (uso de variables, procedimientos, o miembros inexistentes). Si el programa no tiene errores de sintaxis o referencias perdidas, el programa es puesto a disposicin del compilador de pginas de .NET Framework; el compilador se encargar de generar un ensamblado de extensin DLL, de nombre nico, que define una clase capaz de generar el cdigo 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 pginas. Ya que est generado el ensamblado capaz de producir el contenido Web que ha de ser devuelto al cliente, un elemento denominado HTTP Runtime se encarga de solicitar la ejecucin de la clase generada, para crear la instancia del objeto generador y producir el contenido Web. El contenido Web generado por la clase es almacenado en una rea denominada cach de salida (Output Cache); en ese espacio se almacenan los contenidos HTML, los guiones de ejecucin 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 pgina, se buscar primeramente en el cach de salida; si el contenido Web se encuentra todava ah, no se realizar procesamiento alguno, por lo cual la respuesta es extremadamente rpida.

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

403

En el peor de los casos, si el contenido Web no se encuentra en el cach, se producir la ejecucin de la clase crendose un nuevo contenido Web, lo cual de todas maneras es mucho ms rpido que utilizar cdigo interpretado. FIGURA 13.1 Procesamiento de pginas Web ASP.NET.

Caractersticas de ASP.NET
ASP.NET es la implementacin en plataforma Microsoft para aplicaciones bajo el modelo peticin-respuesta dinmica orientada a eventos. En s se trata de un modelo de servicios necesarios para construir aplicaciones empresariales en plataforma Web. Antes de ASP.NET contbamos con lo que ahora se ha dado en llamar ASP Clsico, que operaba bajo el modelo peticin-respuesta dinmico. Esta tecnologa est perdiendo vigencia rpidamente, ya que ASP.NET es ms potente, sencillo y organizado; en trminos generales, hay ciertas caractersticas de ASP.NET que lo estn convirtiendo rpidamente en el estndar para el desarrollo Web. Las caractersticas particulares ms relevantes de ASP.NET son las siguientes: Aceptacin de varios lenguajes Desempeo mejorado Cdigo compilado Manejo automtico de estado Cdigo separado del diseo (Code Behind)

13

404

Aprenda 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 Fcil configuracin Fcil implementacin (Copy Deployment) Personalizacin basada en Web Parts Recursos de personalizacin: Master pages, Skins y Themes

Aceptacin de varios lenguajes. ASP Clsico permita desarrollar en un solo lenguaje llamado cdigo ASP, que era ms bien un subconjunto de Visual Basic. Si usted tena experiencia en algn otro lenguaje, por ejemplo Java o C, de nada le serva. Era necesario que aprendiera cdigo 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 caractersticas que hacen de .NET la plataforma de desarrollo ms 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 pginas Web. Si es desarrollador 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 programacin Web puede hacerse bajo el enfoque orientado a objetos; el desarrollador usa etiquetas para controlar propiedades y desde el cdigo puede manejar eventos y ejecutar mtodos. Desempeo mejorado. En ASP Clsico, los bloques de cdigo de parte del servidor deban ser interpretados y ejecutados cada vez que se invocaba la pgina; la accin de interpretar el cdigo una y otra vez degradaba el desempeo de las aplicaciones. En ASP.NET el cdigo se compila hasta terminar siendo cdigo ejecutable para el servidor. Es interpretado una sola vez y a partir de ah, cada vez que ejecutemos la pgina Web invocaremos la versin interpretada y depurada de la pgina. El hecho de que ya no tengamos que interpretar cdigo de manera recurrente hace que las aplicaciones tengan un mejor desempeo; si adems consideramos que el cdigo compilado es ms rpido que el cdigo interpretado, la ventaja en velocidad es significativa. Cdigo compilado. En ASP Clsico los bloques de cdigo que el servidor resolva terminaban siendo cdigo interpretado; es decir, cada vez que se tena acceso a la pgina ASP,

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

405

IIS deba interpretar el cdigo, buscar errores de sintaxis, generar el cdigo HTML correspondiente y resolver la pgina. En el caso de ASP.NET, el cdigo se compila en el servidor. La primera vez que acceda a la pgina probablemente tarde un poco, pero a partir de ah el ensamblado que generar el cdigo HTML a remitir al navegador ya estar disponible en un rea de cach. En ese sentido, despus de la primera vez que se entra a una pgina, el servidor ya no resuelve nada, slo ejecuta el programa ya existente. En virtud de que el servidor mantiene el cach, no importa qu usuario haya llamado por primera vez la pgina; la versin compilada del cdigo estar disponible para todos los que la requieran posteriormente. Otra ventaja es que .NET Framework se encarga de realizar las compilaciones y ejecuciones cuando son necesarias de manera automtica; el desarrollador slo requiere intentar cargar la pgina en un navegador. .NET Framework decidir el tratamiento ptimo de la solicitud realizada. Al ejecutar una pgina ASP.NET se genera un ensamblado de extensin DLL que se alojar en el directorio \Bin del sitio, desde donde se consumir su funcionalidad. Manejo automtico del estado. En ASP Clsico mantener el estado de los formularios (Form-state) era un suplicio. Si se queran trasladar datos de una pgina a otra de manera confiable era necesario realizar una labor intensa que consista en declarar objetos ocultos (hidden objects), as como variables de sesin, que generalmente en un momento dado de la ejecucin perdan 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 admisin de cookies es una prctica comn. Ese hecho, obviamente, dejaba a la aplicacin sin una funcin completa. En ASP.NET, el estado de formulario se mantiene de manera automtica a travs de un objeto oculto y cifrado; las pginas ya no llaman a otras pginas para hacer un mismo proceso en partes. En lugar de ello, las pginas se mandan llamar a s mismas y realizan el traslado de datos de manera transparente para el usuario. Cdigo separado (Code Behind). En ASP Clsico, los programas eran una verdadera ensalada de tecnologas que confunda a los inexpertos y dificultaba el mantenimiento de los programas a los expertos. En un mismo programa era comn encontrar etiquetas HTML (lenguaje de marcas), llamadas a componentes (objetos COM), bloques de cdigo de parte del cliente codificados en VBScript, bloques de cdigo de parte del cliente codificados en JavaSctipt y bloques de cdigo de parte del servidor (cdigo ASP).

13

406

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

En ocasiones, los encargados del diseo de las pginas modificaban cdigo ASP o cdigo de los guiones; a su vez, los programadores de procedimientos modificaban la codificacin de diseo, etctera. En resumen, era un caos. Con ASP.NET el cdigo puede estar separado del diseo de la pgina (capacidad llamada Code Behind). En su totalidad, se trata de cdigo de parte del servidor, y las etiquetas HTML se reducen al mnimo. Como producto obtenemos programas ms limpios y estructurados. Tranquilamente se puede encargar a un grupo de diseo que trabaje sobre la forma de la pgina, mientras que los programadores podrn estar desarrollando procedimientos de manera independiente. Como en Visual Studio el cdigo se maneja en modo Code Behind, por cada aplicacin se tendr la pgina Web ASPX, que ser la pgina en donde se encuentren las etiquetas ASP.NET; por otro lado, se tendr un programa de extensin VB o CS (dependiendo el lenguaje que decidamos utilizar), en donde se encontrar la programacin de una clase que provee la funcionalidad de orientacin a eventos de la pgina. Al ejecutarse la pgina, la clase se compilar generando un ensamblado que despus se puede consumir. Uso de BCL. Con ASP Clsico era posible utilizar los componentes registrados en el servidor y, aunque se empleaba una buena cantidad de ellos, este uso era de alguna manera ajena al cdigo 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 precedentes a las aplicaciones Web. Como sabe, la biblioteca de clases de .NET Framework posee un gran nmero de clases disponibles para su uso en los programas; aunque probablemente no pueda utilizarlas todas en ambiente Web, la cantidad de elementos que puede utilizar es bastante amplia. Controles Web del Servidor. En ASP Clsico desarrollbamos con Front Page o con Visual InterDev; aunque dichas herramientas posean una caja de herramientas con controles, realmente se trataba de vnculos a generadores de cdigo que implementaban un determinado objeto utilizando cdigo HTML y DHTML. En ASP.NET se tienen verdaderos controles Web de parte del servidor. Al agregar un elemento grfico en Visual Studio se agregan etiquetas que sern resueltas en el servidor y se traducirn en objetos plenamente funcionales de parte del cliente, capaces de percibir eventos y realizar llamadas automticas al servidor. Otra ventaja de los controles Web del servidor es que son objetos de BCL que pueden ser identificados y utilizados de forma programtica. Independencia del navegador. En ASP Clsico terminbamos de codificar las pginas y las probbamos; cuando comprobbamos que todo funcionaba bien hacamos la publicacin. El problema surga cuando el usuario revisaba nuestras aplicaciones en un navegador

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

407

distinto al que nosotros utilizamos (por ejemplo, Netscape Navigator). La aplicacin perda la esttica y algunos elementos ya no funcionaban. El problema era que la funcionalidad de nuestras aplicaciones dependa del navegador; en un mundo de aplicaciones globales 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. Prcticamente 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 cdigo correspondiente. En otras palabras, las aplicaciones sern independientes de la plataforma que las lea. Servicios Web XML. En ASP Clsico no existan los servicios. Para poder distribuir funcionalidad era necesario desarrollar componentes, registrarlos en el servidor y esperar que no se dieran problemas tcnicos y de permisos para poder utilizarlos en aplicaciones Web desde estaciones remotas. Los componentes son paquetes binarios ejecutables, por lo cual no son afines a los firewalls y los servidores proxy; otro problema adicional: slo funcionan para la misma plataforma 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 estndar como SOAP (Simple Object Access Protocol) y XML (eXtensible Markup Language) para trabajar, por lo que permiten la interaccin con plataformas operativas distintas a Windows. Seguridad mejorada. De manera predeterminada, el ambiente Web proporciona acceso annimo a los sitios; no obstante ello, es posible que se desee restringir el acceso de alguna manera. En ASP Clsico slo se tena un tipo de seguridad: Autenticacin Windows. Bajo este esquema, el IIS poda ejecutar una validacin de seguridad, dando acceso de acuerdo con el sistema de usuarios y roles de usuarios de Windows. En ASP.NET, adems de la autenticacin Windows, se emplea la autenticacin de formularios, a travs de la cual usted puede restringir el acceso por medio de programacin. ASP.NET tambin proporciona seguridad mediante los servicios de Microsoft Passport, que es un servicio centralizado de autenticacin brindado por Microsoft. Adems, ASP.NET cuenta con un nuevo mecanismo, denominado membresa ASP.NET (ASP.NET membership), que es una funcionalidad interconstruida de ASP.NET que permi-

13

408

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

te crear y administrar un esquema de control de usuarios y puede ser utilizada a travs de controles de Login disponibles en Toolbox. Si se implementa el esquema basado en membresa ASP.NET, llevar a cabo las labores de registro de usuarios y cambios de contrasea, entre otras, ser tan sencillo como arrastrar y colocar. Mayor escalabilidad. En ASP Clsico los estados de las sesiones eran mantenidos en el mismo servidor en donde se encontraba el motor de ejecucin Web (IIS); esto provocaba que para poder utilizar informacin relativa a las sesiones era necesario invocarla en el mismo servidor. En caso de que se presentara un incremento en el trfico de transacciones, la nica opcin para manejarlas era incrementar la capacidad del servidor. Una de las consecuencias de esta situacin era la potencial sobrecarga del servidor, debido a que el procesamiento y el estado de sesiones no se podan distribuir. En ASP.NET el estado de las sesiones puede ser mantenido en un proceso separado, en una mquina o base de datos aparte, lo que permite la existencia de una sesin con servidores combinados (cross-server session). La ventaja de esto es que se pueden conectar servidores adicionales para absorber los incrementos de trfico de transacciones. Sesiones cookie-less. Algunas ocasiones, en ASP Clsico se desarrollaban aplicaciones que hacan uso de cookies; el problema sobrevena cuando el usuario inhabilitaba la capacidad 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 navegador para manejar Cookies est inhabilitada. A este funcionamiento se le ha dado el nombre de cookie-less. ASP.NET maneja de manera cifrada la informacin que se manejara a travs de Cookies (SessionID), trasladando los valores por medio del URL (Uniform Resource Locator). Fcil configuracin. Con ASP Clsico la configuracin de las aplicaciones era un poco oscura; era necesario conocer bien el ambiente de la aplicacin y Visual InterDev. Con ASP.NET la configuracin se mantiene en un archivo textual XML, llamado Web.config, que es entendible si se lo quiere leer. Fcil implementacin (Copy Deployment). Con ASP Clsico copiar una aplicacin Web a otro servidor requera precisin. Las razones eran simples: los archivos del sitio se encontraban en la carpeta del sitio, las libreras se encontraban en la carpeta \SYSTEM del sistema operativo, y se encontraban registradas en el Registro de Windows del equipo origen. Para migrar una aplicacin haba que estar seguro de copiar la carpeta de la aplicacin y adems verificar que todas las libreras de un equipo estuvieran debidamente copiadas y registradas en el equipo destino. Lo peor de todo, si la aplicacin requera una librera que

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

409

no estaba registrada en el servidor destino, era necesario dar de baja el servidor Web para poder integrar la nueva librera; este escenario es el peor de todos para las aplicaciones que requieren la mxima disponibilidad. Con ASP.NET todos los archivos que una aplicacin necesita se encuentran en la carpeta del sitio. Para copiar un sitio a otro servidor basta con copiar la carpeta del sitio en su totalidad. A este tipo de implementacin se le ha dado el nombre de Copy Deployment. Recursos de personalizacin: Master pages, Skins y Themes. En ASP.NET se pueden utilizar recursos adicionales para la personalizacin y estandarizacin de los sitios desarrollados. Las pginas maestras (master pages) son pginas generales que definen la apariencia, el comportamiento y el enfoque del sitio en general. Las variaciones se manejan a travs de pginas de contenido (content pages). Para definir este tipo de pginas es necesario crear una pgina de extensin .master que contendr una apariencia predefinida (layout) compuesta en HTML y controles Web del servidor; esta pgina contendr, en lugar de directivas @ Page, una directiva @ Master. Una pgina maestra puede tener dos o ms controles delimitadores de contenido (ContentPlaceHolder), que no son otra cosa que regiones en la pgina Web en donde se pueden integrar elementos de contenido. Las pginas de contenido dispondrn de la directiva @ Page, en donde el argumento MasterPageFile permite el enlace con la pgina maestra; en la pgina de contenido se agregan controles de contenido que permiten especificar el ContentPlaceHolder en donde el contenido ha de integrarse. En tiempo de ejecucin, las pginas maestra y de contenido se enlazan para producir un resultado coherente y estandarizado. Las pginas de apariencia (skins) son archivos con extensin .skin que definen las propiedades de apariencia para las pginas ASP.NET; junto con las pginas de cascadas de estilos (.CSS) determinan el look de las pginas Web. Se definen escribiendo una pgina 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 utilizarn ms 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 imgenes, cdigo de parte del cliente (scripting) y sonido, que se pueden integrar a un sitio Web para darle mayor calidad. Personalizacin de la interfaz: Web Parts. En ASP.NET es posible dividir el contenido de una pgina en partes autnomas, denominadas Web Parts, que el usuario puede personalizar. Con base en las Web parts es posible reubicar contenido en la pgina, ocultar o mostrar partes, e incluso modificarlas dinmicamente respecto de su contenido.

13

410

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Elementos de una pgina Web ASP.NET


En muchos sentidos, una pgina Web desarrollada en ASP.NET es una pgina comn que, al ser invocada en el servidor, ser interpretada y ejecutada por el motor de ejecucin Web (IIS) y por .NET Framework. Las pginas Web desarrolladas en ASP.NET tienen la extensin ASPX, y son archivos de cdigo 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 trmino pginas Web se refiere a a pginas Web ASP.NET con extensin ASPX. Al invocar una pgina ASP.NET, el servidor resuelve los elementos que componen la pgina en sus equivalentes funcionales codificados en HTML, VBScript y JScript. Ya que la pgina ha sido resuelta se enva al cliente que la solicit.

Estructura bsica de una pgina ASP.NET


Inicialmente, es exactamente igual que una pgina Web HTML:
<html> <head> </head> <body> </body> </html>

A medida que introducimos elementos en el rea de encabezado y el cuerpo de la pgina (que sern resueltos en el servidor), la pgina comienza a ponerse interesante. En una pgina ASPX podemos incluir lo siguiente: Contenido HTML Bloques proveedores de cdigo Directivas Formulario del servidor Controles del servidor Controles Web (Web Controls) Controles HTML (HTML Controls) Controles de validacin (Input Validation Controls) Rich Controls Cdigo declarativo

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

411

Contenido HTML
Las pginas ASP.NET tienen las capacidades anteriores de ASP Clsico; en ese sentido, siguen aceptando contenido HTML . Tan es as que la pgina bsica contiene las etiquetas de estructura bsicas HTML. Una diferencia importante es que las pginas ASP.NET son rigurosas en el manejo de etiquetas, pues cuidan que cada una de ellas se abra y cierre debidamente, adems de que su sintaxis sea correcta en estricto sentido. Anteriormente, las pginas equivocadas simplemente no funcionaban como deban; en ASP.NET, no slo no funcionarn, sino que marcarn error. Por contenido HTML nos referimos a etiquetas HTML, manejo de estilos, bloques de cdigo de parte del cliente, declaracin de objetos COM, etctera. Esto implica que sus pginas funcionarn como funcionaban antes. En caso de que utilicen componentes COM, stos no necesariamente tendrn que ser codificados y compilados en su forma equivalente para .NET. En ese sentido, la inversin realizada en componentes y codificacin se mantiene.

Bloques proveedores de cdigo


Los bloques proveedores de cdigo son los que el motor de ejecucin Web (IIS) convierte a su equivalente en HTML. Son el equivalente a los bloques de cdigo que se utilizaban en ASP Clsico, delimitados entre <% y %>. Un ejemplo de este tipo de contenido sera el siguiente:
<% Dim Hora As Integer Hora = hour(Now) if Hora > 12 and Hora < 20 then Response.Write(Buenas tardes) else if Hora > 20 then Response.Write(Buenas noches) else Response.Write(Buenos das) end if end if %>

13

En este ejemplo, el servidor dar un saludo (Buenos das, Buenas tardes, Buenas noches), considerando la fecha y hora del servidor (no la fecha y hora de parte del cliente). Todo este cdigo deriva en el saludo apropiado segn la hora del servidor.

412

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

NOTA
Tanto el contenido HTML como los bloques proveedores de cdigo se mantienen por compatibilidad con los desarrollos pasados. En ASP.NET es deseable utilizarlos lo menos posible, a fin de darle mayor simplicidad y funcionalidad a los desarrollos.

Directivas
Las directivas son especificaciones de valores que utiliza la pgina y los compiladores de controles de usuario al procesar pginas Web en ASP.NET. Para declararlas se utiliza la siguiente sintaxis, que se coloca al inicio de la pgina Web:
<%@ NombreDirectiva [ Atributos ] %>

Donde NombreDirectiva es el nombre de la directiva que se desea incluir y Atributos son los atributos y sus valores, expresados en pares igualados (propiedad = valor); los atributos se separan entre s por espacios en blanco. Las directivas ms importantes son las siguientes: @Page. Define atributos especficos de pgina utilizados por el analizador sintctico y el compilador de pginas ASP.NET. Puede incluirse slo en archivos .ASPX (formularios Web de ASP.NET). @Control. Define atributos especficos de control utilizados por el analizador sintctico y el compilador de pginas ASP.NET. Slo puede incluirse en archivos .ASCX (controles de usuario de ASP.NET). @Assembly. Vincula un ensamblado de forma declarativa con la pgina o el control de usuario actual. @Implements. Indica de forma declarativa que una pgina o un control de usuario implementa una interfaz .NET Framework especificada. @Import. Importa explcitamente un espacio de nombres en una pgina o un control de usuario. @OutputCache. Controla de forma declarativa la normativa de cach de resultados de una pgina o control de usuario. @Reference. Vincula de forma declarativa una pgina o un control de usuario a la pgina o control de usuario actual. @Register. Asocia alias a nombres de espacios de nombres y clases, que permiten la representacin de controles de usuario y controles de servidor personalizados cuando se incluyen en una pgina o un control de usuario solicitados.

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

413

Una de las directivas de ms tilidad es la directiva @Page. Algunos atributos importantes de esta directiva son los siguientes. AutoEventWireUp. (Boolean). Indica si los eventos de la pgina estn interconectados de manera automtica (True indica que la conexin est habilitada). Los eventos producidos por los controles Web trabajan de manera diferente a los eventos en los formularios de cliente tradicionales o en aplicaciones Web basadas en cliente. La diferencia se basa principalmente en la separacin existente entre el propio evento y el lugar donde ste se controla. En las aplicaciones basadas en cliente (Windows o ASP Clsico), los eventos se producen y controlan en el cliente; en las pginas ASP.NET, los eventos se producen en el cliente, pero son controlados en el servidor. Buffer. (Boolean). Determina si el bfer de respuestas HTTP est habilitado. CodeBehind. (String). Especifica el nombre del archivo que contiene el cdigo asociado a la pgina. Este cdigo ser un programa que contendr una clase que le dar comportamiento a la pgina Web; de esta forma puede separarse el cdigo de la interfaz. El diseador de formularios de Visual Studio .NET usa este atributo al desarrollar una pgina Web utilizando dicha herramienta. CompilerOptions. (String). Cadena que contiene opciones del compilador para compilar la pgina; se trata de la secuencia de modificadores que utilizaramos al compilar desde lnea de comandos. Debug. (Boolean). Indica si la pgina se debe compilar con smbolos de depuracin o no. En ocasiones slo se obtiene informacin relevante a los errores aplicando este atributo. Por omisin tiene el valor False. EnableViewState. (Boolean). Indica si se mantiene el estado entre solicitudes de pgina de manera automtica. Si el valor es True, el estado entre las pginas se manejar a travs del objeto oculto _VIEWSTATE. ErrorPage. (String). Define una direccin URL de destino para la redireccin cuando se produce una excepcin de pgina no controlada. Inherits. (String). Define la clase de cdigo en segundo plano que hereda la pgina. sta puede ser cualquier clase derivada de la clase Page. Language. (String). Especifica el lenguaje utilizado cuando se compilan todos los bloques de procesamiento en lnea (<% %> y <%= %>) y de declaraciones de cdigo dentro de la pgina. Los valores pueden representar cualquier lenguaje compatible con .NET, incluidos Visual Basic (vb), C# (C#) o JScript .NET. Otra de las directivas tiles es la directiva @Import, que permite importar espacios de nombres para nuestras pginas. Veamos ejemplos del uso de @Page y @Import.

13

414

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Para determinar a Visual Basic como el lenguaje para la codificacin de cdigo declarativo:
<%@ Page Language=vb %>

Para, adems, especificar la depuracin avanzada:


<%@ Page Language=vb Debug=True %>

Para determinar el programa MiCodigo.vb como repositorio de nuestro cdigo:


<%@ Page Language=vb CodeBehind=MiCodigo.vb %>

Para importar el espacio de nombres que se requiere para trabajar con datos:
<%@ Import Namespace=System.Data %>

Formulario del servidor


En ASP Clsico incluamos los objetos para introduccin de datos en una etiqueta Form. Los objetos estaban codificados mediante etiquetas HTML que eran resueltas por el cliente; al remitir la informacin (submit), sta se trasladaba a la pgina que la utilizara. En ASP.NET la cosa cambia. Ahora los objetos para introduccin de datos no los codifica el desarrollador nosotros; realmente los genera IIS con la ayuda de .NET Framework, al resolver controles de ASP.NET. Como los objetos son generados de parte del servidor y no del cliente, el formulario de parte del cliente no es relevante; es necesario contar con un formulario que maneje los objetos de parte del servidor. Para que los controles de ASP.NET que introduzcamos en una pgina puedan utilizarse, es necesario que se encuentren en lo que se conoce como formulario del servidor, que consiste en un bloque Form con la especificacin runat=server, como todo en ASP.NET. El bloque, en su forma primitiva, luce de la siguiente forma:
<Form id=Forma runat=server> <! Controles web del servidor aqu > </Form>

Ya que contamos con un formulario del servidor, podemos colocar diversos objetos dentro de l. Un formulario del servidor permitir especificar controles Web del servidor, de tal manera que puedan ser procesados por .NET Framework en el servidor. A una pgina de extensin ASPX que contiene un formulario del servidor dentro del cual se definen diversos controles del servidor, se le conoce como Web Form.

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

415

Controles del servidor


Los controles del servidor son instrumentaciones de funcionalidad basada en etiquetas, a travs de las cuales se le ordena al motor Web y a .NET Framework que construyan contenido HTML dinmico, sensible a eventos y aplicable a un navegador dado. Los controles del servidor se invocan en las pginas Web a travs de etiquetas y pueden ser de los siguientes tipos bsicos: Controles Web del Servidor (Web Controls). Llamados tambin intrnsecos; son los que poseen la mxima funcionalidad brindada por ASP.NET para la construccin de cdigo HTML dinmico, sensible a eventos. Controles HTML del Servidor (HTML Controls). Constituyen aquellos cuyo nico propsito es generar una equivalencia estndar de cdigo HTML, en el servidor. Controles de validacin (Input Validation Controls). Son una forma de control Web complementario, que tiene como objeto validar la entrada de datos en otro control que consume sus servicios. Rich Controls. Representan una forma de control Web de alta funcionalidad y complejidad, que pueden incluso estar conformados por varias etiquetas. Este es el caso del control Calendar. Los controles Web tienen comportamiento interconstruido (built-in), lo que significa que poseen sus propios mtodos, propiedades y eventos, mismos que se pueden utilizar en programacin orientada a objetos en la codificacin de las pginas. Las propiedades, mtodos y eventos de todos los controles son estndar, por lo que aprender a manejar un control equivale conocer el manejo de casi todos. A continuacin se ver cmo se integra cada uno de estos controles. Integrando un control Web (Web Control). La sintaxis que deber reunir la etiqueta que llame a un control Web del servidor es la siguiente:
<asp:NombreControl id=NombreObjeto [propiedades] runat=server />

13

En tal declaracin encontramos los siguientes elementos:

Seleccin del control. Se deber abrir la etiqueta normal. En el caso de los controles Web y los controles de validacin, deber agregarse la especificacin asp:; de esta

416

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Web.UI.WebControls.

forma, el analizador de la pgina asociar la etiqueta con el espacio de nombre System. Posteriormente se agrega el nombre del control del servidor que se desea utilizar. En el ejemplo, NombreControl es el nombre del control del servidor que se desea invocar. Es necesario especificar qu control del servidor es el que queremos que el servidor resuelva. Identidad del objeto. Se deber identificar a cada uno de los controles, a fin de que sean utilizables de manera programtica; esto se logra a travs de la propiedad Id, a la cual se le asigna un nombre vlido de objeto (NombreObjeto). No se admiten espacios en blanco y caracteres especiales; por regla general, inicie los nombres con una letra o un guin bajo. Propiedades. Se podrn asignar a un control del servidor diversas propiedades (propiedades), colocando el nombre de la propiedad y su valor, en pares igualados (propiedad = valor); las propiedades se separarn entre s por espacios en blanco. Referencia de ejecucin en el servidor. Es muy importante que al final se incluya la referencia runat=server, ya que de otra manera el servidor no se dar por enterado de la existencia de la etiqueta, tratar de resolverla de parte del cliente, sin ningn efecto. Cerrado de la etiqueta. Se puede cerrar la etiqueta de un control del servidor aplicando el cerrado estilo XML (/>), en el caso de los controles Web y de los controles de validacin, y utilizando cerrado tipo HTML (>) en el caso de los controles HTML, siempre y cuando la etiqueta no vaya seguida por contenido. Para aquellas etiquetas que afectan un contenido determinado, es decir, que tienen una etiqueta de inicio y una etiqueta de conclusin, y donde todo lo que est entre ambas se ve afectado por ellas, se deber aplicar el cerrado estilo HTML (</etiqueta>).

Slo siguiendo la sintaxis correcta las etiquetas sern reconocidas como controles. El siguiente ejemplo muestra cmo sera utilizar un control Web para la creacin de un cuadro de texto:
asp:TextBox id=Entrada runat=server />

Integracin de un control HTML (HTML Control). Integrar un control HTML del servidor es muy similar a integrar una etiqueta HTML; la nica variacin es que debe agregarse la especificacin runat=server dentro de la etiqueta. Se agrega dicha especificacin para garantizar que el servidor IIS, en conjunto con .NET Framework, se encargue de producir el equivalente HTML funcional para todos los navegadores. Si desarrolla ASP.NET y prueba usando Internet Explorer no notar beneficio, pero si desea que sus aplicaciones sean globales y funcionales en muchos navegadores, el uso de controles HTML es casi obligado.

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

417

El siguiente ejemplo muestra cmo sera utilizar un control HTML para la creacin de un vnculo (Link/Anchor):
<a id=MiLiga href=http://www.aprendapracticando.com runat=server> Ir al sitio Aprenda Practicando </a>

Esta liga generara un vnculo especfico hacia la pgina determinada para el navegador que hizo la peticin.
Integrando un control de validacin (Input Validation Control). Un control de validacin es un tipo especializado de control Web; la diferencia con un control Web es que los de validacin siempre se subordinan a un control Web definido previamente. Un control de validacin generalmente cuenta con una propiedad llamada ControlToValidate, que contiene el nombre del control que es validado a travs del control de validacin.

Este tipo de control provoca la generacin de etiquetas HTML y scripts en JScript y VBScript, que se encargarn de garantizar, de parte del cliente, que la entrada de datos sea vlida. El siguiente ejemplo muestra cmo se generara un control de validacin, que no permitiera omitir el valor del objeto al que llamamos Entrada:
<asp:TextBox ID=txtEntrada Runat=server /> <asp:RequiredFieldValidator ID=ValidadorTexto ControlToValidate=txtEntrada ErrorMessage=No se puede omitir el dato Display=dynamic Runat=server/>

13

Adicin de cdigo a una pgina: Cdigo declarativo


Una de las ventajas de ASP.NET es que separa el cdigo de las etiquetas de la pgina Web, de tal forma que procesamiento y diseo esttico se complementan pero no se revuelven. Esto permite una forma ms estructurada de programacin. Lo ideal es que el cdigo se encuentre en un archivo independiente, y que slo sea referido a travs de directivas. A esta capacidad se le llama cdigo separado (code behind, aunque la traduccin literal no sea exacta).

418

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Las pginas no siempre funcionan con cdigo separado. En este caso, los bloques de cdigo estn inmersos en la misma pgina Web. En ASP.NET el ideal es que los procedimientos estn claramente diferenciados, a fin de que el cdigo no pase de porciones ejecutadas por el cliente a porciones ejecutadas por el servidor. Se le llama cdigo declarativo al cdigo que se declara en una pgina ASP.NET definiendo scripts que se ejecutan de parte del servidor. Los scripts se definen en el rea de encabezado de la pgina, utilizando para ello la etiqueta script, que ser interpretada y ejecutada de parte del servidor; dentro del script podrn definirse procedimientos en el lenguaje que se haya seleccionado (VB.NET o C#, por ejemplo). La sintaxis para definir cdigo declarativo es la siguiente:
<Script runat=server> </Script>

La forma de los procedimientos de cdigo declarativo depender de los controles Web que se estn utilizando. Generalmente, la estructura de los procedimientos ser muy similar a la que tienen los procedimientos de eventos en Visual Basic (Sub End Sub); los argumentos implcitos corresponden generalmente al objeto que produce el evento (sender As Object), as como a un manejador de eventos (e As EventArgs). Obviamente, dependiendo del objeto y el evento que se provoca el manejador de eventos puede cambiar. ste sera un ejemplo tpico de un procedimiento de cdigo declarativo, que ocurre al hacer clic (evento Click) en un botn:
Sub Aceptar_Click(sender As Object, e As EventArgs) Cdigo a ejecutar End Sub

En la mayora de los casos es necesario especificar qu procedimiento es el que se utilizar para manejar un determinado evento; esto se realiza generalmente utilizando las propiedades On...; en el caso de nuestro ejemplo, como se est capturando el evento Click, se utilizara una propiedad llamada OnClick en la definicin del objeto que provoca el evento.
<asp:Button ID=Aceptar OnClick=Aceptar_Click Text=Haz clic Runat=server />

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

419

Controles comunes en aplicaciones Web


Al igual que las aplicaciones Windows, Visual Studio provee de muchos controles para el diseo de pginas Web. En Toolbox los grupos ms importantes de desarrollo Web son los siguientes:

Grupo de controles estndar (Standard)


Expone los controles generales de interfaz de usuario de una aplicacin Web.
Control Nombre Label Uso

Representa una etiqueta para el mostrado de datos. Representa un cuadro de texto para introduccin de datos. Representa un botn de comando que ejecuta un procedimiento. Representa un botn con estilo de vnculo. Representa una imagen que ejecuta un procedimiento al hacer clic en ella. Representa un vnculo hacia un recurso Web. Representa un cuadro combinado para la seleccin de opciones. Representa una lista de opciones de seleccin. Representa una casilla de verificacin. Representa una lista de opciones en donde cada una de ellas es una casilla de verificacin. Representa un botn de opcin. Representa una lista de botones de opcin. Representa una imagen.

TextBox

Button

LinkButton

ImageButton

HyperLink

DropDownList

ListBox

13

CheckBox CheckBoxList

RadioButton RadioButtonList Image

420

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

ImageMap

Representa una imagen con regiones sensibles. Representa una tabla de contenido (filas/columnas). Representa una lista de vietas. Representa un campo oculto. Representa un espacio esttico para texto en una pgina. Representa un calendario de seleccin dinmica de fecha. Representa un control para el desplegado aleatorio de contenido (publicidad en banners). Representa un cuadro de texto y un botn que permiten cargar un archivo al servidor. Representa controles de navegacin entre varias pginas. Representa un documento XML. Representa un contenedor de objetos View. Representa un contenedor de controles Web. Representa un almacn de controles que pueden ser integrados de forma dinmica a una interfaz. Representa un contenedor de controles Web que forman parte de un contenedor MultiView. Representa una seccin de la pgina cuyo contenido puede ser reemplazado dinmicamente. Representa un espacio reservado para desplegar texto esttico.

Table

BulletedList HiddenField Literal

Calendar

AdRotator

FileUpload

Wizard

Xml MultiView

Panel

PlaceHolder

View

Substitution

Localize

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

421

Grupo de controles de datos (Data)


Expone los controles a travs de los cuales se puede interactuar con bases de datos. A travs de estos controles se puede disponer del modelo de objeto ADO.NET desde la Web.
Control Nombre GridView Uso

Representa una rejilla de datos, donde mediante un patrn bidimensional lnea-columna, se representa el contenido de un origen de datos. Representa un control enlazado de datos (data bound control) que despliega los elementos con base en una plantilla. Representa los valores de un solo registro, tomado de un origen de datos. Representa los valores de un solo registro, tomado de un origen de datos, atendiendo a una plantilla definida por el usuario. Este objeto permite la adicin, borrado o edicin de registros. Representa un control enlazado de datos que permite dar un formato basado en plantillas a cada elemento del conjunto de registros proporcionados por el origen. Representa una conexin de enlace para bases en SQL Server. Representa una conexin de enlace para bases en Access. Representa un objeto de negocios que provee los datos a los controles enlazados, en una aplicacin multicapa. Representa un origen de datos XML para controles enlazados. Representa un origen de datos til para el enlazado con los datos de la estructura jerrquica de un mapa de sitio.

DataList

DetailsView

FormView

Repeater

SqlDataSource

AccessDataSource

13

ObjectDataSource

XmlDataSource

SiteMapDataSource

422

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Grupo de controles de validacin (Validation)


Expone los controles que ayudan a garantizar que los datos introducidos en la interfaz de usuario sean correctos y estn completos.
Control Nombre RequiredFieldValidator Uso

Representa un validador para la no omisin de un dato. Representa un validador que comprueba que un valor se encuentre dentro de un intervalo. Representa un validador que comprueba que un valor obedezca a una mscara de expresin regular. Representa un validador que verifica un valor comparativamente con otro valor o con un tipo de dato. Representa un validador persona lizado que acta tanto de parte del cliente como del servidor. Representa un resumen de los resultados de las validaciones de una interfaz.

RangeValidator

Regular ExpressionValidator

CompareValidator

CustomValidator

ValidationSummary

Grupo de controles de navegacin (Navigation)


Expone los controles que permiten la navegacin entre datos y pginas Web, necesarios para dar forma a un mapa de sitio.
Control Nombre SiteMapPath Uso

Representa un conjunto de hipervnculos e imgenes que permiten la navegacin entre las pginas del sito, con el mnimo consumo de espacio de trabajo en la pantalla. Representa un men en una pgina Web. Representa un rbol jerrquico de datos.

Menu TreeView

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

423

Grupo de controles de acceso (Login)


Permiten la implementacin visual de los elementos de autenticacin y autorizacin incluidos en ASP.NET Membership.
Control Nombre Login Uso

Representa una interfaz preconstruida que permite la autenticacin de usuarios. Representa la visualizacin de la informacin de usuarios registrados y usuarios annimos. Representa la interfaz para recuperacin de contrasea, utilizando el correo electrnico proporcionado al momento del registro del usuario. Representa un control informativo que indica el estado de un usuario registrado, proporcionando medios para el ingreso (LogIn) y la salida (LogOut). Representa un control informativo que muestra el nombre del usuario actual. Representa la recoleccin de informacin de usuarios nuevos. Representa la interfaz a travs de la cual los usuarios registrados pueden cambiar su contrasea.

LoginView

PasswordRecovery

LoginStatus

LoginName

CreateUserWizard

ChangePassword

13

Grupo de controles HTML (HTML)


Contiene los controles HTML del servidor.
Control Nombre Login Uso

Representa una interfaz preconstruida que permite la autenticacin de usuarios. Representa un botn de comando.

Input (Button)

424

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Input (Reset)

Representa un botn de comando de tipo Reset. Representa un botn de comando de tipo submit, que provoca una peticin al servidor. Representa un cuadro de texto. Representa un cuadro de texto para seleccin de un archivo. Representa un cuadro de texto con entrada oculta. Representa una casilla de verificacin. Representa un botn de opcin. Representa un control oculto. Representa un cuadro de texto multilnea. Representa una tabla. Representa una imagen. Representa un cuadro combinado. Representa una lnea horizontal. Representa un espacio de contenido que es reservado en el espacio de trabajo.

Input (Submit)

Input (Text) Input (File)

Input (Password) Input (Checkbox) Input (Radio) Input (Hidden) Textarea Table Image Select Horizontal Rule Div

Ejercicio 13.1
Creacin de una pgina Web ASP.NET, prueba e identificacin de sus elementos Desarrollar una aplicacin Web que solicita datos generales de los usuarios de un servicio en Internet. Se pregunta el nombre de una persona, su correo electrnico y su edad. La edad deber estar entre 0 y 100 aos. Tambin preguntar la fecha en que utiliz el sistema por primera vez. Los datos no pueden omitirse, el correo electrnico debe tener un formato de correo electrnico, y debido a que el negocio habra iniciado el 1 de enero de 2002, y ade-

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

425

ms estuvo sin operar todo el 2004, las fechas en que se utiliz el sistema por primera vez debe estar dentro de rangos vlidos. En caso de errores, se debe mostrar un resumen de errores encontrados en la pgina que deber aparecer en un cuadro de dilogo. 1. Abra la solucin Ejercicios, que debe encontrarse en (archivo de extensin sln).
C:\APVBNETVS\Ejercicios

Configuraciones iniciales del diseador de pginas Web para las vistas y el posicionamiento de controles
2. El diseador de pginas Web (HTML Designer, tambin llamado Web Forms Designer) tiene dos vistas de trabajo: vista de cdigo fuente (source view) y vista de diseo (design view). En vista source se puede desarrollar una pgina manipulando directamente las etiquetas de controles de ASP.NET; la vista design, por su parte, permite trabajar en un ambiente visual con las pginas. Generalmente es ms sencillo trabajar en vista design, pero ser frecuente que tengamos que alternar entre una y otra. La forma de alternar entre una y otra es a travs de la barra de trabajo que aparece en la parte inferior de HTML Designer, en la cual aparecen botones de seleccin de vistas y las etiquetas en las que nos encontremos trabajando.

3.

4.

Podemos predeterminar la vista en que queremos que inicie HTML Designer cada vez que abrimos una pgina Web. Seleccione la opcin de men Tools Options, el nodo HTML Designer, y en Start pages in, seleccione el botn de opcin Design view. Con ello, cada nueva pgina que abramos mostrar inicialmente la vista de diseo.

13

426

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

5.

6.

En vista de diseo, se entiende por posicionamiento de controles a la forma en que los controles adquieren una posicin fsica en la interfaz para mostrarse en tiempo de ejecucin. Los controles pueden posicionarse de diferentes maneras: posicin absoluta, si la posicin en la interfaz no cambia dependiendo del contenido, dado que se establecen las propiedades HTML z-index, left y top respecto del elemento contenedor; posicin relativa, es similar a la posicin absoluta, slo que las propiedades left y top se asignan respecto del flujo de la pgina; posicin esttica, si el control se coloca de acuerdo con el flujo de la pgina; y no posicionado, si no se especifican atributos y la posicin se determina por los atributos por omisin correspondientes al elemento en cuestin. Dar a los controles posicin absoluta es lo ms parecido a trabajar en ambiente de interfaz Windows, aunque no se recomienda cuando hay objetos de dimensin variable, como podran ser campos con enlazado de datos. Para las interfaces que contienen objetos con dimensin dinmica, recomendamos el posicionamiento relativo, que por una parte permite el acomodo a discrecin en tiempo de diseo, pero en tiempo de ejecucin ajusta las posiciones para que los objetos no se empalmen unos con otros y mantengan la distancia original entre ellos. Podemos predeterminar el posicionamiento de los controles en HTML Designer. Seleccione la opcin de men Tools Options, el nodo HTML Designer CSS Positioning, marque la casilla de verificacin Change positioning to the following for controls added using the Toolbox, paste or drag and drop, y en el cuadro combinado seleccione Absolutely positioning. Con ello, cada nuevo control integrado a la interfaz quedar posicionado de forma absoluta. Esto es muy conveniente para el tipo de interfaz que deseamos desarrollar, puesto que no tiene objetos de longitud variable.

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

427

Adicin de elementos a un sitio Web


7. En el captulo 3 (ejercicio 03.03) ya realizamos una pgina Web bsica. El sitio tiene el nombre http://localhost/APVBNETVS. Seleccione el nodo del sitio APVBNETVS y despliegue el men contextual, seleccionando la opcin Add New Item. Aparecern todos los elementos que pueden agregarse a una aplicacin Web. Seleccione Web Form; en Name escriba Usuario.aspx. Asegrese de que la casilla de verificacin Place code in separate file est seleccionada. Haga clic en Add.

8.

Con ello se habr generado una nueva pgina Web ASPX en el proyecto. En Server Explorer seleccione el nodo que acaba de agregar (Usuario.aspx), invoque el men de contexto y seleccione la opcin Set As Start Page, para obligar a que la nueva pgina sea la pgina de arranque del proyecto.

13

Establecimiento de valores generales de formulario


9. Agregue a la interfaz los siguientes elementos: cuatro etiquetas (Label), cuatro cuadros de texto (TextBox), cuatro validadores de campo requerido (RequiredFieldValidator), un validador de expresin regular (RegularExpressionValidator), un validador de rango (RangeValidator), un validador de comparacin (CompareValidator), un calendario (Calendar), un validador personalizado (CustomValidator) un botn de comando (Button), una lnea horizontal (Horizontal Row) y un hipervnculo (HyperLink).

428

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

La interfaz deber lucir de la siguiente manera:

NOTA
Por cuestin de notacin, cuando hacemos referencia a Clase.Miembro, por ejemplo Form.Name, nos referimos al miembro de la clase; la explicacin ser vlida para todas las instancias que se generen de dicha clase. En caso de que un miembro sea aplicable a todos los objetos que se deriven de una misma clase base, se colocar la referencia de la clase base pertinente; por ejemplo, BaseValidator.Display. Cuando hagamos referencia a Instancia.Miembro, por ejemplo txtNombre.MaxLength, especificaremos valores y condiciones aplicables a un objeto en particular. En la mayora de los casos los controles pertenecen a Web.UI.WebControls.

10.

Modifique las siguientes propiedades desde Properties (oprima la tecla F4).

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

429

Propiedad Label1.Text Textbox1.ID txtNombre.MaxLength txtNombre.ToolTip RequiredFieldValidator1.ControlToValidate RequiredFieldValidator1.Display RequiredFieldValidator1.ErrorMessage RequiredFieldValidator1.Text Label2.Text TextBox2.ID txtCorreo.MaxLength txtCorreo.ToolTip RequiredFieldValidator2.ControlToValidate RequiredFieldValidator2.Display RequiredFieldValidator2.ErrorMessage RequiredFieldValidator2.Text RegularExpressionValidator1.ControlToValidate RegularExpressionValidator1.Display RegularExpressionValidator1.ErrorMessage

Valor a asignar

Nombre: txtNombre 40 Capture aqu su nombre txtNombre Dynamic El nombre no debe omitirse * Correo: txtCorreo 40 Capture aqu su correo electrnico txtCorreo Dynamic El correo no puede omitirse * txtCorreo Dynamic Formato de correo electrnico incorrecto. *

RegularExpressionValidator1.Text RegularExpressionValidator1.ValidationExpression

Seleccione el formato de correo electrnico:

13

Haga clic en Ok.

430

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Se incluir la expresin siguiente, que representa una direccin de correo electrnico en Internet: \w+([-+.]\w+)*@\w+([.]\w+)*\.\w+([-.]\w+)*
Label3.Text TextBox3.ID txtEdad.MaxLength txtEdad.ToolTip RequiredFieldValidator3.ControlToValidate RequiredFieldValidator3.Display RequiredFieldValidator3.ErrorMessage RequiredFieldValidator3.Text RangeValidator1.ControlToValidate RangeValidator1.Display RangeValidator1.ErrorMessage

Edad: txtEdad 3 Capture su edad (0 a 100) txtEdad Dynamic La edad no puede omitirse * txtEdad Dynamic La edad no est dentro del rango permitido 100 0 * Integer txtEdad Dynamic La edad debe ser un nmero entero DataTypeCheck * Integer Inicio: txtInicio txtInicio Dynamic La fecha de inicio de servicios no debe omitirse

RangeValidator1.MaximumValue RangeValidator1.MinimumValue RangeValidator1.Text RangeValidator1.Type CompareValidator1.ControlToValidate CompareValidator1.Display CompareValidator1.ErrorMessage CompareValidator1.Operator CompareValidator1.Text CompareValidator1.Type Label4.Text TextBox4.ID RequiredFieldValidator4.ControlToValidate RequiredFieldValidator4.Display RequiredFieldValidator4.ErrorMessage

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

431

RequiredFieldValidator4.Text CustomValidator1.ControlToValidate CustomValidator1.Display CustomValidator1.ErrorMessage CustomValidator1.Text Calendar1.ID Button1.ID btnAceptar.Text Hyperlink1.NavigateURL Hyperlink1.Text ValidationSummary1.DisplayMode ValidationSummary1.ShowMessageBox ValidationSummary1.ShowSummary

* txtInicio Dynamic La fecha de inicio de uso es incorrecta * calInicio btnAceptar Aceptar datos http://www.aprendapracticando.com Ir al sitio de Aprenda Practicando BulletList True False

11. Realice los reacomodos necesarios para que la interfaz luzca de la siguiente manera:

13

432

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

12. Haga doble clic en RequiredFieldValidator4. Codifique lo siguiente:

Codificacin de Usuario.aspx.vb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Partial Class Usuario Inherits System.Web.UI.Page

CustomValidator1_ServerValidate

Protected Sub CustomValidator1_ServerValidate( ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate If Year(args.Value) < 2002 Or Year(args.Value) = 2004 Then args.IsValid = False Else args.IsValid = True End If End Sub End Class

13. Observe cmo en la pestaa se hace referencia al programa Usuario.aspx.vb; en s es un programa en Visual Basic, independiente de la pgina Web ASPX. Al hecho de que el cdigo no est en la misma pgina se le conoce como code behind. Tener el cdigo separado del diseo es muy til, sobre todo para evitar la modificacin involuntaria de trabajo entre diseadores y codificadores. Vea cmo Visual Studio le asigna el mismo nombre que la pgina y le agrega la extensin VB. Al momento de cargar la pgina la primera vez, el programa VB se compila formando un DLL que deber colocarse en el directorio \BIN de la aplicacin cuando se instale en ambientes de produccin; este directorio es especial, dado que por omisin IIS realiza la bsqueda de componentes y controles en l, sin necesidad de hacer referencias explcitas en el proyecto. La pgina permanece sin cambios, mientras que el cdigo queda oculto. 14. Estando en Text Editor, en el cuadro combinado de objetos seleccione calInicio, y en el de miembros seleccione SelectionChanged, con el fin de que se precodifique el procedimiento de evento que ha de ocurrir cuando se seleccione una fecha en el calendario.

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

433

Codificacin de PrimeraPagina.aspx.vb
1 2 3 4

calInicio_SelectedDate

Protected Sub calInicio_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles calInicio.SelectionChanged txtInicio.Text = calInicio.SelectedDate End Sub

15. En el procedimiento asignar al control txtInicio la fecha que se seleccione en calInicio. Esto permite la validacin del control, dado que Calendar no puede validarse directamente. Ejecucin guiada de PrimeraPagina.aspx 16. La propiedad WebControl.Id de los controles Web es el equivalente a la propiedad Name de los controles para Windows Forms, y sirve para identificar los controles; cambiar el Id de los controles es especialmente til si se van a utilizar programticamente. 17. El control tpico de captura de informacin es TextBox, pues permite ingresar un valor de tipo String que puede ser convertido en cualquier otro tipo de dato. La propiedad TextBox.MaxLength permite limitar el nmero de caracteres que ha de admitir un cuadro de texto, independientemente del tamao del control en la pantalla. La propiedad TextBox.ToolTip permite asignar una ayuda textual fugaz para los objetos, que aparecer en tiempo de ejecucin al colocar el puntero del ratn sobre el control. 18. Los controles de validacin son especialmente tiles dado que verifican que los datos de entrada sean correctos antes de realizar funciones de procesamiento en el servidor. Los controles de validacin derivan de la clase BaseValidator, que define las principales propiedades comunes para todos los validadores. Fundamentalmente debe especificarse en dichos controles la propiedad BaseValidator.ControlToValidate, que indica qu control ser validado; la propiedad BaseValidator.ErrorMessage permite establecer el texto que ha de mostrarse en el resumen de errores, mientras que BaseValidator.Text permite establecer el mensaje de error que aparece en la interfaz si el control a validar no cumple con los criterios de validacin. En caso de que se asigne BaseValidator.ErrorMessage pero no BaseValidator.Text, el valor de BaseValidator.ErrorMessage ser asignado a BaseValidator.Text de forma automtica. La propiedad BaseValidator.Display de los controles de validacin permite establecer la forma en que se muestran los mensajes de error, que puede ser de forma dinmica (Dynamic), esttica (Static) o no mostrarse (None).

13

434

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

19. Es importante mencionar que no todos los controles pueden ser validados a travs de los controles de validacin. Una forma sencilla de saber si el control permite validacin es comprobar si la clase posee la propiedad WebControl.CausesValidation; esta propiedad indica si se desea que el control cause validaciones, por lo cual de existir para el control, indica que las admite. Tambin es importante saber que un mismo control puede ser sujeto a varias validaciones al mismo tiempo. 20. En lo particular los controles de validacin tienen diversas propiedades inherentes a la funcin que realizan. Por su simpleza, RequiredFieldValidator es el ms sencillo, ya que realiza la verificacin de si un control tiene contenido en su propiedad de valor. Este validador es el primero que se comprueba, dado que los dems tienen sentido slo cuando el control ya tiene un valor. En caso que RequiredFieldValidator reporte error, las dems validaciones no se realizan. 21. Un control que s tiene sus propiedades particulares es RangeValidator, ya que utiliza la propiedad RangeValidator.MinimumValue para especificar el umbral del rango, y utiliza la propiedad RangeValidator.MaximumValue para especificar el valor ms alto dentro del rango. Es muy importante especificar el tipo de dato sobre el que est basado el rango, dado que de lo contrario se asumir un rango de valores String que puede diferir mucho de un comportamiento numrico, por ejemplo. El tipo de dato a utilizar se especifica utilizando la propiedad RangeValidator.Type. 22. El control CompareValidator por su parte se ocupa de comparar el valor que posee el control a validar respecto de un valor fijo, el valor que tenga otro control, o verificar si el dato de entrada pertenece a un tipo de dato especfico. a) Si se desea la comparacin sobre un valor fijo, ste se debe especificar a travs de la propiedad CompareValidator.ValueToCompare. b) Si la comparacin es con el valor de otro control, ste debe especificarse en la propiedad CompareValidator.ControlToCompare. c) La comparacin a realizar se hace en trminos de un operador de comparacin, representado por la propiedad CompareValidator.Operator y que puede asumir los siguientes valores: Equal (igual), GreaterThan (mayor que), GraterThanEqual (mayor o igual), LessThan (menor que), LessThanEqual (menor o igual), NotEqual (distinto). d) En caso de que la comparacin sea respecto de un tipo de dato (saber si el control a validar posee un valor de un determinado tipo de dato), slo se requiere establecer en CompareValidator.Operator el valor DataTypeCheck, y especificar el tipo que esperamos en la propiedad CompareValidator.Type. 23. En el caso de RegularExpressionValidator, la comparacin se realiza contra una expresin regular. Las expresiones regulares son una notacin estandarizada para la definicin de patrones de coincidencia; en el caso de la implementacin de Microsoft .NET, los patrones guardan mucha semejanza con las reglas definidas en Perl y awk.

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

435

24.

25.

26.

27.

La herramienta Regular Expression Editor permite simplificar la determinacin de algunos patrones estndar, aunque tambin es posible construir expresiones regulares propias. En el caso de CustomValidator la validacin est determinada por un procedimiento que nosotros codificamos. Este tipo de validacin se utiliza cuando los dems controles de validacin no son suficientes para representar un criterio. En nuestro caso, la fecha de inicio de uso del servicio no puede ser anterior al ao 2002, ni dentro de 2004; como el rango no es continuo, se requiere de programacin para manejarla. Una de las mejores caractersticas de este control de validacin es que adems permite la validacin utilizando procedimientos de parte del cliente, definida a travs de la propiedad CustomValidator.ClientValidationFunction. En el procedimiento de evento de la validacin se puede tener acceso del valor del control a validar mediante la propiedad args.Value del argumento implcito ServerValidateEventHandler.args. Para indicar la existencia de errores, podemos recurrir a la propiedad args.IsValid del argumento implcito ServerValidateEventHandler.args. El cdigo del procedimiento de evento para CustomValidator (CustomValidator1 ServerValidate()) hace lo siguiente: En la lnea 8 se evala si la propiedad de valor del control validado (args.Value) es menor a 2002 o igual a 2004, se considera que el dato no es vlido (args.IsValid=False), o de lo contrario si lo es. La propiedad args. Value asumir el valor de calInicio.DateSelected, dado que es la propiedad de valor del control que se est validando. El cdigo del procedimiento de evento para la seleccin de fecha de Calendar (calInicio_SelectionChanged()) simplemente asigna la propiedad de valor de calInicio a la propiedad de valor de txtInicio. El control ValidationSummary permite mostrar el resumen con todos los errores que contravienen las restricciones marcadas por los controles de validacin de la pgina. Una de las propiedades importantes es la propiedad ValidationSummary.Display-Mode, que puede tener los siguientes valores: BulletList (lista con vietas), List (lista sin vietas), y SingleParagraph (prrafo sencillo). El resumen mostrar en el modo especificado el conjunto de valores de las propiedades BaseValidator.ErrorMessage de todos los controles de validacin que no se hayan cumplido satisfactoriamente; la posicin donde los resultados aparecern es donde el control se haya colocado. Tambin es posible que los errores aparezcan en un cuadro de dilogo y no en la pgina; esta modalidad est disponible si se asigna el valor de True a la propiedad Validation Summary.ShowMessageBox. Para el caso en que no queramos ver en la pgina los errores de manera textual, se puede suprimir la visualizacin colocando la propiedad ValidationSummary.ShowSummary en False. El control Calendar sirve para seleccionar fechas en un ambiente grfico. La propiedad de valor de este control es Calendar.SelectedDate, que es de tipo DateTime. Es posible seleccionar ms de una fecha; para ello se debe establecer un modo de seleccin a travs de la propiedad Calendar.SelectionMode, que puede tener los siguientes valores: Day (da), DayWeek (una fecha o toda una semana), DayWeekMonth (una

13

436

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

28.

29.

30.

31.

fecha, una semana o un mes), o None (no se puede seleccionar nada). En caso de que se seleccione ms de una fecha, stas son accesibles a travs de la coleccin Calendar.SelectedDates. Por omisin la seleccin es de tipo Day. Finalmente, el control HyperLink establece un vnculo hacia un recurso Web. El texto del vnculo est representado por la propiedad HyperLink.Text, y el vnculo hacia el que se enva el control del navegador se establece en la propiedad HyperLink. NavigateURL. Cuando se involucran controles de validacin en un programa, es posible saber si en la pgina se tuvieron errores. Para ello podemos recurrir a la propiedad Page.IsValid de la pgina, que est representada por el objeto Page. El objeto Button simplemente ejecutar el procedimiento de evento Button.Click cuando se haga clic en l. El texto que aparece en la cara del botn est representado por la propiedad Button.Text. Guarde todos los cambios realizados en su solucin e inicie la depuracin (tecla F5). Para empezar haga clic en el botn sin ingresar datos. Vea cmo aparecen asteriscos rojos (propiedades BaseValidator.Text) al lado de los campos que presentan error. Slo se muestra el correspondiente a la validacin de campos requeridos, dado que no intenta realizar ms validaciones por ausencia de datos. Los mensajes de error (Base Validator.ErrorMessage) aparecern en la ventana de dilogo, como una lista con vietas.

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

437

32. Introduzca datos vlidos para cada uno de los campos, pero procure causar un solo error a la vez de la siguiente lista, a fin de observar el comportamiento del programa: a) Colocar un correo electrnico que no tiene el formato adecuado (una palabra, por ejemplo). b) Colocar una edad negativa. c) Escribir letras en la edad. d) Seleccionar una fecha del 2004. e) Seleccionar una fecha antes del 2002. Para asegurarse de que la validacin se hace, no olvide hacer clic en el botn. Si vemos la interfaz de usuario quiere decir que .NET Framework en conjunto con IIS ya nos enviaron el cdigo HTML y los bloques de cdigo script correspondientes a los controles Web y los controles de validacin que indicamos en la pgina; esto permite que de parte del cliente se realicen validaciones antes de lanzar la peticin. Si no hay errores de validacin esto provoca una peticin HTTP al servidor.

Revisin del cdigo generado por el servidor


33. Las validaciones suceden porque el motor de ejecucin de ASP.NET, en conjunto con .NET Framework en el servidor, se encargan de devolver al cliente una pgina que contiene bloques de cdigo de parte del cliente para reproducir el comportamiento deseado. No es necesario que sepa VBScript o JavaScript: ASP.NET se encarga de codificar y enviar el cdigo de parte del cliente. 34. En Internet Explorer seleccione la opcin Ver Cdigo Fuente. Vea todo lo que ASP.NET codifica por usted. En la pgina encontrar cdigo de parte del cliente en Java Script, as como etiquetas HTML optimizadas para su navegador.

13

438

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

35. El cdigo para crear un vnculo que permita ir al sitio de Aprenda Practicando es el siguiente.
<a id=HyperLink1 href=http://www.aprendapracticando.com style= z-index: 118; left: 8px; position: absolute; top: 377px>Ir al sitio de Aprenda Practicando</a>

Sin embargo, slo tuvimos que agregar un control a la interfaz y modificar propiedades en tiempo de diseo. Qu forma de desarrollo preferira? Aunque la programacin directa es en ocasiones necesaria, si programar de forma artesanal no le agrega valor al programa, para qu hacer las cosas difciles? 36. Cierre la aplicacin. FIN DEL EJERCICIO*

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

439

MAPA

MENTAL DEL CAPTULO

13

440

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

TERMINOLOGA
.css, 409 .master, 409 .skin, 409 @ Master, 409 @ Page, 409 @Assembly, 412 @Control, 412 @Implements, 412 @Import, 412 @OutputCache, 412 @Page, 412 @Reference, 412 @Register, 412 AccesDataSource, 421 AdRotator, 420 Analizador de cdigo, 402 ASP clsico, 402 ASP.NET, 400 membership, 407 asp:, 415 ASPX, 402 Assembly Cache, 402 Autenticacin de formularios, 407 Windows, 407 AutoEventWireUp, 413 Bloques proveedores de cdigo, 411 Buffer, 413 BulletedList, 420 Button, 419 Cach de ensamblados, 402 de salida, 402 Calendar, 420, 435 Cascadas de estilos, 409 ChangePassword, 423 CheckBox, 419 CheckBoxList, 419 CodeBehind, 406, 413, 417 Cdigo declarativo, 417 separado, 417 CompareValidator, 422, 434 CompilerOptions, 413 Content pages, 409 ContentPlaceHolder, 409 Control(es) de acceso, 423 de datos, 421 de navegacin, 422 de validacin, 415, 422 de validacin, 416 del servidor, 415 HTML 423 Web del Servidor, 406, 415 ControlToValidate, 429 Cookie-less, 408 Cookies, 408 Copy Development, 408 CreateUserWizard, 423 Cross-server session, 408 CustomValidator, 422 CustomValidator, 435 DataList, 421 Debug, 413 Delimitadores de contenido, 409 DetailsView, 421 Directivas, 412 Display, 429 DisplayMode, 431 Div, 424 DropDownList, 419 EnableViewState, 413 ErrorMessage, 429 ErrorPage, 413 Estado de los formularios, 405 Expresiones regulares, 434 eXtensible Markup Language (XML), 407 FileUpload, 420 Form-state, 405 Formulario del servidor, 414 FormView, 421 GridView, 421 HiddenField, 420 Horizontal Rule, 424 HTML, 423 http Runtime, 402 HyperLink, 419 IIS, 400 Image, 419, 424 ImageButton, 419 ImageMap, 420 Inherits, 413 Input Button, 423 Checkbox, 424 File, 424 Hidden, 424 Password, 424 Radio, 424 Reset, 424 Submit, 424 Text, 424 Validation Control, 417 Internet Information Server (IIS), 400 IsValid, 435 Label, 419 Language, 413 LinkButton, 419 ListBox, 419 Literal, 420 Localize, 420 Login, 423 LoginName, 423 LoginStatus, 423 LoginView, 423 Master pages, 404, 409 MasterPageFile, 409 MaximumValue, 430 Membresa ASP.NET, 407 Menu, 422 Microsoft Passport, 407 MinimumValue, 430 Modelo peticinrespuesta dinmico orientado a eventos, 402 Motor de ejecucin Web, 400 MultiView, 420 NavigateURL, 431 Navigation, 422 ObjectDataSource, 421 Operator, 430 Output Cache, 402 Pginas de apariencia, 409 de contenido, 409 maestras, 409 Panel, 420 Parser, 402 PaswordRecovery, 423 PlaceHolder, 420 RadioButton, 419 RadioButtonList, 419

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

441

RangeValidator, 422, 434 RegularExpression Validator, 422, 434 Repeater, 421 RequiredFieldValidator, 422 RequiredFieldValidator, 434 Rich controls, 415 runat=server, 414 Scripting, 409

Select, 424 Servicios Web XML, 407 Servidores combinados, 408 ShowMessageBox, 431 ShowSummary Simple Object Access Protocol (SOAP), 407 SiteMapDataSource,

421 SiteMapPath, 422 Skins, 404, 409 SOAP, 407 SqlDataSource, 421 Substitution, 420 Table, 420, 424 Temas, 409 Text, 429 Textarea, 424 TextBox, 419 Themes, 404, 409 TreeView, 422

Type, 430 Validation, 422 ValidationExpression, 429 ValidationSummary, 422, 435 View, 420 Web Parts, 404, 409 Wizard, 420 XML, 407 Xml (control), 420 XmlDataSource, 421

PREGUNTAS
13.1 Cules son los motivos que han provocado el auge de las aplicaciones Web? 13.2 Mencione los requerimientos que se tienen para el desarrollo en ASP.NET. 13.3 Enumere las caractersticas de ASP.NET. 13.4 Enumere los elementos de una pgina ASP.NET, y explique para qu sirve cada una. 13.5 Mencione cules son los grupos de controles en las aplicaciones ASP.NET. 13.6 Cuales son los 15 controles que usted cree que utilizar con ms frecuencia?

13

442

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Notas:

Captulo 13. Desarrollo de aplicaciones Web con ASP.NET

443

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que considere que responde a la pregunta.
1. Es el modelo de peticin utilizado por ASP.NET a) Modelo de peticin respuesta b) Modelo de peticin respuesta dinmico c) Modelo de peticin respuesta dinmico orientado a eventos 2. Caracterstica que permite separar el cdigo de las etiquetas en ASP.NET a) Code Behind b) Managed code c) Assembly Cache 3. Componentes funcionales que pueden ser utilizados mediante peticiones Web. a) Servicios Web XML b) Web Components c) DHTML 4. Cantidad de esquemas de seguridad que soporta ASP.NET a) 1 b) 2 c) 3 5. Son implementaciones funcionales basadas en etiquetas, a travs de las cuales se obtiene HTML dinmico, sensible a eventos. a) Cdigo declarativo b) Controles Web c) HTML.NET

Parte 2: Coloque en la lnea la letra F si la sentencia es falsa, y V si la sentencia es verdadera.


6. 7. ASP.NET soporta el modelo orientado a eventos. El cdigo que se utilliza en las pginas Web ASP.NET es cdigo interpretado.

8. Con ASP.NET se puede indicar que las etiquetas HTML se resuelvan del lado del servidor. 9. 10. Las directivas permiten especificar valores a ser considerados al momento de la compilacin que realiza .NET Framework. Los equipos desde los que se llama una pgina ASP.NET deben tener .NET Framework instalado.

13

CAPTULO

14

Servicios Web XML


Objetivos: Aprender en qu consisten los servicios Web XML, y cmo crearlos y consumirlos. 1. Conocer los Servicios Web XML y sus ventajas. 2. Sabr qu son UDDI, Web Service Discovery y WSDL. 3. Aprender a crear un Servicio Web XML. 4. Aprender a descubrir un Servicio Web XML. 5. Aprender a consumir un Servicio Web XML.

445

446

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Servicios Web XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funcionalidad antes de los servicios Web XML . . . . . . . . . . . . . . . . . . . Funcionalidad con servicios Web XML . . . . . . . . . . . . . . . . . . . . . . . . . Caractersticas de los servicios Web XML . . . . . . . . . . . . . . . . . . . . . . . Cundo utilizar servicios Web XML? . . . . . . . . . . . . . . . . . . . . . . . . . . UDDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Web Service Discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Infraestructura de operacin de los Servicios Web . . . . . . . . . . . . . . . . . . . . Elementos para la creacin de un Servicio Web XML . . . . . . . . . . . . . . . . . . Procedimiento de consumo desde el navegador . . . . . . . . . . . . . . . . . Creacin de un Servicio Web XML y demostracin de su uso desde el navegador . . . . . . . . . . . . . . . . . . . . . . . . . . . Creacin de un Servicio Web XML . . . . . . . . . . . . . . . . . Prueba del Servicio Web XML desde el navegador . . . . Consumo programtico de un Servicio Web XML desde una aplicacin Windows . . . . . . . . . . . . . . . . . . . . . . . . . . Estableciemiento de la referencia a un Servicio Web XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Consumo programtico de un Servicio Web XML . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 447 448 448 449 450 451 452 453 454 454 455 455 457 459 460 461 463 464 464 466

Captulo 14. Servicios Web XML

447

A medida que los negocios se globalizan, las redes de computadoras se han constituido en un elemento indispensable de las aplicaciones. Las cosas ya no suceden sobre un solo escritorio, sino sobre muchos escritorios dispersos geogrficamente. Conforme pasa el tiempo, el alcance de las redes ha ido variando; hasta hace algunos aos la comunicacin era entre equipos de la misma organizacin, a distancias relativamente manejables. Ahora, las distancias son globales y podemos estar comunicndonos con un equipo que se encuentra en un punto distante del planeta. No slo el alcance de las redes ha cambiado; tambin aquello que viaja por ellas. Al principio, lo que se transmita por las redes eran datos, y la funcionalidad radicaba en un servidor o en clientes especficos funcionando en alguna plataforma determinada. En el nuevo escenario global ya no se puede garantizar que equipos y servidores dispongan de las mismas plataformas operativas; ahora no slo se requiere que los datos viajen, sino que la funcionalidad pueda distribuirse de manera remota, sin importar las plataformas que tengan los equipos. Atendiendo a estas necesidades surgen los servicios Web XML.

14

Servicios Web XML


Los servicios Web XML (XML Web Services) son componentes que funcionan a travs de protocolos estndar para su uso en la Web (XML/SOAP). El nombre puede ser engaoso. Se dice que son servicios Web por la forma en que se consumen; no porque se trate de aplicaciones Web. El bloque de cdigo que compone un servicio Web XML se parece ms a un programa de consola sin interfaz; se trata de una clase pblica que define principalmente mtodos de servicio Web XML (XML Web service method), que podrn ser invocados por aquellos programas que consuman el servicio. En cierta forma son la evolucin del trabajo basado en componentes COM/DCOM. Tan es as, que los servicios Web XML han sido llamados con mucha frecuencia COM basado en la Web, aunque ello no sea del todo exacto.

Funcionalidad antes de los servicios Web XML


Anteriormente, cuando se trabajaba en el esquema de Windows DNA, la funcionalidad de las aplicaciones se desarrollaba en forma de componentes COM. A travs de dichos componentes se codificaban algoritmos y reglas que satisfacan las demandas de la capa de negocios en ambientes multicapa.

448

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Si la aplicacin requera un funcionamiento distribuido se utilizaba tecnologa DCOM (Distributed Component Object Model), que permita el intercambio de paquetes de datos y la ejecucin remota de componentes sin la necesidad de registrarlos en los equipos clientes. El esquema era bueno, pero tena la limitante de tratarse de tecnologa propietaria que requera una homologacin de plataforma entre el cliente y el servidor. En el nuevo ambiente globalizado, dicha homologacin resulta un problema ya que no podemos obligar a nuestro socio de negocios en otra parte del mundo a utilizar la misma plataforma operativa que nosotros (Windows, por ejemplo). En otras palabras, seguimos necesitando que la funcionalidad de los componentes sea distribuida, pero sin la necesidad de homologacin de plataforma.

Funcionalidad con servicios Web XML


Los servicios Web XML, al igual que COM/DCOM, permiten el manejo distribuido de componentes; la diferencia con aqullos radica en que la comunicacin entre cliente y servidor se lleva a cabo utilizando protocolos estndar de la Web, tales como HTML, XML y SOAP; de esa forma todo equipo que funcione con esos protocolos estndar podr admitir servicios Web XML. Dicho de manera ms contundente, un equipo en Unix o Linux ya podr consumir funcionalidad alojada en componentes desarrollados bajo plataforma Windows. Los servicios Web XML permiten aprovechar la infraestructura de Internet para la distribucin de funcionalidad y paquetes de datos, eliminando los problemas que se daban por diferencias entre plataformas operativas, lenguajes de programacin utilizados o los modelos de objetos de programacin empleados. Los servicios Web XML son una caja negra que recibe peticiones y devuelve respuestas, todo ello usando protocolos estndar para la Web.

Caractersticas de los servicios Web XML


Las caractersticas principales de los servicios Web XML son las siguientes:
Estn basados en protocolos estndar para la Web. Los servicios Web XML

realizan las peticiones y proporcionan las respuestas utilizando protocolos estndar de la Web, como HTTP (Hyper Text Transfer Protocol), XML (eXtensible Markup Language) y SOAP (Simple Object Access Protocol). Toda plataforma que maneje dichos protocolos podr aprovechar la funcionalidad de los servicios Web XML. Comunicacin aplicacin a aplicacin basada en Internet. Al utilizar un servicio Web XML no se tiene una interfaz de usuario visible; realmente se trata de un componente que puede ser consumido de manera programtica de aplicacin a aplicacin.

Captulo 14. Servicios Web XML

449

Los servicios Web XML proporcionan una interfaz estndar para la recepcin de peticiones y envo de respuestas, denominada contrato (contract); dicho contrato pone a disposicin de los usuarios la informacin requerida por el componente, describe los comportamientos del mismo y relaciona los datos de entrada/salida del componente. Mediante el contrato, un servicio Web XML informa a otras aplicaciones cmo interactuar con l. Independencia de lenguaje. Los servicios Web XML pueden ser consumidos desde programas escritos en cualquier lenguaje .NET, por lo que no es necesario aprender un lenguaje determinado para tener acceso a su funcionalidad. Independencia de la plataforma. Independientemente de la plataforma que dispongan los clientes de una aplicacin, el contrato se encarga de hacer la peticin en un formato estndar y recibir la respuesta correspondiente. Arquitectura libre del manejo de estados (stateless architecture). Los servicios Web XML no manejan estados de objetos; cada respuesta brindada por un servicio Web XML es una nueva instancia de un objeto con su estado particular. Lo que una peticin realiza no afecta lo realizado por otras peticiones. Comunicacin sincrnica/asincrnica. El requerimiento de ejecucin de un mtodo de servicio Web XML y el requerimiento de la respuesta son independientes. La aplicacin que consume el servicio Web XML y el servicio Web XML mismo pueden operar con mayor disponibilidad, ya que liberan recursos mientras se est en tiempo de espera.

14

Cundo utilizar servicios Web XML?


Cuando se requiere compartir funcionalidad libre de interfaz de usuario. Los servicios Web son tiles cuando se desea consumir la funcionalidad de un componente sin la intermediacin de una interfaz de usuario. Ejemplo de esto es el consumo de servicios que proporcionan informacin como tipos de cambio, estado del clima, precios de productos, disponibilidad de lugares en eventos, etctera; en muchas ocasiones queremos la informacin sin tener que responder a ninguna interfaz de usuario. Cuando se quiere comercializar un servicio de uso de software y no un producto de software. En la actualidad, adquirir software implica adquirir medios fsicos (CD/DVD) en cajas de cartn. Pero si lo que realmente necesitamos no es el paquete en s, incluso no necesitamos los programas: lo que requerimos es lo que los programas hacen, es decir, sus servicios. Tambin tenemos que lidiar con su instalacin, el espacio en disco que la instalacin demanda, los prerrequisitos de instalacin, las comprobaciones de convivencia con otras aplicaciones, etctera. Todo ello no le agrega valor a nuestro trabajo, sino complejidad. En el futuro no se vender software; la funcionalidad que el software brinde estar disponible como servicio en la Web; si requerimos de un procesador de palabras, nos enlazare-

450

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

mos a un procesador de palabras en lnea y pagaremos slo por el tiempo que utilizamos dicho procesador; probablemente no almacenaremos los archivos en nuestro disco duro sino en un servicio de almacenamiento, en lnea tambin, y as poco a poco requeriremos slo un equipo con buen nivel de comunicaciones y no uno con mucha memoria, procesador y espacio de almacenamiento. Microsoft ha empleado con xito el concepto a travs de Microsoft Passport, que es un esquema de seguridad y perfiles que puede ser utilizado y contratado por cualquier aplicacin. Hay otros ejemplos: el sistema de seguimiento de paquetes de Federal Express (FedEx Tracker) est disponible como servicio para rastrear un envo con slo proporcionar el nmero de gua; Barnes & Noble cuenta con un servicio que proporciona el precio de venta de un libro, si se proporciona un ISBN (Barnes & Noble Price Quote). De esas maneras se podr obtener va Web servicios como cotizaciones y tipos de cambio, pronsticos del clima, ofertas de productos, etctera. Cuando cliente y servidor requieren compartir funcionalidad en Internet, pero difieren en su plataforma operativa. Sucede cuando los equipos no operan con la misma plataforma. En la actualidad, por ejemplo, el esquema basado en COM/DCOM utiliza tecnologa de propietario, que no es compatible con otros equipos en Internet, lo que limita la distribucin de la funcionalidad. Si se requiere disponer de funcionalidad entre plataformas distintas compatibles con los protocolos estndar de la Web, los servicios Web XML son la solucin.

UDDI
Uno de los puntos ms importantes de un servicio es su publicidad. De nada sirve un servicio Web XML que nadie conoce. As como las empresas de servicios a los consumidores tienen la necesidad de darse a conocer, un servicio Web XML requiere comunicar, de alguna forma, que existe y para qu sirve. Pensando en ello se ha definido un mecanismo para darles publicidad a los servicios Web XML que las empresas desarrollan, denominado UDDI (Universal Description Discovery and Integration). UDDI est formado por un registro distribuido de informacin de los servicios Web XML; dicho registro est implementado en un formato XML y en l se pueden encontrar los negocios que ofrecen servicios Web XML, as como la descripcin de los mismos. Cada negocio que desarrolla servicios Web XML registra su informacin a travs de un sitio Web (http://www.uddi.org/), o a travs de herramientas y programas comerciales o que se desarrollen para tal efecto. Una vez registrado, el servicio Web XML queda expuesto a la comunidad de desarrolladores para su consumo.

Captulo 14. Servicios Web XML

451

Una buena recomendacin es que, antes de desarrollar un servicio Web XML, revise los servicios Web XML ya desarrollados y disponibles; quiz entre ellos encuentre la solucin de procesamiento con un costo menor.

14

Web Service Discovery


Si queremos utilizar en un programa la funcionalidad de una clase, es necesario especificarle la forma de localizarla. En el caso de las aplicaciones Web no es prctico establecer referencias a clases utilizando su ruta fsica. Es necesario disponer de un mecanismo que permita encontrar las clases que nuestras pginas necesitan de la manera ms independiente posible con respecto a su implementacin fsica. Se conoce como descubrimiento de servicio Web (Web Service Discovery) al proceso por medio del cual se localiza un servicio Web XML y su descripcin, de tal manera que est disponible para los programas que consumen los servicios Web XML. Disco es un mecanismo que enumera los servicios Web XML disponibles y sus contratos; este mecanismo es de tecnologa propietaria de Microsoft, aunque no se descarta que en el futuro cercano surja un estndar de la industria, cuando los servicios Web XML tengan mayor demanda. La forma de descubrir un servicio Web XML y crear archivos que permitan agrupar las referencias de los recursos ocupados por el servicio, es mediante la utilera Disco.exe, desde lnea de comandos. Desde luego, si se trabaja con Visual Studio, las labores de descubrimiento se hacen de forma automtica:
disco

URL_Servicio

Donde URL_Servicio es el URL del servicio Web XML. La ejecucin de disco.exe sobre el servicio Web XML producir archivos de extensin y .DISCO. El archivo de extensin .DISCO contiene la informacin que permite localizar el Servicio Web XML y sus componentes requeridos. A este archivo se le denomina discovery document.
.WSDL

Es muy importante realizar el descubrimiento del servicio Web XML antes de generar la clase proxy usando wsdl.exe, debido a que si no se hace el descubrimiento antes, la descripcin del servicio no tendr la suficiente informacin para crear una clase proxy. Es necesario consultar algunos otros parmetros para usar la utilera en las referencias tcnicas del producto; tambin aparecen si se ejecuta la utilera sin argumentos.

452

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

WSDL
No slo basta encontrar qu servicios Web XML estn disponibles; es muy importante conocer tambin cmo funcionan y cmo los podemos consumir. Un WSDL (Web Service Description Language) es la especificacin estndar de funcionamiento y datos de un servicio Web XML. WSDL se maneja a travs de un contrato, conocido tambin como Service Description, que es un documento XML que contiene informacin relacionada con el servicio Web XML y los paquetes de datos que el servicio Web XML maneja, tanto de entrada como de salida. En cierta forma, WSDL especifica los datos requeridos por el servicio, su comportamiento y sus datos de retorno; acta como un contrato de intercambio de paquetes de datos entre el consumidor de servicios Web XML (Web Service Consumer) y el servicio Web XML. WSDL tambin contiene las referencias a las direcciones asociadas con el servicio Web XML, mismas que dependern del protocolo utilizado para consumir el servicio (HTTP, SMTP, etctera). El documento WSDL es un documento XML; el elemento raz es llamado definitions y contiene cinco nodos hijos que muestran la forma en que est definido el servicio Web XML. Dichos elementos hijo son los siguientes:
types. Define los tipos de datos utilizados para el intercambio de mensajes entre el

consumidor y el servicio.
message. Describe los mensajes que sern comunicados entre el consumidor y el ser-

vicio.
portType. Identifica el conjunto de operaciones que realiza el servicio y los mensajes

involucrados en dichas operaciones.


binding. Especifica los detalles de protocolo para el intercambio de mensajes entre las

operaciones, describiendo cmo traducir contenido abstracto a un formato estndar.


service. Agrupa aquellos puertos que estn relacionados.

Para generar un WSDL, se utiliza la utilera wsdl.exe, desde la lnea de comandos, con la siguiente sintaxis. Si trabaja en Visual Studio esto se realiza automticamente:
wsdl /l:Lenguaje /n:NombreNamespace

URL_Servicio

Donde Lenguaje es el lenguaje que se desea utilizar, NombreNamespace es el nombre del espacio de nombres a generarse en el WDSL, y URL_Servicio es el URL del servicio Web XML a partir del cual se generar WSDL. La ejecucin de wsdl.exe sobre el servicio Web XML producir un programa generado en el lenguaje especificado que deber ser compilado como librera para su uso programti-

Captulo 14. Servicios Web XML

453

co. Dicho programa alojar una clase con la misma programacin contenida en el servicio Web XML original, pero adems contendr especificaciones descriptivas que permitirn el consumo de la funcionalidad de la clase utilizando protocolos abiertos. A esta nueva versin del programa se le conoce como clase proxy. Es necesario consultar algunos otros parmetros para usar la utilera en las referencias tcnicas del producto; tambin aparecen si se ejecuta la utilera sin argumentos.

14

Infraestructura de operacin de los Servicios Web


Los Servicios Web XML utilizan una infraestructura que permite localizar y descubrir los servicios, proporcionar una descripcin pblica de su funcionalidad, as como proveer los mecanismos para el uso de protocolos abiertos de comunicacin para la distribucin de funcionalidad. La forma en que un Servicio Web XML expone su funcionalidad a los clientes solicitantes es la siguiente: FIGURA 14.1 Infraestructura de los Servicios Web XML.

1. 2.

El equipo que consume el Servicio Web XML intenta localizar un Servicio Web XML que le proporcione una funcionalidad especfica. Como no sabemos si alguien ya desarroll un Servicio Web XML que brinde la funcionalidad que requerimos, buscamos en un servidor UDDI; en caso de que ya exista el ser-

454

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

3. 4.

5. 6. 7.

vicio buscado, el servidor enviar la direccin URL en donde se puede solicitar informacin del Servicio Web XML pertinente, que est contenida en discovery document. En caso de que ya sepa dnde encontrar el Servicio Web XML no es necesario acudir al servidor UDDI para hacer una localizacin inicial. El consumidor utiliza la informacin de la ubicacin de discovery document y lo recupera. Este documento contiene las referencias a los recursos requeridos por el Servicio Web XML. El documento informa respecto a la funcionalidad del servicio con lo que podemos saber si en trminos generales nos sirve o no; tambin proporciona los elementos para solicitar la descripcin del servicio. Si el Servicio Web XML proporciona la funcionalidad que deseamos, se requiere la descripcin del servicio para saber cmo se utiliza y qu informacin devuelve. Ya con esta informacin se consume el servicio en los trminos que especifica la descripcin del servicio. Se recibe la respuesta del servicio.

Elementos para la creacin de un servicio Web XML


Los servicios Web XML, desde el punto de vista de programacin, son muy parecidos a un programa, mientras que en su consumo son ms orientados al ambiente Web; de ah que proporcionen lo mejor de los dos mundos. Su creacin es muy sencilla. Todo servicio Web XML debe estar constituido por un archivo de extensin .ASMX, y este archivo debe contener como mnimo lo siguiente: 1. 2. 3. 4. La directiva @WebService. Importar el espacio de nombres System.Web.Services Crear una clase, ya sea dentro de la pgina o en modo Code Behind. Declarar como <WebMethod()> las funciones del servicio Web XML.

Procedimiento de consumo desde el navegador


Para consumir un servicio Web XML se siguen tres pasos a) publicar; el servicio debe estar disponible; b) encontrar; se debe tener forma de localizar el servicio; c) enlazar; se debe tener forma de establecer enlace entre el servicio Web XML y la aplicacin que lo consume. A este modelo se le llama Publish/Find/Bind model. Cuando se realiza el consumo desde el navegador, ste se encarga de todo el proceso: 1. Se debe hacer una solicitud del servicio Web XML utilizando HTTP.

Captulo 14. Servicios Web XML

455

2. 3. 4. 5.

Aparecer la pgina de descripcin, que expone todos los mtodos del servicio. Se selecciona un mtodo del servicio. Se proporcionan los datos que el mtodo requiere. Se reciben los resultados del mtodo en formato XML.

14

El protocolo HTTP es textual y es incapaz de manejar objetos complejos. Como este tipo de consumo del servicio Web XML se realiza utilizando el protocolo HTTP, la respuesta slo puede ofrecerse mediante XML. Si se desea que el servicio Web XML devuelva objetos complejos, como lo es un DataSet, por ejemplo, se requerir el manejo del protocolo SOAP, para lo cual se necesitar la intermediacin de un proxy.

Ejercicio 14.1
Creacin de un Servicio Web XML y demostracin de su uso desde el navegador Desarrollar un servicio Web XML que contenga un mtodo. En s el ejercicio es bastante pequeo, pues slo trata de explicar las formalidades de la construccin de un servicio Web XML; ya tendr la oportunidad de codificar algoritmos ms complejos en los servicios que desarrolle. Se demostrar la forma en que se puede probar el Servicio Web XML desde el navegador. En el caso del desarrollo de Servicios Web XML con Visual Studio, todo el proceso de descubrimiento, generacin del proxy y exposicin se realizan de forma automtica.

Creacin de un Servicio Web XML


1. 2. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). En el Solution Explorer seleccione la solucin, invoque el men de contexto y seleccione la opcin Add New Web Site. En la ventana Add New Web Site seleccione la plantilla ASP.NET Web Service. En Location debe especificar el protocolo HTTP y la pgina http://localhost/Aritmetica. Haga clic en Ok.

456

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

3.

4.

Como sabe, los Servicios Web XML no tienen interfaz de usuario, dado que son un componente de consumo va protocolos de Internet. En ese sentido, realmente se trata de una clase especial que permite su consumo a travs de peticiones Web. En Visual Studio la pgina ASMX, aunque existe, sirve slo para definir la directiva @WebService y hacer referencia al cdigo en donde realmente se programa el servicio. Codifique lo siguiente:

Codificacin de Aritmetica
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

App_Code/Service.vb

Imports System.Web Imports System.Web.Services Imports System.Web.Services.Protocols <WebService(Namespace:=http://tempuri.org/)> _ <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Public Class Service Inherits System.Web.Services.WebService txtInicio.Text = calInicio.SelectedDate <WebMethod(Description:=Suma de dos nmeros)> _ Public Function Suma(ByVal N1 As Integer, ByVal N2 As Integer) _ As Integer Return (N1 + N2) End Function End Class

Captulo 14. Servicios Web XML

457

Ejecucin guiada de 5.

Aritmetica.asmx

14

6.

7.

De la lnea 1 a la 3 se establecen los espacios de nombre requeridos por el Servicio Web XML; queda claro que es un servicio que est basado en Web y que utilizar protocolos de Internet para el transporte. La clase tiene el nombre Service de manera predeterminada. El nombre de clase puede cambiarse siempre y cuando la referencia en el archivo ASMX tambin se modifique (lnea 8). En la lnea 12 se define un mtodo Web al cual le especificamos una descripcin informativa de lo que hace. El mtodo Web (WebMethod) se compone por una funcin que recibe dos argumentos (nmeros enteros) y devuelve un nmero entero, producto de la suma de los dos argumentos que se proporcionen. En lugar de una simple suma, usted puede recibir otro tipo de datos e incluso devolver objetos completos, como puede ser un arreglo o una base de datos en memoria (DataSet).

Prueba del Servicio Web XML desde el navegador


8.
localhost/Aritmetica/.

En Solution Explorer seleccione la pgina Service.asmx, del proyecto http:// Despliegue el men contextual y seleccione View in browser. Aparecer una pgina de consumo del servicio, que muestra el nombre de la clase y una lista de los mtodos codificados.

458

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

9.

Aparecer una lista de los mtodos expuestos por el servicio, de acuerdo con la descripcin del mismo. Vea cmo aparece Suma con la descripcin que colocamos en el cdigo para el mtodo. Haga clic en el vnculo Suma. Aparecer una interfaz que pregunta los argumentos requeridos por el servicio.

10. En N1 proporcione el nmero 20, y en N2 proporcione el nmero 30. Haga clic en Invoke. Con ello se realizar el procesamiento correspondiente y la respuesta se devolver utilizando un paquete de datos mediante XML.

FIN DEL EJERCICIO *

Captulo 14. Servicios Web XML

459

Ejercicio 14.2
Consumo programtico de un Servicio Web XML desde una aplicacin Windows En este ejercicio comprobar la forma en que se puede consumir programticamente un Servicio Web XML desde una aplicacin que no es Web. Se requiere haber desarrollado el ejercicio anterior. 1. 2. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Windows Application, llamado ConsumeWS. Deber aparecer un formulario en el diseador de formularios, que de manera predeterminada recibe el nombre de Form1. Disee una interfaz con los siguientes elementos: tres etiquetas (Label), tres cuadros de texto (TextBox) y un botn (Button). Modifique las propiedades necesarias para que la interfaz luzca de la siguiente manera:

14

3.

Propiedad Form1.Text Label1.Text Label2.Text Label3.Text TextBox3.ReadOnly Button1.Text

Valor a asignar

Consumo de servicio N1: N2 Suma: True Invocar Servicio Web XML

460

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Establecimiento de la referencia a un Servicio Web XML


4. Seleccione el proyecto ConsumeWS en Solution Explorer. Despliegue el men contextual y seleccione Add Web Reference, con lo que aparecer la ventana Add Web Reference.

5.

Desde la ventana Add Web Reference se pueden agregar referencias a Servicios Web que se encuentran en la misma solucin, en el equipo local o en los servidores UDDI de la red local. Haga clic en el vnculo Web services in this solution. Con ello aparecern los servicios Web disponibles en la solucin.

Captulo 14. Servicios Web XML

461

6.

Cmo slo tenemos definido un servicio en la solucin, es lo nico que aparece. Haga clic en el vnculo del nombre del servicio, que se llama Service. Aparecer el vnculo hacia el servicio, la lista de mtodos, as como el nombre de referencia del servidor Web (localhost). Haga clic en el botn Add Reference para establecer la referencia al recurso Web.

14

Consumo programtico de un Servicio Web XML


7. En modo de diseo, haga doble clic en el botn Invocar Servicio Web XML, a fin de codificar el procedimiento de evento del botn. La codificacin debe quedar como sigue:

Codificacin de ConsumeWS
1 2 3 4 5 6 7 8 9 10 11 12 13 Public Class Form1

Form1.vb

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim wsAritmetica As New localhost.Service() TextBox3.Text = wsAritmetica.Suma( _ CType(TextBox1.Text, Integer), _ CType(TextBox2.Text, Integer) ) End Sub End Class

462

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejecucin guiada de 8.

ConsumeWS

En la lnea 6 se declara una variable objeto (wsAritmetica) a travs de la cual podremos utilizar la funcionalidad de la clase Service, que est disponible a travs de la referencia localhost. 9. Ya que declaramos la variable, utilizamos a travs de ella el mtodo Web Suma(). Para ello le asignamos el resultado del mtodo a la propiedad Text de TextBox3 (lnea 7). Vea cmo se coloca la variable de trabajo, el mtodo Web y, entre parntesis, los argumentos que requiere el servicio. 10. Establezca el proyecto como proyecto de arranque. Guarde todos los cambios realizados en su solucin e inicie la depuracin (oprima la tecla F5). Proporcione los valores 20 y 30 en N1 y N2, y haga clic en Invocar Servicio Web XML.

11. Al hacer clic se invoca el Servicio Web XML, se le proporcionan los argumentos al mtodo Web y se utiliza el resultado del servicio. 12. Cierre la aplicacin. FIN DEL EJERCICIO *

Captulo 14. Servicios Web XML

463

MAPA

MENTAL DEL CAPTULO

14

464

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

TERMINOLOGA
Add Web Reference, 460 .ASMX, 454 binding, 452 Clase proxy, 453 definitions, 452 Descubrimiento de servicio Web, 451 Disco, 451 Disco.exe, 451 Discovery document, 454 message, 452 portType, 452 service, 452 Servicios Web XML, 447 types, 452 UDDI, 450 Universal Description Discovery and Integration (UDDI), 450 Web Service Description Language, 452 Discovery, 451 <WebMethod()>, 454 WSDL, 452 wsdl.exe XML Web Service, 447

PREGUNTAS
14.1 Qu son los Servicios Web XML y cules son sus caractersticas principales? 14.2 En qu consiste UDDI y para qu sirve? 14.3 En qu consiste WSDL y para qu sirve? 14.4 En qu casos se recomienda el uso de los Servicios Web XML? 14.5 Mencione en qu casos cree usted que podra utilizar Servicios Web XML en su mbito profesional.

Captulo 14. Servicios Web XML

465

Notas:

14

466

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Son bloques de cdigo ejecutable expuestos a travs de protocolos estndar para su uso en la Web (XML / SOAP). a) Servicios Web XML b) XML Web Forms c) Mtodos de Servicio XML 2. Es un registro distribuido de informacin de los servicios Web XML ofrecidos por las compaas desarrolladoras. a) WSDL b) DDL c) UDDI 3. Proceso por medio del cual se localiza un Servicio Web XML y su descripcin, de tal manera que est disponible para los programas que consumen los Servicios Web XML. a) Contrato Service Description b) Descubrimiento del Servicio Web c) DDL 4. Es el tipo de archivo que se genera al aplicar WSDL.EXE sobre un Servicio Web XML. a) .wsdl b) .wsdl y .disco c) .vb y .cs 5. Es una entidad que acta como intermediaria de otra entidad. a) Service Description b) Class c) Proxy

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. 7. 8. 9. 10. Los Servicios Web XML pueden ser ejecutados desde aplicaciones de Consola, Windows y Web. Los Servicios Web XML aprovechan el protocolo HTTP, SOAP y TCP/IP para distribuir la funcionalidad y paquetes de datos. Para utilizar un Servicio Web es necesario registrarlo primero en UDDI. Un Servicio Web slo puede ser ejecutado desde el navegador de Internet. Los Servicios Web son ideales para compartir, va Web, funcionalidad sin necesidad de interfases.

Captulos:
15 Manejo de bases de datos con ADO.NET 16 Manejo de bases de datos desde aplicaciones Windows 17 Manejo de bases de datos desde aplicaciones Web 18 Colecciones genricas (generics)

Parte 5
Manejo de Bases de datos con ADO.NET
En esta parte del libro aprenderemos a desarrollar aplicaciones que manejen bases de datos de alto rendimiento. El objetivo principal es que aprenda a desarrollar aplicaciones capaces de actualizar almacenes de datos fsicos, aprovechando al mximo las herramientas que proporciona Visual Studio. En esta parte culmina todo lo aprendido en el libro: utilizamos la programacin general en Visual Basic para la elaboracin de los procesos y procedimientos, adems de dar la estructura a las aplicaciones; tambin utilizamos las tcnicas para el desarrollo de interfaces complejas Windows y Web; trabajamos con Visual Studio al mximo, y ponemos en prctica la capacidad de entender el cdigo que la herramienta genera, gracias a nuestro conocimiento del modelo de programacin orientada a objetos. Desarrollar actualizadores que insertan, modifican, eliminan y muestran registros desde los tres principales tipos de interfaz (Consola, Windows y Web) puede parecer pretencioso. La ventaja es que, en cierta forma, es necesario ser pretencioso para llegar hasta este punto. Si en este mundo globalizado somos simples datos, garantizar el almacenamiento fiel de los datos de stos significa garantizarnos un poco de perpetuidad.

Herramientas de Visual Studio revisadas:


1. 2. 3. 4. 5. Server Explorer Query Designer Output Data Sources Command and Parameter Editor 6. Query Builder

Otras herramientas:
1. ildasm.exe 2. Visual Studio 2005 Command Prompt

CAPTULO

15

Manejo de bases de datos con ADO.NET


Objetivos: Aprender las generalidades del modelo de objetos de ADO.NET, y aprender los diversos modos en que podemos trabajar con dicho modelo para manipular y recuperar informacin de bases de datos. 1. Revisar el proceso evolutivo de las bases de datos, desde las libreras nativas hasta ADO.NET 2. Conocer las diferencias entre bases de datos conectadas y desconectadas, y podr decidir cul es la estrategia ptima para sus aplicaciones. 3. Se familiarizar con el modelo de objetos ADO.NET 4. Conocer las particularidades de los Data Provider Objects. 5. Conocer las particularidades de los DataSet Objects. 6. Aprender a desarrollar aplicaciones de actualizacin de bases de datos en forma conectada.

469

470

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Historia del acceso a los almacenes de datos . . . . . . . . . . . . . . . . . . . . . . . . . Formas de trabajo con bases de datos en .NET . . . . . . . . . . . . . . . . . . . . . . . Bases de datos conectadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bases de datos desconectadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modos de trabajo con ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Proveedores de datos de .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . Uso de consultas y procedimientos almacenados con Server Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adicinde una conexin a Server Explorer . . . . . . . . . . . Visualizacin de los datos de una tabla desde Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adicin de una vista a la base de datos con Query Designer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adicin y prueba de un stored procedure con Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modelo de objetos de ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Data Provider Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DataSet Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cmo realizar la conexin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Objeto Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Miembros ms utilizados en Connection . . . . . . . . . . . . . . . . . . . . . . . Propiedad ConnectionString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Connection Pooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cerrado de conexin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Proceso de conexin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Establecimiento de una conexin a base de datos de forma programtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Miembros ms utilizados en Command . . . . . . . . . . . . . . . . . . . . . . . . Tipos de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de ejecucin de los comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . DataReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uso de comandos para ejecutar procedimientos almacenados y uso de DataReader . . . . . . . . . . . . . . . . . . . . . . . Altas, bajas, cambios y consultas en modo conectado . . . . . . . . Consumo de cadenas de conexin de app.Config . . . . . . . . . . . . Compilacin de un proyecto para liberacin (Release) . Crackeado de un usuario y contrasea usando ILDASM . Adicin de un archivo de configuracin para la aplicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Consumo de valores desde el archivo de configuracin . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 472 477 477 478 480 481 482 482 485 486 488 491 492 494 496 496 497 499 499 500 500 501 503 504 505 506 506 507 510 514 515 516 517 518 521 522 523 525

Captulo 15. Manejo de bases de datos con ADO.NET

471

ADO.NET
ADO.NET es un conjunto de clases que forman parte de la biblioteca de .NET Framework y permite a las aplicaciones tener acceso a bases y otros almacenes de datos con fines de lectura, adicin o actualizacin, ya sea de manera conectada o desconectada. ADO.NET no es un producto en s mismo; forma parte de .NET Framework, pero es tal su importancia que merece ser estudiado de manera particular. Antes de entender la forma en que ADO.NET trabaja es necesario comprender que una base de datos sirve para almacenar y recuperar informacin. Surgen entonces dos preguntas: Almacenarla dnde?, recuperarla de dnde? Independientemente de si trabajamos con Access, SQL Server, Oracle, Informix, MySQL o cualquier otra base de datos del mercado, los datos terminan siempre en archivos que se almacenan en diversos medios de almacenamiento permanente (disco duro, cinta, cartucho, etctera). Los manejadores de bases de datos permiten administrar y organizar la estructura de las bases de datos, facilitando la labor de almacenamiento, actualizacin y recuperacin; sin embargo, a fin de cuentas siempre terminamos con un archivo al que debemos leer y en el que debemos escribir de una manera especfica. A estos archivos les damos el nombre de almacn de datos u orgenes de datos. Los almacenes de datos pueden estar a nuestra disposicin ya sea mediante el uso de sistemas manejadores de bases de datos (DBMS/Data Base Management System), programas que proporcionan una interfaz de acceso al almacn de datos y que en la actualidad poseen incluso lenguajes de manipulacin de datos (DML/Data Manipulation Language), e interfaces grficas intuitivas, llenas de asistentes y generadores de cdigo. Ejemplos de este tipo de sistemas son Access, Visual FoxPro, SQL Server, Oracle, etctera. Otra forma de acceder a estos archivos es mediante programacin, a travs de componentes y libreras que permiten el enlace con los almacenes de datos, as como su manipulacin y recuperacin. Dependiendo de la tecnologa que estemos utilizando, hablamos de libreras, controladores y proveedores de datos. Ejemplos de esto son DAO, ADO, ADO.NET, OLEDB, ODBC, etctera.

15

472

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

FIGURA 15.1 Manejo de bases de datos mediante programacin.

Dado el carcter de este libro, nos interesa el acceso a los almacenes de datos de manera programtica, a travs de componentes y libreras, y especficamente utilizando ADO.NET. Para todo desarrollador profesional, en su labor de desarrollo de aplicaciones amplias para organizaciones, es indispensable saber hacer que una interfaz de usuario se comunique con almacenes de datos mediante programacin; esto lleva a la necesidad de conocer los elementos del lenguaje que permitan manipular las bases de datos. En el caso de .NET, es necesario familiarizarse con el modelo de objetos ADO.NET, que precisamente sirve para eso. A travs de programacin es posible crear accesos rpidos, eficientes y confiables. Ciertamente no seremos los primeros en intentarlo, pero s los que menos problemas enfrentaremos para hacerlo, ya que ADO.NET es una plataforma sorprendentemente potente y sencilla; adems, si disponemos de Visual Studio, la codificacin se realiza prcticamente sola. La historia nos dice que somos afortunados; muchos quisieron ver lo que nuestros ojos estn por ver.

Historia del acceso a los almacenes de datos


Realicemos un breve recorrido por las diferentes formas en que hemos tenido acceso a los datos desde una interfaz de usuario.

Captulo 15. Manejo de bases de datos con ADO.NET

473

FIGURA 15.2 Cronologa de los manejadores de base de datos.

Historia de acceso a los almacenes de datos

15

Dcada de 1990

Dcada de 2000

Libreras nativas de acceso a datos. Al principio, la diferencia entre plataformas y la diversidad de medios de conexin no era problema porque no haba alternativas. El acceso a las bases de datos se realizaba a travs de libreras nativas que funcionaban slo para un manejador de base de datos especfico en una plataforma operativa especfica. Ejemplos de ello fueron DBLib para SQL Server y OCI (Oracle Call Interface) para Oracle. Las libreras nativas son libreras ejecutables de tecnologa propietaria que sirven para enlazar a un solo tipo de almacn de datos en particular en una plataforma especfica. El enlace con las bases de datos era tan rpido como limitado; en virtud de que no haba intermediacin entre base de datos y cdigo nativo, el acceso a la base de datos era directo y, por tanto, muy veloz. Sin embargo, las libreras funcionaban slo con el manejador de base de datos especfico en una plataforma operativa; otra desventaja era que el desarrollador deba aprender a manejar tantas libreras nativas como manejadores de bases de datos utilizara en su aplicacin. Si por alguna razn el usuario decida usar otro manejador de bases de datos, no slo se tena que cambiar el manejador, sino tambin era necesario modificar el cdigo fuente de las aplicaciones, lo que en ocasiones generaba una inversin alta en tiempo y dinero. sa fue la razn por la que muchas empresas no cambiaban manejador de base de datos, aun cuando no fuera el ms adecuado para su negocio. ODBC. Al inicio de la dcada de 1990, Microsoft y otras empresas desarrollaron un estndar, denominado ODBC (Open Data Base Connectivity/Conectividad abierta de bases de datos). La idea era proporcionar una capa de acceso a datos comn a travs de la cual

474

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

pudiera tenerse acceso a cualquier motor de base de datos, siempre y cuando estuviera basada en el modelo relacional. Dichos motores, llamados motores de base de datos relacionales (RDBMS/Relational Data Base Management System), tales como SQL Server, Oracle, e Informix, utilizaran para el enlace unos controladores ODBC (ODBC drivers) que servan como protocolos de comunicacin entre las aplicaciones y la base de datos. ODBC agreg un elemento intermedio entre la base de datos y las aplicaciones, llamado Manejador de controladores ODBC (ODBC Driver Manager), que se ocupaba de cargar y administrar los controladores ODBC. En ese contexto, la aplicacin se comunicaba mediante instrucciones de bajo nivel con el manejador de controladores ODBC, quien a su vez se comunicaba con la base de datos a travs de las API (Application Programming Interface), que constituyen un conjunto de definiciones que permiten a un programa comunicarse con otro. En teora, si se cambiaba el manejador de base de datos, por ejemplo de Oracle a SQL Server, ya no sera necesario cambiar el cdigo de la aplicacin, dado que bastara con utilizar un controlador distinto. Cambiar de manejador de base de datos sera como cambiar la impresora o el monitor: se conecta el dispositivo, se instalan los controladores y listo.

NOTA
Esto es slo en teora, ya que los manejadores de base de datos admiten diferentes dialectos del lenguaje SQL, como ya veamos en el captulo anterior, lo que no permite una compatibilidad tan transparente.

Con ODBC nace el concepto de orgenes de datos, que vienen siendo el acceso a almacenes de datos por intermediacin de un manejador de controladores, y el uso de un controlador. Con respecto a la velocidad de acceso, el que se agregara una capa de intermediacin entre la aplicacin y la base de datos, naturalmente, redujo un poco la rapidez. DAO. Lenguajes como C++ facilitaban el trabajo de bajo nivel que requera ODBC. En cierta forma, el proceso de interaccin con el manejador de controladores ODBC era algo natural. Sin embargo, con la aparicin de Visual Basic surgi la necesidad de comunicarse con las bases de datos en un ambiente ms orientado a objetos, capaz de asumir muchas cosas. ODBC era demasiado complejo de implementar en un ambiente de desarrollo cuyo principal atractivo era la simplicidad. En la versin 3 de Visual Basic apareci DAO (Data Access Objects), que proporcionaba un modelo de objetos que permita tener acceso con el motor de base de datos Jet, la tecnologa utilizada por Microsoft Access.

Captulo 15. Manejo de bases de datos con ADO.NET

475

Aun cuando era posible tener acceso a bases de datos en Access a travs de ODBC, DAO rpidamente cobr popularidad; en primer lugar, porque era mucho ms sencillo, de acuerdo con la filosofa de desarrollo de Visual Basic, y segundo, debido a que por ser un motor optimizado para Jet, era (y sigue siendo) la forma ms rpida de tener acceso a las bases de datos en Access. Aunque est optimizado para bases de datos basadas en Jet (Access), DAO tambin acepta otras bases de datos a travs de ODBC. De esa forma, se dispone de la simplicidad de DAO y el poder de ODBC.
RDO. El problema con DAO es que al querer utilizarlo con bases de datos no basadas en Jet, es decir, cuando utilizaba orgenes de datos ODBC, se volva muy lento.

15

Buscando remediar eso, Microsoft cre RDO (Remote Data Objects), que es un modelo de objetos similar a DAO pero optimizado para ODBC. No obstante los cambios, la velocidad de conexin no mejor mucho. Slo se logr tener un poco menos de los mismos problemas. OLE DB. Para resolver el problema de la velocidad, ya en un contexto lleno de diferentes manejadores de bases de datos y condiciones de conectividad, surgi OLE DB. OLE DB es similar a ODBC, en el sentido de que utiliza una especie de controladores, llamados proveedores de datos (OLE DB Providers), que implementaban un conjunto de interfaces COM que permitan el acceso a las bases de datos en un formato estndar de lnea-columna. A las aplicaciones que utilizan OLE DB se les denomina OLE DB Consumer. En un esquema COM, OLE DB extendi el nmero de servicios disponibles para el manejo de los datos a travs de libreras de fcil utilizacin, permitiendo el manejo de transacciones, persistencia de datos, manipulacin de parte del cliente, conjuntos de registros jerrquicos, etctera. Con OLE DB, Microsoft estableci su estrategia UDA (Universal Data Access), que por primera vez reconoca que los datos no slo pueden estar en bases de datos, sino en muchos otros lugares y formatos como mensajes de correo electrnico, hojas electrnicas, archivos de texto simple, etctera.

NOTA
En este libro optamos por enfocarnos en los almacenes de datos por esta razn. No siempre hablamos de bases de datos; podemos hablar tambin de archivos de texto u hojas electrnicas, por ejemplo. Todas las bases de datos son almacenes de datos, pero no todos los almacenes de datos son bases de datos.

476

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

La desventaja de OLE DB es que segua siendo complejo; por tratarse de una interfaz basada en COM, su manejo implicaba la interaccin con libreras y no con un modelo de objetos sencillo, que formara parte del sistema operativo. ADO.ADO (ActiveX Data Objects) es un OLE DB Consumer que proporciona acceso a los orgenes de datos OLE DB a travs de un modelo de objetos sencillo. Brinda la velocidad de OLE DB, sin la complejidad derivada de lidiar con libreras COM, ya que proporciona un modelo de objetos tan sencillo como DAO. La desventaja de ADO, no obstante su potencia, flexibilidad y sencillez sigue siendo la velocidad; no debemos olvidar que agrega una capa de intermediacin, adicional a la que agrega OLE DB, por lo que entre la aplicacin y la base de datos est ADO y OLE DB, que hacen ms lento el enlace. ADO.NET. Como ya lo definimos, es un conjunto de clases que forman parte de la biblioteca de clases de .NET Framework, y que permiten a las aplicaciones tener acceso a bases de datos y otros almacenes de datos con fines de lectura, adicin o actualizacin de datos, ya sea de manera conectada o desconectada. ADO.NET permite el enlace con los almacenes de datos a travs de los proveedores de datos de .NET (.NET Data Providers). Estos controladores estn diseados para aligerar el peso de las capas que hay entre el almacn de datos y la interfaz, lo que mejora el desempeo. Dentro de las ventajas que ofrece ADO.NET, estn las siguientes:

Maneja copias locales de datos y permite el manejo de bases de datos desconectadas. Utiliza XML como formato para la transmisin de datos entre el almacn de datos y la copia local de datos; esto garantiza que los datos son autodescriptivos. Proporciona un modelo de objetos que permite programar de manera sencilla el manejo de bases de datos. La capacidad de manejar bases de datos desconectadas permite sustentar de manera eficiente las aplicaciones de computacin mvil. El esquema de bases de datos desconectadas permite una mayor escalabilidad debido a que el uso de recursos es por peticin, y no constante y concurrente. Maneja sus propios controladores de datos, que con el tiempo se irn mejorando para que su rendimiento sea mejor.

Adems, la versin 2.0 de ADO.NET ofrece lo siguiente:

MARS (Multiple Active Result Sets). Permite tener abiertos ms de un conjunto de registros en una misma conexin abierta (no slo uno, como suceda en versiones 1.0 y 1.1). Operaciones asncronas. A travs de nuevos mtodos disponibles para las cases Connection y Command, es posible ejecutar operaciones de dos vas (asncrnicas).

Captulo 15. Manejo de bases de datos con ADO.NET

477

Actualizaciones por lotes (batch updates). Es posible reproducir en el almacn de datos fsico las afectaciones realizadas a un conjunto de registros de una base de datos desconectada. Anteriormente los cambios se reproducan registro por registro.

Formas de trabajo con bases de datos en .NET


Bases de datos conectadas
Durante mucho tiempo, las aplicaciones de bases de datos podan ser de una sola forma: conectadas. Una base de datos conectada es la forma de acceso a base de datos en la cual la aplicacin est continuamente conectada al almacn de datos. Este modo de trabajo obedece al modelo peticin respuesta, clsico del esquema Cliente/Servidor. Las ventajas de una base de datos conectada son:

15

La seguridad del acceso a los datos es fcil de mantener. El acceso concurrente a los datos es fcil de controlar. Los datos se encuentran actualizados todo el tiempo.

Las desventajas de una base de datos conectada son:


La conectividad entre la aplicacin y la base de datos debe ser permanente. Cada conexin a la base de datos requiere recursos para ser mantenida, lo que implica que la escalabilidad no es muy buena. Cada conexin utiliza recursos, independientemente de si se estn realizando operaciones con la base de datos o no.

Las bases de datos conectadas se recomiendan para aquellas aplicaciones en donde los datos actualizados en tiempo real son crticos, en donde se tienen usuarios concurrentes y donde la informacin debe estar actualizada para todos todo el tiempo, como puede ser un sistema bancario, un sistema de control de la produccin o un sistema financiero para el control de movimientos en la bolsa.

478

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

FIGURA 15.3 Forma de trabajo con bases de datos conectadas.

La forma de trabajo es muy similar a la forma en que trabaja actualmente el modelo cliente/servidor: 1. 2. 3. 4. En el momento en que se requiere interactuar con el almacn de datos se establece una conexin. Al abrir una conexin, se enva al manejador de bases de datos una instruccin SQL u otra que se desee ejecutar en el servidor. El servidor ejecuta la instruccin y, en su caso, devuelve datos a travs de la conexin que se encuentra todava abierta. Al haberse concluido el trabajo, la conexin se cierra.

Bases de datos desconectadas


Con el uso de Internet, la escalabilidad se vio comprometida en los esquemas de bases de datos conectadas; simplemente, no era posible escalar los servidores de base de datos debido a que el modelo de base de datos no era eficiente en el manejo de conexiones concurrentes. En una aplicacin en Internet no sabemos cuntos usuarios desearn conectarse (y mantenerse conectados). De esto derivan las bases de datos desconectadas, aplicaciones de base de datos en las cuales la aplicacin y el almacn no estn permanentemente conectados. En este esquema, la aplicacin toma slo el conjunto de datos mnimos que requiere para trabajar y los almacena en una memoria temporal (cach) en su equipo. Sobre esos datos, la aplicacin realiza consultas y modificaciones; cuando termina, se procede a actualizar el almacn de datos. Las ventajas del esquema desconectado son:

Se puede trabajar todo el tiempo, sin la preocupacin de estar consumiendo recursos en el servidor, pues el acceso a las bases de datos es por peticin. Mientras no utilizamos la conexin, otros usuarios pueden hacer uso de ella. La escalabilidad se mantiene de manera eficaz, ya que el uso concurrente de la base de datos se mantiene al mnimo.

Captulo 15. Manejo de bases de datos con ADO.NET

479

Las desventajas de las bases de datos desconectadas son:


Los datos no estn permanentemente actualizados. Los conflictos relacionados con la modificacin de los mismos datos por diferentes usuarios deben resolverse, de tal forma que no se pierdan transacciones.

Las bases de datos desconectadas se recomiendan para aquellas aplicaciones donde la actualizacin de datos que realizan los usuarios no es necesariamente concurrente, donde no se requiere la informacin actualizada todo el tiempo y donde se tienen pocos recursos de cmputo y almacenamiento. Por ejemplo, en el caso de una agenda en lnea, correo electrnico, control de gastos personales y en toda la gama de aplicaciones ideales para dispositivos mviles, como celulares o palm-tops.

15

FIGURA 15.4 Forma de trabajo con bases de datos desconectada.

La forma en que trabaja el esquema desconectado es muy distinta a la forma de trabajar bajo el modelo cliente/servidor. Para empezar, no es necesario que exista un almacn de datos, aunque lo comn es que s exista. En este esquema: 1. 2. 3. Se realiza una conexin, de igual forma que en esquema conectado. La aplicacin, en lugar de ejecutar instrucciones sobre el almacn de datos, toma el conjunto de datos mnimos que la aplicacin requiere para trabajar. Se cierra la conexin.

480

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

4. 5. 6.

Los datos extrados se almacenan en una memoria temporal (cach) en el equipo que hizo la peticin (copia local de datos). Sobre la copia local de datos, la aplicacin realiza consultas y modificaciones. Cuando as se considere oportuno, se reproducen en el almacn de datos las modificaciones realizadas en la copia local.

Modos de trabajo con ADO.NET


Dependiendo el uso que hagamos de los Data Provider Objects y los DataSet Objects, podemos distinguir los siguientes modos de trabajo con ADO.NET:

Modo conectado. Si trabajamos slo con objetos que pertenecen a Data Provider Objects, utilizando una conexin a un almacn de datos para cada operacin que realicemos. En este esquema no se aprovechan los principios del modelo relacional, ya que slo se trabaja con matrices bidimensionales de datos (filas/columnas); la definicin de llaves, relaciones y dependencias entre tablas debe ser manejada de manera programtica. Modo parcialmente conectado. Cuando trabajamos con Data Provider Objects y DataSet Objects; en este modo se establece una conexin con el almacn de datos para leer datos y definiciones, y cargarlos en DataSet; una vez que tenemos una copia de los datos en memoria local, trabajamos con los datos ya en el DataSet. Cuando hemos concluido las modificaciones a los datos, actualizamos el almacn de datos, de tal forma que considere las modificaciones realizadas en el DataSet. En este esquema se aprovecha la capacidad de almacenamiento de los manejadores de bases de datos, as como sus definiciones del modelo de datos; adems, se aprovecha la compatibilidad de DataSet con el modelo relacional por parte del cliente, por lo que las llaves, relaciones y dependencias que se tienen en el manejador de bases de datos pueden ser reproducidas de manera local. Modo totalmente desconectado. Es cuando trabajamos slo con objetos que pertenecen a DataSet Objects y no establecemos conexin alguna con los almacenes de datos. Generalmente el trabajo en este modo es virtual, para efectos de procesamiento. En este esquema se aprovecha la compatibilidad con el modelo relacional que tiene DataSet, pero como no hay enlace con ningn almacn de datos, no se pueden adquirir definiciones y se hace necesario programar todas las especificaciones del modelo de datos de manera local.

Los captulos siguientes se especializan en cada uno de los diferentes modos de trabajo; se har especial nfasis en el modo parcialmente conectado, pues es el modo ms frecuente de trabajo, tanto en aplicaciones Web como en aplicaciones de escritorio y cliente/servidor.

Captulo 15. Manejo de bases de datos con ADO.NET

481

Esta preferencia por el modelo parcialmente conectado no es una casualidad, ya que en l convive el manejador de bases de datos y ADO.NET, obtenindose lo mejor de los dos mundos.

Proveedores de datos de .NET Framework


Un proveedor de datos .NET Framework (.NET Framework Data Provider) es un conjunto de clases de .NET Framework que permiten la conexin a una base de datos en particular, as como la ejecucin de comandos sobre sta y la recuperacin de datos. El acceso a las bases de datos a travs de ADO.NET se lleva a cabo de manera optimizada, de tal manera que se utiliza la mnima intermediacin posible, al mismo tiempo que se proveen recursos para el manejo de datos en un esquema orientado a objetos. .NET Framework incluye los siguientes proveedores de datos:

15

Proveedor

Uso en

.NET Framework Data Provider for SQL

Server proporciona el acceso a bases de datos Microsoft SQL Server 7.0 y posteriores. Namespace: System.Data.SqlClient

.NET Framework Data Provider for OLE DB

Proporciona el acceso a bases de datos expuestas a travs de OLE DB. Se recomienda para el acceso a SQL Server 6.5 y Access. Namespace: System.Data.OleDb

.NET Framework Data Provider for ODBC

Proporciona el acceso a bases de datos expuestas a travs de ODBC. Namespace: System.Data.Odbc

.NET Framework Data Provider for Oracle

Proporciona el acceso a bases de datos Oracle versin 8.1.7 y posteriores. Namespace: System.Data.OracleClient

Prcticamente es posible conectarse desde .NET a cualquier plataforma de bases de datos. Los proveedores de datos de .NET Framework permiten interactuar con los manejadores de bases de datos utilizando Visual Studio como herramienta de desarrollo y depuracin, incluso en ambientes que no son de programacin.

482

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejercicio 15.1
Uso de consultas y procedimientos almacenados con Server Explorer

Aprender a utilizar la herramienta Server Explorer. 1. Abra la solucin Ejercicios, que debe encontrarse en (archivo de extensin sln).
C:\APVBNETVS\Ejercicios

Adicin de una conexin a Server Explorer


2. Abra la herramienta Server Explorer, que permite establecer conexin a bases de datos en tiempo de diseo. Seleccione la opcin View - Server Explorer (oprima las teclas CTRL-ALT-S). Aparecer la siguiente herramienta:

FIGURA 15.5 Server Explorer.

3.

4.

5.

La herramienta tiene su propia barra de herramientas, que incluye botones para refrescar el rbol de conexiones, detener el proceso de refrescado y establecer la conexin a una base de datos. Suponga que tiene una instancia de SQL Server de nombre APRENDAWS. Imagine que quiere establecer una conexin con la base de datos de prueba Pubs y que se enlazar utilizando la cuenta de administracin sa, cuya contrasea es secreto. sta es una parte del diagrama de entidad relacin de la base de datos Pubs:

Captulo 15. Manejo de bases de datos con ADO.NET

483

15

6.

Las tablas contienen lo siguiente:


Tabla Resumen de contenido

titles

Contiene informacin de los ttulos (libros) que pueden ser comercializados. Contiene la informacin de las casas editoriales que comercializan los ttulos. Contiene la informacin de los empleados de las casas editoriales. Contiene la informacin de los puestos de trabajo que los empleados de las editoriales pueden tener. Contiene la informacin de los autores que tienen obras publicadas. Contiene la informacin de qu autores escribieron qu ttulos. Contiene la informacin de las ventas de los ttulos. Contiene la informacin de los establecimientos (tiendas/libreras) en donde se realizan las ventas de los ttulos.

publishers

employee jobs

authors titleauthor sales stores

484

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

7.

Haga clic en el botn Connect to Database de la barra de herramientas de Server Explorer. Aparecer un asistente para la conexin.

8.

En Data source especifique el tipo de proveedor de datos con el que desee trabajar. En este caso utilizaremos SqlClient, dado que nos estamos enlazando a una base de datos SQL Server 2000. En Server name especifique el nombre de la instancia a la que desea enlazarse, que en este caso es APRENDAWS. En Log on to the server seleccione el uso de autenticacin basada en SQL Server (Use SQL Server Authentication); escriba en User name la cuenta sa y en Password secreto. En Connect to a database, especifique en Select or enter a database name el nombre de la base, Pubs. Proporcionados estos datos, haga clic en el botn Test Connection, con lo que comprobar si la informacin que ha proporcionado es correcta. Si todo es correcto, aparecer un mensaje de alerta como el siguiente:

Captulo 15. Manejo de bases de datos con ADO.NET

485

9.

La base de datos y todos los elementos manejables a travs de Visual Studio son mostrados en el rbol de conexiones.

15

Visualizacin de los datos de una tabla desde Visual Studio


10. Uno de los aspectos ms sobresalientes de Visual Studio es que se integra de manera plena con algunos manejadores de bases de datos, como es el caso de SQL Server. 11. Seleccione en el rbol de conexiones el nodo correspondiente a la tabla authors de la base de datos Pubs. Despliegue el men contextual y seleccione Show Table Data. Con ello se deber mostrar y editar los datos de la tabla seleccionada.

486

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

12. Cierre el documento donde aparecen los resultados de la consulta.

Adicin de una vista a la base de datos con Query Designer


13. En el rbol de conexiones seleccione el nodo Views de la base de datos Pubs. Despliegue el men contextual y seleccione Add New View. Realizaremos una vista que contenga la consulta de un listado de ventas, en donde aparezca el nombre de la tienda (stores. stor_name), el ttulo vendido (titles.title), el precio unitario (titles. price), la cantidad vendida (sales.qty) y el monto de la venta (sales.qty * titles.price) de las ventas realizadas en el estado de California (stores.state=CA). Inicialmente aparecer la ventana Add Table, en donde se seleccionan todas las tablas involucradas; en nuestro caso son stores, titles y sales. Seleccione cada una de las tablas haciendo clic sobre el nombre de la misma y luego en Add. Cuando haya agregado todas, haga clic en Close. Tambin puede presionar la tecla Ctrl mientras selecciona las tres tablas. Haga clic en los botones Add y Close.

Captulo 15. Manejo de bases de datos con ADO.NET

487

14. Aparecer el asistente de consultas (Query Designer), en el que se seleccionarn slo los campos que nos interesan: stores.stor_name, titles.title, stores.state, titles.price, sales.qty. FIGURA 15.6 Query Designer.

15

15. Los cambios que realice en la seleccin visual de columnas se reflejarn de manera automtica en los atributos de columna y en la instruccin SQL. 16. En los atributos de columna, en el atributo Filter del campo state, escriba la condicin = CA. Vea cmo la instruccin SQL cambia automticamente.

17. Ahora agregaremos el campo calculado a nuestra consulta. En los atributos de columna, despus de la columna state, escriba sales.qty*titles.price en Column y VentasTotales en el atributo Alias.

488

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

18. Revise la sintaxis, haciendo clic en el botn Verify SQL Syntax

19. Ejecute la consulta haciendo clic en el botn Execute SQL , para ver si los resultados son correctos. Los resultados deben aparecer en el rea de resultados.

20. Si todo est correcto, guarde la vista en la base de datos, oprimiendo las teclas Ctrl-S y asignando el nombre de VentasCA.

21. Cierre Query Designer. 22. Compruebe que en la base de datos ya se ha agregado una vista ms.

Adicin y prueba de un stored procedure con Visual Studio


23. Visual Studio es una excelente herramienta para la edicin de procedimientos almacenados, conocidos tambin como Stored Procedures, que son instrucciones precompiladas de SQL que se almacenan en la misma base de datos. Una de sus mayores ventajas es que podemos agregar puntos de interrupcin en el cdigo, as como probar los procedimientos de una manera sencilla. 24. Realizaremos un procedimiento almacenado que devuelva las ventas realizadas en un estado determinado. 25. Seleccione en el rbol de conexiones el nodo Stored Procedures de la base de datos Pubs. Despliegue el men contextual y seleccione Add New Stored Procedure. 26. Aparecer, precodificado en Text Editor, un procedimiento almacenado.

Captulo 15. Manejo de bases de datos con ADO.NET

489

15

27. Modifique el cdigo para que quede como el siguiente. Vea cmo Text Editor delimita las instrucciones SQL mientras codifica.

Codificacin de dbo.StoredProcedures.AprendaWS.Pubs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE PROCEDURE dbo.TitulosVendidosEstado ( @state char(2) ) AS BEGIN select titles.title from sales, titles, stores where titles.title_id = sales.title_id and sales.stor_id = stores.stor_id and stores.state = @state END RETURN

28. El procedimiento espera que se proporcione como parmetro el estado del que se desea obtener informacin (lnea 3). Con base en ello, se extraern los nombres de los ttulos que hayan sido vendidos en el estado proporcionado. Al guardar el procedimiento almacenado (oprima las teclas Ctrl-S) se realizar una verificacin de sintaxis y se almacenar el procedimiento en la base de datos. La instruccin cambiar automticamente, de CREATE PROCEDURE a ALTER PROCEDURE, para futuros cambios.

490

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

NOTA
Para adquirir el dominio en la codificacin de procedimientos almacenados, adquiera el libro Aprenda Practicando Microsoft SQL Server 2000, del mismo autor de esta obra, en donde se aborda la programacin avanzada de Transact SQL, as como la administracin bsica de bases de datos SQL Server.

29. Colquese en cualquier parte del procedimiento almacenado que est editando y despliegue el men contextual, seleccionando la opcin Execute.

30. Como el procedimiento almacenado requiere valores en los parmetros, se desplegar la ventana Run Stored Procedure, solicitando los valores correspondientes. Proporcione como valor CA y haga clic en Ok.

Captulo 15. Manejo de bases de datos con ADO.NET

491

31. La consulta se realizar, mostrando el resultado en Output de Visual Studio.

15

32. Cierre Text Editor. FIN DEL EJERCICIO *

Modelo de objetos de ADO.NET


El modelo de objetos de ADO.NET se divide en dos grandes bloques: Data Provider Objects. Son aquellos objetos que se encargan del manejo eficiente del flujo de datos desde el almacn de datos hasta la copia local de datos (cach). DataSet Objects. Son aquellos objetos que, una vez que se tiene la copia local de datos, permiten agregar, modificar o recuperar informacin de la copia local de manera desconectada. Para el uso de estos objetos se requiere la compatibilidad con XML de .NET Framework. Los DataSet Objects son tiles slo si pretende manejar bases de datos desconectadas (lo que no es siempre necesario en una aplicacin). La primera decisin que debe llevar a cabo al momento de desarrollar una aplicacin con manejo de base de datos es determinar si requiere o no manejar bases de datos desconectadas. En caso de optar por la respuesta afirmativa, identifique en qu funciones de la aplicacin sern utilizadas. El manejo de bases de datos desconectadas es muy potente, pero tambin es complejo y exige un volumen considerable de recursos.

492

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Data Provider Objects


Los objetos relacionados con los controladores de datos .NET, llamados Data Provider Objects, son aquellos que se encargan de la comunicacin de paquetes de datos entre el almacn de datos y la copia local de datos (a utilizar de manera desconectada). Estos objetos se encargan de respetar los convencionalismos de la base de datos, de comunicarse con ella en el formato en que sta reconozca los paquetes de datos, generando una copia local de datos en el cliente de la aplicacin. FIGURA 15.7 DataProvider Objects.

Bsicamente, los Data Provider Objects de ADO.NET son los siguientes:


Objeto Connection Funcin

Permite establecer la conexin con un almacn de datos. Se debe definir un objeto Connection por cada enlace a almacn de datos requerido por la aplicacin. Los objetos DataReader, DataAdapter y Command requieren de un objeto Connection para funcionar.

Command

Ejecuta comandos SQL y, opcionalmente, devuelve datos del almacn de datos. Se requiere un objeto Command para cada instruccin a enviar al almacn de datos. DataReader requiere de un objeto Command para realizar la lec-

Captulo 15. Manejo de bases de datos con ADO.NET

493

tura; DataAdapter requiere un objeto Command por cada operacin a realizar (SELECT, INSERT, UPDATE y DELETE). En caso de que Data Adapter no realice alguna de las operaciones de actualizacin, no ser necesario definir Command.
DataReader

Permite generar un flujo de datos (data stream) de slo lectura con el almacn de datos. El objeto DataReader se puede utilizar para lecturas slo hacia delante; no es requerido por ningn objeto, por lo que su uso es opcional.

15

DataAdapter

Permite generar un flujo de datos (data stream) de lectura/escritura entre la copia local de datos y el almacn de datos. Se encarga de cargar datos del almacn de datos en el DataSet (SELECT) y de reproducir en el almacn de datos los cambios realizados en el DataSet (INSERT, UPDATE, DELETE) de manera desconectada. Se requiere si se desea la interaccin entre un DataSet y un almacn de datos.

En el momento en que DataReader o DataAdapter poseen datos, ya se tiene una copia local de datos en el equipo cliente. Los Data Provider Objects son llamados as porque, dependiendo del proveedor o controlador de datos que se utiliza, se les antepone un prefijo que determina su origen.

Objeto Connection DataReader DataAdapter Command

Para SQL Server (SqlClient) SqlConnection SqlDataReader SqlDataAdapter SqlCommand

Para otras bases de datos (OleDb) OleDbConnection OleDbDataReader OleDbDataAdapter OleDbCommand

Para Oracle (Oracle) OracleConnection OracleDataReader OracleDataAdapter OracleCommand

En manuales y guas de estudio, suele referirse a los objetos como xxxCommand o xxxDataReader, de tal forma que, en caso de que aparezcan nuevos controladores y proveedores de datos, usted slo tenga que aprender el prefijo que desea aplicar, aprovechando as el conocimiento del modelo de objetos que ya tiene. Dependiendo del controlador de datos .NET que se desee utilizar, el nombre de los objetos vara.

494

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Adems de estos objetos, .NET Framework tambin provee los siguientes objetos relacionados con el proveedor de datos (dependiendo del manejador de bases de datos utilizados, estarn disponibles o no).
Objeto Transaction Funcin

Permite listar comandos como parte de una transaccin para el origen de datos. Permite generar automticamente propiedades de comandos y parmetros, con base en la informacin de DataAdapter. Permite crear y manejar cadenas de conexin. Define valores de entrada, salida y retorno para comandos y procedimientos almacenados. Representa errores que ocurren en el origen de datos. Expone informacin de los errores que ocurren en el origen de datos. Permite establecer los atributos de seguridad y control de acceso a los recursos de datos.

CommandBuilder

ConnectionStringBuilder Parameter

Exception Error

ClientPermission

DataSet Objects
El hecho de que se tenga un flujo de datos con el almacn de datos no implica que podamos manejar los datos tal y como si dispusiramos de la base de datos en nuestro equipo. Para poder hacerlo, requerimos de un conjunto de objetos que nos permitan disponer de la copia local de datos, con todas las particularidades de una base de datos; nos referimos a DataSet Objects.
DataSet

se compone de un conjunto de datos locales de parte del cliente y permite operar sobre ellos con toda la funcionalidad de un manejador de base de datos, lo cual posibilita la adicin y modificacin de registros, y la realizacin de consultas, por ejemplo, respetando las reglas de las bases de datos originales y con la ventaja de que todo sucede de manera desconectada. Si lo que vamos a desarrollar son aplicaciones conectadas, tal y como lo habamos hecho siempre, probablemente DataSet no nos resultar tan maravilloso. Sin embargo, creemos que al igual que todo el mundo, usted tiene inters en las aplicaciones Web y, por tanto, le interesan las bases de datos desconectadas.

Captulo 15. Manejo de bases de datos con ADO.NET

495

Si usted conoce las bases de datos relacionales, ver que DataSet y sus objetos asociados son prcticamente una base de datos relacional. FIGURA 15.8 DataSet Objects.

15

Bsicamente, los DataSet Objects son los siguientes:


Objeto DataSet Funcin

Representa la copia local y desconectada de datos, residentes en memoria. Se requiere un objeto de manera local.
DataSet

por cada modelo de datos a representar

DataTable

Representa una tabla dentro del modelo de datos. Se organiza a travs de la coleccin Tables, que depende de DataSet. Se requiere un objeto DataTable por cada tabla del modelo de datos a representar de manera local.

DataView

Representa una vista personalizada de los datos de un DataTable, permitiendo ordenamiento, filtrado, bsqueda, edicin y navegacin. Representa una columna o campo perteneciente a una tabla determinada. Se organiza a travs de la coleccin Columns, que depende de DataTable. Se requiere un objeto DataColumn por cada columna o campo del modelo de datos a representar de manera local.

DataColumn

DataRow

Representa una fila o un registro perteneciente a una tabla determinada. Se organiza a travs de la coleccin Rows, que depende de DataTable.

496

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Se requiere un objeto DataRow por cada registro del modelo de datos a representar de manera local.
Constraint

Representa una restriccin de valor nico o llave fornea, que se aplica a una tabla determinada. Se organiza a travs de la coleccin Constraints, que depende de DataTable. Se requiere un objeto Constraint por cada restriccin de valor nico (generalmente, esto es aplicable a las llaves primarias, aunque no necesariamente), y tambin uno por cada llave fornea definida en el modelo de datos a representar de manera local.

DataRelation

Representa una relacin entre tablas. Se organiza a travs de la coleccin Relations, que depende de DataSet. Se requiere un objeto DataRelation por cada relacin entre tablas existente en el modelo de datos a representar de manera local.

DataSet

se apoya fuertemente en el manejo de colecciones. Como todas las colecciones, se puede referir el contenido a travs de Items o bien, sealando el identificador de elemento que corresponda de manera explcita.

Cmo realizar la conexin


Realizar la conexin consiste en establecer un enlace para el flujo de datos entre el almacn de datos y el modelo de objetos de ADO.NET. Para realizarlo, requerimos el objeto Connection, que forma parte de los Data Provider Objects.

Objeto Connection
El objeto Connection sirve para establecer y abrir un flujo de datos entre la interfaz de usuario y el almacn de datos de un determinado tipo. Cuando utilizamos el objeto Connection, debemos especificar a qu tipo de almacn de datos nos vamos a conectar y proporcionar toda la informacin necesaria para establecer el enlace. Cuando establecemos el enlace, se dice que tenemos una conexin abierta. Otros objetos pertenecientes a Data Provider Objects, como DataReader y DataAdapter, dependen de la existencia previa de una conexin abierta; esto resulta lgico si consideramos que si no hay una conexin abierta con un almacn de datos, no puede haber lectura ni intercambio de datos e instrucciones.

Captulo 15. Manejo de bases de datos con ADO.NET

497

El objeto Connection tiene diferentes implementaciones y vara dependiendo del tipo de almacn de datos con el que nos queramos conectar; sin embargo, tiene un cuadro de miembros bsicos aplicables a todas las diferentes implementaciones. A continuacin se mencionan los miembros comunes a todos los diferentes tipos de almacn de datos.

Miembros ms utilizados en Connection


Al utilizar este tipo de control, los desarrolladores generalmente utilizan los siguientes miembros:

15

Propiedades
Propiedad ConnectionString Utilidad

Devuelve o establece la cadena utilizada para abrir una base de datos. Devuelve el tiempo de espera para intentar establecer una conexin antes de detenerse y generar un error. El tiempo es expresado en segundos. Devuelve el nombre de la base de datos actual o de la que se va a utilizar una vez que se abre la conexin. Devuelve el nombre de la instancia de SQL Server con la que se va a establecer la conexin. Obtiene una cadena que contiene la versin del servidor a la que se conecta el cliente. Obtiene el estado actual de la conexin.

ConnectionTimeout

Database

DataSource

ServerVersion

State

Mtodos
Mtodo BeginTransaction Accin que realiza BeginTransaction()

Inicia una transaccin de base de datos.


BeginTransaction(aislamiento)

Inicia una transaccin de base de datos con el valor IsolationLevel actual. El argumento aislamiento es el nivel de aislamiento de transaccin de la conexin.

498

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Close

Close()

Cierra la conexin al origen de datos. ste es el mtodo recomendado para cerrar conexiones abiertas.
CreateCommand CreateCommand()

Crea y devuelve un objeto Command asociado con Connection.


Dispose Dispose()

Libera los recursos utilizados.


Open Open()

Abre una conexin de base de datos con los valores de propiedad que especifica ConnectionString.

Eventos
Evento Disposed StateChanged Causas que lo originan

Se produce cuando el objeto ha sido eliminado. Se produce cuando el estado de la conexin cambia.

Se requiere al menos una conexin por cada almacn de datos utilizado por nuestro programa, aunque los almacenes de datos pertenezcan a distintos tipos. Para establecer un enlace, es necesario que se proporcione informacin relativa al almacn de datos a travs de la cadena de conexin, representada por la propiedad ConnectionString; una vez especificada la cadena de conexin se puede intentar establecer el enlace utilizando para ello el mtodo Open. Para no saturar los canales de comunicacin, el enlace se intenta establecer en un tiempo determinado en segundos, que se puede especificar a travs de la propiedad ConnectionTimeout; si no se especifica el tiempo, de manera predeterminada ser de 15 segundos. Cuando se utilizan modelos de datos especficos para una base de datos, como SqlClient y OracleClient, no queda duda del tipo de almacn de datos con el cual nos queremos conectar; el caso de OleDb es diferente, ya que se puede intentar un enlace con todas aquellas bases de datos compatibles con OLE DB. De esto deriva la necesidad de aclararle al sistema qu comportamiento deseamos para el proveedor de datos (Provider).

Captulo 15. Manejo de bases de datos con ADO.NET

499

Propiedad ConnectionString
La ms importante propiedad de Connection es ConnectionString, ya que proporciona informacin que identifica al almacn de datos y le proporciona informacin requerida para la conexin, utilizando para ello parmetros textuales, en forma de igualaciones separadas por punto y coma (;). Al valor asignado a ConnectionString se le ha llamado cadena de conexin. El formato sera el siguiente:
Connection.ConnectionString=parmetro=valor;parmetro=valor;

15

El valor de la propiedad puede cambiarse slo si no se tiene la conexin abierta. Los parmetros a utilizar al elaborar una cadena de conexin son:
Parmetro Provider Funcin

Es til slo si se est utilizando OleDb. Establece el nombre del controlador que sustenta la conexin. Establece el tiempo en segundos que se intentar establecer conexin con el almacn de datos. Initial Catalog Establece el nombre de de la base de datos o almacn de datos con el que nos queremos conectar. En el caso de bases de datos basadas en archivo fsico, como Access, es el nombre fsico del archivo de bases de datos. Nombre del almacn de datos. En el caso de SQL Server, es el nombre del servidor de base de datos; en el caso de otras bases de datos (por ejemplo una base de datos en Access), es el nombre fsico del archivo que constituye el almacn de datos. Contrasea de la cuenta SQL Server, para permitir el acceso a la base de datos. Cuenta de SQL Server, para permitir el acceso a la base de datos. Establece si la conexin ser segura o no. Acepta los valores True y False.

Connection Timeout

Data Source

Password

User ID Integrated Security

Connection Pooling
ADO.NET administra las conexiones de manera eficiente, pues posee un concepto denominado Connection Pooling, que se encarga de revisar constantemente el uso que se le da a

500

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

una conexin. En caso de que una conexin no sea utilizada, proceder a la desconexin automtica, reactivndola en el momento en que se intente la utilizacin del flujo de datos, siempre y cuando los objetos sigan vigentes. Se recomienda, sin embargo, cerrar las conexiones de manera explcita, ya que no hay ms eficiencia que eso. Connection Pooling se encarga de nuestro trabajo si somos descuidados en nuestra tcnica de programacin; como no lo somos, no tendr mucho trabajo con nuestra forma de programar. Si desea ir ms all, puede no slo cerrar la conexin; tambin puede liberar los recursos utilizados en el servidor para mantener la conexin a travs del mtodo Dispose.

Cerrado de conexin
Aunque ADO.NET cerrar las conexiones que estn inactivas durante cierto tiempo, dejando latente la conexin mediante Connection Pooling, no hay nada ms preciso que hacer uno mismo la tarea de cerrado de conexin. Para cerrar una conexin abierta puede utilizar el mtodo Close. La conexin se cerrar y reducir considerablemente los recursos utilizados en el equipo para mantener la conexin. Sin embargo, se mantiene la conexin en estado latente (connection pooling) hasta que el objeto es desechado por completo. El mantener la conexin en estado latente consume recursos, aunque pocos. Si definitivamente ya no utilizar la conexin, lo recomendable es cerrarla y desechar el objeto definitivamente, utilizando para ello el mtodo Dispose.

Proceso de conexin
Generalmente el proceso consiste en lo siguiente: 1. 2. 3. 4. 5. 6. 7. Asegurarse de que se ha importado el namespace requerido para tener acceso al proveedor de datos correspondiente. Declarar variables objeto basadas en el objeto Connection del proveedor de datos seleccionado. Instanciar el objeto Connection. Establecer propiedades de conexin; la propiedad indispensable es ConnectionString, que especificar el almacn de datos con el cual nos enlazaremos. Abrir la conexin, aplicando el mtodo Open. Abierto el flujo de datos se hace lo que se requiere hacer con los datos: adicin, modificacin, eliminacin o consulta de registros. Se cierra la conexin usando el mtodo Close.

Captulo 15. Manejo de bases de datos con ADO.NET

501

Ejercicio 15.2
Establecimiento de una conexin a base de datos de forma programtica En este ejercicio realizaremos una conexin a una base de datos SQL Server mediante programacin. Suponga que tiene una instancia de SQL Server, de nombre APRENDAWS. Imagine que desea establecer una conexin con la base de datos de prueba Pubs y que se enlazar utilizando la cuenta de administracin sa, cuya contrasea es secreto. 1. 2. 3. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Console Application, llamado Conecta. Edite el programa de tal forma que aparezca de la siguiente manera:

15

Codificacin de Conecta Module1.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.Data.SqlClient Module Module1 Sub Main() Dim conn As SqlConnection conn = New SqlConnection() conn.ConnectionString = Data Source=aprendaws; & _ Initial Catalog=pubs;Persist Security Info=True; & _ User ID=sa;Password=secreto conn.Open() Console.WriteLine(conn.State.ToString()) conn.Close() Console.Write(Pulse INTRO para continuar) Console.ReadLine() End Sub End Module

Ejecucin guiada de Conecta Module1.vb

4.

Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha rea-

502

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

5.

6. 7.

lizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). En la lnea 4 se importa el espacio de nombres requerido para un enlace a una base de datos en SQL Server. El procedimiento de conexin se realiza de la siguiente forma: se declara una variable a travs de la cual se manejar programticamente la conexin (lnea 9), se genera una instancia de Connection sobre la variable (lnea 10), se establece la cadena de conexin (lnea 11) y se abre el flujo de datos con el almacn de datos (lnea 14). La lnea 15 muestra de forma textual el estado de la conexin. Si la conexin fue exitosa, se desplegar Open. Finalmente se cierra la conexin (lnea 16) para evitar el consumo innecesario de recursos. Si todo ocurri como se esperaba, la salida ser la siguiente:

Open Pulse INTRO para continuar

8.

Aprovechando la flexibilidad de Visual Basic, se puede hacer ms compacto el cdigo. Vea las siguientes equivalencias posibles:

Declaracin, instanciacin y asignacin de cadena de conexin por separado. 1 2 3 4 Dim conn As SqlConnection conn = New SqlConnection() conn.ConnectionString = CadenaDeConexin conn.Open()

Declaracin, instanciacin y asignacin de cadena de conexin por separado. 1 2 3 Dim conn As New SqlConnection() conn.ConnectionString = CadenaDeConexin conn.Open() Declaracin, instanciacin y asignacin de cadena de conexin juntas. 1 2 Dim conn As New SqlConnection(CadenaDeConexin) conn.Open()

Captulo 15. Manejo de bases de datos con ADO.NET

503

La versin ms compacta de nuestro programa sera la siguiente:

Codificacin de Conecta Module1.vb

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

Option Explicit On Option Strict On Imports System.Data.SqlClient Module Module1 Sub Main() Dim conn As New SqlConnection(Data Source=aprendaws; & _ Initial Catalog=pubs;Persist Security Info=True; & _ User ID=sa;Password=secreto conn.Open() Console.WriteLine(conn.State.ToString()) conn.Close() Console.Write(Pulse INTRO para continuar) Console.ReadLine() End Sub End Module

15

9.

Para implementar la conexin en cualquier otro manejador basta con especificar el espacio de nombres que corresponda, utilizar los objetos Data Provider pertinentes y colocar una cadena de conexin apropiada.

FIN DEL EJERCICIO *

Command
Comando. El objeto Command permite ejecutar comandos sobre un almacn de datos sobre el cual mantenemos conexin; opcionalmente, un comando puede tambin retornar datos extrados del almacn de datos. Un objeto Command siempre acta sobre una conexin abierta (Connection), es de una naturaleza o tipo especfico (CommandType), ejecuta una instruccin determinada (CommandText) y realiza la ejecucin de una manera especfica que determina los efectos producidos por el comando.

504

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Miembros ms utilizados en Command


Al utilizar este tipo de control, los desarrolladores generalmente utilizan los siguientes miembros:

Propiedades
Propiedad CommandText Utilidad

Devuelve o establece el procedimiento almacenado, la instruccin de SQL o la tabla de la que se extraern datos. Su contenido depende de lo que se especifique en la propiedad CommandType. Obtiene o establece un valor que indica cmo se interpreta la propiedad CommandText. Obtiene o establece el objeto tancia de objeto Command.
Connection

CommandType

Connection

que utiliza esta ins-

Parameters Transaction

Obtiene el objeto ParameterCollection. Obtiene o establece del objeto la Transaction en la que se ejecuta el objeto Command. Obtiene o establece la manera en que se aplican los resultados de comando a DataRow cuando lo utiliza el mtodo Update del DataAdapter.

UpdateRowSource

Mtodos
Mtodo Cancel Cancel() Accin que realiza

Intenta cancelar la ejecucin del objeto Command.


CreateParameter CreateParameter ()

Crea una nueva instancia de un objeto Parameter.


Dispose Dispose()

Libera los recursos utilizados por Component.

Captulo 15. Manejo de bases de datos con ADO.NET

505

Eventos
Evento Disposed Causas que lo originan

Se produce cuando el objeto ha sido eliminado.

La siguiente seccin describe algunas particularidades de los comandos para cada uno de los proveedores de datos ms comunes. Tambin muestra el control por medio del cual los podemos invocar desde Toolbox en Visual Studio.

15

Tipos de comandos
Los tipos de comando que se tienen son los siguientes:
Tipo de comando StoredProcedure Descripcin

Si lo que se va a ejecutar es un procedimiento almacenado (Stored Procedure) de SQL Server o de Oracle, en la propiedad CommandText debe especificarse el nombre del procedimiento almacenado a ejecutar. El procedimiento almacenado puede devolver o no valores.

TableDirect

Si se desea recuperar el contenido de una tabla o tablas, en la propiedad CommandText debe especificarse el nombre de la tabla o tablas a recuperar. Si son ms de una, debe proporcionarse la lista de tablas, separadas por comas, lo que producir como resultado su unin (Join). Si se desea ejecutar una instruccin SQL, en CommandText debe especificarse una instruccin SQL vlida. Dependiendo del manejador de base de datos, es posible que el dialecto SQL cambie; deber ajustarse a las instrucciones SQL reconocidas por el manejador de bases de datos que est utilizando.

Text

En caso de que un comando devuelva valores, es necesario que stos se almacenen en un objeto contenedor de datos. Un objeto contenedor de datos es aqul que puede almacenar datos extrados a travs de un flujo de datos en una conexin abierta. Son objetos contenedores de datos DataSet y DataReader.

506

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Tipos de ejecucin de los comandos


Los tipos de ejecucin que permite Command son:
Tipo de comando ExecuteReader Descripcin

Mtodo que ejecuta una consulta que retorna un flujo de datos en forma de registros. Este tipo de ejecucin utiliza a DataReader como contenedor de datos. Mtodo que ejecuta una consulta de valor simple, es decir, un solo dato. Este tipo de ejecucin devuelve slo una fila y una columna; al igual que ExecuteReader, utiliza a DataReader como contenedor de datos. Mtodo que ejecuta una instruccin SQL que no devuelve valores, como puede ser INSERT, DELETE o UPDATE.

ExecuteScalar

ExecuteNonQuery

DataReader
Lector de datos. Los Data Provider Objects proporcionan un objeto que permite la lectura de datos slo hacia delante, llamado DataReader. En virtud de que ADO.NET es muy extenso, no profundizaremos en las particularidades de DataReader ms all de lo que requerimos en este momento para comprobar nuestro trabajo con las bases de datos. DataReader es especfico para cada proveedor de datos, por lo cual tendremos SqlDataReader, OleDbDataReader, OracleDataReader y as sucesivamente. DataReader trabaja sobre una conexin abierta a travs de un comando que deber ser ejecutado bajo el mtodo ExecuteReader. En el caso de SQL Server 2000, se puede ejecutar ExecuteXMLReader, aprovechando la compatibilidad con XML que provee el manejador de bases de datos. Cuando ya tenemos el DataReader trabajando en conjunto con una conexin y un comando, podemos leer los datos a travs de un mtodo llamado Read.
DataReader

lee registros de un almacn de datos uno tras otro. Cada registro que lee es puesto en un rea temporal de cach, desde donde los datos pueden ser tomados proporcionando el nombre de los campos a recuperar.

El mtodo Read tiene una doble funcin: primero, evala si es posible cargar un registro al rea de cach; de ser as, carga el registro, y al mismo tiempo devuelve True. Si no es posible cargar un registro al rea de cach, significa que ya hemos llegado al fin de archivo; en ese caso Read no cargar nada al cach y devolver False.

Captulo 15. Manejo de bases de datos con ADO.NET

507

Un aspecto importante es que DataReader utiliza totalmente la conexin, de tal forma que no se puede ejecutar sobre la conexin ninguna otra operacin mientras DataReader est en proceso de lectura.

Ejercicio 15.3
Uso de comandos para ejecutar procedimientos almacenados y uso de DataReader En este ejercicio realizaremos una conexin a una base de datos SQL Server mediante programacin y ejecutaremos un comando con el fin de poblar un DataReader y mostrar el contenido. Utilizar gran parte del cdigo del ejercicio anterior y adems consumiremos el procedimiento almacenado TitulosVendidosEstado. 1. 2. 3. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Console Application, llamado LeeDatos. Edite el programa de tal forma que aparezca de la siguiente manera:

15

Codificacin de LeeDatos Module1.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.Data.SqlClient Module Module1 Sub Main() Dim Estado As String Console.Write(Siglas del estado: ) Estado = Console.ReadLine() Dim conn As SqlConnection conn = New SqlConnection() conn.ConnectionString = Data Source=aprendaws; & _ Initial Catalog=pubs;Persist Security Info=True; & _ User ID=sa;Password=secreto conn.Open() Dim cmd As SqlCommand cmd = New SqlCommand() cmd.CommandText = _ String.Format(EXEC TitulosVendidosEstado {0}, Estado)

508

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

cmd.Connection = conn Dim Lector As SqlDataReader Lector = cmd.ExecuteReader Do While Lector.Read() Console.WriteLine(Lector(title)) Loop Lector.Close() conn.Close() Console.Write(Pulse INTRO para continuar) Console.ReadLine() End Sub End Module

Ejecucin guiada de LeeDatos Module1.vb

4.

5. 6.

7.

8. 9.

Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). La conexin se realiza de la misma forma que en el ejercicio anterior. En la lnea 21 se declara la variable a travs de la cual se ha de manejar el comando. En la lnea 22 se asigna una instancia de SqlCommand a la variable que acabamos de declarar. En la lnea 23 se asigna la instruccin SQL que deseamos que se ejecute a travs del comando, y en la lnea 25 especificamos sobre qu conexin se ha de ejecutar el comando. En la lnea 27 se declara una variable para el manejo del lector de datos (DataReader) que, como podr observar, no requiere ser instanciado de forma explcita. En la lnea 28 decimos que el resultado de ejecutar el comando provee de datos al lector. En la lnea 30 comienza la exploracin del lector de datos. Mientras el lector pueda leer un registro de datos, se estar mostrando la columna title. Proporcione como dato de entrada CA. Al ejecutarse el procedimiento almacenado, devolver todos los ttulos vendidos en el estado de California; los datos se asignarn al DataReader. Se muestra el contenido en el Do While. Si todo ocurri como se esperaba, la salida ser la siguiente:
Siglas del estado: CA Secrets of Silicon Valley Is Anger the Enemy? Is Anger the Enemy?

Captulo 15. Manejo de bases de datos con ADO.NET

509

Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean Fifty Years in Buckingham Palace Kitchens Sushi, Anyone? Straight Talk About Computers Silicon Valley Gastronomic Treats You Can Combat Computer Stress! Pulse INTRO para continuar

10. Aprovechando la flexibilidad de Visual Basic se puede hacer ms compacto el cdigo. Vea las siguientes equivalencias posibles:
Declaracin, instanciacin y asignacin de cadena de conexin por separado. 1 2 3 4 5 6 Dim cmd As SqlCommand cmd = New SqlCommand() cmd.CommandText = _ String.Format(EXEC TitulosVendidosEstado {0}, Estado) cmd.Connection = conn Dim Lector As SqlDataReader Lector = cmd.ExecuteReader() Declaracin, instanciacin y asignacin de comando y conexin juntas. 1 2 Dim cmd As New SqlCommand( _ String.Format(EXEC TitulosVendidosEstado {0}, _ Estado),conn) Dim Lector As SqlDataReader = cmd.ExecuteReader()

15

La versin ms compacta de nuestro programa sera la siguiente:

Codificacin de LeeDatos Module1.vb 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Option Explicit On Option Strict On Imports System.Data.SqlClient Module Module1 Sub Main() Dim conn As New SqlConnection(Data Source=aprendaws; & _ Initial Catalog=pubs;Persist Security Info=True; & _ User ID=sa;Password=secreto conn.Open() Dim cmd As New SqlCommand( _ String.Format(EXEC TitulosVendidosEstado {0}, _ Estado),conn) Dim Lector As SqlDataReader = cmd.ExecuteReader() Do While Lector.Read()

510

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

19 20 21 22 23 24 25 26 27 28 29 30

Console.WriteLine(Lector(title)) Loop Lector.Close() conn.Close() Console.Write(Pulse INTRO para continuar) Console.ReadLine() End Sub End Module

11. Para implementar la conexin en cualquier otro manejador basta con especificar el espacio de nombres que corresponda, utilizar los objetos Data Provider pertinentes y colocar una cadena de conexin apropiada. FIN DEL EJERCICIO *

Ejercicio 15.4
Altas, bajas, cambios y consultas en modo conectado En este ejercicio realizaremos un actualizador (Alta, Baja, Cambio, Consulta) para la tabla Jobs. Aprovecharemos lo que hemos aprendido para realizar operaciones en modo conectado. 1. 2. 3. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Console Application, llamado ActPuestos. Edite el programa de tal forma que aparezca de la siguiente manera:

Codificacin de ActPuestos Module1.vb 1 2 3 4 5 6 7 8 Option Explicit On Option Strict On Imports System.Data.SqlClient Module Module1 Dim conn As SqlConnection

Captulo 15. Manejo de bases de datos con ADO.NET

511

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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

Dim Dim Dim Dim

mJob_id As Integer mJob_desc As String mMin_lvl As Byte mMax_lvl As Byte

Sub Main() Try Call AbreConexion() Dim Opcion As String Do While Opcion <> X Console.WriteLine(**************************) Console.WriteLine(Opciones de la aplicacin:) Console.WriteLine(A - Alta de registros) Console.WriteLine(M - Modificacin de registros) Console.WriteLine(E - Eliminacin de registros) Console.WriteLine(C - Consulta de registros) Console.WriteLine(X - Salir del programa) Console.Write(Qu opcin desea:) Opcion = Console.ReadLine() Select Case Opcion Case A Call AgregarRegistro() Case M Call ModificarRegistro() Case E Call EliminarRegistro() Case C Call ConsultarRegistros() Case X Exit Do End Select Console.WriteLine(**************************) Loop Call CerrarRecursos() Catch ex As Exception Console.WriteLine(Ha ocurrido un error) Console.WriteLine(ex.Message) Exit Sub End Try End Sub Sub AbreConexion()

15

512

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110

conn = New SqlConnection(Data Source=aprendaws; & _ Initial Catalog=pubs;Persist Security Info=True; & _ User ID=sa;Password=secreto) conn.Open() End Sub Sub AgregarRegistro() Console.Write(Descripcin de puesto:) mjob_desc = Console.ReadLine() Console.Write(Nivel mnimo:) mMin_lvl = CType(Console.ReadLine(), Byte) Console.Write(Nivel mximo:) mMax_lvl = CType(Console.ReadLine(), Byte) Dim OrdenSQL As String OrdenSQL = String.Format(INSERT INTO Jobs (Job_desc, & _ Min_lvl, Max_lvl) VALUES ({0}, {1}, {2}), _ mJob_desc, mMin_lvl, mMax_lvl) Dim cmd As New SqlCommand(OrdenSQL, conn) cmd.ExecuteNonQuery() End Sub Sub ModificarRegistro() Console.Write(ID de puesto:) mJob_id = CType(Console.ReadLine(), Integer) Console.Write(Descripcin de puesto:) mJob_desc = Console.ReadLine() Console.Write(Nivel mnimo:) mMin_lvl = CType(Console.ReadLine(), Byte) Console.Write(Nivel mximo:) mMin_lvl = CType(Console.ReadLine(), Byte) Dim OrdenSQL As String OrdenSQL = String.Format(UPDATE Jobs SET Job_desc={0}, & _ Min_lvl={1}, Max_lvl={2} WHERE Job_id={3}, _ mJob_desc, mMin_lvl, mMax_lvl, mJob_id) Dim cmd As New SqlCommand(OrdenSQL, conn) cmd.ExecuteNonQuery() End Sub Sub EliminarRegistro() Console.Write(ID de puesto:) mJob_id = CType(Console.ReadLine(), Integer) Dim OrdenSQL As String OrdenSQL = String.Format(DELETE Jobs WHERE Job_id={0}, _ mJob_id) Dim cmd As New SqlCommand(OrdenSQL, conn) cmd.ExecuteNonQuery() End Sub Sub ConsultarRegistros()

Captulo 15. Manejo de bases de datos con ADO.NET

513

111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129

Dim Lector As SqlDataReader Dim OrdenSQL As String OrdenSQL = SELECT * FROM Jobs Dim cmd As New SqlCommand(OrdenSQL, conn) Lector = cmd.ExecuteReader Do While Lector.Read Console.WriteLine(String.Format({0}, {1}, {2}, {3}, _ Lector(0), Lector(1), Lector(2), Lector(3))) Loop Lector.Close() End Sub Sub CerrarRecursos() If conn.State = ConnectionState.Open Then conn.Close() End If End Sub End Module

15

Ejecucin guiada de ActPuestos Module1.vb 4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). El procedimiento principal se encarga de llamar al procedimiento AbreConexion(), que se encarga de abrir la conexin a la base de datos. Posteriormente, utilizando un Do While propone un men de opciones. Dependiendo de la seleccin que se haga, se ejecutar el procedimiento AgregarRegistro(), que se encarga de agregar un registro a la tabla Jobs; ModificarRegistro() que se encarga de modificar los datos de un registro existente; EliminarRegistro(), que se encarga de eliminar un registro existente, y ConsultarRegistros(), que se encarga de mostrar el contenido de la tabla Jobs. Dependiendo de la operacin a realizar, se preguntarn los datos necesarios, y se construir la sentencia SQL apropiada. Seleccione la opcin C y vea los registros que actualmente tiene la tabla. Seleccione la opcin A y agregue el puesto Vendedor Senior, con nivel mnimo 100 y nivel mximo 175. Vea cmo no se proporciona valor de ID, dado que es Identity y el manejador SQL Server lo asignar automticamente. Seleccione la opcin C y compruebe que el programa agreg el registro. Vea cmo no se proporciona valor de ID, dado que es Identity y el manejador SQL Server lo asignar automticamente.

5.

6. 7.

8. 9.

514

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

10. Seleccione la opcin M y cambie la descripcin por Vendedor Senior Jr, con nivel mnimo 120 y nivel mximo 175. Deber proporcionar el nmero de ID que automticamente el manejador le proporcion a su registro. 11. Seleccione la opcin C y compruebe que el programa modific el registro. 12. Seleccione la opcin E y elimine el registro que acaba de agregar. Tendr que proporcionar el nmero de ID que automticamente le asign el manejador. 13. Seleccione la opcin C y compruebe que el programa elimin el registro. 14. Esta misma interfaz puede realizarse en Windows o en Web. Finalmente las operaciones terminarn siendo ADO.NET y el manejo es el mismo. 15. Cierre su aplicacin. FIN DEL EJERCICIO *

Ejercicio 15.5
Consumo de cadenas de conexin de app.Config En este ejercicio analizaremos la forma en que se consumen las cadenas de conexin en aplicaciones Windows y Consola, con la finalidad de asegurar el cdigo. Trabajar con el ejercicio 15.2, realizado con anterioridad. 1. 2. 3. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Uno de los problemas de seguridad es la exposicin de informacin delicada en una cadena de conexin, principalmente nombre de usuario y contrasea. La recomendacin general es que utilice la seguridad integrada de Windows; de esa manera, los procesos de autenticacin (reconocer al usuario) y autorizacin (darle permisos al usuario reconocido) quedan bajo el control del sistema operativo. Para implementar este tipo de autenticacin es necesario agregar en la cadena de conexin el argumento:
Integrated Security=SSPI;

4.

En lugar de:
User ID=usuario;password=contrasea;

5.

La desventaja es que se debe realizar trabajo de asociacin de cuentas de sistema operativo con las bases de datos y sus objetos. Eso implica que todos los que se conectan a los datos deben poder firmarse en el equipo, lo cual abre otras posibilidades de inseguridad, adems de que se requiere una minuciosa administracin de cuentas. Como podr imaginarse, en Web ese esquema no es funcional.

Captulo 15. Manejo de bases de datos con ADO.NET

515

6.

Otra desventaja de integrar textualmente la cadena de conexin en nuestros programas es que en caso de que cambie el nombre del servidor, del usuario o la contrasea, tendrn que modificarse todos los programas, y recompilarse. Lo ideal es tener la informacin en un archivo externo de configuracin, que en el caso de aplicaciones de consola y Windows se llama app.config; desde ah la informacin puede consumirse a travs de programacin. En caso de cambios, se modifica el archivo de configuracin que se aplica para todos los programas y automticamente todo se actualiza sin necesidad de recompilar.

15

Compilacin de un proyecto para liberacin (Release)


7. Nuestro proyecto Conecta est escrito como sigue. Como vemos, expone de forma textual la cadena de conexin, y con ello el usuario y la contrasea:

Codificacin de Conecta Module1.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.Data.SqlClient Module Module1 Sub Main() Dim conn As SqlConnection conn = New SqlConnection() conn.ConnectionString = Data Source=aprendaws; & _ Initial Catalog=pubs;Persist Security Info=True; & _ User ID=sa;Password=secreto conn.Open() Console.WriteLine(conn.State.ToString()) conn.Close() Console.Write(Pulse INTRO para continuar) Console.ReadLine() End Sub End Module

8.

Generalmente, Visual Studio compila en modo depuracin las aplicaciones (Debug) con lo cual nos asiste en la correccin de problemas. Cuando el programa ya no causa errores y estamos listos para liberarlo, se recomienda construir el programa (Build) en modo liberacin (Release), para proceder a la distribucin.

516

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

9.

En Solution Explorer haga doble clic en el nodo Conecta de herramientas cambie el modo de compilacin a Release.

Module1.vb.

En la barra

10. En Solution Explorer seleccione el nombre del proyecto Conecta. Despliegue el men contextual y seleccione Rebuild, para reconstruir el ensamblado en modo Release. 11. El ensamblado para distribucin habr quedado en el directorio Bin\Release del proyecto. Como el ensamblado ya es un archivo EXE y no se puede abrir desde un editor de texto, podemos sentirnos seguros de que nadie conocer la informacin de usuario y contrasea de la base de datos No es cierto?

Crackeado de un usuario y contrasea usando ILDASM


12. Nuestro ensamblado es un ensamblado .NET, y existe una herramienta de lnea de comando, llamada ILDASM.EXE, que permite desensamblar los programas. Veamos qu tan fcil sera descifrar el usuario y la contrasea de nuestra base. 13. En Windows, en el grupo de programas de Visual Studio 2005, seleccione Visual Studio Tools Visual Studio 2005 Command Prompt. Escriba lo siguiente en la lnea de comandos:
1 2 3 cd\ cd\APVBNETVS\Ejercicios\Conecta\Bin\Release ildasm Conecta.exe

14. Aparecer la herramienta de desensamblado de .NET.

Captulo 15. Manejo de bases de datos con ADO.NET

517

15. Expanda el rbol de elementos hasta que ubique el elemento method Main: void(), que es el procedimiento en el que habamos codificado la cadena de conexin. Haga doble clic sobre el elemento y se mostrar el cdigo en su forma administrada (managed).

15

16. Vea en la ilustracin la lnea IL_0007, en donde aparece la cadena de conexin, totalmente legible para el ojo curioso, no siempre bien intencionado. 17. Cierre ILDASM.

Adicin de un archivo de configuracin para la aplicacin


18. Los archivos de configuracin (Configuration Files) son archivos en formato XML que contienen elementos reconocidos por la plataforma .NET, y son utilizados por CLR en tiempo de ejecucin para producir los efectos del programa y definir los apoyos de depuracin y seguridad. En el caso de aplicaciones Windows (Consola y Windows), el archivo tiene el nombre app.Config, mientras que en las aplicaciones ASP.NET tiene el nombre Web.Config. 19. Generalmente, al crear una aplicacin de consola no se genera en automtico el archivo de configuracin. Para crearlo, seleccione el nodo Conecta en Solution Explorer, despliegue el men contextual y seleccione Add New Item, con lo que aparecer la ventana Add New Item. Seleccione la plantilla Application Configuration Template y haga clic en Add. Con ello se agregar al proyecto Conecta un archivo de configuracin.

518

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

20. En Solution Explorer haga doble clic sobre el nodo app.config del proyecto Conecta. Con ello se editar el archivo de configuracin. 21. Dentro del elemento <configuration> agregue un elemento <connectionString> y dentro de ste, una cadena de conexin. Las primeras lneas del archivo deben quedar as:

Codificacin de Conecta app.config (parte) 1 2 3 4 5 6 7 8 9 <?xml version=1.0 encoding=utf-8 ?> <configuration> <connectionStrings> <add name=conn connectionString=Server=aprendaws;Initial Catalog=Pubs;User Id=sa;passwrod=secreto/> </connectionStrings> <system.diagnostics> <sources> <source name=DefaultSource switchName=DefaultSwitch> ...

22. El nombre conn asignado al valor de configuracin podr ser invocado programticamente.

Consumo de valores desde el archivo de configuracin


23. Para consumir un valor del archivo de configuracin, ste debe encontrarse en el mismo directorio que el ensamblado. En el programa lo que debe hacerse es importar el espacio de nombres System.Configuration. Para obtener todas las clases del espacio de nombres es necesario hacer referencia a System.Configuration.dll.

Captulo 15. Manejo de bases de datos con ADO.NET

519

24. Seleccione el nodo Conecta en Solution Explorer y despliegue el men contextual. Seleccione Add Reference y en la pestaa .NET de la ventana Add Reference seleccione System.Configuration; haga clic en Ok. Con ello se agrega la referencia a System.Configuration.dll. 25. Modifique el programa para que quede de la siguiente forma:

Codificacin de Conecta Module1.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 26 27 Option Explicit On Option Strict On Imports System.Data.SqlClient Imports System.Configuration

15

Module Module1 Sub Main() Dim conn As SqlConnection conn = New SqlConnection() Dim Settings As ConnectionStringSettings Settings = ConfigurationManager.ConnectionStrings(connStr) conn.ConnectionString = Settings.ConnectionString conn.Open() Console.WriteLine(conn.State.ToString()) conn.Close() Console.Write(Pulse INTRO para continuar) Console.ReadLine() End Sub End Module

26. En la lnea 5 se import el espacio de nombres System.Configuration, necesario para poder disponer de los elementos de app.config. 27. En la lnea 14 se declara una variable que nos servir para leer los valores almacenados en el archivo de configuracin. A la variable le asignamos el valor almacenado en un elemento llamado connStr, dentro de la seccin connectionString del archivo de configuracin (lnea 15). Todos los elementos que hayan sido agregados en la seccin a travs de Add podrn ser recuperados del archivo de configuracin. En la lnea 16, finalmente, se recupera la cadena de conexin de la variable de trabajo, y se le asigna

520

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

28.

29.

30.

31.

32.

a la propiedad Connection.ConnectionString del objeto de conexin conn. Sobra decir que es posible almacenar ms de una cadena de conexin. Suponga que diez programas utilizan la misma cadena de conexin y ya han sido compilados. Si cambia cualquier cosa en la cadena de conexin, slo basta con modificarla en el archivo de configuracin para que todos los programas funcionen sin modificaciones; en este caso, no sera necesario recompilar los programas. Construya en modo Release el proyecto Conecta, establzcalo como proyecto de inicio (StartUp Project) e inicie la depuracin. El programa debe ejecutarse sin problemas. En la ventana Visual Studio 2005 Command Prompt (lnea de comandos), aplique el comando Dir y vea cmo en modo Release se agreg un archivo de configuracin especfico para el proyecto, llamado Conecta.exe.config. La conexin se realiza, sin que la cadena de conexin est expuesta en el ejecutable. Queda claro que ahora est expuesta en el archivo de configuracin, que es un archivo textual XML, y que puede ser encriptado utilizando las clases del espacio de nombres System.Security.Cryptography.Xml. Cierre su aplicacin, as como Visual Studio 2005 Command Prompt.

FIN DEL EJERCICIO*

Captulo 15. Manejo de bases de datos con ADO.NET

521

MAPA

MENTAL DEL CAPTULO

15

522

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

TERMINOLOGA
Actualizaciones por lotes, 477 ADO, 476 ADO.NET, 476 app.config, 515 Base de datos conectada, 477 desconectada, 478 Batch updates, 477 BeginTransaction, 497 Cancel, 504 Client, 494 Close, 498 Command, 492, 503 Builder, 494 CommandText, 504 CommandType, 504 Connection, 492, 504 Pooling, 499 StringBuilder, 494 Timeout, 499 ConnectionString, 497 ConnectionTimeout, 497 Constraint, 496 CreateCommand, 498 CreateParameter, 504 DAO, 474 Data Provider Objects, 491 Motor de base de datos Jet, 474 DataAdapter, 493 Multiple Active Database, 497 Result Sets, DataColumn, 495 476 DataReader, 493, .NET Data 506 Provoders, 476 DataRelation, 496 .NET Framework DataRow, 495 Data Provider, DataSet Objects, 481 491 OCI, 473 DataSet, 495 ODBC, 473 Datasource, 497 OLE DB, 475 DataTable, 495 Consumer, 475 DataView, 495 OleDbCommand, DBLib, 473 493 Dispose, 498, 504 OleDbConnection, Disposed, 498, 505 493 Error, 494 OleDbDataAdapter, Exception, 494 493 ExecuteNonQuery, OleDbDataReader, 506 493 ExecuteReader, 506 Open, 498 ExecuteScalar, 506 OracleCommand, ILDASM.EXE, 516 493 Integrated Security, OracleConnection, 499 493 Lector de datos, OracleData 506 Adapter, 493 Liberacin, 515 OracleDataReader, MARS, 476 493 Modo Parameter, 494 conectado, 480 Parameters, 504 parcialmente Password, 499 conectado, 480 Permission, 494 totalmente Procedimientos desconectado, almacenados, 480 488 Source, 499 Proveedor de datos .NET Framework, 481 Proveedores de datos de .NET, 476 Provider, 499 Query Designer, 487 RDO, 475 Release, 515 Remote Data Objects, 475 Server Explorer, 482 SqlCommand, 493 SqlConnection, 493 SqlDataAdapter, 493 SqlDataReader, 493 State, 497 StateChanged, 498 Stored Procedures, 488 StoredProcedure, 505 SuperVersion, 497 TableDirect, 505 Text, 505 Transaction, 494, 504 UDA, 475 Universal Data Access, 475 UpdateRowSource, 504 User ID; 499 Web.Config, 517

Captulo 15. Manejo de bases de datos con ADO.NET

523

PREGUNTAS
15.1 Cules son las fases evolutivas del acceso a las bases de datos en forma programtica? 15.2 Explique cules son las diferencias entre el esquema conectado y el esquema desconectado de bases de datos. 15.3 Explique los objetos Data
Provider Objects. Objects.

15

15.4 Explique los objetos DataSet

15.5 Explique los tipos de comando y los tipos de ejecucin del objeto Command. 15.6 Para qu sirve DataReader?

524

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Notas:

Captulo 15. Manejo de bases de datos con ADO.NET

525

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Es el motor de base de datos ptimo para manejar bases de datos en Access: a) DAO b) ADO c) RDO 2. Es el tipo de acceso en donde la aplicacin mantiene una conexin permanente con el almacn de datos: a) Bases de datos de conexin persistente b) Bases de datos conectadas c) Bases de datos desconectadas 3. Son los espacios de nombre asociados con ADO.NET: a) .Data-Related Namespaces b) .ADO.NET Namespaces c) System.Data y System.Xml 4. Es la opcin ideal para las aplicaciones que requieren manejo de bases de datos centralizadas y en tiempo real: a) Bases de datos de conexin persistente b) Bases de datos conectadas c) Bases de datos desconectadas 5. Es el modelo de objetos que permite tener un manejo total y flexible de la copia local de los datos: a) Data Provider Objects b) DataSet Objects c) Command Objects Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero. 6. Las libreras nativas de acceso a datos son ms rpidas que ODBC. 7. Una desventaja de las bases de datos desconectadas es que los datos no estn permanentemente actualizados. 8. Los sistemas manejadores de bases de datos son componentes y libreras que nos permiten tener acceso a los almacenes de datos mediante programacin. 9. RDO es la tecnologa que permite la simplicidad de programacin de DAO, pero con mejor desempeo en comparacin con bases de datos que utilizan un motor de datos distinto a JET. 10. A los DataSet Objects se les debe anteponer un prefijo que indique el tipo de base de datos con el cual se establece conexin.

15

CAPTULO

16

Manejo de bases de datos desde aplicaciones Windows


Objetivos: Aprender el manejo de bases de datos en modo parcialmente conectado usando DataSet para el desarrollo de aplicaciones de base de datos. 1. Conocer los objetos que forman el modelo de objetos DataSet. 2. Entender cmo se organizan los objetos de DataSet en colecciones. 3. Aprender a utilizar las colecciones de manera directa y a travs de la estructura de control For Each. 4. Aprender a utilizar el objeto DataSet con datos.
DataAdapter

y la forma de poblar un

5. Aprender a utilizar el objeto DataSet para crear actualizadores usando Visual Studio.

527

528

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Modelo de objetos DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funcionalidad de las colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . For Each y la lectura de colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . Independencia de DataSet respecto del almacn de datos . . . . . . . . . Alternativas para poblar de datos un DataSet . . . . . . . . . . . . . . . . . . . . . . . . DataAdapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Miembros ms utilizados en DataAdapter . . . . . . . . . . . . . . . . . . . . . . DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Miembros ms utilizados en DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . Categoras de objetos de DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DataSet y XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cargado de datos en un DataSet de forma programtica . . . . . Uso de Data Sources, Typed Datasets y relaciones padre-hijo . . Creacin de un origen de datos (Data Source) . . . . . . . . Creacin de una aplicacin de navegacin de datos desde Data Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adicin de registros en modo desconectado y duplicacin de modificaciones al almacn de datos . . Generacin de interfaz con registros padre-hijo en tiempo de diseo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Actualizador de registros con Data Sources y enlazado de datos a un cuadro combinado . . . . . . . . . . . . . . . . . . . . . . . . Personalizacin de cuadros combinados de tablas relacionadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529 531 533 534 534 535 536 538 539 541 541 542 545 545 550 554 555 556 557 562 563 564 566

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

529

Uno de los rasgos que caracteriza a toda base de datos es la forma en que maneja las relaciones entre sus tablas. El concepto es tan importante que permite clasificarlas en las que son relacionales y las que no lo son. El manejo de relaciones es fundamental e implica el reconocimiento de llaves primarias y forneas, la existencia de campos de coincidencia y la existencia de reglas de integridad entre las tablas. Si no somos capaces de trabajar todos esos conceptos al momento de programar, podemos decir que estamos desarrollando aplicaciones de bases de datos, pero no podremos decir que programamos aplicaciones de bases de datos relacionales. No obstante que las bases de datos, bajo el esquema conectado, permiten un manejo directo y sencillo de los datos, tienen una desventaja que resulta crtica: no tienen la capacidad de manejar bases de datos en su dimensin relacional. Si lo analiza detenidamente, se dar cuenta de que trabajamos slo con matrices bidimensionales de datos (tablas, filas/columnas), y que todo manejo relativo a la dependencia entre tablas, restricciones de integridad, manejo de llaves, etctera, debemos controlarlo a travs de programacin. Esto equivale a desperdiciar la capacidad de control que el manejador de base de datos relacional posee, por lo que sera igual cargar los datos en Access, SQL Server, un archivo en Excel o un archivo de texto simple. Para aprovechar todo el poder de las bases de datos relacionales es necesario utilizar el objeto DataSet, sobre el que recae la posibilidad de manejo de bases de datos desconectadas en ADO.NET. Al usar DataSet dispondremos automticamente de un modelo de base de datos relacional de parte del cliente, independiente del almacn de datos.

16

Modelo de objetos DataSet


La figura 16.1 muestra los objetos que componen el modelo de objetos DataSet (DataSet Objects). FIGURA 16.1 DataSet Objects.

530

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Exploraremos cada uno de los objetos que componen el modelo de objetos DataSet de manera detallada. A nivel modelo de objetos es importante lo siguiente: 1. En resumen, tenemos un modelo de base de datos (DataSet) que se compone de tablas (DataTable) relacionadas entre s (DataRelation); las tablas se componen a su vez de campos (DataColumn), de los cuales tendremos ocurrencias o filas (Rows) que debern atender algunas restricciones (Constraint). En el plano especfico la organizacin est basada en colecciones: a) Todo el modelo se subordina al DataSet. b) Las tablas se almacenan en una coleccin perteneciente a DataSet llamada DataTable Collection. c) Cada tabla contiene su coleccin para almacenar sus columnas (DataColum Collection), filas (DataRowCollection) y restricciones (ConstraintCollection). d) Las relaciones entre tablas pertenecen al modelo de datos, no a las tablas, y se almacenan en una coleccin llamada DataRelationCollection. e) Aunque no son parte necesaria del modelo, se pueden tener vistas parciales de las tablas, especificando columnas y filtros especficos, utilizando el objeto DataView. Un DataSet puede tener muchas tablas (objetos DataTable), que se organizan en una coleccin llamada DataTableCollection; cada tabla se compone de un conjunto de campos (objetos DataColumn), que se organizan en una coleccin llamada DataColumCollection. Cada tabla puede contener uno, varios o ningn registro; sin importar cuantos registros se tengan, cada registro es un objeto DataRow que se almacena en una coleccin llamada DataRowCollection asociado a la tabla. Una vez que existen las tablas es posible establecer restricciones aplicables a sus campos (objetos Constraint), a efecto de que se respete la integridad referencial del modelo de datos. Las restricciones se organizarn en una coleccin llamada ConstraintCollection. Tambin es posible establecer dependencia padre/hijo entre tablas (DataRelation) al especificar relaciones entre ellas; stas se organizarn en una coleccin llamada DataRelationCollection. Si se desea tener una vista parcial de los datos de una tabla, se puede utilizar el objeto
DataView.

2.

Para mayor simplicidad en el cdigo, las colecciones tienen alias.

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

531

Coleccin DataTableCollection DataColumnCollection DataRowCollection DataRelationCollection Tables Columns Rows Relations

Alias

Funcionalidad de las colecciones


Si no entiende el concepto de las colecciones, el modelo de objetos DataSet ser como pasar caminando por todos los crculos del Infierno de Dante, ya que las colecciones lo son todo en DataSet. Aprenderlas no es difcil; conocer cmo funciona una coleccin permite saber cmo funcionan todas. Las colecciones comparten propiedades y mtodos comunes para todas las colecciones en Visual Basic; aqu reseamos algunos de los miembros ms comunes, a fin de que los utilice en el presente captulo.
Propiedades Count Item Eventos Add Clear Contains CopyTo Remove Mtodos

16

Con el uso de propiedades podemos saber cuntos elementos componen la coleccin (Collection.Count), as como extraer cualquiera de ellos y disponer de sus propiedades particulares (Collection.Item). Mediante el uso de mtodos podemos agregar objetos a la coleccin (Collection.Add), eliminar todos los elementos de la coleccin (Collection.Clear), copiar los elementos a un arreglo (Collection.CopyTo), y eliminar cualquier elemento (Collection.Remove). Si queremos saber si un elemento existe o no, podemos utilizar (Collection.Contains). Las colecciones almacenan referencias a un determinado tipo de objeto; cada objeto referido a una coleccin constituye un elemento (Item), que se organiza en la coleccin en forma de un arreglo de base cero. Suponga que tiene un DataSet de nombre dsBasica; suponga tambin que dicho DataSet se compone de cuatro tablas llamadas Clientes, Proveedores, Movimientos e Histrico.

532

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Todo es un objeto en .NET: dsBasica es un objeto DataSet y cada una de las tablas es un objeto DataTable. En ese sentido, la coleccin Tables almacena la referencia de los cuatro objetos DataTable.
Tables

La siguiente lnea nos despliega en la consola cuntos elementos existen en la coleccin de dsBasica:
Console.WriteLine(dsBasica.Tables.Count())

La salida sera la siguiente:


4

Devuelve un valor de 4 pues existen cuatro objetos DataTable referidos en la coleccin. Como la coleccin almacena los elementos con base cero, los subndices de referencia seran 0, 1, 2 y 3. Para conocer el nombre de cada una de las tablas almacenadas en Tables podramos recurrir al siguiente cdigo:
Console.WriteLine(dsBasica.Tables.Item(0).TableName) Console.WriteLine(dsBasica.Tables.Item(1).TableName) Console.WriteLine(dsBasica.Tables.Item(2).TableName) Console.WriteLine(dsBasica.Tables.Item(3).TableName)

La salida sera la siguiente:


Clientes Proveedores Movimientos Histrico

Cada una de las lneas mostr la propiedad TableName del elemento especificado a travs del subndice proporcionado, que deber estar entre 0 y el mximo subndice posible, es decir, el nmero de elementos menos uno. Como puede ver es una forma poco adecuada para examinar la coleccin; si la coleccin hiciera referencia a 1000 objetos en lugar de 4, el cdigo sera bastante ineficaz. NOTA
Un error comn es utilizar el nmero de elementos (Count) como subndice, lo que provoca error en tiempo de ejecucin. Si la coleccin tiene cinco elementos (n), y el primero tiene un subndice de cero que aumenta progresivamente sobre base entera, el mximo subndice posible ser el total de elementos menos uno (n-1).

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

533

Tambin podemos recurrir al siguiente cdigo, que sera la automatizacin del anterior, y que proporcionara los mismos resultados:
Dim i As Integer For i=0 To (dsBasica.Tables.Count() 1) Console.WriteLine(dsBasica.Tables.Item(i).TableName) Next i

Es sencillo, con la salvedad de que el cdigo puede ser bastante complejo y las lneas bastante largas. Podemos simplificar un poco ms el cdigo asignando la coleccin a un objeto:
Dim i As Integer Dim MisTablas As DataTableCollection = dsBasica.Tables For i=0 To (MisTablas.Count() 1) Console.WriteLine(MisTablas.Item(i).TableName) Next i

16

El hecho de que un objeto haga las veces de una coleccin permite ver al cdigo en trminos ms sencillos. Esa posibilidad da paso a la estructura de control For Each.

For Each y la lectura de colecciones


La estructura de control For
Each

trabaja sobre colecciones.

Para poder trabajar, For Each requiere de una variable de trabajo de la misma naturaleza que los objetos referidos por la coleccin. Continuando con nuestro ejemplo, el cdigo para mostrar el nombre de cada uno de los elementos de la coleccin sera el siguiente:
Dim TablaEnColeccion As DataTable For Each TablaEnColeccion In dsBasica.Tables Console.WriteLine(TablaEnColeccion.TableName) Next TablaEnColeccion

Lo que hace For Each es que cada elemento de la coleccin se asigna a la variable de trabajo; dentro del bloque de cdigo entre For Each y Next se puede utilizar la variable de trabajo como si estuviramos trabajando con el elemento de la coleccin. Si la coleccin tiene 1 o 1000 elementos, el cdigo es el mismo. El cdigo anterior es equivalente al siguiente, que es marcadamente ms complejo:

534

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Dim TablaEnColeccion As DataTable TablaEnColeccion = dsBasica.Tables.Item(0) Console.WriteLine(TablaEnColeccion.TableName) TablaEnColeccion = dsBasica.Tables.Item(1) Console.WriteLine(TablaEnColeccion.TableName) TablaEnColeccion = dsBasica.Tables.Item(2) Console.WriteLine(TablaEnColeccion.TableName) TablaEnColeccion = dsBasica.Tables.Item(3) Console.WriteLine(TablaEnColeccion.TableName)

Escoja la forma ms conveniente. Imagine que son 500 elementos en la coleccin, cul opcin le conviene?

Independencia de DataSet respecto del almacn de datos


Contrario a lo que suceda con los Data Provider Objects, el modelo de objetos DataSet tiene slo una implementacin totalmente independiente al proveedor de datos que se utilice. El modelo de objetos DataSet y los datos contenidos en el modelo se representan en la memoria del equipo local mediante lenguaje XML. Para DataSet no es relevante si utilizamos OleDbClient, SQLClient, OracleClient u otro, ya que en realidad DataSet no se entiende con dichos objetos. El encargado de resolver las particularidades de cada almacn de datos es el objeto DataAdapter; habr un DataAdapter por cada proveedor de datos que se tenga en .NET.

Alternativas para poblar de datos un DataSet


Antes de analizar los objetos DataSet es importante saber que stos son independientes de un almacn de datos; es decir, que se puede tener un modelo de bases de datos en memoria aunque no se disponga de un manejador de base de datos o un almacn de datos fsico en el equipo. Los datos de un DataSet pueden provenir de diferentes partes: 1. 2.
Interfaz de usuario. Por la utilizacin de una interfaz de usuario que, a travs de programacin, se encarga de agregar, modificar o eliminar registros o filas. Almacn de datos. De un almacn de datos compatible con ADO.NET; en ese caso, es necesario extraer los datos del almacn con el apoyo de un objeto de tipo DataAdapter, que es un objeto Data Provider, y que se encarga del dilogo entre el DataSet y el almacn de datos resolviendo discrepancias.

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

535

3.

XML. Si los datos provienen de estructuras de datos XML vlidas. Este tipo de almacn de datos es muy utilizado en aplicaciones de cmputo mvil, ya que no es necesario consumir recursos para almacenar y recuperar datos.

Dependiendo de las necesidades de la aplicacin, se puede tener una combinacin de diferentes orgenes a fin de incrementar la confiabilidad y el tiempo de respuesta de la aplicacin.

DataAdapter
Adaptador de datos. El objeto DataAdapter, es un conjunto de comandos y conexiones que sirve de interfaz entre el almacn de datos y DataSet. no interacta de ninguna forma con el almacn de datos de manera directa; Data acta como puente entre DataSet y el almacn de datos para efectuar cualquier operacin de recuperacin o escritura.
DataSet Adapter

16

En caso de que los datos que han de poblar un DataSet provengan de un almacn de datos, primero se cargan en el DataAdapter para luego trasladarse al DataSet mediante el uso del mtodo Fill. Fill define una tabla dentro del DataSet, trasladando los datos contenidos en la tabla ms la definicin bsica de los campos. Inicialmente, la definicin de los campos incluye slo el nombre del campo y el tipo de dato, dejando fuera importantes cuestiones como la longitud mxima permitida, la capacidad de permitir valores nulos, etctera. Debido a lo bsico de la definicin de campos realizada por Fill, se dice que se tiene un DataSet sin tipos (Untyped DataSet). El mtodo FillSchema se emplea para trasladar las especificaciones de tipo, longitud y restricciones al DataSet, de tal manera que la representacin de la base de datos en memoria y en el almacn fsico de datos concuerde. Cuando DataSet representa de manera completa los atributos del modelo de datos en el almacn fsico, se dice que se tiene un DataSet con tipos (Typed DataSet). La especificacin generalmente se hace a travs de XML y XSD. Es importante aclarar que los datos que han de poblar un objeto DataSet no siempre provienen de un almacn de datos; es posible, incluso, que DataSet pueda generarse de manera programtica en forma totalmente independiente de cualquier almacn de datos. En ese entendido, es posible utilizar DataSet sin su correspondiente objeto DataAdapter, si es que la aplicacin nada tiene que ver con un almacn de datos; en ese escenario, tambin saldra sobrando una conexin.

536

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Dependiendo del proveedor de datos se utilizar un diferente DataAdapter (SqlDataAdapter, OleDbDataAdapter, OracleDataAdapter). En este libro lo consideraremos de forma genrica.

Miembros ms utilizados en DataAdapter


Al utilizar este tipo de control, los desarrolladores generalmente utilizan los siguientes miembros:

Propiedades
Propiedad AcceptChangesDuringFill Utilidad

Obtiene o establece un valor que indica si debe llamarse al mtodo AcceptChanges en DataRow despus de agregarse a DataTable durante cualquiera de las operaciones Fill. Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL para eliminar registros de un conjunto de datos. Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL para insertar nuevos registros en el origen de datos. Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL para seleccionar registros en el origen de datos. Obtiene o establece un procedimiento almacenado o una instruccin de Transact-SQL para actualizar los registros del orien de datos.

DeleteCommand

InsertCommand

SelectCommand

UpdateCommand

Las propiedades DeleteCommand, InsertCommand, SelectCommand y UpdateCommand son denominadas propiedades de ejecucin; usualmente se debe definir como mnimo Select Command (propiedad por omisin de DataAdapter); el resto de las propiedades de ejecucin se pondrn en funcionamiento al aplicar el mtodo Update, mismo que reproducir las modificaciones realizadas en DataSet en el almacn de datos.

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

537

Mtodos
Mtodo Dispose Dispose() Accin que realiza

Libera los recursos utilizados por Component.


Fill Fill(dataSet As DataSet)

Agrega filas a DataSet o las actualiza para que coincidan con las filas del origen de datos. Este mtodo devuelve el nmero de filas actualizadas correctamente en el DataSet.
Fill(dataset As DataSet, nombre As String)

Agrega filas a DataSet o las actualiza para que coincidan con las filas del origen de datos. dataSet es el nombre del objeto DataSet al cual se le agregarn los datos, mientras que nombre es el nombre bajo el cual se identificar en DataTable en el que se cargarn los datos. Este mtodo devuelve el nmero de filas actualizadas correctamente en el DataSet.
FillSchema FillSchema(dataSet, esquema As SchemaType)

16

Agrega un DataTable a un DataSet y configura el esquema para hacerlo coincidir con el del origen de datos. El esquema determina la fuente de definiciones para los elementos de la base de datos de parte del cliente. Puede ser SchemaType. si se desea que se apliquen las asignaciones del DataAdapter; esta es la opcin por omisin, y hace coincidir el modelo de datos entre el almacn de datos y la copia local. Tambin puede ser SchemaType.Source, si se desea hacer caso omiso a las definiciones en DataAdapter.
GetFillParameters GetFillParameters() Mapped,

Obtiene los parmetros establecidos por el usuario al ejecutar una instruccin SELECT de SQL.
Update Update(dataSet)

Llama a las instrucciones INSERT, UPDATE o DELETE respectivas para cada fila insertada, actualizada o eliminada en DataSet. Este mtodo devuelve el nmero de filas actualizadas correctamente en el almacn de datos.

538

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Finalize

Finalize()

Permite que un objeto Object intente liberar recursos y realizar otras operaciones de limpieza antes de que el objeto Object sea reclamado por el recolector de elementos no utilizados. En C# y C++, los finalizadores se expresan mediante la sintaxis del destructor.
OnFillError OnFillError()

Provoca el evento FillError.

Eventos
Evento Disposed FillError RowUpdated Causas que lo originan

Se produce cuando el objeto ha sido eliminado. Se devuelve cuando se produce un error durante una operacin de relleno. Se produce durante Update despus de que se ejecute un comando en el origen de datos. Se hace un intento de actualizacin, de manera que se inicia el evento. Se produce durante Update antes de que se ejecute un comando en el origen de datos. Se hace un intento de actualizacin, de manera que se inicia el evento.

RowUpdating

DataSet
Conjunto de datos. El objeto DataSet es el elemento ms poderoso de ADO.NET y representa la copia local y desconectada, residente en memoria, de datos organizados bajo el modelo relacional.

Al rea en memoria donde se almacena la copia local y desconectada de los datos del DataSet se le llama cach. En dicho espacio, DataSet permite almacenar un pequeo modelo relacional en la memoria del equipo local; su organizacin se basa en colecciones Tables, Rows, Columns, Constraints y Relations que simulan lo que en los manejadores de base de datos relacional se almacena en las tablas del sistema. A toda la informacin que especifica cmo se han de almacenar los datos en memoria y a las restricciones pertinentes se le denomina esquema (schema). Mantener el control del es-

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

539

quema produce muchos beneficios en el mbito relacional, pero hace que trabajar con DataSet sea ms complejo que trabajar con DataReader. DataSet agrega una capa ms de objetos, lo que exige ms recursos del equipo; si su aplicacin no amerita trabajar con bases de datos desconectadas, procure evitar el uso de DataSet.

Miembros ms utilizados en DataSet


Al utilizar este tipo de control, los desarrolladores generalmente utilizan los siguientes miembros:

Propiedades
Propiedad CaseSensitive Utilidad

16
Obtiene o establece un valor que indica si las comparaciones de cadena en los objetos DataTable distinguen entre maysculas y minsculas. Obtiene o establece un valor que indica si se siguen las reglas de restriccin al intentar realizar cualquier operacin de actualizacin. Obtiene la coleccin de relaciones que vincula las tablas y permite el desplazamiento desde las tablas primarias a las secundarias. Obtiene la coleccin de tablas incluidas en DataSet.

EnforceConstrains

Relations

Tables

Mtodos
Mtodo Clear Clear() Accin que realiza

Borra cualquier dato de DataSet mediante el procedimiento de quitar todas las filas de todas las tablas.
Clone Clone()

Copia la estructura de DataSet, incluidos todos los esquemas, relaciones y restricciones de DataTable. No copia ningn dato.

540

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Copy

Copy()

Copia la estructura y los datos para este DataSet.


Dispose Dispose()

Libera los recursos utilizados por MarshalByValueComponent.


GetXml GetXml()

Devuelve la representacin XML de los datos almacenados en DataSet.


GetXmlSchema GetXmlSchema()

Devuelve el esquema XSD para la representacin XML de los datos almacenados en DataSet.
ReadXml ReadXml()

Lee el esquema y los datos XML del DataSet.


ReadXmlSchema ReadXmlSchema()

Lee un esquema XML en el DataSet.


Reset Reset()

Restablece el estado original del DataSet. Las subclases deben reemplazar a Reset para restaurar el estado original de un DataSet.
WriteXml WriteXml()

Escribe datos XML y, de forma opcional, el esquema del DataSet.


WriteXmlSchema WriteXmlSchema()

Escribe la estructura del DataSet como un esquema XML.

Eventos
Evento Disposed Causas que lo originan

Se produce cuando el objeto ha sido eliminado.

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

541

Categoras de objetos de DataSet


Las colecciones involucradas con DataSet permiten organizar los objetos para el manejo de los datos que se encuentran en memoria; dichos objetos se dividen en dos categoras: Objetos de esquema. Son los que tienen por objeto definir la estructura que almacenar los datos. Se responde a la pregunta, dnde y cmo se guardarn los datos? a) b) c) d) DataTable DataColumn Constraint Relation

Objetos de datos. Son los que tienen por objeto almacenar los datos. e) DataRow

16

DataSet y XML
DataSet

est muy vinculado a XML por ser ste el convencionalismo utilizado para comunicar paquetes de datos y organizar el contenido de los objetos en cach. Los datos en DataSet no se almacenan en formato binario o en tecnologa propietaria, sino en lenguaje XML. Ese hecho permite una universalidad que sin duda facilitar la implementacin de los lenguajes .NET en plataformas distintas a los sistemas operativos de Microsoft.

Esta vinculacin hace necesario establecer la referencia hacia la librera System.Xml.dll al momento de compilar cualquier programa que haga uso de intercambio de datos con DataSet. Sobra decir que al trabajar con Visual Studio no es necesario establecer las referencias manualmente, dado que al detectarse el uso de elementos que requieren la librera, sta es incluida. Los mtodos que permiten la funcionalidad XML de DataSet son los siguientes: GetXML. Devuelve la representacin XML de los datos almacenados en DataSet. GetXMLSchema. Devuelve el esquema XSD para la representacin XML de los datos almacenados en DataSet. ReadXML. Lee el esquema y los datos XML del DataSet. ReadXMLSchema. Lee un esquema XML en el DataSet. WriteXML. Escribe datos XML y, de forma opcional, el esquema del DataSet. WriteXMLSchema. Escribe la estructura del DataSet como un esquema XML.

542

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejercicio 16.1
Cargado de datos en un DataSet de forma programtica En este ejercicio realizaremos la carga de datos de un objeto DataSet utilizando un adaptador de datos. Suponga que tiene una instancia de SQL Server, de nombre APRENDAWS. Imagine que desea establecer una conexin con la base de datos de prueba Pubs y que se enlazar utilizando la cuenta de administracin sa, cuya contrasea es secreto. La tabla de la que queremos ver los datos es la tabla Jobs. 1. 2. 3. 4. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Windows Application, llamado VerPuestos. Agregue una rejilla de datos (DataGridView). Distribuya los objetos de la siguiente forma:

5.

Modifique las siguientes propiedades:


Propiedad Form1.Text DataGridView1.Name dgvPuestos.ReadOnly Valor a asignar

Catlogo de Puestos dgvPuestos


True

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

543

La propiedad DataGridView.ReadOnly hace que los objetos sean de slo lectura, con lo que evitamos modificaciones inesperadas en el programa. Haga doble clic en la barra de herramientas del formulario y modifique el programa para que luzca de la siguiente manera:

Codificacin de VerPuestos
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 26 27 28 29 30 Option Explicit On Option Strict On

Module1.vb

Imports System.Data.SqlClient Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim conn As SqlConnection conn = New SqlConnection() conn.ConnectionString = Data Source=aprendaws; & _ Initial Catalog=pubs;Persist Security Info=True; & _ User ID=sa;Password=secreto conn.Open() Dim Datos As New DataSet Dim Adaptador As New SqlDataAdapter( _ select * from jobs, conn) Adaptador.Fill(Datos, Puestos) conn.Close() dgvPuestos.DataSource = Datos.Tables(Puestos) dgvPuestos.Refresh() End Sub End Class

16

Ejecucin guiada de VerPuestos 8.

Module1.vb

9.

Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). De la lnea 12 a la 17 se hace una conexin comn a la base de datos.

544

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

10. En la lnea 19 se declara un objeto DataSet. En la lnea 20 se declara un objeto DataAdapter, que se encargar de resolver las discrepancias entre la forma en que DataSet y SQL Server representan el mismo modelo de datos. El constructor recibe dos parmetros: primeramente se proporciona una consulta de referencia que se almacena directamente en la propiedad SelectCommand de DataAdapter y determina el contenido de un miembro contenido en DataSet; posteriormente se proporciona la conexin sobre la que se intentarn las operaciones. DataSet constituye para nuestro objeto DataGridView un origen de datos (data source) en s mismo y todas sus tablas constituyen un miembro de datos (data member), que en caso de ser ms de uno, deber especificarse de manera explcita. 11. Al aplicar el mtodo DataAdapter.Fill de nuestro adaptador (lnea 22), se cargan los datos contenidos en el almacn de datos a la copia local (DataSet). El constructor recibe dos argumentos: el nombre del DataSet al que ser agregado el resultado de la consulta y el nombre de miembro que se desea asignar a dicho resultado. A fin de cuentas, al DataSet llamado Datos se le agreg un DataTable que representa el miembro Puestos. 12. Vea cmo la conexin se cierra en la lnea 24, pero eso ya no importa, dado que ya tenemos los datos de la base en nuestra copia local. Todas las operaciones que podamos realizar con el almacn de datos tambin son posibles ahora en nuestra copia local. 13. En la lnea 26 se especifica que el origen de datos de nuestra rejilla es el miembro Puestos de nuestro DataSet. 14. En la lnea 27 se refresca la rejilla de datos a fin de que muestre los datos finales. Si todo funcion bien, nuestro programa mostrar los datos.

15. Cierre la aplicacin. FIN DEL EJERCICIO *

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

545

Ejercicio 16.2
Uso de Data Sources, Typed Datasets y relaciones padre-hijo

En este ejercicio realizaremos un actualizador de puestos utilizando las facilidades visuales que Visual Studio nos ofrece para el trabajo con bases de datos desconectadas. La tabla de la cual queremos editar los datos es la de puestos (Jobs); cada registro de la tabla puede estar siendo utilizado por empleados que tienen asignado un puesto (employee), por lo que entre las tablas existe una relacin padre-hijo. Este ejercicio requiere que se haya realizado el ejercicio 16.1, que defina una conexin a base de datos, que en nuestro caso se llama aprendaws.pubs.dbo, y en su caso se llamar instancia.pubs.dbo, donde instancia es el nombre de su servidor SQL Server. 1. 2. 3. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Windows Application, llamado Puestos. Modifique las siguientes propiedades:
Propiedad Form1.Text Valor a asignar

16

Actualizador de puestos

Creacin de un origen de datos (Data Source)


4. Los orgenes de datos (Data Sources) son orgenes de datos basados en DataSet con tipos (typed DataSet), que pueden ser definidos en tiempo de diseo. Para agregar un origen de datos, seleccione la opcin Data Show Data Sources (oprima las teclas Mays-Alt-D) y fije la herramienta en el rea de trabajo de Visual Studio. Al crear un origen de datos se agrega al proyecto un archivo XSD, que contendr la representacin formal del modelo de datos que queremos utilizar en nuestro programa, en formato XML. Por el momento, nuestro proyecto no posee ningn origen de datos.

546

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

5.

En Data Sources haga clic en el vnculo Add New Data Source..., o seleccione la opcin Data Add New Data Source, para agregar un origen de datos al proyecto. Aparecer el asistente Data Source Configuration Wizard, que permite seleccionar entre diferentes fuentes de datos para el origen de datos: Database, si se trata de una conexin a un almacn fsico de datos; Web Service, si se trata de una peticin de datos va Web, u Object, si se trata de cualquier contenedor de datos reconocido y existente, como podra ser un objeto de negocio. Lo ms comn es una base de datos. Seleccione Database y haga clic en Next>.

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

547

6.

El asistente nos permitir seleccionar una conexin de las definidas en nuestra solucin. Seleccione la conexin instancia.pubs.dbo. Nuestra conexin se realiza utilizando la cuenta sa y la contrasea secreto. En produccin es una muy mala prctica utilizar la cuenta sa de SQL Server; pero peor an es incluir la contrasea de dicha cuenta en la cadena de conexin. Por cuestiones de simplicidad incluimos esta prctica, pero en entornos reales no lo haga (ms adelante le diremos cmo manejar la conexin en forma segura). Haga clic en el botn de opcin Yes, include sensitive data in the connection string. Si hace clic en [+] Connection String se dar cuenta de que la cadena de conexin expone informacin sensible (usuario y contrasea). Haga clic en el botn Next.

16

7.

El asistente permitir almacenar la cadena de conexin en el archivo de configuracin de la aplicacin. Por lo pronto tome nota del nombre que le asigna a la conexin en el archivo de configuracin: pubsConnectionString. Haga clic en el botn Next.

548

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

8.

El asistente mostrar los elementos de la base de datos que se pueden representar en un Data Source. Expanda el nodo Tables y seleccione las tablas Employee y Jobs. Vea cmo el DataSet recibir el nombre de pubsDataSet. Haga clic en el botn Finish.

9.

Al hacer clic Visual Studio generar un Data Source y lo incluir en su proyecto bajo la extensin XSD. Adems de eso, agregar un archivo de configuracin de la aplicacin llamado, en el caso de las aplicaciones Windows, app.config. En ese archivo se agregar la cadena de conexin, para en un futuro poder utilizar la referencia a la constante que determinamos (pubsConnectionString), y que el usuario y la contrasea de la conexin no estn expuestos en el cdigo. 10. Vaya a Solution Explorer, identifique el archivo pubsDataSet.xsd y haga doble clic en l. Aparecer la representacin grfica del modelo de datos que actualmente tenemos en memoria. Como vemos, incluye los campos de las tablas seleccionadas, pero no slo eso, ya que adems reconoce una relacin entre ellas; esto es un gran paso, ya que en el esquema conectado la representacin de relaciones no era posible, dado que todo era un arreglo bidimensional de datos. Vea cmo tambin hay reconocimiento de llaves primarias.

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

549

16

11. En Solution Explorer haga doble clic sobre el nodo app.config y compruebe que en el elemento <configuration> existe otro elemento llamado <connectionStrings>, que incluye la definicin de nuestra cadena de conexin. 12. Vea cmo Data Sources ha experimentado cambios.

550

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Creacin de una aplicacin de navegacin de datos desde Data Sources


13. Haga doble clic en Puestos Form1.vb para regresar al formulario en modo de diseo. 14. Vea cmo al agregar un origen de datos al proyecto, Data Sources obtiene contenido. FIGURA 16.2 Data Sources.

15. En Data Sources aparece el DataSet que se defini y, en forma jerrquica, aparecern las tablas y las columnas que lo componen. Cada nodo de tabla y campo posee un selector de estilo que permite determinar la forma en que el objeto aparecer en una interfaz grfica. En el caso de los nodos que representan tablas, se puede seleccionar entre vista de rejilla (DataGridView), detalle de registro individual (Details) o no darle forma en interfaz (None). 16. Seleccione el nodo Jobs y especifique el estilo Details.

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

551

16

17. En el caso de los nodos que representan columnas, los estilos disponibles son los siguientes: a) b) c) d) e) f) g) TextBox, para un cuadro de texto ComboBox, para una lista desplegable de opciones Label, para que aparezca como etiqueta LinkLabel, para que aparezca como vnculo ListBox, para que aparezca como una lista de seleccin DateTimePicker, en el caso de campos de fecha None, en caso de que no queramos que aparezca en la interfaz.

18. Seleccione Jobs.min_lvl y el estilo NumericUpDown. Haga lo mismo con Jobs. max_lvl. Finalmente seleccione Job_id y seleccione el estilo Label para asegurarnos que no se modificar directamente la llave primaria. Es recomendable proteger las llaves primarias, particularmente cuando su modificacin implica la necesidad de cambiar tambin datos en tablas relacionadas.

552

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

19. Arrastre el nodo Jobs de Data Sources a su formulario y vea lo que pasa.

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

553

20. Acaba de crear una interfaz de edicin y navegacin de datos sin haber utilizado una sola lnea de cdigo. Por cada columna se agregaron objetos que permiten la visualizacin y edicin de datos; a partir de estos objetos puede modificar propiedades. Por ejemplo, para el caso de la ilustracin anterior, seleccionamos el objeto tipo Label en el que se mostrar Job_id y le cambiamos la propiedad Label.BorderStyle a Fixed3D. 21. Vea cmo en la parte baja aparecen los objetos que no tienen representacin grfica en la interfaz. Se coloc el DataSet que ya tenamos creado (PubsDataSet) y se cre un manejador de enlace de datos (BindingSource) de nombre JobsBindingSource. Se cre tambin un BindingNavigator, de nombre JobsBindingNavigator, que permite la navegacin entre registros. Finalmente tenemos un DataAdapter que permitir que los cambios que realicemos en el DataSet de forma desconectada puedan ser enviados al almacn de datos al aplicar el mtodo DataAdapter.Update. 22. Se le llama data bound controls a los elementos de la interfaz involucrados en operaciones de enlazado de datos con una fuente de datos; a esto se le conoce como Data Binding. Al proporcionar un estilo a los elementos en Data Sources, cada elemento puede ser integrado con un simple arrastrar y colocar en la interfaz; dependiendo del estilo, se asumirn propiedades estndar que pueden ser modificadas. Si ya se tiene un control y se desea que opere como data bound control, basta con arrastrar el elemento a enlazar al control, para que la asociacin se realice. 23. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 24. La barra de navegacin (BindingNavigator) sirve para la navegacin entre los registros de un DataSet y se compone de la siguiente manera: FIGURA 16.3 Binding Navigator.

16

554

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

25. Vaya al final, retroceda cuatro registros y vaya al inicio. Compruebe la forma en que los registros estn asociados a la barra de navegacin. 26. Cierre la aplicacin.

Adicin de registros en modo desconectado y duplicacin de modificaciones al almacn de datos


27. Todo lo que haga con los registros en su interfaz suceder en la copia local de datos, es decir, en el DataSet. Cada registro en su DataSet es en realidad un objeto DataRow que se integra en la coleccin Rows de algn objeto DataTable. Cada DataRow tiene una propiedad DataRow.RowState, que puede tener los siguientes valores: Added, si el registro fue agregado; Deleted, si el registro fue borrado del DataSet; Modified, si el registro ha sido modificado, y Unchanged, si el registro se mantiene sin cambios. 28. Las tablas de un DataSet pueden reproducir los cambios hechos de forma desconectada a travs de un DataAdapter. El DataAdapter posee cuatro propiedades de comando: a) b) c) d)
DataAdapter.SelectCommand DataAdapter.UpdateCommand DataAdapter.DeleteCommand DataAdapter.InsertCommand

Al aplicar el mtodo DataAdapter.Update se har una revisin de los objetos DataRow de la tabla; si DataRow.RowState es Added, se ejecutar el comando establecido en DataAdapter.InsertCommand sobre el almacn de datos; si es Deleted, se ejecutar el comando DataAdapter.DeleteCommand; si es Modified, se ejecutar el comando DataAdapter.UpdateCommand. 29. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 30. Vea el nmero de registros que reporta la barra de navegacin. 31. Haga clic en agregar (Add new) , en la barra de navegacin. Vea cmo en la barra de navegacin se reporta un nuevo registro. En Job desc, coloque Vendedor Senior, en min lvl coloque 70 y en max lvl coloque 100. Este nuevo registro (DataRow) tendr un estado (RowState) de agregado (Added). 32. Haga clic en guardar cambios (Save data) , en la barra de navegacin. Se disparar el mtodo DataAdapter.Update del adaptador que controla la informacin de la tabla; el proceso revisar el estado de todos los registros que tienen el estado Unchanged.

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

555

Slo encontrar un registro con estado Added, que provocar que se ejecute sobre el almacn de datos el comando guardado en DataAdapter.InsertCommand. El almacn de datos estar actualizado, y no hemos tenido la necesidad de codificar nada. 33. Cierre la aplicacin.

Generacin de interfaz con registros padre-hijo en tiempo de diseo


34. Colquese en tiempo de diseo en el formulario. 35. Vea cmo en Data Sources, en la tabla Jobs aparece un nodo que hace referencia a Employees. Esto quiere decir que de acuerdo con el modelo de datos existe una relacin padre-hijo entre Jobs y Employees. 36. Para incluir en nuestra interfaz la informacin de los empleados que tienen un determinado puesto, basta con arrastrar a la interfaz el nodo Employee que se encuentra en Jobs. Es importante notar que el estilo que tiene asignado el nodo corresponde a DataGridView, por lo que se agregar a la interfaz en forma de rejilla. 37. Desde Data Sources, arrastre el nodo Employee que se encuentra en Jobs, abajo de los controles de detalle que la interfaz ya tiene. Acomode los objetos de su interfaz de tal forma que luzca de la siguiente manera: 38. Vea cmo se agreg un manejador de enlace de datos de empleados (EmployeeBin-

16

556

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

dingSource), as como un DataAdapter, por si se editan los datos desde la rejilla de datos que acabamos de agregar. 39. Construya la solucin (oprima las Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (F5). 40. Utilice la barra de navegacin a discrecin y vea la manera en que se enlazan dinmicamente los registros de ambas tablas. En caso de que existan empleados con un determinado puesto, se mostrarn en la rejilla, cuando el puesto que tiene est en los campos de detalle. 41. Nuestra interfaz se ve de la siguiente manera:

FIN DEL EJERCICIO *

Ejercicio 16.3
Actualizador de registros con Data Sources y enlazado de datos a un cuadro combinado En este ejercicio realizaremos un actualizador de ventas de ttulos, utilizando Data Sources. Se ver la forma en que se pueden agregar expresiones a un origen de datos. Este ejer-

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

557

cicio requiere que se haya realizado el ejercicio 16.1, que defina una conexin a base de datos, que en nuestro caso se llama aprendaws.pubs.dbo, y en su caso se llamar instancia.pubs.dbo, donde instancia es el nombre de su servidor SQL Server. 1. 2. 3. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). Agregue a su solucin un proyecto Windows Windows Application, llamado Ventas. Modifique las siguientes propiedades:
Propiedad Form1.Text Valor a asignar

Registro de ventas

4.

5.

6. 7. 8.

Agregue el origen de datos que requiere el programa. Abra la herramienta Data Sources, con la opcin Data Show Data Sources (oprimas las teclas Mays-Alt-D); fije la herramienta en el rea de trabajo de Visual Studio. En Data Sources haga clic en el vnculo Add New Data Source..., o seleccione la opcin Data Add New Data Source, para agregar un origen de datos al proyecto. Aparecer el asistente Data Source Configuration Wizard. Seleccione Database y haga clic en Next>. Seleccione la conexin instancia.pubs.dbo. Haga clic en el botn de radio Yes, include sensitive data in the connection string. Haga clic en el botn Next. El asistente permitir almacenar la cadena de conexin en el archivo de configuracin de la aplicacin. Deje el nombre que se propone por omisin y haga clic en el botn Next. El asistente mostrar los elementos de la base de datos que se pueden representar en un Data Source. Expanda el nodo Tables y seleccione las tablas Sales, Stores y Titles. Vea cmo el DataSet recibir el nombre de pubsDataSet. Haga clic en el botn Finish.

16

Personalizacin de cuadros combinados de tablas relacionadas


9. En Data Sources debern aparecer las tablas que se seleccionaron. Modifique el estilo de Sales a Detail y modifique el estilo de sales.stor_id a ComboBox. Los estilos deben quedar de la siguiente manera:

558

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

10. Arrastre Sales a la interfaz, que deber lucir de la siguiente forma:

11. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 12. Vea cmo en el cuadro combinado asociado a stor id aparecen los cdigos, y no las descripciones, de la tienda. Por un lado eso es correcto, ya que en la tabla se almacena la clave y no la descripcin; por otro lado, es antiesttico y poco claro. Lo ideal es que se vean las descripciones, pero que se manejen internamente las claves. 13. Cierre la aplicacin. 14. Cuando trabajamos con datos enlazados a un almacn de datos, estamos ante lo que se conoce como Data Binding. Las principales propiedades que entran en juego en operaciones de enlazado de datos son las siguientes:
Propiedad DataSource Funcin

Representa el objeto que actuar como fuente de datos. Puede ser un elemento de datos en memoria (DataSet, DataTables, etc.) o flujos de datos (DataReader). Representa el objeto que provee el contenido a mostrar en el objeto. Representa el objeto que provee el dato que internamente constituye el valor del control, para su utilizacin en procesamiento.

DisplayMember

ValueMember

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

559

DataBindings

Representa la coleccin de enlaces que se llevan a cabo a travs del objeto. Representa el subndice del elemento seleccionado. Representa el valor del elemento seleccionado.

SelectedIndex SelectedValue

15. En tiempo de diseo seleccione el cuadro combinado asociado a stor id y despliegue el men de acciones del control. Marque la casilla de verificacin Use data bound items.

16

16. Al activar la casilla de verificacin aparecen las propiedades involucradas en el enlazado de datos. 17. Seleccione en Data Sources el nodo Other Data Sources Project Data Sources pubsDataSet stores.

560

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

18. Al hacer la seleccin se genera un nuevo enlace, al que se le da el nombre de storesBindingSource. Cada enlace que hacemos tendr su propio identificador. 19. Para Display Member seleccione stor_name, y en Value Member seleccione stor_id. En Selected Value seleccione salesBindingSource stor_id, que es el id que le corresponde al registro. 20. Finalmente, en Properties busque el grupo de propiedades DataBindings y seleccione None para que el texto que aparezca en el cuadro combinado sea el que le corresponde de acuerdo con los datos enlazados.

21. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas CTRL-MAYS-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 22. Navegue entre los registros y vea cmo en lugar de stor_id aparece stor_name. Si hacemos clic en el combo, aparecern todas las tiendas de las cuales podemos seleccionar alguna.

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

561

23. Cierre la aplicacin. FIN DEL EJERCICIO *

16

562

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

MAPA

MENTAL DEL CAPTULO

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

563

TERMINOLOGA
AcceptChanges, 536 Adaptador de datos, 535 Add, 531 CaseSensitive, 539 Clear, 531, 539 Clone, 539 Constraint, 530, 541 ConstraintCollection, 530 Contains, 531 Copy, 540 CopyTo, 531 Count, 531 Data Binding, 553 bound controls, 553 Source Configuration Wizard, 546 Sources, 550 DataAdapter, 535 DataBindings, 559 DataColumn, 530, 541 DataColumnCollection, 530 DataRelation, 530 DataRelationCollection, 530 DataRow, 541 DataRowCollection, 530 DataSet sin tipos, 535 DataSource, 558 DataTable, 530, 541 DataTableCollection, 530 DataView, 530 Datos, objetos de, 541 DeleteCommand, 536 DisplayMember, 558 Dispose, 537, 540 Disposed, 538, 540 DuringFill, 536 EnforceConstraints, 539 Esquema, 538 objetos de, 541 Fill, 535, 537 FillSchema, 535, 537 Finalize, 538 GetFillParameters, 537 GetXml, 540-1 GetXmlSchema, 540-1 InsertCommand, 536 Item, 531 Objetos de esquema, 541 de datos, 541 OnFillError, 538 ReadXml, 540-1 ReadXmlSchema, 540-1 Relation(s), 539, 541 Remove, 531 Reset, 540 Rows, 530 RowUpdated, 538 RowUpdating, 538 Schema, 538 SelectCommand, 536 SelectedIndex, 559 SelectedValue, 559 Tables, 539 Untyped DataSet, 535 Update, 537 UpdateCommand, 536 ValueMember, 558 WriteXml, 540-1 WriteXmlSchema, 540-1

16

564

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

PREGUNTAS
16.1 Mencione los objetos que componen el modelo de objetos DataSet. 16.2 Mencione qu colecciones permiten la organizacin de objetos Data
Set.

16.3 Mencione para qu sirve DataAdapter y cules son sus miembros ms importantes. 16.4 Mencione cules son los miembros ms importantes de DataSet. 16.5 Mencione qu mtodos de DataSet permiten la integracin de XML.

Captulo 16. Manejo de bases de datos desde Aplicaciones Windows

565

Notas:

16

566

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Es el objeto ms importante del Modelo de Objetos DataSet: a) DataAdapter b) DataSet c) DataRow 2. No forma parte del Modelo de Objetos DataSet: a) DataAdapter b) DataTable c) DataRow 3. La coleccin Rows tiene dependencia con el objeto: a) DataSet b) DataTable c) DataAdapter 4. La variable de trabajo utilizada por For Each debe ser: a) .De la misma naturaleza (tipo) que los objetos referidos por la coleccin que se desea explorar b) .Un Object genrico c) .DataTable 5. En una aplicacin de base de datos, es necesario incluir la siguiente librera slo si se trabaja con DataSet: a) System.Data.dll b) System.Windows.Forms.dll c) System.Xml.dll

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. Para leer informacin, DataSet es ms rpido que DataReader. 7. Cada objeto DataTable posee su propia coleccin Rows. 8. El uso de DataAdapter es opcional cuando se quiere cargar informacin de un almacn de datos a un DataSet. 9. DataSet utiliza HTML para la comunicacin de paquetes de datos autodescriptivos. 10. Slo a travs de DataSet podemos disponer de un modelo de datos relacional en memoria local (cach).

CAPTULO

17

Manejo de bases de datos desde aplicaciones Web


Objetivos: Aprender el manejo de bases de datos en modo parcialmente conectado utilizando ASP.NET. 1. Conocer los Data Source Controls y su funcin. 2. Conocer los Data Bound Controls. 3. Aprender la forma en que conviven los Data Source Controls y Data Bound Controls. 4. Aprender a desarrollar aplicaciones de actualizacin de bases de datos con el mximo uso de las herramientas de Visual Studio.

567

568

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Data Source Controls y Data Bound Controls. . . . . . . . . . . . . . . . . . . . . . . . . Data Source Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Data Bound Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Establecimiento de un enlazado de datos hacia un GridView . . Adicin y configuracin de un SqlDataSource . . . . . . . . Adicin y configuracin de un GridView . . . . . . . . . . . . Actualizador de bases de datos desconectadas con ASP.NET . . . Adicin y configuracin de un objeto DetailsView . . . . Personalizacin de campos en DetailsView . . . . . . . . . . Anlisis de las plantillas de los campos en DetailsView . Establecimiento de los comandos para la afectacin de datos va SqlDataSource . . . . . . . . . . . . . . . . . . . . . . Especificacin de la funcionalidad disponible en DetailsView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 569 570 572 572 576 579 580 581 584 587 592 596 597 597 599

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

569

Uno de los aspectos que mayores cambios experiment .NET Framework, con respecto a la versin 1.1, es el desarrollo en ASP.NET. Son tantos los cambios introducidos en la versin 2.0 de .NET Framework que se ha dado la diferencia en nombre: ASP.NET 2.0. ASP.NET redujo la cantidad de programacin al mximo, permitiendo la mayor cantidad de funcionalidad con un mnimo de lneas de cdigo escritas por el desarrollador. En el caso del soporte a las aplicaciones de base de datos, el cambio es exponencial. Si adems de eso estamos desarrollando en Visual Studio, el cdigo es, prcticamente, cosa del pasado (al menos en la capa de presentacin de las aplicaciones y el enlazado de datos).

Data Source Controls y Data Bound Controls


En ASP.NET se aceptan todos los objetos de acceso a datos ADO.NET para el trabajo en modo conectado; sin embargo, podemos aprovechar la simplicidad que ofrece ASP.NET para el manejo complejo de datos. Esto significa que de forma declarativa, es decir con base sobre todo en etiquetas de hipertexto en una pgina, se pueden especificar tareas que con anterioridad requeran de programacin. En ASP.NET no se requiere codificar nada para realizar las siguientes actividades relacionadas con los datos: 1. 2. 3. 4. 5. Seleccionar y desplegar datos. Ordenar, paginar y guardar datos en cach. Actualizar, insertar y eliminar datos. Aplicar filtros de datos en tiempo de ejecucin. Crear escenarios de registro maestrodetalle.

17

Data Source Controls


Se conoce como Data Source Controls a los controles Web que permiten la conexin con un almacn de datos, as como a las operaciones de lectura y escritura. Los principales Data Source Controls son los siguientes:
Data Source Control ObjectDataSource Descripcin

Representa un origen de datos basado en objetos de negocio. Es cuando los datos no se reciben de un proveedor de datos .NET, sino de un objeto o clase. Representa un acceso a bases de datos va los proveedores de datos ADO.NET (managed data providers como OleDbClient, SQLClient, OracleClient, etctera)

SqlDataSource

570

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

AccessDataSource

Representa un acceso a una base de datos en Microsoft Access. Representa el consumo de datos desde un archivo XML, especialmente diseado para su utilizacin desde controles Web jerrquicos como TreeView o Menu. Representa un conjunto de datos utilizable en el mecanismo de navegacin entre pginas de ASP.NET

XMLDataSource

SiteMapDataSource

Data Bound Controls


Se conoce como Data Bound Controls a los controles que sirven como un canal de acceso directo a un origen de datos desde el navegador; este tipo de controles se enlazan a una determinada fuente de datos y mantienen los contenidos actualizados de forma dinmica, conforme el usuario hace variaciones en los apuntadores de datos y registros. Los Data Bound Controls guardan una estrecha relacin con los Data Source Controls, ya que de stos obtienen los datos a enlazar. Es necesario especificar el Data Source Control que alimenta de datos al Data Bound Control a travs de la propiedad DataSourceId. Algunos de los Data Bound Controls principales son los siguientes:
Data Source Control BulletedList CheckBoxList Descripcin

Muestra los datos en forma de una lista de vietas. Muestra los datos en forma de una lista de seleccin, en donde cada elemento es una casilla de verificacin. Muestra los datos en forma de una lista desplegable de seleccin (combo). Muestra los datos en forma de una lista de seleccin de tamao fijo. Muestra los datos en forma de un conjunto de botones de opcin. Muestra anuncios publicitarios. Muestra los datos en forma de tabla. Cada elemento es mostrado de acuerdo a una plantilla (template) que es definida por el usuario. Muestra un registro de datos en forma tabular y permite la edicin, eliminacin e insercin de registros.

DropDownList

ListBox

RadioButtonList AdRotator DataList

DetailsView

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

571

FormView

Muestra un registro de datos en forma personalizada y permite la edicin, eliminacin e insercin de registros. Despliega datos en una tabla y permite edicin, actualizacin, ordenacin y paginado. Muestra un men dinmico. Muestra datos en forma de una lista cuyo formato puede personalizarse usando plantillas. Muestra datos en forma de un rbol jerrquico de nodos.

GridView

Menu Repeater

TreeView

Dependiendo del objeto de que se trate sern las propiedades que se deban establecer para el manejo de datos desde la Web. En el caso de objetos de lista de seleccin (BulletedList, CheckBoxList, DropDownList, ListBox y RadioButtonList) cada registro de la fuente de datos (Row) representar un elemento (Item) del objeto. Los elementos se almacenarn en una coleccin llamada Items. Cada registro de la fuente de datos contendr campos (Fields), que pueden jugar un papel importante en el manejo enlazado; por ejemplo, generalmente la informacin textual que se ve en la interfaz no es lo que deseamos que internamente se maneje para los procesos y el almacenamiento. Para especificar el campo que queremos que se muestre en la interfaz utilizamos la propiedad ListControl.DataTextField; para especificar el campo que el programa utiliza para efectos de procesamiento y almacenamiento, utilizamos la propiedad ListControl.DataValueField. Cuando se selecciona un elemento, el ndice del elemento se almacena en la propiedad ListControl.SelectedIndex, el elemento se almacena en ListControl.SelectedItem y el valor del elemento se almacena en la propiedad ListControl.SelectedValue. El evento predeterminado de este tipo de objetos es ListControl.SelectedIndexChanged, que sucede cuando el elemento seleccionado cambia. El mtodo WebControl.DataBind es el que realiza el enlazado entre el Data Source Control y el Data Bound Control.

17

572

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejercicio 17.1
Establecimiento de un enlazado de datos hacia un GridView En este ejercicio se realiza un enlazado a un objeto GridView, para mostrar el contenido de un origen de datos de forma tabular, con paginacin y con posibilidad de ordenamiento. El enlazado que se realiza es de una va, ya que slo se realizan actividades de lectura. 1. 2. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). En Solution Explorer seleccione el proyecto http://localhost/apnetspvs, invoque el men de contexto, seleccione la opcin Add New Item y agregue una Web Form de nombre Enlazado01.aspx.

Adicin y configuracin de un SqlDataSource


3. Agregue a la interfaz un objeto SqlDataSource. El objeto se agregar a la interfaz. Utilice la smart tag del control y seleccione la opcin Configure Data Source.

4.

Aparecer el asistente de configuracin de Data Source. Haga clic en New Connection, a fin de definir una nueva conexin para nuestros proyectos Web.

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

573

5.

Aparecer el asistente de conexin. Coloque el nombre de su servidor en Server Name. En nuestro caso es APRENDAWS, aunque usted deber especificar el pertinente. Se elige Use SQL Server Authentication y se proporciona el usuario y la contrasea de acceso. Elija Select or enter a database name y especifique pubs como base de datos de trabajo. Presione Test connection para comprobar que la conexin es posible. Si la conexin es satisfactoria, haga clic en el botn Ok, con lo que aparecer nuevamente el asistente de configuracin de conexin.

17

574

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

6.

El nombre que se le asign a su conexin es aprendaws.pubs.dbo. Haga clic en el botn Next.

7.

Se recomienda que la conexin se almacene como variable en el archivo de configuracin, que en el caso de Web se trata de Web.config. El asistente solicitar el nombre que deseamos darle a la conexin en el archivo de configuracin. Asegrese de que la casilla de verificacin Yes, save this connection as est seleccionada, y escriba en el cuadro de texto el nombre ConexionDBWeb.

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

575

8.

La conexin nos servir para trabajar con datos de alguna tabla de la base de datos pubs. Seleccione la opcin Specify columns from a table or view y en el cuadro combinado de nombres de tabla seleccione sales (ventas). Al hacer esto aparecern las columnas de la tabla en el espacio Columns; marque la casilla de verificacin que muestra un asterisco con el fin de que se incluyan todas las columnas de la tabla. Haga clic en el botn Next.

17

9.

Aparecer en el asistente una ventana de prueba. Haga clic en Test query y vea si los datos se extraen satisfactoriamente. En caso de que as sea, haga clic en el botn Finish.

576

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

10. Con esto ya ha quedado configurada una conexin que puede ser utilizada por nuestra aplicacin a travs del objeto SqlDataSource1, y que mostrar las ventas de libros que se encuentran almacenadas en la base de datos pubs.

Adicin y configuracin de un GridView


11. Agregue a la interfaz un objeto GridView. Organice los objetos en la pgina de tal manera que luzca de la siguiente manera:

12. Utilice la smart tag de GridView y modifique Choose Data Source, eligiendo SqlDataSource1, que es el nombre de nuestro objeto de origen de datos.

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

577

13. Al seleccionar el origen de datos, automticamente cambiar el contenido del DataView, mostrando un contenido ajustado a la informacin contenida en el Data Source.

14. En la smart tag de GridView seleccione Auto Format. En la lista Select a scheme, seleccione la opcin Rainy Day y haga clic en el botn Ok. De esa forma le habremos proporcionado un formato a nuestros datos.

17

15. En la smart tag de GridView marque las casillas de verificacin Enable paging y Enable sorting, para que sea posible paginar el contenido y ordenar los datos cuando hagamos clic en el encabezado de la rejilla de datos.

Ejecucin guiada de http://localhost/apvbnetvs/

Enlazado01.aspx

16. Utilice Solution Explorer para establecer http://localhost/apvbnetvs/ como proyecto de inicio de la solucin (StartUp Project). Seleccione la pgina Enlaza-

578

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

do01.aspx

como pgina de inicio (Set as Start Page). Guarde todos los cambios que ha realizado en la solucin (oprima las teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5).

17. En la barra inferior del GridView aparecen vnculos que refieren a las pginas de datos. Haga clic en dichos vnculos para que aprecie cmo el contenido de la tabla sales se ha distribuido en varias pginas; seguramente la ltima pgina posee menos elementos que las dems. 18. En la parte superior de GridView aparecen los encabezados en forma de vnculos. Al hacer clic en ellos los datos se ordenarn por dicha columna. 19. Cierre la aplicacin. 20. En este ejercicio vimos cmo se gener un Data Source Object (SqlDataSource) y cmo se utiliz a travs de un Data Bound Control (GridView). FIN DEL EJERCICIO *

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

579

Ejercicio 17.2
Actualizador de bases de datos desconectadas con ASP.NET Este ejercicio realiza un actualizador de registros (altas, bajas, cambios y consultas), utilizando las facilidades que Visual Studio provee a ASP.NET. En este ejercicio se realiza un enlazado de datos de dos vas, dado que se realizan operaciones de lectura y escritura. 1. 2. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). En Solution Explorer seleccione el proyecto http://localhost/apnetspvs, despliegue el men contextual, seleccione la opcin Add New Item y agregue una Web Form de nombre Enlazado02.aspx. Agregue a la interfaz un objeto SqlDataSource. Utilice la smart tag del control y seleccione la opcin Configure Data Source. En el asistente, seleccione ConexionDBWeb en la pregunta Which data connection should your application use to connect to the database? y haga clic en el botn Next.

3. 4.

17

5.

Seleccione la tabla jobs y especifique que desea trabajar con todos los campos de la tabla (*). Haga clic en el botn Next.

580

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

6.

Haga clic en el botn Finish para concluir con la definicin del nombre del origen de datos ser SqlDataSource1.

SqlDataSource.

El

Adicin y configuracin de un objeto DetailsView


Agregue un objeto DetailsView a la interfaz. Se le asignar el nombre DetailsView1 de manera predeterminada. 8. La clase DetailsView permite definir un objeto que muestra un registro a la vez proveniente de un origen de datos; con este objeto es posible proporcionar formato estndar basado en plantillas (templates) e instrumentar acciones de edicin, borrado e insercin de registros. 9. En conjunto con SqlDataSource, DetailsView se encarga de crear internamente un DataSet, construir objetos de recopilacin de datos y lanzar comandos de actualizacin al almacn fsico de datos. 10. Utilizando la smart tag de DetailsView, en Choose Data Source elija SqlDataSource1, que es el origen de datos que ya definimos. 7.

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

581

11. Automticamente se habrn colocado los campos que contiene SqlDataSource en forma de parejas de valores. En trminos generales, cada lnea del objeto DetailsView es un campo (Field), se pueden agregar campos que no estn definidos en SqlDataSource e incluso se pueden agregar campos relacionados con el comportamiento de DetailsView con respecto a las actividades de edicin, eliminacin e insercin de registros nuevos. 12. Utilizando los delimitadores de tamao, aumente el ancho del objeto DetailsView1. 13. Utilizando la smart tag de DetailsView1 seleccione Auto Format... y luego el formato Slate.

17
14. Nuestra interfaz debe lucir de la siguiente forma:

Personalizacin de campos en DetailsView


15. Utilizando la smart tag de DetailsView1, seleccione la opcin Edit Fields.., para editar los campos involucrados en la interfaz. Aparecer la ventana Fields. Esta herra-

582

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

mienta se compone de tres elementos principales: la lista de campos disponibles (Available fields), que permite seleccionar los objetos que han de verse en la interfaz que representa DetailsView1; la lista de campos seleccionados (Selected fields), que permite seleccionar los campos que ya han sido integrados a la interfaz a travs de DetailsView1; y las propiedades de campos enlazados (BoundField properties), que permite modificar las propiedades de los campos enlazados.

16. El vnculo Convert this field into a TemplateField es un elemento fundamental de la ventana Fields, dado que permite manejar un campo de DetailsView como objeto TemplateField. Los objetos TemplateField son campos personalizados que permiten la visualizacin y el uso de un control enlazado, habilitando comportamientos variados a partir de plantillas (templates). Esto implica que un mismo control enlazado puede verse y comportarse de diferente manera, de acuerdo con la plantilla que le apliquemos en un momento dado. 17. Al seleccionar un campo en Selected fields, las propiedades de este elemento se muestran y editan en BoundField properties. En nuestro caso, los campos devueltos por SqlDataSource1 aparecen en la lista Selected fields (stos fueron agregados automticamente). 18. Elija en Selected Fields el campo job_id. En BoundField properties busque la propiedad HeaderText y coloque el valor Id del puesto: oprima la tecla Intro para aceptar. Haga clic en el vnculo Convert this field into a TemplateField, para disponer de varias mscaras de comportamiento para job_id. Vea cmo la referencia del campo cambia en Selected Fields, tanto en la descripcin como en el icono.

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

583

19. Repita el procedimiento para los dems campos. Elija en Selected Fields el campo job_desc. Modifique en BoundField properties la propiedad HeaderText, colocando el valor Descripcin:, y haga clic en el vnculo Convert this field into a TemplateField. 20. Elija en Selected Fields el campo min_lvl. Modifique en BoundField properties la propiedad HeaderText, colocando el valor Nivel mnimo:, y haga clic en el vnculo Convert this field into a TemplateField. 21. Elija en Selected Fields el campo max_lvl. Modifique en BoundField properties la propiedad HeaderText, colocando el valor Nivel mximo:, y haga clic en el vnculo Convert this field into a TemplateField. 22. En Available fields seleccione el nodo CommandField. Haga clic Add. CommandField permitir controlar las operaciones de su interfaz. 23. Elija en Selected Fields el campo CommandField, y en BoundField properties, cambie las siguientes propiedades:
Propiedad ButtonType CancelText DeleteText EditText InsertText NewText SelectText UpdateText Valor a asignar

17

Button Cancelar Borrar registro Modificar datos Insertar Nuevo registro Consulta Actualizar

584

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

24. Haga clic en el botn Ok. Nuestra interfaz debe lucir de la siguiente forma:

Anlisis de las plantillas de los campos en DetailsView


25. Ya ha preparado su objeto DetailsView para el manejo de datos y el dilogo con el objeto SqlDataSource. Para que las operaciones que realicemos en DetailsView se trasladen al almacn de datos, es necesario que definamos las instrucciones SQL que han de aplicar al momento de presionar tal o cual botn de la interfaz (adems, seguramente las instrucciones SQL que proporcionemos requieren los valores que estamos manejando en la interfaz). 26. Lo primero que debemos saber es el nombre de los objetos a travs de los cuales DetailsView manejar los campos de SqlDataSource. Para ello, en la smart tag de

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

585

DetailsView1

seleccione Edit Templates, con lo cual se mostrar un selector de plan-

tillas.

27. En el cuadro combinado Display de la smart tag seleccione Field[0]

- Id del puesto:.

17

28. Con ello se mostrarn todas las vistas y comportamientos disponibles para el campo Id del puesto. Vea cmo existen distintas formas en que el campo puede verse y comportarse. ItemTemplate ser la vista general del campo, AlternatingItemTemplate es la forma en que lucir el campo en caso de alternado de colores, EditItemTemplate es la forma en que lucir en caso de que se proceda a la edicin del campo, InsertItemTemplate es la forma en que se manejar el campo en caso de insercin de registros y HeaderTemplate es la forma en que aparecer el encabezado del campo.

586

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

29. Visual Studio ha detectado que jobs_id (campo al que se enlaza el campo de DetailsView1) es de tipo identity en la base de datos, por lo que no puede hacer otra cosa que mostrar el dato de dicho campo. 30. Utilizando la smart tag de DetailsView1, en Display, seleccione Field[1] Descripcin. Vea cmo este campo admite operaciones de edicin en la base de datos e incluye cuadros de texto en los escenarios de edicin e insercin.

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

587

31. Haga clic sobre el cuadro de texto (TextBox) del escenario EditItemTemplate. Despliegue Properties (oprima la tecla F4) y vea cul es el valor de la propiedad Id del cuadro de texto donde se manejar el campo job_desc. El objeto se llama TextBox1. Si revisramos todos los objetos que manejan los campos, tendramos lo siguiente:
Campo en la base de datos job_id job_desc min_lvl max_lvl Campo en DetailsView1 Id del Puesto Descripcin Nivel mnimo Nivel mximo Control en Templates Label1 TextBox1 TextBox2 TextBox3

32. Despliegue la smart tag de DetailsView1 y seleccione el vnculo End Template Editing.

Establecimiento de los comandos para la afectacin de datos va SqlDataSource


33. En tiempo de diseo seleccione el objeto SqlDataSource1. Abra Properties (oprima la tecla F4). 34. Modifique el valor de la propiedad DeleteQuery, haciendo clic en el botn que despliega el Command and Parameter Editor .

17

35. Haga clic en el botn Query Builder para que Command and Parameter Editor le asista en la elaboracin de la instruccin de eliminado de datos. Aparecer la ventana

588

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Add Table, en la cual se especifican las tablas involucradas en la instruccin SQL a construir. Seleccione jobs y haga clic en Add. Se integrarn las tablas a Query Builder, por lo que puede cerrar Add Table haciendo clic en Close.

36. Query Builder se divide en cuatro secciones o paneles (panes): el de diagrama, el de seleccin y asignacin, el de instruccin textual y el de los resultados de la ejecucin del comando. En el panel de seleccin y asignacin seleccione en Column el campo job_id, en Table escriba jobs y en Filter escriba =@job_id. Haga clic en el botn Ok. para regresar a Command and Parameter Editor. Automticamente se actualizar la instruccin SQL, quedando como sigue: FIGURA 17.1 Estructura de Query Builder Panes.

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

589

37. La instruccin SQL que auxiliar a SqlDataSource en la eliminacin de datos ha quedado como sigue:
DELETE FROM jobs WHERE (job_id = @job_id)

38. Como puede darse cuenta, se est haciendo uso de un parmetro que no ha sido declarado en ninguna parte (@job_id). 39. Haga clic en el botn Add Parameter de Command and Parameter Editor. Se agregar un parmetro en Parameters. Escriba en la columna Name el nombre del parmetro @job_id. En el cuadro combinado Parameter source seleccione Form, lo que indica que se tomar el valor que se tenga en el formulario que dinmicamente crear DetailsView1. Finalmente, escriba en FormField el nombre del campo que en las plantillas contiene la informacin de job_id, es decir Label1. Haga clic en el botn Ok.

17

40. De esta forma, el comando interacta con DetailsView1 para construir la instruccin SQL que se ejecutar sobre el almacn de datos va SqlDataSource1. El comando, obviamente, eliminar el registro en que nos encontremos. 41. Modifique el valor de la propiedad InsertQuery, haciendo clic en el botn que invoca el Command and Parameter Editor . Utilice Query Builder para la construccin de la instruccin INSERT. Seleccione la tabla jobs nuevamente y seleccione slo los campos que no forman la llave primaria (job_desc, min_lvl, max_lvl), dado que la llave primaria es identity. Vea cmo al seleccionar los campos en el diagrama, stos se agregan en el panel de seleccin y asignacin. Para cada una de las columnas se deber especificar un parmetro con el mismo nombre, anteponiendo el smbolo de arroba. Los parmetros se colocarn en la columna New Value. Presione el botn Ok.

590

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

42. La instruccin SQL que auxiliar a SqlDataSource en la insercin de datos ha quedado de la siguiente manera:
INSERT INTO jobs(job_desc, min_lvl, max_lvl) VALUES (@job_desc, @min_lvl, @max_lvl)

43. Agregue los parmetros que acabamos de definir en la instruccin (@job_desc, @min_lvl, y @max_lvl). Al igual que el parmetro @job_id, estos parmetros recibirn los datos de la forma (Form), con los Form fields siguientes: TextBox1, TextBox2 y TextBox3, respectivamente.

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

591

44. Modifique el valor de la propiedad UpdateQuery, haciendo clic en el botn que invoca el Command and Parameter Editor . Utilice Query Builder para la construccin de la instruccin UPDATE. Seleccione la tabla jobs nuevamente y seleccione slo los campos que no forman la llave primaria (job_desc, min_lvl, max_lvl), dado que la llave primaria es identity y no se puede modificar. Vea cmo al seleccionar los campos en el diagrama, stos se agregan en el panel de seleccin y asignacin; para cada una de las columnas se deber especificar un parmetro con el mismo nombre, anteponiendo el smbolo de arroba. Los parmetros se colocarn en la columna New Value . Oprima el botn Ok. 45. En este caso es muy importante no olvidar el filtro de modificacin en el panel de seleccin y asignacin para evitar la sustitucin de valores para todos los registros. Despus de los campos que se han agregado automticamente agregue manualmente job_id en Columns y jobs en Table; no seleccione la casilla de verificacin Set y en Filter escriba =@job_id.

17

46. La instruccin SQL que auxiliar a SqlDataSource en la modificacin de datos ha quedado como sigue.
UPDATE jobs SET job_desc = @job_desc, min_lvl = @min_lvl, max_lvl = @max_lvl WHERE (job_id = @job_id)

47. Agregue los parmetros que acabamos de definir en la instruccin (@job_desc, @min_lvl, @max_lvl y @job_id). Estos parmetros recibirn los datos de la forma (Form) con los siguientes Form fields: TextBox1, TextBox2, TextBox3 y Label1, respectivamente.

592

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

48.

SqlDataSource

ya es capaz de ejecutar instrucciones SQL sobre el almacn de datos, en coordinacin con los valores que recopilar DetailsView.

Especificacin de la funcionalidad disponible en DetailsView


49. Ya que hemos realizado las definiciones que hacen posible que DetailsView y SqlDataSource manejen todas las opciones de un actualizador, es necesario indicarle a la pgina qu funciones queremos disponibles. 50. Desde la smart tag de DetailsView1, marque las casillas de verificacin Enable Paging para que la muestra de registros admita paginacin; Enable Inserting, para que se permita insertar nuevos registros; Enable Editing, para que se permita la modificacin de datos; y finalmente Enable Deliting, para que se permita la eliminacin de registros.

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

593

Ejecucin guiada de http://localhost/apvbnetvs/

Enlazado02.aspx

51. Utilizando Solution Explorer establezca el proyecto http://localhost/apvbnetvs/ como proyecto de inicio de la solucin (StartUp Project); seleccione la pgina Enlazado02.aspx como pgina de inicio (Set as Start Page). Guarde todos los cambios que ha realizado en la solucin (oprima las teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 52. Inicialmente se puede observar que DetailsView est haciendo el enlazado y la informacin se muestra en el formato especificado.

17

53. Haga clic en los vnculos numerados de la parte baja de DetailsView. Esos vnculos son de paginacin; corresponde un vnculo a cada uno de los registros extrados del origen de datos. Lo que vemos est en memoria, en un objeto DataSet (estamos trabajando de forma desconectada). 54. Haga clic en el botn Nuevo registro. Cambiar la interfaz, mostrando los campos en el contexto de insercin de datos, InsertItemTemplate. Escriba en Descripcin el dato Programador AP; en Nivel mnimo escriba 60; en Nivel mximo escriba 100. Haga clic en el botn Insertar.

594

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

55. Al hacer clic en Insertar, DetailsView le proporciona los valores de parmetro al comando SQL asignado a la propiedad InsertQuery de SqlDataSource1, e intenta el mtodo Update sobre el DataSet de trabajo. Al hacerlo, el comando de insercin reproduce la instruccin SQL de agregado de datos sobre el almacn de datos fsicos. En resumen, hemos agregado un registro a una base de datos en modo desconectado. 56. Utilice la paginacin hasta que vea el registro que acaba de agregar. El id asignado puede variar, dependiendo de los registros que tenga en su base.

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

595

57. Haga clic en Modificar datos. En Descripcin cambie a Programador AP-DEV, en Nivel mnimo a 70 y en Nivel mximo a 120. Haga clic en el botn Actualizar.

58. Utilice la paginacin para colocarse en el registro que acaba de modificar y vea cmo los datos se han actualizado.

17

59. Haga clic en Borrar registros. Su registro se habr borrado. 60. Lo importante de todo es que para toda esta funcionalidad no fue necesario escribir una sola lnea de cdigo. FIN DEL EJERCICIO *

596

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

MAPA

MENTAL DEL CAPTULO

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

597

TERMINOLOGA
AccessDataSource, 570 AdRotator, 570 BulletedList, 570 Campos, 571 CheckBoxList, 570 Command and Parameter Editor, 589 Data Bound Controls, 570 Source Controls, 569 DataBind, 571 DataList, 570 DataTextField, 571 DataValueField, 571 DetailsView, 570 DropDownList, 570 Fields, 571 FormView, 571 GridView, 570 ListBox, 570 Menu, 571 ObjectDataSource, 569 Panel de diagrama, 588 de instruccin textual, 588 de resultados de ejecucin de comandos, 588 de seleccin y asignacin, 588 RadioButtonList, 570 Repeater, 571 SelectedIndex, 571 SelectedIndexChange, 571 SelectedItem, 571 SelectedValue, 571 SelectedValueField, 571 SiteMapDataSource, 570 Smart Tag, 576 SqlDataSource, 569 TreeView, 571 XML Data Source, 570

PREGUNTAS
17.1 Para qu sirven los Data Source Controls? 17.2 Cules son los Data Source Controls ms comunes? 17.3 Para qu sirven los Data Bound Controls? 17.4 Cules son los Data Bound Controls ms comunes? 17.5 Qu Data Source Controls y Data Bound Controls cree que utilizar en su mbito profesional?

17

598

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Notas:

Captulo 17. Manejo de bases de datos desde Aplicaciones Web

599

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Controles ASP.NET que de forma declarativa permiten la conexin con bases de datos, adems de realizar lectura y escritura de datos: a) Data Source Controls b) Data Bound Controls c) Data Provider Objects 2. Controles ASP.NET que permiten el canal de acceso directo a un origen de datos desde el navegador: a) Data Source Controls b) Data Bound Controls c) Data Provider Objects 3. Muestra un registro de una tabla en forma tabular y permite la edicin, eliminacin e insercin de registros: a) DetailsView b) GridView c) Repeater 4. Representa el origen de datos requeridos por TreeView y Menu: a) .ObjectDataSource b) .XMLDataSource c) .HieracySource 5. Mtodo que establece el enlazado de datos entre el Data Bound Control y el Data Source Control: a) DataBinding b) Bind c) DataBind

17

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. ASP.NET 1.1 y ASP.NET 2.0 proporcionan mecanismos para establecer de forma declarativa actividades que antes requeran codificacin ADO.NET. 7. SqlDataSource slo permite el manejo de datos almacenados en bases de datos de SQL Server. 8. AccessDataSource slo permite el manejo de datos almacenados en bases de datos de Access. 9. Los Data Source Controls utilizan los datos que proveen los Data Bound Controls. 10. En ASP.NET 2.0 es posible realizar un actualizador de base de datos sin necesidad de codificar nada manualmente.

CAPTULO

18

Colecciones genricas (generics)


Objetivos: Aprender las generalidades de las clases para manejo de colecciones genricas. 1. Se familiarizar con las generics y sus formas de implementacin. 2. Aprender a instrumentar generics en bloques de cdigo. 3. Aprender a instrumentar generics en colecciones. 4. Conocer el uso de List. 5. Conocer el uso de Queue. 6. Conocer el uso de Stack. 7. Conocer el uso de Dictionary.

601

602

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Contenido
Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bloques de cdigo usando generics . . . . . . . . . . . . . . . . . . . . . . . . . . Programacin de un mtodo dinmico usando Generics Colecciones genricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementacin de List (Generics). . . . . . . . . . . . . . . . . . Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementacin de Queue (Generics) . . . . . . . . . . . . . . . Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementacin de Stack (Generics) . . . . . . . . . . . . . . . . Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementacin de Dictionary (Generics) . . . . . . . . . . . . Mapa mental del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminologa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examen rpido del captulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 603 604 604 607 607 608 610 610 613 613 616 616 619 620 620 622

Captulo 18. Colecciones genricas (generics)

603

Generics
La versin 2.0 de .NET Framework aporta mltiples mejoras a clases existentes de BCL, adems de reorganizar y reclasificar algunos de los recursos. Una de las principales capacidades totalmente nuevas que introduce la versin 2.0 son las implementaciones genricas. Las implementaciones genricas, mejor conocidas como Generics, son la funcionalidad proporcionada por CLR con el fin de que clases, estructuras, interfaces y mtodos puedan utilizar datos de entrada de tipo indeterminado (que se resolver al llamar a ejecucin). En otras palabras, son implementaciones donde no slo los valores de los datos son intercambiables, sino tambin sus tipos. Este concepto es muy similar a los templates manejados por C++, que tenan, a grandes rasgos, la misma funcionalidad. Para darnos una idea de por qu es necesario introducir estos elementos a los lenguajes .NET, considere el caso hipottico descrito a continuacin. Imagine que tiene una base de datos con informacin bibliogrfica, y que cuenta con una clase para realizar una bsqueda compleja; en ella se puede proporcionar el nombre del ttulo (de tipo String) o bien el ISBN (un dato Double). Dado que no se sabe si la informacin proporcionada ser un String o un Double, ser necesario manejar datos de tipo Object, que no son eficientes; adems, la codificacin de la clase tendra que anticiparse a los posibles conflictos de diferencia de tipo. Una alternativa sera hacer procedimientos distintos dependiendo del tipo de dato proporcionado o, de plano, implementar objetos con polimorfismo. Si adems queremos que los programas sean type safe, el programa se complicar ms dado que deberemos estar al pendiente de cualquier conversin de datos. Generics ofrece una solucin prctica al problema. Con generics, el tipo de dato es intercambiable y se especifica al momento de la declaracin en tiempo de ejecucin. De esa forma se codifica un solo procedimiento capaz de manejar ms de un tipo de dato de manera transparente. La funcionalidad de generics puede darse en dos formas generales:
Bloques de cdigo Es el tipo de uso de generics por medio del cual clases y mto-

18

dos se implementan con parmetros cuyo tipo de dato a utilizar es especificado al momento de llamar a ejecucin. Colecciones Son colecciones preconstruidas que permiten la especificacin en tiempo de ejecucin del tipo de dato a almacenar.

604

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Bloques de cdigo usando generics


El uso de generics en bloques de cdigo permite definir argumentos o parmetros cuyo tipo de dato no est predefinido para la clase o mtodo sino hasta que se manda llamar a ejecucin. La forma de implementar generics en esta modalidad es especificando la variabilidad de algn dato parametrizado, mediante el uso de la especificacin Of T:
Of T) Class MiClase(O Public Dato As T Sub Muestra() Console.WriteLine(Dato) End Sub End Class

En este ejemplo, la clase MiClase utiliza generics de tal manera que los datos tiles para el proceso pueden ser de cualquier tipo (pero que se especificar al momento de la instanciacin). El mtodo Muestra expondr el dato proporcionado a la clase sin importar su tipo. Al momento de consumir la clase es necesario hacer referencia al tipo de datos que se desea utilizar; esto se lleva a cabo a travs de la especificacin Of, caracterstica de generics.
Dim A As New MiClase(Of Integer) A.Dato = 10 A.Muestra() Dim B As New MiClase(Of String) B.Dato = Mensaje B.Muestra()

El procedimiento no requiere de modificacin alguna para funcionar con datos de diferentes tipos, pero al mismo tiempo es type safe. Este mismo procedimiento puede intentarse sin utilizar generics, pero en caso de especificar Option Strict On, quedaran al descubierto las conversiones implcitas que el programa realiza. En el caso de no realizarse las conversiones explcitas se provocara una excepcin.

Ejercicio 18.1
Programacin de un mtodo dinmico usando Generics En este ejercicio comprobaremos la funcionalidad de generics mediante un procedimiento que puede manejar informacin de entrada de diferentes tipos de dato. El programa ser

Captulo 18. Colecciones genricas (generics)

605

type safe, con el fin de hacer evidente que no es necesario realizar conversiones explcitas de datos con el uso adecuado de generics. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado UsoGenerics. 3. Edite el programa de tal forma que aparezca de la siguiente forma:

Codificacin de UsoGenerics
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 26 27 28 29 30 31 32 33 34 35 36 Option Strict On Imports System.Console Module Module1

Module1.vb

Sub Main() Dim X As Integer = 5 Dim Y As Integer = 7 WriteLine(I = & X) WriteLine(J = & Y) Intercambia(Of Integer)(X, Y) WriteLine(I = & X) WriteLine(J = & Y)

Dim W As String = Juan Dim Z As String = Mara WriteLine(S = & W) WriteLine(R = & Z) Intercambia(Of String)(W, Z) WriteLine(S = & W) WriteLine(R = & Z) Write(Presiona INTRO) ReadLine() End Sub Sub Intercambia(Of T)(ByRef a As T, ByRef b As T) Dim Paso As T Paso = a a = b b = Paso End Sub End Module

18

606

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejecucin guiada de UsoGenerics

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que haya realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 5. En las lneas 1 y 2 se garantiza que el programa sea type safe; con ello nos aseguraremos de que no realice conversiones implcitas (que iran en contra del concepto de uso de generics). 6. En la lnea 29 se declara un procedimiento denominado Intercambia, que est preparado para manejar un tipo de dato de forma genrica (T). Este tipo de dato es indeterminado en cdigo, pero deber ser especificado al momento de mandar llamar a ejecucin el procedimiento. 7. El procedimiento Intercambia recibir dos argumentos (a, dato que le especifiquemos al generic (T).
b),

que sern del tipo de

8. Lo que el procedimiento hace es muy sencillo: declara una variable de paso que tendr el mismo tipo de dato que el especificado al momento de la ejecucin. El programa asigna el valor del primer argumento a la variable de paso para no perder el valor; luego asigna el valor del segundo argumento al primero, y el valor de la variable de paso al segundo argumento. Con ello se habrn intercambiado los valores. El primer argumento tendr el valor que tena el segundo y viceversa. 9. Al mandar a ejecutar el procedimiento (lneas 11 y 20), se especifica el tipo de dato que deber utilizar el procedimiento, en sustitucin del tipo indeterminado (T). Los valores proporcionados al procedimiento corresponden al mismo tipo de dato, dado que as fueron especificados. Si todo ocurri como se esperaba, la salida ser la siguiente:
I = 5 J = 7 I = 7 J = 5 S = Juan R = Mara S = Mara R = Juan Presiona INTRO

FIN DEL EJERCICIO*

Captulo 18. Colecciones genricas (generics)

607

Colecciones genricas
Las colecciones genricas son aquellas en las cuales el tipo de datos de sus elementos slo es conocido hasta el momento de su declaracin. Las colecciones genricas o generics ms importantes son las siguientes:
List: Representa un conjunto de elementos comn. Queue: Representa un conjunto de elementos de tipo FIFO (First In First Out)

Primero en entrar, primero en salir. Representa un conjunto de elementos de tipo LIFO (Last In First Out) ltimo en entrar, primero en salir. Dictionary: Representa un conjunto de elementos en donde una llave est relacionada con un valor determinado.
Stack:

La forma de especificar este tipo de generics es, simplemente, declarndolo.


Dim

MiColeccin As

New

ColeccinGeneric(Of

[,Tipo])

Donde MiColeccin es el nombre de la coleccin, ColeccinGeneric es el tipo de coleccin que deseamos especificar. La especificacin Of T es obligatoria para generics; a travs de sta definiremos el tipo de dato que deseamos que utilice el procedimiento. Se debe sustituir la T por el tipo de dato que deseamos que el programa maneje. En el caso de Dictionary, es necesario especificar el tipo de dato a almacenar como valor de diccionario. Ese punto se ver ms adelante.

List
Es la coleccin generic que representa un conjunto de elementos comn; es la ms sencilla, dado que no tiene comportamientos implcitos en su naturaleza. Sus miembros ms importantes son los siguientes:
Propiedad o mtodo Capacity Count Item Add Clear Find Insert Remove Uso Nmero de elementos que la coleccin puede contener. Nmero de elementos en la coleccin. Representa un elemento de la coleccin. Permite agregar un elemento a la coleccin. Elimina todos los elementos de la coleccin. Devuelve la primera ocurrencia de un elemento determinado en la coleccin. Inserta un elemento en la lista. Remueve un elemento de la coleccin.

18

608

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Ejercicio 18.2
Implementacin de List (Generics) En este ejercicio comprobaremos la funcionalidad de la coleccin List. El programa preguntar una serie de nmeros y los desplegar en el orden en que se capturaron. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado UsoList. 3. Edite el programa de tal forma que aparezca de la siguiente manera:

Codificacin de UsoList
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 26 27 28 29 Imports System.Console

Module1.vb

Module Module1 Dim lstNumeros As New List(Of Integer) Sub Main() Dim strNumero As String Do While True Write(Capture un nmero (omitir para finalizar):) strNumero = ReadLine() If strNumero = Then Resultados() Write(Pulse INTRO) ReadLine() Exit Do Else lstNumeros.Add(CType(strNumero, Integer)) End If Loop End Sub Sub Resultados() For Each Entero As Integer In lstNumeros WriteLine(Entero.ToString()) Next End Sub End Module

Captulo 18. Colecciones genricas (generics)

609

Ejecucin guiada de UsoList

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 5. De la lnea 9 a la 20 se tiene un ciclo que estar preguntando nmeros enteros; cuando no se proporcione informacin, se dar por concluido el ciclo. 6. Lo importante del programa es la implementacin de List, que aparece en la lnea 4. Vea cmo se decide que el tipo de dato a utilizar en la coleccin es Integer. 7. Por cada iteracin del ciclo se pregunta un nmero (lneas 10 y 11); en caso de que la captura no sea nula (lnea 17) se agrega a la coleccin la conversin a Integer de lo capturado (lnea 18). De esa forma se va poblando la coleccin; a diferencia de los arreglos, una coleccin de tipo List no requiere saber de forma predefinida el nmero de elementos que tendr, por lo que constituye una mejor utilizacin de recursos. Esto evita un problema general de los arreglos, que al requerir la especificacin predeterminada del nmero de elementos que lo componen, siempre se corre el riesgo de haber definido muy pocos, lo que causa excepciones de desbordamiento, o demasiados, lo que produce el uso innecesario de recursos. 8. En caso de que se omita la entrada, se asume que ya no se desea capturar ms informacin (lnea 12), y se procede a ejecutar el procedimiento Resultados, que muestra el contenido de la coleccin. 9. Capture 10, 20, 30, 40 y 50. 10.
Resultados

18

solamente muestra el contenido de la coleccin (lneas 23 a la 27).

Si todo ocurri como se esperaba, la salida ser la siguiente.


Capture un nmero Capture un nmero Capture un nmero Capture un nmero Capture un nmero Capture un nmero 10 20 30 40 50 Pulse INTRO (omitir (omitir (omitir (omitir (omitir (omitir para para para para para para finalizar):10 finalizar):20 finalizar):30 finalizar):40 finalizar):50 finalizar):

FIN DEL EJERCICIO*

610

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Queue
Es la coleccin generic que representa un conjunto de elementos FIFO (First In First Out / Primero en entrar, primero en salir). Sus miembros ms importantes son los siguientes:
Propiedad o mtodo Count Clear Dequeue Uso Nmero de elementos en la coleccin. Elimina todos los elementos de la coleccin. Elimina un elemento y devuelve el control al primer elemento de la cola. Enqueue Peek Agrega un elemento al final de la cola. Devuelve el control al primer elemento, sin eliminar ningn elemento. ToArray Copia los elementos de la coleccin a un arreglo.

Ejercicio 18.3
Implementacin de Queue (Generics)

En este ejercicio comprobaremos la funcionalidad de la coleccin Queue. El programa preguntar una serie de nmeros, pero slo interesan los ltimos tres que se capturen y que se mostrarn al final. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado UsoQueue. 3. Edite el programa de tal forma que aparezca de la siguiente manera:

Captulo 18. Colecciones genricas (generics)

611

Codificacin de UsoQueue
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 26 27 28 29 30 31 32 Imports System.Console

Module1.vb

Module Module1 Dim queNumeros As New Queue(Of Integer) Sub Main() Dim strNumero As String Do While True Write(Capture un nmero (omitir para finalizar):) strNumero = ReadLine() If strNumero = Then Resultados() Write(Pulse INTRO) ReadLine() Exit Do Else If queNumeros.Count = 3 Then queNumeros.Dequeue() End If queNumeros.Enqueue(CType(strNumero, Integer)) End If Loop End Sub Sub Resultados() For Each Entero As Integer In queNumeros WriteLine(Entero.ToString()) Next End Sub End Module

18

Ejecucin guiada de UsoQueue

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que haya realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 5. El funcionamiento del programa es muy similar al ejercicio anterior. A travs de un ciclo se preguntan datos; al omitir uno se asume que ya no se desea capturar ms.

612

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

6. Lo importante del programa es la implementacin de Queue, que aparece en la lnea 4. Vea cmo se decide que el tipo de dato a utilizar en la coleccin es Integer. 7. Por cada iteracin del ciclo, se pregunta un nmero (lneas 10 y 11); en caso de que la captura no sea nula (lnea 12) se agrega a la coleccin la conversin a Integer de lo capturado (lnea 21). De esa forma se va poblando la coleccin. 8. En caso de que se omita la entrada, se asume que ya no se desea capturar ms informacin (lnea 12), y se procede a ejecutar el procedimiento Resultados, que muestra el contenido de la coleccin. 9. Capture 10, 20, 30, 40 y 50. 10. Como slo vamos a permitir 3 elementos, se realiza una validacin: si el nmero de elementos es 3 quiere decir que ya no se debe aceptar uno ms, a menos de que uno de los elementos ya existentes salga. 11. Si el nmero de elementos es 3 (lnea 18), se instruye a la coleccin a eliminar uno de los elementos (lnea 19). Como el comportamiento de la coleccin es FIFO, saldr primero el que haya entrado primero. 12. Resultados solamente muestra los ltimos tres elementos capturados, dado que los primeros que se capturaron fueron saliendo al tratar de agregar un elemento ms cuando ya haba 3 elementos en la coleccin.
Si todo ocurri como se esperaba, la salida ser la siguiente. Capture un nmero (omitir para finalizar):10 Capture un nmero (omitir para finalizar):20 Capture un nmero (omitir para finalizar):30 Capture un nmero (omitir para finalizar):40 Capture un nmero (omitir para finalizar):50 Capture un nmero (omitir para finalizar): 30 40 50 Pulse INTRO

FIN DEL EJERCICIO*

Captulo 18. Colecciones genricas (generics)

613

Stack
Es la coleccin generic que representa un conjunto de elementos LIFO (Last In First Out / ltimo en entrar, primero en salir ). Sus miembros ms importantes son los siguientes:
Propiedad o mtodo Count Clear Peek Pop Push ToArray Uso Nmero de elementos en la coleccin. Elimina todos los elementos de la coleccin. Devuelve el control al primer elemento, sin eliminar ningn elemento. Elimina un elemento y retorna el control al primer elemento de la pila (stack). Inserta un elemento al inicio de la pila. Copia los elementos de la coleccin a un arreglo.

Ejercicio 18.4
Implementacin de Stack (Generics)

En este ejercicio comprobaremos la funcionalidad de la coleccin Stack. El programa preguntar una serie de nmeros. Se demostrar el comportamiento LIFO de la coleccin. 1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado UsoStack. 3. Edite el programa de tal forma que aparezca de la siguiente forma:

18

614

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Codificacin de UsoStack
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 26 27 28 29 30 31 32 33 34 Imports System.Console

Module1.vb

Module Module1 Dim staNumeros As New Stack(Of Integer) Sub Main() Dim strNumero As String Do While True Write(Capture un nmero (omitir para finalizar):) strNumero = ReadLine() If strNumero = Then Resultados() Write(Pulse INTRO) ReadLine() Exit Do Else staNumeros.Push(CType(strNumero, Integer)) End If Loop End Sub Sub Resultados() For i As Integer = 0 To staNumeros.Count - 1 WriteLine(staNumeros.Pop.ToString()) Next WriteLine(- Elementos que quedaron en Stack -) For Each Entero As Integer In staNumeros WriteLine(Entero.ToString()) Next WriteLine(- Fin de elementos -) End Sub End Module

Ejecucin guiada de UsoStack

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que ha realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 5. El funcionamiento del programa es muy similar al ejercicio anterior. A travs de un ciclo se preguntan datos; al omitir uno se asume que ya no se desea capturar ms.

Captulo 18. Colecciones genricas (generics)

615

6. 7.

Lo importante del programa es la implementacin de Stack, que aparece en la lnea 4. Vea cmo se decide que el tipo de dato a utilizar en la coleccin es Integer. Por cada iteracin del ciclo, se pregunta un nmero (lneas 10 y 11); en caso de que la captura no sea nula (lnea 12) se agrega a la coleccin la conversin a Integer de lo capturado (lnea 18). De esa forma se va poblando la coleccin. En caso de que se omita la entrada, se asume que ya no se desea capturar ms informacin (lnea 12), y se procede a ejecutar el procedimiento Resultados, que muestra el contenido de la coleccin. Capture 10, 20, 30, 40 y 50.

8.

9.

10. Al ejecutarse Resultados (lnea 23) se utiliza un For Next para la inspeccin de los elementos (lnea 24). La informacin se extrae utilizando el mtodo Pop, que tiene la particularidad de eliminar el elemento al mismo tiempo que lo lee. Se mostrarn los elementos, del ltimo capturado al primero capturado. Al concluir el proceso, la coleccin habr quedado sin elementos. 11. Las lneas 27 a la 31 se encargan de demostrar que ya no hay elementos en la coleccin, una vez que se leyeron utilizando Pop.
Si todo ocurri como se esperaba, la salida ser la siguiente. Capture un nmero (omitir para finalizar):10 Capture un nmero (omitir para finalizar):20 Capture un nmero (omitir para finalizar):30 Capture un nmero (omitir para finalizar):40 Capture un nmero (omitir para finalizar):50 Capture un nmero (omitir para finalizar): 50 40 30 20 10 - Elementos que quedaron en Stack - Fin de elementos Pulse INTRO

18

FIN DEL EJERCICIO*

616

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

Dictionary
Es la coleccin generic que representa un conjunto de elementos donde una llave est relacionada con un valor. En el caso de Dictionary, es necesario especificar el tipo de dato que tienen los valores asociados a la llave. Sus miembros ms importantes son los siguientes:
Propiedad o mtodo Count Item Keys Values Add Clear ContainsKey ContainsValue Remove Uso Nmero de elementos en la coleccin. Representa un elemento de la coleccin. Representa la coleccin de llaves. Representa la coleccin de valores. Agrega un elemento a la coleccin. Elimina los elementos de la coleccin. Determina si en la coleccin existe un valor de llave determinada. Determina si en la coleccin existe un determinado valor. Elimina un elemento de la coleccin.

Este ejemplo declara un diccionario, carga tres elementos y despliega el valor correspondiente en una de las llaves.
Dim Pais As New Dictionary(Of T String, String) Pais.Add(MX, Mxico) Pais.Add(EU, Estados Unidos) Pais.Add(CN, Canad) Console.WriteLine(Pais(MX))

Ejercicio 18.5
Implementacin de Dictionary (Generics)

En este ejercicio comprobaremos la funcionalidad de la coleccin Dictionary. El programa preguntar una serie de nmeros. Se demostrar el comportamiento LIFO de la coleccin.

Captulo 18. Colecciones genricas (generics)

617

1. Abra la solucin Ejercicios, que debe encontrarse en C:\APVBNETVS\Ejercicios (archivo de extensin sln). 2. Agregue a su solucin un proyecto Windows Console Application, llamado UsoDictionary. 3. Edite el programa de tal forma que aparezca de la siguiente manera:

Codificacin de UsoDictionary
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Imports System.Console

Module1.vb

Module Module1 Dim dicPCard As New Dictionary(Of String, String) Sub Main() Dim strInicial As String dicPCard.Add(N, dicPCard.Add(S, dicPCard.Add(E, dicPCard.Add(O, Norte) Sur) Este) Oeste)

Write(Dame la inicial de un punto cardinal:) strInicial = ReadLine() WriteLine(Inicial de {0}, dicPCard(strInicial)) Write(Presione INTRO) ReadLine() End Sub End Module

18

Ejecucin guiada de UsoDictionary

Module1.vb

4. Construya la solucin (oprima las teclas Ctrl-Mays-B). Establezca el nuevo proyecto como proyecto de inicio (StartUp Project) y guarde todos los cambios que haya realizado en la solucin (teclas Ctrl-Mays-S). Inicie la depuracin para comprobar el comportamiento de su programa (tecla F5). 5. Lo importante del programa es la implementacin de Dictionary, que aparece en la lnea 4. Vea cmo se decide que el tipo de dato a utilizar como llave es String, y que

618

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

el dato de valor asociado a la llave tambin es String. Dada la especificacin Of, el tipo de dato de la llave puede ser intercambiable en un momento dado. 6. De la lnea 9 a la 12 se puebla con datos la coleccin. Simplemente se almacenan los puntos cardinales y se les coloca una inicial como llave. 7. En las lneas 14 y 15 se pregunta por una inicial de un punto cardinal. Capture la letra N. 8. La lnea 17 muestra el valor asociado a la llave proporcionada. Como puede ver, para recuperar el valor asociado a una llave slo es necesario colocar el nombre de la coleccin y, entre parntesis, el valor de la llave cuyo valor deseamos recuperar. 9. Si todo ocurri como se esperaba, la salida ser la siguiente.
Dame la inicial de un punto cardinal:N Inicial de Norte Presione INTRO

FIN DEL EJERCICIO*

Captulo 18. Colecciones genricas (generics)

619

MAPA

MENTAL DEL CAPTULO

18

620

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

TERMINOLOGA
Colecciones genricas, 607 Dictionary, 616 Generics, 603 Implementaciones genricas, 603 List, 607 Of, especificacin, 604 Queue, 610 Stack, 613 Templates, 603

PREGUNTAS
18.1 En qu consisten las generics? 18.2 Cules son las dos formas generales de implementar generics? 18.3 En qu casos se recomienda el uso de generics, en relacin a los arreglos? 18.4 Mencione cules son las colecciones generics ms usuales y explique sus diferencias.

Captulo 18. Colecciones genricas (generics)

621

Notas:

18

622

Aprenda Practicando Visual Basic 2005 usando Visual Studio 2005

EXAMEN

RPIDO DEL CAPTULO

Parte 1: Marque con una cruz el inciso que responda a la pregunta.


1. Permite que clases, estructuras, interfaces y mtodos utilicen datos de entrada de tipo indeterminado: a) Untyped Arrays b) Generics c) Collections 2. Es la especificacin requerida por los tipos para la implementacin de generics: a) Of T b) By Val c) IndexOf 3. Es la coleccin generic que tiene comportamiento LIFO a) Queue b) Stack c) Dictionary 4. Es la coleccin generic que tiene comportamiento FIFO a) Queue b) Stack c) Dictionary 5. Es el mtodo que permite ir al primer elemento recuperable en una coleccin generic sin eliminarlo (puede aplicarse a Queue y Stack): a) Enqueue b) GoTop c) Peek

Parte 2: Coloque en la lnea la letra F si el enunciado es falso y V si es verdadero.


6. Generics slo funciona en .NET Framework 1.1 y 2.0. 7. Generics slo se pueden implementar a travs de alguna de las colecciones de tipo generic. 8. Generics tiene la misma filosofa que tienen los templates en el lenguaje Java. 9. Generic permite el intercambio de tipos de datos de modo type safe. 10. Generics es ms eficiente que los arreglos, dado que no es necesario especificar un nmero de elementos predeterminado, lo que permite un manejo ms eficiente de los recursos.

Вам также может понравиться