Interfaces multiples
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy. Leçon 48 sur 110.
L'un des plus grands avantages des interfaces par rapport à l'héritage est qu'une classe peut implémenter plusieurs interfaces. Alors que Dart vous limite à n'étendre qu'une seule classe, vous pouvez implémenter autant d'interfaces que nécessaire.
abstract class Printable {
void printContent();
}
abstract class Saveable {
void save();
}
abstract class Shareable {
void share(String recipient);
}
class Document implements Printable, Saveable, Shareable {
String content;
Document(this.content);
@override
void printContent() {
print('Printing: $content');
}
@override
void save() {
print('Saving document...');
}
@override
void share(String recipient) {
print('Sharing with $recipient');
}
}Lors de l’implémentation de plusieurs interfaces, vous devez fournir des implémentations pour toutes les méthodes de chaque interface. La classe doit respecter tous les contrats qu’elle s’engage à prendre en charge.
Vous pouvez également combiner extends avec plusieurs implements :
class Report extends Document implements Printable, Shareable {
Report(String content) : super(content);
// Doit toujours implémenter toutes les méthodes d'interface
// (déjà hérité de Document dans ce cas)
}Cette flexibilité vous permet de concevoir des classes qui s’adaptent à plusieurs rôles. Un SmartPhone pourrait implémenter les interfaces Camera, Phone et MusicPlayer, garantissant qu’il peut faire tout ce que chaque interface exige, tout en conservant sa propre implémentation unique.
Défi
FacileConstruisons un système d’appareil intelligent qui montre comment une seule classe peut implémenter plusieurs interfaces afin de combiner différentes fonctionnalités. Vous allez créer des classes d’interface distinctes pour différentes fonctionnalités de l’appareil, puis construire un appareil capable de tout faire.
Vous organiserez votre code en deux fichiers :
devices.dart: Définissez vos interfaces et la classe qui les implémente ici :- Une classe
Connectableavec une méthodeconnect()qui afficheConnecting to network... - Une classe
Chargeableavec une méthodecharge()qui afficheCharging battery... - Une classe
Displayableavec une méthodeshowScreen(String content)qui afficheDisplaying: [content] - Une classe
Tabletqui implémente les trois interfaces :Connectable,ChargeableetDisplayable. Ajoutez une propriétéString brandavec un constructeur. Vos implémentations doivent afficher[brand] tablet connecting to WiFipour connect,[brand] tablet charging via USB-Cpour charge et[brand] screen: [content]pour showScreen
- Une classe
main.dart: Importez votre fichier devices et montrez comment Tablet respecte les contrats des trois interfaces :- Créez un
Tabletavec la marque'Galaxy' - Appelez
connect() - Appelez
charge() - Appelez
showScreen('Welcome Home')
- Créez un
Votre classe Tablet doit fournir sa propre implémentation pour chaque méthode des trois interfaces. Cela montre que l’implémentation de plusieurs interfaces permet à une seule classe de garantir plusieurs fonctionnalités, tout en gardant chaque implémentation propre à l’appareil.
Sortie attendue :
Galaxy tablet connecting to WiFi
Galaxy tablet charging via USB-C
Galaxy screen: Welcome HomeEssayez vous-même
import 'devices.dart';
void main() {
// TODO: Créer une Tablet avec la marque 'Galaxy'
// TODO: Appeler connect()
// TODO: Appeler charge()
// TODO: Appeler showScreen('Welcome Home')
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs objetsLe mot-clé thisMéthodesVariables d’instanceBases des constructeursRécapitulatif - Calculatrice simple4Sécurité face aux valeurs nulles
Introduction à la sécurité face aux valeurs nullesNullable vs Non-NullableLes opérateurs ? et !Mot-clé Late et sécurité face aux valeurs nullesOpérateurs sensibles à nullSécurité face aux valeurs nulles dans les classesRécapitulatif – Système de profil utilisateur7Classes abstraites et interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémenter ou étendreInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et génériques
Vue d’ensemble des List, Set et MapCollections à typage sûrClasses génériquesMéthodes génériquesContraintes génériquesIterable et IteratorRécapitulatif – stockage générique2Constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs redirigésRécapitulatif - Constructeur de formes5Encapsulation
Membres publics vs privésLa convention du préfixe _Confidentialité au niveau de la bibliothèqueApprofondissement des getters et settersMasquage de l’informationRécapitulatif - Fiches des étudiants8Mixins
Introduction aux MixinsCréer des MixinsUtiliser plusieurs MixinsMot-clé on dans les MixinsMixin ou héritageMixin ou interfaceRécapitulatif - Système animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode et ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy3Propriétés des classes
Membres d’instance et statiquesChamps Final et ConstVariables différéesMéthodes et champs statiquesAccesseurs et mutateursRécapitulatif - Gestionnaire de compte bancaire6Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodeL’annotation @overrideLe mot-clé de classe finalConstructeurs et héritageRécapitulatif – Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification des types à l’exécutionLes opérateurs is et asMot-clé covariantRécapitulatif - Processeur de paiements12POO asynchrone
Futures et async/awaitNotions de base des StreamsContrôleurs de StreamsConstructeurs asynchronesAsynchrone dans les méthodes de classeRécapitulatif - récupérateur de données15Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron DépôtEntraînez-vous par vous-même : Compilateur Dart en ligne