Menu
Coddy logo textTech

Membres d’instance et statiques

Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy. Leçon 17 sur 110.

Dans les classes Dart, les membres (variables et méthodes) peuvent appartenir soit à des objets individuels, soit à la classe elle-même. Comprendre cette distinction est fondamental pour organiser efficacement votre code.

Les membres d’instance appartiennent à chaque objet que vous créez. Chaque objet possède sa propre copie des variables d’instance, et les méthodes d’instance opèrent sur les données de cet objet spécifique :

class Dog {
  String name;  // Variable d'instance
  
  Dog(this.name);
  
  void bark() {  // Méthode d'instance
    print('$name says woof!');
  }
}

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

dog1.bark();  // Buddy dit woof !
dog2.bark();  // Max dit woof !

Chaque objet Dog possède son propre name. Modifier le nom d’un chien ne modifie pas l’autre.

Les membres statiques appartiennent à la classe elle-même, et non à un objet particulier. Ils sont partagés entre toutes les instances et sont accessibles à l’aide du nom de la classe :

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

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

print(Dog.totalDogs);  // 2

La variable totalDogs est partagée : il n’existe qu’une seule copie, quel que soit le nombre d’objets Dog. Vous y accédez via le nom de la classe Dog.totalDogs, et non via une instance.

challenge icon

Défi

Facile

Construisons un système de comptage des visiteurs pour un musée qui suit à la fois les visites individuelles de chaque exposition et les statistiques globales du musée.

Tu organiseras ton code en deux fichiers :

  • exhibit.dart : définis une classe Exhibit qui représente une exposition du musée. Chaque exposition doit avoir :
    • Une variable d'instance name (String) pour le nom de l'exposition
    • Une variable d'instance visitorCount (int) initialisée à 0 pour suivre le nombre de personnes ayant visité cette exposition spécifique
    • Une variable statique totalVisitors (int) initialisée à 0 pour suivre le nombre total de visites dans toutes les expositions
    • Un constructeur qui prend le nom de l'exposition
    • Une méthode recordVisit() qui incrémente à la fois visitorCount de l'exposition et totalVisitors de la classe
    • Une méthode displayStats() qui affiche les informations de l'exposition
  • main.dart : importe ta classe d'exposition et crée deux expositions :
    • Une exposition 'Dinosaur Bones'
    • Une exposition 'Ancient Egypt'
    Enregistre 3 visites pour l'exposition Dinosaur Bones, puis 2 visites pour l'exposition Ancient Egypt. Après toutes les visites, appelle displayStats() sur chaque exposition dans l'ordre où elles ont été créées, puis affiche le nombre total de visiteurs de toutes les expositions.

La méthode displayStats() doit afficher exactement dans ce format :

[name]: [visitorCount] visitors

Pour la ligne du nombre total de visiteurs, affiche :

Total museum visitors: [totalVisitors]

Accède à la variable statique en utilisant le nom de la classe Exhibit.totalVisitors.

Résultat attendu :

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

Essayez vous-même

import 'exhibit.dart';

void main() {
  // TODO: Create a 'Dinosaur Bones' exhibit
  
  // TODO: Create an 'Ancient Egypt' exhibit
  
  // TODO: Record 3 visits to the Dinosaur Bones exhibit
  
  // TODO: Record 2 visits to the Ancient Egypt exhibit
  
  // TODO: Appeler displayStats() sur chaque exhibit dans l'ordre
  
  // TODO: Print total museum visitors using Exhibit.totalVisitors
  // Format: Total museum visitors: [totalVisitors]
}
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur Dart en ligne