Gambas2 y OOP (IV)
Trabajando con la Herencia Practica 6
Trabajando con la Herencia Practica 6
Este es un ejemplo de aplicación de Herencia en resolver el siguiente problema:
Desarrollar una clase llamada CuentaCorriente que:
Tenga tres atributos private de tipo Titular (Nombre – String, Apellidos –
String y Edad – int), de tipo String (el número de cuenta) y de tipo double
(el saldo).
Tenga un constructor con parámetros de tipo Titular, String y double.
Tenga un constructor con parámetros de tipo Titular y String. El saldo se
inicializará a 15,3.
Tenga un getter para cada uno de los atributos.
Tenga un setter solo para el saldo.
Tenga un método ingresar que incremente el saldo en una cantidad.
Tenga un método reintegro que decremente el saldo en una cantidad.
Tenga un método para que al imprimir la cuenta salga por pantalla el
número de cuenta y su saldo.
Tenga un método para comparar cuentas, sabiendo que dos cuentas
serán iguales si sus números de cuenta son iguales.
Nota 1: Al imprimir por pantalla un Titular saldrá su nombre, apellidos y
edad.
Nota 2: Para comparar dos String utilizar su método compareTo(String)
que devuelve 0 si son iguales.
Tenga tres atributos private de tipo Titular (Nombre – String, Apellidos –
String y Edad – int), de tipo String (el número de cuenta) y de tipo double
(el saldo).
Tenga un constructor con parámetros de tipo Titular, String y double.
Tenga un constructor con parámetros de tipo Titular y String. El saldo se
inicializará a 15,3.
Tenga un getter para cada uno de los atributos.
Tenga un setter solo para el saldo.
Tenga un método ingresar que incremente el saldo en una cantidad.
Tenga un método reintegro que decremente el saldo en una cantidad.
Tenga un método para que al imprimir la cuenta salga por pantalla el
número de cuenta y su saldo.
Tenga un método para comparar cuentas, sabiendo que dos cuentas
serán iguales si sus números de cuenta son iguales.
Nota 1: Al imprimir por pantalla un Titular saldrá su nombre, apellidos y
edad.
Nota 2: Para comparar dos String utilizar su método compareTo(String)
que devuelve 0 si son iguales.
Desarrollar una clase llamada CuentaAhorro que:
Es una especialización de CuentaCorriente.
Tiene un atributo mas de tipo double (el interés).
Tiene un constructor con parámetros de tipo Titular, String, double y
double.
Tiene un constructor con parámetros de tipo Titular, String y double. El
saldo se inicializará a 15,3.
Tiene un constructor con parámetros de tipo Titular y String. El saldo se
inicializará a 15,3 y el interés a 2,5.
Tiene un getter para cada uno de los atributos.
Tiene un método calcularInteres que incremente el saldo según el interés.
Desarrollar la clase Practica6 que en su método main cree varias cuentas de
distinto tipo y trabaje con ellas.
Resolución:
Clase Titular
' Gambas class file
PRIVATE nombre AS String
PRIVATE apellidos AS String
PRIVATE edad AS Integer
PUBLIC SUB _new(param1 AS String, param2 AS String, param3 AS Integer)
nombre = param1
apellidos = param2
edad = param3
END
PUBLIC FUNCTION escribe() AS String
RETURN nombre & " " & apellidos & " " & Str$(edad)
END
Clase Cuenta Corriente:
' Gambas class file
PRIVATE titular1 AS NEW Titular("", "", 0) 'importante no olvidar parantesis
PRIVATE num AS String
PRIVATE saldo AS Float
PUBLIC SUB arg3(param1 AS titular, param2 AS String, param3 AS Float)
'titular1 = param1 ' es un parametro Titular
num = param2 ' es un parametro String
saldo = param3 'es un parametro float
END
PUBLIC SUB arg2(param1 AS titular, param2 AS String)
titular1 = param1 ' es un parametro Titular
num = param2 ' es un parametro String
saldo = 15.3 'es un parametro float
END
PUBLIC FUNCTION getTitular() AS Titular
RETURN titular1
END
PUBLIC FUNCTION getNum() AS String
RETURN num
END
PUBLIC FUNCTION getSaldo() AS Float
RETURN saldo
END
'setter
PUBLIC SUB setSaldo(param AS Float)
saldo = param
END
'otros métodos
PUBLIC SUB ingreso(param AS Float)
saldo += param
END
PUBLIC SUB reingreso(param AS Float)
saldo -= param
END
PUBLIC FUNCTION escribe() AS String
RETURN "CC: " & ME.getnum() & " " & Str$(ME.getSaldo())
END
PUBLIC FUNCTION comparar(o AS Object) AS String 'devuelvo una cadena deciendo si es o no igual
IF o.getnum() = ME.getNum() THEN
RETURN "si, so iguales, tienen el mismo Num"
ELSE
RETURN "no, no son iguales, distinto Num"
ENDIF
END
Clase: Cuenta de Ahorro
' Gambas class file
INHERITS CuentaCorriente
PRIVATE interes AS Float = 0
PUBLIC SUB arg4(param1 AS Titular, param2 AS String, param3 AS Float, param4 AS Float)
SUPER.arg3(param1, param2, param3)
interes = param4
END
PUBLIC SUB arg3(param1 AS titular, param2 AS String, param3 AS Float)
SUPER(param1, param2, 15.3)
interes = param3
END
PUBLIC SUB arg2(param1 AS titular, param2 AS String)
SUPER(param1, param2, 15.3)
interes = 2.5
END
' getters
PUBLIC FUNCTION getInteres() AS Float
RETURN interes
END
'otros métodos
PUBLIC SUB calcularInteres()
ME.setSaldo(ME.getSaldo() + ME.getSaldo() * interes)
END
Fmain:
' Gambas class file
PUBLIC SUB Form_Open()
DIM t1 AS NEW Titular("MiNombre", "MisApellidos", 10)
DIM c1 AS NEW CuentaCorriente
DIM t2 AS NEW Titular("OtroNombre", "OtrosApellidos", 43)
DIM c2 AS NEW CuentaAhorro
c1.arg2(t1, "123456789")
c2.arg4(t2, "123456781", 100.5, 1.7)
TextArea1.text = "\n" & " Titular 1: " & t1.escribe()
TextArea1.text &= "\n" & " Titular 2: " & t2.escribe()
TextArea1.text &= "\n" & " Cuenta 1: " & c1.escribe()
TextArea1.text &= "\n" & "Cuenta 2: " & c2.escribe()
c1.reingreso(1.2)
c2.ingreso(1.2)
TextArea1.text &= "\n" & "Cuenta 1:" & c1.escribe()
TextArea1.text &= "\n" & "Cuenta 2: " & c2.escribe()
c2.calcularInteres()
TextArea1.text &= "\n" & "Calculo de intereses, Cuenta 2: " & c2.escribe()
TextArea1.text &= "\n" & "¿con la misma cuenta?" & c2.comparar(c1)
TextArea1.text &= "\n" & "¿con la misma cuenta?" & c1.comparar(c2)
END
Pantallazo que se genera:
Saludos
Nota:
Código Fuente (en gambas3.1.1): Enlace
Código Fuente (en gambas3.1.1): Enlace