Sie sind auf Seite 1von 31

CHAPTER 1 Clases

TEMAS 1.1 Clases y Objetos 1.2 Creacin de clases personalizadas Tutorial 1.1: Crear una clase Estudiante Tutorial 1-2: Adicin de un constructor con parmetros para la clase Student 1.3 Los tipos enumerados Tutorial 1-3: tipo enumerado cuenta 1.4 Enfoque en el Diseo del Programa y resolucin de problemas: Banco Teller aplicacin Tutorial 1.4: Aumento de la aplicacin de cajero de banco 1.5 Manual de Pruebas de Software Tutorial 1-5: manual de pruebas entero entrada Este captulo comienza con los conceptos bsicos de clases y objetos. A continuacin, se demuestra cmo definir clases y tipos enumerados, que muestra cmo se utilizan en las aplicaciones. Construimos una aplicacin de dos niveles Cajero de banco que utiliza las clases para simular el funcionamiento bsico de un cajero software. El concepto de diseo de aplicaciones multi-tier seguir siendo un tema central en todo el libro. Por ltimo, presentamos las pruebas de software manual como una herramienta importante para la validacin de la salida del programa.

Clases y Objetos
CONCEPTO: Las clases son los elementos bsicos de la programacin orientada a objetos, que a su vez permite a los programadores crear aplicaciones ricas y robustas. Programacin orientada a objetos (POO) es una forma de disear y codificar aplicaciones que se centra en los objetos y entidades en aplicaciones del mundo real. En este captulo, se presentan los objetos desde el punto de vista del programador. Los conceptos ms abstractos de programa orientado a objetos y cmo se relacionan con el mundo real de las aplicaciones no se enfatiza aqu. Un objeto es un contenedor de miembros, tales como propiedades, campos, mtodos y eventos. Por lo general representa una entidad en un problema que la aplicacin est destinada a resolver. Si se crea una aplicacin concesionario de automviles, por ejemplo, las entidades pueden tener nombres como vehculo, el inventario del cliente, vendedor, gerente, y el vehculo. Si se crea una interfaz grfica de usuario, los objetos pueden ser botn, cuadro de texto, cuadro de lista, etiquetas y botones de opcin. Un objeto tiene atributos que pueden ser consideradas como caractersticas comunes que se aplican a todos los objetos del mismo tipo. Por ejemplo, un objeto vehculo puede tener atributos como la marca, el modelo y el color. Un objeto tambin tiene comportamientos, que representan las acciones que se pueden llevar a cabo en el objeto. Un objeto vehculo podra tener comportamientos tales como inicio, parada y vuelta. Un objeto puede ser capaz de elevareventos, que representan respuestas del objeto a las acciones exteriores. Un objeto Button en. NET, por ejemplo, plantea un click evento cuando el usuario hace clic en el botn. Si ya ha programado en Visual Basic, se han utilizado objetos muchas veces. De hecho, botones, casillas de verificacin, cuadros de lista y otros controles son objetos. Pero lo que no puede haber sabido era que todos estos objetos fueron definidos originalmente usando las clases.

Clases Una clase define las propiedades y mtodos que se pueden aplicar a sus objetos. Una clase se define utilizando la palabra clave Class. Por ejemplo, todos los formularios que se agrega a una aplicacin est definido por una clase, tal como la siguiente: Public Class Form1 End Class Cada control en la ventana de Visual Studio Toolbox fue definida por una clase. La clase Button, por ejemplo, contiene las definiciones de las propiedades, mtodos y eventos que la hacen diferente de otras clases. Un control TextBox tiene propiedades denominadas nombre, texto, Visible, y ForeColor. Todos los objetos TextBox tienen estas propiedades. El Microsoft. NET Framework contiene una gran biblioteca de clases que permiten escribir aplicaciones para la computacin de escritorio, aplicaciones mviles y la Web. Las clases se agrupan por similitud en espacios de nombres para que sea ms fcil encontrarlas. Un espacio de nombres es un contenedor lgico que lleva a cabo clases de tipos similares. Por ejemplo, el System.Collections espacio de nombres contiene clases relacionadas con las colecciones de construccin (arrays, listas, diccionarios, juegos). El System.Windows.Forms espacio de nombres contiene clases relacionadas con la creacin de aplicaciones de escritorio para Windows.

Creacin de objetos
Si una clase se ha definido, puede crear uno o ms objetos del tipo de clase. A veces nos llaman instancias de la clase, o instancias de clases. La siguiente declaracin hace esto:

Dim freshman As New Student


El operador New dice VB para crear un objeto en la memoria, y es necesario cuando se crea un objeto (objetos String son la excepcin a esta regla). O bien, puede separar esto en dos declaraciones. Por ejemplo, es posible que desee declarar la variable a nivel de clase en un formulario:

Private freshman As Student


Esta variable no hace referencia a ningn objeto en este punto-que slo tiene un tipo de datos. Entonces, en algn otro momento de la ejecucin del programa, se puede crear una instancia de la clase y la asigna a la variable:

Private freshman As Student


El operador = asigna el nuevo objeto a la variable. Decimos que la variable contiene una referencia al objeto.

Los controles de Visual Studio


Visual Studio crea instancias de los controles cuando los arrastra desde el Cuadro de herramientas a un formulario. Por ejemplo, el siguiente cdigo se escribe en el archivo de diseo de un formulario cuando un botn se cre y se establecieron ciertas propiedades en la ventana del diseador:
Me.btnOk = New Button () Me.btnOk.Location = Nuevo System.Drawing.Point (43, 48) Me.btnOk.Name = "btnOk" Me.btnOk.Size = Nuevo System.Drawing.Size(75,23) Me.btnOk.Text='OK'

Observe cmo la primera lnea utiliza el nuevo operador para crear una instancia de la clase Button. A continuacin, varios valores de propiedad se asignan al botn (Ubicacin, Nombre, Tamao y Texto).

La palabra clave Nothing


La palabra clave Nothing indica un valor nulo, lo que resulta cuando una variable de tipo de referencia no se ha inicializado. No se puede llamar a un mtodo o una referencia a una propiedad de un objeto que es igual . Nada Las siguientes afirmaciones, por ejemplo, podra causar un error en tiempo de ejecucin: Dim freshman As Student freshman.PrintCourses() Si el cdigo tiene que saber si una variable se ha inicializado, se puede comparar la variable con la palabra clave Nada. If freshman Is Nothing Then ' Debe Inicializar la variable freshman = New Student End If

Tipos de valores y tipos de referencia


Hay dos categoras generales de tipos de Visual Basic de datos: tipos de valor y tipos de referencia. Una variable declarada como un tipo de valor contiene sus propios datos en una ubicacin de memoria. Los tipos de valor incluye todos los tipos de nmeros, tales como enteros y los decimales, as como booleanos. Estos tipos de uso de un lugar de almacenamiento de tamao estndar. Una variable declarada como tipo de referencia no poseen directamente sus datos. En cambio, apunta a (referencias) un objeto en otro lugar en la memoria. Las clases son tipos de referencia, como son las matrices. Una variable de referencia es una variable declarada con un tipo de referencia. Cuando se crea un objeto invocando el nuevo operador, el. NET reserva espacio en memoria para el objeto. La direccin del objeto se almacena en una variable de referencia. Hacer esto requiere ms tiempo de procesamiento que los tipos de valor, pero lo permite. NET para recuperar el almacenamiento utilizado por el objeto cuando ya no se necesita el programa.

Tipos de valores
Los tipos de valor no requieren inicializacin. Tan pronto como ellos declaran, tienen almacenamiento inmediato. Las variables de tipo Integer, Dobles, Boolean, y otros tipos estndar son tipos de valor. Son fciles de usar, consumir poca memoria, y son los ms sencillos de comprender cuando se utiliza el operador de asignacin (=). Cuando se asigna un valor a otro tipo con el operador de asignacin (=), se hace una copia de los datos de la variable en el lado derecho. Los datos se copian en la variable en el lado izquierdo. En el siguiente ejemplo, mcount se copia a temp: Dim mCount As Integer = 25 Dim temp As Integer = mCount Si el nuevo valor es asignado despus de temp, mcount no se ve afectada: temp = 40 'mcount todava es igual a 25 Sin embargo, no todas las variables funcionan de esta manera. Cuando una variable de objeto se le asigna a otro objeto, que es un poco ms complicado.

Tipos de referencia
Cada vez que se crea una instancia de una clase y la asigna a una variable, la variable es un tipo de referencia. Por ejemplo, el cdigo siguiente crea una Persona objeto, le asigna su referencia a P, y le asigna un valor que su Nombre de propiedad:

Dim P As New Person P.Name = ''Fred Smith'' La Figura 1-1 muestra la relacin entre P y los datos que hace referencia. Los datos contenidos en la persona objeto se encuentra en un rea especial de memoria llamada el montn administrado. P contiene una referencia a los datos, no los propios datos. Si en algn momento en el futuro, la persona objeto ya no se necesita, se puede asignar un valor de nada a P: P = Nothing

Figura 1-1 enlaces un tipo de referencia variable a un objeto en la memoria

Suponiendo que no hay otras referencias a la misma persona objeto existido, una utilidad especial en tiempo de ejecucin. NET llamado el recolector de basura eventualmente eliminar el objeto de la memoria. Adems de los objetos, las matrices son tambin los tipos de referencia. Vamos a ver lo que sucede cuando los objetos de referencia se asignan entre s.

Strings
Los objetos String son tipos de referencia, pero son un caso especial debido a que sus declaraciones no requieren que el operador New. Los siguientes son ejemplos de declaraciones de objetos String: Dim strName As String Dim strCity As String = ''Miami''

Asignacin de Objetos
El operador de asignacin (=) asigna una expresin en el lado derecho de una variable en su lado izquierdo. Es comn utilizar el operador de asignacin para asignar un objeto a otro. Cuando se asignan nmeros enteros, por ejemplo, el valor de la expresin en el lado derecho se copia en la variable de la izquierda: Dim Y As Integer = 25 Dim X As Integer X=Y Despus de ejecutar las lneas anteriores, X es igual a 25. Pero y si las variables X e Y son los objetos (tipos de referencia)? Dim Y As New Account Dim X As Account X=Y En este ejemplo, el contenido de Si no se copian en X. En su lugar, la referencia contenida en Y se copia en X. Esencialmente, las variables X e Y ahora referencia al mismo objeto

Ejemplo de matriz
El siguiente cdigo crea una matriz de enteros llamados tests, llena el array, y asigna la matriz a la variable llamada puntuaciones: Dim scores() As Integer Dim tests() As Integer = {80, 95, 88, 76, 54} scores = tests Despus se ejecuta este cdigo, el mismo array est referenciado por las puntuaciones y las pruebas, tal como se muestra en la Figura 1-2. El cdigo siguiente se puede utilizar para demostrar que las dos matrices compartir la misma memoria. Al asignar un nuevo valor a la puntuacin (2), automticamente asignar el mismo valor a los ensayos (2): scores(2) = 11111 MessageBox.Show(tests(2).ToString()) ' displays ''11111'' Figura 1-2 Una matriz referenciado por las variables de

El cuadro de mensaje muestra que las pruebas de (2) es igual a 11111, al igual que las puntuaciones (2). Este tipo de referencia dual puede llevar a un tipo comn de error de programacin conocido como efecto secundario. Al igual que un medicamento que causa efectos no deseados a una persona, un software de cambios de efectos secundarios variables de manera que se puede engaar a un programador. Cdigo contiene los efectos secundarios es muy difcil de depurar.

Using a Loop to Copy an Array (El uso de un bucle para copiar una matriz)
Si desea copiar el contenido de una matriz a otra, puede utilizar un bucle para copiar los elementos individuales. En primer lugar, se reserva espacio en la matriz de resultados. Despus de copiar los datos: Dim scores(tests.Length - 1) As Integer For i As Integer = 0 To tests.Length - 1 scores(i) = tests(i) Next La Figura 1-3 muestra el resultado despus de copiar la matriz. El cdigo siguiente muestra que las dos matrices no comparten la misma memoria. Cuando un nuevo valor se asigna a las puntuaciones (2), el valor de las pruebas (2) se ha modificado: scores(2) = 11111 MessageBox.Show(tests(2).ToString()) ' displays ''88''

Figura 1-3 Resultados despus de copiar una matriz

Usando Object.clone copiar datos


No todas las variables de referencia son matrices, por lo que necesitamos una forma ms general para copiar los datos del tipo de referencia a otro. Aqu es donde el mtodo es til Object.clone. El Clon mtodo copia los datos de la variable de referencia a otro. Utilizando las mismas pruebas y matrices puntajes del ejemplo anterior, la siguiente instruccin copia el array: scores = CType(tests.Clone(), Integer()) Clone devuelve un Object, por lo que el valor de retorno se debe convertir en una matriz de enteros cuando Option Strict est en vigor. La copia devuelta por clon se denomina una copia superficial , ya que no se refiere a la posibilidad de que los elementos de la matriz pueden ser objetos que contienen otros tipos de referencia. Aqu hay otro ejemplo, el uso de dos objetos Person: Dim P As New Person P.Name = ''George Smith'' Dim S As Person S = CType(P.Clone(), Person)

Comparacin de Objetos
Todos los estndares. NET se puede comparar a la igualdad mediante una llamada al Igual mtodo o utilizando el operador =. Este es el caso para las cadenas: Dim A As String = ''abcde'' Dim B As String = ''abcde'' If A = B Then ... ' result: True If A.Equals(B) Then ... ' result: True Otro tipo de comparacin es el CompareTo mtodo, que compara dos valores de X e Y: Si X <Y, CompareTo devuelve un valor negativo Si X = Y, CompareTo devuelve cero Si X> Y, CompareTo devuelve un valor distinto de cero positivo CompareTo es muy til, ya que es llamado automticamente cuando se ordena una matriz. Usted puede llamar a ti mismo, como se muestra en los siguientes ejemplos.

Ejemplos CompareTo
En el siguiente ejemplo, el resultado se asigna un valor negativo: Dim A As String = ''abcde'' Dim B As String = ''abd'' Dim result As Integer = A.CompareTo(B) En el siguiente ejemplo, el resultado se asigna un valor positivo: Dim A As String = ''abf'' Dim B As String = ''abd'' Dim result As Integer = A.CompareTo(B) En el siguiente ejemplo, el resultado se asigna cero: Dim A As String = ''abd'' Dim B As String = ''abd'' Dim result As Integer = A.CompareTo(B)

Al comparar los tipos propia clase


Sus propias clases, por defecto, no utilizar Equals y CompareTo eficazmente. Por ejemplo, la siguiente comparacin de dos objetos Student no es til. La llamada a Equals devolver Falso, a pesar de que los estudiantes tienen aparentemente el mismo nmero de ID: Dim s1 As New Student(1001) Dim s2 As New Student(1001) If s1.Equals(s2) Then ... Similarly, calling s1.CompareTo(s2) below is not meaningful: Dim result As Integer = s1.CompareTo(s2) Esto significa que usted no puede efectivamente ordenar una matriz de Estudiantes, al menos no todava. En el captulo 3, usted aprender cmo implementar los mtodos Equals y CompareTo en sus propias clases.

Checkpoint
1. 2. 3. 4.
Qu es una clase, de acuerdo con la definicin en este captulo? Cul es el trmino para un objeto que se declara utilizando un tipo de clase? A ___ (n) es un procedimiento o funcin que pertenece a una clase. A diferencia de los tipos de referencia, una variable declarada con un _type (n) contiene sus propios datos y tiene almacenamiento inmediato tan pronto como se declara. 5. Asignacin de un tipo de referencia a otro utilizando el operador = conduce a qu tipo de error potencial?

Creacin de clases personalizadas


En las discusiones futuras, se har referencia a una clase definida por el usuario (o una clase personalizada) como una clase que permite disear y construir desde cero. En contraste, el Marco. NET ya contiene su propio conjunto de clases. Se crea una clase en Visual Basic mediante la codificacin de una definicin de clase. Nosotros utilizaremos el siguiente formato general al escribir las definiciones de clase: Public Class ClassName miembros de la clase aqu End Class

ClassName es

el nombre de la clase. El pblico palabra clave se llama un especificador de acceso. especificador El pblico dice que la clase VB ser visible desde todas las partes de la aplicacin. Por visible, nos referimos a que ser posible crear objetos que utilizan este nombre de clase. Siga estos pasos para agregar una definicin de clase a un proyecto: 1. Seleccione Proyecto en la barra de men, a continuacin, seleccione Agregar clase. El artculo Agregar nuevo cuadro de dilogo, que se muestra en la Figura 1-4, debera aparecer. Asegrese de que la clase est seleccionada en las plantillas panel. Ntese que en la figura, el nombre Class1.vb aparece en el cuadro de texto Nombre. En este ejemplo, Class1.vb es el nombre predeterminado para el archivo

que contiene el cdigo para la clase, y la clase 1 es el nombre predeterminado para la clase. Figura 1-4 Adicin de una clase a un proyecto

SUGERENCIA Al agregar una clase a un proyecto, el nombre de clase predeterminado variar en funcin del nmero de clases ya en el proyecto. 2. Cambie el nombre predeterminado que se muestra en el Nombre de cuadro de texto para el nombre que desea dar al archivo de clase. Por ejemplo, si usted desea nombrar a la nueva clase Estudiante, ingrese Student.vb en el cuadro de texto Nombre. 3. Haga clic en el Agregar botn. Una nueva definicin de clase vaca se agrega al proyecto. La definicin de clase vaca se mostrar en la ventana de cdigo, y una entrada para el nuevo archivo de clase aparecer en la ventana del Explorador de soluciones.

Agregar una clase en el Explorador de soluciones


Tambin puede agregar una clase a un proyecto dentro de la ventana Explorador de soluciones. Para ello, haga clic en el nombre del proyecto, seleccioneAgregar, y seleccione Clase. Esto se muestra en la Figura 1-5.

Las variables de nivel de clase


Una variable de nivel de clase es una variable que se declara dentro de una clase, pero fuera de cualquier mtodo en la clase. Esto hace que sea visible para todos los mtodos de la clase. Una variable local, por el contrario, se declara dentro de un mtodo y slo es visible dentro del mtodo. Se declara una variable de nivel de clase utilizando el siguiente formato general: AccessSpecifier name As DataType

Figura 1-5 Adicin de una clase a un proyecto en la ventana Explorador de soluciones

AccessSpecifier determina la accesibilidad de la variable. Los campos declarado con el especificador de acceso privado se puede acceder slo por las declaraciones dentro de los mtodos que pertenecen a la misma clase. Esta es la forma normal de declarar una variable. Name es el nombre de la variable, y DataType es el tipo de la variable de datos. Por ejemplo, el cdigo siguiente declara una clase llamada Student. La clase contiene la mIdNumber variables, mLastName y mTestAverage:
Public Class Student Private mIdNumber As String Private mLastName As String Private mTestAverage As Double End Class

Una definicin de clase no es, por s mismo, crear una instancia de la clase. Se establece un plan para la organizacin de la clase, lo que hace posible que usted pueda escribir otro cdigo que crea un objeto de este tipo.

Ocultar informacin
En programacin orientada a objetos, el principio de encapsulacin dice que usted debe agrupar atributos y comportamientos dentro de una clase. Piense en una clase de contenedor que encapsula todo el interior para facilitar el transporte y su uso. El principio de ocultacin de informacin, que est estrechamente relacionada con la encapsulacin, dice que los miembros de la clase que algunos deben ser visibles slo a los mtodos dentro de la clase. Por lo general, esto se aplica a variables, que se etiquetan como Privado. Muchos ingenieros de software consideran encapsulacin y ocultacin de informacin a ser el mismo. Ocultos (privado) miembros slo se puede acceder por otros mtodos de la misma clase. Esta es una buena idea, ya que conduce a los programas ms confiables que son ms fciles de depurar. Una variable de nivel de clase podra ser declarada pblica, por lo que cualquier parte del cdigo en una aplicacin puede acceder a ella directamente.Pero al hacerlo se

violara el principio ocultamiento de informacin. En su lugar, utilice los mtodos pblicos y propiedades para definir una interfaz o una vista pblica de una clase. Otra informacin, como variables, permanecen ocultos mediante la palabra clave Private.

Mtodos
Un mtodo es una accin que implementa un comportamiento de una clase. Se llama a un mtodo con el prefijo con el nombre de una instancia de clase. Por ejemplo, una clase denominada cuenta podra tener un mtodo denominado ReadFromFile. En primer lugar, tendramos que crear una instancia de la clase de cuenta:
Dim savings As New Account Then we would be able to call the ReadFromFile method: savings.ReadFromFile(''accounts.dat'') This is how the method could be declared in the Account class: Public Class Account . . Public Sub ReadFromFile(ByVal fileName As String) '(code that reads the file here) End Sub End Class

Shared Methods (Mtodos compartidos)


Los mtodos especiales, llamados mtodos compartidos, puede ser llamado usando el nombre de la clase. Un ejemplo es el mtodo que Array.Sort NET proporciona para ordenar una matriz.:
Dim scores() As Integer = {62, 45, 89} Array.Sort(scores) ' now: 45, 62, 89

Los controladores de eventos son tambin mtodos, pero tienen un rol especial para responder a los mensajes de evento pasados a la aplicacin desde el sistema operativo. Cada mtodo de una clase puede acceder a las variables de nivel de clase de la clase.

ToString Mtodo
Todas las clases de. NET apoyar el mtodo ToString, que devuelve una representacin de cadena de los datos dentro de la clase de objeto actual. ToString se define en la clase de objetos, y todas las otras clases heredan ciertos mtodos bsicos de la clase Object. La firma del mtodo ToString para es:
Public Overridable Function ToString() As String

Aunque nosotros le proporcionaremos una explicacin completa del concepto de herencia en el captulo 6, se puede decir aqu que la herencia es un concepto bsico de la programacin orientada a objetos. Esto significa que una clase puede heredar atributos y comportamientos de otra clase. En los seres humanos, por ejemplo, descendencia hereda las caractersticas de sus padres. La palabra clave Overridable nos permite saber que podemos sustituir o reemplazar el comportamiento de ToString mediante la creacin de una versin de este mtodo en nuestra clase. As es como lo haramos en la clase del estudiante:
Public Overrides Function ToString() As String Return mIdNumber & '', '' & mLastName _ & '', Test average = '' & mTestAverage End Function

Observe que el Overrides palabra clave debe ser utilizada para dejar VB saber que queremos reemplazar el mtodo ToString que ya existe en la clase Object.

Propiedades
En Visual Basic, una propiedad es un tipo especial de mtodo que utiliza el mismo nombre de miembro para obtener y establecer un valor. Considerando que los mtodos son la aplicacin de los comportamientos de clase, las propiedades son implementaciones de atributos de clase. Objetos Button, por ejemplo, tienen una serie de propiedades que se muestran en la ventana Propiedades de Visual Studio. Ha utilizado las propiedades desde que comenz la programacin en Visual Basic. Ahora, usted aprender a agregar propiedades a sus propias clases. Este es el formato estndar para una definicin de la propiedad:
Public Property PropertyName() As DataType Get '(code that returns data) End Get Set(value As DataType) '(code that assigns value to a class variable) End Set End Property

PropertyName es el nombre del procedimiento de propiedad y por lo tanto el nombre de la propiedad que el procedimiento se implementa. Los parntesis que siguen PropertyName son opcionales. DataType indica el tipo de datos, tales como entero o cadena. Observe que el procedimiento tiene dos secciones: una seccin y una seccin Get Set. La seccin Get contiene el cdigo que se ejecuta cuando el valor de la propiedad se recupera, y la seccin Establecer contiene el cdigo que se ejecuta cuando un valor se almacena en la propiedad. Las propiedades son casi siempre declarado con el especificador de acceso pblico para que puedan acceder desde fuera de su mdulo de clase que lo contiene. El cdigo siguiente define un campo privado y la propiedad pblica correspondiente en la clase del estudiante:
Class Student Private mLastName As String Public Property LastName As String Get Return mLastName End Get Set(ByVal value As String) mLastName = value End Set End Property End Class

Auto-Implemented Properties
Una propiedad auto-aplicado es una propiedad que se define solamente por una sola lnea de cdigo. Usted no tiene que crear un campo de miembro privado para mantener los datos de propiedad. Existen dos formatos generales:
Public Property PropertyName As DataType Public Property PropertyName As DataType = InitialValue

Puedes seguir cada nombre de propiedad con parntesis opcionales:

Public Property PropertyName() As DataType Public Property PropertyName() As DataType = InitialValue

InitialValue es un valor opcional que se puede asignar a la propiedad cuando se crea. Cuando se declara una propiedad de auto-aplicado, Visual Studio crea automticamente un campo oculto privado llamado campo de respaldo que contiene el valor de la propiedad. El nombre del campo de respaldo es el nombre de la propiedad precedida por un carcter de subrayado. Por ejemplo, si se declara una propiedad de auto-aplicado llamado ID, su campo de respaldo se llama _ID. Los siguientes son ejemplos de propiedades de auto-implementadas que podran ser utilizados en la clase Student:
Public Property IdNumber As String Public Property LastName As String Public Property TestAverage As Double = 0.0

Despus de aprender sobre propiedades implementadas automticamente, por qu iba alguien a querer crear las definiciones de las propiedades ms? De hecho, las definiciones de propiedad ya permitir que usted incluya la comprobacin de rango y otras validaciones sobre los datos asignados a la propiedad. Una propiedad ReadOnly debe estar completamente codificada-no puede ser autoaplicado. Getting and Setting Property Values (Obtener y establecer valores de propiedad) Antes de acceder a una propiedad, usted debe declarar una instancia de la clase que contiene la propiedad. Podramos colocar la siguiente declaracin en cualquier parte del programa fuera de la clase del estudiante:
Dim freshman As New Student

La seccin Ajuste del procedimiento de propiedad se ejecuta cuando se asigna un valor a la propiedad. La declaracin siguiente se establece el valor de LastName: freshman.LastName = ''Smith'' Por lo tanto, la siguiente instruccin dentro del procedimiento de propiedad que ejecutar: mLastName = value Por el contrario, la seccin Get de un procedimiento de propiedad se ejecuta cuando un programa necesita tener una copia de la LastName. Supongamos que fuera de la clase Student, escribimos la siguiente declaracin, que copia el valor LastName estudiante a un TextBox: txtLastName.Text = freshman.LastName A continuacin, la siguiente declaracin dentro del procedimiento de propiedad que ejecutar:
Return mLastName

Input Validation in Properties (validacin de entrada en Propiedades)


Una propiedad puede ser muy til cuando se valide los valores asignados a la misma. En el siguiente ejemplo, que implementa la propiedad TestAverage, el valor asignado a la propiedad debe estar entre 0,0 y 100,0:
1: Public Property TestAverage As Double 2: Get

3: Return mTestAverage 4: End Get 5: Set(ByVal value As Double) 6: If value >= 0.0 And value <= 100.0 Then 7: mTestAverage = value 8: Else 9: MessageBox.Show(''Invalid test average.'', ''Error'') 10: End If 11: End Set 12: End Property

Line 6 comprueba el rango del valor de entrada que se asigne a la propiedad. Si la lnea 6 es igual a True, la lnea 7 se asigna el valor de entrada a mTestAverage, el sector privado a nivel de clase variable. Si el valor de entrada es demasiado grande o demasiado pequeo, la variable mTestAverage se mantiene sin cambios, y la lnea 9 muestra un mensaje de error.

Inicializadores de objeto
Visual Basic proporciona una herramienta sencilla para declarar un objeto y asignar valores a sus propiedades. Se llama un inicializador de objeto, y se utiliza en un par de formatos estndar:
Dim VarName As New ClassName With { .Property = value [,.Property = value]...} VarName = New ClassName With { .Property = value [,.Property = value]...}

VarName es el nombre de la variable. Dim puede ser reemplazada por los calificadores pblica, privada, o similar. ClassName es el nombre de la clase. Property es el nombre de una propiedad. No existe un formato rgido en cuanto a los saltos de lnea o el orden de propiedad. La instruccin siguiente declara e inicializa un nuevo objeto Student utilizando valores literales:
Dim aStudent As New Student With { .IdNumber = ''1234'', .LastName = ''Smith'', .TestAverage = 85.4 }

El siguiente se asigna un nuevo objeto a una variable existente:


aStudent = New Student With { .IdNumber = ''1234'', .LastName = ''Smith'', .TestAverage = 85.4 }

La siguiente instruccin crea e inicializa un objeto Student utilizando los valores de control:
Dim aStudent As New Student With { .IdNumber = txtIdNumber.Text, .LastName = txtLastName.Text, .TestAverage = CDbl(txtAvg.Text)}

Asignacin de variables de objeto


En nuestro libro Comenzando en Visual Basic 2010, hablamos de reglas bien definidas para la asignacin de valores de tipos de datos estndar entre s. Puede asignar una expresin a una variable Integer Double, por ejemplo, porque VB ampla

automticamente la expresin entera a tipo double. Existen normas similares para la asignacin de objetos de la clase a la otra, pero que son definitivamente ms restrictivo. Puede asignar una variable de objeto directamente a otro segn las circunstancias especficas siguientes: 1. Las dos variables tienen el mismo tipo de clase. Un objeto Student, por ejemplo, se puede asignar a otra variable del Estudiante:
Dim stu As New Student Dim Y As Student = stu

2. Las dos variables son de tipos diferentes, pero la variable del lado izquierdo es tipo Object. Esto se permite porque el objeto es un tipo muy general que acepta cualquier tipo de asignacin:
Dim stu As New Student Dim obj As Object = stu

En casi todos los dems casos, se debe realizar una conversin de un tipo a otro. Es importante darse cuenta de que la expresin en el lado derecho del operador = no podra ser una variable, que podra ser un nombre de propiedad o llamada al mtodo. Por ejemplo, un mtodo denominado Get-Student devuelve un objeto Student, que no se pueden asignar directamente a una variable String:
Dim temp As String = GetStudent(''12345'') 'error

Por otro lado, si llamamos al mtodo del objeto de Student ToString, se puede asignar a una variable de cadena:
Dim temp As String = GetStudent(''12345'').ToString() ' ok

La conversin de cualquier objeto en una cadena es fcil porque todas las clases contienen implcitamente un mtodo ToString. Pero si usted desea convertir a otro tipo, es probable que tenga que llamar a la funcin CType.

Uso de la funcin CType


La funcin CType arroja (conversos) una expresin a un tipo diferente. Este es el formato general de CType:
CType(ObjectVal, TypeName) As TypeName

ObjectVal es una variable o expresin que se va a convertir. TypeName es el nombre del tipo que desea convertir ObjectVal en. Por ejemplo, la propiedad del control ListBox SelectedItem devuelve un objeto. Si desea asignar este objeto a una variable del estudiante, debe llamar a la funcin CType:
Dim selStudent As Student = CType(lstStudents.SelectedItem, Student)

A continuacin, en cambio, no se compilar (suponiendo que Option Strict est activada):


Dim selStudent As Student = lstStudents.SelectedItem

No todas las expresiones se pueden convertir. Supongamos que tuviramos que intenta asignar un objeto a una variable Estudiante CuentaBancaria.Ninguna conversin estndar existe para eso, as que VB se produce una CastException no vlido.
Dim stu As New Student Dim bank As BankAccount = CType(stu, Student) 'error

Objetos Student y objetos CuentaBancaria no tienen nada en comn, por lo que no debera haber sido asignndoles el uno al otro de todos modos. A veces este tipo de

error se puede solucionar fcilmente llamando a una propiedad o mtodo de la clase que devuelve el tipo correcto de objeto. Tal vez la clase Student contiene una propiedad que devuelve la cuenta del estudiante bancaria:
Dim bank As BankAccount = stu.SavingsAccount

No hay ms que aprender acerca de las asignaciones de objetos y conversiones que hemos introducido en esta breve discusin. Una vez que hemos introducido el concepto de herencia en el captulo 6, vamos a revisar este tema.

Tres niveles de aplicacin del modelo


La mayora de las aplicaciones de negocio hoy en da siguen un diseo bsico llamado el modelo de aplicacin de tres niveles. Cada nivel contiene clases que llamen a mtodos en el nivel inferior, como se muestra en la Figura 1-6.

Figura 1-6 tres niveles de aplicacin del modelo

El nivel de presentacin, tambin conocida como la capa de servicios de usuario, consta de todos los objetos que interactan con el usuario. Visual Basic utiliza una clase para definir una forma, as como los diversos controles en un formulario. Cuando se escribe cdigo dentro de la forma de aplicacin, el cdigo pertenece a la interfaz de usuario de nivel. Esto incluye, por ejemplo, todos los procedimientos de control de eventos, variables de nivel de clase, y subprocedimientos otros en la clase de formulario. El nivel medio, tambin conocida como la capa de lgica de negocio o capa de negocio de servicios, consta de clases que proporcionan informacin bsica a la aplicacin, tales como clculos esenciales y toma de decisiones. A menudo encarnan las reglas de negocio de una organizacin, que incluyen principios operativos que son comunes a varias aplicaciones. Estas clases no interactan con el usuario. En cambio, contienen mtodos y propiedades que son llamados por las clases en el nivel de presentacin. El acceso de nivel de datos, tambin conocida como la capa de servicios de datos, contiene clases que interactan directamente con un origen de datos. En captulos posteriores, vamos a crear clases para este nivel que leen y escriben a bases de datos.

En el Tutorial 1-1, se crear una aplicacin de dos niveles que utiliza un formulario de Windows para llamar a los mtodos y propiedades de una clase llamada Student. Contiene una capa de presentacin y un nivel intermedio.

Tutorial 1-1: Crear una clase Estudiante


En este tutorial, crear una aplicacin de dos niveles que utiliza una forma de pasar los insumos por parte del usuario a la clase estudent. Clase del formulario pertenece a la capa de presentacin y la clase estudiantil pertenece al nivel medio. Va a agregar controles a un formulario que permite al usuario ingresar una identificacin de estudiante, el apellido y el promedio de las pruebas. Cuando el usuario hace clic en un botn, el cdigo se asignan los valores de entrada a las propiedades de la clase Estudiante. Por ltimo, se vuelve a mostrar el objeto Student en una etiqueta. La Figura 1-7 muestra la forma cuando el usuario hace clic en el Guardar botn. La Figura 1-8 muestra el mismo formulario cuando el usuario hace clic en la vista botn.

Figura 1-7 Despus de hacer clic en el Guardar botn

Figura 1-8 Despus de hacer clic en el View botn

Pasos Tutorial
Paso 1: Crear una nueva aplicacin para Windows llamado Student Class Example.

Paso 2: A continuacin, agregue una clase denominada Student al proyecto. Haga clic derecho en el nombre del proyecto, seleccione Agregar, y seleccione Clase. En la ventana de dilogo, seleccione Cdigo, seleccione la clase, e introduzca el nombre de la clase como Student.vb. Los artculos estn marcados en la figura 1-9 con flechas.

Figura 1-9 Adicin de una clase Student para el proyecto

Paso 3: Abra la Student.vb archivo y reemplazar su contenido con la siguiente definicin de clase:
Public Class Student Public Property IdNumber As String Public Property LastName As String Private mTestAverage As Double Public Property TestAverage As Double Get Return mTestAverage End Get Set(ByVal value As Double) If value >= 0.0 And value <= 100.0 Then mTestAverage = value Else MessageBox.Show(''Invalid test average.'', ''Error'') End If End Set End Property Public Overrides Function ToString() As String Return IdNumber & '', '' & LastName & '', Test average = '' & TestAverage End Function End Class

La clase contiene implementadas auto-propiedades con nombre IDnumber y Apellidos. Dado que la propiedad TestAverage requiere la comprobacin de intervalos, se implementa con explcitas secciones Get y Set.

Paso 4: Abra el formulario de inicio en modo de diseo y agregue los controles mencionados se muestran en la Tabla 1-1. Adems, agregue las etiquetas indicadas anteriormente en la Figura 1-7.

A continuacin, escriba el cdigo en el formulario de inicio que copia las entradas del usuario a las propiedades de los Estudiantes. Paso 5: Declare una variable Estudiante en el nivel de clase:
Private objStudent As New Student

Paso 6: Crear el controlador Click siguiente para el Guardar botn. Puede omitir los parmetros del procedimiento btnSave_Click porque son opcionales:
Private Sub btnSave_Click() Handles btnSave.Click objStudent.IdNumber = txtIdNumber.Text objStudent.LastName = txtLastName.Text objStudent.TestAverage = CDbl(txtTestAverage.Text) lblStudent.Text = ''(student information saved)'' End Sub

Este cdigo copia los valores de los controles TextBox en las propiedades del objeto objStudent. La etiqueta adicional se agrega para proporcionar una sugerencia al usuario. TIP Una caracterstica en Visual Basic llamado delegados relajados le permite omitir los parmetros en controladores de eventos si los parmetros no estn siendo utilizados en el interior del cuerpo del controlador. Paso 7: Crear un controlador Click para Ver botn que Student.ToString para mostrar el objeto del Estudiante:
Private Sub btnView_Click() Handles btnView.Click lblStudent.Text = objStudent.ToString() End Sub

utiliza

el

mtodo

Paso 8: Guarde el proyecto y ejecutar la aplicacin con la siguiente prueba: Prueba de entrada Entrada Escriba el nmero ID como "001234" y el apellido de un estudiante, y haga clic en el Guardar botn. A continuacin, haga clic en la Vista de botones. Resultado esperado Usted debe ver el mismo nmero de identificacin y el nombre que ha introducido. El promedio de las pruebas se mostrar como valor 0.

Constructores
Un constructor es un mtodo que se ejecuta automticamente cuando una instancia de la clase se crea. En Visual Basic, un constructor siempre se llama Nuevo. Constructores suelen inicializar variables miembro de clase a los valores por defecto, pero tambin se puede utilizar para realizar cualquier inicializacin de la clase requerida. Si una clase est conectado a una conexin de red, por ejemplo, el constructor puede ser utilizada para abrir una conexin a un equipo remoto. Un constructor predeterminado es un constructor sin parmetros. Vamos a crear un sencillo para el estudiante de clase que asigna un valor por defecto para el mIdNumber miembro de datos:
Public Sub New() mIdNumber = ''999999'' End Sub

Con este constructor en su lugar, si un programa cliente crea un objeto nuevo estudiante, que sabemos a ciencia cierta cul es el valor del objeto mIdNumber va a contener.

Constructor con parmetros


Una clase puede contener ms de un constructor, lo que adems de un constructor por defecto, es posible que desee crear un constructor con parmetros(un constructor con parmetros). Aqu hay un constructor con parmetros que asigna valores a cada uno de los estudiantes de nivel de clase variables:
Public Sub New(ByVal pIdNumber As String, ByVal pLastName As String, ByVal pTestAverage As Double) mIdNumber = pIdNumber mLastName = pLastName mTestAverage = pTestAverage End Sub

Note la convencin de nombres arbitrarios utilizados aqu. El nombre de cada parmetro tiene una "p" como prefijo y cada variable de nivel de clase empieza con "m". Al codificar un constructor, no utilice el mismo nombre para los parmetros que se utilizan para las propiedades de la clase. Por ejemplo:
Public Sub New(ByVal IdNumber As String, ByVal LastName As String, ByVal TestAverage As Double) IdNumber = IdNumber LastName = LastName TestAverage = TestAverage End Sub

Los nombres de los parmetros de este ejemplo ocultar los nombres pblicos que coincidan con la propiedad. Siempre elegir nombres para sus parmetros de constructor que son diferentes de los nombres de las variables de nivel de clase y propiedades.

COMN ERROR: Invertir el orden de los constructores asignment


Los principiantes a menudo tienen problemas para escribir sentencias de asignacin en los constructores. Puedes ver los errores en el cdigo?

Public Sub New(ByVal pIdNumber As String, ByVal pLastName As String, ByVal pTestAverage As Double) pIdNumber = IdNumber pLastName = LastName pTestAverage = TestAverage End Sub

El cdigo se compila correctamente, pero los operandos de las instrucciones de asignacin se invierten. Copian los valores de las propiedades de los parmetros. El resultado es que el constructor no funciona correctamente: Los valores pasados al constructor no se asignan a las propiedades de la clase.

Cmo Visual Basic crea Constructores


Si la clase no contiene ningn constructor, Visual Basic crea un constructor por defecto vaco invisible para ti. Esto es por comodidad, por lo que puede declarar un objeto como este:
Dim sophomore As New Student

Pero si se agrega un constructor parametrizado para la clase, un constructor por defecto es no crea automticamente para usted. Supongamos que este era el nico que tenamos en la clase del estudiante:
Public Sub New(ByVal pIdNumber As String, ByVal pLastName As String, ByVal pTestAverage As Double) ' (lines omitted) End Sub

A continuacin, la siguiente declaracin no se compilar:


Dim objStudent As New Student

Es posible que tenga una buena razn para no permitir que un objeto que se construir a menos que se les asignan valores significativos. Decisiones como esta se basan en las necesidades de la aplicacin. Si la clase tiene un constructor con parmetros, y tambin desea crear objetos sin pasar ningn parmetro, debe aadir un constructor predeterminado.

Constructores con parmetros opcionales


Un parmetro opcional no requiere el mtodo de llamada para pasar un valor argumento correspondiente. A veces tendr que crear instancias de una clase utilizando diferentes cantidades de informacin. Puede declarar los parmetros opcionales en cualquier mtodo (incluyendo constructores) con elopcional de palabra clave, siempre y cuando se asigna cada valor por defecto. En el siguiente ejemplo, los parmetros pLastName y pTestAverage son opcionales:
Public Sub New(ByVal pIdNumber As String, Optional ByVal pLastName As String = '''', Optional ByVal pTestAverage As Double = 0.0) IdNumber = pIdNumber LastName = pLastName TestAverage = pTestAverage End Sub

Ahora, debido a que los parmetros segundo y tercero son opcionales, todos los siguientes son formas vlidas de declarar objetos Student:
Dim A As New Student(''200103'')

Dim B As New Student(''200103'', ''Ramirez'') Dim C As New Student(''200103'', ''Ramirez'', 86.4)

Hay dos reglas importantes a seguir. Una vez que un parmetro se etiqueta opcional, todos los parmetros posteriores en la lista de parmetros del mtodo tambin deben ser etiquetados de la misma manera. En segundo lugar, todos los parmetros opcionales deben tener valores predeterminados. Cuando la herramienta de editor de Visual Studio IntelliSense muestra un parmetro del mtodo, los parmetros opcionales aparecen entre corchetes. Aqu est un ejemplo:

Tutorial 1-2: Adicin de un constructor con parmetros para la clase Student


En este tutorial, agregar un constructor con tres parmetros a la clase estudiantil. La aplicacin le preguntar al usuario los valores de entrada, que luego se pasan al constructor del Estudiante. A continuacin, la aplicacin mostrar los valores almacenados en el objeto Student. Paso 1: En el Explorador de Windows, haga una copia de la carpeta que contiene la clase Student Ejemplo proyecto que escribiste para Tutorial 1-1. Abra el nuevo proyecto. Paso 2: Cambiar el ttulo en la barra de ttulo del formulario en clase con los estudiantes de Constructores. Paso 3: Agregue el siguiente constructor a la clase del estudiante:
Public Sub New(ByVal pIdNumber As String, Optional ByVal pLastName As String = '''', Optional ByVal pTestAverage As Double = 0.0) IdNumber = pIdNumber LastName = pLastName TestAverage = pTestAverage End Sub

Observe que los parmetros segundo y tercero son opcionales. Paso 4: Editar cdigo del formulario fuente. En primer lugar, cambiar la declaracin de objStudent a lo siguiente:
Private objStudent As Student

Esta declaracin se declara una variable Estudiantil, pero no crea un objeto estudiante. Paso 5: Modificar el controlador de eventos btnSave_Click para que contenga el siguiente cdigo:
1: Private Sub btnSave_Click() Handles btnSave.Click 2: Dim testAverage As Double 3: If Double.TryParse(txtAverage.Text, testAverage) Then 4: objStudent = New Student(txtIdNumber.Text, 5: txtLastName.Text, testAverage) 6: lblStudent.Text = ''(student information saved)'' 7: Else 8: lblStudent.Text = ''Test average is not a valid number''

9: End If 10: End Sub

Lnea 4 llama al constructor de Estudiantes, la asignacin de valores a las tres variables de clase. Si Double.TryParse no puede convertir el promedio de las pruebas, la lnea 8 muestra un mensaje de error en la etiqueta lblStudent. Paso 6: Guarde la aplicacin y probarla en dos ocasiones, de la siguiente manera: Entrada Ingrese 200032, Johnson, el 92,3 en los cuadros de texto y haga clic el Guardar botn. Ingrese 100011, Adams, XX en los cuadros de texto y haga clic el Guardar botn. Resultado esperado tres El resultado debera aparecer como en la en Figura 1-10. tres El resultado debera aparecer como en la en Figura 1-11.

Figura 1-10 Ejemplo de salida de Prueba 1

Figura 1-11 Ejemplo de salida de Prueba 2

ReadOnly Propiedades
Una propiedad ReadOnly permite que los mtodos fuera de la clase para obtener el valor actual de la propiedad, pero no para cambiarlo. El ReadOnlycalificador debe ser aadido a la declaracin jurada de patrimonio, y el Conjunto declaracin en la propiedad se omite. Por ejemplo:

Public ReadOnly Property Count As Integer Get Return mCount End Get End Property

Una propiedad ReadOnly puede evitar que un programa cliente que modifique la variable detrs de la propiedad. Adems, el valor devuelto por una propiedad puede ser calculado a partir de datos internos. Un buen ejemplo es la propiedad Count de la clase Collection, que devuelve un valor que indica cuntos elementos hay en la coleccin. Usted no puede cambiar directamente el valor. Usted debe agregar o quitar elementos de la coleccin antes de que el valor de recuento de los cambios. Aqu est un ejemplo:
Dim coll As New Collection coll.Add(''Joe'') coll.Add(''Sam'') MessageBox.Show(coll.Count) ' displays ''2'' coll.Count = 20 ' Error!

Ejemplo
Vamos a revisar la propiedad TestAverage en la clase Estudiante que hemos estado usando. En lugar de dejar que las personas que llaman establecer su valor, se puede calcular el valor como la suma de todas las pruebas dividido por el nmero de pruebas. Para ello, se introduce un nuevo nivel de clase variable:
Private mTestGrades As New Collection

A continuacin, cree un mtodo que permite a las personas que llaman agregar resultados de las pruebas a la coleccin:
Public Sub AddTestGrade(ByVal grade As Double) mTestGrades.Add(grade) End Sub

Ahora volvemos a escribir la propiedad TestAverage, por lo que es ReadOnly. El bucle For Each en iteracin la coleccin, agregando cada grado de prueba para testSum. A continuacin, la propiedad devuelve testSum dividido por el nmero de pruebas (contenido en mTestGrades.Count):
Public ReadOnly Property TestAverage As Double Get Dim testSum As Double = 0.0 For Each grade As Double In mTestGrades testSum += grade Next Return testSum / mTestGrades.Count End Get End Property

El resultado es una aplicacin ms til de media prueba del estudiante que tenamos en la versin anterior de la clase Estudiante.

TIP propiedades ReadOnly debe estar completamente codificado, no pueden ser autoaplicado.

Propiedades comunes

Una propiedad compartida pertenece a la clase en la que se declar no a los casos individuales de la clase. Para decirlo de otra manera, cada instancia de la clase no contiene una copia separada de la propiedad. Slo un rea de almacenamiento est reservada para la propiedad, y que la zona de almacenamiento es compartida por todas las instancias de la clase. Por ejemplo, podemos declarar una propiedad compartida llamada CollegeName en la clase del estudiante: Pblico Propiedad Compartida CollegeName As String Despus de declarar esta propiedad, un programa puede establecer el nombre de la universidad con una instruccin que utiliza el nombre de clase, seguido del nombre de la propiedad: Student.CollegeName = 'Gaddis Technical Institute' Tambin puede crear clases compartidas variables de nivel. Por ejemplo, la siguiente variable puede contener un nmero entero que indica el nmero mximo de crditos para que cualquier estudiante puede inscribirse: Privadas smMaxCredits compartidas As Integer Control 6. Enumerar ejemplos de especificadores de acceso que se han mencionado hasta ahora en este captulo. 7. Qu es una variable de nivel de clase diferente de una variable local? 8. Explicar el principio de ocultacin de informacin. 9. Qu tipo de propiedad slo contiene una seccin conseguirlo? 10. Qu dos secciones se encuentran en una propiedad? 11. Cul es el nombre de un constructor sin parmetros? 12. Cules son los tres componentes del modelo de aplicacin de tres niveles? H Los tipos enumerados Un tipo enumerado es una lista de nombres simblicos asociados con constantes enteras. Su mayor valor est en hacer un programa ms legible para dar nombres a lo que de otro modo sera enteros. Supongamos, por ejemplo, que una aplicacin trabaj con cuatro diferentes tipos de cuenta, el nmero 0, 1, 2, y 3. Puede ser que sea difcil, cuando se mira en el cdigo del programa, para recordar que corresponda entero a cada tipo de cuenta. En su lugar, podemos definir un tipo enumerado que proporcione esta informacin: Enum AccountType Cheques Ahorros Trading Anualidad End Enum El tipo enumerado define, y por tanto, restringe, el conjunto de valores que pueden ser asignados a las variables de su tipo. Internamente, la lista de valores AccountType se les asignan los valores enteros de 0, 1, 2, y 3. SUGERENCIA Cuando se pulsa el punto despus de una variable de enumeracin, herramienta Visual Studio IntelliSense muestra una lista de todos los valores de la variable de enumeracin puede contener. No utiliza la Nueva palabra clave cuando se declara un objeto enumerado: ACCT dvil como AccountType Si se declara un objeto AccountType, slo los valores de la lista prescrita debe asignarse a la misma: ACCT = ACCT AccountType.Checking = AccountType.Trading La siguiente declaracin es ilegal porque los enteros no son una asignacin compatible con los tipos Enum: ACCT = 1 En casos especiales, se puede asignar un nmero entero en una AccountType, pero debe hacerlo slo cuando no hay otra opcin disponible. Por ejemplo, supongamos que usted fuera a leer un nmero entero de un cuadro de texto, y el entero se supone que

indica un tipo de cuenta. La funcin CType debe ser utilizado para emitir el entero en AccountType: ACCT dvil como AccountType Dim N As Integer = CInt (txtAccountType.Text) ACCT = CType (N, AccountType) No elenco est obligado a asignar un tipo enumerado en un entero: N As Integer = ACCT Uso de expresiones booleanas Los tipos enumerados son particularmente tiles cuando se utiliza en expresiones booleanas que implican comparaciones. Por ejemplo, supongamos que queremos tomar una accin en particular si una cuenta es una anualidad: Si ACCT = Entonces AccountType.Annuity taxDeferred = True End If Tal afirmacin es claramente ms fcil de leer que algo como esto: Si acctCode = 3 Entonces taxDeferred = True End If Del mismo modo, la instruccin Select Case puede ir a travs de una lista de valores enumerados y tomar una accin separada para cada valor posible: Seleccione ACCT Case Caso AccountType.Annuity lblResult.Text = "pagos del plan para el retiro" Caso AccountType.Checking lblResult.Text = "" girar cheques para pagar las facturas "" etc End Select En el Tutorial 1-3, usted examinar una aplicacin que utiliza un tipo enumerado. d Tutorial 1-3: Cuenta enumerado tipo En este tutorial, examinar y probar una aplicacin que permite al usuario seleccionar el tipo de cuenta de un cuadro de lista. Cada vez que cambia la seleccin del usuario, el ndice seleccionado del cuadro de lista se convierte en un objeto AccountType. Luego, usando una instruccin Select Case, un mtodo selecciona una descripcin apropiada para mostrar el tipo de cuenta. Ejemplo de salida del programa se muestra en la Figura 1-12. Figura 1-12 Ejemplo Enum AccountType programa [ActsuntTypeEnum barnplt u B 1 Sel & ct un Checking_ CdCuen Un tipo Trading Anualidad Ahorra dinero para las compras grandes Paso 1: Abra el AccountType Enum Ejemplo de proyecto en la carpeta del programa de ejemplo para este captulo. En la ventana de cdigo del formulario de inicio, observe el AccountType declarado al final del archivo: Enum AccountType Cheques Ahorros Trading Anualidad End Enum Paso 2: Examine el cdigo restante, que se muestra a continuacin: 1: Public Class Form1 2: typenames privadas () As String = {'Checking', 'Savings ", 3:" Comercio "," anualidad "} 4: 5: Private Sub Form1_Load () Handles MyBase.Load 6: lstTypes.DataSource = typenames 7: End Sub 8: 9: Private Sub ShowDescription (ACCT ByVal como AccountType) 10: acct Select Case 11: Caso AccountType.Annuity 12: lblResult.Text = Plan de pagos por jubilacin''''

13: Caso AccountType.Checking 14: lblResult. Texto ='' cheques para pagar las facturas " 15: AccountType.Savings Case 16: lblResult. Texto ='' Ahorra dinero para las compras grandes ' 17: Caso AccountType.Trading 18: lblResult.Text = 'especular en el mercado de valores'' 19: End Select 20: End Sub 21: 22: Private Sub lstTypes_SelectedIndexChanged () _ 23: Maneja lstTypes.SelectedIndexChanged 24: Probar 25: ndice As Integer = lstTypes.SelectedIndex 26: ShowDescription (CType (ndice, AccountType)) 27: Catch ex As Exception 28: lblResult.Text = ex.Message 29: End Try 30: End Sub 31: End Class La lnea 2 declara una matriz de cadenas que contiene los nombres de los miembros AccountType. Line 6 asigna esta matriz al cuadro de lista cuando se carga el formulario en primer lugar. Cuando el usuario hace una seleccin, el controlador de SelectedIndexChanged (lneas 22-30) ejecuta. El ndice del elemento seleccionado se echa en un objeto AccountType en la lnea 26 y se pasa al mtodo ShowDescription (lneas 9-20). La instruccin Select Case muestra cada uno de los valores enumerados en una forma que es fcil de entender. Paso 3: Ejecucin y comprobacin de la aplicacin mediante la seleccin de diferentes tipos de cuenta en el cuadro de lista. Control 13. Cul es la principal ventaja de utilizar un tipo enumerado? 14. Puede ser un nmero entero convertido en un tipo enumerado? 15. Puede un valor enumerado ser echado en un entero? 16. Por qu la instruccin Select Case funcionan bien con variables de tipo enumerado? centrarse en el diseo del programa y resolucin de problemas: Banco Teller Aplicacin En esta seccin, vamos a crear un corto de dos niveles de aplicacin que simula un cajero electrnico al permitir que el usuario busque una cuenta, depositar fondos, retirar fondos, y ver el saldo actual. Vamos a comenzar el diseo con una lista de los requisitos esenciales: 1. informacin de cuenta existente (ID, nombre de la cuenta, y el balance de la cuenta) se almacenan en un archivo de datos. 2. El usuario debe ser capaz de introducir un nmero de cuenta e iniciar una bsqueda para una cuenta de juego. Si la cuenta se encuentra en el archivo de datos, la aplicacin recupera el nombre del titular de la cuenta y el saldo de la cuenta. 1.4 Enfoque en el Diseo del Programa y Resolucin de Problemas 3. El usuario debe ser capaz de introducir una cantidad de dinero a depositar. La aplicacin mostrar el saldo de la cuenta actualizada. 4. El usuario puede introducir una cantidad a retirar, y la aplicacin mostrar el saldo de la cuenta actualizada. En esta versin de la aplicacin, el saldo de la cuenta actualizada no se escribir en el archivo. Vamos a ofrecer esa tarea como uno de los desafos de captulo de programacin.

Antecedentes Antes de empezar a disear esta aplicacin, echemos un vistazo a algunas tcnicas tiles. rutas relativas de archivos El siguiente cdigo muestra cmo llamar al mtodo File.OpenText para abrir un archivo para entrada, pasndole una ruta de acceso al archivo: Dim infile Como StreamReader = OpenText ("c: \ temp \ accounts.dat") Un ejemplo de una ruta de acceso podra ser slo un nombre de archivo (como accounts.dat), o puede incluir una ruta completa, tal como c: \ temp \ accounts.dat, o puede contener una ruta relativa, como .. \ accounts.dat. .. La notacin \ indica que tenemos que retroceder un nivel de directorio para buscar el archivo de datos. Un programa compilado VB se almacenan en el bin \ Debug carpeta o el bin \ Release carpeta de un proyecto. Por lo tanto, si ponemos el archivo accounts.dat en el directorio raz del proyecto, la ruta de acceso que se pasa al mtodo OpenText debe respaldar dos niveles de directorio. Es as como la ruta del archivo ser declarado: Private FILEPATH ReadOnly As String ='' .. \ ..'' \ accounts.dat 11111 825,50 George Baker Lectura campos delimitados desde un archivo de texto La clase StreamReader tiene un mtodo denominado ReadLine, que lee una lnea entera de la entrada en una variable String: Dim infile Como StreamReader = OpenText (FILEPATH) entireLine Dim As String = infile.ReadLine () El archivo de datos en la aplicacin Banco Teller contiene tres elementos de informacin en cada lnea, delimitado por comas. He aqu un ejemplo de una sola lnea: 11111, George Baker, 825,50 Una gran cantidad de archivos de datos utilizan este formato delimitado por comas. Por lo general, los programas tienen que dividir esa cadena en campos separados, cada una en su propia cadena. Afortunadamente, el mtodo String.Split divide una cadena como esta en una matriz de cadenas, utilizando cualquier carcter delimitador que usted elija. Vamos a suponer que la cadena produce llamando ReadLine se almacena en una cadena denominada entireLine. As que podramos llamar el mtodo Split, pasndole un carcter delimitador: Dim infile Como StreamReader = OpenText (mFilePath) entireLine Dim As String = infile.ReadLine () Dim campos () As String = entireLine.Split ("," c) Como resultado, la matriz de los campos contiene el ID de cuenta (11111) en la primera posicin, el nombre de cuenta (George Baker) en la segunda posicin, y el saldo de la cuenta (825.50) en la posicin tercera: 27 Por cierto, la notacin " , "c crea una constante de carcter individual que contiene una coma. De hecho, cualquier carcter constante se puede codificar de esta manera, como por ejemplo la letra A: '' A'' c. Fin Deteccin de Archivo Cuando se lee desde un InputStream, la mejor forma de comprobar el final de un archivo es inspeccionar la propiedad EndOfStream. Esta propiedad ser igual a True si el final del archivo ha sido alcanzado. Por lo general se codifica como la condicin de un bucle while: Dim infile Como StreamReader = OpenText (mFilePath) Si bien no infile.EndOfStream

infile.ReadLine () ", etc End While Cuenta Class La aplicacin cajero de banco contendr una clase denominada Cuenta que tiene un ID de cuenta, nombre del titular de la cuenta y el saldo de la cuenta.Una propiedad denominada LastError contendr una descripcin del ltimo error producido al llamar a mtodos de la clase. Adems, la clase se tienen los siguientes mtodos: Nuevo (ID de cuenta) -un constructor que recibe un ID de cuenta y crea un objeto de cuenta nueva. GetData () : abre el archivo de datos y busca el ID de cuenta. Si el ID se encuentra, el mtodo lee el nombre de la cuenta y el saldo del archivo y devuelve True. Si el ID no se encuentra, el mtodo se asigna un mensaje a la propiedad LastError y devuelve Falso. Depsitos (cantidad) los depsitos en una cantidad de dinero en la cuenta. Retirar (cantidad) As Boolean intentos de retirar una cantidad de la cuenta. Si el saldo es al menos tan grande como la cantidad retirado, el mtodo resta el importe del saldo de la cuenta y devuelve un valor de True. Si el saldo es demasiado baja, el mtodo asigna un mensaje de error a la propiedad y devuelve un LastError valor de Falso. Class Form1 En el formulario de inicio de la aplicacin, crear los controladores de eventos siguientes: btnFind_Click a abrir el archivo de datos de cuenta y busca un registro que contiene un nmero de cuenta correspondiente. Si se encuentra una coincidencia, este mtodo copia el nombre de la cuenta y el saldo a etiquetar los controles en el formulario. btnDeposit_Click -lee la cantidad de depsito de un control de cuadro de texto y lo pasa al mtodo Account.Deposit. Muestra saldo actualizado de la cuenta en una etiqueta. btnWithdraw_Click -lee la cantidad retirada de un control de cuadro de texto y lo pasa al mtodo Account.Withdraw. Si el ltimo mtodo devuelveTrue, este mtodo muestra saldo actualizado de la cuenta en una etiqueta. Si el mtodo devuelve Retirar False, un mensaje de error aparece en una etiqueta. btnClose_Click -cierra el formulario. Diseo de Interfaz de Usuario El usuario interacta con una sola ventana que contiene cuadros de texto, etiquetas y botones. Queremos controlar las acciones del usuario con los botones de desactivacin hasta que la cuenta correspondiente 1.4 Enfoque en el Diseo del Programa y Resolucin de Problemas Figura 1-13 Banco aplicacin Teller ventana de inicio

se ha encontrado informacin. La figura 1-13 muestra la ventana de inicio de la aplicacin, en la que el usuario puede introducir un nmero de cuenta y haga clic en Buscar botn. El Depsito y Retiro botones estn desactivados. La figura 1-14 muestra la misma ventana despus de que el usuario ha introducido un nmero de cuenta y hacer clic en el Buscar botn. Debido a que la cuenta se encontr en el archivo de entrada, el nombre de cuenta y saldo se muestran, y el fuerte y Retiro botones estn habilitados. Figura 1-14 Banco Teller aplicacin despus de una bsqueda exitosa de usuario para una cuenta

La figura 1-15 muestra el resultado cuando el usuario busca una cuenta que no se encontr en el archivo de entrada. Cualquier informacin de cuenta existente se borra de la forma, y el fuerte y Retiro botones estn deshabilitados. En la Figura 1-16, el usuario ha realizado un depsito en la cuenta introduciendo un valor en el cuadro de texto y haga clic en el Depsito botn. Observe que el saldo de la cuenta ha cambiado. En la Figura 1-17, el usuario ha realizado una retirada de la cuenta introduciendo un valor en el cuadro de texto y haga clic en el Retiro botn. Observe que el saldo de la cuenta ha cambiado. La Tabla 1-2 enumera los controles mencionados en el formulario de inicio. Figura 1-15 Banco Teller aplicacin despus de una bsqueda infructuosa de usuario para una cuenta

Figura 1-16 Banco Teller aplicacin que muestra un depsito en la cuenta (flecha aadido para mayor claridad)

Figura 1-17 Banco Teller aplicacin que muestra un retiro de la cuenta (flecha aadido para mayor claridad)

1.4 Enfoque en el Diseo del Programa y Resolucin de Problemas 31 Tabla 1-2 Nombrado controles en la aplicacin Banco Teller Tipo de control Control de Valores de la propiedad Name Formulario Formi PictureBox PictureBoxl GroupBox GroupBoxl

TextBox TextBox Etiqueta Etiqueta Botn Botn Botn Botn

txtAccountNum txtAmount lblAccountName lblBalance btnFind btnDeposit btnWithdraw btnClose

Text = Banco aplicacin Teller Image = logo.png Text = Seleccione una accin: BorderStyle = Fixed3D, AutoSize = False BorderStyle = Fixed3D, AutoSize = False Text = Buscar Text = fuerte Text = Retirar Text = Cerrar d Tutorial 1-4: La construccin de la aplicacin cajero de banco En este tutorial, llevar a cabo el Banco Teller aplicacin. Se trata de una cuenta de clase llamada y un formulario de inicio nico. Paso 1: Abra el proyecto denominado Banco Teller inicio de la carpeta de captulo ejemplos. El formulario de inicio se ha creado para ti. Paso 2: Agregue una clase denominada Cuenta del proyecto. Paso 3: Agregue las siguientes instrucciones Imports al Accounts.vb archivo, justo por encima de la declaracin de clase: Clase System.IO Imports 'StreamReader Las importaciones mtodo System.IO.File 'OpenText Paso 4: Inserte la variable siguiente en la clase de cuenta que va a contener el saldo de la cuenta corriente. Adems, crear una propiedad de slo lectura que devuelve el valor de mBalance. MBalance Privado As Decimal Paso 5: Inserte las siguientes propiedades implementadas automticamente: Pblico de la Propiedad AccountId Como AccountName propiedad de la cadena pblica FilePath Como propiedad de la cadena pblica As String Public Property LastError As String AccountName contiene el nombre de la persona que es titular de la cuenta. FilePath contiene una cadena que contiene la ubicacin del archivo de entrada.LastError contiene una cadena que contiene el mensaje de error generado ms recientemente por los mtodos de esta clase. Paso 6: Inserte el siguiente constructor que recibe un nmero de identificacin de la cuenta: Public Sub New (ByVal como secuencia) pAccountId AccountId = pAccountId AccountName = mBalance = String.Empty End Sub 0.0D

Das könnte Ihnen auch gefallen