Menu

Tradução

Português English Español Français

Units em Delphi

Neste artigo, vamos explorar a estrutura de uma unit, como organizar o código em múltiplas units e como importar e usar essas units em seus projetos.

 

Units em Delphi
Escritório com mesas e computadores – Units em Delphi

Introdução

No desenvolvimento de software, a organização e a modularização do código são fundamentais para criar aplicações robustas e fáceis de manter. Em Delphi, isso é conseguido por meio de units e módulos. Neste artigo, vamos explorar a estrutura de uma unit, como organizar o código em múltiplas units e como importar e usar essas units em seus projetos.

Estrutura de uma Unit em Delphi

Uma unit em Delphi é um arquivo que contém código-fonte, dividido em seções de interface e implementação. Ela permite que o código seja organizado de forma modular, facilitando a manutenção e a reutilização.

Estrutura Básica de uma Unit

Aqui está um exemplo básico da estrutura de uma unit em Delphi:

Delphi

unit UnitName;

interface

uses
  System.SysUtils, System.Classes;

type
  TMyClass = class
  private
    FField: Integer;
  public
    procedure DoSomething;
  end;

implementation

procedure TMyClass.DoSomething;
begin
  // Implementação do método
end;

end.
  

Explicação da Estrutura

  1. Declaração da Unit: A palavra-chave unit seguida pelo nome da unit (UnitName).
  2. Seção Interface: Inclui a palavra-chave interface, seguida pelas declarações uses e os tipos públicos, classes, procedimentos e funções. Esta seção declara o que é exposto para outras units.
  3. Seção Implementation: Começa com a palavra-chave implementation, onde os métodos e funções declarados na seção interface são implementados.
  4. Seção Initialization (Opcional): Esta seção, não presente no exemplo, pode conter código que é executado quando a unit é carregada.
  5. Seção Finalization (Opcional): Esta seção, também opcional, contém código que é executado quando a unit é descarregada.

Como Organizar Código em Múltiplos Units em Delphi

Dividir o código em múltiplas units é uma prática recomendada para manter a organização e a legibilidade do projeto. Aqui estão algumas dicas sobre como organizar seu código:

  1. Separação de Responsabilidades: Cada unit deve ter uma responsabilidade clara. Por exemplo, você pode ter uma unit para manipulação de dados, outra para a interface do usuário e outra para lógica de negócios.
  2. Reutilização de Código: Coloque o código reutilizável em units separadas. Isso facilita a manutenção e o reuso em diferentes partes do projeto ou até mesmo em outros projetos.
  3. Nomenclatura: Use nomes significativos para as units. Por exemplo, DataModuleUnit, BusinessLogicUnit, UserInterfaceUnit.

Exemplo Prático de Organização

Vamos criar um exemplo prático de organização de um projeto em múltiplas units.

Configurando o Ambiente

  1. Abrindo o Delphi: Abra o Delphi e crie um novo projeto VCL Forms Application.
  2. Configurando o Formulário Principal: Adicione os seguintes componentes ao formulário e salve como MainFormUnit:
    • TButton (Button1)

Criando um Data Module

  1. Criação do Data Module: Com o projeto aberto crie um novo Data Module.
    • Vá em File > New > Other... e selecione Data Module.
  2. Salve o Data Module como DataModuleUnit.
  3. Adicione 3 componentes (TADOConnection, TADOTable e TDataSource).

Criando uma Unit

Criação do Data Module: Com o projeto aberto crie um novo Data Module.

  1. Criação do Data Module: Com o projeto aberto crie um novo Data Module.
    • Vá em File > New > Unit -Delphi
  2. Salve a Unit como BusinessLogicUnit.

Unit: DataModuleUnit

Delphi

unit DataModuleUnit;

interface

uses
  System.SysUtils, System.Classes, Data.DB, Data.Win.ADODB;

type
  TDataModule1 = class(TDataModule)
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    DataSource1: TDataSource;
    procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  DataModule1: TDataModule1;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
  //Conecta ao banco de dados e abre a consulta da tabela
  DataModule1.ADOConnection1.Connected := False;
  DataModule1.ADOConnection1.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;User ID=root;Data Source=MySql ODBC 32 Ansi;Initial Catalog=world;';
  DataModule1.ADOConnection1.Connected := True;
  DataModule1.ADOTable1.Close;
  DataModule1.ADOTable1.Open;
end;

procedure TDataModule1.DataModuleDestroy(Sender: TObject);
begin
  DataModule1.ADOTable1.Close;   //Fecha a tabela ao destruir o data module
  DataModule1.ADOConnection1.Connected := False; //Fecha a conexão ao destruir o data module
end;

end.
  

Caso esteja com dificuldade em entender o Data Module e a conexão com banco de dados veja o post a seguir: https://www.codedelphi.com/2024/06/data-modules-em-delphi.html/

Unit: BusinessLogicUnit

Delphi

unit BusinessLogicUnit;

interface

uses
  DataModuleUnit;

type
  TBusinessLogic = class
  public
    function GetRecordCount: Integer;
  end;

implementation

function TBusinessLogic.GetRecordCount: Integer;
begin
  Result := DataModule1.ADOTable1.RecordCount;  //conta o número de registros da tabela ADOTable1
end;

end.
  

Unit: MainFormUnit

Delphi

unit MainFormUnit;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses BusinessLogicUnit;

procedure TForm1.Button1Click(Sender: TObject);
var
  BusinessLogic: TBusinessLogic;
begin
  BusinessLogic := TBusinessLogic.Create;
  try
    ShowMessage('Record Count: ' + IntToStr(BusinessLogic.GetRecordCount));
  finally
    BusinessLogic.Free;
  end;
end;

end.
  

Importação e Uso de Units

Para utilizar uma unit em outra, você deve declará-la na seção uses da unit que deseja fazer a importação.

Importação de Units

No exemplo acima, a MainFormUnit importa a BusinessLogicUnit na cláusula uses:

Delphi

uses BusinessLogicUnit;
  

Note que pode haver duas cláusulas uses, uma que fica logo a baixo de interface e serve para declarar as units de bibliotecas do próprio Delphi, e as units que serão utilizadas nas classes. A outra fica logo abaixo de implementation e serve para declarar as units de bibliotecas do próprio projeto e que não precisarão ser utilizadas nas declarações de variáveis das classes. Veja o exemplo na unit MainFormUnit, que declarou a unit BusinesLogUnit no segundo uses, pois ela vai ser instanciada em uma variável local dentro do Button1.

Uso de Units em Delphi

A MainFormUnit utiliza a BusinessLogicUnit para acessar a lógica de negócios e manipular os dados. Ao clicar no botão, a aplicação cria uma instância da classe TBusinessLogic, chama o método GetRecordCount e exibe o número de registros, por sua vez a BusinessLogicUnit utiliza a DataModuleUnit para acessar os dados da tabela.

Veja abaixo a ilustração do projeto utilizando Units:

Units em Delphi
Ilustração do projeto.

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/Units

Conclusão

Organizar o código em units é uma prática essencial no desenvolvimento Delphi, promovendo a modularidade, a reutilização e a facilidade de manutenção. As units em Delphi permitem separar responsabilidades, organizar o código de forma lógica e reutilizar componentes em diferentes partes do projeto. Neste artigo, vimos a estrutura básica de uma unit, como organizar o código em múltiplas units e como importar e usar essas units em seu projeto. Com esta abordagem, você pode criar aplicações mais estruturadas, legíveis e fáceis de manter.

Posts Relacionados



Nenhum comentário:

Postar um comentário

Recursividade em Delphi: Conceitos, Exemplos e Aplicações Práticas

Neste post, você aprenderá quando usar recursividade em Delphi, suas vantagens e desvantagens, além de um exemplo prático implementa...