Architecture Logicielle des IHM Principes de bases Modèle MVC Modèle PAC Une architecture, pourquoi faire? Organiser le code (rangement) Simplifier (diviser pour régner) Organiser le travail Itératif Parallèle (fusion) Modifier (une partie) Ré-utiliser Notion : modularité, évolutivité, flexibilité Avec des transparents repris des cours de l équipe IIHM du LIG 2 IHM et architecture Séparation possible Code pour IHM Code«Métier» Exemple IHM différente pour une Gestion d un stock de chaussure ou de bibelots? Linux sous gnome ou kde, le système change-t-il? Objectif : éviter de tout modifier si on change la partie fonctionnel ou la partie IHM 3 Découpage par Abstraction Séparation IHM / NF Noyau fonctionnel (ou FunctionalCoreou partie Métier) NF IHM Besoin d interface logicielle pour découpler (indépendance) des deux parties NF IHM Jacques concrète concrète Pierre concrète Paul 4
Découpage par Abstraction Découpage par Abstraction Besoin d interface logicielle pour découpler (indépendance) des deux parties NF NF IHM IHM Jacques concrète concrète Pierre concrète Paul 5 Marie Partie du NF concret Eva Partie du NF concret Partie Partie du du NF NF Concret concret NF Annie IHM concrète Jacques concrète Pierre concrète Paul Architecture: MVC Smalltalk[Goldberg et Robson1979-1983] Cause : difficultés de conception des applications fortement interactives Réponse : modularisation Model : modélisation (données et comportement) View: représentation manipulable de l'objet Control : interprétation des entrées MVC : meilleure conception Séparer dans le code les données (le Modèle), La ou les Vues, Le Contrôle V s abonne à M C s abonne à V C modifie M Interfaces logicielles 7 http://sis36.berkeley.edu/projects/streek/talks/mvc/images/talks/mvc/mvc-structure-generic.gif 8
MVC : meilleure conception Plusieurs vues possibles synchronisées, Plusieurs contrôles possibles (exemple : clavier, souris, joypad), Données isolées (BD, fichiers, etc ) Bien entendu : Nécessité de définir des interfaces communes entre le modèle, la vue et le contrôleur MVC et Java utilisation synchrone Les classes Observer / Observable Observer "Fred" Observable 1. Arthur 2. Martin S enregistre S enregistre Observer "Arthur" Observer "Martin" 9 Observer / Observable Exemple : un timer class Test { Timer timer; Test() { timer = new Timer(); Toto toto = new Toto(); timer.addobserver(toto); toto est écouteur du timer public static void main(string[] args) { Test t = new Test(); t.timer.run(); java.util.observer Toto est un observateur class Toto implements java.util.observer { public void update(observable o, Object arg) { System.out.println("Temps : " + ((Timer)o).getSeconds() + " secs"); Tous les observateurs doivent posséder une méthode update( ) 11 12
java.util.observable Exemple class Timer extends java.util.observable { private long zzz = 1000; private long zero; Les observables doivent Timer(long zzz) { être d une sous-classe de this.zzz = zzz; Observable public void run () throws InterruptedException { zero = System.currentTimeMillis(); while (true) { setchanged(); notifyobservers(new Long(System.currentTimeMillis() - zero)); Thread.sleep(zzz); On prévient les observateurs, ça appelle update( ) Limite de MVC Dans la cas d une vue multiple, nous disposons d un pattern Pour le reste? Besoins d un cadre Jusqu à 80% du code concerne les interfaces Il faut viser la réutilisation et faciliter la maintenance / l évolution Comment faire collaborer des MVC ensemble (solution pour ) 13 14 Architecture : Modèles à agents pour Un système interactif = une collection d unités de calcul spécialisés (agents) Un agent a un état a une expertise est capable d émettre et de réagir à des événements Un agent en contact direct avec l utilisateur = un interacteur Quelquefois agent = interacteur Architecture : Modèles à agents pour... Motivations Modularité et parallélisme conception itérative(modifiabilité) dialogue à plusieurs fils mise en œuvre des collecticiels Correspondance avec l approche à objets catégorie d agents(réactifs) -> classe événement-> méthode encapsulation : l agent(l objet) est seul à modifier directement son état mécanisme de sous-classe-> modifiabilité Exemple: MVC (modulo pb de hierarchie) 15 16
PAC : Un modèle hiérarchisé d agent Architecture : Modèles à agents [Coutaz 87] Trois facettes : Présentation (C + V de MVC),le V de ALV Abstraction (M de MVC) Contrôle : communication entre agent et expression des dépendances(liaison) entre A et P (le L de ALV) Hiérarchisation : Arbre : relation père-fils Heuristique de conception Communication par message PAC Aspects réalisation Aucune recommandation dépend de la plate-forme d accueil 1 agent = 1 module C au minimum, 1 objet ou 1 objet par facette (comme MVC) 17 18 Un exemple d application de PAC Exemple de hiérarchie PAC Données à afficher (ANF) Hiérarchie PAC Passerelle Représentation physique Représentation numérique Objets sauvés Réalité cliquable Capturer un objet (réalité cliquable) Voir les deux vidéos : utilisatrice (équipement) et capture (déroulement du scénario) 19 Données numériques localisées (ANF) Terrain augmenté Caméra Localisation Orientation
Exemple de circulation de message Exemple d implémentation PAC Représentation physique M2 M2 hiérarchie PAC Passerelle M2 M1 M2 M1 Réalité cliquable M2 Représentation numérique Evénements souris (stylet) Classe Abstraite pour le controleur Implémentation par défaut de certaines méthodes Interfaces logicielles pour l Abstraction et la Présentation Possibilité d héritage Communication par message Une «String» pour identifier le type de message Un objet en attachement (peut être n importe quoi) Traitement : test sur le type de message et traitement adéquate (cast sur l attachement) 22 Exemple d Abstraction et de Présentation en Java package PAC; public interface Abstraction { public void affectecontroleur(controleur c); public void recoitmessage(string type, Object attachement); Exemple de Controleur en java package PAC; import java.util.arraylist; public abstract class Controleur { protected Abstraction a; protected Presentation p; protected ArrayList<Controleur> enfants = new ArrayList<Controleur>(); protected Controleur parent; public abstract void recoitmessagecontroleur(string type, Object attachement); public abstract void recoitmessagepresentation(string type, Object attachement); public abstract void recoitmessageabstraction(string type, Object attachement); public void affecteparent(controleur p) { this.parent = p; package PAC; public interface Presentation { public void affectecontroleur(controleur c); public void recoitmessage(string type, Object attachement); public void ajouteenfant(controleur arg0) { if (! enfants.contains(arg0)) { enfants.add(arg0); arg0.affecteparent(this); protected void dispatchdownmessage(string type, Object att) { for (Controleur c : enfants) { c.recoitmessagecontroleur(type, att); 23 protected void dispatchupmessage(string type, Object att) { if (parent!= null) parent.recoitmessagecontroleur(type, att); 24
PAC vs MVC PAC, MVC, HMVC Communication centralisée dans le C Isolement A et P PAC vs HMVC Hierarchical-Model-View-Controller (HMVC) PAC : 1987 ; HMVC : 2000 Connexion directe V M dans HMVC 25 Phpet MVC : liste extraite de wikipédia http://en.wikipedia.org/wiki/model-view-controller Agaviis a PHP5 application framework that focuses on sustained quality and correctness. akaikiwia PHP 5 lightweight and fast MVC framework with ORM, scaffolding, and more. Alloy A lightweight REST-focused modular Hierarchical MVCPHP 5.3 framework CakePHPA web application framework modeled after the concepts of Ruby on Rails. CodeChargeStudio is a visual rapid application development environment for web-based database driven application development. Code Charge Studioplaces emphasis on code generation technology to provide ASP.NET, PHP, JSP, Servlets, ColdFusion and Perllanguage support. CodeIgniter A simple, light, fast, open source MVC framework for building websites using PHP. DrupalAn open source content management system that uses MVC for its add-ons called modules. eddy a lightweight, open-source PHP 5.3 MVC web application framework Exponent CMSA Content Management System web application framework using its own MVC framework modeled after Rails. ezpublishbased on ezcomponentsis an object-oriented web application framework written in PHP that separates its functionality into several abstraction layers, following a strict MVC approach. FengOfficeis an open source MVC Framework Extranetthat allows a group of geographically distributed people to collaborate by sharing information over the Internet. Joomla! v1.5.x is an open source content management system that employs the MVC model for its extensions, called components and modules. Kohanav2.x is an open source MVC framework, while v3.x is HMVC (both supported). LightVCis a lightweight MVC framework without the model. This decoupling allows any model or object relation mapping (ORM) tool to be used, including none at all if one is not needed. Released under the FreeBSD license. MODxA full-featured open source OOP MVC/ORB xpdo-based CMS. MooVCAn Object Oriented MVC Framework for PHP. Odin Assemble A Small footprint PHPbased MVC framework. OpenCartShopping cart which is fully based on MVC framework. phpxcorea MVC design pattern based PHP content management framework compatible with PHP4 and PHP5. PRADO FrameworkAn open source PHP5 framework for creating professional web applications. PureMVCA framework for PHP. QcodoAn open-source PHP 5 web application framework. RecessAn open-source framework focused on RESTfulAPI and advanced language features SilverStripe Contains a fully fledged PHP 5.2 ORM/MVC framework focused on building websites. Switch board (framework) A PHP 5 MVC framework with routing. Spawn FrameworkAn open source PHP5/OOP MVC framework SymfonyFrameworkA PHP 5 MVC framework modeled after the concepts of Ruby on Rails. YiiAn open source, object-oriented, high-performance component-based PHP web application framework. Zend FrameworkAn open-source PHP 5-based framework featuring an MVC layer and a broad-spectrum of loosely coupled components. 26 Exemple d Abstraction et de Présentation en Php interface Abstraction { public function affectecontroleur(control $c); public function recoitmessage($type, $attachement); interface Presentation { public function affectecontroleur(control $c); public function recoitmessage($type, $attachement); public function getview($type, $option); public function getuserentries(); // pour reception des formulaires... Exemple de Controleur en Php abstract class Control { protected $a; protected $p; protected $enfants = array(); protected $parent; abstract public function recoitmessagecontroleur($type, $attachement=""); abstract public function recoitmessagepresentation($type, $attachement=""); abstract public function recoitmessageabstraction($type, $attachement=""); abstract public function getview($type); public function affecteparent(control $p) { $this->parent = $p; public function ajouteenfant(control $arg0) { if (! in_array($arg0, $this->enfants)) { $this->enfants[] = $arg0; $arg0->affecteparent($this); protected function dispatchdownmessage($type, $att) { foreach ($this->enfants as $c) { $c->recoitmessagecontroleur($type, $att); protected function dispatchupmessage($type, $att) { if ($this->parent!= null) $this->parent->recoitmessagecontroleur($type, $att); 27 public function save() { // pour sauvegarde dans une session... Et avoir accès aux facettes $_SESSION[get_class($this)] = $this; if ($this->a) $_SESSION[get_class($this->a)] = $this->a; if ($this->p) $_SESSION[get_class($this->p)] = $this->p; foreach ($this->enfants as $c) { $c->save(); 28
Utilisation de PAC en Php La hiérarchie PAC créée une fois ($_SESSION) Traitement des informations préalables (formulaires, liens, etc.) recoitmessage Demande de page à l agent de plus haut niveau getview Ce controleur«racine» collecte les vues pour les afficher (echo) Règles Heuristiques Ensemble de règlesheuristiquespour construire la hiérachie d'agents PAC à partir d une maquette À l origine dans le Contrôleur de Dialogue dans PAC-Amodeus Source Modèle d architecture des systèmes interactifs, chapitre 7. 29 30 R2 : Vue multiple R2 : Vue multiple Agent vue multiple d'une "œuvre" Environnement Wall Environment Zone Region Preferences? Wall Place Route. Movable Object x Static Object Environment Point Zone Region Preferences? Wall Anchor x (m): Place Anchor y (m): Route Mouse x (m): 12. Movable Object Mouse y (m): 15 x Static Object Length (m): Point Chaleur Agent vue multiple d'une "œuvre" Un superagent garantit la cohérence visuelle agent vue superagent vue multiple agent vue agent vue Anchor x (m): Anchor y (m): Mouse x (m): 12 Mouse y (m): 15 Length (m): 31 32
PAC et MVC : vue multiple D autres Heuristiques C A P C C P C M V1 V2 R1 : fenêtre = un agent R3 : Palette de concepts Une palette de classes de concept = un agent Une barre de menu = un agent R4 : zone d édition Une zone d édition = un agent Condition : être suffisamment complexe R5 : correspondance agent / concept Un concept complexe = un agent 34 Heuristiques de liaison R9 : Ciment syntaxique R6 : d une fenêtre à une autre Les deux sont sous le même agent parent commun R9 : Ciment syntaxique Agent ciment pour "analyse syntaxique distribuée Agent ciment pour "analyse syntaxique distribuée" Un superagent cimente les actions distribuées superagent ciment agent agent agent 35 action de l'utilisateur action de l'utilisateur action de l'utilisateur
Heuristiques de simplification R10 : un agent fils unique peut être regroupé avec son père Attention à la modularité / réutilisation / évolution R11 : un agent dont la fonction est réalisée par un objet de la boîte à outils graphique devient un composant de la présentation de son père. Corollaire de R11 Un objet d interaction non implémenté par la plate-forme -> un agent Un espace de travail -> un agent Un objet mur -> un agent 37 38 Exemple de développement : TROC projet France Telecom IIHM (clips, LIG) TROC : analyse des besoins Analyse des besoins Conception Conception logicielle Evaluation ergonomique Tests utilisateur Tests d intégration Définition du jeu Qui joue Contexte du jeu Règle du jeu Arbre de tâche Tests unitaires Codage Note : le cycle de vie d une interface est ici représenté en V et sans retour sur les étapes précédentes de manière analytique
Troc : spécifications exeternes Troc : un exemple d architecture 42 Troc : architecture pac (-amodeus) Troc : architecture pac (-amodeus)
Troc : retour d expérience, reconception Troc : architecture après re-conception 45 46