Páginas

sábado, 9 de julio de 2011

Gambas2 y OOP Trabajando con clases (05) Trabajando con la #Herencia y #Polimorfismo #Práctica 7a


Gambas2 y OOP (V) 
Trabajando con la 
Herencia y Polimorfismo 
Práctica 7a


Ejercicio nº 7: Práctica de la herencia y polimorfismo
Desarrollar una aplicación de control de llamadas realizadas en una centralita
telefónica.
En la centralita se van registrando llamadas. Registrar una llamada consiste en
contabilizar el número de llamadas realizadas así como el coste total de todas
las llamadas realizadas.
La centralita mostrará por pantalla todas las llamadas según las vaya
registrando.
Existen dos tipos de llamadas:
• Las llamadas locales que cuestan 15 céntimos el segundo.
• Y las llamadas provinciales que dependiendo de la franja horaria en la
   que se realicen cuestan: 20 céntimos en franja 1, 25 céntimos en franja 2
    y 30 céntimos en franja 3, cada segundo.
Todas las llamadas tienen como datos el número origen de la llamada, el
número destino y su duración en segundos.
Desarrollar la clase Practica7a que en su método main cree una centralita,
registre varias llamadas de distinto tipo y le pida a la centralita un informe con el número total de llamadas y la facturación total realizada.


Solución: 
Clase Centralita
' Gambas class file

PRIVATE cont AS Integer = 0
PRIVATE acum AS Float = 0

PUBLIC FUNCTION getTotalLlamadas() AS Integer
RETURN cont
END

PUBLIC FUNCTION getTotalFacturado() AS Float
RETURN acum
END

PUBLIC FUNCTION registrarLlamada(param AS llamada) AS String
cont += 1
acum += param.calcularprecio()
RETURN param.escribir()
END

Clase Llamada:

' Gambas class file

PRIVATE numOrigen AS String
PRIVATE numDestino AS String
PRIVATE duracion AS Float

'constructor
PUBLIC SUB _new()
END

PUBLIC SUB definir(param1 AS String, param2 AS String, param3 AS Float)
numOrigen = param1
numDestino = param2
duracion = param3
END


'getters
PUBLIC FUNCTION getNumOrigen() AS String
RETURN numOrigen
END

PUBLIC FUNCTION getNumDestino() AS String
RETURN numDestino
END

PUBLIC FUNCTION getDuracion() AS Float
RETURN duracion
END

'metodos
PUBLIC FUNCTION calcularPrecio()
END

PUBLIC FUNCTION escribir() AS String

END
 

Nota:
Como veis es necesario definir las métodos aunque sean en blanco.

Clase LlamadaLocal:

' Gambas class file

INHERITS Llamada

PRIVATE precio AS Float = 15

'constructores


PUBLIC SUB definir(param1 AS String, param2 AS String, param3 AS Integer)
SUPER.definir(param1, param2, param3)

END




'metodos
PUBLIC FUNCTION calcularPrecio() AS Float
RETURN ME.getDuracion() * precio
END


PUBLIC FUNCTION escribir() AS String
RETURN "Llamada Local #" & ME.getNumOrigen() & "- #" & ME.getNumDestino() & " - " & Str$(ME.getDuracion()) & " segundos"
END


Clase LlamadaProvincial:

' Gambas class file
INHERITS Llamada

PRIVATE precio1 AS Float = 20
PRIVATE precio2 AS Float = 25
PRIVATE precio3 AS Float = 30
PRIVATE franja AS Integer = 0

'constructor
PUBLIC SUB definir(param1 AS String, param2 AS String, param3 AS Integer, param4 AS Integer)
SUPER.definir(param1, param2, param3)
franja = param4
END

'metodos
PUBLIC FUNCTION calcularPrecio() AS Float
IF franja = 1 THEN
RETURN ME.getduracion() * precio1
ELSE
IF franja = 2 THEN
RETURN ME.getduracion() * precio2
ELSE
RETURN ME.getduracion() * precio3
ENDIF
ENDIF
END


PUBLIC FUNCTION escribir() AS String
RETURN "Llamada Provincial #" & ME.getNumOrigen() & " -#" & ME.getNumDestino() & " -" & Str$(ME.getduracion()) & " seg - Franja: #" & franja
END



Clase Fmain:

' Gambas class file

PUBLIC SUB Form_Open()
DIM c AS NEW Centralita

DIM l1, l2, p1, p2 AS Llamada

l1 = NEW LlamadaLocal
l1.definir("911234567", "919876543", 67)
l2 = NEW LlamadaLocal
l2.definir("9198776543", "911234567", 43)

p1 = NEW LlamadaProvincial
p1.definir("911234567", "93987543", 12, 3)

p2 = NEW LlamadaProvincial
p2.definir("939876543", "911234567", 1, 1)

TextArea1.text &= "\n Listado de llamadas"
TextArea1.text &= "\n" & c.registrarLlamada(l1)

TextArea1.text &= "\n" & c.registrarLlamada(l2)

TextArea1.text &= "\n" & c.registrarLlamada(p1)

TextArea1.text &= "\n" & c.registrarLlamada(p2)


TextArea1.text &= "\n Numero total de llamada: " & Str$(c.getTotalLlamadas()) & "\n" &
"Total Facturado :" & Str$(c.getTotalFacturado())

END


Aqui os dejo una captura de pantalla y con la comprobación de la operaciones en una hoja de cálculo:

Y este es el enlace de descarga del código fuente:
http://manualjsb.googlecode.com/files/ejercicio7a-0.0.1.tar.gz


Saludos