Les constructeurs de classe dans Dart
Sommaire
-
Présentation
- Le constructeur est une méthode spéciale utilisée pour initialiser un objet lorsqu’il est créé dans le programme.
- En programmation orientée objet, lorsqu’un objet est créé, il appelle automatiquement le constructeur.
- Toutes les classes ont leur constructeur par défaut qui est créé par le compilateur lorsque la classe est appelée, de plus on peut également définir son propre constructeur.
- L’instanciation d’un objet se fait par l’appel à un constructeur. La syntaxe est la même qu’en Java.
- Le constructeur et les autres méthodes de classe présentent plusieurs différences significatives.
- Le constructeur porte le même nom que le nom de la classe.
- Le constructeur n’a pas de type de retour.
- Lorsqu’un objet est créé, le constructeur est automatiquement appelé.
- Si aucun constructeur n’est spécifié, le constructeur sans argument par défaut est utilisé.
- Par exemple, si on a un attribut « nom » dans notre classe, le paramètre devra être « this.nom ». Il n’y a alors pas besoin d’ écrire le corps de la méthode.
-
Syntaxe et utilisation
- Les constructeurs ont le même nom que le nom de la classe et n’ont pas de type de retour.
- Dans la syntaxe ci-dessus :
class_name
est le nom de la classe dont le constructeur est créé.les paramètres
sont des fonctionnalités facultatives et ils peuvent et ne peuvent pas être définis pour le constructeur. Le constructeur par défaut ne contient aucun paramètre défini.Le corps du constructeur
est le corps du constructeur et est exécuté lorsque le constructeur est appelé, c’est-à-dire lorsqu’un objet est créé.-
Créer un constructeur dans Dart
- Tout d’abord, voyons comment écrire un constructeur de base dans dart.
- Comme nous l’avons mentionné, un constructeur a le même nom que son nom de classe et il ne renvoie aucune valeur.
- Supposons que si nous avons la classe Etudiant, le nom du constructeur doit également être Etudiant.
- Dans l’exemple ci-contre, nous avons créé une fonction constructeur Etudiant() qui est identique au nom de la classe. Nous avons passé deux paramètres dans le constructeur et lorsque nous avons instancié un objet de la classe Etudiant, il a automatiquement appeler le constructeur puis afficher le résultat.
-
Types de constructeurs dans Dart
- Il existe plusieurs types de constructeurs dans Dart, que vous pouvez utiliser pour initialiser une classe. Voici une liste des principaux types de constructeurs en Dart :
-
Constructeur par défaut
- Dart crée automatiquement un constructeur par défaut si vous n’en définissez pas explicitement un. Ce constructeur par défaut initialise les propriétés à leurs valeurs par défaut (0 pour les types numériques, null pour les types objet, etc.).
-
Syntaxe
- Le constructeur par défaut est un constructeur qui n’a aucun paramètre.
- Si vous ne déclarez pas de constructeur, un constructeur par défaut vous est fourni. Le constructeur par défaut n’a pas d’arguments et appelle le constructeur sans argument dans la superclasse (vous le comprendrez mieux dans la leçon sur le super constructeur).
-
Exemple
- Dans cet exemple, la classe Person a deux propriétés : name et age. Comme aucun constructeur n’est défini, Dart fournit automatiquement un constructeur par défaut qui initialise name à null et age à 0. Ensuite, dans la fonction main(), nous créons une instance de Person en utilisant le constructeur par défaut et initialisons ses propriétés.
-
Constructeur nommé
- Vous pouvez définir plusieurs constructeurs nommés pour une classe.
- Pour déclarer un constructeur nommé, utilisez le nom de la classe suivi de
.
et du nom du constructeur. - En Dart il est possible de créer des constructeurs nommés. En principe, en Dart, il n’y a besoin que d’un seul constructeur. Cela étant dû aux possibilités offertes avec les paramètres optionnels. Cependant, il pourrait être pratique d’en posséder plusieurs et de leur donner un nom afin de rendre leur utilité très claire.
- Dans l’exemple de la classe Personne, si un troisième attribut était ajouté comme le numéro de téléphone ou bien l’adresse, il pourrait être utile d’avoir un constructeur complet, mais aussi un autre pour récupérer le nom et le prénom :
-
Constructeur paramètré
- Les constructeurs paramétrés en Dart sont des constructeurs qui acceptent des paramètres pour initialiser les propriétés de la classe.
- Nous pouvons également passer les paramètres à un constructeur, ce type de constructeur est appelé constructeur paramétré. Il est utilisé pour initialiser les variables d’instance. Parfois, nous avons besoin d’un constructeur qui accepte un ou plusieurs paramètres.
- Les constructeurs paramétrés sont principalement utilisés pour initialiser la variable d’instance avec ses propres valeurs. La syntaxe est donnée ci-dessous.
-
Syntaxe
- Dans ce syntaxe, MyClass a un constructeur paramétré qui prend deux paramètres : param1 de type String et param2 de type int.
- Ces paramètres sont utilisés pour initialiser les propriétés property1 et property2 respectivement dans le constructeur de la classe.
-
Exemple
-
Applications
-
App01
- Votre classe Car et son constructeur ici
- Votre tâche est de compléter ce code en créant la classe Car, en ajoutant le constructeur et la méthode printDetails(), puis en créant une instance de la classe Car dans la fonction main() et en appelant la méthode printDetails() sur cette instance.
-
App02
- Soit la classe Chien suivant
- Ajoutez une propriété age à la classe Chien. Modifiez les constructeurs pour inclure cette nouvelle propriété.
- Ajoutez un constructeur paramétré à la classe Chien qui prend le nom et l’âge comme paramètres.
- Ajoutez un constructeur nommé Chien.adulte qui crée un chien avec un âge par défaut de 3 ans.
class_name( [ paramètres ] ){
// Corps du constructeur
}
Les constructeurs n’ont pas de type de retour.
void main() {
// Création d'un objet
Etudiant std = new Etudiant("Ahmed", 26);
}
class Etudiant {
// Déclarer un construstor
Etudiant(String str, int age) {
print("Le nom est: ${str}");
print("L'âge est: ${age}");
}
}
class MyClass {
// Propriétés de la classe
// ...
// Constructeur par défaut (implicitement fourni par Dart)
// Vous n'avez pas besoin de le déclarer explicitement
}
class Person {
String name;
int age;
// Le constructeur par défaut est implicitement fourni par Dart
}
void main() {
// Création d'une instance de Person en utilisant le constructeur par défaut
Person person = Person();
// Accéder aux propriétés de l'objet
person.name = "Alice";
person.age = 30;
// Affichage des détails
print("Name: ${person.name}, Age: ${person.age}");
}
class Personne {
String nom;
String _prenom;
String telephone;
String adresse;
//Un constructeur pour tous les attributs avec le prénom obligatoire
Personne(this._prenom, {this.nom, this.telephone, this.adresse});
//Un constructeur nommé etatCivil qui n'attend que le prénom et le nom
Personne.etatCivil(this._prenom, this.nom);
}
class MyClass {
// Propriétés de la classe
String property1;
int property2;
// Constructeur paramétré
MyClass(String param1, int param2) {
// Initialisation des propriétés avec les paramètres
this.property1 = param1;
this.property2 = param2;
}
}
//Déclaration de la classe chat
class Chat{
String? nom;
String? couleur;
int? age;
//Constructeur basique sans paramètres #1
Chat();
//Ou
//Constructeur basique avec paramètres #2
Chat(String? nom, String? couleur, int? age){
this.nom = nom;
this.couleur = couleur;
this.age = age;
}
//Constructeur nommé avec paramètres #3
Chat.nom(String? nom){
this.nom = nom;
}
//Constructeur nommé sans paramètres #4
Chat.getInstance(){}
}
-
1. Créez une classe appelée `Car` avec les propriétés `make`, `model` et `year`.
2. Ajoutez un constructeur à la classe `Car` qui prend ces trois propriétés comme paramètres et initialise les champs correspondants.
3. Ajoutez une méthode `printDetails()` à la classe `Car` qui imprime les détails de la voiture de la manière suivante : « Make: …, Model: …, Year: … ».
4. Dans la fonction main, créez une instance de la classe `Car` en utilisant le constructeur, puis appelez la méthode `printDetails()` sur cette instance.
void main() {
// Votre code ici
}
Solution
class Chien {
var nom;
// constructeur simple
Chien() {
this.nom = 'inconu';
}
// constructeur nommé
Chien.nom(this.nom);
}
main() {
var chien = Chien.nom('Tango');
print(chien.nom);
}
Solution
class Chien {
var nom;
var age;
Chien() {
this.nom = 'inconnu';
}
Chien.nom(this.nom);
// Nouveau constructeur nommé avec l'âge
Chien.nomEtAge(this.nom, this.age);
}
main() {
var chien1 = Chien.nom('Tango');
print(chien1.nom);
var chien2 = Chien.nomEtAge('Bella', 3);
print(chien2.nom);
print(chien2.age);
}
Solution
class Chien {
var nom;
var age;
Chien() {
this.nom = 'inconnu';
}
Chien.nom(this.nom);
Chien.nomEtAge(this.nom, this.age);
// Nouveau constructeur paramétré
Chien.parametre(this.nom, this.age);
}
main() {
var chien1 = Chien.nom('Tango');
print(chien1.nom);
var chien2 = Chien.nomEtAge('Bella', 3);
print(chien2.nom);
print(chien2.age);
var chien3 = Chien.parametre('Charlie', 2);
print(chien3.nom);
print(chien3.age);
}
Solution
class Chien {
var nom;
var age;
Chien() {
this.nom = 'inconnu';
}
Chien.nom(this.nom);
Chien.nomEtAge(this.nom, this.age);
Chien.parametre(this.nom, this.age);
// Nouveau constructeur nommé avec une logique spécifique
Chien.adulte(this.nom) {
this.age = 3;
}
}
main() {
var chien1 = Chien.nom('Tango');
print(chien1.nom);
var chien2 = Chien.nomEtAge('Bella', 3);
print(chien2.nom);
print(chien2.age);
var chien3 = Chien.parametre('Charlie', 2);
print(chien3.nom);
print(chien3.age);
var chien4 = Chien.adulte('Max');
print(chien4.nom);
print(chien4.age);
}