Sobes.tech
Middle

Quelles sont les différences entre une classe abstraite et un mixin en Dart?

sobes.tech IA

Réponse de l'IA

Classe abstraite:

  • Ne peut pas être instanciée directement.
  • Peut contenir des méthodes abstraites (sans implémentation) et des méthodes implémentées.
  • Les classes héritent d'une classe abstraite en utilisant le mot-clé extends.
  • Une classe ne peut hériter que d'une seule classe (héritage simple).

Mixin:

  • Ne peut pas être instancié directement.
  • Ne peut pas avoir de constructeurs.
  • Peut contenir des méthodes implémentées, mais pas de méthodes abstraites (jusqu'à Dart 2.1, où les mixins abstraits sont apparus).
  • Les classes utilisent la fonctionnalité des mixins avec le mot-clé with.
  • Une classe peut utiliser plusieurs mixins.
  • Utilisé pour réutiliser du code et ajouter des fonctionnalités aux classes sans héritage. En substance, cela permet de "mélanger" des comportements.

Exemple de classe abstraite:

abstract class Animal {
  void makeSound(); // Méthode abstraite
  void eat() {
    print('Mangeant...');
  }
}

class Dog extends Animal {
  @override
  void makeSound() {
    print('Wouf!');
  }
}

Exemple de mixin:

mixin CanJump {
  void jump() {
    print('Sautant!');
  }
}

class Cat with CanJump { }

Comparaison sous forme de tableau:

Caractéristique Classe abstraite Mixin
Instanciation Non Non
Constructeur Peut en avoir Ne peut pas en avoir
Méthodes abstraites Peut en avoir Ne peut pas en avoir (jusqu'à Dart 2.1)
Méthodes implémentées Peut en avoir Peut en avoir
Utilisation extends with
Héritage/utilisation Héritage simple Utilisation multiple
Objectif Définir un contrat général Réutilisation de code, ajout de comportement