Está en la página 1de 64

INGENIERIA EN SISTEMAS COMPUTACIONALES. MATERIA: Programacin .

Net

Unidad: U2 PRESENTA: Marco Antonio Galero Vzquez

MAESTRO:
ING. Enrique Ponce Rivera

2.1 Tipo de Datos


El tipo de datos de un elemento de programacin hace referencia al tipo de datos que puede contener y a cmo se almacenan dichos datos. Los tipos de datos se aplican a todos los valores que pueden almacenarse en la memoria del equipo o participar en la evaluacin de una expresin. Cada variable, literal, constante, enumeracin, propiedad, parmetro de procedimiento, argumento de procedimiento y valor devuelto por un procedimiento tiene un tipo de datos. Tipos de datos declarados A menos que utilice la programacin sin tipos, debe declarar los tipos de datos de todos los elementos de programacin. Un elemento de programacin se define con una instruccin de declaracin y su tipo de datos se especifica con la clusula As. La tabla siguiente muestra las instrucciones utilizadas para declarar diversos elementos.

Tipos de datos de Visual Basic.NET y su equivalente en el Common Language Runtime (CLR)

Tipo de Tipo en CLR Visual Basic (Framework)

Espacio de Valores que se pueden almacenar memoria y comentarios que ocupa 2 bytes Un valor verdadero o falso. Valores: True o False. En VB se pueden representar por -1 o 0, en CLR sern 1 y 0, aunque no es recomendable usar valores numricos, es preferible usar siempre True o False. Dim b As Boolean = True

Boolean

System.Boolean

Byte

System.Byte

1 byte

Un valor positivo sin signo, para contener datos binarios. Valores: de 0 a 255 Puede convertirse a: Short, Integer, Long, Single,Double o Decimal si

n recibir overflow Dim b As Byte = 129 Char System.Char 2 bytes Un carcter Unicode. Valores: de 0 a 65535 (sin signo). No se puede convertir directamente a tipo numrico. Para indicar que una constante de cadena, realmente es un Char, usar la letra C despus de la cadena: Dim c As Char = "N"c Date System.DateTime 8 bytes Una fecha. Valores: desde las 0:00:00 del 1 de Enero del 0001 hasta las 23:59:59 del 31 de Diciembre del 9999. Las fechas deben representarse entre almohadillas # y por lo habitual usando el formato norteamericano: #m-d-yyyy# Dim d As Date = #10-27-2001# Decimal System.Decimal 16 bytes Un nmero decimal. Valores: de 0a+/79,228,162,514,264,337,593,543,950,335 sin decimales; de 0 a +/-7.9228162514264337593543950335 con 28 lugares a la derecha del decimal; el nmero ms pequeo es: +/-0.0000000000000000000000000001 (+/-1E28). En los literales se puede usar la letra D o el signo @ para indicar que el valor es Decimal. Dim un Decimal As Decimal = 9223372036854775808D Dim unDecimal2 As Decimal = 987654321.125@ Double System.Double 8 bytes Un nmero de coma flotante de doble precisin. Valores: de -1.79769313486231570E+308 a

-4.94065645841246544E-324 para valores negativos; de 4.94065645841246544E-324 a 1.79769313486231570E+308 para valores positivos. Se puede convertir a Decimal sin recibir un overflow. Se puede usar como sufijo el signo almohadilla # o la letra R para representar un valor de doble precisin: Dim unDoble As Double = 125897.0235R Dim unDoble2 As Double = 987456.0125# Integer System.Int32 4 bytes Un nmero entero (sin decimales) Valores: de -2,147, 483,648 a 2, 147, 483,647. Se puede convertir a Long, Single, Double o Decimal sin producir overflow. Se puede usar la letra I o el signo % para indicar que es un nmero entero: Dim unEntero As Integer = 250009I Dim unEntero2 As Integer = 652000% Long (entero largo) System.Int64 8 bytes Un entero largo (o grande) Valores: de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807. Se puede convertir a Single, Double o Decimal sin producir overflow. Se puede usar la letra L o el signo & para indicar que es un nmero Long: Dim unLong As Long = 12345678L Dim unLong2 As Long = 1234567890& Object System.Object(class) 4 bytes Cualquier tipo se puede almacenar en una variable de tipo Object. Todos los datos que se manejan en .NET estn basados en el tipo Object.

Short (entero corto)

System.Int16

2 bytes

Un entero corto (sin decimales) Valores: de -32,768 a 32,767. Se puede convertir a: Integer, Long, Single, Doubl o Decimal sin producir un overflow. Se puede usar la letra S para indicar que es un nmero entero corto: Dim un Short As Short = 32000S

Single

System.Single

4 bytes

Nmero de coma flotante de precisin simple. Valores: de -3.4028235E+38 a -1.401298E-45 para valores negativos; de 1.401298E-45 a 3.4028235E+38 para valores positivos. Se puede convertir a: Double o Decimal sin producir overflow. Se pueden usar la letra F y el smbolo ! para indicar que es un nmero Single: Dim unSingle As Single = 987.125F Dim unSingle2 As Single = 65478.6547!

String System.String(clase) (cadenas de longitud variable)

Depende de la plataform a

Una cadena de caracteres Unicode. Valores: de 0 to aproximadamente 2 billones (2^31) de caracteres Unicode. Se puede usar el smbolo $ para indicar que una variable es un String.

Tipos (heradada definidos de System.ValueType por el ) usuario (estructuras )

Depende Cada miembro de la estructura tiene su rango, de la dependiendo del tipo de dato que representa. plataform a

Esta tabla muestra algunos de los ms importantes adems de los valores mnimos y mximos que puede contener y el tamao que ocupa en memoria. Tenemos los tipos de datos que podemos usar en vb.NET y por tanto, de los que podemos declarar variables. Por ejemplo, si queremos tener una variable en la que guardaremos nmeros enteros (sin decimales), los cuales sabemos que no sern mayores de 32767 ni menores de -32768, podemos usar el tipo Short: Dim variable As Short Despus podemos asignar el valor correspondiente: variable = 15000 Cuando asignemos valores a las variables podemos hacer esta asignacin dependiendo del tipo que es. Segn el tipo de dato de la variable puede ser necesario el uso de delimitadores para encerrar el valor que vamos a asignar: Tipos numricos. Las variables no necesitan delimitadores, se asignan directamente. Si es un valor real los decimales se separan con el punto. Tipos alfanumricos o cadenas de caracteres. Las variables se encierran entre comillas: "pepe", "casado" Fecha. Podemos encerrar la fecha con los signos #. Por ejemplo #01/01/2004#. o con comillas dobles. La diferencia (y muy importante) es que si utilizamos las almohadillas # el formato de la fecha es mes/da/ao y si es la comilla el formato es da/mes/ao (por el valor de la configuracin regional de nuestro equipo). Tipos lgicos (boolean). Las variables de este tipo slo pueden tener los valores Verdadero (True) o falso (False) Las variables las podemos declarar en cualquier parte del cdigo pero por norma utilizaremos lo ms lgico que es declararlas al principio de nuestras rutinas o procedimientos. Tambin podemos asignar un valor a la variable en el momento de crearla por ejemplo: Dim valor as string="mesa" Dim edad as long="23" Que sera lo mismo que hacer: Dim valor as string Dim edad as long

valor="mesa" edad=23 Por regla general no haremos esa asignacin en la declaracin simplemente porque en muchos casos no sabremos su valor predeterminado ya que estamos declarando esas variables para realizar clculos en el cdigo.

Detalles sobre los tipos de datos


Ya sabemos que antes de escribir programas debo saber qu variables debo utilizar y adems de qu tipo. Esto conlleva cosas importantes en la programacin: Nunca se debe comenzar a programar sin haber hecho un diseo de lo que queremos realizar Es obligatorio que se definan todas las variables que se van a utilizar y su tipo. Del segundo punto nos encargaremos ms adelante. Del primero est claro: papel y lpiz y a pensar en el programa, luego pasar a limpio la idea y los procesos o algoritmos ms importantes que vamos a realizar y por fin lo plasmaremos en un programa. Si esto se hace correctamente la declaracin de variables ms que un engorro es otro paso ms en el desarrollo de nuestro programa y que nos va a asegurar que lo dems va a funcionar bien, en cuando a tipos de datos se refiere. Es un vicio generalizado en los programadores de Visual Basic que cojan el ratn y un formulario y empiecen a dibujar el resultado de la pantalla y luego, lo ltimo a escribir cdigo. NO! La diferencia entre un programador y un analista es que el analista primero piensa, plasma las ideas y realiza el diseo sobre el papel. El programador no debe realizar la tpica accin de "prueba y ensayo", es decir escribo cdigo y lo pruebo, si no funciona, lo corrijo, lo vuelvo a probar... y as hasta que funciona. Esto os pasar con toda seguridad en las primeras fases del aprendizaje. Pero luego lo interesante es hacer un anlisis del programa para detectar los problemas y el flujo correcto que debe seguir. Finalmente escribir el cdigo que lgicamente no funcionar a la primera pero estar bastante cerca. (Una ley de Murphy dice que "si algo funciona a la primera es que est mal hecho"). Paciencia, la programacin es algo que no se debe aprender rpido, hay que asimilar, el entorno, la herramienta y nuestra capacidad, limitada al principio por el propio conocimiento del lenguaje. Si no lo conocemos no sabremos muy bien que se

puede hacer con l. Pero esto es temporal, la prctica y, sobre todo el buen estilo, ayudarn mucho a que el proceso de aprendizaje sea corto. Sigamos con nuestras variables. Estbamos con que nos hemos asustado un poco porque tenemos un montn de tipos de datos y no sabremos muy bien cual utilizar. Atento a este supuesto que le ha pasado a todo programador en sus inicios: Resulta que voy a realizar unas operaciones con nmeros enteros y elijo el tipo "short" que me dice el manual que es para nmeros enteros. Ahora mi programa opera con este valor y por razones del programa debe asignarle el valor de 87000... Sigo con el programa y resulta que no funciona nada, que una pantalla sencilla me devuelve un valor imposible. Pero... si slo he hecho una multiplicacin!. Bien, el problema est en que el tipo de datos elegido para la variable ha sido el "short" (equivalente al Int de VB6) y en este tipo de datos slo le caben nmeros hasta el valor 32767. Uf! para encontrar este fallo hemos gastado horas. Para resolverlo debo utilizar un tipo de datos que admita nmeros ms grandes (Long o Integer). Como disponemos de mucha memoria en nuestros equipos y no queremos ser rcanos vamos a utilizar siempre los tipos de datos ms grandes para que no se nos den estos problemas, total, gastar 2 bytes ms cuando tengo varios miles de millones (varios GB de memoria) no es mucho no? . ms adelante, cuando tengamos ms prctica escogeremos el tipo exacto... Veamos entonces que tipo de datos son los que te recomiendo que debemos utilizar en nuestro aprendizaje: INT/LONG, para valores numricos enteros DOUBLE, para valores reales o con decimales DATE, para valores de fecha BOOLEAN, para valores boleanos, es decir los que pueden ser slo cierto/falso (true/false). Por ejemplo: "Dispone de vehculo: True" STRING, para cadenas de caracteres.

Convertir tipos de datos


Visual Basic proporciona varias funciones de conversin que puede utilizar para convertir valores de tipos de datos especficos. Por ejemplo, para convertir un valor a Currency, utilice la funcin Ccur: PagoPorSemana = Ccur (horas * PagoPorHora) La siguiente tabla muestra las funciones de conversin:

Nota: Los valores que se pasan a una funcin de conversin deben ser vlidos para el tipo de dato de destino o se producir un error. Por ejemplo, si intenta convertir un tipo Long en un Integer, el tipo de Long debe de estar en el intervalo vlido del tipo de dato Integer.

2.2 Uso de Variables y Clases

Las variables, como su nombre lo indica, se utilizan para almacenar valores que tienen la propiedad de variar el contenido. Cuando hablamos de contenido nos referimos a cualquier tipo de datos, por ejemplo un nombre, una fecha, un color, un nmero etc... . A las variables se les asigna un nombre para poder utilizarlas. Por ejemplo puedo crear una variable llamada fecha y esta almacenar una fecha. A los nombres de las variables se los denomina identificadores. Cuando creamos variables, tenemos que tratar de asignarles un nombre que se relacione con el tipo de dato que queremos almacenar. Por ejemplo no tendra mucho sentido crear una variable llamada m y all guardar o almacenar un nombre o un apellido, porque cuando echemos vista al cdigo resultara ms difcil deducir que tipo de dato estoy guardando. Por ejemplo en este ltimo caso sera mucho ms lgico crear una variable llamada nombres y all guardar "Luciano", "Pedro", "Natalia" etc..

En visual basic a las variables conviene declararlas, o sea, avisarle a vb que vamos a utilizar dichas variables. A estas se las declara en el comienzo del cdigo y se les antepone la palabra reservada Dim, luego el nombre que nosotros queramos y seguido el tipo de dato que almacenar, por ejemplo si quiero almacenar en una variable llamada Numero Dim numero As Integer

La palabra Integer le avisa a visual basic que voy a guardar un nmero entero. Despus de declararla le podemos asignar un valor con el operador "=", ejemplo: Dim numero As Integer numero = 1500 Pero hay que tener en cuenta que al declarar una variable, en este caso, de tipo integer, no podramos almacenar en ella una cadena de caracteres como por ejemplo un nombre o cualquier otro tipo de datos que no sea un nmero entero. Si sucedera esto nuestro programa dara un error en tiempo de ejecucin, mostrndonos un feo cartel dicindoos que no coinciden los tipos de datos...

VARIABLES EN VISUAL BASIC

Variables en Visual Basic Al realizar clculos con Visual Basic, con frecuencia es necesario almacenar valores. Por ejemplo, puede que necesite calcular varios valores, compararlos y realizar distintas operaciones con ellos, en funcin del resultado de la comparacin. Si desea compararlos, es necesario conservar los valores.UsoVisual Basic, al igual que la mayora de los lenguajes de programacin, utiliza variables para almacenar valores. Una variable tiene un nombre (la palabra que se utiliza para referirse al valor que contiene la variable) y un tipo de datos (que determina la clase de datos que puede almacenar la variable). Una variable puede representar una matriz, si es necesario que almacene un conjunto indizado de elementos de datos estrechamente relacionados entre s. Asignar valores

Para efectuar clculos y asignar el resultado a una variable, se utilizan instrucciones de asignacin, como se muestra en el ejemplo siguiente. Declaracin de variable en Visual Basic Una variable se declara para especificar su nombre y sus caractersticas. La instruccin de declaracin para variables es Instruccin Dim (Visual Basic). Su ubicacin y contenido determinan las caractersticas de la variable. Para las reglas de denominacin de variables y consideraciones, consulte Nombres de elementos declarados. Niveles de declaracin Valor local y variables miembros Una variable local es aquella que se declara dentro de un procedimiento. Una variable miembro es un miembro de un tipo de Visual Basic; se declara en el nivel de mdulo, dentro de una clase, estructura o mdulo, pero no dentro de ningn procedimiento interno de esa clase, estructura o mdulo. Variables compartidas y de instancias La categora de una variable miembro, en una clase o estructura, depende de que la variable est o no compartida. Si una variable se declara con la palabra clave Shared, es una variable compartida, y existe en una nica copia compartida por todas las instancias de la clase o estructura. De lo contrario, es una variable de instancia, y se crea una copia independiente de ella para cada instancia de la clase o estructura. Una copia determinada de una variable de instancia slo est disponible en la instancia para la cual se cre. Es independiente de una copia en cualquier otra instancia.

Declarar el tipo de datos


La clusula As de la instruccin de declaracin permite definir el tipo de datos o de objetos de la variable que se est declarando. Se puede especificar cualquiera de los siguientes tipos para una variable. Un tipo de datos bsico, como Boolean, Long o Decimal. Un tipo de datos compuesto, como una matriz o una estructura. Un tipo de objeto o clase, definido en su aplicacin o en otra. Una clase de .NET Framework, como Label o TextBox Un tipo de interfaz, como IComparable o Se pueden declarar varias declarar distintas variables en la misma instruccin sin necesidad de repetir el tipo de datos. En las instrucciones siguientes, las variables i, jy k se declaran como tipo Integer, l y m como Long,

y x e y como Single:Dim i, j, k As Integer All three variables in the preceding statement are declared as Integer. Dim l, m As Long, x, y As Single In the preceding statement, l and m are Long, x and y are Single.Para obtener ms informacin acerca de tipos de datos, consulte Tipos de datos en Visual Basic. Para obtener ms informacin sobre objetos, consulte Programacin orientada a objetos en Visual Basic y Programar con componentes.

Declarar caractersticas
El perodo de duracin de una variable representa el tiempo durante el cual la variable est disponible para que pueda ser utilizada. En general, una variable existe mientras el elemento que lo declara (como un procedimiento o clase) siga existiendo. En algunos casos es posible extender la duracin de una variable. Para obtener ms informacin, consulte Perodo de duracin en Visual Basic. El mbito de una variable est formado por todo cdigo que puede hacer referencia a la variable sin tener que calificar su nombre. El mbito de una variable est determinado por la ubicacin en la que se haya declarado la variable. El cdigo de una regin determinada puede utilizar las variables definidas en dicha regin sin necesidad de especificar los nombres de las variables. Para obtener ms informacin, consulte mbito en Visual Basic.El nivel de acceso de una variable es la extensin de cdigo que tiene permiso para tener acceso a ella. El modificador de acceso (como Public (Visual Basic) o Private (Visual Basic)) que utiliza en la instruccin Dim es quien determina esto. Para obtener ms informacin, consulte Niveles de acceso en Visual Basic.

Variables en Visual Basic


Las variables que se declaran en un procedimiento mediante la sentencia Dim slo existen mientras se ejecuta el procedimiento. Cuando termina el procedimiento, desaparece el valor de la variable. Adems, el valor de una variable de un procedimiento es local a dicho procedimiento; es decir, no puede tener acceso a una variable de un procedimiento desde otro procedimiento. Estas caractersticas le permiten utilizar los mismos nombres de variables en distintos procedimientos sin preocuparse por posibles conflictos o modificaciones accidentales. El nombre de una variable debe cumplir con los siguientes requisitos: Debe comenzar con una letra. No puede incluir un punto o un carcter de declaracin de tipo ($,&,!,%,#,@). No debe exceder de 255 caracteres.

Debe ser nica en el mismo alcance, que es el intervalo desde el que se puede hacer referencia a la variable: un procedimiento, formulario, etc. La clusula opcional As tipo de la sentencia Dim le permite definir el tipo de dato o de objeto de la variable que va a declarar. Los tipos de datos definen el tipo de informacin que almacena la variable. Algunos ejemplos de tipos de datos son String, Integer y Currency. Las variables tambin pueden contener objetos. Algunos ejemplos de tipos de objeto de Visual Basic, o clases, son Object, Form1 y TextBox. Hay otras formas de declarar variables: Declarar una variable en la seccin Declaraciones de un mdulo de formulario, estndar o de clase, en vez de un procedimiento, hace que la variable est disponible para todos los procedimientos del mdulo. Declarar una variable mediante la palabra clave Public hace que est accesible para toda la aplicacin. Declarar una variable local mediante la palabra clave Static conserva su valor aunque termine el procedimiento.

Pero.. qu es una variable? Una variable es un nombre simblico que se refiere a un dato determinado almacenado en memoria. Las nombraremos de acuerdo a las siguientes pautas: Siempre comenzarn por letra. Sern menores de 255 caracteres. No se permiten espacios (blancos), puntos (.), ni caracteres especiales. No pueden utilizarse palabras reservadas del lenguaje. Segn los tipos de datos que alberguemos en las variables, as sern de un tipo u otro, como se describe a continuacin: TIPO Boolean TAMAO Binario RANGO True / False

Byte Integer Long Single Double String Date

Entero Corto: 1 Byte Entero: 2 Bytes Entero Largo: 4 Bytes Real de Simple Precisin (4 Bytes) Real de Doble Precisin Cadena de Caracteres Fecha

De -128 a 128 De -32768 a 32768 De 232/2 a 232/2 Nmeros Reales Nmeros Reales Texto letras Fecha

Las variables Single y Double pueden ocupar nmeros reales muy grandes, por eso no hemos entrado en detalles, casi siempre nos servir con Single si deseamos nmeros decimales. Adems, hay otro tipo de variables, las variables tipo variant, que son como una variable standar que admite cualquier tipo de dato. No obstante, evitaremos usarla, y declararemos el tipo de variable segn convenga. (Como buenos programadores). En el uso de las variables, daremos tres pasos: 1.- Declarar la variable y comentarla. 2.- Inicializar la variable. 3.- Programar las debidas instrucciones. Para declararlas haremos lo siguiente: Dim NombreVariable As tipovariable

Ejemplos Dim pipo As String Dim numero As Integer

Por ltimo, para que no se nos olvide definir el tipo de variable, podemos hacer cualquiera de estas dos cosas: Escribir OPTION EXPLICIT, dentro del cdigo, en el apartado General Declaraciones (Mira las dos listas superiores donde escribes el cdigo fuente). Barra de men Herramientas / Opciones / Entorno. All sealas la opcin Declaracin explcita de variables.

Declaracin Explcita
Para evitar problemas al equivocarse de nombre en las variables, puede configurar Visual Basic para que le avise siempre que encuentre un nombre que no se haya declarado explcitamente como una variable. Para declarar variables de forma explcita: Incluya esta sentencia en la seccin Declaraciones Generales del mdulo de clase, de formulario o estndar: Option Explicit - o bien En el men Herramientas, elija Opciones, haga clic en la ficha Editor y active la opcin Declaracin de variables requerida. Esto inserta automticamente la sentencia Option Explicit en los mdulos nuevos, pero no en los ya creados, por lo que tendr que agregar manualmente Option Explicit a los mdulos existentes en el proyecto. Si hubiera tenido efecto dicha instruccin en el mdulo de formulario o mdulo estndar que contiene la funcin Raz, Visual Basic habra reconocido TempVal y TemVal como variables no declaradas y habra generado errores para ambas. Debera, por tanto, declara explcitamente TempVal:

Alcance de las Variables


El alcance de una variable define en qu partes del cdigo son reconocidas. Cuando declara una variable en un procedimiento, slo el cdigo de dicho procedimiento puede tener acceso o modificar el valor de la variable; tiene un alcance local al procedimiento. A veces, sin embargo, se necesita utilizar una variable con un alcance ms general, como aquella cuyo valor est disponible para todos los procedimientos del mismo mdulo o incluso para todos los procedimientos de toda la aplicacin. Visual Basic le permite especificar el alcance de una variable cuando la declara. Establecido el alcance de las variables Dependiendo de cmo se declara, una variable tiene como alcance un procedimiento (local) o un mdulo.

Variables utilizadas en un procedimiento


Las variables al nivel de procedimiento slo se reconocen en el procedimiento en el que se han declarado. Se las conoce tambin como variables locales. Se declaran mediante las palabras clave Dim o Static. Por ejemplo:

Los valores de variables locales declaradas con Static existen mientras se ejecuta la aplicacin, mientras que las variables declaradas con Dim slo existen mientras se ejecuta el procedimiento.

Variables utilizadas en un mdulo


De forma predeterminada, una variable al nivel de mdulo est disponible para todos los procedimientos del mdulo, pero no para el cdigo de otros mdulos. Cree variables al nivel de mdulo declarndolas con la palabra clave Private en la seccin Declaraciones Generales al principio del mdulo. Por ejemplo: Private intTemp As Integer

Al nivel de mdulo, no hay diferencia entre Private y Dim, pero es preferible usar Private porque contrasta con Public y hace que el cdigo sea ms fcil de comprender.

Variables utilizadas por todos los mdulos


Para hacer que una variable al nivel de mdulo est disponible para otros mdulos, utilice la palabra clave Public para declararlas. Los valores de las variables pblicas estn disponibles para todos los procedimientos de la aplicacin. Al igual que todas las variables al nivel del mdulo, las variables pblicas se declaran en la seccin Declaraciones Generales al principio del mdulo. Por ejemplo: Public intTemp As Integer Nota: No puede declarar variables pblicas en un procedimiento.

Clases

Una clase no es nada mas que un Objeto, este objeto, tiene propiedades, funciones y mtodos, ahora ustedes se preguntaran bueno esto mismo lo tienen presente los controles, entonces cual sera la diferencia entre un control y una clase, bueno para empezar la construccin de una clase no requiere de tanto "Protocolo" inclusive podra decir que una clase en visual basic, es casi lo mismo que un control, pero ahora nace una nueva pregunta, cuando utilizar un control y cuando utilizar una clase, bueno la opinin que voy a dar es desde mi perspectiva; yo usara un control cuando quiere representar un objeto grafico en donde el usuario interacta con l, y usuaria una clase para manipular la informacin interna de un programa, es decir normalmente una clase no suele ser una interfaz grfica, como por ejemplo, estaba visitando una pgina de Internet y vi una clase que manipula el DATAREPORT pero de una manera fenomenal, esta clase se le pasa la informacin a nivel de cdigo y emite un reporte dependiendo de la informacin. Un ejemplo ms claro de clase, imagnense que estn diseando un programa matemtico, este programa tiene una parte en donde dibuja una figura geomtrica, muy bien podran disear un control pero no sera lo adecuado PORQUE?, bueno porque yo veo a un control como un objeto que el usuario manipula, usa e interacta con l, el usuario no va interactuar con un dibujo de una figura

geomtrica, entonces es aqu donde diseara una clase, que realizara todos los clculos para dibujar una figura geomtrica, la clases tambin ayudan a mantener un cdigo ordenado, y poder reutilizarlo en cualquier aplicacin.

Esto es exactamente igual que en los controles, pero tienen que tener un cuenta una cosa, que son las palabras PUBLIC y PRIVATE, cuando se disea una clase tienen que tener cuidado cuando declaran funciones, mtodos y variables, ya que ustedes tienen que saber que variable es privado y que variable es publica; una variable PUBLICA puede ser vista por aquellos quienes usen la clase y la PRIVADA no puede ser vista sino nada mas por la propia clase, cuando veamos el ejemplo se entender mejor. En particular, las clases a partir de las cuales crea objetos combinan datos y procedimientos en una misma unidad. En los temas siguientes se explica cmo aumenta esto la coherencia del cdigo y cmo le puede conducir a nuevas maneras de programar. Clases: combinar tipos definidos por el usuario y procedimientos Las clases son tipos definidos por el usuario con una determinada actitud. El encapsulamiento coloca el cdigo y los datos dentro del mismo mdulo para producir objetos capaces de proteger y validar sus propios datos. Personalizar las clases Form Ha estado creando clases durante aos: cada vez que ha diseado un formulario. Esto tiene consecuencias interesantes para el diseo de formularios. Mdulos de clase paso a paso Breve introduccin a los mdulos de clase, que incluye la creacin de la clase, la creacin de objetos a partir de las clases y las reglas de la duracin de los objetos. Depurar los mdulos de clase Describe la opcin de interceptacin de errores Interrupcin en mdulo de clases, adems de las teclas ALT+F8 y ALT+F5 para ir paso a paso por los errores o saltarlos. Ciclo de vida de los formularios de Visual Basic Los ciclos de vida de los formularios y de los controles que contienen siguen unas reglas ligeramente diferentes de las que se aplican a otros objetos. Mdulos de clase frente a mdulos estndar Hay diferencias importantes entre los mdulos de clase y los mdulos estndar. Su descripcin le ayudar a escribir un cdigo mejor para sus objetos.

La programacin orientada a objetos resuelve este problema mediante la combinacin de datos y procedimientos en una nica entidad, como se muestra en la figura: Los objetos combinan datos y procedimientos

Cuando el tipo definido por el usuario udtAccount se convierte en la clase Account, sus datos pasan a ser privados y los procedimientos que tienen acceso a ellos pasan a formar parte de la clase como propiedades y mtodos. Esto es lo que significa el trmino encapsulamiento; es decir, un objeto es una unidad (una cpsula, si quiere) que contiene cdigo y datos. Cuando crea un objeto Account a partir de la clase, la nica manera de tener acceso a sus datos es mediante las propiedades y los mtodos que forman su interfaz. En el siguiente fragmento de cdigo se muestra cmo implementan el encapsulamiento los procedimientos de la clase Account: ' El saldo de la cuenta no se ve fuera del cdigo. Private mdblBalance As Double

' La propiedad de slo lectura Balance permite que el ' cdigo externo lea el saldo de la cuenta. Public Property Get Balance() As Double

Balance = mdblBalance End Property

' El mtodo Withdrawal cambia el saldo de la cuenta, ' pero slo si no queda en nmeros rojos. Public Sub Withdrawal(ByVal Amount As Double) If Amount > Balance Then Err.Raise Number:=vbObjectError + 2081, _ Description:="Nmeros rojos" End If mdblBalance = mdblBalance - Amount End Sub

Por el momento, no se preocupe de cmo se incluyen los procedimientos en la clase ni de comprender la sintaxis de los procedimientos de propiedad y de las variables privadas. Lo importante es recordar que puede definir un objeto que encapsula y valida sus propios datos. Con el objeto Account nunca tiene que preocuparse de si ha utilizado los procedimientos correctos para actualizar la cuenta, porque los nicos procedimientos que puede utilizar estn incorporados al objeto. Para obtener ms informacin Personalizacin de las clases Form ubica la creacin de propiedades y mtodos en un marco con el que ya est familiarizado. Ms adelante, Agregar propiedades y mtodos a una clase le explicar la sintaxis. Puede ver acerca de los tipos definidos por el usuario en Crear sus propios tipos de datos, en Ms acerca de la programacin. Para obtener detalles acerca de los procedimientos Sub y Function, vea Introduccin a los procedimientos en Fundamentos de programacin.

Puede que le sorprenda descubrir que ya ha estado creando clases durante todo el tiempo que ha estado programando en Visual Basic. Es cierto: Form1, ese nombre tan familiar que aparece en cada proyecto que ha empezado, es realmente una clase. Para comprobarlo, abra un nuevo proyecto Exe estndar. Agregue un botn a Form1 y coloque el siguiente cdigo en el evento Click: Private Sub Command1.Click() Dim f As New Form1 f.Show End Sub

Presione F5 para ejecutar el proyecto y haga clic en el botn. No se sorprenda; hay otra instancia de Form1. Haga clic en su botn: hay otra. Todas las instancias que crea parecen iguales y tienen el mismo comportamiento, puesto que todas son instancias de la clase Form1. Qu est pasando? Si ha visto Trabajar con objetos, en Fundamentos de programacin, sabr que una variable de objeto declarada As New contiene Nothing hasta la primera vez que hace referencia a ella desde el cdigo. La primera vez que utiliza la variable, Visual Basic observa que contiene el valor especial Nothing y crea una instancia de la clase. (Y hace bien, porque si no, f.Show provocara un error.) Yo y mi variable global oculta Puede que se pregunte cmo puede hacer referencia a Form1 en el cdigo, como si fuera una variable de objeto. No hay magia por ninguna parte. Visual Basic crea una variable oculta de objeto global por cada clase de formulario. Es como si Visual Basic hubiera agregado la siguiente declaracin al proyecto: Public Form1 As New Form1

Cuando selecciona Form1 como objeto inicial o cuando escribe Form1.Show en el cdigo esthaciendo referencia a esta variable oculta de objeto global. Como est declarada As New, se crea una instancia de la clase Form1 la primera vez que utiliza esta variable declarada previamente en el cdigo. La razn por la que esta declaracin est oculta es porque Visual Basic la modifica cada vez que se modifica la propiedad Namede un formulario. De esta forma, la variable oculta siempre tiene el mismo nombre que la clase formulario. Una pregunta Cules de las instancias de Form1 creadas en el ejercicio anterior estaban asociadas con la variable global oculta? Si contesta que la primera, tiene razn. Form1 es el objeto inicial predeterminado del proyecto y para Visual Basic eso es como si utilizara la variable global Form1 declarada previamente en el cdigo. Sugerencia Despus de descargar un formulario, siempre debe establecer todas las referencias del formulario a Nothing para liberar la memoria y los recursos utilizados por el formulario. La referencia que ms se suele pasar por alto es la variable oculta de formulario global. Qu ocurre con las dems instancias de Form1? En Fundamentos de programacin ha visto que para hacer referencia a un objeto necesita una variable de objeto y que un objeto slo existe mientras haya al menos una variable de objeto que contenga una referencia al mismo. Entonces, por qu se mantienen todas las dems instancias? La segunda instancia de Form1, y todas las dems, tenan una variable de objeto mientras se utilizaban sus mtodos Show. Despus, esa variable perdi su alcance y se estableci a Nothing. Pero Visual Basic mantiene una coleccin especial llamada Forms sobre la que puede profundizar en Ms acerca de los formularios, en Crear una interfaz de usuario. La coleccinForms contiene una referencia a cada uno de los formularios cargados en el proyecto, de modo que siempre puede encontrarlos y controlarlos. Nota Como ir observando, esto no es cierto para todas las clases. Por ejemplo, las clases que disea no tendrn variables globales ocultas ni colecciones globales para administrarlas: stas son caractersticas especiales de las clases de formulario. Sin embargo, puede declarar sus propias variables globales y sus propias colecciones como se describe en Creacin de sus propias clases de coleccin. Propiedades, mtodos y eventos de las clases Form

La primera vez que agreg una propiedad a una clase de formulario probablemente lo hizo de forma visual, mediante la colocacin de un botn de comando (o algn otro control) en Form1. Al hacerlo, agreg una propiedad Command1 de slo lectura a la clase de formulario. A continuacin invoc esta propiedad de Form1 cuando tena que invocar un mtodo o una propiedad del botn de comando: Command1.Caption = "Haga clic aqu"

Cuando modificaba la propiedad Name de cualquier control de un formulario, Visual Basic modificaba ocultamente el nombre de la propiedad de slo lectura para que siempre coincidieran. Si todava tiene abierto el proyecto del ejercicio anterior, puede ver esta propiedad Command1 presionando F2 para abrir el Examinador de objetos. En el cuadro Proyecto/Biblioteca, seleccione Project1. Ver Form1 en el panel Clases. En el panelMiembros, desplcese hasta encontrar Command1 y seleccinelo. Command1 tiene un smbolo de propiedad al lado y si observa el panel descripcin, ver que es una propiedad WithEvents. Como ver en Agregar eventos a las clases, esto quiere decir que la propiedad (o la variable de objeto) tiene un procedimiento de evento asociado con ella. Puede que uno de dichos procedimientos de evento, Command1_Click (), contenga el primer cdigo de Visual Basic escrito por usted. Espere, an hay ms Colocar controles en un formulario no es la nica manera de agregar nuevos miembros a la clase de formulario. Puede agregar sus propias propiedades, mtodos y eventos personalizados con la misma facilidad con la que crea nuevas variables y procedimientos. Para comprobarlo, agregue el cdigo siguiente a la seccin Declaraciones de Form1: ' Propiedad Comment de la clase Form1. Public Comment As String

Agregue el cdigo siguiente al evento Click de Form1: Private Sub Form_Click()

MsgBox Comment, , "Mi comentario es:" End Sub

Por ltimo, modifique el cdigo del procedimiento de evento Command1_Click () agregando un lnea, de la siguiente manera: Private Sub Command1.Click() Dim f As New Form1 f.Comment = InputBox("Cul es mi comentario?") f.Show End Sub

Presione F5 para ejecutar el proyecto. Haga clic en Command1 y, cuando aparezca el cuadro de entrada, escriba cualquier cosa y haga clic en Aceptar. Cuando aparezca la nueva instancia de Form1, haga clic en ella para reproducir su propiedad Comment. Haga clic en la primera instancia de Form1 y observe que la propiedad Comment est vaca. Puesto que Visual Basic cre esta instancia como objeto inicial, nunca tuvo oportunidad de establecer su propiedad Comment. Los formularios pueden invocar los mtodos de otros formularios Si se ha fijado bien, puede que haya advertido que el cdigo agregado a la clase Form1 no estableca la propiedad Comment del objeto, sino que estableca la propiedad Comment de la nueva instancia de Form1 que creaba. Esta capacidad de los formularios para establecer las propiedades y utilizar los mtodos de otros formularios es una tcnica muy til. Por ejemplo, cuando un formulario MDI abre una nueva ventana secundaria, puede inicializar la nueva ventana mediante el establecimiento de sus propiedades y llamadas a sus mtodos. Tambin puede utilizar esta tcnica para pasar informacin de un formulario a otro.

Sugerencia Puede crear eventos personalizados en los formularios. Agregar un evento a un formulario, ms adelante en este tema, le proporciona el procedimiento que debe seguir. Otros tipos de mdulos Puede agregar propiedades, mtodos y eventos a las clases de formulario mediante la escritura de cdigo en sus mdulos de cdigo. De la misma forma, puede agregar propiedades, mtodos y eventos a los mdulos de clase y, si tiene la Edicin profesional o la Edicin empresarial de Visual Basic, a los mdulos de cdigo del control de usuario y del documento de usuario. Cuando lea Agregar propiedades y mtodos a una clase y Agregar eventos a una clase, recuerde que todo lo que lea se aplica a las clases de formulario as como a los mdulos de clase. Para obtener ms informacin Qu es un mdulo de clase? En Mdulos de clase paso a paso se muestra cmo puede definir una clase y se ilustra el ciclo de vida de los objetos creados a partir de dicha clase.

4 - Mdulos de clase, paso a paso En este ejemplo se muestra cmo puede utilizar los mdulos de clase para definir clases a partir de las cuales puede crear despus objetos. Tambin le explica cmo puede crear propiedades y mtodos en la nueva clase y le demuestra cmo se crean y se destruyen los objetos. Abra un nuevo proyecto Exe estndar e inserte un mdulo de clase con Agregar mdulo de clase del men Proyecto. Coloque cuatro botones de comando en el formulario. En la tabla siguiente se enumeran los valores de propiedades que tiene que establecer para los objetos de este ejemplo.

Objeto Mdulo de clase Command1 Command2 Command3 Command4

Propiedad Name Caption Caption Caption Caption

Valor Thing Mostrar Thing Invertir el nombre de Thing Crear nuevo Thing Thing temporal

Nota: Los mdulos de clase se guardan en archivos con la extensin .cls. Agregue lo siguiente a la seccin Declaraciones del mdulo de clase:
Option Public Name Private mdtmCreated As Date Explicit String

As

La variable Name ser una propiedad del objeto Thing, puesto que se declara Public. Nota: No confunda esta propiedad Name con la propiedad Name del mdulo de clase, establecida segn las indicaciones de la tabla anterior. (La propiedad Name del mdulo de clase asigna el nombre a la clase Thing.) Por qu se da a la clase Thing una propiedad Name? Sera mejor preguntase, por qu no? Puede que desee asignar una propiedad Name a la clase Thing porque Things debe tener nombres. Recuerde que no hay restricciones especiales en cuanto a los nombres de las propiedades y los mtodos utilizados en Visual Basic. Puede utilizar los mismos nombres de propiedades y mtodos en las clases. La variable mdtmCreated es un miembro privado de datos que se utiliza para almacenar el valor de la propiedad de slo lectura Created. La propiedad Created devuelve la fecha y la hora en que se cre el objeto Thing. Para implementar la propiedad Created, agregue el siguiente procedimiento Property Get a la seccin Declaraciones del mdulo de clase:

Property Get Created() As Date Created = mdtmCreated End Property

Nota: Si agrega el procedimiento de propiedad mediante el cuadro de dilogo Agregar procedimiento del men Herramientas, asegrese de eliminar la declaracin Property Let que se agrega automticamente con este cuadro de dilogo. Property Let slo se requiere en las propiedades de lectura y escritura, como se explica en Funcionamiento de los procedimientos de propiedad. El objeto Thing tiene un mtodo, ReverseName, que simplemente invierte el orden de las letras de la propiedad Name. No devuelve ningn valor, por lo que est implementado como procedimiento Sub. Agregue el siguiente procedimiento Sub al mdulo de clase.
Public Sub ReverseName() Dim intCt As Integer Dim strNew As String For intCt = 1 To Len(Name) strNew = Mid$(Name, intCt, 1) & strNew Next Name = strNew End Sub

Los mdulos de clase tienen dos eventos, Initialize y Terminate. En la lista desplegable Objeto del mdulo de clase, seleccioneClass. La lista desplegable Procedimiento mostrar los eventos. Coloque el cdigo siguiente en los procedimientos de evento:
Private Sub Class_Initialize() ' Establece la fecha y hora de creacin del objeto, ' que devolver la propiedad Created. mdtmCreated = Now ' Muestra las propiedades del objeto.

MsgBox "Nombre: " & Name & vbCrLf & "Creado: " _ & Created, , "Inicializacin de Thing" End Sub Private Sub Class_Terminate() ' Muestra las propiedades del objeto. MsgBox "Nombre: " & Name & vbCrLf & "Creado: " _ & Created, , "Terminacin de Thing" End Sub

Normalmente, el procedimiento de evento Initialize contiene el cdigo que se ejecuta en el momento de la creacin del objeto, por ejemplo la fecha y la hora para la propiedad Created. El evento Terminate contiene el cdigo necesario para liberar el objeto cuando ste se destruye. En este ejemplo, los dos eventos se utilizan principalmente para ofrecer una indicacin visual de la creacin y destruccin de un objeto Thing

Agregue esta declaracin a la seccin Declaraciones del mdulo de formulario:


Option Private mth As Thing Explicit

La variable mth almacenar una referencia a un objeto Thing, que se crear en el evento Load del formulario. Coloque el cdigo siguiente en el procedimiento de evento Form_Load y en los procedimientos de evento Click de los cuatro botones.
Private Sub Form_Load() Set mth = New Thing mth.Name = InputBox("Escriba un nombre para Thing") End Sub

' Botn "Mostrar Thing" Private Sub Command1_Click() MsgBox "Nombre: " & mth.Name & vbCrLf _ & "Creado: " & mth.Created, , "Formulario Thing" End Sub ' Botn "Invertir el nombre de Thing" Private Sub Command2_Click() mth.ReverseName ' Clic en "Mostrar Thing" Command1.Value = True End Sub ' Botn "Crear nuevo Thing" Private Sub Command3_Click() Set mth = New Thing mth.Name = InputBox( _ "Escriba un nombre para el nuevo Thing") End Sub ' Botn "Thing temporal". Private Sub Command4_Click() Dim thTemp As New Thing thTemp.Name = InputBox( _ "Escriba un nombre para el Thing temporal") End Sub

Ejecucin del proyecto

Presione F5 para ejecutar el proyecto. Si observa el cdigo del procedimiento de evento Form_Load, podr ver que se utiliza el operador New para crear un objeto Thing. A la variable mth se le asigna una referencia a este objeto Thing. Ver un cuadro de entrada que le pide un nombre para el objeto Thing. Cuando escribe un nombre y presiona ENTRAR, el valor devuelto se asigna a la propiedad Name del objeto Thing. Mostrar Thing Puede comprobar que se ha asignado la propiedad Name si hace clic en el primer botn, Mostrar Thing, que presenta un cuadro de mensajes con todas las propiedades del objeto Thing. Invertir el nombre de Thing Haga clic en el segundo botn, Invertir el nombre de Thing. Est e botn llama al mtodo ReverseName para invertir el orden de las letras del nombre del objeto Thing y despus activa el primer botn para presentar los valores actualizados de las propiedades. Crear nuevo Thing Haga clic en el botn Crear nuevo Thing pa ra destruir el objeto Thing existente y crear uno nuevo. (O bien, como escribi realmente, para crear un nuevo Thing y despus destruir el antiguo.) El operador New hace que se cree un nuevo objeto Thing, de modo que ver el MsgBox presentado por el evento Initialize del nuevo objeto Thing. Cuando hace clic en Aceptar se coloca una referencia al nuevo objeto Thing en la variable mth del nivel de formulario. As se elimina la referencia del objeto Thing antiguo. Como no hay ms referencias a l, se destruye y aparece el cuadro de mensajes de su evento Terminate. Cuando hace clic en Aceptar, la instruccin InputBox solicita un nombre para el nuevo objeto Thing. Thing temporal El cuarto botn demuestra otro aspecto de la duracin del objeto. Cuando haga clic en l, se le pedir un nombre para el objeto Thing temporal. Pero espere, porque todava no existe un objeto Thing temporal. Si no ha visto el cuadro de mensajes del evento Initialize, cmo puede asignarle un nombre?

Como la variable thTemp se declar As New, se crear un objeto Thing en el momento en que se invoca una de sus propiedades o de sus mtodos. Esto ocurrir cuando se asigne el valor devuelto por InputBox a la propiedad Name. Escriba un nombre y haga clic en Aceptar en el cuadro de entrada. A continuacin ver el cuadro de mensajes Inicializar Thing, que muestra que la propiedad Name est vaca. Cuando hace clic en Aceptar para cerrar el cuadro de mensajes, se asigna el valor de la instruccin InputBox a la propiedad Name. sta es mucha actividad para una nica lnea de cdigo. Naturalmente, en cuanto haya hecho esto termina el procedimiento de evento Click y la variable thTemp pierde su alcance. Se libera la referencia del objeto Thing temporal, por lo que ver el cuadro de mensajes Terminar Thing. Observe que contiene el nombre que escribi. Cada vez que haga clic en este botn se crear otro objeto Thing temporal, se le asignar un nombre y se destruir. Cierre del programa Cierre el programa con un clic en el botn de cierre del formulario. No utilice el botn Terminar de la barra de herramientas. Cuando el programa se cierra, se destruye Form1. La variable mth pierde su alcance y Visual Basic libera la referencia al objeto Thing. No quedan referencias al objeto Thing, por lo que se destruye y se presenta el cuadro de mensajes del evento Terminate. Vuelva a ejecutar el programa, pero esta vez termnelo mediante el botn Terminar de la barra de herramientas. Observe que no se presenta el cuadro de mensajes Terminar del objeto Thing. Es importante recordar que si termina un programa con el botn Terminar o con una instruccin End desde el cdigo, detiene el programa inmediatamente sin ejecutar los eventos Terminate de los objetos. Siempre es mejor cerrar el programa con todos los formularios descargados. Puede encontrar til ejecutar el ejemplo con la tecla F8 para recorrer el cdigo de lnea en lnea. sta es una buena manera de entender el orden de los eventos que tienen lugar en la creacin y destruccin de un objeto. Importante En una aplicacin real, los eventos Initialize y Terminate no deben contener cuadros de mensaje ni ningn cdigo que permita procesar los mensajes en Windows. En general, es mejor utilizar instrucciones Debug.Print cuando depure la duracin de los objetos.

La depuracin de los mdulos de clase difiere ligeramente de la depuracin de los programas normales, ya que un error en una propiedad o un mtodo de un mdulo de clase siempre acta como un error controlado. (Es decir, siempre hay un procedimiento en la pila de llamadas que puede controlar el error, a saber: el procedimiento que invoc la propiedad o el mtodo del mdulo de clase.) Visual Basic compensa esta diferencia con la opcin de interceptacin de errores Interrupcin en mdulos de clases, adems de las opciones antiguas Interrupcin en errores no controlables y Modo de interrupcin en todos. Nota Puede establecer el estado Interceptacin de errores predeterminada en la ficha General del cuadro de dilogo Opciones, disponible en el men Herramientas. La opcin seleccionada afecta a la sesin actual y se convierte en la predeterminada para todas las instancias posteriores de Visual Basic. Para cambiar el valor slo para la sesin actual, sin afectar a la opcin predeterminada, seleccione Alternar en el men contextual de la ventana Cdigo (que aparece al hacer clic con el botn secundario del mouse en la ventana Cdigo) Por ejemplo, suponga que el mdulo de clase Class1 contiene el cdigo siguiente: Public Sub Oops() Dim intOops As Integer intOops = intOops / 0 End Sub

Ahora suponga que un procedimiento de otro mdulo de clase, formulario o mdulo estndar invoca al miembro Oops: Private Sub Command1_Click() Dim c1 As New Class1

c1.Oops End Sub

Si la opcin de interceptacin de errores est establecida a Interrupcin en errores no controlables, la ejecucin no se detendr en la divisin por cero. En su lugar, el error se producir en el procedimiento que llama, Command1_Click. La ejecucin se detendr en la llamada al mtodo Oops. Podra utilizar Interrupcin en todos los errores para detenerse en la divisin por cero, pero esta opcin no es la ms conveniente en la mayora de las situaciones, ya que se detiene en todos los errores, incluso en los errores para los que ha escrito cdigo de control. Es ms lgico activar Interrupcin en mdulo de clases: o La ejecucin no se detendr en el cdigo del mdulo de clase para el que ha escrito un controlador de errores. o La ejecucin slo se detiene en los errores no controlados en el mdulo de clase y que, por tanto, se devolveran al que llama al mtodo. o Cuando se inicia el entorno de desarrollo de Visual Basic, la opcin predeterminada es Interrupcin en mdulos de clases. o Si no hay mdulos de clase, Interrupcin en mdulos de clases es equivalente a Interrupcin en errores no controlables. Sugerencia: Cuando llega a un punto de interrupcin con las opciones Interrupcin en mdulos de clases o Interrupcin en errores no controlables, puede recorrer el mdulo o saltar el error si presiona ALT+F8 o ALT+F5 (dentro del cdigo de control de errores o dentro del cdigo que llam al procedimiento en que se produjo el error). Para obtener ms informacin: La depuracin se describe en detalle en Depurar el cdigo y controlar los errores.

Las clases difieren de los mdulos estndar en la forma de almacenar sus datos. Nunca hay ms de una copia de los datos de un mdulo estndar. Esto significa que cuando una parte del programa modifica una variable pblica de un mdulo estndar y otra parte del programa la lee despus, obtendr el mismo valor. Por otra parte, los datos de un mdulo de clase existen por separado para cada instancia de la clase (es decir, por cada objeto creado a partir de la clase). Segn el mismo razonamiento, los datos de un mdulo estndar tienen el alcance del programa; es decir, existen durante toda la ejecucin del programa, mientras que los datos de cada instancia de un mdulo de clase slo existen durante la duracin del objeto; se crean cuando se crea el objeto y se destruyen cuando se destruye el objeto. Por ltimo, las variables declaradas Public en los mdulos estndar son visibles desde cualquier parte del proyecto, mientras que slo puede tener acceso a las variables Public de los mdulos de clase si dispone de una variable de objeto que contenga una referencia a una instancia concreta de una clase. Todo lo anterior tambin se aplica a los procedimientos pblicos de los mdulos estndar y de los mdulos de clase. Todo esto se ilustra en el ejemplo siguiente. Puede ejecutar este cdigo si abre un proyecto Exe estndar y utiliza el men Proyecto para agregar un mdulo y un mdulo de clase.

Coloque el cdigo siguiente en Module1:


' La siguiente es una propiedad de los objetos Class1. Public Comment As String ' El siguiente es un mtodo de los objetos Class1. Public Sub ShowComment() MsgBox Comment, , gstrVisibleEverywhere End Sub Coloque el cdigo siguiente en Module1: ' El cdigo del mdulo estndar es global. Public gstrVisibleEverywhere As String Public Sub CallableAnywhere(ByVal c1 As Class1)

' La lnea siguiente modifica una variable global ' (propiedad) de una instancia de Class1. Slo ' afecta al objeto en particular pasado a este ' procedimiento. c1.Comment = "Tocado por una funcin global." End Sub

Coloque dos botones de comando en Form1 y agregue el cdigo siguiente a Form1:


Private mc1First As Class1 Private mc1Second As Class1 Private Sub Form_Load() ' Crea dos instancias de Class1. Set mc1First = New Class1 Set mc1Second = New Class1 gstrVisibleEverywhere = "Datos de cadena global" End Sub Private Sub Command1_Click() Call CallableAnywhere(mc1First) mc1First.ShowComment End Sub Private Sub Command2_Click() mc1Second.ShowComment End Sub

Presione F5 para ejecutar el proyecto. Cuando se carga, Form1 crea dos instancias de Class1, cada una con sus propios datos. Form1 establece tambin el valor de la variable global gstrVisibleEverywhere. Haga clic en Command1, que llama al procedimiento global y pasa una referencia al primer objeto Class1. El procedimiento global establece la propiedad Comment y despus Command1 llama al mtodo ShowComment para presentar los datos del objeto. Como se puede ver en la figura 9.6, el cuadro de mensajes resultante demuestra que el procedimiento global CallableAnywhere establece la propiedad Comment del objeto que se le pasa y que la cadena global es visible desde dentro de Class1. Importante: Evite que el cdigo de sus clases dependa de datos globales, es decir, de variables pblicas de mdulos estndar. Pueden existir simultneamente varias instancias de una clase y todos estos objetos comparten los datos globales del programa. Adems, el empleo de variables globales en el cdigo de los mdulos de clase, no cumple con el concepto de encapsulamiento de la programacin orientada a objetos, puesto que los objetos creados a partir de dichas clases no contienen todos sus datos.

Datos estticos de clase Puede haber ocasiones en las que quiera que todos los objetos creados a partir de un mdulo de clase compartan un nico elemento de datos. A esto se le suele llamar datos estticos de clase. No puede implementar datos de clase realmente estticos en los mdulos de clase de Visual Basic. Sin embargo, puede simularlo mediante procedimientos Property que establezcan y devuelvan el valor de un miembro de datos Public de un mdulo estndar, como en el siguiente fragmento de cdigo:
' Propiedad de slo lectura que devuelve el ' nombre de la aplicacin. Property Get CommonString() As String ' La variable gstrVisibleEverywhere se almacena en ' un mdulo estndar y se declara Public. CommonString = gstrVisibleEverywhere

End Property

Nota: No puede utilizar la palabra clave Static para las variables de nivel de mdulo en los mdulos de clase. La palabra clave Static slo se puede utilizar dentro de procedimientos. Es posible simular datos estticos de clase que no sean de slo lectura mediante un procedimiento Property Let (o Property Set si la propiedad contiene una referencia de objeto) que asigne un nuevo valor al miembro de datos del mdulo estndar. Sin embargo, utilizar variables globales de esta forma no cumple con el concepto de encapsulamiento y no se recomienda. Por ejemplo, la variable gstrVisibleEverywhere puede establecerse desde cualquier parte del proyecto, incluso desde cdigo no perteneciente a la clase que tiene la propiedad CommonString. Esto puede conducir a situaciones de error en el programa.

2.3 Mtodos y Propiedades

Los mtodos son un conjunto de procedimientos que permiten que un objeto ejecute una accin o tarea sobre s mismo. Por ejemplo, para un formulario tenemos el mtodo Hide que har que el formulario se oculte; o el mtodo Show que har que el formulario se vuelva a mostrar. Los mtodos pueden afectar a los valores de las propiedades. Por ejemplo, en el caso de una analoga de radio, se puede emplear un mtodo SetVolume para cambiar el valor de una propiedad Volume. Asimismo, en Visual Basic .NET, los elementos de los cuadros de lista tienen una propiedad List, que se puede cambiar con los mtodos Clear y Add. Al utilizar un mtodo en cdigo, la forma de crear la instruccin depende de cuntos argumentos requiere el mtodo y de si devuelve un valor. Generalmente, los mtodos se utilizan igual que las subrutinas o las llamadas de funcin. De forma ms especfica, los mtodos se invocan del mismo modo que los procedimientos de mdulos, exceptuando que los mtodos se pueden calificar con una expresin especificando la instancia del objeto a cuyo mtodo debe llamarse. Si no est calificada, la instancia es de forma implcita la variable Me. Para utilizar un mtodo que no requiera argumentos * Utilice la sintaxis siguiente: object.method() En el ejemplo siguiente, el mtodo Refresh vuelve a dibujar el cuadro de imagen: PictureBox1.Refresh() ' Forces a repaint of the control Nota Algunos mtodos, como Refresh, no tienen argumentos y no devuelven valores. Para utilizar un mtodo que requiera varios argumentos * Ponga los argumentos entre parntesis y seprelos mediante comas. En el ejemplo siguiente, el mtodo MsgBox utiliza argumentos que especifican el mensaje que se debe mostrar y el estilo del cuadro de mensaje: MsgBox("Database MsgBoxStyle.OKOnly "My Application") update Or complete", MsgBoxStyle.Exclamation, _ _

Para utilizar un mtodo que devuelva un valor

* Asigne el valor devuelto a una variable o utilice directamente la llamada al mtodo como parmetro para otra llamada. El cdigo siguiente almacena el valor devuelto: Dim Response Response = MsgBox("Do you MessageBoxButtons.YesNo Or "My Application") As MsgBoxResult want to exit?", _ MsgBoxStyle.Question, _

Este ejemplo utiliza el valor devuelto por el mtodo Len como argumento para MsgBox.

Propiedades.
Una propiedad es un bloque de cdigo que se ejecuta como respuesta a un evento. Al dividir el cdigo de un mdulo en procedimientos Sub, es ms sencillo encontrar o modificar el cdigo de la aplicacin. La sintaxis de un procedimiento Sub es la siguiente: [Private|Public][Static]Sub instrucciones End Sub nombre_procedimiento (argumentos)

Cada vez que se llama al procedimiento se ejecutan las instrucciones que hay entre Sub y End Sub. Se pueden colocar los procedimientos Sub en mdulos estndar, mdulos de clase y mdulos de formulario. De forma predeterminada, los procedimientos Sub son Public en todos los mdulos, lo que significa que se les puede llamar desde cualquier parte de la aplicacin. Los argumentos de un procedimiento son como las declaraciones de variables; se declaran valores que se pasan desde el procedimiento que hace la llamada. Resulta muy til en Visual Basic distinguir entre dos tipos de procedimientos Sub, procedimientos generales y procedimientos de evento.

Procedimientos generales

Un procedimiento general indica a la aplicacin cmo realizar una tarea especfica. Una vez que se define un procedimiento general, se le debe llamar especficamente desde la aplicacin. Por el contrario, un procedimiento de evento permanece inactivo hasta que se le llama para responder a eventos provocados por el usuario o desencadenados por el sistema. Por qu crear procedimientos generales? Una razn es que muchos procedimientos de evento distintos pueden necesitar que se lleven a cabo las mismas acciones. Es una buena estrategia de programacin colocar las instrucciones comunes en un procedimiento distinto (un procedimiento general) y hacer que los procedimientos de evento lo llamen. Esto elimina la necesidad de duplicar cdigo y tambin hace que la aplicacin sea ms fcil de mantener.

Procedimientos de evento

Cuando un objeto en Visual Basic reconoce que se ha producido un evento, llama automticamente al procedimiento de evento utilizando el nombre correspondiente al evento. Como el nombre establece una asociacin entre el objeto y el cdigo, se dice que los procedimientos de evento estn adjuntos a formularios y controles. o Un procedimiento de evento de un control combina el nombre real del control (especificado en la propiedad Name), un carcter de subrayado (_) y el nombre del evento. Por ejemplo, si desea que un botn de comando llamado cmdPlay llame a un procedimiento de evento cuando se haga clic en l, utilice el procedimiento cmdPlay_Click. o Un procedimiento de evento de un formulario combina la palabra "Form", un carcter de subrayado y el nombre del evento. Si desea que un formulario llame a un procedimiento de evento cuando se hace clic en l, utilice el procedimiento Form_Click. (Como los controles, los formularios tienen nombres nicos, pero no se utilizan en los nombres de los procedimientos de evento.)

Todos los procedimientos de evento utilizan la misma sintaxis general.

Sintaxis de un evento de control de un evento de formulario

Private Sub instrucciones End Sub

nombrecontrol_nombreevento

(argumentos

Private End Sub

Sub

Form_nombreevento

(argumentos) instrucciones

Aunque puede escribir procedimientos de evento nuevos, es ms sencillo utilizar los procedimientos de cdigo que facilita Visual Basic, que incluyen automticamente los nombres correctos de procedimiento. Puede seleccionar una plantilla en la ventana Editor de cdigo si selecciona un objeto en el cuadro Objeto y selecciona un procedimiento en el cuadro Procedimiento. Tambin es conveniente establecer la propiedad Name de los controles antes de empezar a escribir los procedimientos de evento para los mismos. Si cambia el nombre de un control tras vincularle un procedimiento, deber cambiar tambin el nombre del procedimiento para que coincida con el nuevo nombre del control. De lo contrario, Visual Basic no ser capaz de hacer coincidir el control con el procedimiento. Cuando el nombre de un procedimiento no coincide con el nombre de un control, se convierte en un procedimiento general.

PROCEDIMIENTOS COMUNES DE LOS CONTROLES

Los controles que se pueden incluir en el formulario aparecen en la caja de herramientas. No es necesario recordar la posicin o forma de cada control. En Visual Basic 4.0, cuando el cursor se sita sobre un control de la caja de herramientas, aparece una pista recordando el control que permite crear. Todos los controles tienen algunas propiedades comunes como pueden ser: Caption(Leyenda) Establece el texto que el usuario visualizar. No confundir con la propiedad Name. Text(Texto) Acta igual que la propiedad Caption para aquellos controles que no dispongan de dicha propiedad, p.e. las cajas de texto. Muestra el contenido del control y, por tanto, tambin contiene los caracteres introducidos por el usuario. No confundir con la propiedad Name. Name(Nombre) Propiedad MUY importante. Define el nombre del control en el cdigo del programa. No confundir con las propiedades Caption o Text que es lo que el usuario visualiza. TabStop (PuntodeTabulacin)

Si el valor es True, el control ser susceptible de recibir el foco durante la ejecucin de la aplicacin. TabIndex (ndice de tabulacin)

Indica el nmero de orden en el que el control recibir el foco cuando el usuario, en tiempo de ejecucin, pulse la tecla Tab para recorrer los controles. A medida que se van situando controles en el formulario, Visual Basic incrementa en una unidad, el valor de esta propiedad para el nuevo control y, lo decrementa en caso de eliminar algn control. El valor para el primer control es 0.

PROPIEDADES DE LOS BOTONES DE COMANDO

Command Button (2 fila, icono de la derecha). Se utiliza para ejecutar la accin asociada a la pulsacin de dicho botn.

Enabled(Habilitado) El valor False hace que el botn aparezca atenuado y, no responda a eventos. Cancel(Cancelar) Establecer el valor de esta propiedad a True, hace que el botn responda a la pulsacin de la tecla ESC como si se hubiera hecho clic sobre l. En un formulario solo puede haber un botn con esta propiedad establecida a True.

Default(Defecto) Establecer el valor de esta propiedad a True, hace que el botn responda a la pulsacin de la tecla INTRO como si se hubiera hecho clic sobre l. Al igual como antes, en un formulario solo puede haber un botn con esta propiedad establecida a True.

PROPIEDADES DE LAS CAJAS DE TEXTO

Text Box (2 fila, icono de la izquierda). Es un rea dentro del formulario donde el usuario puede escribir texto o visualizarlo.

MaxLength (Tamao mximo)

Determina el nmero mximo de caracteres que puede aceptar la caja de texto.

MultiLine (Lneas Mltiples)

Permite que la caja de texto admita varias lneas con la pulsacin de la tecla INTRO. Normalmente se combina con la propiedad ScrollBars.

ScrollBars (Barras de desplazamiento) Controla si en la caja de texto aparecern las barras de desplazamiento o no. PasswordChar (Carcter clave) Permite mostrar un carcter clave en vez de los introducidos por el usuario. Locked (Bloqueada) Permite bloquear la caja de texto para que el usuario en tiempo de ejecucin, no modifique el contenido de la caja. Esta propiedad es nueva en Visual Basic 4.0 SelLength (Longitud del texto seleccionado) Nmero de caracteres seleccionado actualmente. Accesible durante la ejecucin. SelStart (Comienzo de la seleccin) Indica dnde comienza el texto seleccionado (la posicin del cursor). Si el valor es 0, el texto seleccionado empieza delante del primer carcter de la caja de texto. Si es igual a la longitud del texto de la caja, indica la posicin detrs del ltimo carcter del texto. Accesible en tiempo de ejecucin. SelText (Texto seleccionado) Contiene el texto seleccionado. Accesible en tiempo de ejecucin.

PROPIEDADES DE LAS ETIQUETAS

Label (1 fila, icono de la derecha). Es un rea dentro del formulario donde el usuario puede visualizar texto sin modificarlo.

Alignment (Alineacin)

Determina

la

situacin

del

texto

dentro

de

la

etiqueta.

AutoSize, WordWrap (Tamao automtico y enlace de textos)

La primera propiedad permite que la etiqueta crezca horizontalmente en funcin de su contenido. La segunda propiedad permite que el crecimiento sea vertical. Name Nombre Define al objeto durante la ejecucin del programa. Se introduce en tiempo de diseo y no se puede variar durante la ejecucin.

Caption Ttulo Es el texto que aparecer en la barra de Ttulo cada vez que aparezca en pantalla este formulario Control BoxControl "menos" del Formulario Valor por defecto : True Propiedad booleana que admite los valores de true (verdadero) o False (Falso). MinButton MaxButton Valor por defecto: True Botones (flechas) de minimizar y maximizar este formulario. BorderStyle Tipo de borde Define el tipo de borde que tendr el formulario durante la ejecucin. 1. None El formulario no tiene borde alrededor 2. Fixed Single

El formulario tendr un borde fino, y no podr cambiarse su tamao durante el tiempo de ejecucin. 3. Sizable El formulario tendr borde grueso, y se podr cambiar su tamao en tiempo de ejecucin mediante los botones de maximizar y minimizar, y mediante el arrastre de uno de los bordes con el ratn. 4. Fixed Dialog El formulario tendr borde grueso. FillColor Color de relleno

Especifica el color del relleno contemplado en FillStyle.

Font Tipo de letra

Especifica el tipo y tamao de la letra que se usar en el formulario.

FontTranparent Texto Transparente Valor por defecto: True

Establece si el texto o grfico de fondo del formulario se muestra (True) o no se muestra entre los caracteres de texto escritos en el propio formulario.

FontSize Tamao de letra

Establece el tamao de la letra.

FontBold, FontItalic, FontStrikethru, FontUnderline

Permiten, en tiempo de ejecucin, cambiar un texto a negrita, cursiva, tachado y subrayado. Son propiedades booleanas True / False

Height Altura

Define la altura del formulario.

HelpContextID

Establece un nmero de contexto asociado para este formulario. Este nmero se aplica para determinar la ayuda interactiva asociada a este formulario.

Icon Icono

Esta propiedad define el icono que va a representar a este formulario cuando est minimizado.

KeyPreview

Propiedad Booleana. Cuando un formulario tiene dentro de s varios controles, uno de ellos es el que est activo.

LeftBorde Izquierdo Indica la posicin del borde izquierdo del formulario. LinkMode Permite que una aplicacin destino inicie una conversacin DDE con el formulario

(origen de datos). LinkTopic Establece el tema al que este formulario va a responder a una conversacin DDE, cuando funciona como origen. MDIChild Establece que este formulario es un formulario Hijo dentro de un formulario MDI. No se puede cambiar en tiempo de ejecucin. Es una propiedad booleana

MousePointer Determina la forma del puntero del ratn cuando se coloca encima del formulario. Picture Grfico Mediante esta propiedad podemos poner un grfico como fondo del formulario. El grfico puede ser un bit-map o un fichero .ICO Top Posicin del borde superior Esta propiedad establece la posicin del borde superior del formulario. Width Ancho Define la anchura del formulario. WindowState Establece el estado en el que aparecer el formulario cuando se activa y presenta en pantalla. Admite tres opciones: Normal El formulario recupera la posicin y tamao que tena en el tiempo de diseo. Minimizado El formulario aparece minimizado, representado por su icono. Maximizado El formulario aparece maximizado, ocupando toda la pantalla.

2.4 Trabajo con Variables y Procedimientos

En la siguiente lnea se declaran 2 tipos de variables de tipo Integer llamadas num1 y num2. Luego se les asigna un valor a cada una y luego las sumamos, y mediante la funcin MsgBox que es una funcin de Visual Basic para mostrar mensajes, mostramos el resultado de esa suma. Coloca un botn (CommandButton) llamado Command1. Hac dobleClick sobre el botn para que se abra la ventana de cdigo de Visual Basic. Dentro del procedimiento Click pega este cdigo:

Dim num1 As Integer Dim num2 As Integer num1 = 10 num2 = 20 'se mostrar un mensaje MsgBox num1 + num2 con la suma de las variables con el resultado 30

Al ejecutar el programa, puedes ver como se presenta una caja de mensaje con el resultado al sumar las 2 variables num1 y num2 Ahora vamos a declarar y crear 2 variables de tipo String, es decir vamos a almacenar cadenas de caracteres en cada una de ellas. En el ejemplo se crean 2 variables, una llamada nombre y otra apellido. Despus le asignamos un valor, y por ultimo mostramos las variables con un mensaje usando la funcin MsgBox como en el ejemplo anterior. Pero antes hay que aclarar algo importante, las cadenas en visual basic se encierran entre comillas dobles como ves en el ejemplo, de lo contrario se va a producir un error.
Dim nombre As String Dim apellido As String 'le nombre = "Carlos" apellido = "Peres" 'mostramos un MsgBox nombre MsgBox apellido mensaje

establecemos

valores

con

el

valor

de

las

variables

Ahora un ejemplo que produce un error en tiempo de ejecucin. Creamos 2 variables exactamente igual que en el ejemplo anterior, pero en vez de declarar las variables nombre y apellido como de tipo String lo hacemos como de tipo Integer.

Dim Nombre As Integer Dim Apellido As Integer 'Le establecemos Nombre = "Carlos" Apellido = "Peres"

valores

numericos

Si pruebas el ejemplo, visual basic te mostrar un mensaje de error como el siguiente: "no coinciden los tipos de datos":

...ya que las variables estn declaradas como de tipo Integer, y le ests asignando un tipo de dato que no lo acepta. Un ejemplo que almacena un nmero en una variable de tipo Byte (nmeros de 0 a 255). Primero declaramos la variable y le damos un nombre, por ejemplo si queremos almacenar el nmero 88 hacemos por ejemplo as.
Dim Edad As Byte

Para asignarle un valor a esa variable:

Edad = 88

Para mostrar el valor de la variable Edad en un control TextBox cuando presionamos un botn Command1, sera de esta manera: Private Sub Command1_Click()
'Declaramos la variable Dim Edad As Byte 'Le asignamos un valor que no sea inferior a 0 ni mayor a 255 Edad = 88 'Lo mostramos en el control llamado Text1 Text1 = Edad End Sub

Si probaras cambiando el valor 88 por ejemplo a 300, ocurrira lo mismo que en el ejemplo anterior, es decir un Error 13 en tiempo de ejecucin "No coinciden los tipos de datos"

Procedimientos de control:

Los procedimientos de control se utilizan para controlar el flujo del programa en una rutina o funcin. Mediante ellas podemos controlar, mediante una condicin,

que se ejecute una determinada lnea o bloque de lneas de cdigo .. o que no se ejecuten.

Estructura If - Then - Else

Esta estructura permite mediante una condicin, que se ejecute o no se ejecute determinada tarea o lnea de cdigo. Por ejemplo supongamos que tenemos en un formulario un control Label con la propiedad Caption con el valor 50
If msgbox else msgbox end if Label1.Caption "mi label "mi label NO = tiene tiene un un "50" valor valor Then 50" 50"

de de

Esto traducido al espaol significara lo siguiente: Si (If) la propiedad caption del label1 que tengo en el formulario es igual (=) a "50" entonces (Then) que muestre un determinado mensaje, si no (Else) que muestre el otro mensaje. En conclusin lo que hace esta estructura es evaluar una condicin, si se cumple, que se ejecute determinada tarea. si no se cumple, se ejecutar las lneas de cdigo que estn bajo la clusula Else. Luego tenemos que cerrar la estructura con la palabra end if. Tenemos que aclarar que no es obligatorio usar If y else juntos en la misma clusula. Por ejemplo podramos utilizar solo una estructura If sin else. Por ejemplo:
Private Sub 'Si la propiedad caption del Label1 es If Label1.Caption End End If Command1_Click() entonces se termina el programa "Hola" Then

"Hola" =

'Si

no,

se

prosigue

con

esta

lnea

MsgBox "No se ejecut el bloque If Anterior porque el Caption del control Label1 no era Hola" End Sub

Coloca un Label1 y un Command1. En la propiedad caption del Label1 escribe "Hola". Al ejecutar el programa y presionar el Command1, se termina el programa con la sentencia End de Visual Basic (End sirve para finalizar completamente la ejecucin de nuestro programa). En cambio si ahora le cambia el caption al Label1 y vuelves a ejecutar el proyecto, puedes ver que la instruccin End no se ejecuta, si no que la pasa por alto y sigue con las restantes lneas, en este caso ejecuta la funcin MsgBox con el mensaje.

Estructura While - Wend

Esta estructura de control repetir sin detenerse un determinado cdigo mientras se cumpla una condicin. Por ejemplo supongamos que tenemos una variable llamada x que tiene un valor de 100.
while ...se wend x las = cdigo 100 aqu

ejecutan

todas

lneas

de

que

estn

Esto traducido al espaol significara lo siguiente: Mientras (While) la variable x sea igual a 100, y no cambie su valor, se formar un bucle interminable, hasta que x cambie a cualquier otro valor disto de 100. Si x cambia el valor, por ejemplo a 234 saldra del bucle While - wend y seguira ejecutando el resto del cdigo, si es que hay mas cdigo o instrucciones a ejecutar. Un ejemplo, agrega un Command1 al formulario y un control Text1. Cuando ejecutemos el ejemplo, se deber escribir un nmero dentro del control textBox. Entonces se crear un bucle While, que mostrar en el Caption del formulario, es

decir en la barra de ttulo, el intervalo desde 0 hasta el nmero que hayamos ingresado en el Text1. Es decir si ingresamos el nmero 9000, en el caption del formulario se imprimirn los nmero desde 0 hasta 9000. Para hacer esto, dentro del bucle While pondremos una variable llamada Contador, que en cada pasada se incrementar en 1, pero cuando la variable Contador sea igual al nmero que haya en el Text1, se finalizar el bucle y se mostrar un mensaje que finaliz el mismo Private Sub Command1_Click()
Dim contador As Integer 'Declaramos la variable While contador <> Text1 'Mostramos en el formulario el valor de la variable contador Me.Caption = contador 'Incrementamos la variable en 1 contador = contador + 1 Wend MsgBox "Termin el bucle" End Sub

Llamar a un procedimiento Los procedimientos se invocan desde otras partes del cdigo. Esto se conoce como una llamada a procedimiento. Cuando finaliza la ejecucin de un procedimiento, ste devuelve el control al cdigo que lo invoc, que recibe el nombre de cdigo de llamada. El cdigo de llamada es una instruccin o una

expresin contenida en una instruccin, que hace referencia al procedimiento por su nombre y le transfiere el control. Volver de un procedimiento Los procedimientos devuelven el control al cdigo de llamada cuando finalizan su ejecucin. Para ello, puede utilizar Instruccin Return (Visual Basic), la instruccin Instruccin Exit (Visual Basic) apropiada para el procedimiento o la instruccin End (Visual Basic) del procedimiento. El control se devuelve al cdigo de llamada, a continuacin del punto de la llamada al procedimiento. Con una instruccin Return, el control vuelve inmediatamente al cdigo de llamada. No se ejecutan las instrucciones siguientes a la instruccin Return. Puede tener ms de una instruccin Return en el mismo procedimiento. Con una instruccin Exit Sub o Exit Function, el control vuelve inmediatamente al cdigo de llamada. No se ejecutan las instrucciones siguientes a la instruccin Exit. Puede tener ms de una instruccin Exit en el mismo procedimiento, y puede mezclar las instrucciones Return y Exit en el mismo procedimiento. Si un procedimiento no incluye instrucciones Return o Exit, concluye con una instruccin End Sub o End Function, End Get o End Set a continuacin de la ltima instruccin del cuerpo del procedimiento. La instruccin End devuelve el control inmediatamente al cdigo de llamada. Puede tener slo una instruccin End en un procedimiento.

Parmetros y argumentos
En la mayora de los casos, un procedimiento necesita funcionar en datos diferentes cada vez que lo llama. Puede pasar esta informacin al procedimiento como parte de la llamada al procedimiento. El procedimiento define cero o ms parmetros, cada uno de los cuales representa un valor que el procedimiento espera que le pase. Cada parmetro de la definicin del procedimiento cuenta con un argumento correspondiente en la llamada al procedimiento. Un argumento representa el valor que pasa al parmetro correspondiente en una llamada a procedimiento determinada.

Tipos de procedimientos
Visual Basic utiliza varios tipos de procedimientos: Procedimientos Sub: ejecutan acciones pero no devuelven un valor al cdigo de llamada.

Los procedimientos de control de eventos son procedimientos Sub que se ejecutan en respuesta a un evento provocado por una accin del usuario o por un suceso en un programa. Procedimientos Function: devuelven un valor al cdigo de llamada. Pueden realizar otras acciones antes de volver. Procedimientos de propiedad: devuelven y asignan valores de propiedades en objetos o mdulos. Procedimientos de operador: definen el comportamiento de un operador estndar cuando uno o los dos operandos son una clase definida recientemente o una estructura. Procedimientos genricos en Visual Basic: definen uno o varios parmetros de tipo adems de sus parmetros normales, de forma que el cdigo de llamada puede pasar tipos de datos especficos cada vez que realiza una llamada.

Procedimientos y cdigo estructurado


Todas las lneas de cdigo ejecutable de una aplicacin deben encontrarse dentro de un procedimiento, por ejemplo, Main, calculate o Button1_Click. La aplicacin se leer con mayor facilidad si subdivide los procedimientos grandes en procedimientos ms pequeos. Los procedimientos son tiles para realizar tareas repetitivas o compartidas, como clculos de uso frecuente, manipulacin de texto y controles, y operaciones con bases de datos. Se puede llamar a un procedimiento desde distintos lugares del cdigo; de modo que los procedimientos se prestan a servir de unidades de creacin de la aplicacin.

La estructuracin del cdigo en procedimientos aporta las siguientes ventajas: Los procedimientos permiten desglosar los programas en unidades lgicas independientes. Es ms fcil depurar unidades individuales que todo un programa sin procedimientos.

Despus de desarrollar los procedimientos para el uso en un programa, puede utilizarlos en otros programas, a menudo con pocas o ninguna modificacin. Esto ayuda a evitar la duplicacin del cdigo.

2.5 Manejo Estructurado de Excepciones

El control estructurado de excepciones es una estructura de control que contiene excepciones, bloques aislados de cdigo y filtros para crear un mecanismo de control de excepciones. Con el control estructurado de excepciones, el cdigo puede diferenciar entre los distintos tipos de errores y reaccionar segn corresponda. Visual Basic admite el control (de errores) de excepciones tanto estructurado como no estructurado. Al colocar cdigo concreto del control de excepciones en la aplicacin, podr controlar la mayora de los errores con los que se pueden encontrar los usuarios. Utilice el control de excepciones estructurado y no estructurado para evitar que haya errores que interfieran con la aplicacin. Este ejemplo muestra cmo se utiliza un bloque Try y Catch para detectar excepciones. Ejemplo Este ejemplo muestra cmo se utiliza un bloque TryCatch para detectar una excepcin OverflowException. Este ejemplo de cdigo tambin est disponible en el fragmento de cdigo de IntelliSense. En el selector de fragmentos de cdigo, se encuentra en Lenguaje Visual Basic.

Dim Top As Double = 5 Dim Bottom As Double = 0 Dim Result As Integer Try Result = CType(Top / Bottom, Integer) Catch Exc As System.OverflowException MsgBox("Attempt to divide by zero resulted in overflow") End Try

Ejemplo

Try ' Add code for your I/O task here. Catch dirNotFound As System.IO.DirectoryNotFoundException Throw dirNotFound Catch fileNotFound As System.IO.FileNotFoundException Throw fileNotFound Catch pathTooLong As System.IO.PathTooLongException Throw pathTooLong Catch ioEx As System.IO.IOException Throw ioEx Catch security As System.Security.SecurityException Throw security Catch ex As Exception Throw ex Finally ' Dispose of any resources you used or opened in the Try block. End Try

Agregue el cdigo que desee ejecutar al bloque Try.

Como Producir una Excepcin:


En este ejemplo se produce una excepcin ApplicationException. Ejemplo

Throw New ApplicationException ' //Code to react to possible causes of the exception.

Cmo: Implementar bloques Try...Catch de E/S


Ejemplo

Este ejemplo va de lo ms concreto a lo menos concreto; las excepciones se prueban de una en una. Este ejemplo de cdigo tambin est disponible en el fragmento de cdigo de IntelliSense. En el selector de fragmentos de cdigo, se encuentra en Sistema de archivos - Procesando unidades, carpetas y archivos.

Try ' Add code for your I/O task here. Catch dirNotFound As System.IO.DirectoryNotFoundException ' Code to handle DirectoryNotFoundException. Catch fileNotFound As System.IO.FileNotFoundException ' Code to handle FileNotFoundException. Catch pathTooLong As System.IO.PathTooLongException ' Code to handle PathTooLongException. Catch ioEx As System.IO.IOException ' Code to handle IOException. Catch security As System.Security.SecurityException ' Code to handle SecurityException. Catch ex As Exception ' Rethrow exception if anything else has occurred. Throw ex Finally ' Dispose of any resources you used or opened in the Try block. End Try

Cmo: Liberar recursos con un bloque Try...Finally

Una instruccin Finally se puede utilizar dentro de un bloque Try para garantizar que los recursos asignados estn limpios. El cdigo en un bloque Finally se ejecuta despus del cdigo del control de excepciones, pero antes de que el control vuelva al procedimiento de llamada. El cdigo de un bloque Finally se ejecuta incluso si el cdigo produce una excepcin e incluso si agrega una instruccin explcita Exit Function (o Exit Sub) dentro de un bloque Catch. Si no necesita detectar excepciones especficas, la instruccin Using se comporta como un bloque TryFinally y garantiza la disposicin de los recursos, independientemente de cmo salga del bloque. Esto es verdad incluso en el caso de una excepcin no controlada. Para limpiar los recursos con una instruccin Finally

Coloque el cdigo que le gustara ejecutar sin tener en cuenta las excepciones dentro del bloque Finally. El cdigo siguiente crea StreamReader y lo utiliza para leer un archivo.
VB

Dim reader As New System.IO.StreamReader("C:\testfile") Try reader.ReadToEnd() Catch ex As System.IO.IOException MsgBox("Could not read file") Finally 'This command is executed whether or not the file can be read reader.Close() End Try

Cmo: Mostrar un mensaje de excepcin


El objeto de excepcin incluye varias propiedades que ayudan a identificar la ubicacin del cdigo, el tipo, la direccin URL de Helpfile y la razn de la excepcin. Una de stas, la propiedad Message, describe la excepcin actual.

Try Throw New System.Net.WebException Catch ex As System.Net.WebException MsgBox("An exception occurred:" & vbCrLf & ex.Message) End Try

Puede crear clases de excepcin propias de la aplicacin heredndolas de la clase Exception. Siga los procedimientos de codificacin correctos terminando el

nombre de clase de su excepcin con comoOutOfMoneyException o TooMuchRainException.

la

palabra Exception,

El ejemplo de cdigo siguiente proporciona una implementacin bsica de una clase de excepcin.

Ejemplo

Public Class YourProblemException Inherits Exception Public Sub New() ' Add other code for custom properties here. End Sub Public Sub New(ByVal message As String) MyBase.New(message) ' Add other code for custom properties here. End Sub Public Sub New(ByVal message As String, ByVal inner As Exception) MyBase.New(message, inner) ' Add other code for custom properties here. End Sub Public Sub New( _ ByVal info As System.Runtime.Serialization.SerializationInfo, _ ByVal context As System.Runtime.Serialization.StreamingContext) MyBase.New(info, context) ' Insert code here for custom properties here. End Sub End Class

Cmo: Comprobar la excepcin interna de una excepcin

En los casos en los que una excepcin se produce como un resultado directo de una excepcin anterior, la propiedad InnerException describe el error original. Esta informacin puede permitirle controlar el error de un modo ms eficaz. Si no hay ningn error original, el valor de InnerException ser una referencia nula o Nothing en Visual Basic. Esta propiedad es de slo lectura.

Para comprobar una propiedad InnerException


Compruebe la propiedad InnerException de la excepcin para determinar la causa del error original.

Try My.Computer.FileSystem.CopyFile("file1", "file2") Catch ex As System.IO.IOException MsgBox(ex.InnerException) End Try

Bibliografa

http://msdn.microsoft.com/es-es/library/ffsdktda(v=vs.80).aspx http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico3.htm http://www.monografias.com/trabajos33/visual-basic/visual-basic2.shtml http://www.cs.us.es/cursos/ai-2005/VB/VB.pdf