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

  1. Excepciones: Eventos que ocurren durante la ejecución de un programa y que interrumpen el flujo normal de instrucciones.
  2. Try...Except: Bloque utilizado para capturar y manejar excepciones.
  3. Raise: Instrucción utilizada para lanzar una excepción.
  4. 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.

type
  EMyCustomException = class(Exception)
  end;

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

  1. Define una clase TBankAccount con un método Withdraw que lanza una excepción EInsufficientFunds si el saldo es insuficiente.
  2. Implementa el método Withdraw y 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

Módulo 2: Estructuras de Control y Procedimientos

Módulo 3: Trabajando con Datos

Módulo 4: Programación Orientada a Objetos

Módulo 5: Características Avanzadas de Delphi

Módulo 6: Desarrollo de GUI con VCL y FMX

Módulo 7: Desarrollo Web y Móvil

Módulo 8: Mejores Prácticas y Patrones de Diseño

Módulo 9: Proyecto Final

© Copyright 2024. Todos los derechos reservados