POO :
Programmation Orientée Objet
Intérêt de la POO
◼ Le code est plus sûr
◼ Les programmes sont plus clairs
◼ La maintenance des applications est facilitée
◼ Le code est facilement réutilisable
◼ Il est facile de créer de nouveaux algorithmes
légèrement différents par l’utilisation d’un algorithme
existant
◼ Il est facile de faire évoluer des programmes
Langages Objets
◼ C++
◼ Java
◼ C#
◼ PHP
◼ PYTHON
les caractéristiques de l’Objet
La 1ère étape consiste à déterminer
◼ les entités que l'on souhaite manipuler
◼ la description générique qui relie toutes
ses entités.
Exemple
◼ Prenons ces informations :
◼ 11 Janvier 2020 (Evènement X)
◼ 16 Novembre 2001 (Evènement Y)
Ce sont des dates.
◼ Chaque date se caractérise par :
◼ un jour
◼ un mois
◼ une année.
Les Dates
Date Evènement X
• Jour • 11
• Mois • Janvier
• Année • 2020
Une Date Evènement Y
•8 • 16
• Mars •Novembre
• 2005 • 2001
Classes
◼ Le Jour, le Mois et l’Année sont les
attributs d’une Date.
◼ Cet ensemble d’attributs est appelé une
Classe.
Objets
◼ Le 11 Janvier 2020 et le 20 Novembre
2002 sont chacune des instances de la
classe Date.
◼ Chacune de ces dates est appelée un
Objet.
Autre Exemple : Les planètes
◼ Saturne : planète gazeuse. Son diamètre est de 120.536
km. Elle est à une distance moyenne de 1.426.725.400 km
du Soleil.
◼ Mars : planète rocheuse. Son diamètre est de 6794 km.
Elle est à une distance moyenne de 227.936.640 km du
Soleil.
◼ Jupiter : planète gazeuse. Son diamètre est de 142.984
km. Elle est à une distance moyenne de 779 millions de
km du Soleil.
◼ Terre : planète rocheuse. Son diamètre est de 12.756,28
km. Elle est à une distance moyenne de 150.000.000 km
du Soleil.
Planète (suite)
Ces planètes ont en commun :
◼ Le Type : Rocheuse, Gazeuse
◼ La Distance au Soleil : 227936640, 779
millions, 1426725400, 150000000
◼ Le Diamètre : 12756.28, 120536,
142984, 6794
La classe Planete
Planete Terre Saturne
•Type • Rocheuse • Gazeuse
•DistanceAuSoleil • 150000000 • 1426725400
•Diametre • 12756,28 • 120536
Jupiter Mars
• Gazeuse • Rocheuse
• 779 millions • 227936640
• 142984 • 6794
Encore un Exemple
◼ Ahmed, 21 ans, étudiant en IFA. groupe
1, sous-groupe 2.
◼ Salma, étudiante en informatique, a 19
ans. Elle est dans le sous-groupe 1 du
Groupe 2.
◼ Ibrahim,22 ans, étudiant en
automatisme Il est dans le groupe 3,
sous-groupe 2.
Etudiant
Ici, un étudiant se caractérise par
◼ age
◼ département
◼ groupe
◼ sous-groupe
◼ sexe
Etudiant – 1ère possibilité
Ahmed Salma
Etudiant
• 21 • 19
• Age
• IFA • INFO
• Departement
•1 •2
• Groupe
•2 Ibrahim •1
• SousGroupe
• Garçon • 22 • Fille
• Sexe
• automatisme
•3
•2
• Garçon
Etudiant – 2ème possibilité
Etudiant1 Etudiant3
Etudiant • Ahmed • Salma
• Prénom
• 21 •19
• Age
• IFA • INFO
• Departement Etudiant2
•1 •2
• Groupe • Ibrahim
•2 •1
• SousGroupe • 22
• Garçon • Fille
• Sexe • automatisme
•3
•2
• Garçon
Définir une classe en java
public class Date Public class NomClasse
{
{
Date(){
} Constructeur
int jour; typeAttribut2 nomAttribut2;
String mois; typeAttribut3 nomAttribut3;
int annee; typeAttribut4 nomAttribut4;
}
}
Objet en JAVA
Comment créer un objet event de type
Date ?
La classe Date est un type comme un
autre (int, char…)
{
Date event=new Date();
}
Initialiser un Objet
Pour l’instant, notre objet event n’est pas
encore le 20 Janvier 2020.
Spécifier chaque attribut à la main
event.jour=20;
event.annee=2020;
event.mois="Janvier";
Initialiser un Objet
Autre exemple : la date Naissance
que l'on souhaite initialiser au 1
Mars 1990
{
Date Naissance =new Date();
Naissance.jour=1;
Naissance.annee=1990;
Naissance.mois=" Mars";
}
Intérêt de la POO
Spécifier des comportements génériques
communs à tous les objets de notre
classe.
Par exemple :
◼ s'initialiser
◼ s'afficher
◼ vérifier si c'est contemporain
Initialiser
class Date void initialiser(int j,
{ int a,String m)
int jour ; {
String mois ; jour=j;
int annee ; mois=m;
annee=a;
}
Afficher
public class Date { void afficher()
int jour; {
String mois;
System.out.println
int annee;
( "La date"+
void initialiser(int
jour+« /"+mois+"/"
j, int a,String m) {
+annee);
jour=j;
mois=m;
annee=a; }
}
Contemporain
public class Date { bool Contemporain()
... {
void initialiser(int if( annee >= 2000 )
j, int a,String m) { return true;
... return false;
}
}
}
void afficher(){
...
}
Résultat
// date 1
Date event = new Date();
event.initialiser(20, 2020, "Janvier");
event.afficher(); La date:
if(event.Contemporain())
20/Janvier/2020
System.out.println("elle est contemporaine ");
else elle est
System.out.println("elle n'est pas contemporaine contemporaine
");
// date 2
Date date2 = new Date();
date2.initialiser(1, 1990, "Mars");
La date :
date2.afficher();
if(date2.Contemporain()) 1/Mars/1990
System.out.println("elle est contemporaine "); elle n'est pas
else contemporaine
System.out.println("elle n'est pas
contemporaine ");}
Exercice
◼ Définir une représentation d’un objet Personne. Sachant qu’une personne est
définie à partir de son nom, son prénom et son âge, définissez les données
de la classe Personne, dans l’application MesAmis.
◼ a. Dans la classe Personne, décrivez la méthode présentezVous(), qui
affiche les caractéristiques de la personne concernée.
◼ b. Modifiez l’application de façon à afficher les caractéristiques de l’objet
crée.
◼ c. Dans la classe Personne, décrivez la méthode quelEstVotreNom(), qui
permet de connaître le nom de la personne concernée.
◼ d. Dans la classe Personne, décrivez la méthode quelEstVotreAge(), qui
permet de connaître l’âge de la personne concernée.
◼ e. Modifiez l’application de façon à afficher le nom puis l’âge d’’une
personne.
Correction
import java.util.Scanner;
public class Personne {
public class MainPrinc {
String nom, prenom;
public static void
int age;
main(String[] args) {
Personne(){}
Personne Px=new Personne();
void presentezVous() { Px.quelEstVotreNom();
System.out.println("Nom :"+nom); Px.quelEstVotreAge();
System.out.println("Prenom :"+prenom); Px.presentezVous();
System.out.println("age :"+age); }
}
void quelEstVotreNom() { }
Scanner cl=new Scanner(System.in);
System.out.println("Nom et prenom :");
nom=cl.next();
prenom=cl.next();
cl.close();
}
void quelEstVotreAge() {
Scanner cl=new Scanner(System.in);
Initialiser un Objet – 2ème
Il existe une autre méthode pour initialiser les
attributs d'un objet :
utiliser les constructeurs.
Un constructeur est une "procédure" appelée
automatiquement qui permet de spécifier
chacun des attributs de l’objet en fonction de
ses paramètres.
Un constructeur ne possède aucun type de
retour, même pas void.
Constructeur par défaut
public class Date {
int jour;
String mois;
int annee;
// Constructeur par defaut
Date(){
}
// Un autre constructeur qui initialise l'objet
date au j m a Jour = j; Mois = m; Annee = a */
Date(int j, int a, String m){
this.jour=j;
this.mois=m;
this.annee=a;
Écriture d'un Constructeur
class MaClass
{
type1 Attribut1;
…
MaClass(typeP1 parametre1, typeP2 parametre2, …)
{
…
}
}
Créer mon objet
public static void main (String [] args)
{
//premier objet de type Date
Date event=new Date(21,1995, "Janvier");
event.afficher();
// deuxieme objet de type date
Date date2 = new Date(1, 1990, "Mars");
date2.afficher();
}
Autres Constructeurs Possibles
// Constructeur pour initialiser le jour et le mois
Date(int j, String m){
this.jour=j;
this.mois=m;
}
// Constructeur pour initialiser l’objet par 1 Janvier
2021
Date(){
this.jour=1;
this.mois="Janvier";
this.annee=2021;
}
Usage
//premier objet de type Date avec
initialisation du jour et mois
Date d1=new Date(3,"Juin");
d1.afficher(); La date : 3/Juin/0
// deuxieme objet avec
initialisation par defauts 1
janvier 2021
Date d2= new Date(); La date : 1/Janvier/2021
d2.afficher();
Exercice
a) a. Définir une classe Voiture avec les attributs suivants
: Id, Marque, Vitesse, Puissance.
b) Définir un constructeur permettant d’initialiser les
attributs d'un objet voiture par des valeurs passées en
paramètre.
c) Définir la méthode toString ( ) permettant d’afficher
les informations d'une voiture.
d) Écrire un programme testant la classe Voiture.
mots clés
Le java met à votre disposition 3 mots
clés :
◼ public:
◼ private:
◼ protected:
public:
◼ Tous les attributs ou fonctions situés
sous le mot clé public: sont accessibles
en dehors de l’objet ou depuis
n'importe quelles fonctions de la classe.
◼C'est le comportement par défaut si
aucun mot clé n'est spécifié.
Exemple de public:
class CDate
{
public int Jour;
public int Mois;
public Annee;
public void Affiche()
{
}
}
private:
◼ Tous les attributs ou fonctions situés
sous le mot clé private: ne sont
accessibles que depuis les fonctions de
l’objet.
private:
Date d1=new Date(23,2020,"Janvier");
// Erreur, on n’a pas l’accés à l’attribut
mois de l’objet
System.out.println(d1.mois);
protected:
◼ Utile en ce qui concerne l'héritage.
Nous verrons cela plus tard.
◼ Pour l'instant, protected: est équivalent
à private:
Sécurité
Problème : Comment empêcher l'accès à
certains attributs tout en donnant la
possibilité de les modifier/consulter ?
Solution : Définir des accesseurs
Accesseur en lecture
Un accesseur en lecture est une fonction
de la classe permettant de récupérer
le contenu d'un de ses attributs.
int GetMois()
{
return Mois;
}
Accesseur en écriture
Un accesseur en écriture est une
procédure de la classe permettant de
modifier le contenu d'un de ses
attributs.
void SetMois(int mois)
{
Mois = mois;
}
Protéger les attributs de la
classe CDate
private int jour; // Accesseurs du jour
private String mois; public String getMois() {
private int annee; return mois;}
// Constructeur par defaut public void setMois(String
Date(){ mois) {
} this.mois = mois;}
// Accesseurs du jour // Accesseurs du jour
public int getJour() { public int getAnnee() {
return jour; return annee;
} }
public void setJour(int jour) { public void setAnnee(int
this.jour = jour; annee) {
} this.annee = annee;
}
Reprenons notre exemple
Essayons d’afficher le jour d’un objet de
la classe date ?
{
Date d1=new Date(23,2020,"Janvier");
System.out.println(d1.getJour());