Implements entra en el contexto de interfaces.
Recuerda que una interfaz es algo así como una clase abstracta en donde se declaran métodos pero no se implementan:
Código Delphi
[-]
type
IPersona = interface
procedure Insulta;
end;
Una clase puede implementar una o más interfaces. Cada clase implementadora debe definir el código para los procedimientos declarados en la interfaz:
Código Delphi
[-]
interface
type
TMexicano = class(TInterfacedObject, IPersona)
procedure Insulta;
end;
TEspañol = class(TInterfacedObject, IPersona)
procedure Insulta;
end;
TVenezolano = class(TInterfacedObject, IPersona)
procedure Insulta;
end;
implementation
procedure TMexicano.Insulta;
begin
ShowMessage('Eres un ojete');
end;
procedure TEspañol.Insulta;
begin
ShowMessage('Eres un gilipollas');
end;
procedure TVenezolano.Insulta;
begin
ShowMessage('Eres un maluco');
end;
end.
Aquí, TMexicano, TEspañol y TVenezolano son tres clases que implementan la interfaz IPersona, cada una de forma distinta.
Ahora bien, en ocasiones conviene
delegar la implementación de una interfaz a otro objeto:
Código Delphi
[-]
interface
type
TGrosero = class(TInterfacedObject, IPersona)
procedure Insulta;
end;
implementation
procedure TGrosero.Insulta;
begin
ShowMessage('#$%&&#%!!!');
end;
end.
y reutilizarla en otras clases que deseemos implementen la interfaz:
Código Delphi
[-]
type
TMexicano = class(TInterfacedObject, IPersona)
private
FPersona: IPersona;
public
property Persona: IPersona read FPersona implements IPersona;
end;
TEspañol = class(TInterfacedObject, IPersona)
private
FPersona: IPersona;
public
property Persona: IPersona read FPersona implements IPersona;
end;
TVenezolano = class(TInterfacedObject, IPersona)
private
FPersona: IPersona;
public
property Persona: IPersona read FPersona implements IPersona;
end;
Aquí cada clase TMexicano, TEspañol y TVenezolano delegan la implementación de IPersona a una propiedad, Persona, que es la que realmente hace la implementación.
Desde luego que el ejemplo es muy bobalicón (maluco) pero imágina que la interfaz tiene muchos métodos y quieres que varias clases la implementen de la misma forma. En este caso
implements te permitirá evitar repetición de código.
// Saludos