✅ Objetivo: Dominar el uso de excepciones, el diseño de jerarquías de clases y la manipulación de objetos mediante referencias/punteros abstractos, con un enfoque especial en la separación de interfaz e implementación. ✅ Nivel: Medio-Avanzado ✅ Temas clave: excepciones, herencia, clases abstractas, polimorfismo, factorías, funciones virtuales, organización de código
- Excepciones en C++
- Clase Bureaucrat: límites y reglas
- Clase Form: validaciones y firma
- Clases derivadas y ejecución
- Intern y Factory Pattern
- Errores Comunes
- Buenas Prácticas
📘 ¿Qué son? Las excepciones son una forma de controlar errores en tiempo de ejecución sin usar códigos de error manuales.
🎯 En este módulo se crean clases de excepción personalizadas como GradeTooHighException o GradeTooLowException, derivadas de std::exception.
🧪 Ejemplo:
try
{
Bureaucrat b("John", 151); // ❌ Grade too low
}
catch (std::exception &e)
{
std::cerr << e.what() << std::endl;
}📘 ¿Qué contiene?
-
std::string const _name -
int _grade(rango válido: 1 a 150) -
Funciones:
incrementGrade()decrementGrade()signForm(Form&)executeForm(AForm&)
🔐 Cualquier operación que cause un grade fuera de rango lanza excepción.
🧪 Output esperado:
Alice, bureaucrat grade 5
Alice signed Form42📘 Características clave:
-
Atributos constantes: nombre, grados requeridos para firma/ejecución
-
Funciones:
beSigned(Bureaucrat&)getName(),getIsSigned(), etc.
GradeTooLowException.
🧪 Output esperado:
Alice couldn't sign Form42 because grade too low📘 AForm y sus derivados:
ShrubberyCreationForm: escribe árboles ASCII en<target>_shrubberyRobotomyRequestForm: 50% éxito robotomizando a<target>PresidentialPardonForm: indulta a<target>
🔁 Método común:
execute(Bureaucrat const &executor) const(verifica si el formulario está firmado y si el executor tiene suficiente rango)
🧪 Ejemplo de uso:
form->execute(bureaucrat);📄 Output:
Alice executed PresidentialPardonForm📘 Objetivo: crear formularios a partir de un string.
🧠 Intern::makeForm(nombre, target)
Devuelve un puntero a AForm adecuado según el nombre.
🎯 Usar array de structs o punteros a funciones para evitar if/else excesivo.
🧪 Output esperado:
Intern creates RobotomyRequestForm❌ Crear formularios con grados inválidos
❌ Ejecutar formularios no firmados
❌ Lógica complicada con if/else if/else
❌ Usar mal std::exception y no sobrescribir what()
❌ No aplicar Orthodox Canonical Form en clases requeridas
✅ Implementa Orthodox Canonical Form en todas las clases
✅ Usa referencias o punteros a AForm para polimorfismo
✅ Valida siempre rango de grade al construir o modificar
✅ Implementa correctamente el operador << para logs
✅ Utiliza try/catch para capturar excepciones controladamente
Este proyecto está bajo la licencia MIT. ⚖️📄🆓