Il concetto di classe è quello tradizionale con il concetto di metodi ed oggetti.
Il metodo è associato al concetto di funzione, l’oggetto è collegato con il concetto di variabile.
Ecco un esempio:
class Persona { // Attributi (variabili di istanza) String nome; int eta; // Costruttore Persona(this.nome, this.eta); // Metodo della classe void saluta() { print("Ciao, mi chiamo $nome e ho $eta anni."); } } void main() { // Creazione di un oggetto di tipo Persona Persona p = Persona("Francesco", 35); // Chiamata al metodo dell'oggetto p.saluta(); // Output: Ciao, mi chiamo Francesco e ho 35 anni. }
Ecco un esempio con metodo ed attributo:
class Auto { // Attributo String marca; // Costruttore Auto(this.marca); // Metodo void accendiMotore() { print("L'auto $marca è accesa!"); } } void main() { // Creazione di un oggetto della classe Auto var miaAuto = Auto("Fiat"); // Uso dell’attributo print("La mia auto è una ${miaAuto.marca}"); // Chiamata del metodo miaAuto.accendiMotore(); }
Prima di passare al concetto di ereditarietà voglio evidenziare che se il concetto di costruttore esiste, non esiste il concetto di distruttore.
Vi è il concetto di garbage collection ossia della liberazione della memoria attraverso un processo aleatorio.
Ecco una tabella per confrontare linguaggi, tempo di sviluppo, Performance e gestione della memoria.
Programma | Sviluppo | Performance | Memoria |
Dart | molto rapido | sufficiente meno intuitivo per calcolo intensivo | GC |
Kotlin | buono | buona | GC |
Java | buono | buona | GC |
C# | buona | buona | GC |
Rust | complesso | molto buona | Ownership |
La mia riflessione porta ad affermare che, per favorire la velocità di sviluppo, non si pone più l’attenzione verso l’uso della memoria che viene alla fine usata dai singoli dispositivi mobili.
Esempio di ereditarietà fondamentale poi per apprendere le estensioni delle classi in Flutter:
// Classe base class Persona { String nome; int eta; Persona(this.nome, this.eta); void saluta() { print("Ciao, mi chiamo $nome e ho $eta anni."); } } // Classe derivata che estende Persona class Studente extends Persona { String corsoDiStudi; // Costruttore della classe derivata che chiama il costruttore base Studente(String nome, int eta, this.corsoDiStudi) : super(nome, eta); // Metodo aggiuntivo void studia() { print("$nome sta studiando $corsoDiStudi."); }