Introduction Design patterns. Introduction Plein de problèmes recurrents –Interface graphique –Conteneurs –Iterateurs Plutôt que réinventer la roue –Réutiliser.

Slides:



Advertisements
Présentations similaires
Introduction Rétro ingénierie d’interfaces graphiques
Advertisements

Spécialisation/généralisation Héritage Polymorphisme.
A propos de java Sun, fin 1995 C++ nettoyé semi-interprété
(Classes prédéfinies – API Java)
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
INTRODUCTION.
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Introduction à la POO: Les classes vs les objets
بسم الله الرحمن الرحيم. Institut Supérieure des Etudes Technologiques de Kébili.
Page de garde Introduction aux Design Patterns ISIA, Mars 2003
Chapitre III Héritage (début)
Programmation orientée objet
Analyse et Conception orientée objet
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Analyse et Conception orientée objet
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Classes abstraites et Interfaces
Modèle, Méthode et Conception
Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie.
Behavioral Design Patterns The Observer Pattern Roberto Demontis Sylvain Giroux.
Introduction au paradigme orienté-objet (suite)
Présentation Structures de Données et TDA
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
Design Patterns Factory Method – Pattern de construction [DANT] Génie Logiciel 1.
Design Pattern: Decorator
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Sensibilisation a la modelisation
Patrons de conceptions de créations
4 Introduction des objets. Les chaînes et tableaux
INTRODUCTION.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Designs Patterns comment rendre son code faiblement couplé, et maintenable...
Interfaces graphiques. Composants d'interface utilisateur graphique (GUI) 1 Bibliothèques Awt et Swing Procédures communes pour l'utilisation de ces clases.
14 La gestion d’événements
Résumé des concepts liés aux objets C. Petitpierre, EPFL.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
LIFI-Java 2004 Séance du Jeudi 16 sept. Cours 2. Programmation Objet Qu’est ce que c’est? –une “facilité” de programmation? –une nouvelle façon de penser?
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Le polymorphisme.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Les classes Introduction aux Langages Orientés Objets
Behavioral Design Patterns The Observer Pattern. Intention Définir une dépendance de “1” à “n” entre des objets de telle sorte que lorsque l’état d’un.
La programmation par objets Principes et concepts Etude de Smalltalk.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
Iup MIAGe 3° année Projet MIAGe Toulouse – Groupe 21 Charte graphique.
 1) Il faut connaître le modèle et son fonctionnement  2) Définir le contrôle que l’on veut faire ouvrir, fermer, afficher, etc.) sur le modèle  3)
Observer/Observable Définition Fonctionnement Exemple.
1 Cpt JAVA : Eclipse (bis) Debogage. 2 Code à tester public class siecle { int t; public siecle() { super(); t=1; } static public boolean vrai() { return(false);
Introduction à la Programmation Orientée Objet
Généricité.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 3.
INSTITUT SUPERIEURE D’INFORMATIQUE Design Pattern
Master 1 SIGLIS Jave Lecteur Stéphane Tallard Chapitre 5 – Correction TD.
BlueJ_VII 1 Java, les objets : tout de suite ! Conception de classes (1) Notes de cours associées au chapitre 7 tutorial BlueJ
PRÉSENTATION AGL LES TESTS LOGICIELS LES TEST LOGICIELS 1 Mickael BETTINELLI Brandon OZIOL Gaétan PHILIPPE Simon LUAIRE.
Java Swing. Principes de base  Des composants graphiques (exemple: JFrame, JButton …)  Hiérarchie de classes  Des événements et les actions à effectuer.
Spécialisation covariante cours et TP. Plan  Introduction  Rappels théoriques  Définition de la covariance  Présentation du modèle servant d'exemple.
Introduction à l'orienté objet. Définition Le terme orienté objet siginifie que l'on organise le logiciel comme une collection d'objets organisée en graphe.
Transcription de la présentation:

Introduction Design patterns

Introduction Plein de problèmes recurrents –Interface graphique –Conteneurs –Iterateurs Plutôt que réinventer la roue –Réutiliser solutions éprouvées

Definition Un design pattern –Manière standardisée de résoudre un problème recurrent –Domaine de l'Architecture logicielle Ce n'est pas –Une brique tout est à construire –Une règle specifie pas comment faire, à adapter –Une méthode pas une demarche generale

A quel niveau ? Différents niveaux de granularité –Code machine –Langage –Concept (oriente objet,..) Patrons –Indépendant du langage –Procèdes de conception generaux –Niveaux d'abstraction élevés Exprimé en UML

Patron et design Synonymes –Patron –Design de conception –Motif de conception Formalisme –Nom du patron –Description du probleme à résoudre –Description de la solution –Consequence et utilisation du patron

Pour vous donner une idee 3 types de patron –Creational pattern Abstraction des processus de création –Structural pattern Abstraction de l’assemblage d’objets –Behavioural pattern Abstraction de comportements

Quelques implementations 3 types de patron –Creational pattern Factory : une classe qui construit les objets, permet de limiter le nombre d'instances –Structural pattern construction d'objets composites Ex : noeud et feuilles –Behavioural pattern Iterator : parcourir de maniere abstraite sans devoiler la structure interne

Conclusion Un pattern c'est –Une Solution éprouvée exprimée à Niveau d’abstraction élevé Interviendra plus tard dans vos études ou votre travail –Juste pour vous dire que ca existe Pour le moment, deux pistes possibles –Chercher un pattern : Pour un probleme identifié –parcourir les patterns : Solution elegantes à regarder Une reference : « design patterns » (Erich Gamma, Richard Helm, …)

Interface graphique (cf JAVA 4) Une première approche

Interface graphique Problème –J’ai une application compliquée … (ex carte) –Comment faire une interface graphique ? Votre solution ?

Interface graphique Attentes d’une interface graphique ?

Interface graphique Attentes d’une interface graphique ? –Afficher quelque chose

Interface graphique Attentes d’une interface graphique ? –Afficher quelque chose –Contrôler quelque chose

Interface graphique Attentes d’une interface graphique ? –Afficher quelque chose –Contrôler quelque chose Idéal : Développer indépendamment –Modèle : gère les données –Vue : gère affichage –Contrôleur: gère le contrôle

Un exemple Une balle –De couleur variable –De taille variable Contrôle à partir d’une interface graphique ? Comment faites vous ? –Quelles classes ? –Liens entre les classes ?

Votre approche ?

Démarche MVC Construire 1. Modèle gestion des données 2. Vue : Affichage des données 3. Controleur Modification des données

Construire le modèle Objectif : –Gestion des données Définir la classe balle –Attributs –Constructeur –Méthodes –Indépendamment de toute interface graphique Méthodes utiles –Changer couleur –Changer taille

Classe Balle - Modèle /** classe balle**/ public class Balle { public int taille; public Color c; public Balle() { taille=10; c=new Color(0,0,0); } public void changeCouleur(Color t) { if (t!=null) c=t; } public void changeTaille(int t) { if (t>0) taille=t; }

Construire la Vue Objectif : –Afficher la balle Besoins –Disposer d'un JPanel pour l'affichage –Connaître l’objet à afficher –Définir une méthode paint() utilisant l’objet Approche –Hériter de JPanel –Lien vers un objet de type Balle Attribut de type Balle

Classe Vue public class VueBalle extends JPanel { Balle balleAAfficher; public VueBalle(Balle b) { super(); balleAAfficher=b; setPreferredSize(new Dimension(200,200)); setSize(200,200); } public void paint(Graphics arg0) { super.paint(arg0); arg0.setColor(balleAAfficher.c); arg0.fillOval(0, 0, balleAAfficher.taille*10,balleAAfficher.taille*10); } } Lien vers la balle Constructeur Afficher la balle

Encore mieux … Limiter l’accès aux attributs de balle La classe balle sait s’afficher La vue appelle la méthode affiche de balle public void affiche(Graphics arg0) { arg0.setColor(c); arg0.fillOval(0, 0, taille*10,taille*10); } public void paint(Graphics arg0) { super.paint(arg0); balleAAfficher.affiche(arg0); }

Contrôler le modèle Objectif : –Appliquer des méthodes à l’objet Besoins –Accéder l’objet Différents types d’interface : –Texte –Graphique

Classe Contrôleur public class controleur { public static void main(String [] args) { System.out.println("debut"); Balle b=new Balle(); VueBalle v=new VueBalle(b); JFrame toto=new JFrame(); toto.setSize(200,200); toto.add(v); toto.setVisible(true); int a=Clavier.lireInt(); b.changeTaille(100); } Créer modèle Créer vue Modifier Modèle

MAIS …. ??? …

Probleme ? Exemple d’exécution L'objet initial L'objet n'est pas modifié Pourquoi ? On appuie sur entree

Probleme ? On déplace l'objet partiellement derriere des fenetres

Réponse Il faut penser à mettre à jour l'affichage –Appel explicite à repaint() Sinon aucun changement Sauf quand JAVA redessine des morceaux Reafficher la fenetre –on peut mieux faire –Comment ?

Réponse Il faut penser à mettre à jour l'affichage –Appel explicite à repaint() Sinon aucun changement Sauf quand JAVA redessine des morceaux Reafficher la fenetre –On peut mieux faire –Le modèle sait qu'il a été modifié !!!!

Bilan Avantage –Independance vue/modele –Independance modele/controleur Problèmes restant –Repaint dans le controleur ==>Controleur doit connaître la vue … –Plusieurs afficheurs ? –Changer d’afficheurs ?

Extension ? Problème –J’ai la même application compliquée … Questions –Comment changer d’interface graphique ? –Comment en proposer plusieurs ? –Comment eviter le lien Controleur/Vue ? Votre solution ?

Design observateur

Proche des classes precedentes Proche –Modele Connaît toutes les vues Previens les vues qu’il est modifie –Vue Connaît le modele Affiche le modele –Controleur Connaît le modele Modifie le modele

Proche des classes precedentes Proche –Modele Connaît toutes les vues Previens les vues qu’il est modifie –Vue Connaît le modele Affiche le modele –Controleur Connaît le modele Modifie le modele Design observateur

Diag de classe Observateur Sujet Attache(Observateur) Detache (Observateur) Notifie() Observateur MiseAjour() Pour tout observateur o O->MiseAjour()

Diag classes Observateur Sujet Attache(Observateur) Detache (Observateur) Notifie() Observateur MiseAjour() Sujet concret AcqEtat() EtatSujet Return EtatSujet ObservateurConcret MiseAjour() EtatObservateur sujet Pour tout observateur o O->MiseAjour()

Diag sequences Observateur unSujetConcretunObserveateurConcret unautreObserveateurConcret Notify() MiseAjour() acqEtat() MiseAjour() acqEtat()

Observateur en JAVA Observateur –Une vue –Interface Observer Méthodes à redéfinir –Void update(Observable o, Object arg) Observateur MiseAjour()

Observable en JAVA Sujet –Contient les données –Classe Observable Méthodes pré-écrites –Void addObserver(Observer o) –Void deleteObserver(Observer o) –Void notifyObservers() –Void setChanged() Sujet Attache(Observateur) Detache (Observateur) Notifie() Appel explicite

Mise en oeuvre

modèle Extends la classe Observable –Ajout de nouvelles methodes par heritage Ajouter une vue Notifier les vues –Appel de méthode setChanged() notify()

Classe balle import java.awt.Color; import java.util.Observable; /** classe balle**/ public class Balle extends Observable{ public int taille; public Color c; public Balle() { taille=10; c=new Color(0,0,0); } public void changeCouleur(Color t) { if (t!=null) { c=t; setChanged(); } notifyObservers(); } public void changeTaille(int t) { if (t>0) { taille=t; setChanged(); } notifyObservers(); } notify Herite d'Observable

Vue Utilise JPanel Implements Observer –Methode update() à ecrire

Classe Vue import java.awt.Dimension; import java.awt.Graphics; import java.util.Observable; import java.util.Observer; import javax.swing.JPanel; public class VueBalle extends JPanel implements Observer{ Balle balleAAfficher; public void paint(Graphics arg0) { super.paint(arg0); arg0.setColor(balleAAfficher.c); arg0.fillOval(0, 0, balleAAfficher.taille*10,balleAAfficher.taille*10); } public void update(Observable arg0, Object arg1) { balleAAfficher=(Balle)arg0; repaint(); } } Observer Paint() Update

Contrôleur Pas de lien direct avec la vue Exemple : –Un slider pour modifier la taille

Exemple de la balle import java.util.Observer; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class Controle extends JSlider{ Balle modele; //constructeur public Controle(Balle b) { super(); //lien avec le modele modele=b; //initialisation du Slider setMaximum(100); setMinimum(1); //ajout d'un listener pour suivre l'evolution du curseur addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent arg0) { modele.changeTaille(getValue()); } }); } Pas de lien avec la vue

Main pour tout créer public class test { /** args */ public static void main(String[] args) { //creer une balle Balle b=new Balle(); //creer une vue VueBalle vue=new VueBalle(); //attacher la vue au modele b.addObserver(vue); vue.setPreferredSize(new Dimension(200,200)); //creer le controleur Controle c=new Controle(b); c.setPreferredSize(new Dimension(100,50)); //ranger tout dans une frame JFrame frame=new JFrame(); frame.setLayout(new BorderLayout()); frame.getContentPane().add(vue,BorderLayout.NORTH); frame.getContentPane().add(c,BorderLayout.SOUTH); frame.pack(); frame.setSize(new Dimension(300,300)); //frame.pack(); frame.setVisible(true); b.changeTaille(10); c.setValue(10); } Creation modele Creation vue Ajout vue Creation controleur Creation frame

Resultat Mise a jour automatique de la vue

Conclusion MVC et design Introduction aux designs patterns Montré le design Observateur –Modele MVC lié –Implémentation JAVA : Observable / Observer Modele MVC tres pratique –Independance données/affichage –Independance affichage/controle –Independance interface/modèle

Conclusion MVC et design Conséquence –Facile de créer un modele (JAVA classique) –Approche systematique pour Graphique Avantage –Etapes distinctes Developpement modele et Vue/controle –Capacité de changer la/les vue(s) –Tres simple d'utilisation

Bilan de ce chapitre Nous avons vus –Ce qu'est un design pattern –Un rappel sur les interfaces graphiques Un moyen de faire des interface Le modele MVC –Le design observateur Les classes JAVA implementent –La mise en oeuvre du design observateur Pour faire des modeles MVC

Bilan Tutorés parce que c'est bientot... Mais pas que... Ps: ceci vaut aussi pour le reste du module Assertions Genericité JUNIT !!! ==> tres pratique et efficace / peu couteux Pensez y dans vos projets !!