Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 20 de Julho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
32 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Por que Interfaces?
Publicado por welter : Quarta, Setembro 08, 2004 - 11:17 GMT-3 (4838 leituras)
Comentários 1 Comentário   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Uma pergunta frequentemente formulada pelas pessoas que conversam comigo é o porquê do uso de interfaces. Então tentarei abordar neste artigo um resumo prático do uso de Interfaces e uma das varias formas de tornar seu uso muito útil em nossos aplicativos.
Lembrando sempre da classica frase:
"Existem mil maneiras de preparar Neston", pois como todos sabem, sempre há uma forma diferente de enchergar a mesma coisa e uma possivelmente será melhor que a outra.

Mas vamos ao que interessa.

Vamos traçar um quadro onde tenho um sistema e nesse sistema existe a possibilidade do cliente comprar e pagar seus débitos ao final do mês. Tudo funcionava as mil maravilhas, mas então um novo cliente decidiu que o calculo do montante da divida ao final do mês, deveria dar um desconto de 10% nas comprar dos clientes efetuadas até o dia 10. Até aqui não é nada anormal, pois todos os dias nos deparamos com coisas fora do comum, mas a pergunta é: Como colocar este calculo no meu sistema sem perder o que eu tinha e sem ter de encher meu sistema de IF´s e pior ainda, e se outro cliente tiver outra nescessidade neste mesmo calculo. Bom, neste caso podemos usar uma simples interface e separar o calculo do coração da rotina e carregar o calculo desejado na hora certa, então os senhores me perguntam de que maneira eu poderia fazer isto e eu respondo, MUITO SIMPLES.

Vamos Criar uma Interface que atenda meus propósitos:
ICalculo = interface(IInterface)
procedure SomaValor(Valor: Real; Data: TDateTime);
function Apurado: Real;
end;

Neste exemplo temos uma função que ira acumular os valores e uma função que ira retornar o total apurado da soma de todos os lançamentos.

Vamos criar a Classe Normal que será a responsável pelo cálculo normal.
TCalculoNormal = class(TInterfacedObject, ICalculo)
private
fTotal: Real;
public
constructor Create;
procedure SomaValor(Valor: Real; Data: TDateTime); virtual;
function Apurado: Real;
end;

Observe que o Método SomaValor possui a diretiva Virtual na sua declaracao, isto significa que esta classe pode ser herdada por um outro objeto e alterado, veja abaixo como fica a classe descendida;
TCalculoAlterado = class(TCalculoNormal, iCalculo)
procedure SomaValor(Valor: Real; Data: TDateTime); override;
end;

No exemplo acima, nos estamos dizendo que TCalculoAlterado é igual a TCalculoNomal, mas que o método SomaValor será reescrito, já o método Apurado será usado o mesmo que foi escrito na classe ancestral;

Com isto basta criar em nossa rotina uma variável do Tipo ICalculo e criar a classe normal ou alterada dentro dela para ser usada:
var
Calculo: iCalculo;
begin
case Metodo.ItemIndex of
0: Calculo := TCalculoNormal.Create;
1: Calculo := TCalculoAlterado.Create;
end;

Agora basta percorrer os registros e enviar para a classe e no final obter o resultado pelo método APURADO.

Para facilitar a compreenção esta disponivel na area de Download do site do projeto sultan um exemplo do uso deste recurso.
Abração a todos.

por
Marcelo Welter
Coordenador do Projeto Sultan
www.welter.pro.br/sultan


Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: cadimus : Nov 26, 2004 - 11:48
(Informações sobre o membro | Enviar uma mensagem) http://
Caro amigo Marcelo, neste artigo você mostra de maneira clara como utilizar interfaces, porém, já pedindo perdão por minha ignorância, não consegui entender em que realmente vai ajudar a interface, considerando o exemplo que vc colocou.

A minha dúvida realmente é: Qual a diferença entre eu utilizar uma classe abstrata e uma interface??? O que me parece é que utilizar a interface é um pouco redundante!!!!

Por gentileza me esclareça este ponto!!!!

[]s
Marcello
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados