Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



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



domingo, 3 de julio de 2011

Gambas2 y OOP Trabajando con clases (04) Trabajando con la Herencia Practica 6


 Gambas2 y OOP (IV)
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.

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