Conception et programmation orientées objet, rappels Sébastien Jean IUT de Valence Département Informatique v2.2, 4 septembre 2016 Introduction Objectifs de ce cours Revoir les notions fondamentales objets . . . Classe, objet, abstraction, . . . . . . à travers le prisme de la COO (UML) et de la POO (Java) source : www.bonkersworld.net/object-world Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 1 / 24 Rappels Classes/objets Notion de classe Une classe encapsule des données (attributs) et des traitements (méthodes) communs à un ensemble d’objets, et définit un type Notation UML Code Java public class Americaine { } Les objets sont appelés instances de classe Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 2 / 24 Rappels Classes/objets Attributs Les attributs sont des « données » élémentaires L’ensemble des attributs constitue un état Les attributs sont typés Type primitif ou défini par une classe Leurs valeurs peuvent être uniques ou multiples (collections) Les attributs peuvent être masqués ou non à l’extérieur de la classe Les attributs peuvent être : Partagés entre toutes les instances → attributs de classe Propres à chaque instance → attributs d’instance Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 3 / 24 Rappels Classes/objets Exemple La couleur d’un pixel est caractérisée par des niveaux RVB Notation UML Code Java public class { public int public int public int } Sébastien Jean (IUT Valence) M3105, introduction Color red ; green ; blue ; v2.2, 4 septembre 2016 4 / 24 Rappels Classes/objets Association Dépendance forte entre classes Relation de type « utilise un » ou « a un » Nommage, cardinalité, navigabilité Notation UML Code Java public class Shape { public int opacityLevel ; public Color color ; } Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 5 / 24 Rappels Classes/objets Attributs statiques Notation UML Code Java public class System { public static PrintStream out ; } N.B. : l’attribut out est aussi qualifié avec le mot clé final Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 6 / 24 Rappels Classes/objets Aggregation Association forte Relation de type « possède » Partage possible Notation UML Code Java public class Canvas { public List < Shape > shapeList ; } Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 7 / 24 Rappels Classes/objets Composition Aggrégation forte Le « contenu » disparait avec le « contenant » Notation UML Code Java public class Canvas { public List < Shape > shapeList ; } Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 8 / 24 Rappels Classes/objets Méthodes Paramètres et valeur de retour typés void dénote un type inconnu Code Java public class Color { private int r ; ... public int getR () { return this . r ;} public void setR ( int r ) { this . r = r ;} ... } Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 9 / 24 Rappels Classes/objets Méthodes Méthodes statiques Code Java public class System { public static PrintStream out ; ... public static void setOut ( PrintStream out ) {...} ... } Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 10 / 24 Rappels Classes/objets Objet Un objet est une instance de classe, il n’existe qu’à l’exécution La classe définit le type d’un objet, ainsi que l’ensemble des traitements associés Certains de ces traitements peuvent être masqués à l’extérieur Un objet possède un état interne, constitué de l’ensemble des valeurs des attributs d’instance cyan : Color r=0 v = 255 b = 255 L’état n’évolue idéalement qu’à travers des appels de méthodes Un objet possède une identité propre et unique En Java, cette identité s’appelle référence Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 11 / 24 Rappels Classes/objets Constructeur La création d’un objet (instanciation) passe par la définition et l’invocation d’un constructeur Code Java public class Color { ... public Color ( int r , int v , int b ) { this . r = r ; this . v = v ; this . b = b ; } ... } Code Java Color cyan Sébastien Jean (IUT Valence) = new Color (0 ,255 ,255) ; M3105, introduction v2.2, 4 septembre 2016 12 / 24 Rappels Concepts objets avancés Héritage, polymorphisme Réutilisation par raffinement de concept Ajout d’attribut(s) Ajout de méthode(s) Redéfinition de méthode(s) Le polymorphisme est la capacité d’un objet a pouvoir être vu à travers plusieurs types Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 13 / 24 Rappels Concepts objets avancés Héritage, polymorphisme Code Java public class Loy al ty Ban kA cc oun t extends BankAccount { private int points ; public Loyalt yBa nk Ac cou nt ( int initialBalance ) { super ( initialBalance ) ; this . points = 0; } ... public void deposit ( int amount ) { super . deposit ( amount ) ; ... } } Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 14 / 24 Rappels Concepts objets avancés Interfaces, classes abstraites Exemple (à ne pas forcément suivre . . . ) Dépendance vis-à-vis de l’implémentation L’instance de MessageReceiver possède un attribut de type SystemOutLogger dont la valeur est une référence vers une instance de SystemOutLogger Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 15 / 24 Rappels Concepts objets avancés Interfaces, classes abstraites (suite) Une interface est un type purement abstrait, et ne définit (sauf depuis Java 8) que des signatures de méthodes Les interfaces sont implémentées par des classes (devant définir l’implémentation de toutes les méthodes) qui peuvent se substituer Indépendance vis-à-vis de l’implémentation L’instance de MessageReceiver possède un attribut de type abstrait Logger dont la valeur peut-être une référence vers une instance de SystemOutLogger, NullLogger, FileLogger, . . . Référence passée en général en paramètre du constructeur Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 16 / 24 Rappels Concepts objets avancés Interfaces, classes abstraites (fin) Une classe abstraite permet de factoriser les attributs et méthodes communes à toutes les sous-classes Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 17 / 24 Rappels Concepts objets avancés Notion de framework Collection de classes (concrètes/abstraites) et d’interfaces liées permettant la conception de sous-systèmes Exemple : JDBC API (Application Provider Interface) : ensemble de points d’entrées pour la construction d’applications SPI (Service Provider Interface) : ensemble de points d’entrées pour l’extension du framework Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 18 / 24 Production de logiciel Qualité Du logiciel qui marche ou du logiciel qui dure ? Ecrire du logiciel qui marche est à la portée du premier venu ;-) Mais il n’y a pas de pérennité sans qualité ! 1983 Sébastien Jean (IUT Valence) 2016 M3105, introduction v2.2, 4 septembre 2016 19 / 24 Production de logiciel Qualité Qu’est ce qu’un code de qualité ? Conforme aux exigences et exempt de bug Lisible et facile à comprendre, facile à utiliser Aisément maintenable et réutilisable Efficace Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 20 / 24 Production de logiciel Qualité Entropie logicielle et dette technique Entropie logicielle (Lehman, 1980) "As an evolving program is continually changed, its complexity, reflecting deteriorating structure, increases unless work is done to maintain or reduce it." Dette technique (Cunningham, 1992) "Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite... The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt. Entire engineering organizations can be brought to a stand-still under the debt load of an unconsolidated implementation, objectoriented or otherwise." Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 21 / 24 Production de logiciel Outillage Les outils indispensables du développeur moderne Un IDE qui se respecte Java : Eclipse, IDEA IntelliJ, NetBeans Un atelier de génie logiciel efficace UML : Modelio, Visual Paradigm, . . . Un framework de test unitaires Java : JUnit Un outil d’automatisation de production de projets Ant, Maven, . . . Un gestionnaire de versions SVN, Git, Mercurial Une plateforme d’intégration continue Jenkins, . . . ... Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 22 / 24 Production de logiciel Agilité Méthodes agiles ? Agilité → philosophie de développement de projets (2000) Développement iteratif, incrémental et adaptatif Au coeur de plusieurs méthodologies : RAD, XP, SCRUM Méthodologies associées : Test-Driven Development (TDD) Behavior-Driven Development (BDD) Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 23 / 24 Production de logiciel Agilité Fin ! Sébastien Jean (IUT Valence) M3105, introduction v2.2, 4 septembre 2016 24 / 24