GARANTIR DESCONTO

Fórum Herança Visual e Padronização. #563836

10/10/2016

0

Olá.

Estou aprendendo a usar um form como padrão e estou com dúvidas sobre polimorfismo. Meu projeto é um cadastro de estado, cidade e endereço, então criei um form padrão e uma classe padrão (implementada abaixo). Minha dúvida é: Como utilizar esses métodos (add, delete, update...) nas classes herdeiras? Sabendo que preciso armazenar todos os dados na memória e ter acesso a cada um deles. Eu tentei criar uma classe herdeira, mas não sei se implemento tudo novamente e crio arrays separadas para cada dado, array of TEstado, array of TCidade...

Espero que entendam minha dúvida.


unit uClassPadrao;

interface

uses SysUtils, Vcl.Dialogs;

type
  TPadrao = class
  private
    FCodigo: Integer;
  public
    property Codigo: Integer read FCodigo write FCodigo;
  end;

  TListaPadrao = class
    private
    public
      procedure Add(prObjeto: TPadrao); Virtual;
      function Read(prCodigo: Integer):Integer; Virtual;
      procedure Update(prObjeto: TPadrao); Virtual;
      procedure Delete(prCodigo: Integer); Virtual;
  end;

implementation

uses uHome;

{ TListaPadrao }

procedure TListaPadrao.Add(prObjeto: TPadrao);
begin
  SetLength(frHome.FListaPadrao, Length(frHome.FListaPadrao) + 1);
  frHome.FListaPadrao[Length(frHome.FListaPadrao)-1]:= prObjeto;

  frHome.FListaPadrao.
end;

procedure TListaPadrao.Delete(prCodigo: integer);
var
  wIndex: Integer;
  wSave: TPadrao;
begin
  wIndex:= prCodigo;
  wSave:= frHome.FListaPadrao[Length(frHome.FListaPadrao)-1];
  frHome.FListaPadrao[Length(frHome.FListaPadrao)-1]:=  frHome.FListaPadrao[wIndex];

  while (wIndex < Length(frHome.FListaPadrao)-2) do
    begin
      frHome.FListaPadrao[wIndex]:= frHome.FListaPadrao[wIndex+1];
      wIndex:= wIndex + 1;
    end;

  frHome.FListaPadrao[wIndex]:= wSave;
  SetLength(frHome.FListaPadrao, Length(frHome.FListaPadrao) -1);
end;

function TListaPadrao.Read(prCodigo: integer): integer;
var
  wCont: Integer;
  wCodigo: integer;
begin
  Result := -1;
  wCont:= 0;

  if frHome.FListaPadrao <> nil then
     begin
       while wCont < Length(frHome.FListaPadrao) do
          begin
            if frHome.FListaPadrao[wCont].Codigo = prCodigo then
               begin
                 Result:= wCont;
               end;

            wCont:= wCont + 1;
          end;
     end;
end;

procedure TListaPadrao.Update(prObjeto: TPadrao);
var
  wIndex: Integer;
begin
  wIndex := Read(TPadrao(prObjeto).Codigo);
  if (wIndex > -1) then
     frHome.FListaPadrao[wIndex] := prObjeto;
end;
end.

Luana Cardoso

Luana Cardoso

Responder

Posts

10/10/2016

Jones Granatyr

Opa! Não entendi muito bem sua dúvida, mas quando você faz um método do form principal, automaticamente as telas herdadas terão acesso a eles (a não ser que estejam na seção private)
Responder

Gostei + 0

11/10/2016

Luana Cardoso

Opa! Não entendi muito bem sua dúvida, mas quando você faz um método do form principal, automaticamente as telas herdadas terão acesso a eles (a não ser que estejam na seção private)


Minha dúvida é a seguinte, ali no método "Add" eu tenho um array de TPadrao armazenando objetos do tipo TPadrao, porém, quando armazeno os herdeiros nesse array apenas o código é armazenado. Quero saber como posso armazenar as demais informações do objeto como Fnome, FDescricao...
Responder

Gostei + 0

03/11/2016

Araujo Junior.

Acho que voce poderia dar uma pesquisada sobre Generics, pois TPadrao é um tipo especifico, quando voce define TPadrao para o método, não pode substuir por TEstado ou TMunicipio. Com o Generics voce passa o tipo que quiser.

Outra possibilidade seria voce sobescrever o método nas classes que herdam, declarando apenas os métodos na classe principal como abstratos:

procedure Add(prObjeto: TPadrao); Virtual; asbstract;
      function Read(prCodigo: Integer):Integer; Virtual; asbstract;
      procedure Update(prObjeto: TPadrao); Virtual; asbstract;
      procedure Delete(prCodigo: Integer); Virtual; asbstract;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar