Structure d un système interactif Cours 3a : Architecture Logicielle & MVC jgarcia@ircam.fr (partie de la présentation basée sur des transparents d Anastasia Bezerianos, Fanis Tsandilas et Michel Beaudouin-Lafon) Ce que l on voit les sorties Ce que l on fait les entrées Ce qu il se passe traitement calcul communication données (stockage et accès) partie visible «front end» partie invisible «back end» Structure d un système interactif Structure d un système interactif Ce que l on voit (entends-perçois): les sorties Ce qu on le fait : les entrées http://youtu.be/u7gm0oekxwu
Exemple 1 Exemple 2 - modèle de données (albums, artistes, catégories, etc.) - communication avec le serveur de itunes - traitement de requêtes - traitement des achats - sécurité - modèles géométriques - calcul (transformations, rendu graphique, etc.) - stockage et accès aux dessins back end back end front end front end Liaison entre les deux parties Exemple 3 programmation selon un modèle organisé Organiser, structurer une application interactive en séparant : Les données et leurs traitements : Le - structure tabulaire - stockage et accès aux données La représentation des données : La back end Le comportement de l application : Le front end
Le modèle (MVC) Le MVC est : Un patron de conception (solution de conception standardisé indépendante du langage de programmation) Une architecture logicielle (une manière de structurer une application ou un ensemble de logiciels) Introduit le 1979 par Trygve Reenskaug Fortement lié aux concepts de la programmation objet (Smalltalk)
de de demande d état de de sélection de la vue sélection de la vue
demande d état demande d état de de changement de sélection de la vue sélection de la vue mise à jour mise à jour MVC : références entre composants Le modèle: MVC : le modèle Représente les données Fournit les accès aux données Fournit les traitements applicables aux données Expose les fonctionnalités de l application Noyau Fonctionnel de l application
MVC : la vue MVC : le contrôleur La vue: Représente la (ou une) représentation des données du modèle Assure la consistance entre la représentation qu elle donne et l état du modèle/le contexte de l application Sorties de l application Le contrôleur: Représente le comportement de l application face aux actions de l utilisateur Fournit la traduction des actions de l utilisateur en actions sur le modèle Fournit la vue appropriée par rapport aux actions de l utilisateur et des réactions du modèle Comportement et gestion des entrées de l application Avantages de MVC Structure propre de l application Adapté aux concepts de la programmation O-O Indépendance données représentation comportements Modulaire et réutilisable Inconvénients de MVC Mise en place complexe dans le cas d applications importantes Mises à jour potentiellement trop nombreuses «Spaghettis» dans le code et restent souvent fortement liés au adapter la réalisation au problème
MVC et Java Swing La séparation -- n est pas stricte Les widgets de base : le comportement abstrait du widget et : Look & Feel + Listener Exemples : JButon, JLabel, JPanel, etc. La plupart des fois, on ne touche pas le modèle des widgets Swing utilise un modèle par défaut pour chaque widget Swing : types de modèles Look & Feel Interfaces : ButtonModel, ListSelectionModel Classes par default : DefaultButtonModel, DefaultListSelectionModel Données Interfaces : ListModel, TableModel, TreeModel Classes par default : DefaultListModel, DefaultTableModel, DefaultTreeModel Look & Feel + Données Pour certains widgets Exemples : BoundedRangeModel pour JSlider Exemple Exemple Les données Object[][] data = { {"Kathy", "Smith","Snowboarding", new Integer(5), new Boolen(false)}, {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)}, {"Sue", "Black","Knitting", new Integer(2), new Boolean(false)}, {"Jane", "White","Speed reading", new Integer(20), new Boolean (true)}, {"Joe", "Brown","Pool", new Integer(10), new Boolean(false)} }; Table Object javax.swing.jtable Table Model Object javax.swing.table.tablemodel Table Data
Exemple Exemple Le modèle class MyTableModel extends AbstractTableModel { private String[] columnnames = private Object[][] data = public int getcolumncount() { return columnnames.length; } public int getrowcount() { return data.length; } public String getcolumnname(int col) { return columnnames[col]; } public Object getvalueat(int row, int col) { return data[row][col]; } } La vue TableModel datamodel = new MyTableModel(); JTable table = new JTable(dataModel); JScrollPane scrollpane = new JScrollPane(table); Exercice Proposez une implémentation MVC