Você está na página 1de 11

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 3 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

C.F.G.S. DESARROLLO DE APLICACIONES INFORMTICAS

MDULO: Diseo y realizacin de servicios de presentacin en entornos grficos

Unidad 3

Creacin y utilizacin de una clase en Visual Basic .NET

En esta unidad se mostrarn las caractersticas del lenguaje Visual Basic .NET para crear una clase, definiendo sus propiedades y mtodos. Desarrollaremos un pequeo ejemplo en el que crearemos y utilizaremos una clase.

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 3 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

NDICE DE CONTENIDOS

CREAR UNA CLASE. PROPIEDADES Y MTODOS............................................................................... 3 PLANTEAMIENTO DEL EJERCICIO ........................................................................................................ 6 Diseo ....................................................................................................................................................... 6 Mdulo de datos........................................................................................................................................ 7 Utilizacin de la clase. Aceptar y almacenar un objeto de la clase.......................................................... 7 Mtodo compartido y funcin InputBox .................................................................................................... 8 Nuevo formulario. Formulario frmVerEmpleados ............................................................................. 10

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 3 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Crear una clase. Propiedades y mtodos. Vamos a crear un nuevo proyecto donde realizaremos un ejemplo de creacin de una clase y utilizacin de la misma. Al nuevo proyecto le asignamos el nombre 02.ClaseEmpleado. Aadimos una clase a nuestro proyecto. Para ello vamos a las opciones del men Proyecto + Agregar Clase, aparecer un cuadro donde le asignaremos un nombre a la clase, el nombre por defecto es Class1.vb, lo cambiaremos por CEmpleado.vb. Al principio de la clase, y dentro del bloque Public Class CEmpleadoEnd Class, vamos a declarar una serie de variables privadas o internas de la clase, que recogern caractersticas del empleado tales como: su nombre, categora, sueldo, nmero de cuenta bancaria, y nombre de la entidad bancaria:
Public Class CEmpleado ' variables privadas de la clase Private csNombre As String ' Private csCategoria As String ' Private cdbSueldo As Double ' Private csCuenta As String ' Private csEntidad As String ' .. .. End Class

nombre del empleado categoria sueldo n de cuenta bancaria nombre de la entidad bancaria

Nota: al asignarle el nombre a las variables, empleamos el criterio de anteponer al nombre la letra c para identificarla como variable de clase y a continuacin una o dos letras que nos indican el tipo de variable que es; por ejemplo, una s para variables de tipo String, o las letras db para variables de tipo Double. Ahora vamos a desarrollar los mtodos Property que se emplearan para asignar y obtener los valores de las variables privadas que hemos declarado. El primero ser la propiedad Nombre que asignar y obtendr el valor de la variable csNombre. En su asignacin, comprobaremos que el valor no sea un valor vaco.
Public Class CEmpleado ' variables privadas de la clase .. .. ' propiedad Nombre de la clase CEmpleado Public Property Nombre() As String Get Return csNombre End Get Set(ByVal value As String) If value.Equals("") Then MessageBox.Show("Error, nombre vaco") Else csNombre = value End If End Set End Property End Class

El bloque Get simplemente devuelve el valor de la variable csNombre mediante la instruccin Return. Y el bloque Set comprueba si el valor que se intenta asignar a la variable es un valor vaco con la expresin

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 3 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

value.Equals(""), donde value es el valor que se desea asignar a la variable csNombre.Si es as se muestra un mensaje y si no se le asigna dicho valor a la variable. Observar que value es de tipo String y por lo tanto disponemos de las funciones de la clase String, y una de ellas es la funcin Equals, que en este caso compara el contenido de value con una cadena vaca (). Para la variable csCategoria, slo aceptaremos los valores A, B o C, como categoras vlidas. El mtodo Property que escribiremos ser el siguiente:
' propiedad Categoria de la clase CEmpleado Public Property Categoria() As String Get Categoria = csCategoria End Get Set(ByVal value As String) Select Case value.ToUpper Case "A", "B", "C" csCategoria = value.ToUpper Case Else MessageBox.Show("Categoria no vlida, teclee A,B o C") End Select End Set End Property

El valor de la variable cdbSueldo, tendr relacin con la categora. Para un empleado con la categora A, sueldo tendr que ser mayor o igual a 1000 y menor que 1500; para un empleado de la categora B, mayor o igual a 800 y menor que 1000; y para un empleado de la categora C, mayor o igual a 500 y menor que 800. Lgicamente primero tenemos que conocer la categora del empleado para poder asignarle un sueldo. El mtodo Property que recoger estas condiciones ser el siguiente:
' propiedad Sueldo de la clase CEmpleado Public Property Sueldo() As Double Get Sueldo = cdbSueldo End Get Set(ByVal value As Double) If Me.csCategoria Is Nothing Then MessageBox.Show("Error, no tiene asignada la categoria") ElseIf (Me.csCategoria = "C" And value >= 500 And value < 800) Or _ (Me.csCategoria = "B" And value >= 800 And value < 1000) Or _ (Me.csCategoria = "A" And value >= 1000 And value < 1500) Then ' sueldo correcto, segn categora cdbSueldo = value Else ' sueldo incorrecto, mostramos mensaje de error segn la categora Select Case Me.csCategoria Case "A" MessageBox.Show("Error: categoria A, 1.000 <= sueldo < 1.500 ") Case "B" MessageBox.Show("Error: categoria B, 800 <= sueldo < 1.000 ") Case "C" MessageBox.Show("Error: categoria C, 500 <= sueldo < 800 ") End Select End If End Set End Property

Nota: Si queremos escribir la extensa condicin del ElseIf en varias lneas, debemos de separarlas con un guin bajo, dejando un espacio en blanco antes de dicho guin. No obstante si queremos podemos escribirla toda seguida, solamente es por una mejora visual.

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 3 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Vamos a crear una propiedad CtaBanco que utilizaremos para asignar valores a las variables csCuenta y csEntidad. Ser una propiedad de slo escritura, por lo que no tendr el bloque Get. A la hora de escribir la cabecera del procedimiento Property, aadimos la palabra WriteOnly, que la identifica como propiedad de slo escritura. En nuestro ejercicio adoptaremos el siguiente formato para las cuentas: 1111-123456. Los cuatro primero nmeros identificaran el banco al que pertenece la cuenta, y los seis siguientes dgitos sern el nmero de la cuenta. Desde el procedimiento Property CtaBanco, asignaremos un valor a la variable csEntidad, en funcin de los cuatro primeros nmeros introducidos. Escribimos algunos valores de ejemplo para entidades ficticias.
' propiedad CuentaBancaria de la clase CEmpleado (slo escritura) Public WriteOnly Property CtaBanco() As String Set(ByVal Value As String) Select Case Value.Substring(0, 4) Case 1111 csEntidad = "Caja Avils" Case 2222 csEntidad = "Banco Rico" Case 3333 csEntidad = "Banco Pobre" Case Else csEntidad = "Banco Desconocido" End Select csCuenta = Value End Set End Property

Veamos que se obtiene con la expresin Value.Substring(0, 4). Substring es una funcin que los tipos de datos String tienen definida, y que nos permite obtener una subcadena del contenido del dato String. Con los parmetros asignados, obtenemos los cuatro primeros caracteres de su contenido: el 0 indica que comenzar a extraer los caracteres desde el principio de la cadena, y el 4 el nmero de caracteres a extraer. Luego, con la expresin anterior, se obtendrn los caracteres que identifican a la entidad bancaria. Despus de asignarle un valor a la propiedad csEntidad, almacenamos el valor introducido en la variable csCuenta. Y ya slo aadiremos una propiedad ms. La propiedad EntidadBanco ser de slo lectura, esto es nicamente tendr el bloque Get, y su misin ser obtener el valor de la variable csEntidad. En la cabecera del procedimiento escribiremos ReadOnly.
' propiedad EntidadBancaria de la clase CEmpleado (slo lectura) Public ReadOnly Property EntidadBanco() As String Get Return csEntidad End Get End Property

Cmo mtodos de la clase, slo vamos a declarar uno, y de carcter compartido (Shared). Recordar que un mtodo compartido de una clase se puede ejecutar sin necesidad de crear instancias de esa clase. El mtodo ser el siguiente:
' mtodo FinVacaciones de la clase CEmpleado

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 3 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Public Shared Function FinVacaciones(ByVal fechaInicio As Date, ByVal Dias As Integer) As Date Return fechaInicio.AddDays(Dias).ToShortDateString End Function

El mtodo FinVacaciones tiene dos parmetros, uno de tipo Date que recoger la fecha de inicio de las vacaciones y otro de tipo Integer, que recoger el nmero de das de vacaciones, y devolver la fecha de finalizacin de las vacaciones; para ello sumar a la fecha de inicio, primer parmetro, el nmero de das de vacaciones, segundo parmetro, empleando la funcin AddDays de los tipos de datos Date, para realizar este clculo. Con ToShortDateString, conseguimos que nos devuelva la fecha resultante en un formato de fecha corto (dd/mm/aa). Planteamiento del ejercicio

Diseo Una vez definida la clase CEmpleado. Realizaremos el diseo del formulario de inicio de nuestro proyecto (Form1.vb) y aadiremos los siguientes controles: Tipo de Control Label Label Label Label Label Label Button TextBox TextBox TextBox MaskedTextBox Label Label Label Button Propiedad: Name Label1 Label2 Label3 Label4 Label5 Label6 btnVerDatos txtNombre txtCategoria txtSueldo mtxtCtaBanco lblBanco Label7 lblNEmp btnAceptar Propiedad: Text Nombre: Categoria: Sueldo: Cta. Banco: Banco: Formato:1111-123456 Ver Datos

Propiedad Mask : 0000-000000 N Empleado: 0 Aceptar

El control MaskedTextBox, es un control similar a un TextBox, pero permite establecer una mscara para facilitar la entrada correcta de los datos. En la propiedad Mask establecemos la mscara 0000000000. En cada elemento 0 de la mscara se aceptar un dgito entre 0 y 9. La disposicin de los controles en el formulario podra ser la siguiente:

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 3 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Mdulo de datos Vamos a aadir a nuestro proyecto un mdulo para datos, lo llamaremos datos.vb. En l realizaremos las siguientes declaraciones:
Module datos ' declaramos un array que almacenar objetos de la clase CEmpleado Public aEmpleado(0) As CEmpleado ' declaramos una variable que contendr el nmero de empleados que se vayan introduciendo en el array Public nEmp As Short End Module

Utilizacin de la clase. Aceptar y almacenar un objeto de la clase Al hacer clic en el botn Aceptar del formulario crearemos un objeto o instancia de la clase CEmpleado, que llamaremos oEmpleado. A continuacin asignaremos los contenidos de los distintos TextBox a las propiedades del objeto. Si alguna asignacin no fuese correcta, la propiedad contendr un valor Nothing o cero, tal y como las definimos en la clase. En ese caso llevaremos el cursor al TextBox correspondiente para que el usuario corrija el valor introducido. Para realizar esta accin tenemos el mtodo Focus, mediante la expresin NombreTextBox.Focus()). Y a continuacin finalizamos la ejecucin del procedimiento con Exit Sub. Despus de aceptados todos los valores para el objeto oEmpleado, tenemos que almacenarlo en el array aEmpleado. Para ello y previamente, incrementamos la variable nEmp y redimensionamos el array para aadir una posicin ms y almacenar en ella el objeto oEmpleado. El cdigo que realiza este proceso ser el siguiente:
Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click 'declaramos un objeto o instancia de la clase CEmpleado Dim oEmpleado As New CEmpleado 'asignar el contenido de txtNombre a la propiedad Nombre del objeto oEmpleado.Nombre = Me.txtNombre.Text If oEmpleado.Nombre = Nothing Then Me.txtNombre.Focus()

VALLINIELLO Exit Sub End If

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 3 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

'asignar el contenido de txtCategoria a la propiedad Categoria oEmpleado.Categoria = Me.txtCategoria.Text If oEmpleado.Categoria = Nothing Then Me.txtCategoria.Focus() Exit Sub End If ' asignar el contenido de txtSueldo a la propiedad Sueldo oEmpleado.Sueldo = Me.txtSueldo.Text If oEmpleado.Sueldo = 0 Then Me.txtSueldo.Focus() Exit Sub End If 'asignar el contenido de mtxtCtaBanco a la propiedad CtaBanco oEmpleado.CtaBanco = Me.mtxtCtaBanco.Text 'mostrar el nombre del banco en la etiqueta lblBanco Me.lblBanco.Text = oEmpleado.EntidadBanco ' Almacenar el objeto Empleado en el array ' incrementar nEmp para determinar la posicin del objeto nEmp += 1 'redimensionamos el array aEmpleado ReDim Preserve aEmpleado(nEmp) ' guardar el objeto oEmpleado en el array, en la nueva posicin aEmpleado(nEmp) = oEmpleado ' mostrar el nmero de empleados almacenados en la etiqueta lblNEmp Me.lblNEmp.Text = nEmp End Sub

Recomiendo que se ejecute el proyecto en modo depuracin (F8), lnea a lnea; observando en cada momento la secuencia de ejecucin del programa y el valor que van tomando las variables y dems estructuras de datos. Esto facilita mucho la compresin del cdigo escrito, as como su depuracin si se produce algn error. Mtodo compartido y funcin InputBox Tenamos definido un mtodo compartido de la clase (FinVacaciones). Vamos a utilizarlo en nuestro ejemplo. Para ello incorporaremos al formulario inicio (Form1.vb) dos controles, Button y Label. Tipo de Control Button Label Propiedad: Name btnFinVacaciones lblFinVacaciones Propiedad Text : Calcular Fin Vacaciones Autosize : false

La colocacin de los controles en el formulario podra ser:

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 3 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

Recordaremos que el mtodo FinVacaciones tena dos parmetros, la fecha de inicio de las vacaciones y el nmero de das que duraran stas. Dicho mtodo sumaba los das a la fecha de inicio y nos proporcionaba la fecha de final de vacaciones. Para obtener los dos parmetros utilizaremos la funcin InputBox. Mediante esta funcin podremos solicitar un dato al usuario a travs de un cuadro de dilogo que se mostrar en pantalla. Su sintaxis es: InputBox(Mensaje,Ttulo,RespuestaDefecto,XPosicion,YPosicion) Mensaje. Obligatorio. Un literal que nos indica lo que se desea obtener Ttulo. Opcional. Literal que aparecer en la barra de ttulo del cuadro de dilogo. RespuestaDefecto. Opcional. Respuesta que se mostrar en el cuadro de dilogo, pudiendo el usuario aceptarla o modificarla. XPosicion, YPosicion. Opcionales. las coordenadas en donde aparecer el cuadro en la pantalla. Si se omiten, se mostrar en el centro de la pantalla.

El evento clic del botn btnFinVacaciones quedara:


Private Sub btnFechaVacaciones_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFinVacaciones.Click Dim finicio As Date = InputBox("Introduce una fecha de inicio", "Fecha vacaciones", Now.Date) Dim dias As Integer = InputBox("Introduce nmero de das", "Fecha vacaciones" , 15) Me.lblFinVacaciones.Text = CEmpleado.FinVacaciones(finicio, dias) End Sub

El primer InputBox solicita la fecha de inicio de vacaciones. Como respuesta por defecto se anot la expresin Now.Date, que proporciona la fecha de hoy y que se mostrar en el cuadro de dilogo pudiendo el usuario aceptarla o modificarla, si no es sta la fecha deseada. En el segundo InputBox se pide el nmero de das de las vacaciones, en el tercer parmetro indicamos el valor 15, que el usuario puede modificar o aceptar.

VALLINIELLO

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 3 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas

La ltima sentencia del cdigo anterior, calcula el final de las vacaciones empleando el mtodo compartido de la clase CEmpleado, mostrando el resultado en la etiqueta lblFinVacaciones. Nuevo formulario. Formulario frmVerEmpleados Aadamos un nuevo formulario a el proyecto, en l vamos a mostrar los empleados que estn almacenados en el array hasta ese momento. Para aadir un nuevo formulario, vamos a las opciones del men Proyecto + Agregar Windows Forms, le llamaremos frmVerEmpleados.vb. Contendr slo dos controles: Tipo de Control TextBox Propiedad: Name txtEmpleados Propiedad Propiedad Multiline : true Propiedad ScrollBars : vertical Propiedad ReadOnly : true Text : Cerrar

Button

btnCerrar

El TextBox txtEmpleados ser de slo lectura (ReadOnly = true), ya que slo vamos a mostrar unos datos, no se van a editar. El formulario tendr el siguiente aspecto:

El proceso ser el siguiente: al cargar el formulario se recorre todo el array y se muestra en txtEmpleados una lnea con los datos de cada empleado almacenado en dicho array. El cdigo a incluir en el formulario ser:
Public Class frmVerEmpleados Inherits System.Windows.Forms.Form Private Sub frmVerEmpleados_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Me.txtEmpleados.Text = Nothing
For i As Short = 1 To aEmpleado.GetUpperBound(0) Me.txtEmpleados.AppendText(aEmpleado(i).Nombre & " - " & _ aEmpleado(i).Categoria & " - " & aEmpleado(i).Sueldo & " - " & _

10

VALLINIELLO Next End Sub

Diseo y realizacin de servicios de presentacin en entornos grficos. UNIDAD 3 DEPARTAMENTO DE INFORMTICA Y COMUNICACIONES INF32 Desarrollo de Aplicaciones Informticas aEmpleado(i).EntidadBanco & vbNewLine)

Private Sub btnCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCerrar.Click Me.Close() End Sub End Class

Tendremos que incorporar un botn al formulario inicial (Form1.vb) para que desde l podamos invocar al nuevo formulario frmVerEmpleados: Tipo de Control Button Y el cdigo sera:
Private Sub btnVerEmpleados_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerEmpleados.Click frmVerEmpleados.ShowDialog() End Sub

Propiedad: Name btnVerEmpleados

Propiedad Text : Ver Empleados

Con esto ya concluimos el ejercicio.

11

Você também pode gostar