Vous êtes sur la page 1sur 109

Curso de Asp.Net bajo el lenguaje de Visual Basic.

Net
Da 1

Introduccin
En este curso se tratan todas las cuestiones fundamentales que le permitirn crear aplicaciones web con Visual Studio 2010. Al final del curso sabr todo lo necesario para crear sus propias aplicaciones Web orientadas a datos y con multitud de caractersticas avanzadas.

Objetivos
El objetivo de este curso es lograr que ustedes aprendan a: Cmo crear aplicaciones web con Visual Studio 2010. A utilizar controles web y controles HTML. Los mtodos bsicos de acceso a base de datos. Los controles enlazados a datos. A manejar las sesiones desde ASP.NET. El modo de crear aplicaciones con un interfaz de usuario consistente y fcil de personalizar. Control de acceso de usuarios. Cmo exponer funcionalidad a otras aplicaciones mediante servicios Web. Trabajar con controles Ajax en ASP.NET.

Prerrequisitos
Poseer los conocimientos en:

Fundamentos de Programacin. programacin Orientacin a Objetos. Nociones de programacin Web en otras plataformas web como ASP, si bien no es indispensable. Html. Sql Server 2008 Lenguaje Sql

Temario General
Introduccin a la Plataforma .Net. Caractersticas del Lenguaje VB.NET. Fundamento de Desarrollo de Aplicaciones Web. Acceso a Datos. LINQ. Tcnicas Avanzadas de ASP.NET. Introduccin a los Servicios Web. Ajax en ASP.NET. Jquery en Asp.NET.

Temario: Introduccin a la Plataforma .NET


Entorno de Ejecucin CLR. El Lenguaje Intermedio y el CLS. La biblioteca de Clases de .NET. Acceso a Datos con ADO.NET. LINQ. Aplicaciones Windows Form. Aplicaciones Web Form.

Que es .NET?
Es un amplio conjunto de bibliotecas de desarrollo que pueden ser utilizadas por otras aplicaciones para acelerar enormemente el desarrollo y obtener de manera automtica caractersticas avanzadas de seguridad, rendimiento, etc... En realidad .NET es mucho ms que eso ya que ofrece un entorno gestionado de ejecucin de aplicaciones, nuevos lenguajes de programacin y compiladores, y permite el desarrollo de todo tipo de funcionalidades: desde programas de consola o servicios Windows hasta aplicaciones para dispositivos mviles, pasando por desarrollos de escritorio o para Internet.

El Entorno de Ejecucin CLR


CLR (Common Language Runtime): es la implementacin

de Microsoft de un estndar llamado Common Language Infrastructure o CLI. ste fue creado y promovido por la propia Microsoft pero desde hace aos es un estndar reconocido mundialmente por el ECMA. El CLR/CLI: define un entorno de ejecucin virtual independiente que se ocupa de multitud de cosas importantes para una aplicacin: desde la gestin de la memoria y la vida de los objetos hasta la seguridad y la gestin de subprocesos.

El Lenguaje Intermedio y el CLS


Al contrario que otros entornos, la plataforma .NET no est atada a un determinado lenguaje de programacin ni favorece a uno determinado frente a otros. Lo mejor de todo es que cualquier componente creado con uno de estos lenguajes puede ser utilizado de forma transparente desde cualquier otro lenguaje .NET. Adems, es posible ejecutar el cdigo .NET en diferentes plataformas y sistemas operativos.

El Lenguaje Intermedio y el CLS


Cmo se consigue esta potente capacidad? Dentro de la CLI, existe un lenguaje llamado IL (Intermediate Language o Lenguaje Intermedio) que est pensado de forma independiente al procesador en el que se vaya a ejecutar. Es algo parecido al cdigo ensamblador pero de ms alto nivel y creado para un hipottico procesador virtual que no est atado a una arquitectura determinada.

Cuando se compila una aplicacin escrita en un lenguaje .NET (C#, VB, J#, etc.), el compilador genera un nuevo cdigo escrito en este lenguaje intermedio. As, todos los lenguajes .NET se usan como capa de ms alto nivel para producir cdigo IL.

El Lenguaje Intermedio y el CLS

Cdigo en lenguaje intermedio obtenido con ILDASM.exe

La Biblioteca de Clases de .NET


La plataforma .NET nos ofrece infinidad de funcionalidades "de fbrica" que se utilizan como punto de partida para crear las aplicaciones. Existen funcionalidades bsicas (por ejemplo todo lo relacionado con la E/S de datos o la seguridad) y funcionalidades avanzadas en las que se fundamentan categoras enteras de aplicaciones (acceso a datos, creacin de aplicaciones Web...). Toda esta funcionalidad est implementada en forma de bibliotecas de funciones que fsicamente se encuentran en diversas DLL (bibliotecas de enlazado dinmico). A su conjunto se le denomina Base Classes Library (Biblioteca de clases base o BCL) y forman parte integral de la plataforma .NET.

La Biblioteca de Clases de .NET

La Biblioteca de Clases de .NET


Los Espacios de Nombres: Dada la ingente cantidad de clases que existen debe haber algn modo de organizarlas de un modo coherente. Adems hay que tener en cuenta que podemos adquirir ms funcionalidades (que se traducen en clases) a otros fabricantes, por no mencionar que crearemos continuamente nuevas clases propias. Para solucionar este problema existen en todos los lenguajes .NET los espacios de nombres o namespaces. Un espacio de nombres no es ms que un identificador que permite organizar de modo estanco las clases que estn contenidas en l as como otros espacios de nombres.

La Biblioteca de Clases de .NET


As, por ejemplo, todo lo que tiene que ver con el manejo de estructuras de datos XML en la plataforma .NET se encuentra bajo el espacio de nombres System.Xml. La funcionalidad fundamental para crear aplicaciones Web est en el espacio de nombres System.Web. ste a su vez contiene otros espacios de nombres ms especializados como System.Web.Caching para la persistencia temporal de datos, System.Web.UI.WebControls, que contiene toda la funcionalidad de controles Web para interfaz de usuario, etc...

Acceso a datos con ADO.NET


El acceso a fuentes de datos es algo indispensable en cualquier lenguaje o plataforma de desarrollo. La parte de la BCL que se especializa en el acceso a datos se denomina de forma genrica como ADO.NET. ADO.NET ofrece una funcionalidad completamente nueva, que tiene poco que ver con lo existente hasta la fecha en el mercado. Sin embargo, con el nimo de retirar barreras a su aprendizaje, Microsoft denomin a su nuevo modelo de acceso a datos con un nombre similar y algunas de sus clases recuerdan a objetos de propsito anlogo en el vetusto ADO.

Acceso a datos con ADO.NET


ADO.NET es un modelo de acceso mucho ms orientado al trabajo desconectado de las fuentes de datos de lo que nunca fue ADO. Si bien este ltimo ofreca la posibilidad de desconectar los Recordsets y ofreca una forma de serializacin de estos a travs de las diferentes capas de una aplicacin, el mecanismo no es ni de lejos tan potente como el que nos ofrece ADO.NET. El objeto ms importante a la hora de trabajar con el nuevo modelo de acceso a datos es el DataSet. Podramos calificarlo como un motor de datos relacionales en memoria. .

Arquitectura de ADO.NET

LINQ
LINQ significa Language Integrated Query, o Lenguaje Integrado de Consultas. Se trata de una de las novedades incluidas en Microsoft .NET Framework 3.5, y representa una forma nueva de desarrollo tal y como la conocamos hasta ahora. LINQ est pensado desde la orientacin a objetos, pero su objetivo fundamental es la manipulacin y trabajo con datos. Para que comprenda ms an la importancia de LINQ, diremos que la inmensa mayora de las novedades introducidas en Microsoft .NET Framework 3.5 tienen su razn de ser gracias a LINQ, y que LINQ jugar un importante papel en las prximas novedades de Microsoft .NET Framework.

LINQ
A la hora de trabajar con datos, con LINQ tenemos la posibilidad de seleccionar, manipular y filtrar datos como si estuviramos trabajando con una base de datos directamente.

Podemos usar LINQ con bases de datos, matrices y colecciones. LINQ simplifica el cdigo, acorta los tiempos de desarrollo, permite que el desarrollador desarrolle aplicaciones ms productivas y seguras a la hora de trabajar con datos y sus tipos. Intellisense juega un papel muy importante evitando que cometamos errores a la hora de escribir nuestras aplicaciones, errores como por ejemplo seleccionar el dato errneo o el tipo de dato inadecuado, ya que el compilador nos avisara de estos y otros errores.

LINQ Origenes de Datos


Estos orgenes de datos son los siguientes: LINQ to Objects: representa el uso de LINQ sobre objetos. LINQ to XML: representa el uso de LINQ sobre documentos XML. ADO.NET y LINQ: dentro de este grupo encontramos los diferentes orgenes de datos de LINQ que tienen relacin directa con datos relacionales. Los orgenes de datos de LINQ y ADO.NET son: LINQ to DataSet: representa el uso de LINQ sobre DataSet. LINQ to SQL: representa el uso de LINQ sobre orgenes de datos de SQL Server. LINQ to Entities: representa el uso de LINQ sobre cualquier origen de datos, SQL Server, Oracle, MySql, DB2, etc.

Aplicaciones Windows Forms


Las aplicaciones de escritorio son aquellas basadas en ventanas y controles comunes de Windows que se ejecutan localmente. En la plataforma .NET el espacio de nombres que ofrece las clases necesarias para construir aplicaciones de escritorio bajo Windows se denomina Windows Forms. Windows Forms est constituido por multitud de clases especializadas que ofrecen funcionalidades para el trabajo con ventanas, botones, rejillas, campos de texto y todo este tipo de controles habituales en las aplicaciones de escritorio.

Aplicaciones Web Forms


Tradicionalmente las aplicaciones Web se han desarrollado siguiendo un modelo mixto que intercalaba cdigo HTML y JavaScript propio de pginas Web (parte cliente), junto con cdigo que se ejecutara en el servidor (parte servidora). Este modelo contrastaba por completo con el modelo orientado a eventos seguido por las principales herramientas de desarrollo de aplicaciones de escritorio. Hacer esto en una aplicacin de escritorio no tiene mayor dificultad ya que todo el cdigo se ejecuta en el mismo lugar.

Aplicaciones Web Forms


La principal caracterstica de las aplicaciones Web sin embargo es que la interfaz de usuario (lo que los usuarios de la aplicacin ven) se ejecuta en un lugar diferente al cdigo de la aplicacin que reside en un servidor. Para mayor desgracia estas aplicaciones se basan en el uso del protocolo HTTP que es un protocolo sin estado y que no conserva la conexin entre dos llamadas consecutivas. Por ejemplo, el siguiente cdigo ilustra el cdigo que es necesario escribir en ASP para disponer de una pgina que rellena una lista de seleccin con unos cuantos nombres (podran salir de una base de datos y an sera ms complicado), y que dispone de un botn que escribe un saludo para el nombre que se haya elegido de la lista.

Aplicaciones Web Forms

Cdigo ASP sencillo que genera una lista de seleccin y saluda al presionar un botn.

Aplicaciones Web Forms


Las principales desventajas de este tipo de codificacin son las siguientes: No existe separacin entre el diseo y la lgica de las aplicaciones. En ASP clsico no existe el concepto de control para la interfaz de usuario.

No disponemos de forma de detectar en el servidor que se ha realizado algo en el cliente. No existe constancia del estado de los controles de cada pgina entre las llamadas. No existe el concepto de Propiedad de los controles. Los controles complejos no tienen forma de enviar sus valores al servidor.

Aplicaciones Web Forms


La principal aportacin de ASP.NET al mundo de la programacin es que ha llevado a la Web el paradigma de la programacin orientada a eventos propia de aplicaciones de escritorio, ofreciendo: Separacin entre diseo y lgica. Componentes de interfaz de usuario, tanto estndar como de terceras empresas o propios. Diseadores grficos. Eventos. Estado.

Enlazado a datos desde la interfaz.


Esto como se ver marca un antes y un despus en la programacin para Internet.

Temario General
Introduccin a la Plataforma .Net. Caractersticas del Lenguaje VB.NET. Fundamento de Desarrollo de Aplicaciones Web. Acceso a Datos. LINQ. Tcnicas Avanzadas de ASP.NET. Introduccin a los Servicios Web. Ajax en ASP.NET. Jquery en Asp.NET.

Temario: Caractersticas del Lenguaje VB.NET


El Sistema de Tipos. Clases y Estructuras. Manejo de Excepciones. Eventos y Delegados.

Sistema de Tipos
Visual Basic .NET est totalmente integrado con .NET Framework, por tanto los tipos de datos que podremos usar con este lenguaje sern los definidos en este "marco de trabajo", por este motivo vamos a empezar usando algunas de las definiciones que nos encontraremos al recorrer la documentacin que acompaa a este lenguaje de programacin. A continuacin veremos los diferentes tipos de datos existentes en .NET que son: Los Primitivos, variables y constantes, Enumeraciones (contantes agrupadas) y Arrays (Matrices).

Sistema de Tipos Tipos Primitivos


Veamos en la siguiente tabla los tipos de datos definidos en .NET Framework y los alias utilizados en Visual Basic 2010.

Sistema de Tipos Tipos Primitivos


Cuando usamos valores literales numricos en Visual Basic 2010, el tipo de datos que por defecto le asigna el compilador es el tipo Double. Si nuestra intencin es utilizar sin embargo un tipo de datos diferente, podemos indicarlo aadiendo una letra como sufijo al tipo. Por ejemplo para indicar que queremos considerar un valor entero podemos usar la letra I o el signo %, de igual forma, un valor de tipo entero largo (Long) lo podemos indicar usando L o &, en la siguiente tabla podemos ver los caracteres o letra que podemos usar como sufijo en un literal numrico para que el compilador lo identifique sin ningn lugar a dudas.

Sistema de Tipos Tipos Primitivos

El uso de estos caracteres nos puede resultar de utilidad particularmente para los tipos de datos que no se pueden convertir en un valor doble.

Sistema de Tipos Tipos Primitivos

Sistema de Tipos Tipos Por Valor/Referencia


Los tipos de datos de .NET los podemos clasificar en dos grupos: Valor y Referencia. Los tipos por valor: son los de cuyo valor se almacena en la pila o en la memoria "cercana", como los numricos. De igual forma cuando copiamos valores de un tipo por valor a otro, estaremos haciendo copias independientes. Los tipos por referencia: se almacenan en el "montculo" (heap) o memoria "lejana". A diferencia de los tipos por valor, los tipos por referencia lo nico que almacenan es una referencia (o puntero) al valor asignado. Si hacemos copias de tipos por referencia, realmente lo que copiamos es la referencia propiamente dicha, pero no el contenido.

Sistema de Tipos Inferencia de Tipos


Una de las caractersticas nuevas en Visual Basic 2008 y que ha sido llevada lgicamente a versiones superiores, es la inferencia de tipos.
Se conoce como inferencia de tipos a la caracterstica de Visual Basic para inferir el tipo de un dato al ser inicializado.

Para que la inferencia de tipos sea efectiva, deberemos activar la opcin Option Infer a True, aunque por defecto, ese es el valor que tiene el compilador de Visual Basic. Sin embargo, si se hace una migracin de una aplicacin de Visual Basic a Visual Basic 2008 ( superior), el valor de esta opcin ser False.

Sistema de Tipos Inferencia de Tipos


Supongamos por lo tanto, la siguiente declaracin:

En este ejemplo, la variable datoDeclarado, ser una variable de tipo Integer (Int32). Si deseamos cambiar el tipo de dato a un tipo Int64 por ejemplo, el compilador nos devolver un error. As, el siguiente ejemplo no ser vlido en Visual Basic 2008 ( superior) con la opcin de inferencia activada:

Ahora bien, si cambiamos el valor de Option Infer a False, el mismo ejemplo ser correcto.

Sistema de Tipos Inferencia de Tipos


Dnde est la diferencia?.
En este ltimo caso, el caso de tener desactivada la opcin de inferencia, la declaracin de la variable datoDeclarado nos indica que es un tipo de dato Object en su origen, y que al darle un valor Integer, sta funciona como una variable entera.

Al cambiar su valor a Long, esta variable que es de tipo Object, cambia sin problemas a valor Long.
En todo este proceso, hay un problema claro de rendimiento con acciones de boxing y unboxing que no seran necesarias si tipramos la variable con un tipo concreto.

Sistema de Tipos Variables y Constantes


Disponer de todos estos tipos de datos no tendra ningn sentido si no los pudiramos usar de alguna otra forma que de forma literal. Y aqu es donde entran en juego las variables y constantes
Siempre que tengamos que indicar un valor constante, ya sea para indicar el mximo o mnimo permitido en un rango de valores o para comprobar el trmino de un bucle, deberamos usar una constante en lugar de un valor literal. De esta forma si ese valor lo usamos en varias partes de nuestro cdigo, si en un futuro decidimos que dicho valor debe ser diferente, nos resultar ms fcil realizar un solo cambio que cambiarlo en todos los sitios en los que lo hemos usado.

Sistema de Tipos Declaracin de Variables


La declaracin de las variables en Visual Basic 2010 se hace de la misma forma que en VBScript/VB6/VB6, o casi, las excepciones vienen dadas, como hemos comentado antes, de la posibilidad de obligar a definir el tipo de cada variable y de cmo podemos definir ms de una variable en una misma instruccin Dim.

Tambin es posible definir ms de una variable en una misma instruccin Dim.

Sistema de Tipos Declaracin de Variables


En Visual Basic tambin podemos inicializar una variable con un valor distinto al predeterminado, que: Los tipos numricos es un cero. En las fechas es el 1 de enero del ao 1 a las doce de la madrugada (#01/01/0001 12:00:00AM#) En la cadenas es un valor nulo (Nothing). Para hacerlo, simplemente tenemos que indicar ese valor, tal como veremos es muy parecido a como se declaran las constantes. Por ejemplo:

Sistema de Tipos Tipo de Datos Char


En Visual Basic podemos declarar valores de tipo Char, este tipo de datos es un carcter Unicode y podemos declararlo y asignarlo a un mismo tiempo. El problema con el que nos podemos encontrar es a la hora de indicar un carcter literal. Los tipos numricos es un cero. Si nuestra intencin es asignar un valor Char a una variable, adems de la funcin Chr, podemos hacerlo con un literal, ese valor literal estar encerrado entre comillas dobles, (al igual que una cadena), aunque para que realmente sea un carcter debemos agregarle una c justo despus del cierre de las comillas dobles:

Sistema de Tipos Obligar a Declarar Variables con el Tipo de Datos


La obligatoriedad, a la que hacamos referencia anteriormente, de declarar las variables y constantes con el tipo de datos adecuado, la podemos aplicar a todo el proyecto o a un mdulo en particular. Para ello tenemos que usar la instruccin Option Strict On, una vez indicado, se aplicar a todo el cdigo, no solo a las declaraciones de variable, constantes o al tipo de datos devuelto por las funciones y propiedades, sino tambin a las conversiones y asignaciones entre diferentes tipos de datos.
No debemos confundir Option Strict con el clsico Option Explicit de VB. Este ltimo, al igual que en VBScript/VB6, nos obliga a declarar todas las variables, mientras que el primero lo que hace es obligarnos a que esas declaraciones tengan un tipo de datos.

Sistema de Tipos Obligar a Declarar Variables con el Tipo de Datos

Sistema de Tipos Tipos Nulables


Otra interesantsima caracterstica de Visual Basic 2008 y que es lgicamente llevada a versiones superiores y la cual conviene conocer, es lo que se denominan tipos anulables.
Los tipos anulables no son nuevos en Visual Basic, de hecho su origen lo encontramos en Visual Studio 2005, aunque eso s, implementando la clase Nullable(Of T). Con Visual Basic no es necesario declarar ninguna clase para implementar tipos anulables dentro de nuestras aplicaciones, y podemos declararlos de forma directa. Un tipo de dato anulable nos permitir declarar una variable que podr tener un tipo de dato nulo.

Sistema de Tipos Tipos Nulables

Para acceder al valor de un tipo anulable, podramos hacerlo de la forma habitual, ahora bien, si no sabemos si el valor es nulo o no, podramos acceder a su valor preguntando por l mediante la propiedad HasValue. La propiedad Value nos indicar tambin, el valor de esa variable. Un ejemplo que aclare esta explicacin es el que podemos ver a continuacin:

Sistema de Tipos Tipos Nulables


Otra caracterstica de los tipos anulables es la posibilidad de utilizar la funcin GetValueOrDefault. Esta funcin nos permitir acceder al valor de la variable si no es nulo, y al valor que le indiquemos si es nulo.

En este ejemplo, el compilador nos devolvera el valor 2010, ya que GetValueOrDefault sabe que la variable no posee un valor nulo y que por lo tanto, debe obtener el valor no nulo de la variable anulable.

En el caso de que no hubiramos dado ningn valor a la variable, la aplicacin obtendra el valor 2012.

Sistema de Tipos Tipos Annimos


Esta caracterstica de Visual Basic, nos permite declarar los tipos de datos de forma implcita desde el cdigo de nuestras aplicaciones. Un ejemplo prctico de declaracin de tipos annimos es el siguiente:

Como podemos ver en el ejemplo anterior, hemos declarado un objeto al que no hemos indicado ningn tipo de dato concreto, pero a la hora de crear ese objeto, hemos creado implcitamente un miembro Nombre y un miembro Edad.

Sistema de Tipos Enumeradores


Una enumeracin es un grupo de constantes que estn relacionadas entre s y que queremos utilizar para restringir el rango de posibles valores para una variable o parmetro. En Visual Basic las enumeraciones pueden ser de cualquier tipo numrico entero, incluso enteros sin signo, aunque el valor predefinido es el tipo Integer. Podemos declarar una enumeracin de varias formas:

Indicando el atributo FlagsAttibute, de esta forma podremos indicar unos valores concretos para los miembros de la enumeracin.

Sistema de Tipos Enumeradores


Tanto si indicamos o no el atributo Flags a una enumeracin, la podemos usar de esta forma:

Es decir, podemos "sumar" los valores definidos en la enumeracin. Como hemos comentado, las enumeraciones son constantes con nombres, pero esta definicin se queda algo corta. De hecho, podemos saber "el nombre" de un valor de una enumeracin, para ello tendremos que usar el mtodo ToString, (el cual se usa para convertir en una cadena cualquier valor numrico). Por ejemplo, si tenemos la siguiente asignacin:

La variable s contendr la palabra "Azul y no el valor 4.

Sistema de Tipos Enumeradores


Una vez aclarado este comportamiento de las enumeraciones en Visual Basic 2010, veamos que es lo que ocurre cuando sumamos valores de enumeraciones a las que hemos aplicado el atributo Flags y a las que no se lo hemos aplicado. Empecemos por este ltimo caso.

El contenido de la variable s ser "5", es decir, la representacin numrica del valor contenido: 4 + 1, ya que el valor de la constante Azul es 4 y el de la constante Rojo es 1.

Sistema de Tipos Enumeradores


Pero si ese mismo cdigo lo usamos de esta forma (aplicando el atributo Flags a la enumeracin):

El contenido de la variable s ser: "Rojo, Azul", es decir, se asignan los nombres de los miembros de la enumeracin que intervienen en ese valor, no el valor "interno".

Sistema de Tipos Enumeradores


Los miembros de las enumeraciones realmente son valores de un tipo de datos entero (en cualquiera de sus variedades) tal como podemos comprobar en la siguiente imagen:

Por tanto cabe pensar que podemos usar cualquier valor para asignar a una variable declarada como una enumeracin, al menos si ese valor est dentro del rango adecuado. Es decir, en el ejemplo de la figura usar un 1 en lugar de Colores.Rojo.

Sistema de Tipos Enumeradores


En VB.NET esto no es posible, al menos si lo hacemos de forma "directa" y con Option Strict On, ya que recibiremos un error indicndonos que no podemos convertir, por ejemplo, un valor entero en un valor del tipo de la enumeracin.

El error nos indica que no podemos realizar esa asignacin, pero el entorno integrado de Visual Studio 2010 tambin nos ofrece alternativas para que ese error no se produzca, esa ayuda se obtiene presionando el signo de admiracin que tenemos justo donde est el cursor del mouse, pero no solo nos dice cmo corregirlo, sino que tambin nos da la posibilidad de que el propio IDE se encargue de hacerlo.

Sistema de Tipos Enumeradores

Lo nico que tendramos que hacer es presionar la sugerencia de correccin, que en este caso es la nica que hay, pero en otros casos pueden ser varias las opciones y tendramos que elegir la que creamos adecuada. El cdigo final (una vez corregido) quedara de la siguiente forma:
CType es una de las formas que nos ofrece VB.NET de hacer conversiones entre diferentes tipos de datos, en este caso convertimos un valor entero en uno del tipo enumerado Colores.

Sistema de Tipos Arrays (Matrices)


Los arrays (o matrices) tambin es algo que podamos usar en VBScript/VB6, si bien la forma en que se almacena en la memoria y la forma en que podemos usarlas en Visual Basic ha cambiado. En Visual Basic la declaracin de un array la haremos de la misma forma que en VBScript/VB6, en el siguiente ejemplo declaramos un array de tipo String llamado nombres:

Al igual que en VBScript/VB6, podemos indicar el nmero de elementos que contendr el array:

Sistema de Tipos Arrays (Matrices)


Otra posibilidad que tenamos en VBScript/VB6 era indicar el rango de ndices que podamos asignar, esto lo logrbamos usando la clusula To al definir un array, por ejemplo: Pero esta declaracin es ilegal en Visual Basic, por el hecho de que los arrays de .NET siempre deben tener el valor cero como ndice inferior.

En VB.NET podemos declarar un array y al mismo tiempo asignarle valores.

Sistema de Tipos Arrays (Matrices)


Si el array es bidimensional (o con ms dimensiones), tambin podemos inicializarlos al declararlo, pero en este caso debemos usar doble juego de llaves:

En este cdigo tendramos un array bidimensional con los siguientes valores:

nombres(0,0)= Juan nombres(0,1)= Pepe nombres(1,0)= Ana nombres(1,1)= Eva

Sistema de Tipos Arrays (Matrices)


Para cambiar el tamao de un array, al igual que en VBScript/VB6, usaremos la instruccin ReDim, pero a diferencia de VBScript/VB6 no podemos usar ReDim para definir un array, en Visual Basic siempre hay que declarar previamente los arrays antes de cambiarles el tamao. Lo que tambin podemos hacer en Visual Basic es cambiar el tamao de un array y mantener los valores que tuviera anteriormente, para lograrlo debemos usar ReDim Preserve. Si bien tanto ReDim como ReDim Preserve se pueden usar en arrays de cualquier nmero de dimensiones, en los arrays de ms de una dimensin solamente podemos cambiar el tamao de la ltima dimensin.

Sistema de Tipos Arrays (Matrices)


Una vez que hemos declarado un array y le hemos asignado valores, es posible que nos interese eliminar esos valores de la memoria, para lograrlo, podemos hacerlo de tres formas:
1. Redimensionando el array indicando que tiene cero elementos, aunque en el mejor de los casos, si no estamos trabajando con arrays de ms de una dimensin, tendramos un array de un elemento, ya que, como hemos comentado anteriormente, los arrays de .NET el ndice inferior es cero. 2. Usar la instruccin Erase. Al igual que en VBScript/VB6, Erase elimina totalmente el array de la memoria. 3. Asignar un valor Nothing al array.

Sistema de Tipos Arrays (Matrices)


En VB.NET los arrays son tipos por referencia, y tal como comentamos anteriormente, los tipos por referencia realmente lo que contienen son una referencia a los datos reales no los datos propiamente dichos. Cual es el problema? Vemoslo con un ejemplo y as lo tendremos ms claro.

Sistema de Tipos Arrays (Matrices)


Si realmente queremos tener copias independientes, debemos hacer una copia del array nombres en el array otros, esto es fcil de hacer si usamos el mtodo CopyTo. ste mtodo existe en todos los arrays y nos permite copiar un array en otro empezando por el ndice que indiquemos. El nico requisito es que el array de destino debe estar inicializado y tener espacio suficiente para contener los elementos que queremos copiar.

Sistema de Tipos Arrays (Matrices)


Adems del mtodo CopyTo, los arrays tienen otros miembros que nos pueden ser de utilidad, como por ejemplo la propiedad Length usada en el ejemplo para saber cuantos elementos tiene el array nombres.

Para averiguar el nmero de elementos de un array, tambin podemos usar la funcin UBound, que es la que nos serva en VBScript/VB6 para saber esa informacin.
Sin embargo, el uso de la funcin LBound, (que sirve para averiguar el ndice inferior de un array), no tiene ningn sentido en Visual Basic, ya que todos los arrays siempre tienen un valor cero como ndice inferior.

Los arrays son tipos de datos derivados de la clase Array y por tanto disponen de todos los miembros definidos en esa clase.

Clases y Estructuras
En la leccin anterior vimos los tipos de datos predefinidos en .NET Framework, en esta leccin veremos cmo podemos crear nuestros propios tipos de datos, tanto por valor como por referencia. Tambin tendremos ocasin de ver los distintos niveles de accesibilidad que podemos aplicar a los tipos, as como a los distintos miembros de esos tipos de datos. Adicionalmente, veremos temas relacionados con la programacin orientada a objetos (POO) en general y de forma particular los que ataen a las interfaces.

Clases y Estructuras
A continuacin veremos los diferentes temas que son: Tipos por Referencia definidos por el usuario, Definir una Clase, Crear un Objeto en la Memoria, Tipos por Valor Definidos por el Usuario, Accesibilidad y mbito, Propiedades e Interfaces.

Clases y Estructuras
A continuacin veremos los diferentes temas que son: Tipos por Referencia Definidos por el Usuario, Definir una Clase, Crear un Objeto en la Memoria, Tipos por Valor Definidos por el Usuario, Accesibilidad y mbito, Propiedades e Interfaces.

Clases y Estructuras Tipos por Referencia Definidos por el Usuario


Tal como vimos en la leccin anterior, los tipos de datos se dividen en dos grupos: tipos por valor y tipos por referencia. Los tipos por referencia realmente son clases, de la cuales debemos crear una instancia para poder usarlas. Esa instancia o copia, se crea siempre en la memoria lejana (heap) y las variables lo nico que contienen es una referencia a la direccin de memoria en la que el CLR (Common Language Runtime, motor en tiempo de ejecucin de .NET), ha almacenado el objeto recin creado. Prcticamente todo lo que podemos hacer en .NET Framework lo hacemos mediante clases.

Clases y Estructuras Tipos por Referencia Definidos por el Usuario


El concepto de Programacin Orientada a Objetos (POO) es algo intrnseco al propio .NET Framework, por tanto es una caracterstica que todos los lenguajes basados en este "marco de trabajo" tienen de forma predeterminada, entre ellos el Visual Basic. De las caractersticas principales de la POO tenemos que destacar la herencia, que en breve podemos definir como una caracterstica que nos permite ampliar la funcionalidad de una clase existente sin perder la que ya tuviera previamente. El tipo de herencia que .NET Framework soporta es la herencia simple, es decir, solo podemos usar una clase como base de la nueva, si bien, como veremos ms adelante, podemos agregar mltiples interfaces.

Clases y Estructuras Tipos por Referencia Definidos por el Usuario


La encapsulacin y el polimorfismo son otras dos caractersticas de la programacin orientada a objetos.

La encapsulacin nos permite abstraer la forma que tiene de actuar una clase sobre los datos que contiene o manipula, para poder lograrlo se exponen como parte de la clase los mtodos y propiedades necesarios para que podamos manejar esos datos sin tener que preocuparnos cmo se realiza dicha manipulacin.

Clases y Estructuras Tipos por Referencia Definidos por el Usuario


El polimorfismo nos permite realizar ciertas acciones o acceder a la informacin de los datos contenidos en una clase de forma semi-annima, al menos en el sentido de que no tenemos porqu saber sobre que tipo objeto realizamos la accin, ya que lo nico que nos debe preocupar es que podemos hacerlo, por la sencilla razn de que estamos usando ciertos mecanismos que siguen unas normas que estn adoptadas por la clase. El ejemplo clsico es que si tengo un objeto que "sabe" cmo morder, da igual que lo aplique a un ratn o a un dinosaurio, siempre y cuando esas dos "clases" expongan un mtodo que pueda realizar esa accin.

Clases y Estructuras Tipos por Referencia Definidos por el Usuario


Todas las clases de .NET se derivan siempre de forma automtica de la clase Object, lo indiquemos o no explcitamente. Cualquier clase que definamos tendr el comportamiento heredado de esa clase. El uso de la clase Object como base del resto de las clases de .NET es la nica excepcin a la herencia simple soportada por .NET. Esta caracterstica nos asegura que siempre podremos usar un objeto del tipo Object para acceder a cualquier clase de .NET. Todos los tipos de datos de .NET, ya sean por valor o por referencia siempre estn derivados de la clase Object.

Clases y Estructuras Definir una Clase


En Visual Basic las clases se definen usando la palabra clave Class seguida del nombre de la clase, esa definicin acaba indicndolo con End Class.

Una vez definida la clase podemos agregar los elementos (o miembros) que creamos conveniente.
En el ejemplo, para simplificar, hemos agregado dos campos pblicos, aunque tambin podramos haber definido cualquiera de los miembros permitidos en las clases.

Clases y Estructuras Definir una Clase


En Visual Basic tambin podemos definir una clase especial llamada Module.

La definicin se hace usando la instruccin Module seguida del nombre a usar y acaba con End Module.
Cualquier miembro definido en un Module siempre estar accesible en todo el proyecto y para usarlos no tendremos que crear ningn objeto en memoria. Las clases definidas con la palabra clave Module realmente equivalen a las clases en las que todos los miembros estn compartidos y por tanto siempre disponibles a toda la aplicacin.

Clases y Estructuras Definir una Clase


Una clase puede contener cualquiera de estos elementos (miembros):

Enumeraciones. Campos. Mtodos (funciones o procedimientos). Propiedades. Eventos.

Clases y Estructuras Definir una Clase


Accesibilidad y mbito son dos conceptos que estn estrechamente relacionados.
Aunque en la prctica tienen el mismo significado, ya que lo que representan es la "cobertura" o alcance que tienen los miembros de las clases e incluso de las mismas clases que definamos.

mbito: Es el alcance que la definicin de un miembro o tipo puede tener.


Accesibilidad: A los distintos elementos de nuestro cdigo (ya sean clases o miembros de las clases) podemos darle diferentes tipos de accesibilidad.

Clases y Estructuras Definir una Clase


Los tipos de mbitos pueden ser:
mbito de bloque: Disponible nicamente en el bloque de cdigo en el que se ha declarado.

mbito de procedimiento: Disponible nicamente dentro del procedimiento en el que se ha declarado. mbito de mdulo: Disponible en todo el cdigo del mdulo, la clase o la estructura donde se ha declarado. mbito de espacio de nombres: Disponible en todo el cdigo del espacio de nombres.

Clases y Estructuras Definir una Clase


Los modificadores de accesibilidad son:
Public: Acceso no restringido. Protected: Acceso limitado a la clase contenedora o a los tipos derivados de esta clase. Friend: Acceso limitado al proyecto actual. Protected Friend: Acceso limitado al proyecto actual o a los tipos derivados de la clase contenedora. Private: Acceso limitado al tipo contenedor.

Clases y Estructuras Definir una Clase


Los miembros de una clase, (funciones y mtodos Sub), como las propiedades pueden recibir parmetros, se siguen soportando tanto los parmetros opcionales (Optional) como los arrays de parmetros (ParamArray).

Para llamar a esta funcin, lo podemos hacer de estas tres formas:

El tercer ejemplo solamente tiene utilidad si hay ms de un parmetro opcional.

Clases y Estructuras Definir una Clase


La sobrecarga de funciones (realmente de mtodos y propiedades), es una caracterstica que nos permite tener una misma funcin con diferentes tipos de parmetros, ya sea en nmero o en tipo.

Clases y Estructuras Definir una Clase


Tambin podemos tener sobrecarga usando una cantidad diferente de parmetros, aunque stos sean del mismo tipo.
Por ejemplo, podemos aadir esta declaracin al cdigo anterior sin que exista ningn tipo de error, ya que esta nueva funcin recibe tres parmetros en lugar de dos:

Clases y Estructuras Definir una Clase


A los parmetros de las funciones tambin podemos usar ByVal o ByRef para indicar al compilador cmo debe tratar a los parmetros. Cuando un parmetro es por valor (ByVal), el runtime antes de llamar a la funcin hace una copia de ese parmetro y pasa la copia a la funcin, por tanto cualquier cambio que hagamos a ese parmetro dentro de la funcin no afectar al valor usado "externamente".
En el caso de que el parmetro sea por referencia (ByRef), el compilador pasa una referencia que apunta a la direccin de memoria en la que estn los datos, por tanto si realizamos cambios dentro de la funcin, ese cambio si que se ver reflejado en el parmetro usado al llamar a la funcin.

Clases y Estructuras Crear un Objeto en Memoria


Una vez que tenemos una clase definida, lo nico de lo que disponemos es de una especie de plantilla o molde a partir del cual podemos crear objetos en memoria. Lo primero que tenemos que hacer es declarar una variable del tipo que queremos instanciar, esto lo hacemos usando la instruccin Dim:

Clases y Estructuras Crear un Objeto en Memoria


Cada vez que creamos un nuevo objeto en memoria estamos llamando al constructor de la clase.
En el constructor de una clase podemos incluir el cdigo que creamos conveniente, pero realmente solamente deberamos incluir el que realice algn tipo de inicializacin, en caso de que no necesitemos realizar ningn tipo de inicializacin, no es necesario definir el constructor, ya que el propio compilador lo har por nosotros.

Clases y Estructuras Crear un Objeto en Memoria


De la misma forma que podemos tener mtodos y propiedades sobrecargadas, tambin podemos tener constructores sobrecargados, ya que debemos recordar que en Visual Basic, un constructor realmente es un mtodo de tipo Sub, y como todos los mtodos y propiedades de Visual Basic, tambin admite la sobrecarga.

Clases y Estructuras Crear un Objeto en Memoria


Si nosotros no definimos un constructor, lo har el propio compilador, y cuando lo hace automticamente, siempre es un constructor sin parmetros.
Pero hay ocasiones en las que nos puede interesar que no exista un constructor sin parmetros, por ejemplo, podemos crear una clase Cliente que solo se pueda instanciar si le pasamos, por ejemplo el NIT, en caso de que no se indique ese dato, no podremos crear un nuevo objeto Cliente, de esta forma, nos aseguramos siempre de que el NIT siempre est especificado. Seguramente por ese motivo, si nosotros definimos un constructor con parmetros, VB no crea uno automticamente sin parmetros. Por tanto, si definimos un constructor con parmetros en una clase y queremos que tambin tenga uno sin parmetros, lo tenemos que definir nosotros mismos.

Clases y Estructuras Crear un Objeto en Memoria


De la misma forma que una clase tiene su punto de entrada o momento de nacimiento en el constructor, tambin tienen un sitio que se ejecutar cuando el objeto creado en la memoria ya no sea necesario, es decir, cuando acabe la vida del objeto creado.
El destructor de Visual Basic es un mtodo llamado Finalize, el cual se hereda de la clase Object, por tanto no es necesario que escribamos nada en l. El propio CLR se encargar de llamar a ese mtodo cuando el objeto ya no sea necesario.

En .NET los objetos no se destruyen inmediatamente y existe un "sistema" que se encarga de realizar esta gestin de limpieza: (Garbage Collector, GC).

Clases y Estructuras Estructuras


De la misma forma que podemos definir nuestros propios tipos de datos por referencia, VB nos permite crear nuestros propios tipos por valor. Para crear nuestros tipos de datos por referencia, usamos la "instruccin" Class, por tanto es de esperar que tambin exista una instruccin para crear nuestros tipos por valor, y esa instruccin es: Structure, por eso en VB a los tipos por valor definidos por el usuario se denominan estructuras.
Otra de las caractersticas de las estructuras es que no es necesario crear una instancia para poder usarlas, ya que es un tipo por valor y los tipos por valor no necesitan ser instanciados para que existan.

Clases y Estructuras Estructuras


Las estructuras se definen usando la palabra Structure seguida del nombre y acaba usando las instrucciones End Structure.

Aunque en redundante.

las

estructuras,

usar

New,

sera

algo

Las estructuras siempre se almacenan en la pila, por tanto deberamos tener la precaucin de no crear estructuras con muchos campos o con muchos miembros, ya que esto implicara un mayor consumo del "preciado" espacio de la pila.

Clases y Estructuras Accesibilidad


Tal y como comentamos anteriormente, dependiendo de dnde y cmo estn declarados los tipos de datos y los miembros definidos en ellos, tendremos o no acceso a esos elementos.
Recordemos que el mbito es el alcance con el que podemos acceder a un elemento y depende de dnde est declarado, por otro lado, la accesibilidad depende de cmo declaremos cada uno de esos elementos. Hagamos las respectivas demostraciones con ejercicios.

Clases y Estructuras Accesibilidad


La accesibilidad predeterminada de los tipos

Accesibilidades permitidas en los tipos

Clases y Estructuras Accesibilidad


Los espacios de nombres pueden contener otros espacios de nombres y estos a su vez tambin pueden contener otros espacios de nombres o clases, y como hemos visto, para poder acceder a una clase que no est dentro del mismo espacio de nombres debemos indicar el "nombre completo".
Para evitar estar escribiendo todos los espacios de nombres en los que est la clase que nos interesa declarar, podemos usar una especie de acceso directo o para que lo entendamos mejor, podemos crear una especie de "Path", de forma que al declarar una variable, si esta no est definida en el espacio de nombres actual, el compilador busque en todos los espacios de nombres incluidos en esas rutas (paths).

Clases y Estructuras Accesibilidad


Esto lo conseguimos usando la instruccin Imports seguida del espacio de nombres que queremos importar o incluir en el path de los espacios de nombres. Podemos usar tantas importaciones de espacios de nombres como necesitemos y estas siempre deben aparecer al principio del fichero, justo despus de las instrucciones Options.

Clases y Estructuras Propiedades


Las propiedades son los miembros de los tipos que nos permiten acceder a los datos que dicho tipo manipula.
Normalmente una propiedad est relacionada con un campo, de forma que el campo sea el que realmente contenga el valor y la propiedad simplemente sea una especie de mtodo a travs del cual podemos acceder a ese valor.

Clases y Estructuras Interfaces


Las interfaces son un elemento bastante importante en .NET Framework, ya que de hecho se utiliza con bastante frecuencia. En esta leccin veremos que son las interfaces y como utilizarlas en nuestros proyectos. Tambin veremos que papel juegan en .NET y cmo aplicar algunas de las definidas en la biblioteca base.
Las interfaces son una forma especial de una clase, aunque la diferencia principal con las clases es que las interfaces no contienen cdigo ejecutable, solo definen los miembros.

Clases y Estructuras Interfaces


Para definir una interfaz en Visual Basic tenemos que usar la instruccin Interface seguida del nombre y terminar la declaracin con End Interface:

Como podemos observar, lo nico que tenemos que hacer es indicar el tipo de miembro y si recibe o no algn parmetro o argumento. Dos cosas importantes sobre las interfaces: 1. No se pueden definir campos. 2. Los miembros de las interfaces siempre son pblicos.

Clases y Estructuras Interfaces


Siempre que leemos sobre las interfaces, lo primero con lo que nos solemos encontrar es que una interfaz es un contrato. Veamos que nos quieren decir con esa frase. Tal como acabamos de ver, las interfaces solo definen los miembros, pero no el cdigo a usar en cada uno de ellos, esto es as precisamente porque el papel que juegan las interfaces es el de solo indicar que es lo que una clase o estructura puede, o mejor dicho, debe implementar.
Si en una clase indicamos que queremos "implementar" una interfaz, esa clase debe definir cada uno de los miembros que la interfaz expone. De esta forma nos aseguramos de que si una clase implementa una interfaz, tambin implementa todos los miembros definidos en dicha interfaz.

Clases y Estructuras Interfaces


Para poder utilizar una interfaz en una clase, o dicho de otra forma: para "implementar" los miembros expuestos por una interfaz en una clase debemos hacerlo mediante la instruccin Implements seguida del nombre de la interfaz:

Clases y Estructuras Interfaces


Una vez que tenemos implementada una interfaz en nuestra clase, podemos acceder a esos miembros de forma directa, es decir, usando un objeto creado a partir de la clase:

Para indicar que implementamos ms de una interfaz podemos hacerlo de dos formas:

Clases y Estructuras Manejo de Excepciones


Es indiscutible que por mucho que nos lo propongamos, nuestras aplicaciones no estarn libres de errores, y no nos referimos a errores sintcticos, ya que, afortunadamente, el IDE (Integrated Development Envirnment) de VS 2010 nos avisar de cualquier error sintctico e incluso de cualquier asignacin no vlida (al menos si tenemos activado Option Strict On). Pero de lo que no nos avisar, como es lgico, ser de los errores que se produzcan en tiempo de ejecucin. Para estos casos, VB pone a nuestra disposicin el manejo de excepciones. Veamos pues cmo utilizarlo, sobre todo el sistema de excepciones estructuradas que es el recomendable para cualquier desarrollo con .NET Framework.

Clases y Estructuras Manejo de Excepciones


Las excepciones en Visual Basic las podemos controlar usando las instrucciones Try / Catch / Finally.
Estas instrucciones realmente son bloques de instrucciones, al estilo de If / Else. Cuando queramos controlar una parte del cdigo que puede producir un error lo incluimos dentro del bloque Try. Si se produce un error, ste lo podemos detectar en el bloque Catch. Por ltimo, independientemente de que se produzca o no una excepcin, podemos ejecutar el cdigo que incluyamos en el bloque Finally, para indicar el final del bloque de control de excepciones lo haremos con End Try.

Clases y Estructuras Manejo de Excepciones


Cuando creamos una estructura de control de excepciones no estamos obligados a usar los tres bloques, aunque el primero: Try s es necesario, ya que es el que le indica al compilador que tenemos intencin de controlar los errores que se produzcan.
Por tanto podemos crear un "manejador" de excepciones usando los tres bloques, usando Try y Catch o usando Try y Finally.

Clases y Estructuras Manejo de Excepciones


En el bloque Finally podemos indicar las instrucciones que queremos que se ejecuten, se produzca o no una excepcin. De esta forma nos aseguramos de que siempre se ejecutar un cdigo, por ejemplo para liberar recursos, se haya producido un error o no.
Aunque si no vamos usar la variable indicada en el bloque Catch, pero queremos que no se detenga la aplicacin cuando se produzca un error, podemos hacerlo de esta forma:

Clases y Estructuras Manejo de Excepciones


Adems de indicar la excepcin que queremos controlar, en un bloque Catch podemos aadir la clusula When para evaluar una expresin. Si la evaluacin de la expresin indicada despus de When devuelve un valor verdadero, se procesar el bloque Catch, en caso de que devuelva un valor falso, se ignorar esa captura de error.

Clases y Estructuras Eventos y Delegados


La forma que tienen nuestras clases y estructuras comunicar que algo est ocurriendo, es por medio eventos. Los eventos no les son desconocidos a desarrolladores de VB6, ya que tambin existen y pueden definir en ese lenguaje. de de los se

En VB se siguen usando de la misma forma que en VB6, aunque seguramente siempre que hemos ledo sobre el tema aparece la palabra delegado. Y es que, aunque VB nos oculte (o facilite) el trabajo con los eventos, stos siempre estn relacionados con los delegados.

Clases y Estructuras Eventos


La forma ms sencilla de asociar el evento de un control con el cdigo que se usar, es haciendo doble-click en el control; por ejemplo, si en nuestro formulario tenemos un botn, al hacer doble pulsacin sobre l tendremos asociado el evento Click del botn.
Esto es as para los eventos predeterminados de los controles.

Clases y Estructuras Eventos


Lo primero que podemos notar es que en VB utiliza dos argumentos, esto siempre es as en todos los eventos producidos por los controles. El primero indica el control que produce el evento, (en nuestro ejemplo sera una referencia al control Button1), y el segundo normalmente contiene informacin sobre el evento que se produce.
Para definir un evento en una clase usamos la instruccin Event seguida del nombre del evento y opcionalmente indicamos los argumentos que dicho evento recibir.

Clases y Estructuras Eventos


En el siguiente trozo de cdigo definimos un evento llamado DatosModificados que no utiliza ningn argumento:

Para producir un evento en nuestra clase, y de esta forma notificar a quin quiera interceptarlo, simplemente usaremos la instruccin RaiseEvent seguida del evento que queremos producir.

Clases y Estructuras Delegados


Veamos que nos dice la documentacin de Visual Basic sobre los delegados:
"Un delegado es una clase que puede contener una referencia a un mtodo. A diferencia de otras clases, los delegados tienen un prototipo (firma) y pueden guardar referencias nicamente a los mtodos que coinciden con su prototipo." Esta definicin, al menos en lo que respecta a su relacin con los eventos, viene a decir que los delegados determinan la forma en que debemos declarar los mtodos que queramos usar para interceptar un evento.

Clases y Estructuras Delegados

Vous aimerez peut-être aussi