Interfaces Graphiques

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Mathilde VINCENT - Olivier JOURDAN Paris - le 7/2/2012
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
Systèmes en temps réel Héritage avec les capsules.
Introduction à Java - les paquetages -
1 Les technologies XML Cours 1 : Les Web Services et Architectures Orientées Services Fé vrier Version 1.0 -
51 Les technologies XML Cours 7 : Utilisations dXML Janvier Version 1.0 -
Design Pattern MVC En PHP5.
Programmation Orientée Objet (POO)
Leçon 3 : Héritage IUP 2 Génie Informatique
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
Etude des Technologies du Web services
Programmation orientée objet
Principes de la technologie orientée objets
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
Réalisée par :Samira RAHALI
Sommaire Objectif de Peakup Principes de fonctionnement
Chaque use-case génère un ou des scénarios, traduits par des diagrammes objets, qui permettent d’introduire et/ou de compléter les diagrammes des catégories.
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Classes abstraites et Interfaces
Vers la conception objet
POO : Objets et classes (Rappels)
Modélisation orientée objet UML
Structures de données IFT-2000
Structures de données IFT-10541
Projet de diplôme 2011 Miserez David
Introduction au paradigme orienté-objet (suite)
Présentation du mémoire
1. 2 Toolkits Il existe 4 principales boites à outils (toolkits) graphiques : –Xt / Motif –Gtk –Windows –Qt Seul certaines fonctionnent sur toutes les.
INF1101 Algorithmes et structures de données
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Classes et objets Types de données abstraits, programmation orientée objet, classes, objets,
Patrons de conceptions de créations
Héritage et composition
Travaux Pratiques Représentation des connaissances
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Proposition pour un modèle à grains extrêmement fins David Fauthoux directeur : Jean-Paul Bahsoun IRIT.
11/04/ L'héritage Cours 7 Cours 7.
Le contenu est basé aux transparents du 7 ème édition de «Software Engineering» de Ian Sommerville«Software Engineering» de Ian Sommerville B.Shishedjiev.
Interfaces graphiques. Composants d'interface utilisateur graphique (GUI) 1 Bibliothèques Awt et Swing Procédures communes pour l'utilisation de ces clases.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
PHP objet Jérôme CUTRONA 10:13:27 Programmation Web
François CARCENAC,Frédéric BONIOL ONERA-DTIM Zoubir MAMMERI IRIT
Présentation du framework JSF (Java Server Faces) dans le modèle événementiel MVCII
Les classes Introduction aux Langages Orientés Objets
La programmation par objets Principes et concepts Etude de Smalltalk.
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.
Architecture Client/Serveur
La programmation par objets
Introduction à la Programmation Orientée Objet
Présentation de Qt Iris 1
Signal et Slot de Qt Iris 1
Initiation aux bases de données et à la programmation événementielle
Master 1 SIGLIS Jave Lecteur Stéphane Tallard Chapitre 5 – Correction TD.
Dreamweaver MX Jauneau Marie Claude-Antoine Zarate.
Chapitre 7: Héritage Présentation pour Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus Java Software.
Diagrammes de comportement Présentation. Diagramme de séquence  Permet de modéliser les envois de messages entre objets chronologiquement.  Modélisation.
Transcription de la présentation:

Interfaces Graphiques MVC Alexis Clay

Introduction Importance des interfaces graphiques de nos jours (à part les informaticiens, qui utilise la console?) Importance bien construire le code pour une meilleure extensibilité, réusabilité, modifiabilité Ce cours s'appuie sur le cours d'IHM de Patrick Reuter (LaBRI), sur divers sites (dont site du zéro et doc java) et sur l'expérience personnelle :p Alexis Clay

Plan du cours Rappels POO Le patron Observer/Observable Le pattern MVC Exemple 1 : Java Swing Exemple 2: C++/ Qt Le modèle d'architecture en agents PAC Conclusion… … Présentation Java Swing! Alexis Clay

Rappels Programmation Orientée Objet Quelques rappels basiques… Alexis Clay

Rappels: POO Classe: "moule", structure, description d'un objet Objet: élément concret, suivant la structure donnée par une classe Instanciation: créer un objet à partir d'une classe. Un objet est une instance de classe Une classe (et donc ses instances) contient: Des attributs Des méthodes Alexis Clay

Rappels: POO Ecapsulation Le concept d'accessibilité (encapsulation) définit la possibilité qu'a le concepteur d'une classe de restreindre l'accès à certaines données, ou plus généralement à certains éléments (méthodes, classes, ...). public : un élément public est accessible de partout et sans aucune restriction. Certaines classes (comme la classe principale main) doivent obligatoirement être déclarées publiques (pour pouvoir exécuter l'application...) private : un élément private (privé) est accessible uniquement au sein de la classe dans laquelle il est déclaré. Ces éléments ne peuvent être manipulés qu'à l'aide de méthode spécifiques appelés accesseur et mutateur. protected : un élément protected (protégé) est accessible uniquement aux classes d'un package et à ses classes filles. Alexis Clay

Rappels POO Héritage L'héritage est un mécanisme permettant de créer une nouvelle classe à partir d'une classe existante en lui proférant ses propriétés et ses méthodes. Ainsi, pour définir une nouvelle classe, il suffit de la faire hériter d'une classe existante et de lui ajouter de nouvelles propriétés/méthodes. De cette façon, les classes héritées forment une hiérarchie descendante, au sommet de laquelle se situe la classe de base (superclasse). On appelle également la classe héritée la sous-classe et la classe parente la super- classe. Alexis Clay

Rappels POO Polymorphisme Polymorphisme par héritage Polymorphisme paramétrique Alexis Clay

Le pattern Observable/Observateur Alexis Clay

Découpler les rôles Partie Interface Partie Métier Alexis Clay

Le pattern Observable/Observeur Premier pas vers le découplage Exemple: horloge en Java swing (merci site du zéro!) Jlabel monlabel =… monlabel.setText("…") Alexis Clay

Solution: utilisation d'interfaces (au sens programmation objet) Alexis Clay

Ex: Horloge (observé) Alexis Clay

Ex: VueHorloge (Observateur) Alexis Clay

Exemple: découplage Grâce à l'utilisation d'interfaces on a découplé la vue (la fenêtre) et le modèle (le code pour l'horloge)  Il est possible de changer la vue (d'implémenter une autre classe) sans toucher au modèle… Il suffit que la nouvelle vue implémente l'interface Observateur… Il est possible de mettre plusieurs vues! Alexis Clay

Exemple: ajout d'une vue en AWT Alexis Clay

Exemple: Ajout de vues Modèle Horloge Mets toi à jour! Vue2 AWT Swing Alexis Clay

Le pattern MVC Modèle Vue Contrôleur, pour découpler les rôles et mieux surveiller les actions de l'utilisateur Alexis Clay

Modèle Vue Contrôleur Motif de conception pour le développement d'applications logicielles qui sépare le modèle de données, l'interface utilisateur et la logique de contrôle. Ce motif a été mis au point en 1979 par Trygye Reenskang, qui travaillait alors sur Smalltalk dans les laboratoires de recherche Xerox PARC Alexis Clay

Principe Découper le code en 3 parties afin d’assurer le découplage et proposer une meilleure Réusabilité Extensibilité Modifiabilité La vue: l’interface Le modèle: la logique métier (ex: connexions à une base de données, calculs divers) Le contrôleur: lien entre les deux, routines de contrôle (pattern stratégie) Alexis Clay

MVC Alexis Clay

MVC: déroulement Contrôleur ? Transmission de la valeur contrôlée (appel d'une méthode du modèle) Envoi de la valeur au contrôleur Vue Modèle Clic utilisateur Le modèle notifie la vue: MAJ. (cf pattern Observateur/Observable) Alexis Clay

Envoyer des signaux: programmation évènementielle Programmation basée sur des évènements  Chaque élément du programme réagit à des évènements Programmation séquentielle: Le programmeur "décide" l'ordre des fonctions à appeler et structure son programme ainsi. Programmation évènementielle: le programmeur établit les évènements qui peuvent survenir et implémente les réactions Alexis Clay

La programmation évènementielle Chaque élément capable de réagir doit donc être à l'écoute des évènements qui le concernent. Ex: clic croix ( )  invocation des instructions pour fermer l'application Développé entre autres pour les GUI: on ne peut prévoir les interactions, il faut réagir aux choix de l'utilisateur Faire le parallèle en Alexis Clay

Exemple 1 : Java Swing Utilisation des évènements et implémentation du MVC Alexis Clay

Exemples de mécanismes: Java Swing Les Widgets graphiques (bouton, zone de texte, menu déroulant, etc) sont implémenté eux-même selon MVC. Tous les Widgets sont Observable Ils peuvent donc être Observés Le système d'évènement/Listener est une encapsulation d'Observable/Observateur Pour créer un récepteur d'évènement (un listener), il suffit d'implémenter une interface Alexis Clay

Exemple de mécanismes: Java Swing Alexis Clay

Exemple de mécanismes: Java Swing Ex: code pour un bouton VUE ECOUTEUR Alexis Clay

Exemple de mécanisme: Java Swing CLASSE Contrôleur CLASSE Evènement Transmission de la valeur contrôlée (appel d'une méthode du modèle) Envoi de la valeur au contrôleur CLASSE Vue CLASSE Modèle Clic utilisateur Le modèle notifie la vue: MAJ. (cf pattern Observateur/Observable) Alexis Clay

Exemple 2 : C++ et Qt Les mécanismes de signaux et slots et implémentation du MVC Alexis Clay

C++/Qt: présentation Qt: Librairie de classes C++ Initialement pour les GUI S'est considérablement développé depuis! Alexis Clay

C++/Qt: présentation Avantages: librairie complète et unifiée Ajoute un niveau d'abstraction au C++ et le rend complètement objet Un préprocesseur transforme le code propre à Qt en code C++. Principalement (dans ce qui nous intéresse): Toute classe dérive de Qobject QObject intègre un mécanisme de signaux et slots! Alexis Clay

C++ Qt – Signaux et slot Qt abstrait la notion d'évènement à une implémentation simple, en introduisant deux types supplémentaires de méthodes: Les signaux (envoient des évènements) Les slots (recoivent des évènements) Toutes les classes peuvent implémenter des signaux et slots  Plus besoin de Listener! Toute classe est un listener potentiel. Alexis Clay

C++ Qt – Signaux et slot N'importe qu'elle classe Qt (créée par vous) peut faire intervenir des signaux et slots Il est très simple de créer de nouveaux signaux et slots.  Nouveau paradigme: Une classe est un composant qui peut émettre des données sans savoir à qui, et recevoir des données sans savoir de qui. MaClasse MesSignaux Alexis Clay

C++ Qt – Signaux et slots Créer des signaux/slots: GUIspeed.h Signaux: .h : définir la signature dans la catégorie "signals:" Les signaux sont publics par définition .cpp: mot-clé "emit" pour envoyer un signal Slots: .h : signature dans les catégories "public slots:" ou "private slots:" .cpp : implémentation comme n'importe qu'elle autre méthode! Alexis Clay

C++ Qt – Signaux et slot Connexions entre signaux et slots Méthode connect de Qobject Méthode A crée une instance de B A crée une instance de C A peut maintenant connecter les signaux et slots entre B et C. Alexis Clay

Exemple d'implémentation de MVC MVC en Qt: Les références aux objets sont nécessaires pour effectuer les connexions Par ex, une classe composite le fait CLASSE Contrôleur Signal: action Utilisateur Signal: valeur contrôlée CLASSE Modèle CLASSE Vue Signal: nouvel état du modèle Alexis Clay

Le modèle d'architecture en agents PAC Pour un découplage complet des rôles de Vue, modèle et contrôle. Alexis Clay

Un autre modèle d'architecture: modèle en agents PAC CLASSE Modèle CLASSE Vue CLASSE Contrôleur CLASSE Modèle Signal: valeur contrôlée Signal: action Utilisateur Signal: MAJ vue Signal: nouvel état du modèle CLASSE Vue CLASSE Modèle CLASSE Vue CLASSE Modèle CLASSE Vue Signal: nouvel état du modèle Alexis Clay

Le modèle PAC Présentation: Vue Abstraction: modèle Contrôle Ici TOUTES les communications passent par la facette Contrôle Hiérarchisation possible des agents en arbre Alexis Clay

Modèle PAC: bénéfices Découplage total de l'abstraction (modèle) et de la présentation (vue) Découplage total des agents  architecture en composants indépendants Alexis Clay

Exemple: eMotion Alexis Clay

Conclusion Architecture: améliorer Du code. L'extensibilité La modifiabilité La réutilisabilité Du code.  Découplage des différentes parties Plus complexe au départ à modéliser quand on ne maîtrise pas encore bien MAIS code bien mieux structuré, et répondant aux exigences ci-dessus Alexis Clay

Conclusion Le pattern MVC L'architecture en agents PAC Le plus courant Vu ici sur client lourd mais applicable à d'autres contextes (exemple, M2VC pour le Web) L'architecture en agents PAC Grand découplage Architecture en agents Alexis Clay