Apesar de ter começado estudar linguagens de programação em 1994/96 na oportunidade em que cursei Técnico em Processamento de Dados (Clipper e Pascal) e depois de 1997-2000 na ocasião em que cursei Bacharelado em Informática (Delphi, SQL e afins), e mais de uma década atuando como profissional em engenharia de sistemas, eu não simpatizava muito com a Orientação a Objetos, pois não havia encontrado material suficeinte nem explicações práticas que tornasse simples entender e dominar OO.

Há dois anos, venho assinando e lendo a Revista ClubeDelphi e Java Magazine e, com o advento da Nota Fiscal Eletronica, oportunidade em que adotei e estudei o componente ACBrNFePCN do ACBr conciliado a era das vídeo-aulas, estou conseguindo criar algumas classes e enterder vários conceitos de OO.

Mas algumas coisas me intrigavam: além de ser muito difícil ler e entender o código da VCL, como, por exemplo, o Create do TObjetc poderia instanciar um objeto e alocar memória se esse método/procedimento não contém nenhum comando entre o bloco begin end?

Tomado por esta curiosidade comecei perguntar em fóruns e pesguisar na internet se haveria como acompanhar a depuração dentro da VCL linha por linha, ou seja, usando a tecla F7.

Para minha agradável surpresa, nesta ocasião em que estava estuando o método (procedure Free) da classe TObject e o destructor Destroy das classes TObject, TPersistent e TComponent pensei em adicionar no Library Path os caminhos C:\Arquivos de programas\Borland\Delphi7\Source\Rtl\Sys e C:\Arquivos de programas\Borland\Delphi7\Source\Rtl\Common (uso D7) para ver se iria compilar para detro da VCL. Mas não deu certo. Foi aí que pensei nas opções do projeto e lá estava na guia Compiler a última caixa de verificação: Use Debug DCUs.

Agora sim, crie uma nova aplicação, em seguida vá até Project |Options|Compiler (D7) e marque a opção: Use Debug DCUs;

Em seguida coloque um botão no form com o código abaixo:

procedure TForm1.Button1Click(Sender: TObject);
var Obj: TObject;
    Pers: TPersistent;
    Comp: TComponent;
begin
    Obj := TObject.Create;
    Obj.Free;

    Pers := TPersistent.Create;
    Pers.Free;

    Comp := TComponent.Create(self);
    Comp.Free;
end;

Marque todas as linhas entre o begin e end com Breakpoint, compile com F9, clique no botão e experimente o F7.

Agora é só acompanhar o fluxo de execução e ver tudo que está sendo compilado.

Experimente também substituir o bloco de código entre o begin e o end pelo código abaixo:

    Obj := TObject.Create;
    FreeAndNil(Obj);

    Pers := TPersistent.Create;
    FreeAndNil(Pers);

    Comp := TComponent.Create(self);
    FreeAndNil(Comp);


Agora é ver o que acontece por trás dos bastidores da VCL e tomar gosto ou despertar interesse pela POO.

Abraço a todos e até a próxima