
Índice
Introdução
Nesse post iremos aprender sobre Encapsulamento em Delphi dentro da Orientação a Objetos. Iremos pontuar o conceito, benefícios e exemplo prático com código fonte completo, para elevar seus conhecimentos em Delphi para outros nível.
Conceito, Benefícios e Exemplo Prático
Encapsulamento é um dos conceitos fundamentais da programação orientada a objetos (POO). Ele envolve o agrupamento de dados e métodos que operam sobre esses dados dentro de uma única unidade chamada classe, enquanto protege esses dados de acesso indevido. Neste artigo, exploraremos o conceito de encapsulamento em Delphi, o uso de modificadores de acesso, os benefícios do encapsulamento e apresentaremos um exemplo prático para ilustrar seu uso.
Conceito de Encapsulamento em Delphi
Encapsulamento refere-se à técnica de esconder os detalhes internos de um objeto e expor apenas o que é necessário através de uma interface bem definida. Isso significa que os dados dentro de uma classe são acessíveis apenas através de métodos públicos da mesma classe, enquanto os detalhes de implementação são mantidos privados ou protegidos.
Modificadores de Acesso: Public, Private, Protected
Delphi utiliza modificadores de acesso para controlar a visibilidade e o acesso aos membros de uma classe. Aqui estão os principais modificadores:
- Public: Membros declarados como
public
são acessíveis de qualquer lugar. - Private: Membros declarados como
private
são acessíveis apenas dentro da classe onde foram declarados. - Protected: Membros declarados como
protected
são acessíveis dentro da própria classe e em classes derivadas.
Benefícios do Encapsulamento
- Segurança: Protege os dados internos da classe contra modificações indevidas.
- Manutenção: Facilita a manutenção do código, permitindo que a implementação interna seja alterada sem afetar outras partes do sistema.
- Reutilização: Promove a reutilização de código ao criar componentes modulares e independentes.
- Facilidade de Uso: Simplifica o uso da classe, expondo apenas os métodos e propriedades necessários.
Exemplo Prático com Código
Vamos criar uma classe TContaBancaria
para demonstrar o uso do encapsulamento em Delphi. Esta classe terá atributos privados para o saldo e o número da conta, e métodos públicos para depositar, sacar e verificar o saldo.
Configurando o Ambiente
- Abrindo o Delphi: Abra o Delphi e crie um novo projeto VCL Forms Application.
- Configurando o Formulário Principal: Adicione o seguinte componente ao formulário:
- TButton (btnExibirDados): Para executar exibir os dados da conta bancária.
Definindo a Classe TContaBancaria
type TContaBancaria = class private FNumeroConta: String; FSaldo: Double; procedure SetNumeroConta(const Value: String); procedure SetSaldo(const Value: Double); public constructor Create(NumeroConta: String; SaldoInicial: Double); procedure Depositar(Valor: Double); procedure Sacar(Valor: Double); function GetSaldo: Double; function GetNumeroConta: String; end;
Atributos Privados
FNumeroConta: String;
Este é um atributo privado que armazena o número da conta bancária.FSaldo: Double;
Este é um atributo privado que armazena o saldo da conta bancária.
Os atributos FNumeroConta
e FSaldo
são privados, o que significa que eles não podem ser acessados diretamente de fora da classe. Para acessar e modificar esses atributos, usamos métodos públicos.
Métodos Privados
procedure SetNumeroConta(const Value: String);
procedure SetSaldo(const Value: Double);
Os métodos SetNumeroConta
e SetSaldo
são privados e são usados internamente para definir os valores dos atributos FNumeroConta
e FSaldo
, respectivamente.
Métodos Públicos
constructor Create(NumeroConta: String; SaldoInicial: Double);
O construtorCreate
é um método especial que inicializa uma nova instância da classeTContaBancaria
. Ele recebe como parâmetros o número da conta e o saldo inicial.procedure Depositar(Valor: Double);
O métodoDepositar
adiciona um valor ao saldo da conta, desde que o valor seja positivo.procedure Sacar(Valor: Double);
O métodoSacar
subtrai um valor do saldo da conta, desde que o valor seja positivo e não exceda o saldo disponível.function GetSaldo: Double;
O métodoGetSaldo
retorna o saldo atual da conta.function GetNumeroConta: String;
O métodoGetNumeroConta
retorna o número da conta bancária.
Implementação dos Métodos
implementation constructor TContaBancaria.Create(NumeroConta: String; SaldoInicial: Double); begin FNumeroConta := NumeroConta; FSaldo := SaldoInicial; end; procedure TContaBancaria.Depositar(Valor: Double); begin if Valor > 0 then FSaldo := FSaldo + Valor; end; procedure TContaBancaria.Sacar(Valor: Double); begin if (Valor > 0) and (Valor <= FSaldo) then FSaldo := FSaldo - Valor; end; procedure TContaBancaria.SetNumeroConta(const Value: String); begin FNumeroConta := Value; end; procedure TContaBancaria.SetSaldo(const Value: Double); begin if Value >= 0 then FSaldo := Value; end; function TContaBancaria.GetSaldo: Double; begin Result := FSaldo; end; function TContaBancaria.GetNumeroConta: String; begin Result := FNumeroConta; end;
Construtor
O construtor Create
inicializa a instância da classe TContaBancaria
com o número da conta e o saldo inicial fornecidos como parâmetros:
constructor TContaBancaria.Create(NumeroConta: String; SaldoInicial: Double); begin FNumeroConta := NumeroConta; FSaldo := SaldoInicial; end;
Métodos Públicos
Depositar
: Adiciona um valor ao saldo, se o valor for positivo:
procedure TContaBancaria.Depositar(Valor: Double); begin if Valor > 0 then FSaldo := FSaldo + Valor; end;
Sacar
: Subtrai um valor do saldo, se o valor for positivo e não exceder o saldo disponível:
procedure TContaBancaria.Sacar(Valor: Double); begin if (Valor > 0) and (Valor <= FSaldo) then FSaldo := FSaldo - Valor; end;
SetNumeroConta
: Define o número da conta:
procedure TContaBancaria.SetNumeroConta(const Value: String); begin FNumeroConta := Value; end;
SetSaldo
: Define o saldo da conta, se o valor for positivo:
procedure TContaBancaria.SetSaldo(const Value: Double); begin if Value >= 0 then FSaldo := Value; end;
GetSaldo
eGetNumeroConta
: Retornam o saldo e o número da conta, respectivamente:
function TContaBancaria.GetSaldo: Double; begin Result := FSaldo; end; function TContaBancaria.GetNumeroConta: String; begin Result := FNumeroConta; end;
Utilizando a Classe TContaBancaria
Vamos ver como utilizar a classe TContaBancaria
em um formulário Delphi:
procedure TForm1.btnExibirDadosClick(Sender: TObject); var Conta: TContaBancaria; begin Conta := TContaBancaria.Create('123456', 1000.00); ShowMessage('Número da Conta: ' + Conta.GetNumeroConta); ShowMessage('Saldo Inicial: ' + FloatToStr(Conta.GetSaldo)); Conta.Depositar(500.00); ShowMessage('Saldo após depósito: ' + FloatToStr(Conta.GetSaldo)); Conta.Sacar(200.00); ShowMessage('Saldo após saque: ' + FloatToStr(Conta.GetSaldo)); end;
Neste exemplo, criamos uma instância de TContaBancaria
e realizamos algumas operações:
- Criamos uma conta com o número ‘123456’ e saldo inicial de 1000.00.
- Mostramos o número da conta e o saldo inicial.
- Depositamos 500.00 na conta e mostramos o saldo atualizado.
- Sacamos 200.00 da conta e mostramos o saldo final.
Código completo
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TContaBancaria = class private FNumeroConta: String; FSaldo: Double; procedure SetNumeroConta(const Value: String); procedure SetSaldo(const Value: Double); public constructor Create(NumeroConta: String; SaldoInicial: Double); procedure Depositar(Valor: Double); procedure Sacar(Valor: Double); function GetSaldo: Double; function GetNumeroConta: String; end; TForm1 = class(TForm) Button1: TButton; procedure btnExibirDadosClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TContaBancaria } constructor TContaBancaria.Create(NumeroConta: String; SaldoInicial: Double); begin FNumeroConta := NumeroConta; FSaldo := SaldoInicial; end; procedure TContaBancaria.Depositar(Valor: Double); begin if Valor > 0 then FSaldo := FSaldo + Valor; end; function TContaBancaria.GetNumeroConta: String; begin Result := FNumeroConta; end; function TContaBancaria.GetSaldo: Double; begin Result := FSaldo; end; procedure TContaBancaria.Sacar(Valor: Double); begin if (Valor > 0) and (Valor <= FSaldo) then FSaldo := FSaldo - Valor; end; procedure TContaBancaria.SetNumeroConta(const Value: String); begin FNumeroConta := Value; end; procedure TContaBancaria.SetSaldo(const Value: Double); begin if Value >= 0 then FSaldo := Value; end; { TForm1 } procedure TForm1.btnExibirDadosClick(Sender: TObject); var Conta: TContaBancaria; begin Conta := TContaBancaria.Create('123456', 1000.00); ShowMessage('Número da Conta: ' + Conta.GetNumeroConta); ShowMessage('Saldo Inicial: ' + FloatToStr(Conta.GetSaldo)); Conta.Depositar(500.00); ShowMessage('Saldo após depósito: ' + FloatToStr(Conta.GetSaldo)); Conta.Sacar(200.00); ShowMessage('Saldo após saque: ' + FloatToStr(Conta.GetSaldo)); end; end.
Veja abaixo como ficou a ilustração do projeto utilizando Encapsulamento:

Código fonte do exemplo
Você pode fazer o download do exemplo do projeto através do repositório do github:
https://github.com/Gisele-de-Melo/Encapsulamento
Conclusão
Este exemplo demonstra como usar o encapsulamento para proteger e controlar o acesso aos dados de uma classe em Delphi. Usamos modificadores de acesso para definir quais membros são públicos e quais são privados. Isso ajuda a garantir que os dados internos de uma classe sejam manipulados de maneira controlada, mantendo a integridade dos dados e facilitando a manutenção do código. Ao aplicar essas técnicas, você pode criar aplicações mais robustas e fáceis de manter.
O encapsulamento é uma prática essencial na programação orientada a objetos que melhora a segurança, manutenção, reutilização e facilidade de uso do código. Em Delphi, o uso de modificadores de acesso como public
, private
e protected
permite controlar a visibilidade dos membros da classe, protegendo os dados internos e expondo apenas os métodos necessários. O exemplo prático com a classe TContaBancaria
demonstra como aplicar o encapsulamento em um projeto Delphi.
Ao adotar essas técnicas e práticas, você pode desenvolver aplicações mais robustas e eficientes. Continue explorando e aprimorando suas habilidades em Delphi para criar soluções ainda mais sofisticadas e bem estruturadas.