La notion de POO
1) Introduction
POO c’est quoi ????
La programmation orientée objet (POO), ou programmation par objet, est un concept de programmation plus puissant et pratique. En effet, avec ce type de programmation, vous pourrez créer, utiliser, recréer divers objets à travers d’une classe.
Un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d'un livre. Il possède une structure interne et un comportement, et il sait interagir avec ses pairs. Il s'agit donc de représenter ces objets et leurs relations. L’interaction entre les objets via leurs relations permet de concevoir et réaliser les fonctionnalités (méthodes) attendues. Alors le POO est permet de transcrire les éléments du réel sous forme virtuelle.
Exemple :
Qu'est-ce-qu' une classe ?
Une « classe » est un modèle de données définissant la structure commune à tous les objets qui seront créés à partir d'elle. Autrement dit, nous pouvons percevoir une classe comme un moule grâce auquel nous allons créer autant d'objets de même type et de même structure qu'on le désire.
Par exemple, pour modéliser n'importe quelle voiture, nous pourrions écrire une classe Voiture dans laquelle nous définissons les attributs (couleur, matricule, marque, ...) et méthodes (démarrer, accélérer, freiner,...) communs à tout voitures.
Qu'est-ce qu'un objet ?
Un « objet » est une représentation d'une chose matérielle ou immatérielle du réel à laquelle on associe des propriétés et des actions.
Par exemple : une voiture, une personne, un animal, ou bien un compte bancaire peuvent être vus comme des objets.
==> Attributs
Les « attributs » (aussi appelés « données membres ») sont les caractéristiques
==> Méthodes
Les «méthodes» sont les actions applicables à un objet.
Un objet personne, par exemple, dispose des actions suivantes : manger, dormir, boire, marcher, courir ....
Exemple :
Qu'est-ce-qu' une instance ?
Une instance est une représentation particulière d'une classe.
Lorsque l'on crée un objet, on réalise ce que l'on appelle une « instance de la classe ». C'est à dire que du moule, on en extrait un nouvel objet qui dispose de ses attributs et de ses méthodes. L'objet ainsi créé aura pour type le nom de la classe.
Exemple :
Notre première classe
Dans le premier cours sur la programmation en Java, nous avons déjà travaillé avec quelque classe (comme String, Scanner).
Lorsque vous faisiez ceci : String chaine = new String ("Bonjour") ;
Ici chaine est un objet String. Vous avez utilisé un objet de la classe String : on dit que vous avez créé une instance de la classe String.
Le moment est venu pour vous de créer vos propres classes
!!! Attention Si vous avez bien suivi la première partie de ce cours,
Dans le premier cours sur la programmation en Java, nous avons déjà travaillé avec quelque classe (comme String, Scanner).
Lorsque vous faisiez ceci : String chaine = new String ("Bonjour") ;
Ici chaine est un objet String. Vous avez utilisé un objet de la classe String : on dit que vous avez créé une instance de la classe String.
Le moment est venu pour vous de créer vos propres classes
!!! Attention Si vous avez bien suivi la première partie de ce cours,
(👉Voir la première partie👈) nous avons déjà une classe mère s’appelle PremierClass contenant la méthode main. Maintenant nous allons créer une nouvelle classe s’appelle ClasseMain. Suiviez les étapes suivantes :
Pour l’instant tous est bien. nous allons créer une seconde classe s’appelle Personne
!!! Le nom de votre classe « Personne » (avec un « P» majuscule, convention de nommage oblige). Cette fois, vous ne devez pas y créer la méthode main.
Ici, notre classe Personne précédée par un mot clé public. Vous devez savoir que lors que nous créons une classe comme ceci, Eclipse nous facilite la tâche en ajoutant automatiquement ce mot clé, qui correspond à la portée de la classe.
Alors ces deux syntaxes public class Personne { } et class Personne { } sont presque équivalents !
En programmation, la portée détermine qui peut faire appel à une classe, une méthode ou une variable. Vous avez déjà rencontré la portée public : cela signifie que tout le monde peut faire appel à l'élément. Ici dans le cas qui nous intéresse il s'agit d'une méthode. Une méthode marquée comme public peut donc être appelée depuis n'importe quel endroit du programme.
Nous allons ici utiliser une autre portée : private. Elle signifie que notre méthode ne pourra être appelée que depuis l'intérieur de la classe dans laquelle elle se trouve ! Les méthodes déclarées private correspondent souvent à des mécanismes internes à une classe que les développeurs souhaitent « cacher » ou simplement ne pas rendre accessibles de l'extérieur de la classe…
Pour l’instant tous est bien. nous allons créer une seconde classe s’appelle Personne
!!! Le nom de votre classe « Personne » (avec un « P» majuscule, convention de nommage oblige). Cette fois, vous ne devez pas y créer la méthode main.
Ici, notre classe Personne précédée par un mot clé public. Vous devez savoir que lors que nous créons une classe comme ceci, Eclipse nous facilite la tâche en ajoutant automatiquement ce mot clé, qui correspond à la portée de la classe.
Alors ces deux syntaxes public class Personne { } et class Personne { } sont presque équivalents !
En programmation, la portée détermine qui peut faire appel à une classe, une méthode ou une variable. Vous avez déjà rencontré la portée public : cela signifie que tout le monde peut faire appel à l'élément. Ici dans le cas qui nous intéresse il s'agit d'une méthode. Une méthode marquée comme public peut donc être appelée depuis n'importe quel endroit du programme.
Nous allons ici utiliser une autre portée : private. Elle signifie que notre méthode ne pourra être appelée que depuis l'intérieur de la classe dans laquelle elle se trouve ! Les méthodes déclarées private correspondent souvent à des mécanismes internes à une classe que les développeurs souhaitent « cacher » ou simplement ne pas rendre accessibles de l'extérieur de la classe…
2) Les constructeurs
L’objectif de ce chapitre est de construire un objet Personne, il va falloir définir les données qu’on va lui attribuer.
Alors un objet Personne est possède :
* un nom de type String
* un prénom de type String
* un CNI de type int
maintenant, on a une nouvelle variable ( Classe ) (comme int, float, String …) s’appelle Personne, et on peut déclarer une variable ( objet ) de type Personne comme ceci :
P : est un objet d’une classe Personne
Personne : est une variable spéciale s’appelle classe
Pour initialiser l’objet P nous allons devoir utiliser ce qu'on appelle des constructeurs
Un constructeur est une méthode d'instance qui va se charger de créer un objet.
Il existe deux types des constructeurs (constructeur par défaut et Constructeur avec paramètres).
==> constructeur par défaut
un constructeur par défaut, c’est une méthode qui ne prendra aucun paramètre mais permettra tout de même d'instancier un objet, c’est-à-dire initialiser les variables d'instance. Voici votre premier constructeur:
Remarque:
* le constructeur est une méthode qui n'a aucun type de retour
* le (les) constructeur(s) d'une classe doit (doivent) porter le même nom que la classe !
Exemple :
==> constructeur par paramètres
un constructeur par paramètres, c’est une méthode a des paramètres pour initialiser les variables d'instance.
Exemple :
Remarque :
* Pour accéder aux variables d'instance (les données membres) en utilisant le « . » Nom_objet.variable ; ou Nom_objet.méthode () ;
* il vous faudra respecter l'ordre des paramètres passés lors de l'initialisation de votre objet : si non, votre programme ne compilera pas !
Exemple :
On affiche les données de chacune personne P1 et P2
Apres l’exécution de ce programme ci-dessus on obtient le résultat suivant :
Vous constatez que nous pouvons accéder, modifier les variables d’instance directement à travers le nom d’objet suivi par le nom de variable tout simplement. mais C'est très risqué tant que les variables d’instance déclarées public. (en cas d’absence la portée signifie que la variable est déclaré public)
Exemple :
!!! pour résoudre ce problème, où les variables d’un objet seront visibles que dans la classe qui le définit, on ajoute le mot clé private avant chaque variable
Exemple :
Alors un objet Personne est possède :
* un nom de type String
* un prénom de type String
* un CNI de type int
maintenant, on a une nouvelle variable ( Classe ) (comme int, float, String …) s’appelle Personne, et on peut déclarer une variable ( objet ) de type Personne comme ceci :
P : est un objet d’une classe Personne
Personne : est une variable spéciale s’appelle classe
Pour initialiser l’objet P nous allons devoir utiliser ce qu'on appelle des constructeurs
Un constructeur est une méthode d'instance qui va se charger de créer un objet.
Il existe deux types des constructeurs (constructeur par défaut et Constructeur avec paramètres).
==> constructeur par défaut
un constructeur par défaut, c’est une méthode qui ne prendra aucun paramètre mais permettra tout de même d'instancier un objet, c’est-à-dire initialiser les variables d'instance. Voici votre premier constructeur:
Remarque:
* le constructeur est une méthode qui n'a aucun type de retour
* le (les) constructeur(s) d'une classe doit (doivent) porter le même nom que la classe !
Exemple :
==> constructeur par paramètres
un constructeur par paramètres, c’est une méthode a des paramètres pour initialiser les variables d'instance.
Exemple :
Remarque :
* Pour accéder aux variables d'instance (les données membres) en utilisant le « . » Nom_objet.variable ; ou Nom_objet.méthode () ;
* il vous faudra respecter l'ordre des paramètres passés lors de l'initialisation de votre objet : si non, votre programme ne compilera pas !
Exemple :
On affiche les données de chacune personne P1 et P2
Apres l’exécution de ce programme ci-dessus on obtient le résultat suivant :
Vous constatez que nous pouvons accéder, modifier les variables d’instance directement à travers le nom d’objet suivi par le nom de variable tout simplement. mais C'est très risqué tant que les variables d’instance déclarées public. (en cas d’absence la portée signifie que la variable est déclaré public)
Exemple :
!!! pour résoudre ce problème, où les variables d’un objet seront visibles que dans la classe qui le définit, on ajoute le mot clé private avant chaque variable
Exemple :