17 de maio
Dicas
273 visualizações

Interfaces e Classes abstratas

Interfaces

Interfaces são convenções que viabilizam a determinação de um padrão, um comportamento esperado. Beneficiam a reutilização de classes ao ditar as assinaturas de nomes e tipagens em atributos e métodos omitindo seu corpo. São chamadas de contratos por sua capacidade de obrigar suas implementações a executar determinados procedimentos. Interfaces são interpretações de mais alto nível utilizadas por programadores, para que possam garantir operações de suas classes. Se o programador deixa de implementar determinado método exigido pela interface na classe, a aplicação emite um erro para alertá-lo de que não é possível cumprir o objetivo real da classe, visto que ela não atende aos requisitos da interface. Como exemplo: Um software de músicas dispõe de uma interface simples, chamada Playable (executável):



interface Playable{

private List Playlist { get; set; }
private Setting Setting { get; set; }
}

Classes abstratas

Classes abstratas podem cumprir o papel das interfaces e ainda permitir que o corpo das funções seja pré-codificado, como no caso de funções que servem para todas as implementações, sem variação no corpo da função.


abstract class PlayableThemeBehavior{

public virtual List Playlist { get; set; }
public virtual Setting Setting { get; set; }
private const string ThemeFileURL;
public string LoadThemeDOM(){
return HTML::LoadPageCode(PlayableThemeBehavior.ThemeFileURL);
}
}

Logo ele cria sua classe seguindo a especificação:


class NewAwesomePlayer implements Playable, PlayableThemeBehavior{
private const string ThemeFileURL = '~View/Shared/Layout.html';
public List Playlist { get; set; }
public Setting Setting { get; set; }
public void Run { get; set; }
public NewAwesomePlayer(){}
}

O que é um método abstrato?

São métodos que obrigam implementação nas classes filhas.

O que é e para que serve uma classe abstrata?

Classes com pelo menos um método abstrato, onde apenas uma parte do comportamento é conhecido.

Como uma classe abstrata e uma interface de classe, de C#,estão relacionados?

Classes abstratas são tipos de interface. Se uma classe não implementa todos os métodos assinados da interface, ela deve se declarar abstrata e também declarar os métodos não implementados como abstratos.

Em qual ou quais situações deve-se usar uma classe abstrata e em qual ou quais se deve usar interfaces?

Classes abstratas podem descrever “como deve ser feito” e são utilizadas quando se conhece parte do comportamento do objeto, apenas assinando e mantendo métodos desconhecidos como abstratos. Interfaces apenas funcionam como contratos e apenas especificam “o que deve ser feito”.

Quais as restrições no uso de uma classe abstrata em C#? O que é possível fazer e não fazer com o tipo declarado por uma classe abstrata?

Identificada por “abstract”. Precisa ter pelo menos um método público (nunca static) abstrato (virtual por default). Não pode ser instanciada com “new”. Deve ser herdada. Métodos das classes filhas devem usar override.

Um método abstrato pode ser especificado como “private”?

Não, pois isso impediria sua implementação em classes herdeiras.

É obrigatório que uma classe implemente todos os métodos de uma interface da qual ela herda (ou que ela implementa)?

Implementar uma interface é se comprometer em cumprir seu escopo. Caso isso não seja possível, é necessário utilizar uma classe abstrata.

Um pouco sobre o autor

Matteus Barbosa - Desenvolvedor Web
Trabalho como Desenvolvedor web, no regime MEI PJ (Pessoa Jurídica) seguindo preceitos da legalidade. Para saber da minha experiência, acesse meu Currículo, meu Portfólio, a relação de Referências de Clientes ou ainda a Lista de Serviços. As propostas de serviço são iniciadas com conversas informais, seguidas da coleta de requisitos, elaboração do cronograma e por fim a proposta de orçamento. Todas as etapas são acompanhados de perto via ferramenta online e videoconferências. Os pagamentos são registrados com entrega de notas fiscais. Presto serviços de projeto, desenvolvimento e manutenção de sistemas baseados nos mais diversos frameworks.