3.7. Orientação à Objetos em Dart: Mixin

Mixin é uma classe abstrata como qualquer outra, mas a grande ideia a respeito dele é que não é permitido ter heranças múltiplas em Dart, para isso Dart contornou a situação e criou uma saída

3.7. Orientação à Objetos em Dart: Mixin

Mixin é uma classe abstrata como qualquer outra, mas a grande ideia a respeito dele é que não é permitido ter heranças múltiplas em Dart, então Dart conseguiu contornar este problema utilizando a estrutura chamada Mixin.

Para poder entender vamos codar, criando algumas classes abstratas:

abstract class Artista {
}

abstract class Cantar {
  catar() {
    return 'Canta Sertanejo';
  }
}

Agora, criaremos uma classe chamada Dançar, porém ela será um Mixin:

mixin Dancar on Artista {
  String dançar() {
    print('Dançar');
  }
}

O legal é que você pode obrigar a sua classe mixin só seja utilizada em uma classe específica, como posta acima, basta colocar on NomeDaClasse. Assim, só quem poderá utilizar este mixin é quem extender a classe Artista.

class Diego extends Artista {
}

Para dizer que Diego canta e dançar, basta adicionar o termo with e adicionar as demaisa classes:

class Diego extends Artista with Cantar {
}

Caso você queira acrescentar mais classes, você pode utilizar uma vírgula e acrescentar a nova classe posteriormente:

class Diego extends Artista with Cantar, Dançar {
}

OBS. Dart observa a hierarquia de implementação, no caso apresentado acima, foi implementado primeiro Cantar e depois Dançar, desta forma ele implementa as classes nesta ordem.

Para usar basta instanciar a classe criada e chamar os atributos criados:

void main() {
  var j = Diego();
  j.cantar();
  j.dancar();
}

Como encadear as requisições, ou seja, diminuir o código acima? basta colocar .. 

void main() {
  Diego()
    ..cantar();
    ..dancar();
}

Espero que tenham gostado. Clique aqui para ir ao próximo artigo sobre extension.