Beruflich Dokumente
Kultur Dokumente
02
Interfaces
Nosso banco agora suporta Contas de Investimento. Já sabemos como fazer: basta herdar da classe Conta :
Por lei, uma vez por ano devemos pagar um tributo ao governo relacionado as contas de investimento e contas de poupança.
O mesmo não acontece com uma simples Conta Corrente.
Para resolver esse problema, podemos criar um método em ambas as classes que calcula o valor desse tributo. Por exemplo:
Excelente. Os métodos só cam nas Contas que realmente sofrem esse tributo.
Agora, a próxima funcionalidade é a geração de um relatório, onde devemos imprimir a quantidade total de tributos pagos
por todas as Contas Investimento ou Poupanca do nosso banco. Precisamos de uma classe que acumula o valor de todos os
tributos de todas as contas do banco. Esse é um problema parecido com o que já tivemos antes:
class TotalizadorDeTributos {
public double Total { get; private set; }
https://cursos.alura.com.br/course/csharp-orientacao-a-objetos/task/1708 1/4
22/12/2017 C# II: Aula 10 - Atividade 2 Interfaces | Alura - Cursos online de tecnologia
Pronto. Agora basta passarmos ContaInvestimento ou ContaPoupanca e nossa classe acumulará o valor do tributo. Mas esse
código não é legal. Repare que toda vez que uma nova conta sofrer um tributo, precisaremos lembrar de voltar na classe
TotalizadorDeTributos e criar um novo método Acumula() .
Nos capítulos anteriores, resolvemos isso usando polimor smo. Se a classe-pai possuir o método em comum, então basta
recebermos uma referência pro tipo pai:
class TotalizadorDeTributos {
public double Total { get; private set; }
Mas será que faz sentido colocar o método CalculaTributo() na classe Conta ?
Nem todas as Contas são tributáveis. Se zermos isso, a classe ContaCorrente ganhará esse método, mas ela não sofre
tributo!
Precisamos achar uma maneira de "achar um pai em comum" apenas para a ContaPoupanca e ContaInvestimento . Classes
em C# não podem ter dois pais. Mas o que podemos fazer é dizer para o compilador que garantiremos a existência do método
CalculaTributo() nas classes que chegarem para o método Acumula() .
Como fazemos isso? Simples. Fazemos a classe "assinar" um contrato! Nesse caso, queremos assinar o contrato que fala que
somos Tributáveis. A convenção de nomes do C# para uma interface é seguir a mesma convenção de nomenclatura de
classes porém com um I no começo do nome:
interface ITributavel
{
double CalculaTributo();
}
https://cursos.alura.com.br/course/csharp-orientacao-a-objetos/task/1708 2/4
22/12/2017 C# II: Aula 10 - Atividade 2 Interfaces | Alura - Cursos online de tecnologia
Dessa forma, podemos dizer que a classe TotalizadorDeTributos recebe um ITributavel qualquer. E polimor smo
funciona com interfaces!
class TotalizadorDeTributos {
public double Total { get; private set; }
Excelente! Veja que com interfaces conseguimos fazer com que um conjunto de classes implemente os mesmos métodos.
Interfaces são bem mais simples do que classes. Elas não tem atributos e seus métodos não tem implementação. A interface
apenas nos garante que o método existirá naquela classe. Por esse motivo, apesar de C# não suportar herança múltipla (ser
lho de mais de uma classe), podemos implementar quantas interfaces quisermos. Basta colocar uma na frente da outra:
Acostume-se com interfaces. Daqui pra frente, veremos as várias interfaces que existem no C#!
https://cursos.alura.com.br/course/csharp-orientacao-a-objetos/task/1708 3/4
22/12/2017 C# II: Aula 10 - Atividade 2 Interfaces | Alura - Cursos online de tecnologia
https://cursos.alura.com.br/course/csharp-orientacao-a-objetos/task/1708 4/4