Parola chiave on nei Mixin
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 53 di 110.
A volte un mixin deve usare metodi o proprietà della classe in cui viene incluso. La parola chiave on ti permette di limitare l’uso di un mixin alle sole classi che estendono un tipo specifico.
class Animal {
String name;
Animal(this.name);
void breathe() => print('$name is breathing');
}
mixin Swimming on Animal {
void swim() {
print('$name is swimming'); // Può accedere a 'name' da Animal
breathe(); // Può chiamare i metodi di Animal
}
}
class Fish extends Animal with Swimming {
Fish(String name) : super(name);
}La dichiarazione on Animal significa che questo mixin può essere applicato solo alle classi che estendono Animal. Questo garantisce che il mixin abbia accesso ai membri di Animal. Senza on, il mixin non saprebbe che name o breathe() esistono.
Se provi a usare un mixin con restrizioni su una classe incompatibile, Dart genera un errore in fase di compilazione:
class Robot with Swimming {} // Errore! Robot non estende AnimalQuesto vincolo è utile quando le funzionalità del tuo mixin dipendono da capacità specifiche di una classe base. Crea un contratto più sicuro: il mixin garantisce determinati comportamenti, ma solo quando dispone delle basi necessarie per funzionare correttamente.
Sfida
FacileCreiamo un sistema di veicoli che dimostri come la parola chiave on limiti l’uso dei mixin a classi base specifiche. Creerai un mixin che aggiunge la funzionalità di turbo boost, ma può essere usato solo da classi che estendono una classe base Vehicle.
Organizzerai il codice in due file:
vehicles.dart: definisci qui la classe base, il mixin con restrizioni e i tipi di veicoli:- Una classe
Vehiclecon una proprietàString modele una proprietàint speed. Includi un costruttore che accetti entrambi i valori. Aggiungi un metodoaccelerate()che stampa[model] accelerating to [speed] km/h - Un mixin
TurboBoostlimitato aVehicletramite la parola chiaveon. Questo mixin deve avere un metodoactivateTurbo()che stampa[model] TURBO ACTIVATED!e poi chiamaaccelerate()(entrambi sono accessibili grazie al vincoloon Vehicle) - Una classe
SportsCarche estendeVehiclee usa il mixinTurboBoost. Aggiungi una proprietàString color. Il costruttore deve accettare model, speed e color. Includi un metodoshowOff()che stampa[color] [model] ready to race!
- Una classe
main.dart: importa il file dei veicoli e dimostra come funziona il mixin con restrizioni:- Crea una
SportsCarcon model'Ferrari', speed320e color'Red' - Chiama
showOff() - Chiama
activateTurbo()
- Crea una
Il mixin TurboBoost può accedere a model e chiamare accelerate() perché la dichiarazione on Vehicle garantisce che venga applicato solo a classi che estendono Vehicle. Questo crea un contratto sicuro in cui il mixin sa esattamente quali funzionalità sono disponibili.
Output previsto:
Red Ferrari ready to race!
Ferrari TURBO ACTIVATED!
Ferrari accelerating to 320 km/hProvalo tu
import 'vehicles.dart';
void main() {
// TODO: Crea una SportsCar con modello 'Ferrari', velocità 320 e colore 'Red'
// TODO: Chiama showOff()
// TODO: Chiama activateTurbo()
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniLibrerie e importazioniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave thisMetodiVariabili di istanzaFondamenti dei costruttoriRiepilogo - Calcolatrice semplice4Sicurezza dei valori null
Introduzione alla sicurezza dei valori nullNullable e non nullableGli operatori ? e !La keyword late e la sicurezza dei valori nullOperatori null-awareSicurezza dei valori null nelle classiRiepilogo - Sistema di profili utente7Classi astratte e interfacce
Classi astratteMetodi astrattiInterfacce in DartInterfacce impliciteImplementare vs estendereInterfacce multipleRiepilogo - Calcolatore di forme10Collezioni e generici
Panoramica di List, Set e MapCollezioni sicure rispetto ai tipiClassi genericheMetodi genericiVincoli sui genericiIterable e IteratorRiepilogo - Archiviazione generica13Concetti avanzati di OOP
Composizione vs ereditarietàMetodi di estensioneClassi chiamabiliClassi sealed (Dart 3)Record (Dart 3)Pattern e matching (3.0)Enum con metodi16Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente2I costruttori in Dart
Costruttore predefinitoCostruttori con nomeListe di inizializzazioneCostruttori costantiCostruttori factoryCostruttori di reindirizzamentoRiepilogo - Crea forme5Incapsulamento
Membri pubblici e privatiConvenzione del prefisso _Visibilità a livello di libreriaApprofondimento su getter e setterNascondimento delle informazioniRiepilogo - Registri degli studenti8Mixin
Introduzione ai MixinCreare MixinUsare più MixinParola chiave on nei MixinMixin vs ereditarietàMixin vs interfacciaRiepilogo - Sistema animale11Metodi speciali
Sovrascrittura di toString()Sovrascrittura di hashCode e ==Interfaccia ComparableMetodo call()Sovrascrittura di noSuchMethodRiepilogo - Collezione personalizzata14Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneSingletonFactoryObserverStrategy3Proprietà delle classi
Membri di istanza e staticiCampi final e constVariabili lateMetodi e campi staticiGetter e setterRiepilogo - Gestore di conti bancari6Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiL’annotazione @overrideLa parola chiave final per le classiCostruttori ed ereditarietàRiepilogo - Gerarchia dei dipendenti9Polimorfismo
Fondamenti di polimorfismoPolimorfismo tramite interfacceControllo del tipo a runtimeGli operatori is e asParola chiave covariantRiepilogo - Elaboratore di pagamenti12OOP asincrona
Future e async/awaitNozioni di base sugli streamController degli streamCostruttori asincroniAsync nei metodi di classeRiepilogo - Recupero dei dati15Pattern di progettazione Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern RepositoryEsercitati da solo: Compilatore Dart online