Gambas2 y OOP (V)
Trabajando con la
Herencia y Polimorfismo
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 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.
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 2y 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
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:
Nota:
Como veis es necesario definir las métodos aunque sean en blanco.
Clase LlamadaLocal:
Clase LlamadaProvincial:
Clase Fmain:
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
' 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