Dans cet article, nous allons couvrir les cas d’utilisation pour implements, extends et avec des mots-clés. Implémente v / s Étend v / s Avec des mots clés en fléchette.
Introduction
Si vous développez une application Flutter, vous devriez avoir vu beaucoup de cas d’utilisation pour les implémentations, les extensions et avec des mots clés. Pour quelqu’un qui n’a jamais travaillé avec Dart auparavant, la différence entre ces mots clés n’est pas évidente.
Dans cet article, nous allons approfondir ces mots clés pour élargir notre compréhension du Flutter et de la fléchette.
Implements Sert à Forcer le comportement Via l’interface
Dans la POO, une interface est quelque chose qui oblige la classe dérivante à implémenter une liste de champs et de méthodes publics.
Mais contrairement à d’autres langages de programmation traditionnels comme C # et JAVA, Dart n’a pas de types d’interface explicites. Chaque classe, par défaut, définit sa propre interface composée de champs et de méthodes publics. Ainsi, chaque classe peut agir comme une interface dans Dart.
Nous utilisons le mot clé implements pour implémenter une interface. En outre, une classe peut implémenter plusieurs interfaces.
Dans l’exemple ci-dessus, la classe D implémente les classes A, B et C, elle doit donc implémenter les méthodes et champs publics de ces classes.
De plus, puisque Dart n’a pas d’interfaces explicites, nous utilisons la classe abstraite comme interface.
abstract class X { doX();} class Y implements X { @override doX() { // TODO: implement doX return null; }}
Extends Sert À Partager Le Comportement Via l’héritage
En POO, l’héritage implique le partage du comportement entre les classes. Nous ne pouvons pas partager de fonctionnalités avec une interface. Ainsi, lorsque nous implémentons une classe, nous ne pouvons pas partager son comportement.
Dans l’exemple ci-dessus, vous pouvez voir que la classe B doit fournir sa propre implémentation de la méthode doA() comme le comportement n’est pas partagé.
Si vous souhaitez partager le comportement entre ces deux classes, vous devez utiliser le mot clé extends.
class A { doA() { print('A'); }}class B extends A { }main() { var b = B(); b.doA();}
Dans l’exemple ci-dessus, puisque B étend A, vous pouvez appeler la méthode doA() directement à partir de l’objet de B.
Contrairement à l’implémentation de plusieurs interfaces, Dart ne prend en charge qu’un seul héritage. Ainsi, vous ne pouvez pas vous étendre à partir de plusieurs classes.
class A { doA() { print('A'); }}class B { doB() { print('B'); }}// Not Allowed!class C extends A, B {}
Avec Is For Mixin
En POO, un mixin est une classe qui contient des méthodes à utiliser par d’autres classes. Contrairement à l’approche d’interface et d’héritage, un mixin ne doit pas nécessairement être la classe parent de ces autres classes.
Ainsi, un mixin n’impose aucune restriction d’utilisation ni ne force la restriction de type.
Vous mettrez généralement des fonctions communes dans un mixin. Dans Dart, nous utilisons le mixin en utilisant le mot clé with.
Comme indiqué dans l’exemple ci-dessus, l’implémentation des champs mixin peut être remplacée si nécessaire. De plus, une classe peut utiliser plusieurs mixins.
Quelques Autres Choses À Noter Sur Mixin
En Utilisant Une classe Comme Mixin
Dans Dart, une classe peut également être utilisée comme mixin si la classe est sans constructeur. Par exemple, le code ci-dessous est valide.
class D { doD() { print('d'); }}class E with D {}main() { var e = E(); e.doD();}
Mais celui ci-dessous n’est pas valide car la classe D déclare un constructeur.
class D { D() { } doD() { print('d'); }}class E with D {}
Appliquer Mixin Pour des Types spécifiques
Vous pouvez également appliquer un mixin pour qu’il soit utilisable pour certaines classes de types uniquement en utilisant le mot clé on lors de la définition du mixin.
mixin Z on D { doZ() { }}class D { doD() { print('d'); }}//Can't do this!class E with Z {}//Can do this!class F extends D with Z {}
Conclusion
Dans cet article, nous avons appris les cas d’utilisation des implémentations, des extensions et des mots clés lors du développement d’applications Flutter / Dart.
Implémente v/s Étend v/s Avec
Pour résumer, utilisez :
- Implémente pour appliquer les comportements.
- S’étend pour partager des comportements de classe unique.
- Mixins pour le partage de comportements à partir de plusieurs types réutilisables.
En savoir plus:
- Caractéristiques du langage de fléchettes
- Apprendre le Flutter