Páginas

domingo, 3 de julio de 2011

Gambas2 y OOP Trabajando con clases (03) Practica 5C

GAMBAS Y OOP:

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