Upload
duongdung
View
217
Download
0
Embed Size (px)
Citation preview
Pricipes 24/10/2016
1
Analyse et Conception
Orientée ObjetEnseignant: DJOUABRI Abderrezak
www.djouabri.com
Chapitre 1: Principes fondamentaux de l'orienté objet1
Langages Orienté Objet (JAVA)
Langages Modulaires ou
Procédurales (C)
Langages Linéaires (Fortran et Assembleur )
Générations des langages de programmation2
Langages Linéaires Par exemple Fortran et Assembleur
• s'exécutent de façon linéaire.
Chaque ligne du programme est lue puis exécutée
jusqu'à la dernière.
• Il est possible de faire des sauts ou des boucles mais le
principe reste le même (goto –» code spaghetti ).
• difficilement s'appliquer à des programmes complexes.
• les développeurs ne peuvent pas réutiliser des outils de
programmation déjà écrits.
3Langages Modulaires ou Procédurales
Par exemple C, 4
un programme est un ensemble de données sur lesquelles agissent des procédures et des fonctions.
Langages Modulaires ou Procédurales
Par exemple C, 5
Programmer revenait à :
• définir un certain nombre de variables
(structures, tableaux…)
• écrire des procédures pour les manipuler
sans associer explicitement les unes aux autres
Langages Modulaires ou Procédurales
Par exemple C,
• réutiliser le code et d'éviter les redondances.
• Le principe est de regrouper un ensemble
d'instructions dans des fonctions ou procédures.
• En effet, chaque tâche exécutée par un programme
représente un nombre variable d'instructions. Ces
instructions sont réunies (en bibliothèques) afin de
pouvoir segmenter le code et favoriser la
réutilisation de celui-ci.
6
Pricipes 24/10/2016
2
Langages Modulaires ou Procédurales
Par exemple C,
Les questions qu’on peut poser dans ce cas :
1. Cette séparation (données, procédures) est elle utile ?
2. Pourquoi privilégier les procédures sur les données
(Que veut-on faire ?) ?
3. Pourquoi ne pas considérer que les programmes
sont avant tout des ensembles objets
informatiques caractérisé par les opérations qu’ils
connaissent ?
7Langages Orientés Objet
Par exemple: JAVA, C++, C#, Objective C, PHP,Python..
Les langages objets sont nés pour répondre à ces
questions.
Ils sont fondés sur la connaissance d’une
seule catégorie d’entités informatiques : les
objets.
8
Un objet incorpore des aspects statiques et
dynamiques au sein d’une même notion.
Langages Orientés Objet Par exemple: JAVA, C++, C#, Objective C, PHP,Python..
9
Un programme est constitué d’un ensemble
d’objets chacun disposant d’une partie procédures et d’une partie données. Les objets
interagissent par envoie de messages.
Langages Orientés Objet Par exemple: JAVA, C++, C#, Objective C, PHP,Python..
• une évolution de l'approche modulaire
• Elle lui apporte principalement trois
aspects primordiaux:
L'encapsulation, L'héritage et Le polymorphisme
10
Langages Orientés Objet Par exemple: JAVA, C++, C#, Objective C, PHP,Python..
POOLa POO est une méthode d’implémentation dans
laquelle les programmes sont organisés sous
formes de collections coopératives d’objets, dont
chacun représente une instance d’une classe
quelconque et dont toutes les classes sont
membres d’une hiérarchie de classes unis à travers
des relations d’héritage.
11Langages Orientés Objet
Par exemple: JAVA, C++, C#, Objective C, PHP,Python..
Algorithmique ObjetDans l’approche orienté objet un algorithme sera
essentiellement vu comme un ensemble d’objets auxquels l’utilisateur envoie des messages et qui s’en
envoient pendent le fonctionnement.Ces objets seront toujours pour l’utilisateur des boites noires et qui contiendront des variables locales,
inconnues de l’environnement, et qui ne s’y intéressera d’ailleurs pas. Le seul moyen d’accéder à ces objets
sera l’envoie des messages qu’ils sont capables de comprendre.
12
Pricipes 24/10/2016
3
Langages Orientés Objet Par exemple: JAVA, C++, C#, Objective C, PHP,Python..
Remarque :La spécification d’un système dans l’approche OO va s’axer principalement
sur la détermination des objets à
manipuler. Une fois cette étape réalisé le
concepteur n’aura plus qu’à réaliser les
fonctions de haut niveau qui s’appuient sur les objets et les familles d’objets définis
13 Avantages de l'Orienté Objet14
L'intérêt principal de l'OO réside dans le fait que
l'on ne décrit plus par le code des actions à réaliser
de façon linéaire mais par des ensembles cohérents
appelés objets.
facilité d'organisation, réutilisation, méthode plus
intuitive, possibilité d'héritage, facilité de
correction,
projets plus faciles à gérer.
15
L'OO est facilement concevable car il décrit
des entités comme il en existe dans le monde
réel.
Les modèles à objets ont été créés pour
modéliser le monde réel. "Dans un modèle à
objets, toute entité du monde réel est un objet,
et réciproquement, tout objet représente une
entité du monde réel".
Avantages de l'Orienté Objet 16 Avantages de l'Orienté Objet
Exemple modèle à objet vs monde réel
Objet Voiture
Entité Voiture
17
• factoriser le code en ensembles logiques.
Du point de vue de la programmation,
• écrire des programmes facilement lisibles
avec un minimum d'expérience, de taille
minimale et à la correction aisée. Ces
programmes sont, de plus, souvent très
stables
Avantages de l'Orienté Objet 18 Avantages de l'Orienté Objet
Les informations concernant un
domaine étant centralisées en objets, il
est facile de sécuriser le programme en
interdisant ou autorisant l'accès à ces
objets aux autres parties du
programme.
Pricipes 24/10/2016
4
19 Avantages de l'Orienté Objet
En général, en OO, cohabitent deux types de
développeurs: ceux qui conçoivent les objets et
ceux qui utilisent ces objets dans leurs
programmes. De cette façon, la programmation
objet permet de diviser la complexité. La
programmation objet permet d'obtenir des projets
stratifiés. Chaque protagoniste ne travaille que sur
des implémentations le concernant.
20 Concepts généraux de l'OO
Notion de classe
Une classe encapsule, c'est-à-dire regroupe des propriétés
(attributs ou variables d'instance) et des comportements
(méthodes)
classe Humain
Attribut classe
21 Concepts généraux de l'OO
classe Bras
Notion de classe
22 Concepts généraux de l'OO
Notion d'objet
Un objet est une entité logicielle :
• Ayant une identité
• Capable de sauvegarder un état
• Répondant à des messages précis en déclenchant des
activations internes appropriés qui changent l’état de
l’objet. Ces opération sont appelées méthodes qui
précisent le comportement de ces objets.
23 Concepts généraux de l'OO
Notion d'objet
Un objet est une instance de classe, c'est-à-dire un
exemplaire utilisable crée à partir de cette classe et en
valorisant certaines propriétés.
Notons que le concept de classe est abstrait : personne n'a
jamais vu d'Humain dans la nature alors que le concept
d'objet est fondamentalement concret : il est concevable de
croiser des personnes physiques, c'est-à-dire des instances
d'Humain.
24 Concepts généraux de l'OO
Notion d'objet
ali ou omar sont des instances de la classe Humain, c'est-à-dire des
humains ayant des propriétés spécifiques ( Ali est un humain aux yeux
noirs et Omar un humain aux yeux marrons ).
Exemple
Pricipes 24/10/2016
5
25 Concepts généraux de l'OO
Notion d'objet Exemple :
26 Concepts généraux de l'OO
Notion d'objet
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.
27 Concepts généraux de l'OO
Notion d'objet
MessageUn message est une demande d’activation
d’une méthode envoyé à un objet.
28 Concepts généraux de l'OO
Notion d'objet MéthodesUne méthode est une fonction ou procédure
liée à un objet qui est déclenchée à la réception d’un message particulier : la
méthode déclenchée correspond
strictement au message reçu. La liste des
méthodes définies au sein d’un objet
constitue l’interface de l’objet pour l’utilisateur
29 Concepts généraux de l'OO
Notion d'objet
SignatureLa signature d’une méthode représente la précision de son nom, du type de ses arguments et du type de donnée retournée.
nomDeFonction :: typeArgument1 -> typeArgument2 -> ... -> typeArgumentN
30 Concepts généraux de l'OO
Notion d'objet
SignatureExemple:public void add (int a)public void add (double a)public void add (int a, int b)public void addition (int a, int b)
Pricipes 24/10/2016
6
31 Concepts généraux de l'OO
L'instanciation est l'action d'instancier, de créer un
objet à partir d'un modèle. Elle est réalisée par la composition de deux opérations : l'allocation et
l'initialisation. L'allocation consiste à réserver un espace mémoire au nouvel objet. L'initialisation
consiste à fixer l'état du nouvel objet. Cette
opération fait par exemple appel à l'un des constructeurs de la classe de l'objet à créer.
Instanciation
32 Concepts généraux de l'OO
Constructeur
Le constructeur est exécutée à l'instanciation de
l'objet. Il prend en argument des propriétés du nouvel
objet. Une classe peut avoir plusieurs constructeurs.
L'instanciation d'une voiture rouge se fait par
Voiture(rouge).
ou en lui précisant en plus sa marque de fabrique :
Voiture(rouge, Renault)
33 Concepts généraux de l'OO
Référence sur un objet
un objet est une zone mémoire qui est
pointée par une ou plusieurs références. Une
fois l'objet instancié, il correspond en réalité
à une zone mémoire donnée. Cette zone
mémoire, pour être utilisée doit être
référencée
34 Concepts généraux de l'OO
Référence sur un objet
ali-------------------Nom = ali……..
……..……..
E515:FB80
Humain ali = new Humain(ali);
Objet ali en mémoire
En réalité ali est une référence sur l’objet ali
35 Concepts généraux de l'OO
Référence sur un objet
ali-------------------Nom = ali……..
……..……..
E515:FB80
Humain ali = new Humain(Ali); Objet ali en mémoire
Humain omar = Ali;
E515:FB80
36 Concepts généraux de l'OO
Référence sur un objetali-----------------Nom = Ali……..……...E515:FB80
Humain ali = new Humain(ali);
Humain omar = new Humain(omar);
E515:FF90
omar-----------------Nom = omar……..……...
omar = ali; ?
1
2
3
Pricipes 24/10/2016
7
37 Concepts généraux de l'OO
Référence sur un objetali-----------------Nom = Ali……..……...E515:FB80
Humain ali = new Humain(ali);
Humain omar = new Humain(omar);
E515:FB80
omar-----------------Nom = omar……..……...
omar = ali; ?
1
2
3 Objet perdu (non référencé)
38 Propriétés (Concepts) de base de l'OO
La POO se base sur les notions clés suivantes :
Héritage
Encapsulation
Polymorphisme
Abstraction
39 Propriétés de base de l'OO
Abstraction L'abstraction est une technique qui vise à fournir un modèle
simplifié d'un domaine d'intérêt
Identifier les informations essentielles d'un objet concentrer sur la vue extérieure d'un objet Séparer le comportement d'un objet de sa mise en œuvre
40 Propriétés de base de l'OO
L'héritage
Procédé de réutilisation, dans lequel une nouvelle
fonctionnalité est obtenue par l'extension de la mise en œuvre d'une classe existante,
La classe de généralisation
explicitement Captures les attributs et les méthodes communes
La classe de spécialisation étend la mise en œuvre avec des attributs et des méthodes supplémentaires.
41 Propriétés de base de l'OO
L'héritage
On parle d’héritage
simple lorsqu’une
classe fille ne possède
qu’une classe mère.
1
42 Propriétés de base de l'OO
L'héritage
On parle d’héritage multiple lorsqu’une classe fille
possède plusieurs classes mères.2
Pricipes 24/10/2016
8
43 Propriétés de base de l'OO
L'héritage
L'héritage permet de spécialiser une
classe qui possédera non seulement les
propriétés et méthodes de sa mère mais
également d'autres méthodes
spécifiques ou redéfinies.
44 Propriétés de base de l'OO
L'héritage
Dans l'objet fille, on trouve:
De nouvelles méthodes ou propriétés
Des méthodes ou propriétés qui surchargent, c'est-à -
dire redéfinissent celles de la classe mère.
Les propriétés et méthodes de la classe mère qui
n'ont pas été surchargées
45 Propriétés de base de l'OO
L'héritage
Remarque: Les méthodes et propriétés peuvent être
héritées à un niveau n, c'est-à-dire qu'un
objet peut utiliser une méthode de la
mère de sa mère et ainsi de suite.
46 Propriétés de base de l'OO
L'héritage
Exemple d'héritage :
Quels sont les méthodes et les attributs Nouveaux ?Redéfinies ?
Non redéfinies ?
47 Propriétés de base de l'OO
surcharge
La surcharge d’une méthode ou d’un constructeur permet de définir plusieurs fois une même méthode/constructeur avec des arguments différents. Le compilateur choisit la méthode qui doit être appelée en fonction du nombre et du type des arguments .
redefinitionet
Précision
48 Propriétés de base de l'OO
surcharge redéfinitionet
Surcharge de constructeur
Pricipes 24/10/2016
9
49 Propriétés de base de l'OO
surcharge redéfinitionet
Surcharge de method
50 Propriétés de base de l'OO
surcharge redéfinitionet
La redéfinition d’une méthode héritée doit
impérativement conserver la déclaration de la méthode parent (type et nombre de paramètres, la valeur de
retour et les exceptions propagées doivent être identiques).Si la signature de la méthode change, ce n’est plus une
redéfinition mais une surcharge. Cette nouvelle méthode n’est pas héritée : la classe mère ne possède
pas de méthode possédant cette signature .
51 Propriétés de base de l'OO
surcharge redéfinitionet
52 Propriétés de base de l'OO
Des conseils sur l'héritage
Lors de la création d'une classe « mère » il faut
tenir compte des points suivants :
la définition des accès aux variables
d'instances, très souvent privées, doit être réfléchie entre protected et private ;
53 Propriétés de base de l'OO
Des conseils sur l'héritage
pour empêcher la redéfinition d'une méthode
(surcharge) il faut la déclarer avec le
modificateur final. Lors de la création d'une
classe fille, pour chaque méthode héritée qui
n'est pas final, il faut envisager les cas suivant :
54 Propriétés de base de l'OO
Des conseils sur l'héritage
la méthode héritée convient à la classe fille : on ne doit
pas la redéfinir ; la méthode héritée convient mais partiellement du fait de
la spécialisation apportée par la classe fille : il faut la redéfinir voir la surcharger. La plupart du temps une redéfinition commencera par appeler la méthode héritée
(via super) pour garantir l'évolution du code ; la méthode héritée ne convient pas : il faut redéfinir ou
surcharger la méthode sans appeler la méthode héritée lors de la redéfinition.
Pricipes 24/10/2016
10
55 Propriétés de base de l'OO
Encapsulation
Les informations d’emballage est
une manière pour cacher la
représentation interne
Toutes les interactions avec
l'objet est à travers une interface
publique prestations de service.
L’Encapsulation sert à séparer l'interface contractuelle d'une
abstraction et sa mise en œuvre.
56 Propriétés de base de l'OO
Encapsulation
Derrière ce terme se cache le concept même de l'objet :
réunir sous la même entité les données et les moyens de les
gérer,
57 Propriétés de base de l'OO
Encapsulation
L’encapsulation est le faite qu’un objet renferme
ses propres attributs et ses méthodes. Les détails
de l’implémentation d’un objet sont masqués aux
autres objets du système à objets. On dit qu’il y a
encapsulation de données et du comportement des
objets.
58 Propriétés de base de l'OO
Encapsulation
On précise trois modes d’accès aux attributs d’un objet.
Le mode public1
Le mode private2
Le mode protected3
59 Propriétés de base de l'OO
Encapsulation
On précise trois modes d’accès aux attributs d’un objet.
Le mode public1
Le mode private
Le mode protected
avec lequel les attributs
seront accessibles
directement par l’objet lui
même ou par d’autres
objets. Il s’agit du niveau le plus bas de protection
60 Propriétés de base de l'OO
Encapsulation
On précise trois modes d’accès aux attributs d’un objet.
Le mode public
Le mode private2
Le mode protected
avec lequel les attributs de
l’objet seront inaccessibles à partir d’autres objets : seules
les méthodes de l’objet pourront y accéder. Il s’agit du
niveau le plus fort de
protection.
Pricipes 24/10/2016
11
61 Propriétés de base de l'OO
Encapsulation
On précise trois modes d’accès aux attributs d’un objet.
Le mode public
Le mode private
Le mode protected3
cette technique de
protection est étroitement
associée à la notion
d’héritage. Seulement les
successeurs qui ont l'accès
62 Propriétés de base de l'OO
Encapsulation
Sous ce nouveau concept se cache également un
autre élément à prendre en compte : pouvoir
masquer aux yeux d'un programmeur extérieur
tous les rouages d'un objet et donc l'ensemble des
procédures et fonctions destinées à la gestion
interne de l'objet, auxquelles le programmeur
final n'aura pas à avoir accès.
63 Propriétés de base de l'OO
Polymorphisme
Le terme polymorphisme est certainement
celui que l'on appréhende le plus.
poly comme plusieurs et morphisme comme
forme.
Le polymorphisme traite de la capacité de
l'objet à posséder plusieurs formes.
64 Propriétés de base de l'OO
Polymorphisme
Une entité est polymorphe si à
l’exécution elle peut se référer
à des instances de classe
différentes.
65 Propriétés de base de l'OO
Polymorphisme
Capacité d'objets appartenant à différentes classes de répondre à des
appels de méthodes du même nom, chacun en fonction de comportement
spécifique à la classe appropriée
Les objets doivent présenter une interface
compatible avec le même nom de
méthode et les mêmes ensembles de
paramètres
Le programme n'a pas besoin de connaître
la classe exacte de l’objet à l'avance, donc
ce comportement peut être mis en œuvre au moment de l'exécution
66 Propriétés de base de l'OO
Polymorphisme Exemples
Pricipes 24/10/2016
12
67 Propriétés de base de l'OO
Polymorphisme Exemples
68 Propriétés de base de l'OO
Polymorphisme
Cette capacité dérive directement du principe
d'héritage vu précédemment. En effet, comme
on le sait déjà, un objet va hériter des champs
et méthodes de ses ancêtres. Mais un objet
garde toujours la capacité de pouvoir
redéfinir une méthode afin de la réécrire, ou
de la compléter.
69 Propriétés de base de l'OO
Polymorphisme
Le polymorphisme est un mécanisme
qui permet à une sous classe de redéfinir
une méthode dont elle a hérité tout en
gardant la même signature de la
méthode.
70 Propriétés de base de l'OO
Polymorphisme
Attention !
Le concept de polymorphisme ne doit pas être confondu
avec celui d'héritage multiple. En effet, l'héritage multiple
permet à un objet d'hériter des membres (champs et
méthodes) de plusieurs objets à la fois, alors que le
polymorphisme réside dans la capacité d'un objet à
modifier son comportement propre et celui de ses
descendants au cours de l'exécution.
71 Propriétés de base de l'OO
Le polymorphisme et le transtypage
Les objets sont dits polymorphes car ils possèdent plusieurs
types: le type de leurs classes et les types des classes
ascendantes.
Par exemple:
uneHonda est une Moto et
Un véhicule.
Véhicule
Moto
uneHonda
Instanciation
72 Propriétés de base de l'OO
Le polymorphisme et le transtypage
Dans certains cas, il est possible de forcer le
programme à 'voir' un objet comme un type
différent de son type initial, c'est le transtypage
ou cast.
Ce transtypage ne modifie par l'objet mais
indique seulement la façon de le voir.
Pricipes 24/10/2016
13
73 Propriétés de base de l'OO
Le polymorphisme et le transtypage
types de transtypages
qui sert à un objet à être vu
comme du type de sa mère. Ce
transtypage est fait de façon
implicite
Le transtypage ascendant
(implicite)Le transtypage descendant
qui sert à forcer une classe de
type mère à être vue comme
un type fille. Ce transtypage
n'est valide que si l'objet de
type mère était de type fille à
son instanciation.
74 Propriétés de base de l'OO
Le polymorphisme et le transtypage
Attention!
Une erreur courante est de penser qu'il y a cast de la
mère vers la fille: Une classe mère n'est pas du type de
sa fille! Un Véhicule n'est pas forcement une Voiture.
De nombreux problèmes métaphysiques s'en suivent
généralement. La bonne façon de raisonner lorsque
l'on veut affecter un type à un autre est de procéder
comme suit:
75 Propriétés de base de l'OO
Le polymorphisme et le transtypage
On fait A <- B ; A possède un type initial, le type que
l'on a donné à l'instanciation. Cette affectation est
valide si et seulement si B est du type initial de A.
Autrement dit, il faut que B soit de même type initial
que A ou d'un type dérivé de celui de A
76 Propriétés de base de l'OO
Le polymorphisme et le transtypage
Exemple:
maVoiture <- monVehicule :
est-ce une affectation valide?
Véhicule
Voiture
maVoiture
Instanciation
Instanciation
monVéhicule
77 Propriétés de base de l'OO
Le polymorphisme et le transtypage
Exemple:
maVoiture <- monVehicule
un Véhicule n'est pas
forcement une Voiture donc
cette affectation n'est pas
valide.
Véhicule
Voiture
maVoiture
Instanciation
Instanciation
monVéhicule
78 Propriétés de base de l'OO
Le polymorphisme et le transtypage
Exemple:
monVehicule <- maVoiture :
est-ce une affectation valide?
Véhicule
Voiture
maVoiture
Instanciation
Instanciation
monVéhicule
Pricipes 24/10/2016
14
79 Propriétés de base de l'OO
Le polymorphisme et le transtypage
Exemple:
monVehicule <- maVoiture :
monVehicule est de type initial
Véhicule et maVoiture est
également de type Véhicule car
Voiture dérive de Véhicule; donc
cette affectation est valide !
Véhicule
Voiture
maVoiture
Instanciation
Instanciation
monVéhicule
80 Propriétés de base de l'OO
Le polymorphisme et le transtypage
Polymorphisme paramétriqueun objet peut comporter plusieurs
méthodes de même nom et possédant
des arguments différents. Ce sont des
méthodes polymorphiques.
81 Propriétés de base de l'OO
Le polymorphisme et le transtypage
Polymorphisme paramétrique
• Voiture.rouler(chemin) la façon dont la voiture roule ne dépend
que du chemin.
• Voiture.rouler( chemin, meteo) la façon dont la voiture roule
dépend du chemin et de la météo.
• Voiture.rouler(chemin, meteo, circulation) la façon dont la
voiture roule dépend du chemin, de la météo et de la circulation.
exemple avec les constructeurs.
82 Propriétés de base de l'OO
composition
Procédé de réutilisation, dans lequel une
nouvelle fonctionnalité est obtenue par la
création d'un objet composé d'autres objets
La nouvelle fonctionnalité est
obtenue en déléguant la
fonctionnalité à l'un de l'objet étant
composé
la composition encapsule plusieurs
objets à l'intérieur d'un autre
83 Propriétés de base de l'OO
Les promesses de la conception orientée objet
Robustesse
Les modifications apportées au logiciel ne pas introduire de
régression
Extensibilité
Extension de nouvelles fonctionnalités nécessite peu d'effort
réutilisabilité
Développement d'un nouveau logiciel prend bénéfice des atouts
existants
84 Bibliographie