Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parThomas Sévigny Modifié depuis plus de 8 années
1
Principes de l'orienté objet Jean-Jacques LE COZ
2
Abstraction La capacité d'un programme à ignorer certains aspects de l'information qu'il manipule. Chaque objet dans le système sert de modèle à un acteur abstrait qui peut réaliser du travail, rendre compte de son état et le modifier ainsi que communiquer avec d'autres objets sans révéler son implémentation.
3
Encapsulation Manipulation des objets assurée que par les méthodes. L'encapsulation repose sur le masquage de l'état des objets. L'encapsulation est alors complètement ou partiellement levée à l'aide de méthodes d'accès (getters et setters). Ce principe a été standardisé en Java pour les composants de type JavaBean.
4
Encapsulation (suite) Certains langages permettent de définir l'encapsulation (SmallTalk) en tant que telle. Les langages C++, Java et Python ne le permettent pas. Il faut donc utiliser la visibilité privée ou protégée. Attention pour ces langages, l'encapsulation est levée entre des instances d'une même classe.
5
Encapsulation (fin) L'encapsulation pose le fondement même de l'approche objet : Découpler l'interface de l'implémentation. Interface: ce que l'on voit d'un objet. Implémentation: la représentation interne de l'objet.
6
Standard JavaBean public class Pojo { private String X; private int[ ] Y; public Pojo(String arg) { this.setX(arg); tableau = { 1,2,3,4,5 }; } public void setX(String attribut) { X = attribut; } public void setY(int[ ] arg) { Y = arg; } public String getX() { return X; } public int[ ] getY() { return Y; } }
7
Polymorphisme Permettre à la même définition d'être utilisée avec des types différents de données (classes, objets). Le polymorphisme s'applique aux types de données et aux fonctions. Fonction polymorphe. Type de donnée polymorphe.
8
Exemple de polymorphisme Si un oiseau reçoit le message de partir vite : - il agite ses ailes et vole Si un lion reçoit le même message : - il bouge ses pattes et court Les deux réagissent au même message mais de façon différente.
9
Polymorphisme (suite) Trois types de polymorphisme: Polymorphisme «ad-hoc». Surcharge (overloading methods) Polymorphisme de spécialisation Réécriture ou implémentation (overriding methods) polymorphisme «parametric». Généricité ou template. Fonction(arg : type), arg représente n'importe quel type. *«Duck typing» : dynamic type system (Python, Ruby)
10
Polymorphisme en Java (1) public interface MonInterface { public void methode_polymorphe(); } public class MaClasseUne implements MonInterface { public void methode_polymorphe() { System.out.println(''un comportement''); } } public class MaClasseSeconde implements MonInterface { public void methode_polymorphe() { System.out.println(''un autre comportement''); } }
11
Polymorphisme en Java (2) public abstract class MonAbstraction { public abstract void methode_polymorphe(); } public class MaClasseTroisieme extends MonAbstraction { public void methode_polymorphe() { System.out.println(''un comportement''); } public class MaClasseQuatrieme extends MonAbstraction { public void methode_polymorphe() { System.out.println(''un autre comportement''); }
12
Polymorphisme en Java (3) public static void main(String args[ ]) { MonInterface objet1 = MaClasseUne(); MonInterface objet2 = MaClasseSeconde(); MonAbstraction objet3 = MaClasseTroisieme(); MonAbstraction objet4 = MaClasseQuatrieme();... // comportements polymorphes: objet1.methode_polymorphe(); objet2.methode_polymorphe(); objet3.methode_polymorphe(); objet4.methode_polymorphe();
13
Polymorphisme (suite) Sous-typage et polymorphisme Permet à une fonction écrite pour prendre un argument de type T d'accepter un type S sous-type de T. Respecte le principe de substitution de Barbara Liskov. Barbara Liskov et Jeannette Wing 1993
14
Polymorphisme (suite) Polymorphisme multiple Covariance Le comportement polymorphe est supporté par la spécialisation des méthodes et des arguments des méthodes Contravariance Le comportement polymorphe est supporté par la spécialisation des méthodes et la généralisation des arguments des méthodes
15
Covariance
16
Double dispatch Technique de programmation pour supporter le polymorphisme multiple Basée sur le Design pattern Visiteur Mise en évidence du comportement polymorphe Sur deux dérivations de classes Permet un couplage faible entre les visités et les visiteurs
17
Double Dispatch en action 2 3 4 1 Polymorphisme
18
Principe 0 Si une classe est une sorte raffinée d'une autre classe alors cette classe est sous-classe de cette autre classe.
19
Principe 1 Identifier les aspects de l'application qui varient et les séparer de ceux qui restent les mêmes.
20
Exemple 1 Tout va bien méthodes héritées méthode réécrite
21
Exemple 1 (suite) Ajouter klaxonner tous les sous-types héritent de klaxonner() Tout va bien
22
Exemple 1 (suite) Besoin de réécrire les méthodes qui ne conviennent pas Ajouter voler() Ajouter Avion Rien ne va plus
23
Exemple 1 (suite) Solution par interfaces ?
24
Exemple 1 (suite) Rassembler tout ce qui varie à part de tout ce qui est stable Solution :
25
Principe 2 Programmer par interfaces pas par implémentations.
26
Exemple 1 (suite) Elever le niveau d'abstraction :
27
Exemple 2 (Java) public void methodeA(Vector arg) { for(int i=0; i<arg.size(); i++)... } public void methodeA(Collection arg) { for(int i=0; i<arg.size(); i++)... } public void methodeA(Collection arg) { methodeB(arg.iterator());... } public void methodeB(Iterator arg) { while(arg.hasNext())... 1 - Problème de départ 2 - Première solution 3 - Seconde solution
28
Principe 3 Favoriser la composition et non l'héritage La relation «A-UN» peut-être plus intéressante que la relation «EST-UN»
29
Exemple 1 (fin) est un : a un :
30
Principe 4 S'efforcer de coupler légèrement les objets qui interagissent. Permet de construire des systèmes souples qui permettent les évolutions car ils minimisent l'interdépendance des objets. Design pattern : Observateur, Commande
31
Exemple 3 Trop fort couplage entre AcquisitionDonnéesMétéo et les deux autres classes
32
Exemple 3 (fin) Solution de découplage avec le design pattern Observateur
33
Principe 5 Les classes doivent être ouvertes pour les extensions mais fermées pour les modifications. Design pattern : décorateur, visiteur
34
Exemple 4
35
Exemple 5
36
Principe 6 Dépendre d'abstractions et non de classes concrètes. Design pattern : Fabrique
37
Exemple 6
38
Principe 7 Ne parler qu'à ses amis. Design pattern : Façade, Adaptateur
39
Exemple 7
40
Principe 8 Ne nous appelez pas, nous vous appellerons.* *Hollywood principe Design pattern : Patron de méthode (template)
41
Exemple 8
42
Principe 9 Une classe ne doit avoir qu'une seule raison de changer. Une classe = une responsabilité
43
Principe dit d'Inversion Dépendre d'abstractions et pas de classes concrètes. Pour suivre le principe : aucune variable ne doit avoir de référence vers une classe concrète, aucune classe ne doit dériver d'une classe concrète, aucune méthode ne doit réécrire une méthode dont l'implémentation a été faite dans une classe de base.
44
Principe dit d'Inversion (suite) Synonymes Inversion de contrôle (IOC) Inversion de dépendance objetN objet1 objet2objet3 new objet1objet2objet3objetN structure intermédiaire new
45
Annexe A: type de donnée Est un label ou un nom pour un ensemble de valeurs et d'opérations sur ces valeurs. Bienfaits: Sécurité Optimisation Documentation Abstraction/modularité
46
Annexe A (suite) La détermination du type Lors de la compilation Statique Java, C++ Au moment de l'exécution Dynamique Ruby, Python
47
Bibliographie Conception et Programmation Objet – B. Meyer Design Patterns – Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.