Poo
-
Upload
dimitri-lembokolo -
Category
Technology
-
view
2.142 -
download
3
Transcript of Poo
LA PROGRAMMATION ORIENTEE OBJET
I : L’APPROCHE ORIENTEE OBJET II : CONCEPTS DE LA PROGRAMMATION ORIENTEE OBJET
PLAN DU RAPPORT
I : l’Approche Orientée Objet
LES QUALITES D’UN LOGICIEL
On peut mesurer les qualités d’un logiciel par plusieurs critères qui sont entre autres : L’exactitude : aptitude d’un programme ou d’un logiciel à fournir le résultat voulu et a répondre
ainsi aux spécifications du cahier des charges. La robustesse : aptitude à bien réagir lorsque l’on s’écarte des conditions normales d’utilisation L’extensibilité : facilité avec laquelle un programme pourra être adapté pour répondre à
l’évolution des spécifications; La réutilisabilité : possibilité d’utiliser certaines parties du logiciel pour résoudre un autre
problème. La portabilité : facilité avec laquelle on peut exploiter un même logiciel dans différentes
implémentations. L’efficience : temps d’exécution, espace mémoire occupé
LA PROGRAMMATION FONCTIONNELLE
La découpe fonctionnelle d’un problème informatique : il s’agit de décomposer l’écriture d’un algorithme en différentes parties bien distinctes, représentant chacune une tâche bien précise et autonome. Il s’agira ensuite de bien agencer la mise en action de ces tâches pour réaliser les calculs aboutissant à la solution du problème général comme le montre la figure suivante :
Logiciel de gestion de bibliothèque
ces tâches indépendantes s’appellent des fonctions ou sous-programmes.
LA PROGRAMMATION FONCTIONNELLE
Cette approche de l’écriture des algorithmes, utilisant systématiquement la notion de fonction (ou sous-programme), est très intéressante car elle permet, pour résoudre un problème, d’employer une méthode de décomposition en sous-problèmes distincts. Elle a ainsi deux avantages : Elle permet, par le découpage en sous-problèmes, de résoudre des cas plus simples et bien identifiés. Elle permet de réutiliser des fonctions déjà développées par ailleurs.
Le concepteur d’un algorithme compliqué peut ainsi définir de multiples fonctions simples, bien identifiées, dont l’agencement constituera la solution à son problème. La forme générale de son programme sera alors un ensemble de sous-programmes, et l’exécution consistera en appels de ces sous-programmes.
Réutilisation de fonctions
LA PROGRAMMATION FONCTIONNELLE
Mais ce découpage d’un algorithme en fonctions pose les questions suivantes : une simple modification du programme en un point donné, ne risque t-elle pas d’entraîner
en cascade, la modification d’une multitude d’autres fonctions ? l’approche fonctionnelle est-elle adaptée au développement d’application complexes et qui
évoluent sans cesse ?
LIMITES DE LA LA PROGRAMMATION FONCTIONNELLE
Maintenance complexe : avec la factorisation des comportements, les fonctions sont devenues interdépendantes. Une simple mise à jour du logiciel à un point donné, peut entraîner , en cascade, la modification d’une multitude d’autres fonctions.
En cas d’évolution majeure du logiciel (passer, par exemple, de la gestion d’une bibliothèque à celle d’un médiathèque, l’écriture du logiciel devient plus complexe. Même si la structure générale du logiciel reste valide, la multiplication des points de maintenance, engendrée par le chaînage des fonctions, rend l’adaptation très laborieuse. Il faut retoucher le logiciel dans sa globalité. L'approche fonctionnelle n'est pas adaptée au développement d'applications qui évoluent sans cesse et dont la complexitécroit continuellement (plusieurs dizaines de milliers de lignes de code).
L’APPROCHE ORIENTEE OBJET
L’approche orientée
La nécessité impérative d’une information de bonne qualité, l’explosion de besoins nouveaux découlant de l’ouverture des Systèmes d’Informations (SI) ne laissent d’autres choix que de rechercher de nouvelles méthodes, beaucoup plus efficaces, pour la prise en charge des applications.
L’approche orientée objet est aujourd’hui l’une des pierres angulaires de l’évolution à laquelle l’entreprise est contrainte. Elle conduit tout naturellement à une vision différente de la vision procédurale (fonctionnelle) et plus proche de la réalité des métiers.
L’approche orientée objet a pour origine la programmation à objets dont les langages Smalltalk et C++ sont les représentants. Elle a obtenu ses premiers succès importants avec la programmation d’interfaces graphiques. Depuis, son application s’est généralisée à de nombreux domaines dont le génie logiciel, les systèmes repartis et les bases de données.
L’approche orientée objet apporte des avantages décisifs comme la modularité, la réutilisabilité et l’extensibilité du code qui conduisent à une meilleur productivité des développeurs et à une plus grande qualité des applications.
II : Concepts de la Programmation Orientée Objet
LA PROGRAMMATION ORIENTEE OBJET (POO)
Définition : La Programmation orientée Objet est un paradigme de programmation qui consiste à utiliser les concepts d’objets, de classes, d’encapsulation, d’héritage, de polymorphisme, de modularité…
Objectifs :La Programmation orientée Objet répond au problème de réutilisabilité et d’extensibilité de la programmation fonctionnelle par l’encapsulation des données et des opérations qui les manipulent dans des objets, en lieu et place des structures de données (définitions de types et des variables), des procédures ou fonctions et d’un programme principal qui appelle les procédures.
La Programmation orientée Objet permet une démarche de type industriel dans la conception et le développement de logiciels, processus caractérisé par la standardisation des éléments, assemblage des éléments en composants (ou objets), réutilisation possible des composants.
D’où, pour les applications développées : Une grande fiabilité Des temps d’assemblage réduits Une maintenance facilitée Une diminution des coûts de fabrication à long terme
OBJETS
Les concepts d’objet et de classe sont interdépendants. En effet, un objet appartient à une classe (c’est une instance d’une classe) et une classe décrit la structure et le comportement commun d’objets (ses instances).
Définition :Un objet est une entité logicielle (une abstraction des données du monde réel) : Qui a une identité, Qui est capable de sauvegarder un état, c’est-à-dire un ensemble d’informations dans des variables internes (ses attributs ou propriétés), Qui répond à des messages en déclenchant des activations internes appropriées qui changent l’état de l’objet. Ces opérations sont appelées des méthodes. Ce sont des fonctions liées à des objets et qui précisent le comportement des ces objets.
L’identité de l’objet est son nom, c’est-à-dire son identificateur. Les états de l’objet sont les valeurs de ses variables propres, qui sont appelées des attributs. Les messages auxquels l’objet peut répondre sont en fait les intitulés des méthodes qu’il peut déclencher : leur identificateur et le type de paramètres nécessaires.
Attributs : Les attributs d’un objet sont l’ensemble des informations se présentant sous forme de variable et permettant de représenter l’état de l’objet.
Message : un message est une demande d’activation envoyé à un objet. C’est un mode de communication entre les objets de classes différentes. À l’aide d’un message, un objet d’une classe A sollicite les services d’un objet d’une classe B
OBJETS
méthode :Une méthode est une fonction ou un traitement qui manipule des attributs. Une méthode est liée à un objet, elle est déclenchée à la réception d’un message particulier : la méthode déclenchée correspond strictement au message reçu.
Exemple d’une entité logicielle
Pour calculer la somme des n premiers entiers, il est possible de concevoir une entité logicielle appelée SommeN dont le fonctionnement revient à interpréter certains messages que l’on pourra lui envoyer (voir figure)
Une telle entité, du point de vue de l’utilisateur, est une boîte noire qui réagit seulement à la réception de message.
Entité,qui sait calculer la somme desN premiers entiers et l’afficher
SommeN
Entité,qui sait calculer la somme desN premiers entiers et l’afficher
SommeN
Messages
initialiseToi
faisSomme pour N précisé
afficheSomme
OBJETS
Dans l’exemple précédent, l’objet à pour nom SommeN. Son état est représenté par trois attributs suivants : S : de type entier, qui représente la somme calculée, N : de type entier, qui représente le nombre d’entiers successifs à sommer, I : qui est un attribut permettant de compter le nombre de tours de boucle dans sa méthode de calcule de la somme.
L’utilisateur n’a pas à connaître le nom des attributs de l’objet, qui ne servent qu’aux calculs internes de SommeN et qui n’apportent rien à l’utilisateur, qui ne veut qu’un résultat.
Les trois méthodes que comporte SommeN sont : initialiseToi(), méthodes sans paramètre, et qui ne retourne rien; faisSmme (entier), qui est une méthode qui reçoit comme attribut le nombre d’entiers à sommer, ne retourne rien. afficheSomm ce (), qui affiche la valeur de la somme, ne retourne rien.
Chacune de ces méthodes est aussi le nom d’un message que l’on peut envoyer à l’objet SommeN. A la réception d’un message, l’objet active la méthode qui a le même nom.
OBJETS
La liste des méthodes constitue l’interface de l’objet pour l’utilisation : ce sont les messages que l’objet peut comprendre si on les lui envoie, et dont la réception déclenche les méthodes correspondantes.
Signature : La précision d’une méthode (nom de la méthode), du type de ses arguments et du type de donnée retournée s’appelle signature de méthode.
Exemple : int additionEntier(int a, int b)
Objet SommeN
Attributs I,S : EntierN : Entier
MéthodesinitialiseToi () retourne videfaisSomme (Entier) retourne videafficheSomme () retourne vide
Représentation de l’objet SommeN : vision programmeur
Type de retourPrécision de la méthode
Type des paramètres
OBJETS
Encapsulation : On dit qu’un objet, qui réunit dans une même entité attributs et méthodes, les encapsule. Les détails de l’implémentation de l’objet sont masqués aux autres objets du système à objets. On dit qu’il y’a encapsulation des données et du comportement des objets.
L’encapsulation applique le principe d’abstraction : un objet n’est accessible que par ses opérations visibles (son interfaces externe). Ainsi les modifications de données restent locales aux objets et sont sans effet sur les programmes utilisateurs.
L’encapsulation apporte alors indépendance entre programmes, opérations et données.
Modularité : La modularité d’un logiciel consiste à regrouper des classes qui participent à la réalisation d’un service ou d’une fonctionnalité donnée au sein d’un même package (ou module).
CLASSES
Définition : Une classe est un ensembles d’objets qui ont en commun les mêmes méthodes et qui partagent les mêmes types d’attributs.
Une classe est en sorte un type abstrait qui encapsule données et comportements. C’est une sorte de « moule », qui permet ensuite de créer autant d’instances que l’on veut, et ces instances seront des objets instances de la classe, auxquels on pourra effectivement envoyer des messages, qui activeront les méthodes correspondantes.
Instance :Une instance d’une classe est un objet particulier d’une classe qui peut activer les méthodes de la classe et qui a des valeurs particulières pour ses attributs.
Classe
Attributs
Méthodes
Une instance de la classe
Une autre instance de la classe
Encore une instance de la classe
Une classe et trois de ses instances
CLASSES
Exemple de classe
Comme exemple, nous allons définir une classe représentant les caractères d’une personne. La déclaration de la classe Personne revient à définir son nom, son adresse et son âge et à préciser comment on accède à ces informations.
Personne
Attributs de la classe :-nom : chaîne de caractères - adresse : chaîne de caractères- âge : Entier
Méthodes de la classe+ initialiser (chaîne de caractères, chaîne de caractères, Entier) retourne vide + catégorieDâge () retourne vide+ catégorieDeResidence () retourne vide
Personne
Attributs de la classe :-nom : chaîne de caractères - adresse : chaîne de caractères- âge : Entier
Méthodes de la classe+ initialiser (chaîne de caractères, chaîne de caractères, Entier) retourne vide + catégorieDâge () retourne vide+ catégorieDeResidence () retourne vide
Chéma de da la classe Personne
CLASSES
L’usage de l’entité Personne définie comme classe se ramène alors à : la création d’une classe Personne la création d’un objet instance de la classe Personne l’activation des méthodes sur l’objet
La figure ci-dessous présente la classe Personne et deux instances nommées Personne1, Personne2
Classe Personne
-nom : chaîne de caractères - adresse : chaîne de caractères- âge : Entier
+ initialiser (chaîne de caractères, chaîne de caractères, Entier) retourne vide + catégorieDâge () retourne vide+ catégorieDeResidence () retourne vide
Classe Personne
-nom : chaîne de caractères - adresse : chaîne de caractères- âge : Entier
+ initialiser (chaîne de caractères, chaîne de caractères, Entier) retourne vide + catégorieDâge () retourne vide+ catégorieDeResidence () retourne vide
Personne1
nom : Bangoura adresse : ville âge : 35
Personne2
nom : Keitaadresse : campagne âge : 25
Deux instances de Personne
CLASSES
Déclaration d’une classe
La syntaxe de déclaration d’une classe est la suivante :
class identificateur_de_la_classe
debut déclaration des attributs signature des méthodes fin
Déclaration et instanciation d’une classeLa création d’une instance de classe se fait en deux temps : d’abord, on déclare l’existence de l’objet instance de la classe. Cela revient à donner un identificateur à un certain objet la création effective de l’instance se fait à l’aide d’un opérateur spécifique, l’opérateur new.
identificateur_instance : identificateur_de_la_classe;identificateur_instance new identificateur_de_la_classe ();
CLASSES
Invocation d’une méthode
Il reste enfin à préciser comment on invoque une méthode sur un objet. Cela se fait par l’application, sur
l’identificateur de l’objet, du nom de la méthode à l’aide d’un opérateur, l’opérateur « . »
L’appel d’une méthode sur un objet receveur est alors le suivant :
instance_de_classe.méthode ();
Utilisation de la classe PersonneIl est maintenant possible d’utiliser la classe Personne, puisque celle-ci est déclarée et que ses méthodes ont été écrites. Il a même été possible de définir la classe dans un algorithme dont le rôle se limitait strictement à cela.
Un autre algorithme va en permettre l’utilisation. Un mot-clé permet de préciser qu’elle classe est utilisée dans ce nouvel algorithme et ainsi d’identifier les méthodes employées. Ce mot-clé, placé au tout début de l’algorithme, est utlise.
utilise Nom_de_classe;
CLASSES
Algorithme : déclaration de Peronne
class Personne
debut privé // les attributs suivants ne sont pas accessibles de l’extérieur de la classe nom, adresse : chaîne de caractères; âge : Entier;
public // les méthodes seront déclarées publiques, accessibles de l’extérieur initialiser(x : chaîne de caractères, y : chaîne de caractères, z : entier) retourne vide debut non x; adresse y; âge z; fin
CLASSES
catégorieDâge () retourne videdebut si (âge > 50) alors
écrire (‘’Personne agée’’); sinon si (âge < 20) alors
écrire (‘’Personne jeune ’’); sinon
écrire (‘’Age moyen’’);fin
catégorieDeResidence () retourne videdebut si (adresse = ‘’Ville’’) alors
écrire (‘’Habitant urbain’’); sinon
si (adresse =‘’Village’’) alors écrire (‘’Villageois’’);
sinon écrire (‘’Habitant rural’’); finfin
CLASSES
utilise Personne; //on connaît ainsi la classe Personne et ses attributsclass ManipulationDePersonne
variables : personne1, personne2, personne3 : Personne // déclaration de trois objets instances de la classe Personne
debut personne1 new Personne (); // création effective d’un objet personne2 new Personne (); // création effective d’un autre objet personne3 new Personne (); // création du troisième objet
personne1.initialiser (‘’Bemba’’, ’’ville’’,35); personne2.initialiser (‘’Loemba’’, ’’campagn2’’,35);
personne1.categorieDâge (); personne1.categorieDeResidence ();
fin
CLASSES
Nous avons donc bien distingué dans l’exemple de la classe Personne, un algorithme composé en fait de deux parties :
1. Une partie déclaration de la classe et de ses méthodes2. Une partie utilisation de la classe par création d’instances et envoi de messages aux instances
Ce type de conception sera considéré comme usuel.
Les constructeurs : Un constructeur est une méthode particulière d’une classe permettant d’initialiser les attributs d’un objet lors de sa création effective. Elle porte le même nom que la classe et ne retourne pas de valeur.
Exemple 1classe Namadébut …… public Nama () ; // signature du constructeur sans arguments fin……fin
CLASSES
Les constructeurs :
Exemple 2classe Totodebut …… public Toto (x : Entier, y : Entier) ; // signature du constructeur avec arguments fin……fin
La classe Personne, de l’exemple précédent, peut implémenter le constructeur suivant :
Personne (x : chaîne de caractères, y : chaîne de caractères, z : Entier) retourne vide
Si nous reprenons l’algorithme de la classe Personne comportant cette fois-ci un constructeur, nous aurons :
CLASSES
Algorithme : déclaration de Personne avec un constructeur
class Personne
debut privé // les attributs suivants ne sont pas accessibles de l’extérieur de la classe nom, adresse : chaîne de caractères; âge : Entier;
public // les méthodes seront déclarées publiques, accessibles de l’extérieur Personne(x : chaîne de caractères, y : chaîne de caractères, z : entier) retourne vide debut non x; adresse y; âge z; fin
CLASSES
catégorieDâge () retourne videdebut si (âge > 50) alors
écrire (‘’Personne agée’’); sinon si (âge < 20) alors
écrire (‘’Personne jeune ’’); sinon
écrire (‘’Age moyen’’);fin
catégorieDeResidence () retourne videdebut si (adresse = ‘’Ville’’) alors
écrire (‘’Habitant urbain’’); sinon
si (adresse =‘’Village’’) alors écrire (‘’Villageois’’);
sinon écrire (‘’Habitant rural’’); finfin
CLASSES
utilise Personne; //on connaît ainsi la classe Personne et ses attributsclass ManipulationDePersonne
variables : personne1, personne2, personne3 : Personne // déclaration de trois objets instances de la classe Personne
debut
personne1 new Personne (‘’Bemba’’, ’’ville’’,35); // création et initialisation des attributs par le // constructeur
personne2 new Personne (‘’Loemba’’, ’’Village’’,35); // création effective d’un autre objet
personne1.categorieDâge (); personne1.categorieDeResidence ();
personne2.categorieDâge (); personne2.categorieDeResidence ();
fin
L’HERITAGE
Le concet d’héritage est central dans l’approche objet. Il est en effet très rare de concevoir un système dans lequel il n’existe pas de classes liées par héritage
Définition :Une classe peut être considérée comme héritant d’une autre si elle peut activer toutes les méthodes de cette dernière et si elle contient également tous ses attributs.
Graphe d’héritageLe graphe d’héritage d’un ensemble de classes est la structure représentant la manière dont les classes sont liées les unes aux autres par héritage. Ce graphe constitue une hiérarchie.
Exemple
La classe Quadrupède est une classe générale. Elle se spécialise en deux sous-classes indépendantes et de même niveau de spécialisation, la classe Chien et la classe Cheval.
L’HERITAGE
Toutes les propriétés de la classe quadrupède, et en particulier le fait d’avoir quatre pattes, sont automatiquement portées dans ces deux sous-classes. La classe Chien précise que l’animal pratique l’aboiement alors que la classe Cheval précise que l’animal est utilisé pour travailler dans des exploitations agricoles.
Quadrupède
Cheval Cheval Chien Chien
Une hiérarchie de trois classes
L’HERITAGE
Classe Quadrupède
-type : Chaîne- site : Chaîne
+ nombreDePattes () retour Entier+ decritType () retourne vide + decritSite () retourne Chaine
Classe Chien
-nom : Chaîne- propriétaire : Chaîne
+ typeDeCri () retour Chaine+ sonPropriétaire () retourne Chaine + sonNom () retourne Chaine
Classe Cheval
-nom : Chaîne
+ sonNnom () retour Chaine+ sonCri () retourn Chaine + sonTravail () retourne Chaine
Schéma du graphe d’héritage
L’HERITAGE
Dans l’exemple précédent, un objet instance de la classe Chien peut se voir appliquer la méthode nombreDePattes (), qui retournera vraisemblablement quatre, car cette classe hérite de la classe Quadrupède et peut donc utiliser toutes ses méthodes.
Les méthodes nombreDePattes (), decritType () , decritSite () s’appliquent donc à des objets de type Quadrupède, Chien et Cheval.
Par contre, il est impossible d’appliquer la méthode sonPropriétaire () à un objet instance de Quadrupède ou instance de Cheval car la méthode est spécifique à la classe Chien.
Définition des classes de l’héritage
classe A spécialise B // A hérite de B{ privé // zone de définition des éléments privés ……… public // zone de définition des éléments publics ……..}
POLYMORPHISME
Les méthodes sont attachées aux classes et précisent leur comportement. Il sera possible de donner à des méthodes de classes différentes le même identificateur.
Cette propriété, qui revient à définir un même identificateur pour désigner plusieurs méthodes de plusieurs classes, s’appelle polymorphisme. Ainsi, la méthode déclenchée dépendra de l’objet receveur et ne pourra pas être attribuée a priori à une classe.
Nous avons déjà utilisé ce concept dans l’exemple précédent. L’identificateur de méthodes sonNom() correspond soit à une méthode de la classe Chien, soit à la méthode de la classe Cheval, qui à priori, ne sont pas les mêmes. C’est seulement lorsque le receveur sera connu, que la bonne méthode sera déclenchée.
SURCHARE ET REDEFINION DE METHODE
Surcharge de méthode :Il peut arriver que l’on définisse plusieurs fois une même méthode pour une même classe, en gardant donc le même identificateur, mais en changeant le type ou le nombre des paramètres des méthodes récrites. Sinon, il y aurait ambiguïté dans l’appel des méthodes, puisqu’elles auraient la même signature. On dit que l’on surcharge la méthode.
Ce cas de définition de méthodes ayant le même identificateur sera fréquente pour les constructeurs.
Redéfinition de méthodeIl peut arriver que l’on souhaite redéfinir dans une classe dérivée une méthode de la classe mère. On dit, dans ce cas, que l’on redéfinit la méthode, qui est déjà opérante dans la classe fille par héritage, par une méthode locale qui va la masquer.