Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Lycée Diderot – BTS I.R.I.S
Courriel : [email protected] , URL : http://www.diderot.org
G.VALET N o v 2010
Vers ion 1 . 0
LA PROGRAMMATION
ORIENTÉE OBJET
1
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
La programmation
procédurale
Une suite d’instructions
s’exécutant les unes après les
autres
Avec des procédures ou des
fonctions (sous-programmes)
Cette approche a permis de
décomposer les
fonctionnalités d’un
programme en procédures
qui s’exécutent
séquentiellement
Exemple d’algorithme
2
COMMENT FAISAIT-ON AVANT ?
Programme
Instruction 1
Décision
Instruction 2
Instruction 12
Appel sous programme
Instruction 4
Fin
Début
Sous programme
Instruction 2
Instruction 1
Décision
Instruction 3
Instruction 21
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Devant la complexité des applications, cette technique de programmation présentait quelques inconvénients
Cette méthode oblige le développeur à penser de manière algorithmique
L’approche algorithmique est en général proche du langage de la machine
Le développeur doit faire un effort supplémentaire pour structurer le programme
Finalement, le procédural est très éloigné de notre manière de penser
Le code est peu lisible
Et difficile à modifier, à maintenir
L’ajout de fonctionnalités dif ficile
Réutilisation du code incertaine
Attention au « Copier/Coller »
Le travail d’équipe est délicat
3
LES LIMITES DU TOUT PROCÉDURAL
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Finalement, il est peut-être plus simple de s’inspirer du
monde réel
Le monde réel est composé d’objets, d’êtres vivants, de matière
Pourquoi ne pas programmer de manière plus réaliste ?
Les objets ont des propriétés
Un chat à 4 pattes, un serpent aucune
Les objets ont une utilité, une ou plusieurs fonctions
Une voiture permet de se déplacer
Un couteau peut couper
Alors, plutôt que de focaliser sur les procédures, intéressons -
nous d’avantage aux données
De cette analyse est née la programmation orientée objet
4
LE MONDE RÉEL ET LA PROGRAMMATION
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Qu’est -ce qu’un objet ?
Un élément qui modélise toute entité, concrète ou abstraite, manipulée par le logiciel
Exemple : Une voiture avec 4 roues, un volant, un moteur, ….
Un élément qui réagit à certains messages qu’on lui envoie de l’extérieur
C’est son comportement, ce qu’il sait faire
Exemple : Avec cette voiture, je peux tourner, accélérer, freiner, …
Un élément qui ne réagit pas toujours de la même manière
Son comportement dépend de l’état dans lequel il se trouve
Exemple : Essayez de démarrer sans essence !!?
L’objet est l’élément central de la POO
Ces objets doivent être :
Modélisés
Utilisés
Détruits
5
L’OBJET AU CŒUR DU SYSTÈME
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Une identité unique
Qui permet de le distinguer d’un autre
Exemple : La plaque d’immatriculation pour 2 voitures de même modèle
Un état interne
Donné par des valeurs de variables internes appelées attributs ou membres
Exemple : Un train roule à 150,7 km/h, transporte 200 personnes
Ces attributs/membres sont typés et portent un nom
Exemple : float vitesse; int nb_voyageurs;
Un comportement
Capacités d’actions données par des fonctions ou des sous programmes : Les méthodes ou opérations
Exemple : La méthode « freiner() » de l’objet « voiture »
Ces méthodes définissent le comportement de l’objet face à des stimulations extérieures
Exemple : Le freinage doit être moins brutal par temps de pluie (ABS)
6
LES 3 CARACTÉRISTIQUES DE L’OBJET
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Un objet c’est :
Des données (Un état)
Des algorithmes (Des méthodes)
Exemple
90909090
reculer()
Freiner( )To
urn
er(
)
avancer()
float vitGfloat vitD
bool sensGbool sensD
7
A QUOI RESSEMBLE UN OBJET ?
Méthodes Elles représentent le
savoir faire de l’objet
Attributs Ils représentent
l’état de l’objet
Pour avancer, il faut
modifier vitG et vitD
Pour reculer, il faut modifier
sensG et sensD
Pour tourner, il faut que
𝑣𝑖𝑡𝐺 ≠ 𝑣𝑖𝑡𝐷
Pour freiner, il suffit de faire
tendre vitG et vitD vers 0
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Dans l’exemple du robot précédent
Comment peut-on empêcher le blocage des roues ?
Empêcher que vitG=vitD=0 car freinage brutal
Comment empêcher l’inversion brutale du sens de rotation des moteurs ?
Eviter de casser la mécanique
Comment éviter un virage trop serré qui remettrait en cause la stabilité de la
trajectoire ?
Eviter un renversement
I l faudrait empêcher la modification directe de l’état du robot
Utiliser plutôt les méthodes dont les concepteurs auront prévu ces cas
d’utilisation extrêmes
Des règles d’accès à l’état d’un objet sont indispensables
pour éviter les mauvaises utilisations
Règles d’encapsulation
8
QUELQUES REMARQUES
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Principe
Les attributs de l’objet sont privés
Inaccessibles directement depuis l’extérieur
Les méthodes sont publiques et forme une interface de manipulation de
l’objet
9
LES RÈGLES D’ENCAPSULATION
90909090
reculer()
Freiner( )
Tou
rner
( )
avancer()
float vitGfloat vitD
bool sensGbool sensD
L’accès direct est
interdit car les
attributs sont privés L’utilisation des
méthodes publiques
permet de modifier
l’état de l’objet
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Les objets vont être capables d’interagir et de communiquer
entre eux
Par l’intermédiaire des méthodes publiques
Ils vont s’envoyer des messages par l’intermédiaire des méthodes publiques
Pour envoyer un message au robot :
On appelle la méthode (exemple : tourner() )
En spécifiant l’objet cible ( exemple : monRobot)
En précisant d’éventuels paramètres
10
LES OBJETS COMMUNIQUENT
90909090
reculer()
Freiner( )
Tou
rner
( )
avancer()
float vitGfloat vitD
bool sensGbool sensD
monRobot.tourner(12);
Le robot tournera à gauche si le
paramètre est positif et à droite s’il est
négatif (C’est un exemple, on peut
faire autrement)
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
L’appel de méthode est effectué par un autre objet
11
LES OBJETS COMMUNIQUENT (2)
90909090 90909090
reculer()
Freiner( )
Tou
rner
( )
avancer()
float vitGfloat vitD
bool sensGbool sensD
monRobot.tourner(12);
Objet monRobot Objet unPilote
L’objet « unPilote » appelle la méthode
« tourner » de l’objet « monRobot ».
Le récepteur du message est
« monRobot ». L’objet « unPilote » est
l’envoyeur du message
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Avant de créer des objets, i l faut définir un modèle
Des objets pourront être crées à partir de ce modèle
Ce modèle s’appelle une classe
Les objets fabriqués à partir du modèle sont des instances
12
LES CLASSES ET LES OBJETS
Classe Robot
90909090
reculer()
Freiner( )
Tou
rner
( )
avancer()
float vitGfloat vitD
bool sensGbool sensD
90909090
reculer()
Freiner( )
Tou
rner
( )
avancer()
float vitGfloat vitD
bool sensGbool sensD
90909090
reculer()
Freiner( )
Tou
rner
( )
avancer()
float vitGfloat vitD
bool sensGbool sensD
La classe Robot représente un
modèle d’objet
Objet robot1 est une
instance de Robot
Objet robot2 est une
instance de Robot
Instanciation
Code Mémoire
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
En langage C++
La classe est définie dans un fichier d’entête : CRobot.h
13
CONSTITUTION D’UNE CLASSE (C++) 1/2
class CRobot {
private :
float vitG;
float vitD;
int sensG;
int sensD;
public :
void tourner(int dir);
void reculer(int vit);
void avancer(int vit);
void freiner(int force);
float getVitesseG();
float getVitesseD();
}
Les attributs sont privés et ne sont pas
accessibles depuis l’extérieur
Les méthodes sont publiques et
peuvent être appelées depuis l’extérieur
Certaines méthodes ne servent qu’à
accéder aux attributs. Ce sont les
accesseurs de données
Le nom de la classe
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Ensuite, le fichier de définition de la classe : Crobot.cpp
14
CONSTITUTION D’UNE CLASSE (C++) 2/2
class CRobot {
void CRobot::tourner(int dir) {
// Corps de la méthode
}
float Crobot::getVitesseG() {
return vitG;
}
// Suite …
}
Le nom de la classe
La définition de la méthode :
Attention à l’opérateur ::
Le corps de la méthode
Cette méthode donne un
accès en lecture seule à
l’attribut « vitG ». Pas de
méthode setVitesse() pour
éviter les mauvais cas
d’utilisation La méthode renvoie l’attribut
demandé
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
En langage Java, un seul fichier contient toute la classe :
robot.java
15
CONSTITUTION D’UNE CLASSE (JAVA)
public class Robot {
private float vitG;
private float vitD;
private int sensG;
private int sensD;
public void tourner(int dir) {
// Corps de la méthode
}
public float getVitesseG() {
return vitG;
}
}
Le nom de la classe
La déclaration des attributs
de la classe
Prototype et corps de la
méthode
Prototype et corps de la
méthode accesseur de
données
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Pour représenter une classe, on utilise le langage de
modélisation UML (Unified Modeling Language) :
16
REPRÉSENTATION UML D’UNE CLASSE
+tourner(entrée dir : int) : void+freiner(entrée force : int) : void+avancer(entrée vit : float) : void+reculer(entrée vit : float) : void+getVitesseD() : float
-vitG : float-vitD : float-sensG : int-sensD : int
CRobot Le nom de la classe
Les attributs de la classe
sont privés (présence du -)
Les méthodes de la classe
sont publiques (présence
du +)
Méthode « tourner » ne renvoie rien
et prend un paramètre « dir » de
type entier. Ce paramètre ne sera
pas modifié dans le corps de la
méthode (Passage par valeur)
Méthode
« getVitesseD() »
renvoie un flottant
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Le jeu des balles rebondissantes :
Objectif : Déplacer des balles dans un graphique
Contrainte : Le graphique a une taille limitée
Les balles doivent rebondir sur les parois
I l faut raisonner « objet »
La classe Ball :
17
EXEMPLE DE CONCEPTION OBJET 1/3
90909090
dessin
er()deplacer()
double xdouble y
Graphics dessinColor couleurdouble dx,dy
Permet de déplacer la balle
dans la zone de dessin
Permet de dessiner la balle dans
la zone de dessin
x : Position abscisse
x : Position ordonnée
dx : Déplacement d’abscisse
dy : Déplacement d’ordonnée
Dessin : Objet Zone de dessin
Couleur : Objet représentant la couleur
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Une autre classe : La classe Panneau
18
EXEMPLE DE CONCEPTION OBJET 2/3
90909090
ajou
terBalle()
demarrer()
Balle[] mesBallesGraphics zoneDessin
stop
per()
Permet de démarrer
l’animation en déplaçant les
balles
Permet d’ajouter une balle
dans l’animation
mesBalles : C’est un tableau
contenant toutes les balles
zoneDessin : C’est la zone où
dessiner les balles
public void ajouterBalle (Balle uneBalle)
{ … }
Prototype possible de la méthode ajouterBalle()
Le paramètre de la méthode
est un objet (de type Balle)
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Communication entre les objets
19
EXEMPLE DE CONCEPTION OBJET 3/3
90909090
ajou
terBalle()
demarrer()
Balle[] mesBallesGraphics zoneDessin
stop
per()
monPanneau 90909090
dessin
er()
deplacer()
double xdouble y
Graphics dessinColor couleurdouble dx,dy
90909090
dessin
er()
deplacer()
double xdouble y
Graphics dessinColor couleurdouble dx,dy
90909090
dessin
er()
deplacer()
double xdouble y
Graphics dessinColor couleurdouble dx,dy
mesBalles[0]
mesBalles[1]
mesBalles[2]
mesBalles[1].deplacer();
mesBalles[1].dessiner();
mesBalles[2].deplacer();
mesBalles[2].dessiner();
Instancié à partir de
la classe Panneau
Instancié à partir de
la classe Balle
mesBalles[0].deplacer();
mesBalles[0].dessiner();
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
La création d’un objet est appelé « instanciation »
L’instanciation permet de réserver un espace mémoire
Les attributs de l’objet crée sont stockés dans cet espace mémoire
Comme toute variable les attributs doivent être initialisés
Comment créer un objet ?
En appelant une méthode spéciale : Le constructeur
Rôle du constructeur :
Initialiser les attributs de la classe
Préparer le travail de l’objet
Exemples :
Initier une connexion réseau
Ouvrir un fichier de travail
Réserver de la mémoire, …
20
LA CRÉATION D’UN OBJET
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Définition de la
classe Java
21
LE CONSTRUCTEUR : EXEMPLE EN JAVA
public class Robot {
private float vitG;
private float vitD;
private int sensG;
private int sensD;
public Robot() {
vitG = 0.0F;
vitD = 0.0F;
sensD = 0;
sensG = 0;
}
public Robot(float vit1, float vit2) {
vitG = vit1;
vitD = vit2;
sensD = 0;
sensG = 0;
}// Suite de la classe
}
Constructeur de la
classe Robot ne
renvoie rien (Même
pas void)
Le constructeur
initialise chaque
attribut
2ème constructeur
prenant des
paramètres Initialisation de vitG
et vitD avec vit1 et
vit2
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
22
LE CONSTRUCTEUR : EXEMPLE EN C++
class CRobot {
CRobot::CRobot() {
vitG=0.0;
vitD=0.0;
sensG=0;
sensDG=0;
}
CRobot::CRobot(float vit1,
float vit2) {
vitG=vit1;
vitD=vit2;
sensG=0;
sensDG=0;
}
// Suite …
}
class CRobot {
private :
float vitG;
float vitD;
int sensG;
int sensD;
public :
CRobot();
CRobot(float , float);
void tourner(int dir);
void reculer(int vit);
void avancer(int vit);
void freiner(int force);
float getVitesseG();
float getVitesseD();
}
Fichier d’entête Fichier de définition
de classe
Définition du
constructeur
2ème constructeur
Déclaration 2ème
constructeur
Déclaration du
constructeur
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Le constructeur est une méthode qui a les caractéristiques
suivantes :
Il porte le même nom que la classe
Il ne renvoie rien
Il ne contient pas d’instruction return
Un constructeur peut prendre aussi des paramètres
Comme une méthode
La définition du constructeur n’est pas obligatoire
Dans ce cas, un constructeur par défaut est automatiquement appliqué
Cela signifie que, quoiqu’il arrive, un constructeur sera toujours appelé
Explicitement
Implicitement
23
CARACTÉRISTIQUES DU CONSTRUCTEUR
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
La création de se déroule en 2 temps :
Création d’une référence à l’objet (Le nom de la variable objet)
Appel d’un constructeur
Cette création peut se faire dans le programme principal ou
depuis un autre objet
Rappel : Un objet peut-être composé d’un ou plusieurs autres objets
Les objets membres (composés) doivent être également initialisés
Possibilité de créer plusieurs constructeurs
Chaque constructeur aura des paramètres différents
Permet au développeur de proposer plusieurs manières de créer un objet
24
ET MAINTENANT, COMMENT CRÉER UN OBJET ?
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
En C++
En Java
Utilisation de l’opérateur new obligatoire
L’opérateur new n’a pas la même signification qu’en C++
25
EXEMPLE D’APPEL AU CONSTRUCTEUR
CRobot unRobot;
CRobot unAutreRobot;
unRobot = Robot();
unAutreRobot = Robot(5.0, 7.0);
CRobot unRobot;
CRobot unAutreRobot;
unRobot = new Robot();
unAutreRobot = new Robot(12.4F, 5.3F);
Création d’une
nouvelle variable
Instanciation du
nouvel objet
Instanciation du avec
l’opérateur new
Diderot Lycée Section technicien supérieur
en Informatique et réseaux
La P.O.O Les objets
IRIS
La Programmation orientée objet
Les classes Exemple de conception Constructeurs
Le constructeur est représenté comme une méthode normale
Son nom est le même que la classe
26
REPRÉSENTATION UML DU CONSTRUCTEUR
+Capteur()+Capteur(entrée intervalle : int)+mesurer()+getTemperature() : float+getHumidite() : float
-temp : float-humidite : float
Capteur
1er Constructeur
2ème constructeur
Méthodes normales