• Aucun résultat trouvé

Description de la Programmation Orient´ee Objet (POO)

II.4 L’identification par une approche Orient´ee Objet

II.4.2 Description de la Programmation Orient´ee Objet (POO)

II.4.2.1 Qu’est ce qu’un objet ?

La POO consiste a mod´eliser informatiquement un ensemble d’´el´ements physiques ou ab- straits en un ensemble d’entit´es informatiques regroupant leurs caract´eristiques. Contrairement `

a la programmation proc´edurale, ces entit´es peuvent ˆetre de natures diff´erentes. Ainsi, une classe d’objet est d´efinie autant par des donn´ees (entiers, r´eels, bool´eens, caract`eres) que par des m´ethodes associ´ees `a l’objet. On appelle m´ethodes l’ensemble des op´erations s’appliquant aux objets. Cependant, elles portent des noms diff´erents en fonction de leur nature : on distingue par exemple les constructeurs permettant de cr´eer les objets (ou les initialiser), les constructeurs de copie permettant de copier les objets, les destructeurs, les fonctions et les interfaces.

La classe

Une classe (d’objet) est le type d’un objet, ind´ependamment de son identit´e. Un objet est issu d’une classe. La classe est donc une sorte de moule, ou structure, qui est d´efini par :

• des attributs : il s’agit des donn´ees repr´esentant l’´etat de l’objet ;

• des m´ethodes : il s’agit des op´erations applicables aux objets.

L’objet

• une identit´e : c’est l’´etiquette permettant de d´efinir l’objet ind´ependamment de son ´etat ;

• des attributs : il s’agit des variables stockant les informations sur l’´etat de l’objet ;

• des m´ethodes : c’est l’ensemble des fonctions, des routines caract´erisant la r´eponse de l’´el´ement vis `a vis de sollicitations ext´erieures ou d’une requˆete.

La distinction entre l’objet et sa classe est de mˆeme ordre qu’entre une variable et le type de cette variable (entier, r´eel, ...) en programmation proc´edurale. L’objet est parfois appel´e instance d’une classe ou occurence d’une classe.

II.4.2.2 Les grands principes de la POO

La programmation orient´ee objet (POO) est une alternative `a la programmation proc´edurale. La d´emarche algorithmique de la programmation proc´edurale est remplac´ee par une attitude de g´en´eralisation (ou abstraction) et de s´eparation des types de donn´ees et des m´ethodes de traitement de ces donn´ees. On programme alors en partant du g´en´eral vers le cas particulier, pour tendre vers une programmation la plus g´en´erique possible. L’objectif d’une telle approche est de favoriser la r´eutilisation de programmes ou de fonctions, et ainsi permettre `a un code d’´evoluer fr´equemment afin de perdurer. La r´eutilisation des codes orient´es objets est rendue possible par les notions d’h´eritage, d’encapsulation et de polymorphisme.

L’h´eritage

L’h´eritage est le m´ecanisme de transmission des propri´et´es d’une classe d’objets. Ce m´ecanisme permet de d´efinir une hi´erarchie de classes allant du plus g´en´eral au plus particulier. A chaque niveau, la classe d´eriv´ee h´erite des propri´et´es de la classe dont elle d´erive, ce qui ´evite d’avoir `

a red´efinir ces propri´et´es (cette notion n’existe pas en Fortran90). Ainsi, il est possible de se procurer des librairies de classes qui constituent une base sur laquelle on pourra d´efinir des classes d´eriv´ees sp´ecialis´ees. Une classe peut d´eriver de deux classes distinctes. On parle alors d’h´eritage multiple.

L’encapsulation

L’encapsulation est le masquage des d´etails de programmation. Elle permet l’´evolution d’une application par la stabilisation des ´echanges des informations utiles li´ees `a un objet. Ces ´echanges se font par l’interm´ediaire d’interfaces, qui d´efinissent les acc`es aux informations particuli`eres d’un objet. Par exemple, une interface nomm´ee taille, peut donner une information sur un objet matrice sans que l’utilisateur n’ait besoin de connaˆıtre comment l’objet matrice est programm´e. Les interfaces sont les op´erateurs (m´ethodes) permettant de d´efinir la partie visible d’un objet.

Le polymorphisme

Le polymorphisme est la facult´e d’une m´ethode `a pouvoir s’appliquer `a des objets de classes diff´erentes. Le polymorphisme augmente donc la≪ g´en´ericit´e≫ d’un code. On g´en´eralise ainsi la programmation car l’appel des fonctions est rendu ind´ependant des objets particuliers. Par exemple, une fonction affiche peut se d´efinir sur des objets de type nombre entier, nombre r´eel, vecteur, matrice, texte, ou tout autre objet ou cette fonction a un sens.

On distingue alors la surcharge, le polymorphisme statique et le polymorphisme dynamique :

• On parle de surcharge lorsque, dans une classe donn´ee, deux m´ethodes retournant le mˆeme type de sortie portent le mˆeme identificateur mais s’applique `a des param`etres de types diff´erents. La surcharge est mise en place lors de la compilation. Selon le type consid´er´e, le compilateur interpr´etera la m´ethode selon le type d’objet ;

• La notion de polymorphisme statique est li´ee `a celle de template qui d´efinit des fonctions g´en´eriques qui peuvent s’appliquer sur des objets de classes diff´erentes. L’interpr´etation de ces fonctions est faite lors de la compilation ;

• Le notion de polymorphisme dynamique est li´ee quant `a elle `a la notion d’h´eritage (elle n’est donc pas possible en Fortran90). Elle est mise en place lors de l’ex´ecution du code. Prenons l’exemple de deux classes triangle et rectangle d´erivant d’une classe objet g´eom´etrique. La m´ethode dessine est d´efinie dans la classe objet g´eom´etrique et peut ˆetre red´efinie, si n´ecessaire, dans les classes d´eriv´ees en fonction des cas particuliers. Un appel de la fonction dessine peut ˆetre fait sur un objet g´eom´etrique sans connaˆıtre son type particulier. C’est lors de l’ex´ecution que le code utilisera la fonction adapt´ee `a l’objet. Ces m´ethodes sont de mˆeme type et ont le mˆeme type de param`etres.

II.4.2.3 Les avantages et les inconv´enients de la POO

Les avantages

La POO, comme nous l’avons signal´e, s’oppose `a la programmation proc´edurale (ou fonc- tionnelle) en ce sens o`u l’algorithmique n’est pas fig´e par la mani`ere dont le code a ´et´e ´ecrit. En particulier, les multiples variables de passage des routines ou le nom des variables d’un probl`eme peuvent ˆetre sources de difficult´es lorsqu’un programme doit ˆetre modifi´e. La POO offre donc une bonne alternative puisqu’un objet peut ˆetre modifi´e sans que les variables d’appel d’une routine ne soient chang´ees. Ainsi, la POO doit ˆetre abord´ee en termes d’utilisation des objets plutˆot qu’en termes d’algorithme fig´e. Par exemple, dans notre probl´ematique une fonction iden- tifie appliqu´ee `a un objet mod`ele doit fournir un objet mod`ele dont l’´etat correspond au mod`ele identifi´e, ind´ependamment de l’algorithme qui a permis d’identifier ce mod`ele. La POO est donc plutˆot attach´ee `a une s´emantique claire entre l’utilisateur et le programme qu’aux proc´edures qui permettent de r´epondre `a une requˆete.

Pour un probl`eme donn´e, les deux types de programmation donneront bien entendu les mˆemes r´esultats, et les mˆemes op´erations seront ex´ecut´ees pour y aboutir. La POO offrira cependant l’avantage de fournir un programme susceptible d’´evoluer plus facilement en offrant des fonctions g´en´erales tendant vers le g´en´erique.

Les inconv´enients

Les inconv´enients de la POO sont li´es `a ses avantages. En premier lieu, il convient de noter que l’approche objet est moins intuitive que l’approche fonctionnelle. Il est plus na- turel de d´ecomposer un probl`eme sous forme de hi´erarchie de fonctions qu’en terme d’objets et d’interactions entre objets.

Un autre inconv´enient de la POO est possible de rendre une hi´erarchie de classe trop rigide, rendant son ´evolution difficile ou impossible. La POO n´ecessite donc une plus grande r´eflexion avant de commencer la programmation. Il convient de bien d´efinir les objets et les classes d’objet en orientant la r´eflexion sur les interactions entre objets ou entre le programme et l’utilisateur.

Documents relatifs