En este tema, aprenderemos cómo manejar excepciones en la Programación Orientada a Objetos (POO) utilizando Delphi/Object Pascal. El manejo adecuado de excepciones es crucial para crear aplicaciones robustas y confiables. Veremos cómo definir, lanzar y capturar excepciones en un contexto orientado a objetos.
Conceptos Clave
- Excepciones: Eventos que ocurren durante la ejecución de un programa y que interrumpen el flujo normal de instrucciones.
- Try...Except: Bloque utilizado para capturar y manejar excepciones.
- Raise: Instrucción utilizada para lanzar una excepción.
- Clases de Excepción: Clases que representan diferentes tipos de errores.
Definición de Clases de Excepción
En Delphi, las excepciones son objetos de clases derivadas de Exception. Puedes definir tus propias clases de excepción para manejar errores específicos.
Lanzar Excepciones
Para lanzar una excepción, utilizamos la instrucción raise.
procedure DoSomething;
begin
if SomeCondition then
raise EMyCustomException.Create('An error occurred');
end;Capturar Excepciones
Para capturar y manejar excepciones, utilizamos el bloque try...except.
procedure HandleException;
begin
try
DoSomething;
except
on E: EMyCustomException do
ShowMessage('Caught custom exception: ' + E.Message);
on E: Exception do
ShowMessage('Caught general exception: ' + E.Message);
end;
end;Ejemplo Práctico
Vamos a crear un ejemplo práctico que ilustre el manejo de excepciones en un contexto orientado a objetos.
Definición de Clases
type
TCalculator = class
public
function Divide(A, B: Integer): Double;
end;
EDivisionByZero = class(Exception)
end;Implementación de Métodos
function TCalculator.Divide(A, B: Integer): Double;
begin
if B = 0 then
raise EDivisionByZero.Create('Division by zero is not allowed');
Result := A / B;
end;Uso de la Clase y Manejo de Excepciones
procedure TestCalculator;
var
Calculator: TCalculator;
Result: Double;
begin
Calculator := TCalculator.Create;
try
try
Result := Calculator.Divide(10, 0);
ShowMessage('Result: ' + FloatToStr(Result));
except
on E: EDivisionByZero do
ShowMessage('Error: ' + E.Message);
on E: Exception do
ShowMessage('General error: ' + E.Message);
end;
finally
Calculator.Free;
end;
end;Ejercicio Práctico
Ejercicio
- Define una clase
TBankAccountcon un métodoWithdrawque lanza una excepciónEInsufficientFundssi el saldo es insuficiente. - Implementa el método
Withdrawy maneja la excepción en un procedimiento separado.
Solución
Definición de Clases
type
TBankAccount = class
private
FBalance: Double;
public
constructor Create(InitialBalance: Double);
procedure Withdraw(Amount: Double);
property Balance: Double read FBalance;
end;
EInsufficientFunds = class(Exception)
end;Implementación de Métodos
constructor TBankAccount.Create(InitialBalance: Double);
begin
FBalance := InitialBalance;
end;
procedure TBankAccount.Withdraw(Amount: Double);
begin
if Amount > FBalance then
raise EInsufficientFunds.Create('Insufficient funds');
FBalance := FBalance - Amount;
end;Manejo de Excepciones
procedure TestBankAccount;
var
Account: TBankAccount;
begin
Account := TBankAccount.Create(100);
try
try
Account.Withdraw(150);
ShowMessage('Withdrawal successful. New balance: ' + FloatToStr(Account.Balance));
except
on E: EInsufficientFunds do
ShowMessage('Error: ' + E.Message);
on E: Exception do
ShowMessage('General error: ' + E.Message);
end;
finally
Account.Free;
end;
end;Conclusión
En esta sección, hemos aprendido cómo manejar excepciones en un contexto orientado a objetos utilizando Delphi/Object Pascal. Hemos visto cómo definir, lanzar y capturar excepciones, y hemos implementado un ejemplo práctico para reforzar estos conceptos. El manejo adecuado de excepciones es esencial para crear aplicaciones robustas y confiables, y es una habilidad fundamental para cualquier programador.
En el siguiente módulo, profundizaremos en las características avanzadas de Delphi, incluyendo genéricos, multihilo y desarrollo basado en componentes.
Curso de Programación en Delphi/Object Pascal
Módulo 1: Introducción a Delphi/Object Pascal
- Introducción a Delphi y Object Pascal
- Configuración del Entorno de Desarrollo
- Primera Aplicación en Delphi
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
Módulo 2: Estructuras de Control y Procedimientos
- Sentencias Condicionales
- Bucles e Iteración
- Procedimientos y Funciones
- Ámbito y Ciclo de Vida de las Variables
- Manejo de Errores y Depuración
Módulo 3: Trabajando con Datos
- Arreglos y Cadenas
- Registros y Conjuntos
- Tipos Enumerados y Subrangos
- Manejo de Archivos
- Acceso a Bases de Datos
Módulo 4: Programación Orientada a Objetos
- Introducción a la POO
- Clases y Objetos
- Herencia y Polimorfismo
- Interfaces y Clases Abstractas
- Manejo de Excepciones en POO
Módulo 5: Características Avanzadas de Delphi
- Genéricos y Colecciones
- Multihilo y Programación Paralela
- Desarrollo Basado en Componentes
- Biblioteca de Tiempo de Ejecución de Delphi (RTL)
- Técnicas Avanzadas de Depuración
Módulo 6: Desarrollo de GUI con VCL y FMX
- Introducción a VCL
- Creación de Formularios y Controles
- Programación Orientada a Eventos
- Introducción a FireMonkey (FMX)
- Desarrollo Multiplataforma con FMX
Módulo 7: Desarrollo Web y Móvil
- Desarrollo Web con Delphi
- Servicios RESTful
- Desarrollo Móvil con Delphi
- Despliegue de Aplicaciones Móviles
- Integración con Servicios Web
Módulo 8: Mejores Prácticas y Patrones de Diseño
- Organización del Código y Documentación
- Patrones de Diseño en Delphi
- Técnicas de Refactorización
- Pruebas Unitarias y Desarrollo Basado en Pruebas
- Optimización del Rendimiento
