APPROCHE
ORIENTÉE
OBJET POO - CPP
Dr. Soukeina Ben Chikha
(C) SOUKEINA BEN CHIKHA 1
Sommaire
1. Approche Orientée Objet
2. Les principes du paradigme Objet.
3. La notion de classe, d’objet, d'attributs et de méthodes.
○ L'écriture de classes et leur instanciation.
○ Les constructeurs, les méthodes et les attributs.
4. Attributs et méthodes statiques
(C) SOUKEINA BEN CHIKHA 2
Sommaire
1. Lecture / exécution en ligne de commande
2. Lecture à partir du clavier
(C) SOUKEINA BEN CHIKHA 3
1. Introduction
● Nous avons vu plusieurs types de base en java (int pour les
entiers, double pour les flottants, , etc.), ainsi que les structures
● Les notions de classe et d’objet va nous permettre de généraliser la
notion de « type » afin de créer de nouvelles structures de données un
peu plus complexe et plus complètes.
(C) SOUKEINA BEN CHIKHA 4
1. Introduction
Historique
● L’approche OO est apparue dans plusieurs domaines de l’informatique :
○ Approches OO
○ Conception OO
○ POO*
○ BD OO
○ Système d’exploitation OO
(C) SOUKEINA BEN CHIKHA 5
1. Introduction
● Programmation procédurale
○ Suites d’instructions agissant sur
les données
○ Dissociation entre données et
fonctions
○ ! Problème lors du changement
des structures de données
(exemple pile)
○ ! Mauvais traitement des données
(C) SOUKEINA BEN CHIKHA 6
1. Introduction
● Problème lors du changement d’une structure de données
○ Découplage entre les traitement (procédures et fonctions) et les
données sur lesquelle elles opèrent
Exemple :
typedef struct Pile …
int empiler() …
int dépiler() …
○ Si on veut changer la structure de données Pile (tableau vers liste
chainée), on doit retrouver toutes les traces où elle est utilisée et les
changer.
(C) SOUKEINA BEN CHIKHA 7
1. Introduction
● Mauvais traitement des données
Deux entiers x et y
x=3;
y=6;
Somme(x,y);
P= x*y
Personne P1, P2;
X=[Link]; //numéro d'identité
Y=[Link] //numéro d'identité
Somme(X,Y) // aucun sens logique!!!!!!!!!!!!!!!!!!!!!!!!!
8
(C) SOUKEINA BEN CHIKHA
1. Introduction
○ On veut responsabiliser les parties du code
○ D’où la naissance de l’idée que les données ne doivent pas être
définies par leur implémentation mais par les opérations qu’elles
offrent:
■ Exemple : int + * - /
→ la naissance de la programmation oientée objet
(C) SOUKEINA BEN CHIKHA 9
2. Principes du paradigme Objet
● Un programme : un ensemble d'entités
Pendant son exécution les entités collaborent
pour résoudre le problème final en s'envoyant
des messages entre elles.
● Une entité est un objet qui prend en compte
sa propre gestion tout en gardant la liaison
inévitable entre les données et les fonctions
opérant sur ces données.
10
(C) SOUKEINA BEN CHIKHA
2. Principes du paradigme Objet
Programmation structurée Programmation OO
Données
Des entiers
Des personnes Données Données
Des entiers Des Personnes
Les fonctions Les fonctions Les fonctions
Somme Somme Modifier_id
Produit Produit Afficher
Modifier_id
Afficher_p
(C) SOUKEINA BEN CHIKHA 11
2. Principes du paradigme Objet
2.1 Objet
● Les données sont aussi importantes que les traitements.
● Un objet est quelque chose qui contient des données, de plus il peut faire des choses
● Données + traitement constituent = “tout” : Objet
Objet
=
données + opérations sur les données (méthodes)
=
Variables de type abstrait (Personne)
=
Entité du domaine du problème (Article, stock, …)
(C) SOUKEINA BEN CHIKHA 12
2. Principes du paradigme Objet
2.1 Objet
○ Un objet est composé de 2 parties:
■ Partie interface
■ Partie interne
○ L’utilisateur (tout élément extérieur à l’objet) ne voit que la partie inetrface.
○ Les entités ou les objets d’un programme doivent être indépendants (le plus
indépendants possible)
(C) SOUKEINA BEN CHIKHA 13
2. Principes du paradigme Objet
2.2 Classe
Classe
=
Modèle décrivant le contenu et le comportement des futurs objet de cette classe
=
Ensemble d’objets
(C) SOUKEINA BEN CHIKHA 14
2. Principes du paradigme Objet
2.2 Classe
● Exemple: classe voiture
● Un exemple particulier d’une classe s’appelle une instance de la classe ou un objet de
cette classe.
POO P. Procédurale
Objet Variable
Classe Type
15
(C) SOUKEINA BEN CHIKHA
2. Principes du paradigme Objet
2.2 Classe
Une classe définit des attributs et des méthodes.
● Par exemple, classe Voiture qui servira à créer des
objets qui sont des voitures.
● Cette classe va pouvoir définir un attribut couleur, un
attribut vitesse, etc. Ces attributs correspondent à des
propriétés qui peuvent exister pour une voiture.
● La classe Voiture pourra également définir une
méthode rouler(). Une méthode correspond en quelque
sorte à une action, ici l’action de rouler peut être
réalisée pour une voiture.
(C) SOUKEINA BEN CHIKHA 16
2. Principes du paradigme Objet
2.2 Classe
● Une classe Avion, elle pourra définir une méthode voler(). Elle Avion
pourra aussi définir une méthode rouler(). Altitude
Couleur
● Par contre, la classe Voiture n’aura pas de méthode voler() car Vitesse
une voiture ne peut pas voler. Voler()
● De même, la classe Avion pourra avoir un attribut altitude mais Rouler()
ce ne sera pas le cas pour la classe Voiture.
● Une classe est représentative de la notion qu’elle met en place.
(C) SOUKEINA BEN CHIKHA 17
2. Principes du paradigme Objet
2.2 Classe
● On dit qu’un objet est une instance de classe.
V1 : Voiture
● Soit la classe Voiture, nous pourrons avoir plusieurs voitures qui seront Couleur :
rouge
chacune des instances bien distinctes. Vitesse : 300
○ Par exemple, la voiture de Rose, qui est de couleur rouge avec une Rouler()
vitesse de 300 km/h, est une instance de la classe Voiture, c’est
un objet.
V2 : Voiture
○ De même, la voiture de Jeff, qui est de couleur grise avec une vitesse
Couleur :
de 350 km/h, est un autre objet. gris
Vitesse : 350
● Nous avons plusieurs objets pour une même classe, en particulier ici deux
Rouler()
objets (autrement dit : deux instances de la même classe).
● Chacun des objets a des valeurs qui lui sont propres pour les attributs.
(C) SOUKEINA BEN CHIKHA 18
2. Principes du paradigme Objet
2.3 Encapsulation
Encapsulation
=
Regroupement de code et de données avec masquage de
l’information du monde extérieur
(C) SOUKEINA BEN CHIKHA 19
2. Principes du paradigme Objet
2.3 Encapsulation
● Exemple 1 : télécommande : le mécanisme pour changer de chaine ne nous
intéresse pas, il est encapsulé, mais, on peut l’utiliser
● Exemple 2 : On utilise la fonction Empiler, Sort, …, comment elles sont
implémentées? On ne s’y attarde pas.
(C) SOUKEINA BEN CHIKHA 20
2. Principes du paradigme Objet
2.3 Encapsulation
● Avantages :
○ Simplicité apparente pour l'utilisateur.
○ Meilleure portabilité
○ Vision homogène des objets
(C) SOUKEINA BEN CHIKHA 21
2. Principes du paradigme Objet
2.4 Héritage
● Notion rattachée aux classes.
● Ré-utilisation du code
● L’héritage :
○ construire une classe à partir d'une autre.
○ une dérivation.
○ Exemple automobile et camion héritent ou dérivent de
Véhicule.
● La classe dont on dérive est dite classe de base. Les classes
obtenues par dérivation sont dites classes dérivées. (ou classe
mère et filles)
(C) SOUKEINA BEN CHIKHA 22
2. Principes du paradigme Objet
2.4 Héritage
● classe A → sous classe B
→ sous classe C
● Les sous-classes B et C ont les memes caractéristiques que la classe A + une ou
plusieurs autres caractéristiques
● Les informations se transmettent implicitement d’une super classe ( classe mère ) vers
une sous classes.
● Exemple : classe Point et classe Point coloré (un Point + une couleur)
23
(C) SOUKEINA BEN CHIKHA
2. Principes du paradigme Objet
2.4 Héritage
● Vision descendante :
○ L'héritage est la possibilité de pouvoir reprendre intégralement tout ce
qui a déjà été fait et de pouvoir l'enrichir.
○ Exemple : Classe Employer puis Classes DRH, Technicien, Ouvrier, …
● Vision ascendante:
○ L'héritage est la possibilité de regrouper en un seul endroit ce qui est
commun à plusieurs. Les modifications communes des éléments ne se
font qu’à un seul endroit.
○ Exemple : Classes DRH, Technicien, Ouvrier, … → Créer Classe employer
pour les éléments communs.
(C) SOUKEINA BEN CHIKHA 24
2. Principes du paradigme Objet
2.5 Polymorphisme
● Morphisme : structure
● Polymorphisme : plusieurs structures
● Le polymorphisme est l’aptitude qu’ont les objets à réagir différemment à un même
message. L’intérêt est de pouvoir gérer une collection d’objets de façon homogène tout
en conservant le comportement propre à chaque objet.
● Exemple :
○ plusieurs figures géométrique (cercle, rectangle , …) avec les méthodes dessiner ()
ou périmètre() on fait un appel identique (gestion homogène) mais pour chaque
objet, nous avons un comportement (code) différent.
(C) SOUKEINA BEN CHIKHA 25
2. Principes du paradigme Objet
2.6 Généricité
● Ecrire une procédure qui correspond à tout type.
(C) SOUKEINA BEN CHIKHA 26
2. Principes du paradigme Objet
2.7 Abstaction
● On ne retient que ce qui nous intéresse pour l’écriture du programme.
● Exemple : gestion de stock
○ La pile et les fonctions existent ou sont définie ultérieurement par
l’utilisateur.
○ L’application s’interessera seulement à la manière dont je vais
gérer mon stock.
27
(C) SOUKEINA BEN CHIKHA
Recap
● Notions de bases de la POO
● Attributs, Méthodes, Classes et Objet
● Encapsulation
● Héritage
● Polymorphisme
● Généricité
● Abstraction
28
(C) SOUKEINA BEN CHIKHA
Première application Java
Fichier [Link]
public class Bonjour {
// Définition de la méthode principale main
public static void main(String args[]){
[Link](“Hello: I’m a simple program“);
}
}
• Le programme Java comporte une classe Bonjour
• Il est très important de respecter les majuscules et les minuscules
• main doit être une méthode de classe pour qu'on puisse l'invoquer directement à partir de
la classe sans besoin de construire une instance de la classe.
• main() doit déclarer la chaîne d'arguments même si on lui passera rien lors de l'execution
• Dans le cas où l'on a plusieurs classes dans le fichier, on nomme ce dernier avec la classe
ayant le point d'entrée main().
Quelques conventions Java
Les identificateurs permettent de nommer les différents éléments (variables, constantes,
classe, méthodes, packages,…) des programmes Java
Classes ou Interfaces : la première lettre de l’identificateur d’une classe doit
conventionnellement être en majuscule.
Méthodes ou Variables : la première lettre du mot doit être en minuscule
Constantes : le nom doit être en majuscule
30
Définition d’une classe
Classe, Attributs, méthodes
class NomClass {
//déclaration des attributs
//déclarations de méthodes
}
La classe cercle contient un point pour le centre (de type Point2D) et un rayon (valeur
flottante).
La classe Point2D contient deux valeurs (réels) permettant de définir les coordonnées
d'un point dans le plan.
class Cercle { class Point2D {
double rayon;
double x,y;
Point2D centre;
} }
31
Définition d’une classe
Classe, Attributs, méthodes
Déplacer un cercle selon une valeur donnée
class Cercle { class Point2D {
double x,y;
Point2D centre;
double rayon; }
void Move(double v) {
centre.x += v ;
centre.y += v;
}
}
Définition d’une classe
Surcharge de méthodes
Définir un déplacement de cercle, non pas en spécifiant un réel, mais bien une valeur en x
et une seconde en y.
class Cercle {
Point2D centre;
double rayon;
void Move(double v) {
centre.x += v;
centre.y += v; }
void Move(double x, double y) {
centre.x += x;
centre.y += y;
}
}
Définition d’une classe
Constructeur
Constructeurs
• Un constructeur est une méthode d'une classe donnée, servant à créer des objets.
• un constructeur n'a pas de type de retour,
• se nomme toujours de la même manière que sa classe
• les constructeurs admettent la surcharge
Exemple:
class Cercle {
Point2D centre; • Si, on ne définit pas un constructeur, un
constructeur est fourni
double rayon;
automatiquement. Appelé constructeur
//constucteur 1 par défaut.
Cercle(){ centre=new Point2D(); rayon=1; } • Ce dernier ne prend aucun argument et
//constructeur 2 son corps est vide
Cercle(Point2D c,double r){ centre=c; rayon=r; }
}
Définition d’une classe
Constructeur par copie
• On est parfois amené à cloner des objets. Au lieu de le faire par attribut, on dispose de la notion
de constructeur par copie, qui permet de créer un objet à partir d’un autre.
• Le problème c’est que chaque fois que je modifie l’un, l’autre est modifié.
Définition d’une classe
Constructeur par copie
• On est parfois amené à cloner des objets. Au lieu de le faire par attribut, on dispose de la notion
de constructeur par copie, qui permet de créer un objet à partir d’un autre.
• Java prend également en charge le constructeur de copie. Mais, contrairement à C++, Java
ne crée pas de constructeur de copie par défaut si on n’en définit pas un.
Définition d’une classe
Constructeur par copie
• On est parfois amené à cloner des objets. Au lieu de le faire par attribut, on dispose de la notion de
constructeur par copie, qui permet de créer un objet à partir d’un autre.
• Java prend également en charge le constructeur de copie. Mais, contrairement à C++, Java ne crée pas de
constructeur de copie par défaut si on n’en définit pas un.
Définition d’une classe
Constructeur par copie
Définition d’une classe
Méthode toString()
• On peut surcharger/définir la méthode toString() afin de pouvoir afficher un objet moyennant SOP.
Définition d’une classe
Constructeur par copie
Les spécificateurs d’accès
● Une classe peut comporter plusieurs champs, chacun d’eux est précédé par
l’un des mots clé
○ Public
○ private
○ ou protected.
● Ces mots clés permettent de définir le niveau de masquage de l’information,
ou le spécificateur d’accès à cette information.
Les spécificateurs d’accès
● Il est possible d'empêcher l'accès à des champs ou à des méthodes pour
toute fonction autre que celles de la classe cette opération s'appelle
l'encapsulation. Pour la réaliser, il faut utiliser les mots clés suivants :
○ public : les accès sont libres.
○ private ou protected : les accès sont autorisés dans les fonctions de la
classe seulement et ne sont pas permis pour les clients extérieurs de la
classe, la tentative d’accès génère une erreur de compilation. La
distinction entre private et protected est relative à la notion de l’héritage.
Les spécificateurs d’accès
● Si aucun mot-clé ne précise le type d’accès, celui par défaut est appliqué.
● Par défaut : un champ est public mais seulement dans le même package.
Définition d’une classe
Constructeurs
public class Cercle {
Point2D centre;
double rayon;
void affiche() {
[Link]("centre: " + centre.x + centre.y);
}
public static void main(String args[]) {
Cercle c1=new Cercle(); // Création d’un nouvel objet
Cercle c2=new Cercle(new Point2D(5,4),3);
[Link](); // appel de méthodes [Link]éthode
[Link]();
}
}
Attribut et fonctions membres statiques
● Le mot clé static est utilisé pour caractériser
○ les données membres statiques des classes
○ les fonctions membres statiques des classes
● Une donnée membre statique appartiennent à la classe, et
non pas aux objets de cette classe : Elle est commune à tous
ces objets.
Attribut statique
Attributs statique
Méthode statique
● Afficher pi avec la méthode get_pi() vu que c’est un attribut privé
● Mais c’est un attribut de classe, je veux bien afficher pi sans passer par un objet
Autres éléments
Lecture en ligne de commande
Run > Run configurations ..> (X)= arguments
public class Arguments {
public static void main(String args[]) {
int nb_args;
// On récupère le nombre de paramètres
nb_args = [Link];
// Affichage
[Link](nb_args + “ “ + args[0]);
}
}
Exécution/lecture en ligne de commande
Voir lab 1
Lecture à partir du clavier
Pour lire des valeurs
à partir du clavier
nous utiliserons le
code suivant et il
sera expliquée plus
tard.
LAB
● Installation de IDE Eclipse
● Ecriture, compilation et exécution d’un premier programme JAVA
● Ecriture, compilation et exécution d’exercices mettant en œuvre les différentes
notions.
Annexe
Classe String
public class Essai {
public static void main(String args[]){
String a = "Le début et ...";
// ou String a = new String ("Le début et ..." );
String b = " la fin !!!";
String c = a + b;
[Link](c);
}
}
55
Méthodes de la classe String
Méthodes Description
char charAt(int ) Caractère à la position int
String substring (int, int) Extrait la sous-chaîne entre int et int
Boolean equals (object) Tester l’égalité d’une chaîne
Boolean startsWith(String) si le début de la chaîne est égale à String
Boolean endsWith(String) Si fin de la chaîne est String
Int compareTo(String) Comparer deux chaîne
Int indexOf(char) Position du char
Int lastIndexOf(char) Dernière position de char
String replace(char, char) Remplacer char1 par char2
String toLowerCase() Transformer en minuscule
Char[] toCharArray() Conversion du String en Tableau de caractères
String trim() Suppression des espaces en début et fin d’une chaînes
String valueOf(char[]) Conversion d’un tableau de caractères en String
56
Classe StringBuffer
public class Essai {
public static void main(String args[]){
StringBuffer a = new StringBuffer("java");
[Link](a);
}}
57
Méthodes de la classe StringBuffer
Méthodes Description
char charAt(int ) Caractère à la position int
String getchars (int , int, char [], Recopie la chaine entre les position int et int dans le
int) tableau destination char [] à partir de l’index int
Int capacity() Retourne la capacité de l’objet en octets
Append(String) Ajout à la fin une chaine String
Insert(int, String) Insère la chaîne String à la position int
delete(int, int) Supprimer les caractères entre les positions int et int
deleteCharAt(int) Supprimer le caractère à la position int
replace(int, int, String) Remplacer la chaîne existante entre int, int par la chaîne
String
reverse() Inverse la chaîne
58
Classe Integer et Double
public class Ref {
public static void main(String args[]){
int a = [Link](args[0]);
double d = [Link](args[1]).doubleValue();
Integer A = new Integer(a);
Double D = new Double(d);
}}
Merci