Interface | Explicação Completa (Definição, uso, estrutura e exemplo com C#)
Tags: braziliandevs, designpatterns, csharp, dotnet
Published: 2023-07-03 22:55:34

Interface | Explicação Completa (Definição, uso, estrutura e exemplo com C#)

# Introdução

Olá, meu nome é Daniela Barazarte e quero dar as boas-vindas a esta explicação completa da interface. Esta explicação será intuitiva e simples assim como todas as explicações que fazem parte do #DetectaLaLogica.

Se você preferir vídeos, aqui está um tutorial completo feito por mim no YouTube, é em espanhol, mas também tem legendas: https://www.youtube.com/watch?v=UbZORJzMQec

# <u>Teoria</u>
## Definição de cada palavra
**"Padrão de design"**
- **Padrão**: é um tipo de eventos ou objetos repetitivos
![Padrão de design](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8hizh9zs3bzgaimxs1n.png)
- **Design**: atividade criativa cujo objetivo é projetar objetos úteis e estéticos

**"Interface"**
- **Interface**: zona de comunicação ou ação de um sistema sobre outro
![Lápis e papel representando a Interface](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pvjfyhfzef7eu2ncla6t.png)

## Definição completa
O padrão de design de interface é uma especificação de métodos e propriedades que uma classe deve fornecer, e qualquer classe que implemente essa interface está comprometida em fornecer esses métodos e propriedades.

## #DetectTheLogic
A palavra "Interface" é definida como "zona de comunicação ou ação de um sistema sobre outro". O padrão de design de interface é assim chamado porque uma interface está conversando com uma classe para informar quais parâmetros essa classe deve ter. É como um contrato onde a interface declara quais componentes ela possui e a classe também deve ter esses componentes.

# <u>Usar</u>
## Para que
A interface é usada para definir uma interface comum que pode ser implementada por várias classes diferentes. Esse padrão permite que essas classes tenham comportamentos diferentes enquanto aderem a uma mesma interface, proporcionando flexibilidade e modularidade ao aplicativo.

## Quando e como
- Por ter várias classes que devem obedecer a um conjunto específico de comportamentos
- Por ter uma estrutura comum para plugins ou módulos externos que devem obedecer a um conjunto específico de comportamentos
- Ao criar um aplicativo que deve ser compatível com diferentes arquiteturas de sistemas distribuídos
- Ao criar um aplicativo que deve ser facilmente extensível e modular

# <u>Praticar</u>
## Exercício
Tens de criar um projeto de consola onde tens vários animais e podes escrever na consola o som que cada um deles faz

### **Método: Interface**

![Interface](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/okqqp2esu4095a4742la.png)

**A parte laranja (acima):** é uma interface Animal
**A parte azul (abaixo):** são implementações dessa interface, no caso, 3 animais (gato, cachorro, pássaro)

```
animal de interface pública
{
     void MakeSound();
     void CallFriend();
}

public class Cachorro: IAnimal
{
     public void MakeSound()
     {
         Console.WriteLine("Uau! Woof!");
     }
     public void CallFriend()
     {
         Console.WriteLine("Vamos amigo cão!");
     }
}

public class Gato: IAnimal
{
     public void MakeSound()
     {
         Console.WriteLine("Miau! Miau!");
     }
     public void CallFriend()
     {
         Console.WriteLine("Vamos amigo gato!");
     }
}
classe pública Pássaro: IAnimal
{
     public void MakeSound()
     {
         Console.WriteLine("Tweet Tweet! Uau!");
     }

     public void CallFriend()
     {
         Console.WriteLine("Vamos amigo passarinho!");
     }
}
programa de classe pública
{
     public static void Main()
     {
         IAnimal meuGato = new Gato();
         IAnimal meuCão = new Cachorro();
         IAnimal meuPássaro = new Pássaro();

         meuCat.MakeSound();
         myCat.CallFriend();

         myDog.MakeSound();
         myDog.CallFriend();

         meuPássaro.MakeSound();
         myBird.CallFriend();
     }
}
```

Ter uma interface "Animal" que implementa "Bird", "Dog" e "Cat" é benéfico porque fornece uma abstração útil que permite um alto nível de flexibilidade e extensibilidade no design de software. Ao definir uma interface "Animal", você estabelece certos comportamentos e características que todos os animais devem ter, como a capacidade de se mover e respirar.

A implementação dessa interface em "Bird", "Dog" e "Cat" garante que todos tenham essas características comuns e possam ser usados ​​de forma intercambiável no código que requer um objeto "Animal". Isso permite que o código seja mais modular e escalável, pois novos tipos de animais em conformidade com a interface "Animal" podem ser facilmente adicionados sem a necessidade de alterar o código existente.

# Importância
**O padrão de design de interface tem vários benefícios:**
- **Abstração**: As interfaces permitem definir um conjunto de métodos e propriedades que devem ser implementados por uma classe que os implemente. Isso permite que você abstraia a implementação de uma classe por trás de uma interface, tornando seu código mais fácil de entender e manter.
- **Separação de preocupações**: Ao definir interfaces, você pode separar claramente a interface do usuário da lógica de negócios. Isso permite que as diferentes partes de um aplicativo se comuniquem por meio de interfaces bem definidas.
- **Polimorfismo**: Interfaces permitem polimorfismo, o que significa que uma classe que implementa uma interface pode ser tratada como se fosse daquele tipo de interface. Isso permite que as classes que implementam a mesma interface sejam usadas de forma intercambiável em diferentes partes do código, facilitando a reutilização e a manutenção do seu código.

# Até a próxima
(Lembre-se) #DetectaLaLógica: A palavra "Interface" é definida como "zona de comunicação ou ação de um sistema sobre outro". O padrão de design de interface é assim chamado porque uma interface está conversando com uma classe para informar quais parâmetros essa classe deve ter. É como um contrato onde a interface declara quais componentes ela possui e a classe também deve ter esses componentes.

Você pode praticar este tópico em meu repositório GitHub (código da linguagem C#): https://github.com/danielabarazarte/DetectaLaLogica

Muito obrigado por ler, se tiver alguma dúvida pode comentar e também pode me seguir para ver mais posts desse estilo, obrigado <3.