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.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7QGIhEaJR4F-_ChqteznEWKxViCpZXpEIgesPOfgCn-uhJkqnL2UuPa0VaDryHePQMilbaWrLs7hD_dkBo8UMDQcbDygS0slvmHMPJF5Bi01GROiNlXZJYYTYNqZBRd5a5IVXR60ccz4/s640/Gravado.gif)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7QGIhEaJR4F-_ChqteznEWKxViCpZXpEIgesPOfgCn-uhJkqnL2UuPa0VaDryHePQMilbaWrLs7hD_dkBo8UMDQcbDygS0slvmHMPJF5Bi01GROiNlXZJYYTYNqZBRd5a5IVXR60ccz4/s640/Gravado.gif)
Exemplo: Download do exemplo
0 comentários:
Postar um comentário