Exposé de 3ème année Refactoring. 28 novembre 2013 Merci de votre venue Champs Sur Marne, France Présentateur: M. Damien Trouillet Apprenti.

Slides:



Advertisements
Présentations similaires
Un environnement de développement éducatif
Advertisements

Chap. 4 Recherche en Table
C# 2.0, un an après Mitsuru FURUTA
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Calculs de complexité d'algorithmes
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Approfondissement du langage
(Classes prédéfinies – API Java)
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
C.
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
Programmation Orientée Objet (POO)
Autorisations Utilisation eCATT
Cours Présenté par …………..
Chap. 1 Structures séquentielles : listes linéaires
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Introduction à la POO: Les classes vs les objets
بسم الله الرحمن الرحيم. Institut Supérieure des Etudes Technologiques de Kébili.
Initiation à la programmation et algorithmique cours 3
Créer un premier questionnaire
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Développement d’applications web
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
Formation au module Structure de ZENTO
Programmation orientée objet
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Principes de la technologie orientée objets
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Chapitre VIII Structures dobjets. Chapitre VIII - Structures d'objets2 Structures d objets Il existe plusieurs relations entre les classes. Lhéritage.
28 novembre 2012 Grégory Petit
Configuration de Windows Server 2008 Active Directory
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
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.
Chapitre 21 Collections Partie I Introduction Une collection : est un objet qui regroupe multiple éléments dans une unité. Une collection est.
Classes abstraites et Interfaces
L’utilisation des bases de données
Gestion denquêtes et suivi dindicateurs statistiques 1er degré © DOS3 – Pôle Analyse & Développement Octobre 2011 – v.0.1 Tutorial portail directeur décole.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Structures de données IFT-2000
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
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.
Points importants de la semaine Les constantes de compilation. Les fonctions.
1.1 LES VECTEURS GÉOMÉTRIQUES
IFT 6800 Atelier en Technologies d’information
Détection et correction des défauts de conception
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Développement dapplication avec base de données Semaine 10 : WCF avec Entité Framework Automne 2013.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Création et présentation d’un tableau avec Word 2007
Objectifs À la fin de ce cours, vous serez capables de :
KIWAPP IS A B2B FULL-STACK APP-MANAGEMENT TOOL KIWAPP EN QUELQUES ETAPES Octobre 2014.
La notion de type revisitée en POO
11/04/ L'héritage Cours 7 Cours 7.
Créer des packages.
Tutorat en bio-informatique
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
Nouvelles Technologies Internet & Mobile
Template Method Design Pattern. But Définir le squelette d’un algorithme tout en déléguant certaines étapes aux sous-classes. Les sous-classes peuvent.
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
Transcription de la présentation:

Exposé de 3ème année Refactoring

28 novembre 2013 Merci de votre venue Champs Sur Marne, France Présentateur: M. Damien Trouillet Damien Trouillet

ORGANISATION DU TEMPS Que fait-on aujourdhui? TDD introduction 5 1 Introduction Définition du refactoring 2 Utilisation en java 3 Les outils sur eclipse 4 Fin questions 6 2

INFORMER Le refactoring doit être connu de tous. Aussi bien les développeurs, les chefs de projets ainsi que les directeurs techniques. AUGMENTER La qualité de vos projets. METTRE A JOUR Vos idées pré-conçues sur le refactoring. INTRODUCTION

Refactoring (n.m.) définition Le refactoring est une technique grâce à laquelle vous pouvez restructurer et modifier votre code existant de telle sorte que son comportement reste inchangé. Le refactoring vous permet de rationaliser, de simplifier et d'améliorer les performances et la lisibilité du code de votre application.

Définition suite 5 limiter le nombre dinformations limiter la complexité des classes POURQUOI améliorer la qualité simplifier lalgorithmique limiter le nombre de classes faciliter la maintenance appliquer des règles importantes sadapter aux évolutions techniques faire des évolutions et non des révolutions

6 CONCEVOIR UNE SOLUTION CARACTERISE LE PROBLEME MODIFIER LE CODE Le plus important Définir la meilleure solution Plusieurs solutions peuvent être mises en place cest pour cela quil faut absolument les étudier sans coder Méthode générale DETECTER LE PROBLEME

Exemples de refactoring 1/2 Quelques exemples simples à mettre en place! Composition des méthodes Limiter la complexité et la taille des méthodes permet de réduire le nombre de problèmes. Organisation des données Les données doivent être bien organisées pour pouvoir prétendre à de bonnes performances. Responsabilisation des objets Une méthode, une classe doit avoir une seule responsabilité. Son nom doit aussi être compréhensible. 7

Exemples de refactoring 2/2 Quelques exemples simples à mettre en place! Simplification des conditions On complexifie souvent trop facilement les conditions il faut alors avoir des méthodes pour les simplifier. Utilisation de la généralisation La généralisation amène son lot de réfactoring surtout en déplaçant des méthodes. Simplification appels méthodes Un projet de bonne qualité doit posséder des interfaces simples et compréhensibles. 8

Composition des méthodes quelques exemples 9 Supprimer lassignation de paramètres Utiliser des variables temporaires Spliter les variables temporaires Faire une variable temporaire pour chaque assignation Extraction de méthodes Fragmenter le code dune méthode en plusieurs Introduire des variables compréhensives Renommer les variables pour quelles soient compréhenisibles delles même

10 void printOwing(double amount) { printBanner(); //print details System.out.println("name:" + _name); System.out.println("amount" + amount); } > void printOwing(double amount) { printBanner(); printDetails(amount); } void printDetails (double amount) { System.out.println ("name:" + _name); System.out.println ("amount" + amount); } Extraction de méthodes Lextraction de méthodes est le réfactoring le plus utilisé. Si une méthode est trop longue ou si nous avons besoins de commentaires pour comprendre cette méthode alors il faut en extraire plusieurs méthodes, fragmenter le code.

Responsabilité des objets quelques exemples 11 Rassembler des classes Cest le contraire de lextraction de classes Déplacer des méthodes Dune classe à une autre Extraction de classes Fragmenter le code dune cleasse en plusieurs Cacher la délégation Créer une méthode pour cacher la délégation

12 Rassembler des classes Il faut rassembler des classes si une de ces classes est devenue trop petite, cest souvent le résultat de réfactoring qui déplace les responsabilitées. On rassemble donc deux classes qui ont la même responsabilité.

Organisation des données quelques exemples 13 Encapsuler les champs Ne pas donner accés aux champs Remplacer les nombres magiques en constantes Ajouter des constantes Remplacer les tableaux par des objets Donner du sens à son code Encapsuler les collections Ne pas donner accés aux collections

14 Encapsuler les collections Une classe peut contenir une collection, celle-ci peut être un tableau, un vecteur, un set ou encore une liste. Les collections utilisent un protocole différent selon le type de collection. Le getter ne doit pas renvoyer l'objet de collection, car cela permet aux clients de manipuler le contenu de la collection sans que la classe sache ce qui se passe. Il révèle aussi les structures de données internes de l'objet.

Simplification des conditions quelques exemples 15 Supprimer duplication de code Déplacer les instructions Introduire des objets null Ajouter des objets null pour simplifier les confitions Décomposer les conditions Fragmenter le code dune condition en plusieurs Consolider les expressions conditionnelles Renommer les variables pour quelles soient compréhenisibles delles même

16 double disabilityAmount() { if (_seniority < 2) return 0; if (_monthsDisabled > 12) return 0; if (_isPartTime) return 0; // compute the disability amount > Consolider les expressions conditionnelles Parfois, vous voyez une série de contrôles conditionnelles dans lequel chaque condition est différente mais l'action qui en résulte est la même. Lorsque vous voyez cela, vous devez utiliser les opérateurs AND et OR pour les regrouper en une seule expression conditionnelle avec un résultat unique. double disabilityAmount() { if (isNotEligableForDisability()) return 0; // compute the disability amount

Simplification appels des méthodes quelques exemples 17 Introduire des objets paramétrés Réduire le nombre de paramètres Ajouter/Supprimer des paramètres Selon les besoins de votre méthode Renommer les méthodes Pour que lon sache ce quelles font réellement sans lire son contenue Cacher des méthodes Cacher pour plus de sécurité

18 Introduction dobjets paramétrés Souvent, vous voyez un groupe de paramètres qui tendent à être passé ensemble. Plusieurs méthodes peuvent utiliser ce groupe, que ce soit sur dans une ou plusieurs classes. Un tel groupe peut être remplacé par un objet qui porte l'ensemble de ces données. Ce remaniement est utile car il permet de réduire la taille des listes de paramètres.

Utilisation de la généralisation quelques exemples 19 Remplacer lhéritage par la délégation Quand les classes se ressebmblent Remplacer la déléguation par lhéritage Lorsquil y a trop de méthodes différentes Extraction une superclasse Eviter la duplication de code Réduire la hiérarchie éviter une hiérarchie trop compliquée

20 Remplacer la délégation par lhéritage Lorsque vous utilisez toutes les méthodes du délégué on peut utiliser lhéritage assez facilement. Attention toute fois, si le délégué est partagé par plusieurs objets, il est alors impossible de passer par lhéritage.

Les outils du refactoring sous eclipse 21 Eclipse permet dautomaiser facilement un grand nombre de refactoring. Parfois, vous les utilisez sans même le savoir. Voici une liste non exhaustive des quelques possibilités offertes par eclipse. MOVE déplace un élément sélectionné. par exemple dun package à un autre EXTRACT METHOD crée une nouvelle méthode encapsulant les éléments sélectionnés RENAME renomme lélément sélectionné INLINE fonction inverse de extract local variable EXTRACT LOCAL VARIABLE crée une nouvelle variable assignée à lexpression sélectionnée ENCAPSULATE FIELD templace toutes les références à un champ de classe, par des méthodes get et set de ce champ INTRODUCE FACTORY crée une nouvelle factory, en générant pour un constructeur donné la méthode statique INTRODUCE PARAMETER remplace une expression par une référence à un nouveau paramètre EXTRACT CONSTANT modifie lexpression sélectionnée en constante static final

La TDD introduction 22 Ajouter un nouveau test Compiler le nouveau test Refactorer le code Constater le succés du test Ajouter le code correspondant Constater léchec du test

1 sourcemaking.com/refactoring 2 docwiki.embarcadero.com/RADStudio/XE5/fr/Présentation_du_refactoring 3 journaldunet.com/developpeur/tutoriel/jav/ java-eclipse-4-refactoring.shtml referentiel.institut-agile.fr/refactoring.html 6 fr.slideshare.net/neuros/tdd-test-driven-developement-et-refactoring Références internet 23

Des questions? Nhésitez pas

Pour votre attention Merci