MI3/GL Cours de Génie Logiciel Programmation Orientée Objet (Avancée)



Documents pareils
Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Patrons de Conception (Design Patterns)

ACTIVITÉ DE PROGRAMMATION

Mise en oeuvre de tests unitaires dans un contexte de programmation extrème répartie

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

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

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)

Le développement d'applications informatiques

Analyse,, Conception Objet

Gestion de projet Agile. STS IRIS Module «Gérer et organiser un projet informatique»

Génie logiciel (Un aperçu)

Ne renvoyez pas vos architectes! Utilisez-les avec agilité

Efficient Object Versioning for Object- Oriented Languages From Model to Language Integration

Bibliographie sommaire pour le programme de B. Sc. (informatique de gestion), concentration en génie logiciel

AGILE Historique et évolution

TP1 : Initiation à Java et Eclipse

Bases Java - Eclipse / Netbeans

Environnements de développement (intégrés)

Bases de données et environnements distribués Chapitre I : Architecture logicielle technologies de developpement en environnement

Design patterns. Design patterns - définition. Design patterns - avantages

Introduction au génie logiciel

Introduction à l extreme Programming et au développement agile

Les méthodes Agile. Implication du client Développement itératif et incrémental

Composants génériques de calcul scientifique

Les méthodes Agiles Introduction. Intervenant : Tremeur Balbous tremeur@agilegardener.com 04/09/2008

CREATION WEB DYNAMIQUE

Agile Maroc 24 Novembre Méthodes agiles. Thierry Cros. Agile Maroc 24 novembre 2010

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

Le cadre des Web Services Partie 1 : Introduction

Alignement avec les métiers par le test fonctionnel et d acceptation en projets agiles

Projet de programmation (IK3) : TP n 1 Correction

Didier Donsez

Les BRMS Business Rules Management System. Groupe GENITECH

Bases de données relationnelles : Introduction

Architectures Ouvertes pour l Adaptation des Logiciels

Génie Logiciel Avancé Cours 1 Introduction

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

Master MIDO 2ème année. Spécification et Conception en UML Maude Manouvrier

Cours Base de données relationnelles. M. Boughanem, IUP STRI

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

Algorithmes : conception et réalisation MQT 63834

as Architecture des Systèmes d Information

IT203 : Systèmes de gestion de bases de données. A. Zemmari zemmari@labri.fr

Corrigés des premiers exercices sur les classes

LOG4430 : Architecture logicielle et conception avancée

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

UML : Unified Modeling Language

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

OpenPaaS Le réseau social d'entreprise

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

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

TD3: tableaux avancées, première classe et chaînes

Développement ebusiness

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

2. Comprendre les définitions de classes

Agile et CMMi. L agilité et la norme. Jean-Pierre Vickoff

Chapitre 10. Les interfaces Comparable et Comparator 1

Séance 1 Méthodologies du génie logiciel

Chapitre VI- La validation de la composition.

Utilisation d objets : String et ArrayList

Par Laurent DESECHALLIERS. Mastère Spécialisé en Management de Projets en Milieu Industriel. CESI de Rouen Promotion 2002/2003.

énie avec Scrum, Lean, extreme Programming

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Architecture Orientée Service, JSON et API REST

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Plan. Tests. 1. Introduction. 1. Introduction

Génie logiciel avec UML. Notions sur le langage UML adapté pour les cours du programme Techniques de l informatique

Besoins utilisateurs. Quelle démarche pour passer des besoins au code? Code. chapitre1 UNIFIED MODELING LANGUAGE. package LogiqueMetier.

Introduction au langage C

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

Langage Java. Classe de première SI

Introduction Les processus traditionnels extreme Programming Conclusion. extreme Programming. vers plus d agilité. F. Miller francois.miller@inpg.

Les Bases de Données et l Objet Introduction

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Ingénierie et gestion des connaissances

Générer du code à partir d une description de haut niveau

DES SYSTÈMES D INFORMATION

Programmation Objet Java Correction

Présentation des experts

Vérifica(on et Valida(on de Business Process. Ang Chen et Levi Lúcio

Règles d engagement. Présentation Diapositives Bibliographie Questions Les vertus de la marche

UE C avancé cours 1: introduction et révisions

Cours Composant 2. Qualité logicielle et spécications algébriques

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Stage Ingénieur en développement logiciel/modélisation 3D

Flux de données Lecture/Ecriture Fichiers

Développement Logiciel

Introduction à la modélisation

Cours 1: Java et les objets

Programmation MacOSX / ios

Introduction au Génie Logiciel

Dafoe Présentation de la plate-forme UIMA

Eclipse Process Framework et Telelogic Harmony/ITSW

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Méthodologies Orientées-Objet!

Programmation en Java IUT GEII (MC-II1) 1

Modélisation Conceptuelle et Ingénierie des Systèmes d Information

Analyse,, Conception des Systèmes Informatiques

Conventions d écriture et outils de mise au point

Transcription:

MI3/GL Cours de Génie Logiciel Programmation Orientée Objet (Avancée) Daniel Le Berre dans une classe CRIL-CNRS FRE 2499, Université d Artois, Lens, FRANCE {leberre@cril.univ-artois.fr 2 décembre 2004 MI3GL 2004/2005 1 MI3GL 2004/2005 2 : définition dans une classe 1 DOD = Department of Defense http://www.linux-france.org/article/these/cathedrale-bazar/ cathedrale-bazar_monoblock.html http://opensource.org/halloween/ http://www.linux-france.org/article/these/magic-cauldron/ magic-cauldron-fr_monoblock.html MI3GL 2004/2005 3 Changer la structure du code sans changer son comportement Utilisation de tests unitaires pour le vérifier Utilisation de mauvaises odeurs dans le code pour détecter les parties à changer Popularisé par Martin Fowler [4] Beaucoup d outils de développement (dont Eclipse) facilitent le refactoring. Plus d infos sur http://www.refactoring.com MI3GL 2004/2005 4 Extract Method 1/2 Extract Method 2/2 Un ensemble d instructions peuvent être groupées. Remplacer ces instructions par une méthode dont le nom explique son rôle. void printowing () { printbanner (); //print details System. out. println ( name: + name ); System. out. println ( amount + getoutstanding ()); void printowing () { printbanner (); printdetails (getoutstanding ()); void printdetails (double outstanding ) { System. out. println ( name: + name ); System. out. println ( amount + outstanding ); MI3GL 2004/2005 5 MI3GL 2004/2005 6 Rename Method Rename Method Le nom d une méthode ne révèle pas son rôle. Le nom d une méthode ne révèle pas son rôle. Changer le nom de la méthode. Changer le nom de la méthode. MI3GL 2004/2005 7 MI3GL 2004/2005 8

Introduce Assertion 1/2 Introduce Assertion 2/2 Unepartieducodefaitdessuppositionsàproposdel état du programme. Rendre ces suppositions explicites en utilisant une assertion. double getexpenselimit () { // should have either expense limit or // a primary project return ( expenselimit!= NULL EXPENSE )? expenselimit : primaryproject. getmemberexpenselimit (); double getexpenselimit () { assert ( expenselimit!= NULL EXPENSE primaryproject!= null ); return ( expenselimit!= NULL EXPENSE )? expenselimit : primaryproject. getmemberexpenselimit (); MI3GL 2004/2005 9 MI3GL 2004/2005 10 Replace Temp with query 1/2 Replace Temp with query 2/2 Le code utilise une variable temporaire pour connaître le résultat d une expression. Remplacer l expression par une méthode. Remplacer toutes les références à la variable temporaire par la méthode. La nouvelle méthode peut être utilisée dans d autres méthodes. double baseprice = quantity itemprice ; if ( baseprice > 1000) return baseprice 0.95; else return baseprice 0.98; if ( baseprice() > 1000) return baseprice () 0.95; else return baseprice () 0.98;... double baseprice () { return quantity itemprice ; MI3GL 2004/2005 11 MI3GL 2004/2005 12 Introduce Parameter Object Introduce Parameter Object Un groupe de paramètres vont naturellement ensemble. Un groupe de paramètres vont naturellement ensemble. Les remplacer par un objet. Les remplacer par un objet. MI3GL 2004/2005 13 MI3GL 2004/2005 14 Preserve whole Object Plusieurs valeurs sont demandées àunobjetetpassées comme paramètres d une méthode. Passer directement l objet en paramètre. int low = daystemprange().getlow(); int high = daystemprange().gethigh(); withinplan = plan. withinrange(low, high ); withinplan = plan.withinrange(daystemprange()); Replace Method with Method Object 1/2 Il existe une longue méthode qui utilise des variables locales telles que l utilisation de Extract Method est impossible. Déplacer la méthode dans son propre objet de telle sorte que les variables locales deviennent ses attributs. Il est alors possible de décomposer la méthode en plusieurs méthodes sur le même objet. class Order... double price () { double primarybaseprice ; double secondarybaseprice ; double tertiarybaseprice ; // long computation ;... MI3GL 2004/2005 15 MI3GL 2004/2005 16

Replace Method with Method Object 2/2 Replace Parameter with Method Un objet appelle une méthode, et passe le résultat en paramètre d une autre méthode. L autre méthode peut aussi appeler cette méthode. Enlever le paramètre et laisser le seconde méthode appeler la première. int baseprice = quantity itemprice ; discountlevel = getdiscountlevel (); double finalprice = discountedprice ( baseprice, discountlevel ); int baseprice = quantity itemprice ; double finalprice = discountedprice ( baseprice ); MI3GL 2004/2005 17 MI3GL 2004/2005 18 Pull Up Field Pull Up Field Deux sous classes ont le même attribut. Deux sous classes ont le même attribut. Déplacer l attribut dans la superclasse. Déplacer l attribut dans la superclasse. MI3GL 2004/2005 19 MI3GL 2004/2005 20 Form template method 1/3 Form template method 2/3 Il existe deux méthodes dans des sous classes qui effectuent des tâches similaires dans le même ordre, mais ces tâches sont différentes. Remplacer ces tâches par des méthodes ayant la même signature, telles que les méthodes originales deviennent identiques. Ensuite, vous pouvez les faire remonter. MI3GL 2004/2005 21 MI3GL 2004/2005 22 Form template method 3/3 MI3GL 2004/2005 23 Substitute Algorithm 1/2 Vous voulez remplacer un algorithme par un autre. Remplacez le corps de la méthode par le nouvel algorithme. String foundperson( String [] people){ for ( int i = 0; i < people. length ; i++) { if ( people [ i ]. equals ( Don )){ return Don ; if ( people [ i ]. equals ( John )){ return John ; if ( people [ i ]. equals ( Kent )){ return Kent ; return ; MI3GL 2004/2005 24

Substitute Algorithm 2/2 Extract class String foundperson( String [] people){ List candidates = Arrays. aslist ( new String [] { Don, John, Kent ); for ( int i=0; i<people. length ; i++) if ( candidates. contains(people [ i ])) return people [ i ]; return ; Uneclassefaitletravailquidevraitêtre fait par deux. Declarer une nouvelle classe et déplacer les membres appropriés vers la nouvelle classe. MI3GL 2004/2005 25 MI3GL 2004/2005 26 Extract class Extract subclass Uneclassefaitletravailquidevraitêtre fait par deux. Declarer une nouvelle classe et déplacer les membres appropriés vers la nouvelle classe. Une classe a des services utilisés uniquement par certaines instances. Créer une sous classe pour ces services. MI3GL 2004/2005 27 MI3GL 2004/2005 28 Extract subclass Une classe a des services utilisés uniquement par certaines instances. Créer une sous classe pour ces services. Collapse Hierarchy Une classe et une sous classe ne sont pas très différentes. Les fusionner MI3GL 2004/2005 29 MI3GL 2004/2005 30 Collapse Hierarchy Une classe et une sous classe ne sont pas très différentes. Inline class Les fusionner Uneclassenefaitpasgrandchose. Déplacer toutes ses responsabilités dans une autre classe et l enlever. MI3GL 2004/2005 31 MI3GL 2004/2005 32

Inline class Remove parameter Uneclassenefaitpasgrandchose. Déplacer toutes ses responsabilités dans une autre classe et l enlever. Un paramètre n est plus utilisé dans une méthode. Enlever ce paramètre. MI3GL 2004/2005 33 MI3GL 2004/2005 34 Remove parameter Un paramètre n est plus utilisé dans une méthode. Enlever ce paramètre. MI3GL 2004/2005 35 Kent Beck. extreme Programming explained, Embrace Change. Addison Wesley, 2000. B. Boehm. Software Engineering Project Management, chapter A spiral model of software development and enhancement. 1987. Bernd Bruegge and Allen H. Dutoit. Object Oriented Software Engineering: Conquering Complex and Changing Systems. Prentice Hall, 2000. ISBN: 0-13-017452-1. : Improving the Design of Existing Code. Object Technology Series. Addison Wesley, 2000. Indispensable! MI3GL 2004/2005 36 Patterns of Enterprise Application Architecture. The Addison-Wesley Signature Series. Addison Wesley, 2003. UML distilled: A brief Guide to the Standard Object Modelling Language. Object Technology series. Addison Wesley, 3rd edition, 2004. Indispensable! Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns, Elements of Reusable Object-Oriented Software. Addison Wesley, 1995. Aposséder absolument! Marie-Claude Gaudel, Bruno Marre, Françoise Schienger, and Gilles Bernot. MI3GL 2004/2005 37 Précis de Génie Logiciel. Enseignement de l Informatique. Masson, 1996. ISBN : 2-225-85189-1. Andrew Hunt and David Thomas. The Pragmatic Programmer. Addison Wesley, 2000. Un livre interessant (mais en anglais) pour tous les programmeurs. Robert C. Martin. Agile Software Development: Principles, Patterns and Practices. Prentice Hall, 2003. Utile. Robert C. Martin. UML for Java Programmers. Prentice Hall, 2003. MI3GL 2004/2005 38 Bertrand Meyer. Conception et programmation orientées objet. Eyrolles, 1997. Indispensable pour tout programmeur dans un langage objet, même si les exemples donnés sont plutôt en Eiffel. P. G. Neumann. Computer-Related Risks. Reading. Addison-Wesley, MA, 1995. W. W. Royse. Managing the development of large software systems. In IEEE Computer Society, editor, Tutorial: Software Engineering Project Management, pages 118 127, Washington, DC, 1970. Jack Shirazi. Java Performance Tuning, 2nd edition. O Reilly, 2003. MI3GL 2004/2005 39