Upload
stephanie-lefrancois
View
105
Download
1
Embed Size (px)
Citation preview
Structures de donnéesIFT-2000
Abder AlikacemAbder Alikacem
Concepts orientés objet
Édition Septembre 2009
Département d’informatique et de génie logiciel
Département d’informatique et de génie logiciel
Plan
• Principe de l’encapsulation • Classes et objets• Les concepts orientés objet
• Le concept d'Objet• Les principes de l’approche Orientée Objet• Les relations entre Objets
Encapsulation
Encapsulation • Le rassemblement des données et du code les utilisant dans une entité unique (objet). • La séparation nette entre la partie publique d'un objet (ou interface) seule connue de l'utilisateur de la partie privée ou implémentation qui reste masquée.
Encapsulation et abstraction
L'encapsulation
•Consiste à masquer l'accès à certains attributs et méthodes d'une classe. Pourquoi masquer?
•Cacher les détails d'implémentation des objets à l'utilisateur permet de modifier, par exemple la structure de données interne d'une classe (remplacer un tableau par une liste chaînée) sans pour autant entraîner de modifications dans le code de l’utilisateur, l’interface n’étant pas atteinte.
Abstraction de données
•La structure d'un objet n'est pas visible de l'extérieur, son interface est constituée de messages invocables par un utilisateur. La réception d'un message déclenche l'exécution de la méthode correspondant à ce message.
Abstraction procédurale
•Du point de vue de l'extérieur (c’est-à-dire en fait du client de l’objet), l'invocation d'un message est une opération atomique. L'utilisateur n'a aucun élément d'information sur la mécanique interne mise en œuvre. Par exemple, il ne sait pas si le traitement requis a demandé l’intervention de plusieurs méthodes ou même la création d’objets temporaires etc.
Droits d’accès
En C++, on choisit les paramètres d’accès aux membres d’une encapsulation à l'aide des mots clés :
private : les membres privés ne sont accessibles que par les fonctions membres de la classe.
protected : les membres protégés sont comme les membres privés. Mais ils sont aussi accessibles par les fonctions membres des classes dérivées.
public : les membres publics sont accessibles par tous. La partie publique est appelée interface.
Les mots réservés private , protected et public peuvent figurer plusieurs fois dans la déclaration de la classe. Le droit d'accès ne change pas tant qu'un nouveau droit n'est pas spécifié.
Les différents type d’encapsulation
Il existe différents types d’encapsulation :
struct Classe1 { /* ... */ };
tous les membres sont par défaut d'accès public par défaut.
union Classe2 { /* ... */ };
tous les membres sont d'accès public par défaut.
class Classe3 { /* ... */ };
tous les membres sont d'accès private par défaut.
C'est cette dernière forme qui est utilisée en C++ pour définir des classes.
Principe de la conception orienté objet
• Approche traditionnelle• Organiser autour du traitement
Algorithmes + Structures de données = Programme
Fonction 1
Structures de données
Fonction 2
Fonction 3
Fonction n
Principe de la conception orienté objet
Organiser autour des données à manipuler
DonnéesFonctions de
manipulations etde traitements
Objet
Classe et objet
Classe = regroupement d'objets ayant des propriétés (état et/ou comportement et/ou relations) communes• Classe = moule qui décrit la structure interne d'un ensemble d'objets• Classe = abstraction qui n'a de sens qu'à la compilation
• Objet = un instance d'une classe• Objet = instance qui n'a d'existence qu'à l'exécution (les termes instance, occurrence et objet sont synonymes).
• Exemple. Phillipon est un digne représentant de la race des chats. Phillipon est une instance de la classe des chats.
• Tous les chats ont des propriétés communes :• ils miaulent (propriété dynamique)• ils ont une moustache (propriété statique)• etc.
• Chat : classe représentant un ensemble d’objets ayant :• des attributs semblables • des comportements semblables.
La classe ?
Objet = entité discrète qui existe dans le temps et dans l'espace.
Classe = abstraction qui n’existe que dans les programmes.doit représenter un ensemble d'objets qui partagent une structure commune et un comportement commun.
définit • les opérations permises sur les objets de la classe. • les états qu’ils peuvent prendre (transitions d’états).
Le concept d’objet
Objet • abstraction du monde réel• entité possédant • un état (information)• offrant des services / opérations pour examiner / modifier son état (comportement)
• Exemple : une personne, une voiture, une procédure, une loi, ...
• Modèle Orienté-Objet (OO) d’une application : définition d’un ensemble d’objets coopérants - communicants - et concurrents - vivants indépendamment les uns des autres
Le concept d’objet
Objet = identité unique + état + comportement
• Exemple : la voiture 1875 WC 31• état : immatriculation, kilométrage, vitesse instantanée, état
interne…• services / opérations : • accesseurs : kilométrage?, immatriculation? ...•modificateurs : démarrer, s’arrêter, se déplacer, tomber en panne, être réparée ...
• Essentiel : • un objet n'est manipulable qu'à travers son interface i.e. ses
opérations publiques• La structure et le comportement d'objets semblables sont définis
dans la classe qui leur est commune.
Le concept d’objet
• État de l'objet :• Valeurs de ses attributs ou de l'information qu'il contient.
• Comportement de l'objet • Ensemble des opérations que l'on peut effectuer sur celui-ci.
• Identité de l'objet • Deux objets peuvent être exactement dans le même état, mais sont différents de part leur identité unique
ex.: adresse en mémoire.
Représentation d‘un objet
kilométrage : ...vitesse : ...immatriculation : ...
kilométrage?
démarrer
tomber en panne
...
La voiture de Jean
Son nom
Un objet
Son état
Opération privée
Opération publique
Le concept d’objet
Un objet possède 2 types de propriétés • Statiques : état, attributs.• Dynamiques : comportements, services.
• Exemple : le chat de ma voisine • Statiques :• son nom (Phillipon)• son poids (18 livres – je sais il est gros...)• sa couleur (noir et blanc)
• Dynamiques :• il miaule quand il a faim• il se couche sur son cousin près du sofa• il mange des mouches
Le concept d'objet
Objet:
• Il est en relation avec d'autres objets :• relations statiques : (relativement) stables dans le temps• composition / agrégation : traduit l'assemblage• généralisation / spécialisation : permet la réutilisation• association n-aire : relation classique
• relations dynamiques : brèves, limitées à la communication • communication : échange de données• signal : échange de stimuli
Le concept objet
• Il est unique : • un objet n'est instance que d'une classe et d'une seule• une instance a une identité (interne) unique
• Sa durée de vie : • une instance doit être déclarée, puis définie en fonction du
contexte.• un objet vit sa vie puis meurt. • la durée de vie peut être très courte, très grande !
• Concurrence : les objets évoluent indépendamment les uns des autres
Objet:
Principes sur lesquels reposent les Objets
• Encapsulation : regroupement des informations d'état et de comportement sous un nom unique• Masquage d'information : on ne connaît pas la structure de
l'information• Interface : seuls les services publics (offerts à l'extérieur) sont
utilisables• Envoi de messages : les objets communiquent par messages• Durée de vie limitée : dépendante du contexte
Généralisation / spécialisation
• Généralisation : a posteriori pour favoriser la réutilisation future• Spécialisation : c'est de la réutilisation • en extension : ajout de nouvelles propriétés• en compréhension : modification de propriétés
Conséquences :• Héritage simple / multiple. Possibilité de définir des familles de
classes traduisant le principe de généralisation / spécialisation. « La classe dérivée est une version spécialisée de sa classe de base »
• Polymorphisme : possibilité pour une instance de changer de classe tout en restant dans la même hiérarchie (i.e. un objet peut changer de forme au cours de sa vie ! )
Vers une hiérarchie de classe
• Si on poursuit de la classe des chats , il existe :
Chat
Lion
Tigre
Différents, mais partagent tous des caractéristiques :– ils mangent de la viande– leurs griffes peuvent se rétracter– leurs molaires sont coupantes – ils ont une moustache
Vers une hiérarchie de classe
• Généralisation: • races chat, lion et tigre => super-race nommée félins.
• La super-race définit :• des propriétés • des comportements valides autant pour les chats que pour lions et tigres.
• En termes informatiques, la classe Félin correspond à une super-classe des classes Chat, Lion et Tigre.• Chat, lion, tigre : • classes dérivées de la classe Félin • héritent des propriétés et des comportements de leur super-classe.
C’est le concept d’héritage.
Vers une hiérarchie de classe
• Extension du concept d’héritage :
arbre d’héritage
• On s’attend à certaines caractéristiques de Phillipon Il est une instance (objet) de la classe Chat ( miauler, dormir,
moustaches).• On s’attend à ce qu’il puisse se mouvoir • non pas parce qu’il est un chat, mais parce qu’il appartient à la
classe Animal, donc par héritage.
Animaux
Mammiferes
Félin
Chat LionTigre
Canin
Reptiles
Poissons
Polymorphisme
• Les chats, les serpents et les poissons partagent tous un comportement commun hérité de la classe des animaux : ils ont la capacité de se mouvoir.• Tous le font, mais chacun à sa manière :• le chat marche• le serpent rampe• le poisson nage
• Si on donne l’ordre de se mouvoir, chaque animal va pouvoir répondre à cet ordre, à sa manière propre.
• polymorphisme
Conception Orientée Objet
Identification des classes à réutiliser ou à concevoir :utilisation d’une méthode OO pour la conception et la définitiondes hiérarchies de classes à utiliser ou à développer
Construction de l’Application OO :transformation de la conception de l’application en un ensembled’objets concurrents et coopérants
Deux étapes fondamentalement différentes :
Intérêt des Objets
• Maîtrise de la complexité : • l'encapsulation permet de se concentrer sur un(e) objet(classe) et
un(e) seul(e)• il est possible de tester de façon quasi exhaustive un objet
• Evolution facilitée : rajouter de nouveaux objets est simplifié. On les raccroche aux modèles déjà construits par spécialisation• Réutilisation : vraiment possible à cause des classifications induites
par la relation de spécialisation / généralisation !• ...
Programmer une classe en C++
typedef struct { int jour; int mois; int année;} Date;
void initDate(Date*d, int j,int m,int a){ d->jour=j; d->mois=m; d->année=a;}
int main(){ Date d; initData(&d,2,2,2004); return 0;}
class Date {public : void initData(int j,int m,int a);protected: int _jour; int _mois; int _année;};
Date::initData(int j,int m,int a){ _jour=j; _mois=m; _année=a;}
int main(){ Date d; d.initData(2,2,2009); return 0;}
Programme C Programme C++
Interface et implémentation
• L'interface d'une classe • définit ce qui est vu de l'extérieur.
renforce la notion d'abstraction en ne montrant que ce qui est nécessaire.
• contient principalement les déclarations de toutes les opérations applicables sur les instances de cette classe.
• L'implémentation d'une classe est ce qui est caché à l'intérieur, • principalement le code réalisant les opérations définies dans
l'interface.
Interface d’une classe
• Phillipon miaule, marche, mange :• Nous connaissons les manifestations extérieures du miaulement, mais la façon dont le son est produit nous est masqué.
Chat = abstraction
On ne montre seulement que quelques comportements.
• Une interface représente cette abstraction. • Énonce les services offerts• Les détails de fonctionnement sont cachés. • Emphase sur la compréhension des éléments importants, sans se soucier de l’implantation.
Interface d’une classe (fichier .h ou .hpp)
C’est la section publique d’une classe• Attributs public• Méthodes public• Constructeur• Destructeur• Fonction d’accès
class Date {public : int var1; Date(); ~Date();
void initialiser(int j,int m,int a); void afficher(); int getJour(); int getMois(); int getAnnee(); setJour( int j); setMois(int m); setAnnee(int a);
protected: //…
private : //…
};
Implémentation d’une classe (fichier .h ou .hpp)
• Section protected• Attributs et méthodes
accessibles par les membres de la classe et des classes dérivées
• Section private• Attributs et méthodes
accessibles uniquement par les membres de la classe
class Date {
public : //…
protected: int _jour; int _mois; int _année; void _test();
private: //…};
Implémentation d’une classe (fichier .cpp)
• Définition des méthodes de la class :
• Constructeurs• Destructeur• Méthodes d’accès• Modificateurs
Date::Date(){ _jour=0; _mois_0; _annee=0;} Date::~Date(){}
void Date::afficher(){ cout << "la date : " << _jour ; cout << "/" << _mois ; cout << "/" << _annee << endl; } int Date::getJour() {return _jours;}int Date::getMois() {return _mois;};int Date::getAnnee(){return _annee;}
Date::setJour(int j) {_jour =j;}Date::setMois(int m) {_mois =m;}Date::setAnnee(int a){_annee=a;}
Fonctions vs méthodes
Fonction, exemple :
void initDate(Date& date, int jour, int mois, int annee){ date.m_jour = jour; date.m_mois = mois; date.m_annee = annee;}
La fonction doit avoir les valeurs à assigner ET la date sur laquelle travailler.
int main(){ Date uneDate; initDate(uneDate, 30, 3, 1965);}
La date sur laquelle travailler.
Fonctions vs méthodes
Méthode, exemple :
int main(){ Date uneDate; uneDate.initialise(30, 3, 1965);}
L'objet sur lequel appliquer l'initialisation.
void Date::initialiser(int jour, int mois, int annee){ m_jour = jour; m_mois = mois; m_annee = annee;}
Accès direct aux attributsde l'objet courant. Accès direct aux attributs
de l'objet courant.
Fonctions vs méthodes
Les différences :
void Date::initialise(int jour, int mois, int annee){ m_jour = jour; m_mois = mois; m_annee = annee;}
La méthode a une portée limitée à la classe Date. Accès direct aux attributs de l'objet courant.
void initialise(Date& date, int jour, int mois, int annee){ date.m_jour = jour; date.m_mois = mois; date.m_annee = annee;}
La fonction est globale. Accès direct aux attributs de la structure.