Vous êtes sur la page 1sur 19

SISTEMAS EMPRESARIALES

Guía Práctica Nº 01
Sistemas Empresariales

Logro del Tema:


- Reconoce los conceptos básicos de la Programación Orientada a Objetos.
- Realiza ejercicios prácticos que permitan poner en práctica los conceptos del tema.
- Propone una solución alterna a la solución presentada por el docente.

Implementación de Clases en Visual Basic Net 2012


En VB .NET se puede implementar Clases de manera gráfica y también por líneas de código es
recomendado esta última ya que usted podrá conocer todos los elementos que componen la clase.

Sintaxis de la Clase:

Class
Public Class NombreClase

REM Declaración de Atributos de la Clase

Visibilidad _Atributo As Tipo_Datos

REM Implementación de las propiedades

Visibilidad Property Campo As Tipo_Datos


Get
Return _Atributo
End Get
Set(value As Tipo_Datos)
_Atributo = value
End Set
End Property

REM Implementación de Función o Procedimientos definidos por el usuario

Visibilidad Function Nombre_Funcion() As Tipo_Datos

End Function

Visibilidad Sub Nombre_Procedimiento() As Tipo_Datos

End Sub

End Class

Elaborado por: Equipo de Docentes PÁG. [1]


SISTEMAS EMPRESARIALES

Dónde:

- NombreClase: Aquí se especifica el nombre de la clase, debe tener en cuenta que no debe
tener espacios en blanco ni usar caracteres especiales. Y finalmente un atributo, una función
o procedimiento de clase no debe tener el mismo nombre de la clase.

- Visibilidad: La visibilidad dentro de la clase depende del alcance que usted como
programador desea darle a un atributo, función o procedimiento estas pueden ser: Públicas
(Public), Privadas (Private) o Protegidas (Protected).

- _Atributo: Representa a un elemento de la clase normalmente los atributos de una clase son
privadas, pero como se mencionó antes esto dependerá del programador. Hay que tener en
cuenta que muchas veces los atributos guardan relación con los valores ingresados por el
usuario.

- Campo: Un campo dentro de la clase representa las propiedades de un atributo. Este definirá
las clausulas GET y SET de los campos. Como mencionamos anteriormente los atributos
normalmente son privados por tanto las llamadas desde el exterior a dicho atributo se debe
realizar desde una propiedad con asignación GET, eso quiere decir que GET devuelve el
valor contenido en el atributo y SET asigna un valor al mismo.

- Get: La implementación de GET hace que un atributo sea visible desde el exterior de la clase
y así misma.

- Set: La implementación de SET hace que el atributo de la clase pueda tener una asignación
de valor.

- Function Nombre_Funcion: Una función puede ser implementada dentro de una clase y
puede usar los atributos declarados en la misma, para una tarea específica hay que tener en
cuenta que de usted dependerá si esta función sea pública o privada.

- Sub Nombre_Procedimiento: También se puede implementar un procedimiento dentro de la


clase para una determinada tarea recuerde que el procedimiento no devuelve valores.

Modificadores de visibilidad o alcance


Al crear una clase por defecto esta es Pública pero se pueden considerar muchas más visibilidades
que propone la programación orientada a objetos no necesariamente a la clase sino a los elementos
que la componen con los atributos y métodos de clase.

Tenemos los siguientes alcances:

 Public (Público)
Puede obtener acceso al tipo o miembro cualquier otro código del mismo ensamblado o de
otro ensamblado que haga referencia a éste.

 Private (Privado)
Solamente puede obtener acceso al tipo o miembro el código de la misma clase.

 Protected (Protegido)
Solamente puede obtener acceso al tipo o miembro el código de la misma clase o de una
clase derivada.

Elaborado por: Equipo de Docentes PÁG. [2]


SISTEMAS EMPRESARIALES

Agregando una clase al Proyecto


- Clic derecho sobre el proyecto desde el Explorador de Soluciones / Agregar / Clase.
- En el siguiente cuadro escriba un Nombre apropiado a la Clase.

- Y finalmente presione el botón Agregar.

Agregando un Diagrama de Clase al Proyecto


- Clic derecho sobre el proyecto desde el Explorador de Soluciones / Agregar / Nuevo
elemento.
- Seleccione la categoría Elementos comunes / Diagrama de Clase, para este caso no es
necesario colocar un nombre al diagrama, así es que lo dejaremos con el nombre por defecto.
- Arrastre desde el Cuadro de herramientas el objeto Clase hacia el diseñador, se presentará
la siguiente ventana en la cual se debe definir el nombre de la clase y el tipo de acceso.

- Aquí debemos definir los Atributos (Campos), Métodos y las Propiedades de los campos.

Elaborado por: Equipo de Docentes PÁG. [3]


SISTEMAS EMPRESARIALES

- El Diagrama de clase mostrará la siguiente imagen:

- Para poder ver el código debe presionar doble clic sobre el diagrama mostrado y se mostrará
lo siguiente:

Elaborado por: Equipo de Docentes PÁG. [4]


SISTEMAS EMPRESARIALES

Public Class Empleado


Private _nombres As String
Private _categoria As String
Private _tardanza As Integer
Private _atencion As Integer

Public Property nombres As String


Get

End Get
Set(value As String)

End Set
End Property

Public Property categoria As String


Get

End Get
Set(value As String)

End Set
End Property

Public Property tardanza As Integer


Get

End Get
Set(value As Integer)

End Set
End Property

Public Property atencion As Integer


Get

End Get
Set(value As Integer)

End Set
End Property

End Class

Elaborado por: Equipo de Docentes PÁG. [5]


SISTEMAS EMPRESARIALES

Definición de un Constructor
Cuando no se implementa el constructor los valores son inicializados dependiendo del tipo de datos
en cero o null y serán las instrucciones SET quienes definan un valor inicial a los atributos de clase.

Sintaxis:

Método Constructor
Public Sub New

REM Inicializar los atributos necesarios en la aplicación

End Sub

Por ejemplo en el caso anterior, si queremos inicializar el número de tardanzas y el número de


llamadas de atención a cero, entonces debemos implementar el constructor de la siguiente manera:

Public Sub New()


_tardanza = 0
_atencion = 0
End Sub

Hay que tener en cuenta que los atributos _tardanza y _atención ya se encuentren declaradas
dentro de la clase y serán del mismo tipo que los valores enviados.

Definición de sobrecarga de un método


Un método constructor sobrecargado tiene por misión inicializar los atributos de clase con los valores
que provienen del exterior de la clase.

Sintaxis:

Método Constructor sobrecargado


Public Sub New(Parámetros)

REM Inicializar los atributos necesarios en la aplicación

End Sub

Si tomamos como ejemplo el caso anterior, el número de tardanzas y llamadas de atención de un


empleado podríamos sobrecargar su método constructor de la siguiente manera:

Public Sub New(ByVal vTardanza As Integer, ByVal vAtencion As Integer)


_tardanza = vTardanza
_atencion = vAtencion
End Sub

Elaborado por: Equipo de Docentes PÁG. [6]


SISTEMAS EMPRESARIALES

Definir las propiedades de los atributos


Cuando se asigna una propiedad a un atributo de clase se implementan las instrucciones GET y SET
dependiendo de la forma de acceso del atributo, eso quiere decir que si usted implementa un GET y
SET entonces se debe devolver el valor del atributo y asignar un nuevo valor desde el exterior de
la clase.

Sintaxis:

Propiedades del Atributo


Public Property Nombre As TipoDatos

Get

REM Expresiones y Return

End Get

Set(Value As TipoDatos)

REM Inicializar atributo con el parámetro

End Set

End Sub

Definir las propiedades de sólo lectura a los atributos


Una propiedad de sólo lectura permite que el valor del atributo sólo sea legible pero no actualizable.

Sintaxis:

Propiedades del Atributo en sólo lectura


Public ReadOnly Property Nombre As TipoDatos

Get

REM Expresiones y Return

End Get

End Sub

Como verá en la implementación que ofrece NET ya no se publica la instrucción SET por lo tanto sólo
se puede devolver el valor y no modificarlo, se estará preguntando entonces de que me sirve, sólo
debe considerar este tipo de acción cuando un valor es constante. Veamos en el caso anterior, si el
número de llamadas de atención tiene para todos el valor cero (0) y no otro entonces la
implementación dentro de la clase sería de la siguiente manera:

Elaborado por: Equipo de Docentes PÁG. [7]


SISTEMAS EMPRESARIALES

Dentro de la Clase:

Private _atencion As Integer

Sub New()
_atencion = 0
End Sub

Public ReadOnly Property atencion As Integer


Get
Return _atencion
End Get
End Property

Desde el exterior de la Clase:

Dim objEmpleado As New Empleado


Dim atención% = objEmpleado.atencion

Manejo de un objeto: Instancia de una clase


.NET crea un objeto por medio de la declaración de la misma por tanto tiene algo particular la
creación de un objeto.

Sintaxis:

Crear objeto
Dim NombreObjeto As New NombreClase

La cantidad de objetos creados desde una clase no tiene límite en ningún lenguaje de programación
orientado a objetos, sólo hay que tener en cuenta que los objetos no tenga el mismo nombre.
Veamos el ejemplo de crear un objeto de la clase Empleado:

Dim objEmpleado As New Empleado

Ahora ya podremos tener acceso a todos los elementos públicos de la clase Empleado por ejemplo:

- Asignar valores a la clase Empleado, si no se implementó un método constructor entonces


todos los valores pasan directamente por medio de la instrucción SET a una inicialización de
valores:

objEmpleado.nombres = "Carlos Perez"


objEmpleado.categoria = "A"
objEmpleado.tardanza = 0
objEmpleado.atencion = 0

- Invocar a sus métodos implica que la clase debe devolver un valor hacia la variable que lo
invoca.

Dim pago@ = objEmpleado.calcularPago

Elaborado por: Equipo de Docentes PÁG. [8]


SISTEMAS EMPRESARIALES

CASO 1: Registro de Pago de trabajadores (Clase-Objeto)


Implemente una aplicación que permita controlar el registro de pagos a los empleados de una
empresa. Dicho empleado cuenta con los siguientes atributos: nombres del trabajador, categoría (A, B,
C y D), minutos de tardanza y un número de llamadas de atención. Considere que por cada categoría
se establece un monto de sueldo como se muestra a continuación:

Categoría Monto US$


A 2,500.0
B 1,500.0
C 1,000.0
D 900.0

Por cada minuto de tardanza se le hará un descuento de US$ 5.0 y por cada llamada de atención US$
10.0, en caso la cantidad de minutos de tardanza y número de llamadas de atención sea cero
entonces recibirá un incentivo del 15% sobre el monto asignado según su categoría.

GUI Propuesto:

Solución:

1. Crea la clase Empleado y completa el siguiente código:

Public Class Empleado


Private _nombres As String
Private _categoria As String
Private _tardanza As Integer
Private _atencion As Integer

Public Property nombres As String


Get
Return _nombres
End Get
Set(value As String)
_nombres = value
End Set
End Property

Public Property categoria As String

Elaborado por: Equipo de Docentes PÁG. [9]


SISTEMAS EMPRESARIALES

Get
Return _categoria
End Get
Set(value As String)
_categoria = value
End Set
End Property

Public Property tardanza As Integer


Get
Return _tardanza
End Get
Set(value As Integer)
_tardanza = value
End Set
End Property

Public Property atencion As Integer


Get
Return _atencion
End Get
Set(value As Integer)
_atencion = value
End Set
End Property

Public Function determinarPago() As Double


Select Case _categoria
Case "A" : Return 2500
Case "B" : Return 1500
Case "C" : Return 1000
Case Else : Return 900
End Select
End Function

Public Function calcularPago() As Double


If (_tardanza > 0 Or _atencion > 0) Then
Return determinarPago() - ((_tardanza * 5) + (_atencion * 10))
Else
Return determinarPago() + determinarPago() * 0.15
End If
End Function

End Class

Elaborado por: Equipo de Docentes PÁG. [10]


SISTEMAS EMPRESARIALES

2. En el Form1, diseñe la siguiente GUI:

Asigne a los controles los siguientes nombres:

Control Nombre
TextBox1 txtNombres
ComboBox1 cboCategoria
TextBox2 txtTardanza
TextBox3 txtAtencion
Button1 btnRegistrar
Button2 btnCancelar
ListView1 lvEmpleados
Label7 lblTotal

3. En el Form1, escriba el siguiente código:

Public Class Form1

Private Sub frmPago_Load(…) Handles MyBase.Load


Call llenarCategoria()
Call configurarLista()
End Sub

Sub llenarCategoria()
cboCategoria.Items.Add("A")
cboCategoria.Items.Add("B")
cboCategoria.Items.Add("C")
cboCategoria.Items.Add("D")
End Sub

Sub Limpiar()
txtNombres.Clear()
cboCategoria.SelectedIndex = -1
txtTardanza.Clear()
txtAtencion.Clear()
txtNombres.Focus()
End Sub

Elaborado por: Equipo de Docentes PÁG. [11]


SISTEMAS EMPRESARIALES

Sub configurarLista()
lvEmpleados.View = View.Details
lvEmpleados.GridLines = True
lvEmpleados.Columns.Add("Empleado", 120)
lvEmpleados.Columns.Add("Cat", 80)
lvEmpleados.Columns.Add("Min. Tard.", 80)
lvEmpleados.Columns.Add("Num. Aten.", 80)
lvEmpleados.Columns.Add("Pago $", 120)
End Sub

Function getNombres()
Return txtNombres.Text
End Function

Function getCategoria()
Return cboCategoria.Text
End Function

Function getTardanza()
Return Integer.Parse(txtTardanza.Text)
End Function

Function getAtencion()
Return Integer.Parse(txtAtencion.Text)
End Function

Private Sub btnRegistrar_Click(…) Handles btnRegistrar.Click


Dim objEmpleado As New Empleado
objEmpleado.nombres = getNombres()
objEmpleado.categoria = getCategoria()
objEmpleado.tardanza = getTardanza()
objEmpleado.atencion = getAtencion()

Dim fila As New ListViewItem(objEmpleado.nombres)


fila.SubItems.Add(objEmpleado.categoria)
fila.SubItems.Add(objEmpleado.tardanza)
fila.SubItems.Add(objEmpleado.atencion)
fila.SubItems.Add(objEmpleado.calcularPago)

lvEmpleados.Items.Add(fila)

lblTotal.Text = lvEmpleados.Items.Count
Limpiar()
End Sub

Private Sub btnCancelar_Click(…) Handles btnCancelar.Click


Limpiar()
End Sub

End Class

Elaborado por: Equipo de Docentes PÁG. [12]


SISTEMAS EMPRESARIALES

CASO 2: Registro de Boletos Aéreos (Método Constructor)

Implemente una aplicación que permita controlar el registro de compras de boletos aéreos de una
Agencia de Viajes en Lima. El empleado de registro debe considerar la fecha de registro de la compra,
el nombre del cliente, el destino de los boletos comprados y la cantidad de las mismas. Al final deberá
mostrar el subtotal a pagar, el valor del IGV (18% sobre el subtotal), el neto a pagar y el monto de la
bolsa de viaje que para la agencia es un valor establecido como constante de US$ 500.0 y que por
adquisición de boletos a otros países se incrementara en US$ 50.0

GUI Propuesto:

Tener en cuenta:

- La fecha de registro debe ser capturada desde el sistema.


- Los destinos y los precios establecidos por la Agencia de Viajes son los siguientes:

Destino Costo por Boleto US$


Argentina 1,500.0
Colombia 800.0
Venezuela 1,000.0
Costa Rica 2,500.0

- Los datos del registro son: El número de registro, el destino, el costo del boleto, la cantidad y
el subtotal.

Elaborado por: Equipo de Docentes PÁG. [13]


SISTEMAS EMPRESARIALES

Solución:

1. Crea la clase Boleto y completa el siguiente código:

Public Class Boleto


Private _cliente As String
Private _destino As String
Private _cantidad As Integer
Private _bolsa As Double

Sub New()
_bolsa = 500
End Sub

Public Property cliente As String


Get
Return _cliente
End Get
Set(value As String)
_cliente = value
End Set
End Property

Public Property destino As String


Get
Return _destino
End Get
Set(value As String)
_destino = value
End Set
End Property

Public Property cantidad As Integer


Get
Return _cantidad
End Get
Set(value As Integer)
_cantidad = value
End Set
End Property

Public ReadOnly Property bolsa As Double


Get
Return _bolsa
End Get
End Property

Public Function asignarCosto() As Double


Select Case _destino
Case "Argentina": Return 1500
Case "Colombia": Return 800
Case "Venezuela" : Return 1000
Case "Costa Rica": Return 2500
Case Else: Return 0
End Select
End Function

Elaborado por: Equipo de Docentes PÁG. [14]


SISTEMAS EMPRESARIALES

Public Function calcularSubtotal() As Double


Return _cantidad * asignarCosto()
End Function

End Class

2. Agrega un WindowsForm y en el Form2, diseñe la siguiente GUI:

Asigne a los controles los siguientes nombres:

Control Nombre
TextBox1 txtCliente
ComboBox1 cboDestino
TextBox2 txtCantidad
Button1 btnRegistrar
Button2 btnCancelar
Button3 btnSalir
ListView1 lvBoletos
Label6 lblFecha
Label11 lblSubTotal
Label12 lblIGV
Label13 lblNeto
Label14 lblBolsa

Elaborado por: Equipo de Docentes PÁG. [15]


SISTEMAS EMPRESARIALES

3. En el Form2, escriba el siguiente código:

Public Class frmBoleto

'1. Declaración de Variables Globales


Dim subTotal@ = 0, nRegistro% = 0

'2. Procedimiento que configura el control ListView


Sub configurarLista()
lvBoletos.View = View.Details
lvBoletos.GridLines = True
lvBoletos.Columns.Add("N°", 50)
lvBoletos.Columns.Add("DESTINO", 200)
lvBoletos.Columns.Add("COSTO", 100)
lvBoletos.Columns.Add("CANTIDAD", 100)
lvBoletos.Columns.Add("SUBTOTAL", 100)
End Sub

'3. Procedimiento que llena el combo de Países destinos


Sub llenarDestinos()
cboDestino.Items.Add("Argentina")
cboDestino.Items.Add("Colombia")
cboDestino.Items.Add("Venezuela")
cboDestino.Items.Add("Costa Rica")
End Sub

'4. Funciones para capturar los valores ingresados en el formulario


Function getCliente() As String
Return txtCliente.Text
End Function

Function getDestino() As String


Return cboDestino.Text
End Function

Function getCantidad() As Integer


Return CInt(txtCantidad.Text)
End Function

'5. Código dentro del load del formulario


Private Sub frmBoleto_Load(…) Handles MyBase.Load
Call llenarDestinos()
Call configurarLista()
lblFecha.Text = Date.Today
End Sub

'6. Código de bloqueo para sólo ingresar números


Private Sub txtCantidad_KeyPress(…) Handles txtCantidad.KeyPress
If Char.IsDigit(e.KeyChar) Then
e.Handled = False
ElseIf Char.IsControl(e.KeyChar) Then
e.Handled = False
ElseIf Char.IsSymbol(e.KeyChar) Then
e.Handled = False
ElseIf Char.IsSeparator(e.KeyChar) Then
e.Handled = False
ElseIf Char.IsWhiteSpace(e.KeyChar) Then
e.Handled = False
Else

Elaborado por: Equipo de Docentes PÁG. [16]


SISTEMAS EMPRESARIALES

e.Handled = True
End If
End Sub

'7. Código del botón Registrar


Private Sub btnRegistrar_Click(…) Handles btnRegistrar.Click
On Error GoTo imprevisto
Dim objBoleto As New Boleto
nRegistro += 1
objBoleto.cliente = getCliente()
objBoleto.destino = getDestino()
objBoleto.cantidad = getCantidad()
subTotal += objBoleto.calcularSubtotal
Call MostrarLista(objBoleto)
txtCliente.ReadOnly = True
Exit Sub
imprevisto:
MessageBox.Show("Error en los datos...!", "Sistema", MessageBoxButtons.OK,
MessageBoxIcon.Error)
End Sub

'8. Procedimiento que permite mostrar los valores en el control ListView


Sub MostrarLista(ByVal x As Boleto)
Dim fila As New ListViewItem(nRegistro)
fila.SubItems.Add(x.destino)
fila.SubItems.Add(x.asignarCosto)
fila.SubItems.Add(x.cantidad)
fila.SubItems.Add(x.calcularSubtotal)
lvBoletos.Items.Add(fila)
lblSubTotal.Text = subTotal.ToString("0.00")
lblIGV.Text = (0.18 * CInt(lblSubTotal.Text)).ToString("0.00")
lblNeto.Text = (CInt(lblSubTotal.Text) +
CInt(lblIGV.Text)).ToString("0.00")
lblBolsa.Text = (x.bolsa + (nRegistro * 50)).ToString("0.00")
cboDestino.SelectedIndex = -1
txtCantidad.Clear()
cboDestino.Focus()
End Sub

'9. Código del botón Cancelar que permite limpiar los controles y
reinicializar las variables globales
Private Sub btnCancelar_Click(…) Handles btnCancelar.Click
subTotal = 0
nRegistro = 0
lblSubTotal.Text = ""
lblIGV.Text = ""
lblNeto.Text = ""
lblBolsa.Text = ""
txtCliente.ReadOnly = False
txtCliente.Clear()
cboDestino.SelectedIndex = -1
txtCantidad.Clear()
lvBoletos.Items.Clear()
txtCliente.Focus()
End Sub

Elaborado por: Equipo de Docentes PÁG. [17]


SISTEMAS EMPRESARIALES

'10. Código del botón Salir para cerrar el formulario


Private Sub btnSalir_Click(…) Handles btnSalir.Click
End
End Sub

End Class

Elaborado por: Equipo de Docentes PÁG. [18]


SISTEMAS EMPRESARIALES

Caso Propuesto

Una empresa necesita tener un control de los pagos a sus vendedores como parte de los procesos de
negocio de su Sistema de Ventas, para lo cual cuenta con las siguientes Reglas de Negocio:
 El costo por hora trabajada se determina según la categoría del trabajador que se basa en la
siguiente tabla:

Categoría Costo por Hora S/.


A 40.00
B 30.00
C 20.00
D 10.00

 Se le aplicará el 10% de descuento a su Salario Bruto.


 Implemente la siguiente clase:

GUI Propuesto:

Consideraciones:
 Asigne como valor fijo 30 a las horas de trabajo cuando el usuario no lo registre, defínalo en
el método constructor.
 Sobrecargar el número de horas de trabajo usando sobrecarga de métodos.
 Del caso anterior implemente el registro de pago de vendedores usando el control ListView.

Elaborado por: Equipo de Docentes PÁG. [19]

Vous aimerez peut-être aussi