Programación Orientada a Objetos en C++: Control de Caducidad y Cálculo de Precios con Herencia
Implementación de Clases y Métodos para Gestión de Productos y Caducidad en C++
A continuación se presenta la implementación de la lógica de fechas y cálculo de caducidad correspondiente al cierre de la clase base cProducto, junto con la derivación de clases mediante herencia para la aplicación de tarifas diferenciadas de impuestos (tarifas exentas y gravadas).
1. Métodos de Control de Fechas en la Clase Base (cProducto)
Estos métodos permiten descomponer la fecha de caducidad en día, mes y año, calcular los días transcurridos respecto a una fecha base (1 de enero del año 2000) y obtener el diferencial de días para determinar el vencimiento de un producto:
int getFechaCaducidadDia() {
return fechaCaducidad.getDia();
}
int getFechaCaducidadMes() {
return fechaCaducidad.getMes();
}
int getFechaCaducidadAnio() {
return fechaCaducidad.getAnio();
}
// Calcula la cantidad de días transcurridos desde el 1 de enero de 2000, usado como fecha de referencia
int diasDesdeY2k(cFecha oF) {
int acum = 0; // Acumulador de la cantidad de días
// Recorrido de los años transcurridos desde el 2000 hasta el año anterior a la fecha actual
for (int i = 2000; (i < oF.getAnio()); i++) {
// Suma la cantidad de días del año dependiendo de si es bisiesto o secular
acum += oF.bisiesto(i) ? 366 : 365;
}
// Recorre los meses desde enero hasta el mes anterior de la fecha recibida
for (int i = 1; (i < oF.getMes()); i++) {
// Suma la cantidad de días que tiene ese mes
acum += oF.diasMes(i, oF.getAnio());
}
// Aumenta los días del mes actual => Totaliza la cantidad de días de la fecha ingresada
acum += oF.getDia();
return acum;
} // Fin de diasDesdeY2k
// Determina la cantidad de días que un producto tiene de caducado
int diasCaducado(cFecha oFecActual) {
// Total de días de caducado de un producto
return (diasDesdeY2k(getFechaCaducidad()) - diasDesdeY2k(oFecActual));
} // Fin de diasCaducado
}; // Fin de la clase cProducto2. Clase Derivada: Productos con Tarifa 0% (cTarifa0)
Representa productos exentos de IVA. Hereda públicamente de cProducto e implementa la regla de negocio para fijar el precio de venta según el estado de caducidad:
- Producto caducado (días < 0): Su valor se fija en 0 para venta e inventario.
- Próximo a caducar (30 días o menos): Se comercializa al 50% del precio unitario base.
- Fecha lejana: Mantiene el precio unitario regular.
// Definición de la clase para productos exentos de IVA mediante herencia
class cTarifa0 : public cProducto {
public:
// Método que calcula el precio de venta, implementado según la tarifa
void calcularPrecioVenta(cFecha oF) {
int diasCad = diasCaducado(oF); // Calcula la cantidad de días restantes de caducidad
if (diasCad < 0) {
// El producto ya caducó: debe tener valor 0 para la venta e inventario
setPrecioVenta(0);
} else if (diasCad <= 30) {
// El producto está próximo a caducar: se vende a mitad de precio
setPrecioVenta(getPrecioUnitario() / 2);
} else {
// La fecha de caducidad aún es lejana: precio normal para productos tarifa 0
setPrecioVenta(getPrecioUnitario());
}
}
}; // Fin de la clase cTarifa03. Clase Derivada: Productos Gravados con IVA (cTarifa12)
Definición de la clase derivada para productos sujetos a la tarifa impositiva general (IVA):
// Definición de la clase para productos gravados con IVA mediante herencia
class cTarifa12 : public cProducto {
// Implementación de métodos y sobrecarga de calcularPrecioVenta correspondiente