34
Structures de données IFT-2000 Abder Alikacem Abder 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

Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

Embed Size (px)

Citation preview

Page 2: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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

Page 3: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.

Page 4: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.

Page 5: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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é.

Page 6: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.

Page 7: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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

Page 8: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

Principe de la conception orienté objet

Organiser autour des données à manipuler

DonnéesFonctions de

manipulations etde traitements

Objet

Page 9: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.

Page 10: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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).

Page 11: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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

Page 12: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.

Page 13: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.

Page 14: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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

Page 15: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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

Page 16: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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

Page 17: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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:

Page 18: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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

Page 19: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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 ! )

Page 20: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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

Page 21: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.

Page 22: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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

Page 23: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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

Page 24: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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 :

Page 25: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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 !• ...

Page 26: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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++

Page 27: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.

Page 28: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.

Page 29: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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 : //…

};

Page 30: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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: //…};

Page 31: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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;}

Page 32: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.

Page 33: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.

Page 34: Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département

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.