Menu
Coddy logo textTech

Membri di istanza e statici

Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 17 di 110.

Nelle classi Dart, i membri (variabili e metodi) possono appartenere ai singoli oggetti oppure alla classe stessa. Comprendere questa distinzione è fondamentale per organizzare il codice in modo efficace.

I membri di istanza appartengono a ogni oggetto che crei. Ogni oggetto ha la propria copia delle variabili di istanza e i metodi di istanza operano sui dati di quello specifico oggetto:

class Dog {
  String name;  // Variabile di istanza
  
  Dog(this.name);
  
  void bark() {  // Metodo di istanza
    print('$name says woof!');
  }
}

Dog dog1 = Dog('Buddy');
Dog dog2 = Dog('Max');

dog1.bark();  // Buddy fa bau!
dog2.bark();  // Max fa bau!

Ogni oggetto Dog ha il proprio name. Cambiare il nome di un cane non influisce sull'altro.

I membri statici appartengono alla classe stessa, non a un oggetto specifico. Sono condivisi tra tutte le istanze e si accede a essi usando il nome della classe:

class Dog {
  String name;
  static int totalDogs = 0;  // Variabile statica
  
  Dog(this.name) {
    totalDogs++;
  }
}

Dog dog1 = Dog('Buddy');
Dog dog2 = Dog('Max');

print(Dog.totalDogs);  // 2

La variabile totalDogs è condivisa: ne esiste una sola copia, indipendentemente dal numero di oggetti Dog. Vi accedi tramite il nome della classe Dog.totalDogs, non tramite un'istanza.

challenge icon

Sfida

Facile

Creiamo un sistema di conteggio dei visitatori per un museo che tiene traccia sia delle visite alle singole esposizioni sia delle statistiche complessive del museo.

Organizzerai il codice in due file:

  • exhibit.dart: definisci una classe Exhibit che rappresenta un'esposizione museale. Ogni esposizione dovrebbe avere:
    • Una variabile di istanza name (String) per il nome dell'esposizione
    • Una variabile di istanza visitorCount (int) che parte da 0 per tenere traccia di quante persone hanno visitato questa specifica esposizione
    • Una variabile statica totalVisitors (int) che parte da 0 per tenere traccia del totale delle visite a tutte le esposizioni
    • Un costruttore che accetta il nome dell'esposizione
    • Un metodo recordVisit() che incrementa sia visitorCount dell'esposizione sia totalVisitors della classe
    • Un metodo displayStats() che stampa le informazioni sull'esposizione
  • main.dart: importa la classe dell'esposizione e crea due esposizioni:
    • Un'esposizione 'Dinosaur Bones'
    • Un'esposizione 'Ancient Egypt'
    Registra 3 visite all'esposizione Dinosaur Bones, poi registra 2 visite all'esposizione Ancient Egypt. Dopo tutte le visite, chiama displayStats() su ciascuna esposizione nell'ordine in cui sono state create, quindi stampa il totale dei visitatori di tutte le esposizioni.

Il metodo displayStats() dovrebbe stampare esattamente in questo formato:

[name]: [visitorCount] visitors

Per la riga con il totale dei visitatori, stampa:

Total museum visitors: [totalVisitors]

Accedi alla variabile statica usando il nome della classe Exhibit.totalVisitors.

Output previsto:

Dinosaur Bones: 3 visitors
Ancient Egypt: 2 visitors
Total museum visitors: 5

Provalo tu

import 'exhibit.dart';

void main() {
  // TODO: Crea una mostra 'Dinosaur Bones'
  
  // TODO: Crea una mostra 'Ancient Egypt'
  
  // TODO: Registra 3 visite alla mostra Dinosaur Bones
  
  // TODO: Registra 2 visite alla mostra Ancient Egypt
  
  // TODO: Chiama displayStats() su ogni mostra, nell'ordine
  
  // TODO: Stampa il numero totale di visitatori del museo usando Exhibit.totalVisitors
  // Formato: Total museum visitors: [totalVisitors]
}
quiz iconMettiti alla prova

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

Esercitati da solo: Compilatore Dart online