Stéphane GOBRON HES SO HE Arc ISIC

Documents pareils
Patrons de Conception (Design Patterns)

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

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Analyse,, Conception Objet

Introduction à l héritage en C++

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

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

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

OpenPaaS Le réseau social d'entreprise

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

INFO-F-105 Language de programmation I Séance VI

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

Chapitre VI- La validation de la composition.

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Programmation C++ (débutant)/instructions for, while et do...while

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

et Programmation Objet

1.6- Génération de nombres aléatoires

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Corrigés des premiers exercices sur les classes

Projet Active Object

LOG4430 : Architecture et conception avancée

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

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

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

TP1 : Initiation à Java et Eclipse

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Modélisation UML. Christine Solnon INSA de Lyon - 3IF 1/140.

Programmer en JAVA. par Tama

Introduction au langage C

Le développement d'applications informatiques

Cours de Génie Logiciel

APIs de table pour SQL Server

RMI le langage Java XII-1 JMF

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

Conception des systèmes répartis

Claude Delannoy. 3 e édition C++

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

Programme Compte bancaire (code)

Programmation MacOSX / ios

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

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)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Premiers Pas en Programmation Objet : les Classes et les Objets

Ingénierie des Modèles. Méta-modélisation

Derrière toi Une machine virtuelle!

Cours d Algorithmique et de Langage C v 3.0

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

as Architecture des Systèmes d Information

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Programmation stochastique

INITIATION AU LANGAGE JAVA

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

Plan Pédagogique du cours

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Analyse,, Conception des Systèmes Informatiques

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

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

Composants Logiciels. Le modèle de composant de CORBA. Plan

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

D une part, elles ne peuvent faire table rase de la richesse contenue dans leur système d information.

Algorithmique I. Algorithmique I p.1/??

PROJET ALGORITHMIQUE ET PROGRAMMATION II

TD/TP PAC - Programmation n 3

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours de Master Recherche

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

ACTIVITÉ DE PROGRAMMATION

Auto-évaluation Aperçu de l architecture Java EE

Information utiles. webpage : Google+ : digiusto/

Une introduction à Java

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

LOG4430 : Architecture logicielle et conception avancée

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Introduction au Génie Logiciel

Systeme d'exploitation

Projet de programmation (IK3) : TP n 1 Correction

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

Quatrième partie IV. Test. Test 15 février / 71

Cours 1: Java et les objets

Université de Bangui. Modélisons en UML

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Les processus légers : threads. Système L3, /31

Chapitre I : le langage UML et le processus unifié

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

Programmation en Java IUT GEII (MC-II1) 1

UML et les Bases de Données

Rappel sur les bases de données

Conception d'un système d'information WEB avec UML Par Ass SERGE KIKOBYA

Intérêt du NAT (Network Address Translation) Administration Réseau Niveau routage. Exemple d Intranet. Principe NAT

Création d objet imbriqué sous PowerShell.

Java c est quoi? Java pourquoi?

+ = OpenStack Presentation. Raphaël Ferreira - enovance. Credits : Thanks to the OpenStack Guys 1

Les frameworks au coeur des applications web

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

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

Transcription:

Stéphane GOBRON HES SO HE Arc ISIC 2015 Où en sommes nous? Plan de cours Ch.1 : OO Rappels Ch.2 : Etude de cas => le bridge DP Ch.3 : Conceptualisation, Singleton et Composite DPs Ch.4 : Decorator, State, Prototype, Proxy et Builder DPs Ch. 5 : Abstract factory, Observer, Commande, Memento et Iterator DPs Mots clés du cours

Un peu d histoire Définition Pourquoi les patterns? Analogie Découvrir un pattern? Classification «patron de conception» Définition de «pattern» Formalisme GoF 23 design patterns Pattern Singleton Pattern Composite Tête la première, E. Freeman & E. Freeman, Edition O REILY Un peu d histoire Quelques personnes fondatrices du domaine Christopher Alexander Père du Pattern Language movement in computer science late 70 s Ward Cunningham late 80 s a commencé a expérimenter avec l'idée d'appliquer des pattern à la programmation : formalisme primaire Rien à voir avec le Gang of four chinois (1966 76) Erich Gamma, Ph. D. thesis, early 90 s Gamma, Helm, Johnson, Vlissides «Gang of Four» GoF mid 90 s

Définition Patron en couture Un patron décrit un problème récurrent, souvent rencontré, et ensuite propose un principe de solution pour ce problème Seul un principe de solution est présenté de manière à pouvoir utiliser le patron des centaines de fois sans pour autant faire la même chose à chaque fois [C. Alexander] Un pattern Pattern «design» Patrons de conception Pourquoi les patterns Présenter une solution à un problème récurrent qui survient souvent dans le développement logiciel C. Alexander était avant tout un architecte! Les croisements d autoroute : 1 min pour les dessiner LA SOLUTION regarder sur le Web! problèmes complexes mais connus Les architectes ne réinventent rien Ils suivent et adaptent un pattern

Pourquoi les patterns? Permet d assurer des qualités essentielles du développement logiciel : Réutilisation Extensibilité Maintenance Montée en charge volume d utilisation Efficacité Pourquoi les patterns? Permet de capturer des structures et des dynamiques de qualité afin de favoriser leurs réutilisations AbstractService service Client Proxy Service 1 1 service service Bien concevoir, ici le pattern Proxy Se documenter! l expérience des experts Se référer

Analogie 1. Règles 2. Principes généraux aide à paramétrer une stratégie de base 3. Etudes de cas permet de connaître le résultat des stratégies des experts Conception logicielle 1. Connaître les règles Algorithme Langages Structures de données 2. Connaître les principes Décomposition OO 3. Etudier les patterns Comprendre Mémoriser Appliquer Jeu d échec Mouvements Poids des pièces Règle principale, coincer le roi => but du jeu Poids relatif des pièces Positionnement Comprendre Mémoriser Appliquer Découvrir un pattern? Créer ou découvrir? Observer un problème Etudier différentes solutions Identifier un Pattern Documenter le Pattern S exercer! l expérience personnelle On ne crée pas un pattern On le découvre en l étudiant Pratique durant ce cours Mais surtout après ce cours avec l expérience accumulée

Classification «objet» «Idiomes» Spécifiques à un langage, un système ou un outil Définissent les aspects statiques et dynamiques d une solution qui est récurrente «Patterns d architecture» Sous systèmes, relations entre ss, guidelines, «Patterns d optimisation» Documenter les erreurs et les mauvaises solutions «Patterns d analyse» «Patterns organisationnels» Trois types de «Patrons de conception» Patron de création «Creational» «Creational» Facilitent la création des objets Patron de structure «Structural» Patrons de comportement «Behavioural» «Structural» Facilitent la composition des objets et des classes «Behavioural» Facilite la distribution des responsabilités

Définition de «Patterns» Des catalogues individuels ne suffisent pas Un langages commun est nécessaires Pas de standard pour la description d un patterns Plusieurs formalismes existent Le formalisme le plus utilisé est celui du GoF dans sa version 2 Nom Classification Objet Motivation Applicabilité Structure Participants Collaborations Conséquences Implémentation Exemple de code Utilisation connues Patterns liés Formalisme GoF Pour définir un Design Pattern officiel, on doit pouvoir définir un formalisme sous forme de champs qui classifie d une façon unique les propriétés de ce DP Nom et classification Possibilité d avoir plusieurs noms Objectif Que fait le pattern Connu encore sous Autre nom connu option Motivation problème de conception traité explication de la solution Applicabilité / cas d utilisation Situations où le patron peut être utilisé Structure Représentation graphique UML

Formalisme GoF Propriétés suite Participants Classes/objets participants et leurs responsabilités Collaborations Interactions entre participants Définissent les responsabilités Conséquences Effets, contraintes, avantages obtenus Implémentation Suggestions, techniques Exemple de code Exemple de code pour l implémentation du patron 23 patterns GoF Trois catégories Creational Structural Behavioral Les patterns en gras seront détaillés 23 mars : intervenant 4 mai : super équipe {2,3 18 mai: super équipe {1,5 1 er juin : super équipe {4,6 Class Scope Object Purpose Creational Structural Behavioral Factory ch4. Method Singleton ch2 Builder ch3 Prototype ch3 Abstract Factory ch4. Adapter. Interpreter. Template Method. Adapter Bridge ch1 Composite ch2 Decorator ch3. Facade Proxy ch3. Chain of Responsibility Command ch5. Iterator. Mediator Memento ch5. Flyweight Observer (callback I) ch5 State ch3. Strategy (callback II). Visitor

Concept Solution potentielle Principe Exemple de code Déclinaison Structure générale du DP Quite a unique object Le pattern Singleton Concept Nous voulons assurer l unicité des instances pour une classe donnée Implémentation que nous voulons éviter Exemples Une connexion unique Un protocole unique Une fenêtre principale unique. Implémentation avec le pattern singleton

Le pattern Singleton Solution potentielle 1 ère solution Bien entendu, ici, radis est un objet déclaré en global En C++, il est possible de déclarer un objet global, celui ci pouvant être visible partout dans le programme! Le pattern Singleton Principe Constructeur non accessible Une méthode de remplacement pour la construction La méthode de construction assure le test d existence Un attribut permettant d assurer le test d existence Note importante : ce DP est tellement surutilisé et statistiquement mal déployé que certains souhaitent le voir disparaitre des DPs officiels

Le pattern Singleton Exemple de code Indices : Attention aux pièges #ifndef CSINGLETON_H #define CSINGLETON_H class CSingleton { private: static CSingleton* single; CSingleton() { /*private constructor*/ int myvalue; public: static CSingleton* getinstance(); void setvalue( int value ); void printvalue(); void deleteinstance(); ~CSingleton() {; ; #endif // CSINGLETON_H csingleton.h #include "../include/csingleton.h" #include <iostream> using namespace std; CSingleton* CSingleton::single = 0; CSingleton* CSingleton::getInstance() { if(!single ) { single = new CSingleton(); return( single ); else { return single; void CSingleton::deleteInstance() { if( single ) delete( single ); void CSingleton::setValue( int value ) { if( single ) myvalue = value; else cout << " single does not exist"; csingleton.cpp void CSingleton::printValue() { if( single ) cout << "Value: " << myvalue; #include "../include/csingleton.h" int main(void) { CSingleton *sc1, *sc2; sc1->setvalue( 123 ); /!\ non sc1->printvalue(); sc1 = CSingleton::getInstance(); sc1->setvalue( 234 ); sc1->printvalue(); En 5 min : que fait ce main? sc2 = CSingleton::getInstance(); sc2->setvalue( 345 ); sc2->printvalue(); sc1->printvalue(); sc1->deleteinstance(); sc2->deleteinstance(); return( 0 ); /!\ non main.cpp Le pattern Singleton Déclinaisons Le Pattern «Singleton» peut se décliner aussi à un nombre constant d instanciation E.g. 1. Limiter le nombre d instance à une certaine valeur Une classe connexion qui ne permet de créer que cinq instances au maximum pour des raisons de performance 2. Créer des instances différentes par alternance Un objet Personne pour lequel seules deux classes dérivées existent, Homme et Femme, avec la spécification supplémentaire que l on souhaite créer une série de couple une fois un homme et une fois une femme par alternance

Le pattern Singleton Déclinaisons On peut passer à la passer à la douane avec dans sa valise un maximum de 2 bouteilles d alcool Modifier le code C++ précédant pour obtenir un «Singleton» 2 fois instanciable! Indice! La consommation d alcool est mauvaise pour la santé c est une règle Le pattern Singleton Structure générale du DP Les astuces Constructeur privé Un pointeur static sur une instance unique à construire A toute requête de construction, si l instance n existe pas, la construire Pour toute autre requête de construction: renvoyer l adresse existante

3.3 «Composite» des collections bien gérées Concept exemple Définition Exemple Structure générale du DP Petit exercice Présentation du Labo 2 http://www.ivanaborovnjak.com/project/box in a box/ 4.1 «Composite» Concept exemple Qu est ce qu une boite? c est un objet qui contient quelque chose Il existe de nombreux types de boites http://www.curtis.lassam.net/ Récurrence du concept Mais une boîte peut alors elle même contenir une autre voir plusieurs autres boîtes

4.1 «Composite» Definition Patron de type Structure Organiser / compose les objets en structures arborescentes pour représenter des hiérarchies toutparties Les composites permettent aux clients de manipuler les objets composés et les objets individuels uniformément acomposite aleaf aleaf aleaf acomposite aleaf aleaf 4.1 «Composite» Exemple d application Des objets graphiques simples ou groupés Des collections d éléments Des composants multimédia Dessin dans un dessin de dessin Exemple : objets graphiques 1..n

4.1 «Composite» Structure générale du DP Prêtons attention à la différence entre Manipuler ces objets d un façon simple, «Un peu comme des poupées russes» «Component» : virtuel et «Composite» : concret 1..n Notez aussi que la «feuille» se défini au travers du fait qu elle ne peut pas avoir d enfants 4.1 «Composite» Petit exercice Trouver ce que ce code C++ fait! #include "myheader.h" int main() { Composite containers[4]; for (int i = 0; i < 4; i++) for (int j = 0; j < 3; j++) containers[i].add(new Leaf(i *3+j)); for (i = 1; i < 4; i++) containers[0].add(&(containers[i])); for (i = 0; i < 4; i++) { containers[i].traverse(); cout << endl; #include <vector> #include <iostream> using namespace std; class Component { public: virtual void traverse() = 0; ; 0 1 2 3 4 5 6 7 8 9 10 11 3 4 5 6 7 8 9 10 11 Solution class Leaf: public Component { int value; public: Leaf(int val) { value = val; void traverse() { cout << value << ' '; ; class Composite: public Component { vector < Component * > children; public: void add(component *ele) { children.push_back(ele); void traverse() { for (int i = 0; i < children.size(); i++) children[i]->traverse(); ;

Labo Labo 2 Mini projet comportant les patterns «Singleton» et «Composite» Thème «les fratals» Vous avez le choix du sujet précis mais devez justifier ce choix, i.e. les patterns doivent être consistants De plus, aucune équipe ne peut faire la même chose, vous devez donc avoir l autorisation du professeur avant d attaquer l implémentation En C++ sous CodeBlock Indices! Dans votre rapport vous devez montrer clairement l utilité des deux patterns Principe général http://mathworld.wolfr am.com/fractal.html Exemple graphique du fractal Mandelbrot Merci! Questions? Au prochain cour Chapitre 4 Du Decorator au Builder DPs Decorator DP State DP Prototype DP Proxy DP Builder DP Tête la première, E. Freeman & E. Freeman, Edition O REILY