Dart: extends vs implements vs with

uma forma resumida para entender mixins

Manoel Soares Neto
2 min readApr 21, 2020

--

1⃣️ Usando extends

🤔 Você sabe o que é Herança?

Herança nos permite criar novas classes que reutilizam, estendem e/ou modificam o comportamento de classes preexistentes. A classe preexistente é chamada de superclasse e a nova classe que estamos criando se chama classe derivada. No Dart, podemos herdar apenas uma superclasse, mas herança é transitiva. Se a classe Hatch é derivada da classe Car e essa classe Car é derivada da classe Vehicle, então a classe Hatch será derivada da classe Vehicle. Use extends para criar uma classe derivada e super quando quiser se referir à superclasse.

Quando class Car extends Vehicle, todas as propriedades, variáveis e métodos implementados na classe Vehicle também estarão disponíveis na classe Car.

Também é possível reescrever as funções da superclasse.

Resumo: Você usa extends quando quiser criar uma versão mais específica de uma classe.

2⃣️ Usando implements

Suponha que você queira criar a sua própria classe Car, sem herdar todas as propriedades, variáveis e métodos da classe Vehicle, porém quer herdar apenas o tipo Vehicle. Para fazer isso a classe Car deve implementar a interface Vehicle.

O Dart possibilita implementar diversas classes e interfaces.

✍️ Exemplo

Imagine que você tenha que implementar um pássaro e um pato, ambos são animais, porém o pássaro consegue apenas voar e o pato pode voar e nadar. Faremos isso usando o que sabemos até o momento.

Primeiro vamos criar a superclasse e os comportamentos:

Agora criaremos Bird e Duck, implementando seus comportamentos:

Observe que usando implements tivemos que implementar os métodos fly e swim, repetindo código! Não foi possível herdar a implementação dos comportamentos dessa maneira. Será que existe uma forma de reutilizar o código desses comportamentos? Sim, veremos a seguir!

3⃣️ Usando with

Mixin é um tipo diferente de estrutura, que só pode ser usado com a palavra-chave with e é usado para incluir trechos comuns de códigos, ou seja, reutilizar código.

Mixins are a way of reusing a class’s code in multiple class hierarchies (dartlang.org).

Vejamos então como ficará a implementação anterior usando mixins:

Você pode substituir abstract class por mixin se preferir.

Mixins são uma forma de abstrair e reutilizar métodos e estados, é similar a reutilização do código de uma classe herdada, porém não há múltiplas heranças, continua existindo apenas uma superclasse. Funcionam colocando a implementação do mixin no topo da superclasse para criar uma nova classe. No exemplo acima, é possível reescrever um método, mixins permitem isso.

✌️Agradecimentos

Essa foi minha primeira história no Medium, espero tenha gostado 😃.

Gostaria de agradecer ao pelo incrível artigo sobre mixins, aconselho você a ler para entender ainda mais sobre o assunto.

Qualquer dúvida, fique à vontade em perguntar abaixo.

--

--