Au programme Conception Orientée Objet Jean-Christophe Routier Licence mention Informatique Université Lille 1 Présentation L UE COO est le prolongement immédiat de l UE POO du S4 informatique. cf. http://portail.fil.univ-lille1.fr/portail/ls4/poo après la programmation... la conception Comment utiliser les concepts objets pour construire des logiciels. Université Lille 1 - Licence Informatique Conception Orientée Objet 1 Université Lille 1 - Licence Informatique Conception Orientée Objet 2 Fonctionnement équipe pédagogique Damien Cassou, Francesco De Comité, Guillaume Dubuisson, Samuel Hym, Martin Monperrus, Yves Roos, Jean-Christophe Routier, 1h30 de Cours (8 semaines), 2h TD, 1h30 TP par semaine préparer les TD, être acteur! évaluation : TP à rendre régulièrement TP+sup(DS1+2 DS2,3 DS2) première session : 4 seconde session : note TP conservée, TP+3 DS3 4 Université Lille 1 - Licence Informatique Conception Orientée Objet 3 A l issue de ce module vous devriez... maîtriser les concepts de la programmation objet : connaître les différentes manières de mettre en œuvre le polymorphisme : les interfaces, l héritage (les classes abstraites) ; connaître et comprendre un mécanisme de «lookup» de méthode ; connaître quelques principes de conception objet et savoir les mettre en oeuvre ; être en mesure de concevoir une application avec une approche objet : savoir faire une analyse objet d un problème complexe et faire les choix de conception appropriés en utilisant de manière pertinente les concepts et principes des langages à objets ; connaître les principaux patterns de conception («design patterns»), être en mesure d identifier des situations où ils s appliquent et les mettre en œuvre ; adopter une méthodologie de conception rigoureuse : documenter un programme, écrire et utiliser des tests ; Université Lille 1 - Licence Informatique Conception Orientée Objet 4
Pré-requis objet classes et objets instances, constructeurs, méthodes, attributs UML comme notation : diagrammes de classes modélisation objet d un problème analyse d un problème simple, identification des classes et leur conception, polymorphisme des objets les interfaces, inclusion de type, généralisation/spécialisation (upcast/downcast) Principe Ouvert-Fermé (Open Close Principle OCP) Université Lille 1 - Licence Informatique Conception Orientée Objet 5 Pré-requis java class, this, private, public tostring, equals/==, compareto/interface Comparable static, enum interface exceptions : capture et levée try... catch, throws/throw java.util : Collection<E>, Iterator, Iterable List/ArrayList/LinkedList, Set, Map/HashMap, hashcode package, import javac, java, jar, javadoc, classpath, tests Le TP4 de POO à (re)faire (voir semainier) Université Lille 1 - Licence Informatique Conception Orientée Objet 6 Exemple : épreuves sportives. différentes épreuves : 4 100-4 nages, perche, slalom géant, marathon, semi-marathon, plongeon, tremplin, disque, etc. elles appartiennent à des disciplines : athlétisme : perche, marathon, semi-marathon, disque natation : 4 100-4 nages, plongeon ski : slalom géant, tremplin elles correspondent à des épreuves de différentes natures : course : 4 100-4 nages, slalom géant, marathon, semi-marathon saut : perche, tremplin lancer : disque Fonctionnalités/besoins : une épreuve olympique fournit son record olympique (un temps, une distance ou des points) un marathon fournit la ville où il a lieu une course fournit sa distance et son record (un temps) que l on doit pouvoir modifier un lancer fournit son record (une distance) les jeux olymiques sont composés d une liste d épreuves olympiques un décathlon n est composé que d épreuves d athlétisme un record fournit une version affichable de sa valeur elles sont olympiques (ex : marathon) ou non (ex : semi-marathon) Université Lille 1 - Licence Informatique Conception Orientée Objet 7 Université Lille 1 - Licence Informatique Conception Orientée Objet 8
Exercice Proposez un schéma UML faisant apparaître les types indiqués et permettant de respecter les contraintes. Université Lille 1 - Licence Informatique Conception Orientée Objet 9 Université Lille 1 - Licence Informatique Conception Orientée Objet 10 Exercice Proposez un diagramme UML pour la classe Marathon. Comment gérer les records? Polymorphisme avoir plusieurs points de vue sur un même objet pouvoir utiliser un objet dans plusieurs contextes Polymorphisme = «plusieurs formes» Objet plusieurs types Distinguer classe de l objet et type d une référence sur l objet. TypeRef ref = new UneClasse(); TypeRef et UneClasse doivent être compatibles mais pas nécessairement identiques. Université Lille 1 - Licence Informatique Conception Orientée Objet 11 Université Lille 1 - Licence Informatique Conception Orientée Objet 12
C est quoi «compatible»? T ref = new Marathon(...) Quels sont les types possibles pour T? Un objet est du type de sa classe et de toutes les interfaces implémentées par sa classe. une instance de Marathon est à la fois de type : Marathon, Athlétisme, Course, Olympique (et Object) Upcast et Downcast UpCast C est quoi? Changer vers une classe moins spécifique (toujours possible vers Object) : généralisation, opération sûre. Marathon m = new Marathon(); // Un exemple d upcast? légal? illégal? Course c = m; // UPCAST Natation n = m; // illégal : détecté à la compilation DownCast C est quoi? Changer vers une classe plus spécifique : spécialisation, opération à risque. Marathon m = new Marathon(); Course c = m; // Un exemple de downcast? légal? illégal? Marathon m2 = (Marathon) c; // DOWNCAST SlalomGeant sg = (SlalomGeant) c; // DOWNCAST illégal compile! exception Université Lille 1 - Licence Informatique Conception Orientée Objet 13 Université Lille 1 - Licence Informatique Conception Orientée Objet 14 JeuxOlympiques - epreuves : List<Olympique>... + affichertouslesrecords() s Donnez la signature d une méthode permettant d ajouter une épreuve. Donnez le code de la méthode affichertouslesrecords. Late-binding Edition de liens tardive (late-binding) Le type de la référence détermine les envois de message autorisés compilation La classe de l objet détermine le traitement réalisé. exécution public void addepreuve(olympique e) { this.epreuves.add(e); Comment/pourquoi ça marche? public void affichertouslesrecords() { for(olympique e : this.epreuves) { System.out.println(e.recOlymp()); debugger Université Lille 1 - Licence Informatique Conception Orientée Objet 15 Université Lille 1 - Licence Informatique Conception Orientée Objet 16
Principe Ouvert Fermé Au programme On ajoute l épreuve 110m haies. Que faut-il changer? (dans JeuxOlympiques par exemple) Pourquoi? Conclusion? OCP Un code doit être ouvert à l extension et fermé à la modification. On doit pouvoir ajouter des éléments sans perturber l existant. héritage, un autre outil pour le polymorphisme extends, lookup, super, classes abstraites conception, comment bien exploiter les concepts objets principes de conception patrons de conception (design patterns) à travers des exemples et au passage types génériques classes internes interfaces graphiques (swing) : les principes Université Lille 1 - Licence Informatique Conception Orientée Objet 17 Université Lille 1 - Licence Informatique Conception Orientée Objet 18