Programación Orientada a Objetos en C++: Control de Caducidad y Cálculo de Precios con Herencia

Informática y Telecomunicaciones4,01 KB

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 cProducto

2. 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 cTarifa0

3. 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

Descargar

PDF Word HTML