SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
Interfaces Graphiques
Jean-Baptiste.Yunes@univ-paris-diderot.fr	

Université Paris Diderot	

©2014
Un paradigme
• GUI Graphical User Interface, Interface Utilisateur
Graphique, un type d’interface :	

• plus riche que le simple clavier et l’affichage en
mode texte	

• un paradigme	

• une représentation picturale	

• un mode d’interaction gestuel
2
Un paradigme
• c’est un paradigme très répandu aujourd’hui	

• mais qui n’a pas que des avantages...	

• Neal Stephenson	

• In the beginning was the command line
http://fr.wikipedia.org/wiki/Neal_Stephenson
3
Un paradigme
• on considère habituellement que le père des GUI
est Douglas Engelbart (1962)	

• AUGMENTING HUMAN INTELLECT: A
Conceptual Framework	

• mais que dire du projet SAGE 1950-1983 ?
http://www.williamson-labs.com/480_cpu.htm
4
Un paradigme
• on considère habituellement que le père des GUI
est Douglas Engelbart (1962)	

• AUGMENTING HUMAN INTELLECT: A
Conceptual Framework	

• mais que dire du projet SAGE 1950-1983 ?
5
http://www.williamson-labs.com/480_cpu.htm
Event-driven
• qu’est ce que ce type d’application a de particulier ?	

• son architecture	

• c’est l’utilisateur qui décide...	

• ...ou plutôt ce sont les évènements qui
décident	

• event-driven programming, event-driven design
6
Event-driven
• Event-driven programming ?	

• une boucle principale :	

• (event detection) retirer un évènement	

• (event handling) distribuer l’évènement à la partie
logicielle concernée
7
User-centric
• La clé de tout lorsqu’on conçoit un programme
utilisant une interface graphique c’est de suivre le
conseil suivant :	

• une interface est bien conçue lorsque le
programme se comporte comme l’utilisateur
pense qu’il doit : user centric	

• ceci nécessite une conception soignée
8
Architecture
• Quelle architecture ?	

!
• un système de fenêtrage (windowing system)	

• un gestionnaire de fenêtres (window manager)	

• des outils et bibliothèques d’objets (tools  API)
9
Architecture
• système de fenêtrage	

• X Window System (monde Unix) aka X11R7.6	

• Quartz (Apple)	

• Windows (Microsoft)	

!
• fournit aux applications un espace (graphique)
d’accueil propre
10
Architecture
• gestionnaire de fenêtre (window manager)	

• kde	

• gnome	

• twm	

• motif	

• etc.	

• aqua	

• dwm (Desktop Window Manager)	

• gère l’ensemble des fenêtres et uniformise leur
manipulation
11
Architecture
• outils et bibliothèque d’objets (toolkits)	

• Xt, Xaw, Motif	

• GTK+	

• FLTK	

• Qt	

• wxWidgets	

• Cocoa	

• uniformise la représentation visuelle des objets
standards
12
Aqua/Quartz (MacOSX)
13
Photo d’écran, source privée
kde/X11 (Linux)
14
Photo d’écran KDE, source Wikipédia
gnome/X11 (Linux)
15
Photo d’écran Gnome, source Wikipédia
DWM (Windows 7)
16
Photo d’écran Windows 7, source privée
Un exemple
• idée générale :	

• programmer sans de préoccuper des aspects
graphiques	

!
• toutefois il existe des règles à suivre pour créer une
interface graphique dans un environnement donné	

• les guidelines
17
Guides de conception
• KDE User Interface Guidelines	

• Windows User Experience Interaction Guidelines	

• Guide de l’Interface Utilisateur de Gnome	

• Apple Human Interface Guidelines	

• etc.
18
• suivre les règles permet d’obtenir une application
qui se comporte comme attendu	

!
• les API permettant en grande partie de garantir la
conformité vis-à-vis de ces règles	

!
• il n’y a donc qu’à se focaliser sur les aspects
abstraits ou logiques
19
• un programme utilisant une interface graphique
compliquée n’est pas nécessairement complexe	

• les API offrent en général des objets tout faits
permettant de rendre la plupart des services
généraux attendus...	

• afficher un message dans une fenêtre, par
exemple...
20
Bonjour (minimal)
import javax.swing.JOptionPane;!
!
public class Bonjour {!
public static void main(String[] args) {!
JOptionPane.showMessageDialog( null, Bonjour! );!
}!
}
Linux (kde) MacOSX
Bonjour.java
Linux (gnome)Linux (twm) Windows 7
21
Bonjour (à la main)
import javax.swing.*; !
import java.awt.*;!
import java.awt.event.*;!
!
public class Bonjour {!
private static void creeInterface() {!
JFrame frame = new JFrame(Application Bonjour);!
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);!
JLabel label = new JLabel(Bonjour!);!
JButton button = new JButton(Ok);!
button.addActionListener(new ActionListener() {!
! ! public void actionPerformed(ActionEvent e) {!
! ! System.exit(0);!
! ! }!
! });!
frame.getContentPane().setLayout(new FlowLayout());!
frame.getContentPane().add(label);!
frame.getContentPane().add(button);!
frame.pack();!
frame.setVisible(true);!
}!
!
public static void main(String[] args) {!
javax.swing.SwingUtilities.invokeLater(new Runnable() {!
public void run() {!
creeInterface();!
}!
});!
}!
}
La même chose à la main
22
• Que sont/font tous ces objets ?	

• Comment interfèrent-ils les uns avec les autres ?	

• C’est le sujet central de ce cours	

• Comprendre la structure d’une API d’une
interface graphique	

• nous étudierons celle de Java : Swing	

• mais les autres sont assez semblables au
moins dans leur principe
23
• En préliminaire on peut dire que les interfaces
graphiques :	

• constituent un domaine pour lequel le paradigme
objet est assez efficace	

• font une utilisation intensive de divers design
pattern	

• si vous avez déjà tout oublié : révisez…
24
Décomposition d’une interface
25
AWT; Swing
• GUI Java	

• Historiquement :	

• AWT Abstract Window Toolkit	

• son utilisation directe est considérée comme
obsolète	

• sa disponibilité est conservée car :	

• Swing, basé sur AWT...	

• il existe aussi SWT...
26
AWT vs Swing
• AWT	

• les composants sont lourds (heavyweight), i.e. ils
ont tous un pair natif attaché...	

• la conception d’AWT est thread-safe, trop lourd...	

• Swing	

• sauf les composants racine, ils sont légers
(lightweight)
27
• JFC Java Foundation Classes	

• composants Swing	

• look-and-feel	

• accessibilité	

• API 2D	

• internationalisation
28
• 12 packages AWT
29
java.awt 

java.awt.color 

java.awt.datatransfer 

java.awt.dnd 

java.awt.event 

java.awt.font 

java.awt.geom 

java.awt.im 

java.awt.im.spi 

java.awt.image 

java.awt.image.renderable 

java.awt.print
javax.swing 

javax.swing.border 

javax.swing.colorchooser 

javax.swing.event 

javax.swing.filechooser 

javax.swing.plaf 

javax.swing.plaf.basic 

javax.swing.plaf.metal 

javax.swing.plaf.multi
javax.swing.plaf.nimbus 

javax.swing.plaf.synth 

javax.swing.table 

javax.swing.text 

javax.swing.text.html 

javax.swing.text.html.parser 

javax.swing.text.rtf 

javax.swing.tree 

javax.swing.undo
• 18 packages Swing (JSE 7)
30
JFrame
import javax.swing.*; !
import java.awt.*;
import java.awt.event.*;
!
public class Bonjour {
private static void creeInterface() {
JFrame frame = new
JFrame(Application Bonjour);
frame.setDefaultCloseOperation(JFrame.EXIT_
ON_CLOSE);
JLabel label = new
JLabel(Bonjour!);
JButton button = new JButton(Ok);
button.addActionListener(new
ActionListener() {
• JFrame ?	

• un des quatres conteneurs racine
(top-level containers) JFrame,
JDialog, JWindow, JApplet	

• il faut au moins un conteneur pour
afficher quelque chose...
31
JLabel
import javax.swing.*; !
import java.awt.*;!
import java.awt.event.*;
!
public class Bonjour {
private static void creeInterface() {
JFrame frame = new
JFrame(Application Bonjour);
frame.setDefaultCloseOperation(JFrame.EXIT_
ON_CLOSE);
JLabel label = new
JLabel(Bonjour!);
JButton button = new JButton(Ok);
button.addActionListener(new
ActionListener() {
• JLabel ?	

• un composant permettant d’afficher
un texte court, une image ou les deux	

• il est passif
32
JButton
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
!
public class Bonjour {
private static void creeInterface() {
JFrame frame = new
JFrame(Application Bonjour);
frame.setDefaultCloseOperation(JFrame.EXIT_
ON_CLOSE);
JLabel label = new
JLabel(Bonjour!);
JButton button = new JButton(Ok);
button.addActionListener(new
ActionListener() {
• JButton ?	

• un composant permettant d’obtenir
une interaction basique avec
l’application	

33
Listener
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
!
public class Bonjour {
private static void creeInterface() {
JFrame frame = new
JFrame(Application Bonjour);
frame.setDefaultCloseOperation(JFrame.EXIT_
ON_CLOSE);
JLabel label = new
JLabel(Bonjour!);
JButton button = new JButton(Ok);
button.addActionListener(new
ActionListener() {
• JButton ?	

!
• addActionListener permet
d’associer une réaction au clic, ici on
termine l’application	

34
• JFrame contient :	

• un JRootPane qui lui-même est composé : 	

• d’un glassPane (Component) qui recouvre un
JLayeredPane lequel contient :	

• un contentPane (Container)	

• éventuellement une JMenuBar
35
• le contentPane par défaut est	

• descendant de JComponent	

• lequel utilise un BorderLayout	

• note : les composants Swing sont des
Containers AWT...
36
• pack() :	

• calcule les tailles adéquates permettant une
représentation raisonnable à l’écran de la
hiérarchie construite
37

Contenu connexe

Tendances

Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Javajollivetc
 
JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesIppon
 
Du JavaScript dans mon projet
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projetjollivetc
 
TP Git avancé DevoxxFR 2018 (exercices)
TP Git avancé DevoxxFR 2018 (exercices)TP Git avancé DevoxxFR 2018 (exercices)
TP Git avancé DevoxxFR 2018 (exercices)Jérôme Tamborini
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Guide javascript
Guide javascriptGuide javascript
Guide javascriptjollivetc
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 

Tendances (10)

Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Java
 
JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à Achilles
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Du JavaScript dans mon projet
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projet
 
TP Git avancé DevoxxFR 2018 (exercices)
TP Git avancé DevoxxFR 2018 (exercices)TP Git avancé DevoxxFR 2018 (exercices)
TP Git avancé DevoxxFR 2018 (exercices)
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Guide javascript
Guide javascriptGuide javascript
Guide javascript
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Algo poo ts
Algo poo tsAlgo poo ts
Algo poo ts
 

En vedette

Fil conducteur industrie n°30
Fil conducteur industrie n°30Fil conducteur industrie n°30
Fil conducteur industrie n°30CAE GROUPE
 
SearchCongress Valencia KanvasMedia Miguel Orense ¿Hablemos de SEO..?
SearchCongress Valencia KanvasMedia Miguel Orense ¿Hablemos de SEO..?SearchCongress Valencia KanvasMedia Miguel Orense ¿Hablemos de SEO..?
SearchCongress Valencia KanvasMedia Miguel Orense ¿Hablemos de SEO..?search congress
 
Insee : Bilan auto-entrepreneurs depuis 2009
Insee : Bilan auto-entrepreneurs depuis 2009Insee : Bilan auto-entrepreneurs depuis 2009
Insee : Bilan auto-entrepreneurs depuis 2009Nathalie SALLES
 
MaestríA Diversidad 4º Didactica Juan Jacobo Rousseau Y El Naturalismo En La
MaestríA Diversidad 4º Didactica  Juan Jacobo Rousseau Y El Naturalismo En LaMaestríA Diversidad 4º Didactica  Juan Jacobo Rousseau Y El Naturalismo En La
MaestríA Diversidad 4º Didactica Juan Jacobo Rousseau Y El Naturalismo En LaAdalberto
 
Presentacion De Curriculo
Presentacion De CurriculoPresentacion De Curriculo
Presentacion De CurriculoAdalberto
 
SALESFACTORY : Détecter ses réservoirs de croissance à périmètre constant
SALESFACTORY : Détecter ses réservoirs de croissance à périmètre constantSALESFACTORY : Détecter ses réservoirs de croissance à périmètre constant
SALESFACTORY : Détecter ses réservoirs de croissance à périmètre constantCustomer Insight
 
JoomsessionAbijan'11-Communaute Ivoirienne
JoomsessionAbijan'11-Communaute IvoirienneJoomsessionAbijan'11-Communaute Ivoirienne
JoomsessionAbijan'11-Communaute IvoirienneBacely YoroBi
 
Document cadre relatif à l'accès à la qualification des jeunes
Document cadre relatif à l'accès à la qualification des jeunesDocument cadre relatif à l'accès à la qualification des jeunes
Document cadre relatif à l'accès à la qualification des jeunesNathalie SALLES
 
Fil conducteur n°30
Fil conducteur n°30Fil conducteur n°30
Fil conducteur n°30CAE GROUPE
 
Optimiser son informatique igretec 27 10-2011
Optimiser son informatique igretec 27 10-2011Optimiser son informatique igretec 27 10-2011
Optimiser son informatique igretec 27 10-2011DorotheeJ
 
Liste des évènements de la campagne jeunes Adie
Liste des évènements de la campagne jeunes AdieListe des évènements de la campagne jeunes Adie
Liste des évènements de la campagne jeunes AdieNathalie SALLES
 
Septiembre Refuerzo AcadéMico
Septiembre Refuerzo AcadéMicoSeptiembre Refuerzo AcadéMico
Septiembre Refuerzo AcadéMicoAdalberto
 
Passer de client a fan
Passer de client a fanPasser de client a fan
Passer de client a fankmatie
 
IE Bercy n°24 (11/2012) : interview de Bruno Racouchot (page 10)
IE Bercy n°24 (11/2012) : interview de Bruno Racouchot (page 10)IE Bercy n°24 (11/2012) : interview de Bruno Racouchot (page 10)
IE Bercy n°24 (11/2012) : interview de Bruno Racouchot (page 10)Bruno Racouchot
 

En vedette (20)

Fil conducteur industrie n°30
Fil conducteur industrie n°30Fil conducteur industrie n°30
Fil conducteur industrie n°30
 
SearchCongress Valencia KanvasMedia Miguel Orense ¿Hablemos de SEO..?
SearchCongress Valencia KanvasMedia Miguel Orense ¿Hablemos de SEO..?SearchCongress Valencia KanvasMedia Miguel Orense ¿Hablemos de SEO..?
SearchCongress Valencia KanvasMedia Miguel Orense ¿Hablemos de SEO..?
 
Insee : Bilan auto-entrepreneurs depuis 2009
Insee : Bilan auto-entrepreneurs depuis 2009Insee : Bilan auto-entrepreneurs depuis 2009
Insee : Bilan auto-entrepreneurs depuis 2009
 
MaestríA Diversidad 4º Didactica Juan Jacobo Rousseau Y El Naturalismo En La
MaestríA Diversidad 4º Didactica  Juan Jacobo Rousseau Y El Naturalismo En LaMaestríA Diversidad 4º Didactica  Juan Jacobo Rousseau Y El Naturalismo En La
MaestríA Diversidad 4º Didactica Juan Jacobo Rousseau Y El Naturalismo En La
 
P point 1
P point 1P point 1
P point 1
 
Presentacion De Curriculo
Presentacion De CurriculoPresentacion De Curriculo
Presentacion De Curriculo
 
SALESFACTORY : Détecter ses réservoirs de croissance à périmètre constant
SALESFACTORY : Détecter ses réservoirs de croissance à périmètre constantSALESFACTORY : Détecter ses réservoirs de croissance à périmètre constant
SALESFACTORY : Détecter ses réservoirs de croissance à périmètre constant
 
JoomsessionAbijan'11-Communaute Ivoirienne
JoomsessionAbijan'11-Communaute IvoirienneJoomsessionAbijan'11-Communaute Ivoirienne
JoomsessionAbijan'11-Communaute Ivoirienne
 
Mes tisanes : chambres d'hôtes Aux Vieux Chênes
Mes tisanes : chambres d'hôtes Aux Vieux ChênesMes tisanes : chambres d'hôtes Aux Vieux Chênes
Mes tisanes : chambres d'hôtes Aux Vieux Chênes
 
Document cadre relatif à l'accès à la qualification des jeunes
Document cadre relatif à l'accès à la qualification des jeunesDocument cadre relatif à l'accès à la qualification des jeunes
Document cadre relatif à l'accès à la qualification des jeunes
 
Hobby
HobbyHobby
Hobby
 
Fil conducteur n°30
Fil conducteur n°30Fil conducteur n°30
Fil conducteur n°30
 
Mex
MexMex
Mex
 
Teststress jd
Teststress jdTeststress jd
Teststress jd
 
Optimiser son informatique igretec 27 10-2011
Optimiser son informatique igretec 27 10-2011Optimiser son informatique igretec 27 10-2011
Optimiser son informatique igretec 27 10-2011
 
Liste des évènements de la campagne jeunes Adie
Liste des évènements de la campagne jeunes AdieListe des évènements de la campagne jeunes Adie
Liste des évènements de la campagne jeunes Adie
 
Zone presentations synergise 2 activities
Zone presentations synergise 2 activitiesZone presentations synergise 2 activities
Zone presentations synergise 2 activities
 
Septiembre Refuerzo AcadéMico
Septiembre Refuerzo AcadéMicoSeptiembre Refuerzo AcadéMico
Septiembre Refuerzo AcadéMico
 
Passer de client a fan
Passer de client a fanPasser de client a fan
Passer de client a fan
 
IE Bercy n°24 (11/2012) : interview de Bruno Racouchot (page 10)
IE Bercy n°24 (11/2012) : interview de Bruno Racouchot (page 10)IE Bercy n°24 (11/2012) : interview de Bruno Racouchot (page 10)
IE Bercy n°24 (11/2012) : interview de Bruno Racouchot (page 10)
 

Similaire à Introduction aux interfaces.

JavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxJavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxVincent Petetin
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienNicolas Carlo
 
L'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsL'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsThomas Bassetto
 
Java 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuchJava 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuchTarek Halloul
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1Gilles Guirand
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Guillaume Laforge
 

Similaire à Introduction aux interfaces. (20)

JavaSwing.pdf
JavaSwing.pdfJavaSwing.pdf
JavaSwing.pdf
 
Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015
 
Swing
SwingSwing
Swing
 
Les composants de Swing
Les composants de SwingLes composants de Swing
Les composants de Swing
 
JavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxJavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentaux
 
Presentation de gwt maven
Presentation de  gwt mavenPresentation de  gwt maven
Presentation de gwt maven
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
GeneralitesGUI1.pdf
GeneralitesGUI1.pdfGeneralitesGUI1.pdf
GeneralitesGUI1.pdf
 
Chap10
Chap10Chap10
Chap10
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidien
 
Hello xcode 4 v2
Hello xcode 4 v2Hello xcode 4 v2
Hello xcode 4 v2
 
Hello Xcode 4 v2
Hello Xcode 4 v2Hello Xcode 4 v2
Hello Xcode 4 v2
 
L'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsL'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objets
 
Java 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuchJava 2015 2016_zied_elleuch
Java 2015 2016_zied_elleuch
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1
 
Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008Introduction à Groovy - OpenSource eXchange 2008
Introduction à Groovy - OpenSource eXchange 2008
 

Introduction aux interfaces.

  • 2. Un paradigme • GUI Graphical User Interface, Interface Utilisateur Graphique, un type d’interface : • plus riche que le simple clavier et l’affichage en mode texte • un paradigme • une représentation picturale • un mode d’interaction gestuel 2
  • 3. Un paradigme • c’est un paradigme très répandu aujourd’hui • mais qui n’a pas que des avantages... • Neal Stephenson • In the beginning was the command line http://fr.wikipedia.org/wiki/Neal_Stephenson 3
  • 4. Un paradigme • on considère habituellement que le père des GUI est Douglas Engelbart (1962) • AUGMENTING HUMAN INTELLECT: A Conceptual Framework • mais que dire du projet SAGE 1950-1983 ? http://www.williamson-labs.com/480_cpu.htm 4
  • 5. Un paradigme • on considère habituellement que le père des GUI est Douglas Engelbart (1962) • AUGMENTING HUMAN INTELLECT: A Conceptual Framework • mais que dire du projet SAGE 1950-1983 ? 5 http://www.williamson-labs.com/480_cpu.htm
  • 6. Event-driven • qu’est ce que ce type d’application a de particulier ? • son architecture • c’est l’utilisateur qui décide... • ...ou plutôt ce sont les évènements qui décident • event-driven programming, event-driven design 6
  • 7. Event-driven • Event-driven programming ? • une boucle principale : • (event detection) retirer un évènement • (event handling) distribuer l’évènement à la partie logicielle concernée 7
  • 8. User-centric • La clé de tout lorsqu’on conçoit un programme utilisant une interface graphique c’est de suivre le conseil suivant : • une interface est bien conçue lorsque le programme se comporte comme l’utilisateur pense qu’il doit : user centric • ceci nécessite une conception soignée 8
  • 9. Architecture • Quelle architecture ? ! • un système de fenêtrage (windowing system) • un gestionnaire de fenêtres (window manager) • des outils et bibliothèques d’objets (tools API) 9
  • 10. Architecture • système de fenêtrage • X Window System (monde Unix) aka X11R7.6 • Quartz (Apple) • Windows (Microsoft) ! • fournit aux applications un espace (graphique) d’accueil propre 10
  • 11. Architecture • gestionnaire de fenêtre (window manager) • kde • gnome • twm • motif • etc. • aqua • dwm (Desktop Window Manager) • gère l’ensemble des fenêtres et uniformise leur manipulation 11
  • 12. Architecture • outils et bibliothèque d’objets (toolkits) • Xt, Xaw, Motif • GTK+ • FLTK • Qt • wxWidgets • Cocoa • uniformise la représentation visuelle des objets standards 12
  • 14. kde/X11 (Linux) 14 Photo d’écran KDE, source Wikipédia
  • 15. gnome/X11 (Linux) 15 Photo d’écran Gnome, source Wikipédia
  • 16. DWM (Windows 7) 16 Photo d’écran Windows 7, source privée
  • 17. Un exemple • idée générale : • programmer sans de préoccuper des aspects graphiques ! • toutefois il existe des règles à suivre pour créer une interface graphique dans un environnement donné • les guidelines 17
  • 18. Guides de conception • KDE User Interface Guidelines • Windows User Experience Interaction Guidelines • Guide de l’Interface Utilisateur de Gnome • Apple Human Interface Guidelines • etc. 18
  • 19. • suivre les règles permet d’obtenir une application qui se comporte comme attendu ! • les API permettant en grande partie de garantir la conformité vis-à-vis de ces règles ! • il n’y a donc qu’à se focaliser sur les aspects abstraits ou logiques 19
  • 20. • un programme utilisant une interface graphique compliquée n’est pas nécessairement complexe • les API offrent en général des objets tout faits permettant de rendre la plupart des services généraux attendus... • afficher un message dans une fenêtre, par exemple... 20
  • 21. Bonjour (minimal) import javax.swing.JOptionPane;! ! public class Bonjour {! public static void main(String[] args) {! JOptionPane.showMessageDialog( null, Bonjour! );! }! } Linux (kde) MacOSX Bonjour.java Linux (gnome)Linux (twm) Windows 7 21
  • 22. Bonjour (à la main) import javax.swing.*; ! import java.awt.*;! import java.awt.event.*;! ! public class Bonjour {! private static void creeInterface() {! JFrame frame = new JFrame(Application Bonjour);! frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);! JLabel label = new JLabel(Bonjour!);! JButton button = new JButton(Ok);! button.addActionListener(new ActionListener() {! ! ! public void actionPerformed(ActionEvent e) {! ! ! System.exit(0);! ! ! }! ! });! frame.getContentPane().setLayout(new FlowLayout());! frame.getContentPane().add(label);! frame.getContentPane().add(button);! frame.pack();! frame.setVisible(true);! }! ! public static void main(String[] args) {! javax.swing.SwingUtilities.invokeLater(new Runnable() {! public void run() {! creeInterface();! }! });! }! } La même chose à la main 22
  • 23. • Que sont/font tous ces objets ? • Comment interfèrent-ils les uns avec les autres ? • C’est le sujet central de ce cours • Comprendre la structure d’une API d’une interface graphique • nous étudierons celle de Java : Swing • mais les autres sont assez semblables au moins dans leur principe 23
  • 24. • En préliminaire on peut dire que les interfaces graphiques : • constituent un domaine pour lequel le paradigme objet est assez efficace • font une utilisation intensive de divers design pattern • si vous avez déjà tout oublié : révisez… 24
  • 26. AWT; Swing • GUI Java • Historiquement : • AWT Abstract Window Toolkit • son utilisation directe est considérée comme obsolète • sa disponibilité est conservée car : • Swing, basé sur AWT... • il existe aussi SWT... 26
  • 27. AWT vs Swing • AWT • les composants sont lourds (heavyweight), i.e. ils ont tous un pair natif attaché... • la conception d’AWT est thread-safe, trop lourd... • Swing • sauf les composants racine, ils sont légers (lightweight) 27
  • 28. • JFC Java Foundation Classes • composants Swing • look-and-feel • accessibilité • API 2D • internationalisation 28
  • 29. • 12 packages AWT 29 java.awt 
 java.awt.color 
 java.awt.datatransfer 
 java.awt.dnd 
 java.awt.event 
 java.awt.font 
 java.awt.geom 
 java.awt.im 
 java.awt.im.spi 
 java.awt.image 
 java.awt.image.renderable 
 java.awt.print
  • 30. javax.swing 
 javax.swing.border 
 javax.swing.colorchooser 
 javax.swing.event 
 javax.swing.filechooser 
 javax.swing.plaf 
 javax.swing.plaf.basic 
 javax.swing.plaf.metal 
 javax.swing.plaf.multi javax.swing.plaf.nimbus 
 javax.swing.plaf.synth 
 javax.swing.table 
 javax.swing.text 
 javax.swing.text.html 
 javax.swing.text.html.parser 
 javax.swing.text.rtf 
 javax.swing.tree 
 javax.swing.undo • 18 packages Swing (JSE 7) 30
  • 31. JFrame import javax.swing.*; ! import java.awt.*; import java.awt.event.*; ! public class Bonjour { private static void creeInterface() { JFrame frame = new JFrame(Application Bonjour); frame.setDefaultCloseOperation(JFrame.EXIT_ ON_CLOSE); JLabel label = new JLabel(Bonjour!); JButton button = new JButton(Ok); button.addActionListener(new ActionListener() { • JFrame ? • un des quatres conteneurs racine (top-level containers) JFrame, JDialog, JWindow, JApplet • il faut au moins un conteneur pour afficher quelque chose... 31
  • 32. JLabel import javax.swing.*; ! import java.awt.*;! import java.awt.event.*; ! public class Bonjour { private static void creeInterface() { JFrame frame = new JFrame(Application Bonjour); frame.setDefaultCloseOperation(JFrame.EXIT_ ON_CLOSE); JLabel label = new JLabel(Bonjour!); JButton button = new JButton(Ok); button.addActionListener(new ActionListener() { • JLabel ? • un composant permettant d’afficher un texte court, une image ou les deux • il est passif 32
  • 33. JButton import javax.swing.*; import java.awt.*; import java.awt.event.*; ! public class Bonjour { private static void creeInterface() { JFrame frame = new JFrame(Application Bonjour); frame.setDefaultCloseOperation(JFrame.EXIT_ ON_CLOSE); JLabel label = new JLabel(Bonjour!); JButton button = new JButton(Ok); button.addActionListener(new ActionListener() { • JButton ? • un composant permettant d’obtenir une interaction basique avec l’application 33
  • 34. Listener import javax.swing.*; import java.awt.*; import java.awt.event.*; ! public class Bonjour { private static void creeInterface() { JFrame frame = new JFrame(Application Bonjour); frame.setDefaultCloseOperation(JFrame.EXIT_ ON_CLOSE); JLabel label = new JLabel(Bonjour!); JButton button = new JButton(Ok); button.addActionListener(new ActionListener() { • JButton ? ! • addActionListener permet d’associer une réaction au clic, ici on termine l’application 34
  • 35. • JFrame contient : • un JRootPane qui lui-même est composé : • d’un glassPane (Component) qui recouvre un JLayeredPane lequel contient : • un contentPane (Container) • éventuellement une JMenuBar 35
  • 36. • le contentPane par défaut est • descendant de JComponent • lequel utilise un BorderLayout • note : les composants Swing sont des Containers AWT... 36
  • 37. • pack() : • calcule les tailles adéquates permettant une représentation raisonnable à l’écran de la hiérarchie construite 37