Skip to content

Encapsulamiento en Delphi: Ejemplos Prácticos y Código Detallado

El encapsulamiento es uno de los principios fundamentales de la programación orientada a objetos (POO), y en Delphi, esta característica es clave para escribir código modular y fácilmente mantenible.

En este artículo, nos sumergiremos en el mundo del encapsulamiento en Delphi, proporcionando explicaciones detalladas y ejemplos de código para ilustrar cómo aprovechar al máximo esta poderosa técnica.

¿Qué es el Encapsulamiento?

Antes de sumergirnos en ejemplos de código, es esencial comprender qué es el encapsulamiento.

En términos simples, el encapsulamiento implica ocultar los detalles internos de una clase y proporcionar una interfaz clara para interactuar con ella. Esto promueve la modularidad y facilita el cambio interno sin afectar el resto del código.

Ejemplo de Encapsulamiento Básico en Delphi

unit Cliente;

interface

type
  TCliente = class
  private
    FNombre: string;
    FEdad: Integer;
  public
    property Nombre: string read FNombre write FNombre;
    property Edad: Integer read FEdad write FEdad;
  end;

implementation

end.

En este ejemplo, la clase TCliente encapsula los detalles internos (nombre y edad) utilizando propiedades.

El acceso a estos campos se realiza a través de propiedades públicas, permitiendo un control más preciso sobre su uso.

Métodos y Encapsulamiento

El encapsulamiento no se limita solo a las propiedades; también se aplica a los métodos de una clase.

Definir métodos como privados o protegidos y proporcionar métodos públicos para interactuar con ellos es una práctica común.

Ejemplo de Encapsulamiento con Métodos en Delphi

unit Calculadora;

interface

type
  TCalculadora = class
  private
    function Sumar(A, B: Integer): Integer;
  public
    function RealizarOperacionSuma(A, B: Integer): Integer;
  end;

implementation

function TCalculadora.Sumar(A, B: Integer): Integer;
begin
  Result := A + B;
end;

function TCalculadora.RealizarOperacionSuma(A, B: Integer): Integer;
begin
  // Puedes realizar operaciones adicionales aquí
  Result := Sumar(A, B);
end;

end.

En este caso, el método Sumar está encapsulado, siendo privado, y solo se puede acceder a él a través del método público RealizarOperacionSuma.

Encapsulamiento y Herencia

El encapsulamiento también juega un papel crucial al trabajar con la herencia.

Es importante proteger los detalles internos de las clases base para evitar posibles problemas en las clases derivadas.

Ejemplo de Encapsulamiento en Herencia

unit Vehiculo;

interface

type
  TVehiculo = class
  private
    FVelocidad: Integer;
  public
    property Velocidad: Integer read FVelocidad write FVelocidad;
  end;

  TCoche = class(TVehiculo)
  public
    procedure Acelerar;
  end;

implementation

procedure TCoche.Acelerar;
begin
  // Lógica para acelerar el coche
end;

end.

Aquí, la clase base TVehiculo encapsula la velocidad, y la clase derivada TCoche puede acceder a esta propiedad de manera controlada.

Encapsulamiento y Propiedades Calculadas

En Delphi, las propiedades calculadas son una forma poderosa de encapsular lógica adicional dentro de las propiedades de una clase.

Ejemplo de Propiedades Calculadas en Delphi

unit Circulo;

interface

type
  TCirculo = class
  private
    FRadio: Double;
  public
    property Radio: Double read FRadio write FRadio;
    property Area: Double read GetArea;
  end;

implementation

function TCirculo.GetArea: Double;
begin
  Result := Pi * Power(FRadio, 2);
end;

end.

En este ejemplo, la propiedad Area está calculada y encapsula la lógica para calcular el área del círculo.

Encapsulamiento y Directivas de Visibilidad

Las directivas de visibilidad en Delphi, como private, protected, public y published, son herramientas fundamentales para aplicar encapsulamiento.

Definir la visibilidad adecuada asegura que los detalles internos estén protegidos.

Ejemplo de Directivas de Visibilidad en Delphi

unit Caja;

interface

type
  TCaja = class
  private
    FContenido: string;
  public
    constructor Create(AContenido: string);
    function ObtenerContenido: string;
  end;

implementation

constructor TCaja.Create(AContenido: string);
begin
  FContenido := AContenido;
end;

function TCaja.ObtenerContenido: string;
begin
  Result := FContenido;
end;

end.

Aquí, la variable FContenido está declarada como privada, asegurando que solo sea accesible dentro de la clase TCaja.

El encapsulamiento en Delphi es una herramienta esencial para escribir código modular y mantenible.

Desde la encapsulación de propiedades y métodos hasta su aplicación en la herencia y el uso de directivas de visibilidad, entender y aplicar este principio mejora la calidad y la flexibilidad del código.