Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

jueves, 27 de diciembre de 2012

Arrays: Propiedades y Métodos

Un arreglo de objetos de clase es útil cuando se requieren instancias múltiples de la misma clase.

Hay dos formas en las que se pueden relacionar los arreglos con los objetos:

  • Un arreglo puede contener elementos de tipo objetos
  • Una clase puede contener como atributos variables de tipo arreglo


Vamos a hacer un ejemplo con la 2º forma.

Ejemplo: Queremos llevar la gestión de articulos de una pequeña tienda.

Para ello vamos a usar 2 clases:
La clase ClassArticulo: contiene los datos del articulos ademas de varios metodos para modificar los datos del mismo
La clase ClassListaArticulo: contiene un array de objetos de la clase ClassArticulo, mas varios métodos para modificar este array (añadir articulos, buscar, registrar llegadas y salidas de articulos y ver un inventarios de los articulos existentes).

ClassArticulo:
Los articulos tienen las siguientes propiedades:
clave: es un numero que identifica el articulo de una manera unica, por ejemplo 11034
existencia: es un numero que indica la cantidad existente en el almacen de un determinado articulo
precio: precio del articulo

Ademas tiene varios métodos:
inicializa: le dá valores a las propiedades, clave, existencia y precio del objeto articulo
registraEntrada: indica que en el almacen han entrado un determinado numero
registraSalida: indica que del almacen han salido un determinado numero , ademas hace una comprobación, si la salida supera al numero de existencias, te indica un mensaje de error, y no saca ningun articulo.


' Gambas class file

Property clave As Integer
Private hclave As Integer

Property existencia As Integer
Private hexistencia As Integer

Property precio As Float
Private hprecio As Float

Public Sub inicializa(ValorClave As Integer, ValorExistencia As Integer, ValorPrecio As Float)
hclave = ValorClave
hexistencia = ValorExistencia
hprecio = ValorPrecio
End

Public Sub registraEntrada(cant As Integer)
hexistencia += cant
End

Public Function registraSalida(cant As Integer) As Boolean

If cant > hexistencia Then
Return False 'indica que no hubo suficientes articulos
Else
hexistencia -= cant
Return True ' indica que si registró la salida
Endif
End

Private Function clave_Read() As Integer
Return hclave
End

Private Sub clave_Write(Value As Integer)
hclave = Value
End

Private Function existencia_Read() As Integer
Return hexistencia
End

Private Sub existencia_Write(Value As Integer)
hexistencia = Value
End

Private Function precio_Read() As Float
Return hprecio
End

Private Sub precio_Write(Value As Float)
hprecio = Value
End



ClassListaArticulo:

Va a tener una propiedad "lista" que es un array de articulos ( ClassArticulo[] ), manejada por la variable privada "hlista"
Y varios métodos:
anadirArticulo():crea un objeto temporal del tipo classArticulo, nos pide los distintos datos del articulo. y la añade (usando el método add) a la lista de articulos.
verInventario(): devuelve una cadena de texto, con los datos de todos los articulos existentes (recorre con un for next el array "lista"
busca(): dado una clave busca  en la lista, un articulo que tenga esa clave, si no lo encuentra da un mensaje de error y si lo encuentra devuelve la posicion dentro del array del articulo.
registrallegada(): pide la clave del articulo y la cantidad, busca la posicion dentro del array de articulos y le añade la cantidad.
registraSalida(): pide la clave del articulo y la cantidad, busca la posicion dentro del array de articulos, y le quita la cantidad (si no puede, te lo indica en un mensaje)



' Gambas class file

Property lista As ClassArticulo[]
Private hlista As New ClassArticulo[]

Private Function lista_Read() As ClassArticulo[]
Return hlista
End

Private Sub lista_Write(Value As ClassArticulo[])
hlista = Value
End

Public Function verInventario() As String
Dim texto As String
Dim i As Integer
texto = "La lista de articulos en el almacen es la siguiente:" & gb.CrLf
texto &= "Clave" & gb.Tab & "Cantidad en Existencia" & gb.tab & "Precio" & gb.CrLf
For i = 0 To hlista.Max
texto &= hlista[i].clave & gb.Tab & hlista[i].existencia & gb.tab & hlista[i].precio & gb.CrLf
Next
'devuelvo el texto generado de todos los elementos de la lista
Return texto
End

Public Function busca(BuscaClave As Integer) As Integer
Dim i As Integer
Dim posicion As Integer = -1 '-1 indica que no se encontro el artidulo
For i = 0 To hlista.Max
If hlista[i].clave = buscaclave Then
posicion = i 'encontrado el articulo
Return posicion
Endif
Next
Return posicion
End

Public Sub registrallegada()
Dim posicion As Integer, cve As Integer, cantidad As Integer
Print "Cual es la clave del articulo:"
Input cve
'busca la clave en el almacen:
posicion = busca(cve)
If posicion <> -1 Then
Print "Cuantos artículos llegaron: "
Input cantidad
hlista[posicion].registraEntrada(cantidad)
Print "Ok,cantidad introducida...." & gb.CrLf
Else
Print "*** Esa clave no existe ***" & gb.CrLf
Endif
End

Public Sub registraSalida()
Dim posicion As Integer, cve As Integer, cantidad As Integer
Print "¿cual es la clave del articulo? "
Input cve
'busca la clave en el almacen...
posicion = busca(cve)
'[
If posicion <> -1 Then
'{
Print "¿cuantos articulos salieron? "
Input cantidad
If (hlista[posicion].registraSalida(cantidad) = False) Then
Print "No hay suficientes articulos..." & gb.CrLf
Endif
'}
Else
Print "Esa clave no existe" & gb.CrLf
Endif
']
End

Public Sub anadirArticulo()
Dim valorclave As Integer, valorexistencia As Integer, valorprecio As Float
'creo un articulo temporal que sera el que use para los datos iniciales
Dim arttemp As New ClassArticulo
'pregunto y obtengo los valores que me interesa.
Print "Teclea la clave para el articulo:"
Input valorclave
Print "Teclea la existencia del articulo:"
Input valorexistencia
Print "Teclea el precio del articulo:"
Input valorprecio
'inicializo los datos del articulo
arttemp.inicializa(valorclave, valorexistencia, valorprecio)
'añado al array de articulo el nuevo articulo
hlista.Add(arttemp)
End


Ademas de estas dos clases, tenemos el módulo MMain, que contiene una subrutina llamada Main, que va a procesar un pequeño menu, donde el usuario mediante teclas va a introduccir que opcion quiere que se realice.


' Gambas module file

Public Sub Main()
Dim listaArticulos As New ClassListaArticulos
Dim opc As String
Repeat
opc = menu()
Select opc
Case "a"
listaArticulos.anadirArticulo()
Case "b"
Print listaArticulos.verInventario()
Case "c"
listaArticulos.registrallegada()
Case "d"
listaArticulos.registraSalida()
End Select
Until (opc = "e")
'fin del programa
End

Public Function menu() As String
Dim opc As String
Print ""
Print "Menu de Opciones" & gb.CrLf
Print "(a) Añadir Articulo ";
Print "(b) Ver Inventario ";
Print "(c) Registrar una llegada al almacen " & gb.CrLf
Print "(d) Registrar una salida de almacen ";
Print "(e) Salir de la aplicacion" & gb.CrLf
Repeat
Print "Opcion: "
Input opc
Until ((opc >= "a") Or (opc <= "e"))
Return opc
End


Para descargar el ejemplo completo: ejemplo de array de objetos: gestion de articulos

Enlace GambasWiki:
http://gambaswiki.org/wiki/doc/object-model?l=es
http://gambaswiki.org/wiki/cat/object?l=es
http://gambaswiki.org/wiki/lang/type/object



No hay comentarios:

Publicar un comentario

A falta de donativos... un poco de publicidad