POO- IUT GEII Juan Bravo 1



Documents pareils
Architecture Agile et développement durable

Urbanisation des systèmes d information

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Initiation à JAVA et à la programmation objet.

Once the installation is complete, you can delete the temporary Zip files..

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Héritage presque multiple en Java (1/2)

REMOTE DATA ACQUISITION OF EMBEDDED SYSTEMS USING INTERNET TECHNOLOGIES: A ROLE-BASED GENERIC SYSTEM SPECIFICATION

Cedric Dumoulin (C) The Java EE 7 Tutorial

Contents Windows

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

Forthcoming Database

AUDIT COMMITTEE: TERMS OF REFERENCE

Exemple PLS avec SAS

CEST POUR MIEUX PLACER MES PDF

RAPID Prenez le contrôle sur vos données

THÈSE. présentée à TÉLÉCOM PARISTECH. pour obtenir le grade de. DOCTEUR de TÉLÉCOM PARISTECH. Mention Informatique et Réseaux. par.

Exercices sur SQL server 2000

calls.paris-neuroscience.fr Tutoriel pour Candidatures en ligne *** Online Applications Tutorial

Plan. Department of Informatics

Deadline(s): Assignment: in week 8 of block C Exam: in week 7 (oral exam) and in the exam week (written exam) of block D

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Optimisez la gestion de vos projets IT avec PPM dans le cadre d une réorganisation. SAP Forum, May 29, 2013

Improving the breakdown of the Central Credit Register data by category of enterprises

Instructions Mozilla Thunderbird Page 1

APPENDIX 6 BONUS RING FORMAT

that the child(ren) was/were in need of protection under Part III of the Child and Family Services Act, and the court made an order on

UML : Unified Modeling Language

Devenez un véritable développeur web en 3 mois!

CLIM/GTP/27/8 ANNEX III/ANNEXE III. Category 1 New indications/ 1 re catégorie Nouvelles indications

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

WEB page builder and server for SCADA applications usable from a WEB navigator

COUNCIL OF THE EUROPEAN UNION. Brussels, 18 September 2008 (19.09) (OR. fr) 13156/08 LIMITE PI 53

Acce s aux applications informatiques Supply Chain Fournisseurs

DOCUMENTATION - FRANCAIS... 2

Application Form/ Formulaire de demande

MELTING POTES, LA SECTION INTERNATIONALE DU BELLASSO (Association étudiante de lʼensaparis-belleville) PRESENTE :

DOCUMENTATION MODULE BLOCKCATEGORIESCUSTOM Module crée par Prestacrea - Version : 2.0

GIGABIT PCI DESKTOP ADAPTER DGE-530T. Quick Installation Guide+ Guide d installation+

Analyse,, Conception des Systèmes Informatiques

VTP. LAN Switching and Wireless Chapitre 4

I>~I.J 4j1.bJ1UlJ ~..;W:i 1U

Les Portfolios et Moodle Petit inventaire

UE 13 Contrôle de gestion. Responsables : Henri Bouquin, Professeur Stéphanie Thiéry-Dubuisson, Maître de Conférences

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Gestion des prestations Volontaire

PIB : Définition : mesure de l activité économique réalisée à l échelle d une nation sur une période donnée.

Génie Logiciel avec Ada. 4 février 2013

SAP Runs SAP Reporting Opérationnel & BI avec HANA et SAP Analytics. Pierre Combe, Enterprise Analytics Juin, 2015

Academic Project. B2- Web Development. Resit Project. Version 1.0 Last update: 24/05/2013 Use: Students Author: Samuel CUELLA

Mon Service Public - Case study and Mapping to SAML/Liberty specifications. Gaël Gourmelen - France Telecom 23/04/2007

Le passé composé. C'est le passé! Tout ça c'est du passé! That's the past! All that's in the past!

Utiliser une WebCam. Micro-ordinateurs, informations, idées, trucs et astuces

ArcScan Tutorial. Copyright Esri All rights reserved.

Package Contents. System Requirements. Before You Begin

Chapitre VI- La validation de la composition.

Tex: The book of which I'm the author is an historical novel.

Technologies quantiques & information quantique

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Editing and managing Systems engineering processes at Snecma

AMENDMENT TO BILL 32 AMENDEMENT AU PROJET DE LOI 32

TABLE DES MATIERES A OBJET PROCEDURE DE CONNEXION

Practice Direction. Class Proceedings

Appointment or Deployment of Alternates Regulations. Règlement sur la nomination ou la mutation de remplaçants CONSOLIDATION CODIFICATION

POLICY: FREE MILK PROGRAM CODE: CS-4

Préconisations pour une gouvernance efficace de la Manche. Pathways for effective governance of the English Channel

Lesson Plan Physical Descriptions. belle vieille grande petite grosse laide mignonne jolie. beau vieux grand petit gros laid mignon

Garage Door Monitor Model 829LM

Pourquoi externaliser? Petits déjeuners des PME & Start-up

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Vérifier la qualité de vos applications logicielle de manière continue

Objets et Programmation. origine des langages orientés-objet

INVESTMENT REGULATIONS R In force October 1, RÈGLEMENT SUR LES INVESTISSEMENTS R En vigueur le 1 er octobre 2001

Le Product Backlog, qu est ce c est?

How to Login to Career Page

physicien diplômé EPFZ originaire de France présentée acceptée sur proposition Thèse no. 7178

Tammy: Something exceptional happened today. I met somebody legendary. Tex: Qui as-tu rencontré? Tex: Who did you meet?

Merise. Introduction

Règlement sur le télémarketing et les centres d'appel. Call Centres Telemarketing Sales Regulation

Monitor LRD. Table des matières

Qualité et ERP CLOUD & SECURITY (HACKING) Alireza MOKHTARI. 9/12/2014 Cloud & Security

Slony1 2.1 Londiste 3

Analyse et Conception objet du logiciel Analyse et conception objet du logiciel : Méthode de conception objet et notation UML.

Paxton. ins Net2 desktop reader USB

DOCUMENTATION - FRANCAIS... 2

Logitech Tablet Keyboard for Windows 8, Windows RT and Android 3.0+ Setup Guide Guide d installation

Scénarios économiques en assurance

Programmer en JAVA. par Tama

Les Bonnes PRATIQUES DU TEST LOGICIEL

Plan. Patrons de conception. Motivations. Design Pattern : principe. Philippe Collet

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Syllabus Dossiers d études

Atelier Progress Rollbase

TP LINUX : LINUX-SAMBA SERVEUR DE FICHIERS POUR UTILISATEURS WINDOWS

Introduction au génie logiciel

Patrons de Conception (Design Patterns)

Francoise Lee.

Transcription:

1

concepts avancés de POO Concepts SOLID o Principes de bon codage Robert C. Martin «Oncle Bob» Article exposant les concepts SOLID en Mars 1995 SRP The Single Responsibility Principle A class should have one, and only one, reason to change. OCP The Open Closed Principle You should be able to extend a classes behavior, without modifying it. LSP The Liskov Substitution Principle Derived classes must be substitutable for their base classes. ISP The Interface Segregation Principle Make fine grained interfaces that are client specific. DIP The Dependency Inversion Principle Depend on abstractions, not on concretions. 2

SOLID ou STUPID Exemple de code STUPID Singleton (pattern) Tight Coupling Untestability Premature Optimization Indescriptive Naming Duplication Code dupliqué Viole le concept DRY (Don t Repeat Yourself) 3

SOLID ou STUPID Code fonctionnel mais lisibilité Testabilité Extension 4

SOLID ou STUPID Le détail n est pas de la responsabilité de Order. Dépendance d un type concret 5

SRP Principe de responsabilité unique Découpage des responsabilité The Single Responsibility Principle states that every object should have a single responsibility, and that responsibility should be entirely encapsulated by the class. Wikipedia Encapsuler les parties qui changent dans votre code dans une classe Chaque classe a une responsabilité unique souplesse ( moins de couplage) robustesse (changements compartimentées) Cohésion ( compacité et effacité du code) 6

SRP Le questionnement Hum..des fonctionnalités ne sont pas à leurs places 7

SRP Refonte du modèle 8

SRP 9

SRP Séparation des responsabilités Dépendre d une abstraction Prinicipe de séparations des interfaces (SOLID = ISP) 10

SRP Référence vers les objets implémentant le détail des actions à mener Vous noterez l emploi des interfaces (abstraction) Injection de dépendances Mention «peut mieux faire» ici car dépendance des new La validation d un ordre (checkout) entraîne une série d actions invoquées sans en connaitre le détails => principe de délégation de responsabilités 11

En fonction du type d ordre (en ligne, en magasin ou autre) le système de validation de l ordre diffère => Classe virtuelle et checkout abstrait 12

OCP Principe Ouvert-Fermé Code ouvert à l extension et fermé à la modification Open to Extension New behavior can be added in the future Closed to Modification Changes to source or binary code are not required Dr. Bertrand Meyer originated the OCP term in his 1988 book, Object Oriented Software Construction Vous devez pouvoir rajouter une fonctionnalité sans toucher au code existant 13

OCP Boites à outils la composition o Exemple du pattern strategy les design pattern o Pattern Decorateur L abstraction o o Emploi du polymorphisme sur classe abstraite ou interface Associé à la composition Héritage et surcharge o o o Meyers versus Abstraction Une classe fille hérite d une classe de base et surcharge (spécialise) une méthode Approche d une design pattern Template 14

OCP Exemple APRES abstraction AVANT Pour changer de stratégie de codage il faut modifier le code existant Héritage et implémentation Violation OCP Risque de modifications nécessaires en cascades Risque de casser votre code 15

OCP La sérialisation utilise une abstraction (polymorphisme) On ne dépend plus du détails de l implémentation polymorphe Le choix de la stratégie est définie dans le ctor en dur (bofbof) 16

LSP Principe de substitution Concept introduit par Barbara Liskov Les méthodes qui utilisent des objets d une classe doivent pouvoir utiliser des objets dérivés de cette classe sans même le savoir Autrement dit un client doit pouvoir utiliser n importe quelle implémentation (classe de base ou classes héritées) sans changer la cohérence fonctionnelle du système Un code respectant le LSP respectera implicitement OCP LSP permet un outil pour valider une hiérarchie de classes 17

LSP CP Exemple 1 Un plateau de jeu 3D est-il une sorte de Plateau2D Problème de comportement Violation LSP 18

LSP Exemple 2 Les chats mordent et griffes o CODE JAVA Un chat sans griffe EST UN Chat o Modélisation intuitive Héritage! Problème de comportement Violation LSP L héritage vu comme un factorisation de code est une erreur Solution ici: ABSTRACTION +COMPOSITION =pattern STRATEGY 19

LSP Exemple 3 On rajoute la possibilité de récupérer et de stocker les données depuis un cloud ou sur http Problème de comportement => Résolution en changeant la modélisation 20

LSP Exemple 4 Un carré est-il un rectangle? 21

LSP L héritage qui semblait naturel pose un problème fonctionnel. Les «contraintes» d un carré sont plus fortes que celles d un rectangle Pour un rectangle Precondition for Width=w: w > 0 Post-condition for Width=w: width = w height unchanged Pour un carré Precondition for Width=w: w > 0 Post-condition for Width=w width = w ET height=w height unchanged 22

LSP Fermons les yeux sur les péripéties précédentes. Et si nous rajoutions un calcul d aire? Test unitaire 1: OK Test unitaire 2: KO 23

LSP Une solution l'héritage place l'accent sur la classe de base, qui se présente comme une véritable offre de service affichée par chaque sousclasse. Attention à la relation EST UN qui abouti bien souvent à un mauvais choix de modèle du point de vue comportemental 24

ISP Principe de séparation des interfaces This principle deals with the disadvantages of fat interfaces. Classes that have fat interfaces are classes whose interfaces are not cohesive. In other words, the interfaces of the class can be broken up into groups of member functions. Each group serves a different set of clients. Thus some clients use one group of member functions, and other clients use the other groups. - Robert Martin Ne pas forcer ses classes à implanter au travers d interfaces des services qu elles n utiliserons pas Équivalent du SRP mais appliqué à une abstraction 25

ISP ISP à l oeuvre Si votre interface recouvre trop de responsabilités Créer des interfaces plus petites Les classes peuvent choisir d implémenter ces interfaces secondaires L interface principale (FAT) implèmente les interfaces secondaires IEnumerable responsable du parcours d une collection: utilisation foreach OK 26

ISP Exemple 1 Avant ISP La classe est obligée d implémenter PersistDocument => violation ISP et LSP 27

ISP Solution conforme ISP et LSP! 28

DIP L inversion de dépendances High-level modules should not depend on lowlevel modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions - Robert Martin un objectif 29

DIP Le problème 30

DIP La solution Le contrôle des objets a été inversé!. Abstraction + polymorphisme + injection de dépendance 31

DIP En résumé Un changement sur la couche métier impacte toutes les couches => Changements dans le code en cascade La couche métier implémente le contrat imposé par la couche présentation La couche présentation utilise une couche métier particulière en tant que ICoucheMétier (polymorphe). Une nouvelle implémentation de couche métier n impacte pas la présentation! 32

ISP Notre fil rouge abstraction injection implémentation 33

DIP L inversion de contrôle Posséder «c est dépendre de» L inversion du sens de contrôle des objets est un moyen de respecter le principe d inversion des dépendances L injection d une dépendance est une des solutions techniques 34

DIP L injection de dépendances Principe de délégation o Appelé Hollywood principle: «Don t call us; we ll call you» Mise en œuvre selon 3 techniques o Injection via constructeur À la création de l objet on transmet des références vers les objets délégués On s appuie sur une abstraction (polymorphisme d interface par exemple) 35

DIP o Injection via une propriété o Injection d interface 36

DIP Automatiser l injection IoC Container o A la «main» o Framework spécifique pour l injection et la résolution des types Unity, Ninject, Castle Windsor.. Example pour Unity UnityContainer unitycontainer = new UnityContainer(); unitycontainer.registertype<school, School>(); unitycontainer.registertype<iperson, Student>(); var school = unitycontainer.resolve<school>(); school.speak(); unitycontainer.registertype<iperson, Teacher>(); var otherschool = unitycontainer.resolve<school>(); school.speak(); Magique! La résolution de l injection de la dépendance Iperson est gérée en sous main: 2 objets crées: un étudiant et une école 37