Saltar para o conteúdo principal
Publicado em

Interfaces em C#

Partilhar:

Introdução

As interfaces são uma das pedras angulares da programação orientada a objetos em C#. Elas fornecem uma forma de criar contratos dentro do seu software e de garantir que as classes implementem certos métodos ou propriedades.

O que é uma Interface?

Em termos simples, uma interface é como um contrato. Este contrato estipula que qualquer classe que implemente a interface deve também implementar os seus métodos e propriedades definidos. No entanto, ao contrário das classes, as interfaces não contêm qualquer lógica de implementação. Elas apenas definem o que deve ser feito, e não como.

A Importância das Interfaces

Flexibilidade e Extensibilidade

O uso de interfaces proporciona flexibilidade ao seu código. Como as interfaces não contêm implementação, elas permitem que defina múltiplas implementações para diferentes situações, sem alterar o contrato inicial.

Testabilidade

Ao usar interfaces, pode criar mocks ou stubs para os seus testes unitários, permitindo que teste componentes de forma isolada sem dependências externas.

Reusabilidade

Pode usar a mesma interface em diferentes partes do seu projeto ou em diferentes projetos, garantindo que as classes que implementam a interface tenham certos métodos e propriedades.

Exemplo Prático

No exemplo fornecido, temos uma interface ICarro que declara um método Informacao(). A classe Carro implementa essa interface, garantindo que o método Informacao() seja definido.

using System;

namespace Base {
  class Interfaces {
    public void Run() {
      var carro = new Carro("Nissan", "Juke", "Dianteira", "Manual", "Gasóleo", 1461, 175, 110, 25070);
      carro.Informacao();

      /*
        Marca: Nissan
        Modelo: Juke
        Localização do motor: Dianteira
        Transmissão: Manual
        Combustível: Gasóleo
        Cilindrada: 1461 cc
        Velocidade máxima: 175 km/h
        Potência máxima: 110 cv
        Preço: 25070 euros
      */
    }
  }

  class Carro : ICarro {
    private string marca, modelo, localizacaoDoMotor, transmissao, combustivel;
    private int cilindrada, velocidadeMaxima, potenciaMaxima;
    private double preco;

    public Carro(string marca, string modelo, string localizacaoDoMotor, string transmissao, string combustivel,
                  int cilindrada, int velocidadeMaxima, int potenciaMaxima, double preco) {
      this.marca = marca;
      this.modelo = modelo;
      this.localizacaoDoMotor = localizacaoDoMotor;
      this.transmissao = transmissao;
      this.combustivel = combustivel;
      this.cilindrada = cilindrada;
      this.velocidadeMaxima = velocidadeMaxima;
      this.potenciaMaxima = potenciaMaxima;
      this.preco = preco;
    }

    public void Informacao() {
      Console.WriteLine($"Marca: {marca}");
      Console.WriteLine($"Modelo: {modelo}");
      Console.WriteLine($"Localização do motor: {localizacaoDoMotor}");
      Console.WriteLine($"Transmissão: {transmissao}");
      Console.WriteLine($"Combustível: {combustivel}");
      Console.WriteLine($"Cilindrada: {cilindrada} cc");
      Console.WriteLine($"Velocidade máxima: {velocidadeMaxima} km/h");
      Console.WriteLine($"Potência máxima: {potenciaMaxima} cv");
      Console.WriteLine($"Preço: {preco} euros");
    }
  }

  interface ICarro {
    void Informacao();
  }
}

Considerações ao usar Interfaces

Ao trabalhar com interfaces, é crucial ter em conta alguns pontos:

  1. Nomenclatura: É uma convenção comum em C# prefixar o nome de uma interface com a letra 'I', como ICarro.
  2. Simplicidade: Mantenha as suas interfaces simples e focadas. Se uma interface começa a ter muitos membros, talvez seja altura de a refatorar ou dividir.

Conclusão

As interfaces desempenham um papel crucial na programação orientada a objetos, especialmente em linguagens como C#. Elas oferecem uma estrutura robusta que promove a separação de responsabilidades, a reutilização de código e a extensibilidade. Com uma compreensão sólida das interfaces, estará equipado para criar software mais modular, testável e manutenível.

Happy coding!