versão carregada: sexta, 29 de março de 2024

Interfaces e Classes abstratas

signature 2003808 640

Interfaces

Interfaces são convenções que viabilizam a determinação de um padrão, um comportamento esperado. De forma prática, o nome Interface pode ser trocado por Contrato. Beneficiam a reutilização de classes ao ditar as assinaturas de nomes e tipagens em atributos e métodos, sem implementar o código da função. 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.

Classes abstratas, por sua vez, são interfaces mais flexíveis. Permitem ainda fazer a implementaçao do código de algumas ou todas as funções.

Se o programador deixa de implementar determinado método exigido pela interface ou classe abstrata na classe que o(a) implementa, a aplicação emite um erro para alertar o programador de que faltam métodos para que a classe cumpra com todos os métodos assinados no contrato. 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. Ambas interface e classe abstrata podem ser implementadas:

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.

Quer saber mais sobre como funciona? Fale com um desenvolvedor agora mesmo!
Este artigo foi lido 3251+ vezes. Obrigado por ler até aqui! Fique à vontade pra copiar e compartilhar. Ajude sempre seus colegas. O conhecimento muda vidas!

O conteudo foi útil? Isso é ótimo. Quer incentivar mais posts como esse? Mostre seu apoio com qualquer valor.
Chave PIX: d0311e58-cb6e-4d47-b3d8-3d4254763ce7

Inscrever-se
Notify of
guest
0 Comentários
Inline Feedbacks
View all comments