Amigos quero mostrar para voces o que e, e como podemos utilizar as interfaces no Delphi de forma que facilite nossa dificil vida de programador. O que e interface? As interfaces foram introduzidas na linguagem Object Pascal na versao 3 do Dephi, passando a partir desse momento a ser trabalhada de forma nativa. Voces nao fazem ideia de quao significativo foi isso! Entao alguns irao perguntar: "Mas como se vivia sem as interfaces antes disso ?" E eu respondo: Criando classes que nao eram implementadas, mas que declaravam seus metodos para serem implementados pelas classes descendentes. Claro que voce ja esbarrou com um codigo desses, mas nao deu atencao. Veja a declaracao abaixo e me diga se voce ja nao viu e talvez implementou algo parecido. Type TBrasileiro = class public function Trabalhar:Boolean; virtual; abstract; function PagarImpostos:Boolean; virtual; abstract; end;O codigo acima define os metodos que a classe descendente devera implementar. Podemos dessa maneira facilmente definir a nossa interface com base nos requisitos acima. Type IBrasileiro = Interface ['{31A22D9F-E857-4892-9D17-79FBE9AA7237}'] function Trabalhar:Boolean; function PagarImpostos:Boolean; end;Dessa maneira podemos dizer que as interfaces sao as "normas contratuais" que regem como nossa classe sera definida e como devera ser utilizada, tanto do lado do implementador como do lado do cliente. As classes podem implementar diversas interfaces, isso possibilita que uma classe "simule" a heranca multipla no Object Pascal. Facamos agora duas observacoes quanto ao codigo acima!Primeiramente voces vao reparar que temos uma Sting enorme denominada de Globally Unique Identifier (GUID), no exemplo temos ['{31A22D9F-E857-4892-9D17-79FBE9AA7237}'] ), essa string pode ser gerada automaticamente no IDE do Delphi utilizando as teclas Ctrl+Shift+G, e servira para identificar de forma unica a nossa interface. Por enquanto e tudo que precisam saber sobre essa numeracao. Posteriormente voce vera que nao foi utilizado especificadores de visibilidade ( private, protected, public, lembra deles ?), isso porque todos os metodos declarados numa interface sao publicos por default.De onde vem ?Sei que voce ja sabe disso, mas vou comentar mesmo assim: Todas as classes em Delphi descendem de TObject, isso de maneira implicita, da mesma forma as interfaces na linguagem object pascal descendem de forma implicita de IInterface, podemos ver sua definicao na Unit System. Voce vera a declaracao de TInterfacedObject, falarei dessa classe mais a frente quando aparecer no nosso exemplo. type IInterface = interface ['{00000000-0000-0000-C000-000000000046}'] function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; end; IUnknown = IInterface; {$M+} IInvokable = interface(IInterface) end; {$M-}{ TInterfacedObject provides a threadsafe default implementation of IInterface.You should use TInterfaceObject as the base class of objects implementing interfaces.; } TInterfacedObject = class(TObject, IInterface) protected FRefCount: Integer; function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; public procedure AfterConstruction; override; procedure BeforeDestruction; override; class function NewInstance: TObject; override; property RefCount: Integer read FRefCount; end;Como e a vida com as interfaces?Bom agora que voce ja sabe quando as interfaces ficaram disponiveis no Delphi, como era a vida antes dela, vamos ver como e a vida com elas. Vamos implementar duas interfaces simples, observe o exemplo abaixo. ITrabalhador