Encapsulation dans Dart
Encapsulation dans Dart
Objectifs du cours
- Dans cet article, nous allons vous expliquer en profondeur ce que c’est que l’encapsulation, à quoi il sert et pourquoi il est si important dans le paradigme orienté objet.
-
Qu’est-ce que l’encapsulation dans Dart
- Imaginez que vous possédez un coffre au trésor magique auquel vous seul pouvez accéder. Personne d’autre ne sait l’ouvrir, et ils ne peuvent pas jouer avec votre précieux butin.
- Dans la programmation Dart, c’est ce que fait l’encapsulation ! Il nous aide à masquer nos précieuses données dans une boîte secrète (classe alias) et nous permet de contrôler qui peut le toucher et comment.
- L’encapsulation est un concept très crucial de la POO. Cela aide à protéger les données. De plus, le code encapsulé semble plus propre et flexible et peut être modifié selon les besoins.
- Dart ne contient pas de mots clés pour restreindre l’accès, comme le public, protégé ou privé utilisé en Java. L’encapsulation se produit au niveau de la bibliothèque et non au niveau de la classe.
- Il existe une règle simple : tout identifiant (classe, membre de classe, fonction de niveau supérieur ou variable) commençant par un trait de soulignement _ est privé de sa bibliothèque.
-
Comprendre le concept d’encapsulation dans Dart
- L’encapsulation est l’un des principes fondamentaux de la programmation orientée objet (POO) qui consiste à regrouper les données (attributs) et les méthodes (fonctions) qui les manipulent dans une seule entité appelée classe.
- Dans Dart, l’encapsulation signifie cacher les données dans une bibliothèque, les empêchant ainsi d’accéder à des facteurs extérieurs. Cela vous aide à contrôler votre programme et à éviter qu’il ne devienne trop compliqué.
- L’idée est de cacher les détails d’implémentation internes d’une classe et de fournir une interface bien définie pour interagir avec cette classe.
- Dans cet exemple, nom est un membre public de la classe Utilisateur, tandis que _motDePasse est un membre privé. Les détails du mot de passe ne sont pas accessibles directement depuis l’extérieur de la classe, mais peuvent être manipulés à l’intérieur de la classe, par exemple via la méthode publique afficherNomEtMotDePasse().
-
Comment réaliser l’encapsulation en Dart
- Déclaration des attributs privés : Utilisez le préfixe
_
pour déclarer les attributs comme privés à l’intérieur de la classe. - Définition des méthodes d’accès (getters et setters) : Utilisez des méthodes pour accéder et modifier les valeurs des attributs privés. Cela permet un contrôle sur l’accès aux données et peut implémenter une logique supplémentaire si nécessaire.
- Utilisation de méthodes pour les opérations : Plutôt que de manipuler directement les attributs privés depuis l’extérieur de la classe, utilisez des méthodes publiques pour effectuer des opérations sur ces attributs.
- Dans cet exemple, les attributs _firstName et _lastName sont privés et ne peuvent être accédés directement en dehors de la classe Person. Au lieu de cela, des getters et des setters sont utilisés pour accéder à ces attributs.
- La méthode getFullName() est utilisée pour obtenir le nom complet de la personne. Cela garantit que les données sont encapsulées et que l’accès est contrôlé à l’aide de méthodes.
-
Exemples
- Dans cet exemple, nous allons créer une classe nommée Employee . La classe aura deux propriétés privées _id et _name .
- Nous allons également créer deux méthodes publiques getId() et getName() pour accéder aux propriétés privées. Nous allons également créer deux méthodes publiques setId() et setName() pour mettre à jour les propriétés privées.
- Dans cet exemple, nous allons créer une classe nommée Employee . La classe a une propriété privée _name . Nous allons également créer une méthode publique getName() pour accéder à la propriété privée.
Un exemple simple en Dart illustrant l’encapsulation :
class Utilisateur {
// Membre public
String nom;
// Membre privé
String _motDePasse;
// Constructeur
Utilisateur(this.nom, this._motDePasse);
// Méthode publique
void afficherNomEtMotDePasse() {
print("Nom: $nom, Mot de passe: $_motDePasse");
}
}
void main() {
Utilisateur utilisateur = Utilisateur("JohnDoe", "motdepasse123");
// Accéder à un membre public
print("Nom de l'utilisateur: ${utilisateur.nom}");
// Accéder à un membre privé via une méthode publique
utilisateur.afficherNomEtMotDePasse();
}
Exemple01
class Person {
// Attributs privés
String _firstName;
String _lastName;
// Constructeur
Person(this._firstName, this._lastName);
// Getters et setters pour _firstName
String get firstName => _firstName;
set firstName(String value) => _firstName = value;
// Getters et setters pour _lastName
String get lastName => _lastName;
set lastName(String value) => _lastName = value;
// Méthode pour afficher le nom complet
String getFullName() {
return '$_firstName $_lastName';
}
}
void main() {
// Création d'un objet Person
var person = Person('John', 'Doe');
// Utilisation des getters et setters
print('Prénom : ${person.firstName}');
print('Nom : ${person.lastName}');
// Modification des attributs privés à l'aide des setters
person.firstName = 'Alice';
person.lastName = 'Smith';
// Affichage du nom complet en utilisant une méthode
print('Nom complet : ${person.getFullName()}');
}
Exemple01
class Employee {
// Propriétés privées
int? _id;
String? _name;
// Méthode getter pour accéder à la propriété privée _id
int getId() {
return _id ?? 0; // Retourne 0 ou fournit une valeur par défaut si _id est null
}
// Méthode getter pour accéder à la propriété privée _name
String getName() {
return _name ?? ''; // Retourne une chaîne vide ou fournit une valeur par défaut si _name est null
}
// Méthode setter pour mettre à jour la propriété privée _id
void setId(int id) {
_id = id;
}
// Méthode setter pour mettre à jour la propriété privée _name
void setName(String name) {
_name = name;
}
}
void main() {
// Créer un objet de la classe Employee
Employee emp = Employee();
// Définir des valeurs à l'objet en utilisant le setter
emp.setId(1);
emp.setName("John");
// Récupérer les valeurs de l'objet en utilisant le getter
print("Id: ${emp.getId()}");
print("Nom: ${emp.getName()}");
}
Exemple 2 : Propriétés privées dans Dart
class Employee {
// Propriété privée
var _name;
// Méthode getter pour accéder à la propriété privée _name
String getName() {
return _name;
}
// Méthode setter pour mettre à jour la propriété privée _name
void setName(String name) {
this._name = name;
}
}
void main() {
// Créer une instance de la classe Employee
var employee = Employee();
// Définir une valeur à la propriété en utilisant le setter
employee.setName("Jack");
// Récupérer la valeur de la propriété en utilisant le getter
print(employee.getName());
}