Principes de l'orienté objet Jean-Jacques LE COZ.

Slides:



Advertisements
Présentations similaires
Spécialisation/généralisation Héritage Polymorphisme
Advertisements

1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Introduction à la POO: Les classes vs les objets
Principes de programmation (suite)
Programmation orientée objet
Analyse et Conception orientée objet
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Langage Oriente Objet Cours 4.
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
POO : Objets et classes (Rappels)
Langage Oriente Objet Cours 2.
Structures de données IFT-2000
Structures de données IFT-10541
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction au paradigme orienté-objet (suite)
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
Design Pattern: Decorator
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
COURS DE PROGRAMMATION ORIENTEE OBJET :
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Factory Design Patterns. Contents Factory patterns: principesFactory patterns: principes The Factory Method patternThe Factory Method pattern The Abstract.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Tutorat en bio-informatique
PHP objet Jérôme CUTRONA 10:13:27 Programmation Web
Un visiteur… …venu d’ailleurs
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
IFT 785 Approches Orientée Objets Plan de cours. Information générale Professeur : – Sylvain Giroux –
Le polymorphisme.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
La programmation par objets Principes et concepts Etude de Smalltalk.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Factory Design Patterns Raffaella Sanna Sylvain Giroux.
INSTITUT SUPERIEURE D’INFORMATIQUE Design Pattern
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 2.
BlueJ_VII 1 Java, les objets : tout de suite ! Conception de classes (1) Notes de cours associées au chapitre 7 tutorial BlueJ
Retour sur les interfaces Les méthodes définies dans une interface sont des méthodes qui doivent absolument être implémentées par une ou des sous-classes.
Mediator 9 - Un outil de développement multimédia 3AC Techno/Informatique.
Design Patterns.  SIDAOUI Abdelfahem  
Développement d’application avec base de données Semaine 3 : Modifications avec Entité Framework Automne 2015.
Les outils de tests 1 1 CHAKI Abderrazak - ETIENNE Jonathan - TOUMI Nacereddine - VACHER Nicolas.
Parcours CODAGE & ALGORITHMIQUE Cycle 3 – Ecole primaire & Collège est une plateforme de formation interactive des personnels de l'éducation.
Spécialisation covariante cours et TP. Plan  Introduction  Rappels théoriques  Définition de la covariance  Présentation du modèle servant d'exemple.
Elaboration d’un socle de compétences dans le système éducatif luxembourgeois Constats et Ambitions Démarche Implémentation Evaluation Communication Chantiers.
JAVA et l'orientation objet Jean-Jacques LE COZ. Encapsulation L'encapsulation est le concept de masquer l'implémentation de la classe De ne permettre.
1 Adaptation Structurelle de Composants Logiciels Stage de DEA informatique effectué à L’ENSM-Douai Encadré par Mr. Abdelhak SERIAI & Mr. Mourad OUSSALAH.
UML : méthode Processus. Introduction(1) ● Cycles ● Spécification par cas d'utilisation ● Identifier les besoins ● Analyse par cas d'utilisation ● Affiner.
Introduction à la Programmation Orientée Objet H.GATI.
Principes avancés de conception objet Jean-Jacques LE COZ.
Les limites de l’UML Présenté par : Samah Dekhil 1.
Cours de Langage C Les structures
Présenté par  Samira BELHORMA  Imane ZEHHAF. Introduction I. Définitions II. Quand et comment évaluer une compétence? III. Le contexte d’évaluation.
RAPPORT DE STAGE DEVELOPPEMENT APPLICATION INTERNET « Domiweb » Maître de stage Hélène CEVAËR LOGICA Brest Immeuble Grand Large Quai de la Douane
GPA789 Analyse et conception orientées objet Dérivation des classes en C++
Introduction à l'orienté objet. Définition Le terme orienté objet siginifie que l'on organise le logiciel comme une collection d'objets organisée en graphe.
JAVA et POO : Notion d'héritage
Bonnes pratiques Orienté Objet et Java
Développement d’applications interactives
Diagrammes UML 420-KE2-LG.
INTERFACE ET POLYMORPHISME
Transcription de la présentation:

Principes de l'orienté objet Jean-Jacques LE COZ

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.

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.

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.

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.

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

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.

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.

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)

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

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

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();

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

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

Covariance

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

Double Dispatch en action Polymorphisme

Principe 0 Si une classe est une sorte raffinée d'une autre classe alors cette classe est sous-classe de cette autre classe.

Principe 1 Identifier les aspects de l'application qui varient et les séparer de ceux qui restent les mêmes.

Exemple 1 Tout va bien méthodes héritées méthode réécrite

Exemple 1 (suite) Ajouter klaxonner tous les sous-types héritent de klaxonner() Tout va bien

Exemple 1 (suite) Besoin de réécrire les méthodes qui ne conviennent pas Ajouter voler() Ajouter Avion Rien ne va plus

Exemple 1 (suite) Solution par interfaces ?

Exemple 1 (suite) Rassembler tout ce qui varie à part de tout ce qui est stable Solution :

Principe 2 Programmer par interfaces pas par implémentations.

Exemple 1 (suite) Elever le niveau d'abstraction :

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()) Problème de départ 2 - Première solution 3 - Seconde solution

Principe 3 Favoriser la composition et non l'héritage La relation «A-UN» peut-être plus intéressante que la relation «EST-UN»

Exemple 1 (fin) est un : a un :

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

Exemple 3 Trop fort couplage entre AcquisitionDonnéesMétéo et les deux autres classes

Exemple 3 (fin) Solution de découplage avec le design pattern Observateur

Principe 5 Les classes doivent être ouvertes pour les extensions mais fermées pour les modifications. Design pattern : décorateur, visiteur

Exemple 4

Exemple 5

Principe 6 Dépendre d'abstractions et non de classes concrètes. Design pattern : Fabrique

Exemple 6

Principe 7 Ne parler qu'à ses amis. Design pattern : Façade, Adaptateur

Exemple 7

Principe 8 Ne nous appelez pas, nous vous appellerons.* *Hollywood principe Design pattern : Patron de méthode (template)

Exemple 8

Principe 9 Une classe ne doit avoir qu'une seule raison de changer. Une classe = une responsabilité

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.

Principe dit d'Inversion (suite) Synonymes Inversion de contrôle (IOC) Inversion de dépendance objetN objet1 objet2objet3 new objet1objet2objet3objetN structure intermédiaire new

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é

Annexe A (suite) La détermination du type Lors de la compilation Statique Java, C++ Au moment de l'exécution Dynamique Ruby, Python

Bibliographie  Conception et Programmation Objet – B. Meyer  Design Patterns – Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.