GAMBAS Y OOP:
3º EJEMPLO DE MANEJOS DE CLASES Y OBJETOS
3º EJEMPLO DE MANEJOS DE CLASES Y OBJETOS
Seguimos con los ejemplos de Gambas OOP.
Ahora la práctica 5c:
Desarrollar una clase llamada Motor que:
Tenga dos atributos private de tipo int (litros de aceite) y de tipo int (CV).
Tenga un constructor con un parámetro de tipo int para los CV. Los litros
de aceite por defecto serán 0.
Tenga un getter para cada uno de los atributos.
Tenga un setter para los litros.
Desarrollar una clase llamada Coche que:
Tenga un atributo private de tipo Motor, un atributo de tipo String (marca),
otro de tipo String (modelo) y otro de tipo double con el precio acumulado
con las averías.
Tenga un constructor con dos parámetros de tipo String que inicialice la
marca y el modelo.
Tenga un getter para cada uno de los atributos.
Un método acumularAveria que incrementará el importe gastado en
averías.
Desarrollar una clase llamada Garaje que:
Tendrá tres atributos, un coche, un String con la avería asociada y el
número de coches que ha ido atendiendo.
El garaje solo podrá atender a un coche en cada momento. Controlar esta
premisa.
Tenga un método aceptarCoche que recibe un parámetro de tipo Coche y
la avería asociada. El garaje solo podrá atender a un coche en cada
momento. Si ya esta atendiendo uno, que devuelva un false.
Tenga un método devolverCoche que dejara al garaje en estado de
aceptar un nuevo coche.
Desarrollar una clase llamada Practica5c que en su método main:
Cree un garaje.
Cree 2 coches.
El garaje irá cogiendo los coches y devolviéndolos, acumulando un
importe aleatorio (Math.random()) de la avería tratada.
Si la averia del coche es “aceite” incrementar en 10 los litros de aceite.
Los coches entrarán al menos 2 veces en el garaje.
Mostrar la información de los coches al final del main.
Nota: Para calcular un número aleatorio usaremos Math.random() que devuelve
un double entre 0.0 y 1.0
Resolución
Clase Motor:
' Gambas class file
'atributos
PRIVATE aceite AS Integer = 0
PRIVATE CV AS Integer = 0
'constructor
PUBLIC SUB _new(c AS Integer)
CV = c
END
'getter
PUBLIC FUNCTION getAceite() AS Integer
RETURN aceite
END
PUBLIC FUNCTION getCV() AS Integer
RETURN CV
END
'setter
PUBLIC SUB setAceite(a AS Integer)
aceite = a
END
Clase Coche:
' Gambas class file
'atributos
PRIVATE motor1 AS Motor
PRIVATE marca AS String = ""
PRIVATE modelo AS String = ""
PRIVATE importeAveria AS Float = 0
'constructor
PUBLIC SUB _new(ma AS String, mo AS String)
motor1 = NEW motor(50) 'valor standard, a todos los coches le ponemos lo mismo al crearlos
marca = ma
modelo = mo
END
'getter
PUBLIC FUNCTION getMotor() AS Motor
RETURN motor1
END
PUBLIC FUNCTION getMarca() AS String
RETURN marca
END
PUBLIC FUNCTION getModelo() AS String
RETURN modelo
END
PUBLIC FUNCTION getImporteAveria() AS Float
RETURN importeAveria
END
PUBLIC SUB acumularAveria(d AS Float)
importeAveria += d
END
Clase Garaje:
' Gambas class file
PRIVATE coche1 AS NEW Coche("", "")
PRIVATE averia AS String
PRIVATE numCochesAtentidos AS Integer
PUBLIC SUB _new()
coche1 = NULL
averia = ""
numCochesAtentidos = 0
END
PUBLIC FUNCTION getNumCochesAtendidos() AS Integer
RETURN numCochesAtentidos
END
PUBLIC FUNCTION aceptarCoche(c AS Coche, averia AS String) AS Boolean
IF c = NULL THEN
RETURN FALSE
ENDIF
IF averia = "aceite" THEN
c.getMotor().setAceite(c.getMotor().getAceite() + 10)
ENDIF
c.acumularAveria(Rnd(0, 100)) ' importe aleatorio de coste averia
numCochesAtentidos += 1
RETURN TRUE
END
PUBLIC SUB devolverCoche()
coche1 = NULL
averia = NULL
END
Clase Fmain:
' Gambas class file
PUBLIC SUB Form_Open()
DIM c1 AS NEW Coche("fiat", "cinquecento")
DIM c2 AS NEW Coche("Renault", "clio")
DIM c3 AS NEW Coche("Peuyot", "sw")
DIM g AS NEW Garaje
RANDOMIZE
TextArea1.text = "Numero de coses atendidos:" & Str$(g.getNumCochesAtendidos()) & "\n"
IF g.aceptarCoche(c1, "Pinchazo de una rueda") = FALSE THEN
TextArea1.text &= "Ya estan atendiendo a otro coche\n"
ENDIF
IF g.aceptarCoche(c1, "Se ha quedado sin gasolina") = FALSE THEN
TextArea1.text &= "Ya estan atendiendo a otro coche y no van a coger el nuestro\n"
ENDIF
g.devolverCoche()
IF g.aceptarCoche(c2, "Gripazo del motor") = FALSE THEN
TextArea1.text &= "Ya estan atendiendo a otro coche\n"
ELSE
'pasara un tiempo
g.devolverCoche()
ENDIF
IF g.aceptarCoche(c2, "aceite") = FALSE THEN
TextArea1.text &= "Ya estan atendiendo a otro coche\n"
ELSE
'pasara un tiempo
g.devolverCoche()
ENDIF
TextArea1.text &= "Numero de coches atendido: " & Str$(g.getNumCochesAtendidos()) & "\n"
TextArea1.text &= "Coche 1, importe averia= " & Str$(c1.getImporteAveria()) & " euros, litros Aceite " & Str(c1.getMotor().getAceite())
TextArea1.text &= "\n"
TextArea1.text &= "Coche 2,importe averia= " & Str$(c2.getImporteAveria()) & " euros, litros Aceite " & Str(c2.getMotor().getAceite())
END
Salida generada por el programa:
Saludos