Projeto POO Iniciante


Esse será um projeto bem simples, para entender mais a base do projeto, apos isso vamos começar a colocar posts mais detalhados.

Crie um novo projeto, renome o TForm para FPrincipal, salve a Unit com o nome de UPrincipal e o projeto com o nome de Sistema. Selecione o menu File > New > Unit – Delphi e renomeio esta Unit com o nome de UClasses.

Constructor cria a instância do objeto;
Destructor destrói o objeto instanciado liberando a memória;

unit UClasses;

interface

type
  TPessoa = class
    Nome: string;{Atributos}
    Fone: string;{Atributos}
    function Verificar: Boolean;

    constructor Create; {Não é obrigatório}
    destructor Destroy; {Não é obrigatório}
  end;

Sobre a declaração de qualquer classe (Avaliar, Create, Destroy) pressione Ctrl+Shift+C:
implementation

{ TPessoa }

uses SysUtils;

procedure TPessoa.Verificar;
begin
  if Trim(Nome) = EmptyWideStr then
    raise Exception.Create('Falta informar o nome');
  if Trim(Fone) = EmptyWideStr then
    raise Exception.Create('Falta informar o fone');
end;

constructor TPessoa.Create;
begin
  Nome := 'Novo';
  Fone := 'Novo';
end;

destructor TPessoa.Destroy;
begin
  Nome := '';
  Fone := '';
end;

end.

Volte para o FPrincipal, declare UClasses na cláusula uses da seção implementation, coloque os componentes a baixo em tela: 

O TForm ficara mais ou menos assim:

No evento de OnClick do botão BtnAdicionar coloque o código abaixo
procedure TFPrincipal.BtnAdicionarClick(Sender: TObject);
var
  lCliente: TPessoa;
begin
  lCliente := TPessoa.Create;
  lCliente.Nome := edNome.Text;
  lCliente.Fone := edFone.Text;
  lCliente.Verificar;
  ShowMessage('Adicionado:' + sLineBreak + lCliente.Nome + sLineBreak + lCliente.Fone);
end;

Voltamos agora para a UClasses e vamos herdar a classe TPessoa, com isso criaremos o TTransportadora e TFornecedor.
No TFornecedor criaremos o Atributo CNPJ sem validação por enquanto, e no TTransportadora colocaremos o atributo Placa com a obrigação do preenchimento.

unit UClasses;

interface

type
  TPessoa = class
    Nome: string;{Atributos}
    Fone: string;{Atributos}
    procedure Verificar;
    constructor Create; {Não é obrigatório}
    destructor Destroy; {Não é obrigatório}
  end;

  TFornecedor = class(TPessoa)
    CNPJ: string;{Atributos}
  end;

  TTransportadora = class(TPessoa)
    Placa: string;{Atributos}
    procedure Verificar;
  end;

implementation

{ TPessoa }

uses SysUtils;

procedure TPessoa.Verificar;
begin
  if Trim(Nome) = EmptyWideStr then
    raise Exception.Create('Falta informar o nome');
  if Trim(Fone) = EmptyWideStr then
    raise Exception.Create('Falta informar o fone');
end;

constructor TPessoa.Create;
begin
  Nome := 'Novo';
  Fone := 'Novo';
end;

destructor TPessoa.Destroy;
begin
  Nome := '';
  Fone := '';
end;

{ TTransportadora }

procedure TTransportadora.Verificar;
begin
  if Trim(Placa) = EmptyWideStr then
    raise Exception.Create('Falta informar o CNPJ');
end;

end.

Voltando para a tela UPrincipal vamos colocar mais componentes para que fique desta forma:

Novamente volte para o UPrincipal  mude os eventos OnClick dos TButton para:
procedure TFPrincipal.BtnAdicionarClick(Sender: TObject);
var
  lCliente: TPessoa;
begin
  lCliente := TPessoa.Create;
  lCliente.Nome := edNome.Text;
  lCliente.Fone := edFone.Text;
  lCliente.Verificar;
  ShowMessage('Adicionado:' + sLineBreak + lCliente.Nome + sLineBreak + lCliente.Fone);
end;

procedure TFPrincipal.BtnAdicionarFornecedorClick(Sender: TObject);
var
  lFornecedor: TFornecedor;
begin
  lFornecedor := TFornecedor.Create;
  lFornecedor.Nome := edNomeFornecedor.Text;
  lFornecedor.Fone := edFoneFornecedor.Text;
  lFornecedor.CNPJ := edCNPJ.Text;
  lFornecedor.Verificar;
  ShowMessage('Adicionado:' + sLineBreak + lFornecedor.Nome + sLineBreak + lFornecedor.Fone + SlineBreaK + lFornecedor.CNPJ);
end;

procedure TFPrincipal.BtnAdicionarTransportadoraClick(Sender: TObject);
var
  lTransportadora: TTransportadora;
begin
  lTransportadora := TTransportadora.Create;
  lTransportadora.Nome := edNomeTrans.Text;
  lTransportadora.Fone := edFoneTrans.Text;
  lTransportadora.Placa := edPlaca.Text;
  lTransportadora.Verificar;
  ShowMessage('Adicionado:' + sLineBreak + lTransportadora.Nome + sLineBreak + lTransportadora.Fone + SlineBreaK + lTransportadora.Placa);
end;

Métodos virtuais
unit UClasses;

interface

type
  TPessoa = class
    Nome: string;{Atributos}
    Fone: string;{Atributos}
    procedure Verificar; virtual;
    constructor Create; virtual;{Não é obrigatório}
    destructor Destroy; virtual;{Não é obrigatório}
  end;

  TFornecedor = class(TPessoa)
    CNPJ: string;{Atributos}
    procedure Verificar; override;
  end;

  TTransportadora = class(TPessoa)
    Placa: string;{Atributos}
    procedure Verificar; override;
  end;

implementation

{ TPessoa }

uses SysUtils;

procedure TPessoa.Verificar;
begin
  if Trim(Nome) = EmptyWideStr then
    raise Exception.Create('Falta informar o nome');
  if Trim(Fone) = EmptyWideStr then
    raise Exception.Create('Falta informar o fone');
end;

constructor TPessoa.Create;
begin
  Nome := 'Novo';
  Fone := 'Novo';
end;

destructor TPessoa.Destroy;
begin
  Nome := '';
  Fone := '';
end;

{ TTransportadora }

procedure TTransportadora.Verificar;
begin
  inherited;
  if Trim(Placa) = EmptyWideStr then
    raise Exception.Create('Falta informar o Placa');
end;

{ TFornecedor }

procedure TFornecedor.Verificar;
begin
  if Trim(Nome) = EmptyWideStr then
    raise Exception.Create('Falta informar o nome');
end;

end.

Note que utilizamos os métodos virtual e override;
Onde colocamos o método virtual e onde podemos sobre escrever a classe no nosso caso o Verificar

Em TFornecedores o método Verificar foi sobreposto sem a utilização dos comandos da classe TPessoa, colocamos a validação em cima de apenas o Nome.
Em TTransportadora reutilizamos os métodos da outra classe e adicionamos a validação por CNPJ, conseguimos reaproveitar as validações pelo inherited que faz passar no método "pai" antes do novo código adicionado.

0 comentários:

Postar um comentário