Objectifs. Conception et programmation objet avancées Introduction. Planning du cours - 2h par séance TD+TP



Documents pareils
Analyse,, Conception des Systèmes Informatiques

Introduction au génie logiciel

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

IFT2255 : Génie logiciel

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

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

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

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

UML (Diagramme de classes) Unified Modeling Language

UML. Diagrammes de classes (suite) Delphine Longuet.

Patrons de Conception (Design Patterns)

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

Programmer en JAVA. par Tama

Programmation en Java IUT GEII (MC-II1) 1

Chapitre I : le langage UML et le processus unifié

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Plateforme de capture et d analyse de sites Web AspirWeb

3. UML - Unified Modeling Language Diagrammes statiques

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

TP1 : Initiation à Java et Eclipse

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

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

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

Cours 1: Java et les objets

UML et les Bases de Données

Chapitre VI- La validation de la composition.

Le génie logiciel. maintenance de logiciels.

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Université de Bangui. Modélisons en UML

Initiation à JAVA et à la programmation objet.

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

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

TP3 Intégration de pratiques agiles. 1. User Stories (1) Scénario d intégration agile. En direct-live du château

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

UE Programmation Impérative Licence 2ème Année

Processus d Informatisation

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

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Chapitre 2. Classes et objets

Auto-évaluation Programmation en Java

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

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

Évaluation et implémentation des langages

Les frameworks au coeur des applications web

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

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

Traduction des Langages : Le Compilateur Micro Java

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)

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

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

CQP Développeur Nouvelles Technologies (DNT)

Projet Active Object

Application web de gestion de comptes en banques

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

as Architecture des Systèmes d Information

Diagrammes de Package, de déploiement et de composants UML

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Présentation générale de la méthode orientée objet : O.M.T. (Rumbaugh & al.)

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

Rapport de Synthèse. Création d un Générateur de modèle PADL pour le langage C++ Sébastien Colladon

Conception des systèmes répartis

Cycle de vie du logiciel. Unified Modeling Language UML. UML: définition. Développement Logiciel. Salima Hassas. Unified Modeling Language

Rational Unified Process

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

TD/TP PAC - Programmation n 3

GOL502 Industries de services

Introduction à la modélisation

Premiers Pas en Programmation Objet : les Classes et les Objets

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Bases Java - Eclipse / Netbeans

Eclipse Process Framework et Telelogic Harmony/ITSW

Architecture Orientée Objet Pour l Ingénierie des SIP application à l Entreprise SAFCER

Cours en ligne Développement Java pour le web

Plan du cours. Historique du langage Nouveautés de Java 7

Technologie Web. Conception de sites Web. Alexandre Pauchet. INSA Rouen - Département ASI. INSA - ASI TechnoWeb : Rappels UML 1/21

Programmation Orientée Objet

Diagramme de classes

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

F. Barthélemy. 17 mai 2005

Programmation par composants (1/3) Programmation par composants (2/3)

ACTIVITÉ DE PROGRAMMATION

Corrigés des premiers exercices sur les classes

Remote Method Invocation (RMI)

Programmation Objet Java Correction

Méthodologies Orientées-Objet!

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

Java c est quoi? Java pourquoi?

TD/TP PAC - Programmation n 3

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Introduction au langage C

Formation : Modélisation avec UML 2.0 et Mise en pratique

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Gestion Projet. Cours 3. Le cycle de vie

UML 2.0. (IUT, département informatique, 1 re année) Laurent AUDIBERT

UML Diagramme de communication (communication diagram) Emmanuel Pichon 2013

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Méthodes de Conception Orientés Objet (MCOO) SOMMAIRE

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Génie logiciel (Un aperçu)

Transcription:

Objectifs Conception et programmation objet avancées Introduction Petru Valicov petru.valicov@univ-amu.fr 2015-2016 Approfondir les notions de programmation objet (bonnes pratiques, patrons de conception) Apprendre à mener un projet de la phase de conception, jusqu au produit final Utilisation d une approche méthodologique Apprendre à programmer proprement Mise en œuvre des acquis de la programmation objet (Java) Sensibilisation aux tests Planning du cours - 2h par séance TD+TP Sept séances de 4h en salle machine. Trois enseignants interviennent dans les séances : 1. Génie logiciel + rappels UML et notions d objet (1 cours) 2. Java + les bonnes pratiques de la POA (2 cours) 3. Patrons de conceptions (3 cours) 4. Tests et bonus andre.abrame@univ-amu.fr - TD/TP sophie.nabitz@univ-avignon.fr - TD/TP petru.valicov@univ-amu.fr - CM/TD/TP En TD et TP c est VOUS qui travaillez! L enseignant est là pour vous guider. Préparez vos questions. Retour de l an dernier : Cours très intéressant... mais vraiment très dur

Contrôle de connaissances Les outils Contrôle Continu (Projet) - par équipe de 4 (les étudiants doivent être du même groupe) - les notes seront individuelles - but : travailler en équipe, respecter les principes de la CPOO - période de réalisation : mi-décembre à mi-janvier - soutenances le 20.01.2016 Examen (25.01.2016) : - Durée de 3 heures - questions de cours + exercices - tous les documents issus du cours autorisés - l utilisation intensive des documents est très déconseillée Langage de programmation : Java version 1.7 (certains exemples en C++ en cours) IDE : Eclipse ou autre (NetBeans, IntelliJ IDEA, etc.) Les tests : JUnit Versioning : Git, Svn,... GUI : à vous de voir (WindowBuilder?) La notation UML Un peu de biblio Génie logiciel - pourquoi? E. Gamma, R. Helm, R. Johnson et J. Vlissides. Design Patterns. Elements of Reusable Object Oriented Software Addison Wesley : 1995. E. Freeman, E. Robson, B. Bates, K. Sierra. Head First - Design Patterns O Reilly : 2004. R.C. Martin. Clean Code - A Handbook of Agile Software Craftmanship Prentice Hall : 2008. Pascal Roques. UML 2 par la pratique. Études de cas et exercices corrigés Eyrolles : 2009. La crise du logiciel (années 60-70) Les problèmes : - la fiabilité (les bugs ou cas non prévus) - manques de procédés de tests et vérification logicielle - le respect du cahier des charges du client (délais, coûts, spécifications etc.) - difficultés d évolution Les causes : - une communication difficile - complexité croissante des logiciels - tests trop souvent insuffisants - trop de modifications - trop d interrelations entre composants logiciels

Petits soucis Petits soucis récents La sonde Mariner qui devait effectuer un passage à 5 000 km de Vénus s est perdue à 5 000 000 km de ladite planète à cause d une erreur de programme Fortran : le point avait été remplacé par une virgule (format US des nombres). Premier lancement d Ariane 5 en 1996. La fusée a été détruite en vol à cause d une conversion d un flottant de 64 bits en un entier de 16 bits : le programme du gyroscope d une autre fusée n a pas été re-testé. Bug de la division du Pentium : problème d initialisation des valeurs... et chez Intel on était au courant!!! Heartbleed - problème dans la librairie OpenSSL (2014) Shellshock pour Bash Screwfix - tout à 34.99! (2014) StageFright - attaque par MMS (2015) Le Therac-25, un appareil d irradiation thérapeutique a provoqué la mort de 2 personnes, et l irradiation de 4 autres, à cause d une erreur logicielle. Génie logiciel - le code dans tout ça Génie logiciel Définition L ensemble des méthodes, des techniques et outils concourant à la production de logiciel, au-delà de la seule activité de programmation. La rapidité prime sur la qualité? Parmi vous il y en a qui y croient vraiment! L art et la manière de créer un logiciel. Dépasse le cadre purement technique. développe les bonnes pratiques de conception, d implémentation et de maintenance d un logiciel ; permet d obtenir une amélioration de la qualité du logiciel.

Les qualités d un logiciel/code bien écrit Processus de développement Beaucoup! Validité - correspond aux spécifications définies par le cahier des charges Fiabilité (robustesse) - gestion des conditions anormales Facilité d utilisation (ergonomie) Extensibilité Réutilisabilité (en tout ou en partie) Compatibilité Efficacité - utilisation optimale des ressources matérielles Portabilité - transfert sous différents environnement matériels et logiciels Intégrité - aptitude du logiciel à protéger son code et ses données contre des accès non autorisés Vérifiabilité - facilité de préparation des procédures de test Ce n est pas simplement l écriture du code!!! Analyse des besoins (conceptuelle) Modélisation (conception de l architecture) Implémentation Tests Mise en exploitation (utilisation) Maintenance et évolution Processus de développement - Modèle en cascade Modèle en cascade Étapes successives Facile à mettre en place Planification simple Pas de communication entre les étapes Impossible de savoir quand une étape est parfaite. Pas d adaptabilité - effet tunnel Solution limitée aux projets courts avec peu de participants.

Processus de développement - Modèle en V Modèle en V Une modification du modèle en cascade classique. Proposé comme solution pour le problème de réactivité du modèle en cascade Évite d énoncer une propriété qu il est impossible de vérifier objectivement après la réalisation Idéal quand les besoins sont bien connus, quand l analyse et la conception sont claires Souffre toujours du problème de la vérification trop tardive du bon fonctionnement du système En pratique, le risque d utilisation en cascade Comment séparer les étages? Processus de développement - Modèle en spirale Modèle en spirale - avantages Validation concrète et non sur documents Limitation du risque à chaque itération Client partenaire : retour rapide sur ses attentes Progressions : pas d explosion des besoins à l approche de la livraison : pas de n importe quoi pourvu que ça marche Flexibilité Planification renforcée Modèle objet : se prête parfaitement à une démarche incrémentale

Processus de développement - bilan Tests La phase essentielle consistant à vérifier et valider un système informatique ainsi que ses composantes. Processus créatif Utilisez les notations standards Conseils pratiques (design patterns) Décomposez le travail : diviser pour régner Les outils de tests peuvent être manuels ou automatisés. Les tests peuvent être classifiés selon leur niveau ou leurs caractéristiques Tester un programme peut démontrer la présence de bugs, jamais leur absence. Edsger W. Dijkstra Tests Tests unitaires vérifient qu un composant du système respecte ses spécifications la composante est testée individuellement Tests d intégration des modules vérifient que l ensemble des composants d un module fonctionnent ensemble détecte principalement les problèmes d interface entre composants Tests d intégration du logiciel vérifient que tous les modules du logiciel fonctionnent ensemble Tests du système le bon fonctionnement du logiciel dans son environnement d exécution (compatibilités avec les logiciels existants) tests de performance (+tests de profil) Tests de validation - importants pour le client! tests du logiciel dans les conditions définies par l utilisateur Tests en boîte noire - vérifient que les sorties sont bien celles prévues par l utilisateur

UML - but Concepts objet et UML - Rappels un travail de modélisation réfléchi avant de commencer à coder meilleure communication entre les informaticiens (et non informaticiens) définition d une norme de communication spécifier et donc limiter les ambiguïtés UML UML (Unified Modelling Language) est un langage de modélisation standard qui permet de représenter (de manière graphique) et de communiquer les divers aspects d un système informatique. Apparu dans les années 90 à partir des approches de G. Booch, I. Jacobson et J. Rumbaugh. UML n est pas un langage de programmation et pas une méthode! issu du terrain et d un large consensus c est juste un ensemble de notations communes norme riche (permet de spécifier du début à la fin) et ouverte (en constante évolution depuis sa création) a la base la notion d objet Reprenez vos notes de cours de l an dernier! Les diagrammes Besoin des utilisateurs diagramme des cas d utilisation Aspect statique (vue structurelle) représentation des données diagramme objet diagramme de classes Aspect dynamique des objets cycle de vie diagramme État/Transition diagramme d activités Interaction entre les objets (vue fonctionnelle) diagramme de séquence diagramme de collaboration

Diagramme des cas d utilisation - rappel Implémentation du logiciel diagramme de composants spécification de l architecture logiciel dans un environnement donné : découpage du logiciel en unité logique de compilation (sous-système) diagramme de déploiement spécification de l architecture matérielle du système (serveur, périphérique, lien de communications,... ) L approche orientée objet Les objets - pourquoi? Le système est vu comme un ensemble d objets. Chaque objet gère l information concernant son propre état. L architecture est liée aux objets du domaine (données+traitements). Les évolutions sont plus locales, donc plus faciles. But ultime : permettre une conception modulaire. Ce sont des abstractions mettent en avant les caractéristiques essentielles, définissent une représentation simplifiée, dissimulent les détails Impact sur la façon de penser : héritage ou composition ou interface?

Les objets Définition Objet = identité + état + comportement Chaque objet possède une identité unique qui lui est propre et qui le caractérise L état : valeur de tous les attributs d un objet à un instant T Le comportement regroupe toutes les compétences d un objet L état et le comportement sont liés. Comment? Application Une application est un ensemble d objets collaborant entre eux. Le comportement d une application (orientée objet) repose sur la communication entre les objets qui la composent. Les objets communiquent en échangeant des messages Constructeurs Destructeurs (implicites en Java) Accesseurs (getters) Modificateurs (setters) Iterateurs... Les classes Une classe est une description abstraite d un ensemble d objets de même nature. n a pas d état, ni d identité (vue statique du système) c est un modèle pour la création de nouveaux objets contrat garantissant les compétences minimales d un objet des éléments concrets (ex. livre, client) des éléments abstraits (ex. commande de marchandise) des composants d une application (ex. les éléments de l interface graphique) des structures informatiques (ex. tables, liste de contactes) des éléments comportementaux (ex. des tâches, paiement) Classe vs Objet Une instance de la classe HUMAIN est une personne donnée (par ex. Philippe - objet de type HUMAIN). Objet/Classe a deux aspects : Interface : vue externe de l objet Corps : implémentation des comportements (opérations) et des attributs. L utilisateur/programmeur ne connaît que l interface de l objet. L implémentation est masquée et non accessible à l utilisateur. (l encapsulation)

Diagramme de classes (modèle statique) Diagramme de classes Plusieurs niveaux de détails Ce sont les plus importants pour la modélisation orientée objet. Le diagrammes de classes décrit la structure interne du système contrairement au diagramme de cas d utilisation qui montre le système du point de vue des acteurs. Il permet de fournir une représentation abstraite des objets du système qui vont interagir ensemble pour réaliser les cas d utilisation. Produit -num_produit -photo_produit -description_produit -prix -marge -/fraisdeport +estdisponible Produit -num_produit -photo_produit -description_produit -prix -marge -/fraisdeport +estdisponible Détails de conception Détails d analyse Produit -num_produit: int -photo_produit -description_produit: String -prix: float -marge: int -/fraisdeport: float +estdisponible: boolean +majprix() +majmarge() Produit -num_produit: int -photo_produit -description_produit: String -prix: float -marge: int -/fraisdeport: float +estdisponible: boolean +majprix() +majmarge() Visibilité - Encapsulation Exemple d encapsulation Encapsulation L encapsulation est un principe de conception consistant à protéger le cœur d un système des accès intempestifs venant de l extérieur. La visibilité définit le degré de protection <<+>> : visibilité publique i.e. toutes les classe y ont accès (cas le plus fréquent pour les méthodes) <<->> : visibilité privée i.e. inaccessible à tout objet hors de la classe (attributs et opérations internes à la classe) <<#>> : visibilité protégée i.e. les sous-classes y ont accès (cas le plus fréquent pour les attributs) << >> : visibilité de paquetage Pas de visibilité par défaut en UML Visibilité publique : la classe s engage à toujours fournir ce service ( contrat )

Type Type d attribut - integer, boolean, double, string, etc - date, time, currency - pour les attributs de type objet, on utilise une association et des noms de rôle Type de retour et de paramètres pour les opérations (type de base ou void) Attributs et opérations de classe Souligné (static en Java) Attribut de classe partagé par toutes les instances de la classe (garde une valeur unique et partagée par toutes les instances de classe) Opération de classe sur des attributs de classe uniquement Produit -num_produit: int -photo_produit -description_produit: String -prix: float -marge: int -/fraisdeport: float +estdisponible: boolean +majprix() +majmarge() Attributs dérivés Relations entre classes peuvent être calculés à partir d autres attributs et de formules de calcul Exemple : Pi vs Volume peu utilisés Association Relation entre plusieurs classes. Elles représentent une abstraction des différents liens qui peuvent exister entre les différents objets. Agrégation Forme particulière d association entre deux classes. L agrégation est une association non symétrique. Une agrégation peut notamment (mais pas nécessairement) exprimer qu une classe fait partie d une autre ( l agrégat ) Composition La composition est une agrégation forte (agrégation par valeur). Exprime le fait qu une classe est composée d une ou plusieurs autres classes.

Relations entre classes Relations entre classes Model::Main A A A Spécialisation et généralisation : Le mécanisme qui permet de définir de nouvelles classes à partir de classes déjà existantes. B B B Généralisation : factorisation dans une classe (appelée super-classe) de propriétés de plusieurs classes A A A Spécialisation : inverse de le généralisation, consiste à créer à partir d une classe plusieurs classes spécialisées. B B B Ne vous trompez pas de flèche!!! Les classes - bilan Encapsulation Rassembler les attributs et les méthodes en masquant les détails d implémentation Garantir l intégrité des données de l objet Peut-être réalisé en particuliers par des constituants privés des objets Relations entre classes - Généralisation indique qu une classe est un cas plus générale d une autre se traduit par la notion d héritage en Java non-transitive et non-réflexive généralisations multiples (pas en Java) Polymorphisme Poly = plusieurs, morphisme = forme Propriété d un élément de pouvoir se présenter sous plusieurs formes. Capacité donnée à une même opération de s effectuer différemment suivant le contexte de la classe où elle se trouve.

Classe abstraite Classe qui ne peut pas être instanciée Sert uniquement de super classe à d autres classes Exemple : les hommes et les femmes vs humains Peut contenir des méthodes abstraites (pour garantir que toutes les classes filles aient ces méthodes) Interfaces Classe nom + données + opérations (privées, publiques etc.) Souvent on s intéresse uniquement aux services rendus par la classe i.e. à son interface Une interface est définie comme une classe, avec les mêmes compartiments. On dit que A est une réalisation de l interface Ia Équivalent à une classe abstraite pure en C++ Classe cliente d une interface Quand une classe dépend d une interface pour réaliser ses opérations, elle est dite classe cliente de l interface On utilise une relation de dépendance entre la classe cliente et l interface requise. Classe paramétrée Généricité En Orienté Objet, correspond à la possibilité de paramétrer une Classe, une fonction, ou une méthode d une classe par un paramètre générique formel représentant un type arbitraire. Toute classe implémentant l interface pourra être utilisée - principe de substitution

Classe paramétrée Diagrammes de classes - Exemple Compte Pour définir une classe générique et paramétrable en fonction de valeurs et/ou de types : Définition d une classe paramétrée par des éléments spécifiés dans un rectangle en pointillés ; Utilisation d une dépendance stéréotypée bind pour définir des classes en fonction de la classe paramétrée. -email: String -nom: String -prénom: String -addresse: String -pseudo: String -password: String -/solde: float +créditer() +gagner() +afficherhistoriqueenchères() +geler() +solder() 1 +proposition 1 0..* Offre -numero: int -date: Date -heure -minute -seconde -montant: float -état_offre: String +agagné() +aperdu() +afficheroffre() 0..* +déposer +concerne 0..* 1 Virement Produit en Enchère C++ : templates Java : generics -numéro: int -date_virement: Date -montant_virement: float -num_produit: int -date_debut_enchere: Date -date_fin_enchère: Date -heure_début_enchère -heure_fin_enchère -minute_début_enchère -minute_fin_enchère -photo_produit -description_produit: String -cout_participation: float -enchereencours: boolean -pasenchere -fraisdeport +ARR_date_cloture() +ARR_produit() +déposer_offre() +estenenchère() +afficherproduitsenenchère()()