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