Riepilogo - Sistema animale
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 56 di 110.
Sfida
FacileCostruiamo un sistema completo di animali che riunisce tutto ciò che hai imparato sui mixin! Creerai una classe base Animal, mixin di comportamento che usano la parola chiave on e classi specifiche per gli animali che combinano queste capacità in modi diversi.
Organizzerai il codice in tre file:
animal.dart: definisci la classe base da cui erediteranno tutti gli animali:- Una classe
Animalcon una proprietàString namee un costruttore - Un metodo
describe()che stampa[name] is an animal
- Una classe
behaviors.dart: importa il file degli animali e crea tre mixin di comportamento, ciascuno vincolato aAnimalusando la parola chiaveon:- Un mixin
Swimmingcon un metodoswim()che stampa[name] is swimming - Un mixin
Flyingcon un metodofly()che stampa[name] is flying - Un mixin
Walkingcon un metodowalk()che stampa[name] is walking
- Un mixin
main.dart: importa entrambi i file e crea tre classi di animali che combinano l'ereditarietà con diverse combinazioni di mixin:- Una classe
Duckche estendeAnimale usa tutti e tre i mixin (Swimming, Flying, Walking) - Una classe
Fishche estendeAnimale usa solo il mixinSwimming - Una classe
Birdche estendeAnimale usa i mixinFlyingeWalking
- Crea una
Duckchiamata'Donald', chiamadescribe(), poiswim(),fly()ewalk() - Stampa una riga vuota
- Crea un
Fishchiamato'Nemo', chiamadescribe(), poiswim() - Stampa una riga vuota
- Crea un
Birdchiamato'Tweety', chiamadescribe(), poifly()ewalk()
- Una classe
Ciascun mixin può accedere alla proprietà name grazie al vincolo on Animal, garantendo la sicurezza dei tipi e consentendo al contempo una composizione flessibile dei comportamenti.
Output previsto:
Donald is an animal
Donald is swimming
Donald is flying
Donald is walking
Nemo is an animal
Nemo is swimming
Tweety is an animal
Tweety is flying
Tweety is walkingProvalo tu
import 'animal.dart';
import 'behaviors.dart';
// TODO: Crea la classe Duck che estende Animal e usa i mixin Swimming, Flying e Walking
class Duck {
// TODO: Implementa la classe Duck
}
// TODO: Crea la classe Fish che estende Animal e usa solo il mixin Swimming
class Fish {
// TODO: Implementa la classe Fish
}
// TODO: Crea la classe Bird che estende Animal e usa i mixin Flying e Walking
class Bird {
// TODO: Implementa la classe Bird
}
void main() {
// TODO: Crea un Duck chiamato 'Donald'
// Chiama describe(), swim(), fly(), walk()
// TODO: Stampa una riga vuota
// TODO: Crea un Fish chiamato 'Nemo'
// Chiama describe(), swim()
// TODO: Stampa una riga vuota
// TODO: Crea un Bird chiamato 'Tweety'
// Chiama describe(), fly(), walk()
}
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