Classe Delphi II

 

Pessoal, boa tarde.

Gostaria de continuar o assunto de orientação a objetos em Delphi.. então, dando sequência a esse assunto criei a seguinte situação

Empresa -> Possui MUITOS Produtos -> Possui MUITAS Imagens.

Resumindo, uma empresa possui vários produtos e cada produto pode ter várias imagens. Para isso criei as seguintes classes:
TEmpresas, TProdutos, TProdutoImagem.

O type “TEmpresas” possui um atributo chamado FProdutos (que é um array de TProdutos), a classe TProdutos possui um atributo chamado FImagem (que é um array de TProdutoImagem).

Estou utilizando arrays para esse exemplo, embora exista a possibilidade de utilizar outros métodos (como listas, por exemplo).

Depois de uma breve explicação, crie um TButton no seu form e no evento onclick dele faça igual no exemplo, realize um debug usando o DEBUG INSPECTOR no objeto oEmpresa.

Obs: Essa classe pode (e deve) ser melhorada, mas apenas para exemplificar criei os objetos dessa forma:


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, InvokeRegistry, Rio, SOAPHTTPClient;

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

TProdutoImagem = class
 FCodigo: string;
 FCaminho: String;
 end;

TArrayProdutosImagem = array of TProdutoImagem;

TProdutos = class
 Private
 FNome : String;
 FDescricao : String;
 FImagem : TArrayProdutosImagem;
 Protected
 procedure setNome(const Value: String);
 procedure setDescricao(const Value: String);
 procedure setImagem (const Value: TArrayProdutosImagem);
 function getImagem (Index: Integer): TArrayProdutosImagem;
 Public
 Property Nome: String READ FNome Write SetNome;
 Property Descricao: String READ FDescricao Write setDescricao;
 Property Imagem: TArrayProdutosImagem READ FImagem WRITE FImagem;
 end;

TArrayProdutos = array of TProdutos;

TEmpresas = class
 Private
 FNome : String;
 FLeft : Integer;
 FTop : Integer;
 FProdutos : TArrayProdutos;
 Protected
 procedure setNome(const Value: String);
 procedure setLeft(const Value: Integer);
 procedure setTop (const Value: Integer);
 //procedure setProdutos (const Value : TProdutos);
 Public
 Property Nome: String READ FNome Write SetNome;
 Property Left: Integer READ FLeft Write SetLeft;
 Property Top: Integer READ FTop Write SetTop;
 Property Produtos: TArrayProdutos READ FProdutos WRITE FProdutos;
 end;
var
 Form1: TForm1;

implementation

{$R *.dfm}

 
{ TProdutos }

function TProdutos.getImagem(Index: Integer): TArrayProdutosImagem;
begin
 result := FImagem;
end;

procedure TProdutos.setDescricao(const Value: String);
begin
 FDescricao := Value;
end;

procedure TProdutos.setImagem(const Value: TArrayProdutosImagem);
var
vIndex : integer;
begin
 SetLength(FImagem,Length(Value)+1);

for vIndex := 0 to Length(Value) - 1 do
 begin
 FImagem[vIndex].FCodigo := Value[vIndex].FCodigo;
 FImagem[vIndex].FCaminho := Value[vIndex].FCaminho;
 end;
end;

procedure TProdutos.setNome(const Value: String);
begin
 FNome := Value;
end;

{ TEmpresas }

procedure TEmpresas.setLeft(const Value: Integer);
begin
 FLeft := Value;
end;

procedure TEmpresas.setNome(const Value: String);
begin
 FNome := Value;
end;

procedure TEmpresas.setTop(const Value: Integer);
begin
 FTop := Value;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
oProdutoNotebook, oProdutoBicicleta : TProdutos;
oImagemNotebook1, oImagemNotebook2, oImagemBicicleta1, oImagemBicicleta2: TProdutoImagem;
oArrayProdutoImagem : TArrayProdutosImagem;
oArrayProdutos : TArrayProdutos;
oEmpresas : TEmpresas;
begin
 oProdutoNotebook := TProdutos.Create;
 oProdutoBicicleta := TProdutos.Create;

{CRIA O PRODUTO NOTEBOOK E INSERE DUAS IMAGENS PARA ELE}
 SetLength(oArrayProdutoImagem,2);

oImagemNotebook1 := TProdutoImagem.Create;
 oImagemNotebook1.FCodigo := 'Cod1';
 oImagemNotebook1.FCaminho := '/imagem/SonyVaio_1.jpg';

oImagemNotebook2 := TProdutoImagem.Create;
 oImagemNotebook2.FCodigo := 'Cod2';
 oImagemNotebook2.FCaminho := '/imagem/SonyVaio_2.jpg';

oArrayProdutoImagem[0] := oImagemNotebook1;
 oArrayProdutoImagem[1] := oImagemNotebook2;

oProdutoNotebook.FNome := 'Notebook';
 oProdutoNotebook.FDescricao := 'Sony Vaio';
 oProdutoNotebook.FImagem := oArrayProdutoImagem;

{CRIA O PRODUTO BICICLETA E INSERE DUAS IMAGENS PARA ELE}
 oImagemBicicleta1 := TProdutoImagem.Create;
 oImagemBicicleta1.FCodigo := 'Cod1';
 oImagemBicicleta1.FCaminho := '/imagem/Bicicleta_1.jpg';

oImagemBicicleta2 := TProdutoImagem.Create;
 oImagemBicicleta2.FCodigo := 'Cod2';
 oImagemBicicleta2.FCaminho := '/imagem/Bicicleta_2.jpg';

oArrayProdutoImagem := nil;
 SetLength(oArrayProdutoImagem,2);
 oArrayProdutoImagem[0] := oImagemBicicleta1;
 oArrayProdutoImagem[1] := oImagemBicicleta2;

oProdutoBicicleta.FNome := 'Bicicleta Caloi';
 oProdutoBicicleta.FDescricao := 'Caloi 18 Marchas';
 oProdutoBicicleta.FImagem := oArrayProdutoImagem;

{Adiciona os dois produtos ao array de produtos da empresa}
 SetLength(oArrayProdutos,2);
 oArrayProdutos[0] := oProdutoNotebook;
 oArrayProdutos[1] := oProdutoBicicleta;

oEmpresas := TEmpresas.Create;
 oEmpresas.Nome := 'Empresa Bruno Teste';
 oEmpresas.Left := 10;
 oEmpresas.Top := 90;
 oEmpresas.Produtos := oArrayProdutos;
 oEmpresas.Nome := 'Teste';

end;

end.

Confira meu perfil profissional no LinkedIn e faça parte da minha rede. https://lnkd.in/w9kyFR

Abs,
Bruno Fernando Antognolli.

Uma resposta em “Classe Delphi II

  1. Olá!
    Bruno! mto grato pelo seu Post sobre a Classe, agora como eu faço pra pegar os dados dentro dessa Classe onde tem o ArrayProdutos ou melhor oEmpresas.Produtos.

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.