Algorithmique Programmation année 2 - Conception Orientée Objet Java vs PHP 2020-2021
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Algorithmique Programmation
année 2
Conception Orientée Objet
Java vs PHP
2020-2021 Thibault Carron - DUT MMI 2 1Plan du cours
Le langage Java : Vers la « programmation
orientée objet » // avec PHP Objet
3 CM, 3 TD, 7 TP
Objectif: Savoir concevoir et réaliser un programme
simple (4 à 10 classes), interactif, « standalone ».
Méthode: Réaliser un petit jeu progressivement en 5 TP avec
l’accompagnement de l’enseignant.
Evaluation: TP4 noté en séance, TP7 rendu final + 1 examen
théorique final
2018-2019 Thibault Carron - DUT MMI 2 2Le Langage Java: Introduction
Historique
Créé autour de 1995 , par Sun Microsystems,
racheté par Oracle en 2009.
« Write once, run everywhere »
Écrire une fois pour toutes des applications
capables de fonctionner dans tous les
environnements.
Définition d’une machine virtuelle Java
(JVM) sur laquelle les programmes écrits
devaient fonctionner.
2018-2019 Thibault Carron - DUT MMI 2 3Qu’est ce que Java?
Langage développé dans le but
d’augmenter la productivité des
programmeurs.
Langage orienté objets à haute sécurité.
Java est écrit en Java.
Java est extensible à l’infini: pour étendre
le langage, il suffit de développer de
nouvelles classes.
Langage n°1 sur selon index TIOBE
2018-2019 Thibault Carron - DUT MMI 2 42018-2019 Thibault Carron - DUT MMI 2 5
Java : Fonctionnement
Java est un langage compilé (il doit être
traduit dans le langage de la machine sur
laquelle il doit fonctionner.
Le compilateur Java traduit en fait , le code
source dans le langage d’une machine
virtuelle (JVM). Le code produit (bytecode) ne
peut pas être exécuté directement par le
processeur de l’ordinateur. Le bytecode est
ensuite confié à un interpréteur, qui le lit et
l’exécute.
2018-2019 Thibault Carron - DUT MMI 2 6Java: résumé
Java est un langage qui se veut:
efficace,
performant,
standard,
facile à apprendre,
gratuit
en constante évolution
Sources d’informations:
http://www.oracle.com/technetwork/java/index.html
Livre d’Anne Tasso (Le livre de Java premier langage)
Site clair: http://java.developpez.com/faq/java?page=Mots-cles
Newsgroup: fr.comp.java, divers forums de discussion car
communauté très active.
2018-2019 Thibault Carron - DUT MMI 2 7Rappels des bases
Algorithmique
Programmation
Exemple : faire calculer à l’ordinateur le
périmètre d’un cercle: 2 * PI * r
De quoi à ton besoin? (ref. Livre A. Tasso)
Déclarer les variables (p et r)
(issu du Livre A. Tasso)
2018-2019 Thibault Carron - DUT MMI 2 8Liste des opérations 1. Réserver 2 cases mémoire pour stocker les informations. 2. Demander à l’utilisateur un nombre et le placer dans la bonne case mémoire. 3. Ayant le rayon, calculer la valeur du périmètre. 4. Afficher le résultat 2018-2019 Thibault Carron - DUT MMI 2 9
Traduction en java Déclarer une variable: Saisir une valeur: 2018-2019 Thibault Carron - DUT MMI 2 10
Traduction en java (2)
Saisir une valeur (suite):
2018-2019 Thibault Carron - DUT MMI 2 112018-2019 Thibault Carron - DUT MMI 2 12
Instruction de début de programme: main() 2018-2019 Thibault Carron - DUT MMI 2 13
La classe… 2018-2019 Thibault Carron - DUT MMI 2 14
Résumé: Un Premier programme en Java
// Mon premier programme en Java
class PremierProgramme {
public static void main(String[] argv) {
System.out.println( ‘’Ca marche? ‘’) ;
}
}
C’est un fichier : PremierProgramme.java
2018-2019 Thibault Carron - DUT MMI 2 15Analyse du premier programme
1ère ligne : ligne de commentaires
Elle commence par //: tout ce qui est compris
entre ces deux caractères et la fin de la ligne
est ignoré.
2ième ligne: définition d’une nouvelle
classe Java.
Elle commence par le mot class, suivi du nom
de cette classe, qui est aussi le nom de notre
programme.
2018-2019 Thibault Carron - DUT MMI 2 16A savoir sur les classes.
Un programme comporte au moins une
classe.
Cette classe doit obligatoirement porter le
même nom que le fichier dans lequel le
programme est enregistré. (Le fichier
possède en plus l’extension .java).
En java, les majuscules et les minuscules
sont considérées comme des caractères
différents.
2018-2019 Thibault Carron - DUT MMI 2 17Analyse du premier programme(2)
A savoir sur les classes
2ième ligne: Elle se termine par le
caractère { qui marque le début d’un bloc.
La déclaration d’une nouvelle classe est
suivie de sa définition, celle-ci est incluse
dans un bloc ( { } ).
3ième ligne: C’est la première ligne de la
définition de la classe que nous sommes
en train de créer. Elle est un peu
complexe; sa partie fondamentale est :
void main() {
2018-2019 Thibault Carron - DUT MMI 2 18Analyse du premier programme(3)
main() { signifie que nous allons définir une
méthode, ce qui est indiqué entre autres par les
parenthèses ().
Le mot main est le nom de la méthode que nous
allons définir. Le mot void désigne le type de valeur
renvoyé par la méthode. Ici void signifie « rien »
(c’est-à-dire que cela correspond à une procédure et
non une fonction: la méthode ne renvoie pas de
valeur de retour à la fin de son exécution).
2018-2019 Thibault Carron - DUT MMI 2 19Analyse du premier programme (4)
Les paramètres que prend la méthode sont
placés entre les parenthèses, chaque paramètre
a un nom précédé de son type.
Dans le programme, elle prend un paramètre, dont le
nom est argv et qui est du type String[].
Les mots public et static décrivent chacun une
caractéristique de la méthode:
Public signifie que notre méthode peut être utilisée par n’importe
qui, c’est-à-dire par d’autres classes ou par l’interpréteur Java
(l’interpréteur a pour fonction principale d’exécuter la méthode
main du programme qu’on lui soumet).
Static (plus complexe : on verra plus tard).
2018-2019 Thibault Carron - DUT MMI 2 20Analyse du premier programme (5)
La quatrième ligne du programme
constitue le corps de la méthode main.
Elle comporte un appel à une méthode et
un paramètre.
La méthode appelée est println. Cette
méthode prend un paramètre de type chaîne
de caractères et affiche sa valeur sur la sortie
standard, en la faisant suivre d’un saut de
ligne. C’est une valeur littérale (placée entre
guillemets).
2018-2019 Thibault Carron - DUT MMI 2 21Analyse du premier programme (6)
La méthode println n’a pas été définie dans le
programme…D’où vient-elle?
Pour que l’interpréteur Java puisse l’utiliser, il faut lui
indiquer où il peut la trouver.
Les méthodes Java n’existent que dans des classes
ou des instances de classes: La méthode println
appartient à l’objet out et cet objet appartient à la
classe System qui est déjà définie en standard dans
le langage Java.
Une instruction se termine toujours par un ; .
2018-2019 Thibault Carron - DUT MMI 2 22(Juste pour info)
Première applet
Le programme que nous venons de créer était
une application (il doit être exécuté depuis une
ligne de commande).
Les applets sont un autre type de programmes
conçus pour être exécutés à l’intérieur d’une
page HTML, dans une fenêtre (destinées à être
diffusées sur Internet).
Nouvelles contraintes: il n’est pas possible d’utiliser la
sortie standard, de lire ou écrire sur le disque de
l’utilisateur (sécurité)….
2018-2019 Thibault Carron - DUT MMI 2 23Code de notre première applet
// Ma première applet Java
public class PremiereApplet extends java.applet.Applet
{
public void init()
{
add(new java.awt.Label( ‘’Ca marche !‘’));
}
}
Ce programme est enregistré sous le nom PremiereApplet.java
2018-2019 Thibault Carron - DUT MMI 2 24Intégration dans du code HTML
A enregistrer dans un fichier PremiereApplet.htm.
(Après avoir compilé le fichier .java, il suffit d’ouvrir le fichier .html
dans un navigateur)
2018-2019 Thibault Carron - DUT MMI 2 25Analyse du code de l’applet
2ième ligne: la classe que nous créons est
public pour que le navigateur HTML puisse
l’utiliser.
Par ailleurs, le nom de la classe est suivi
des mots:
extends java.applet.Applet
qui signifient que notre classe est définie par
extension d’une classe existante Applet
(chemin d’accès : java.applet).
2018-2019 Thibault Carron - DUT MMI 2 26Analyse du code de l’applet (2)
Définition de la méthode init() :
Elle ne retourne aucune valeur (de type void).
Elle est public
Elle n’utilise aucun paramètre (les parenthèses sont
toutefois obligatoires et permettent de repérer une méthode).
Ligne suivante: Définition de ce que fait la
méthode init.
Elle utilise la méthode add pour ajouter quelque
chose (ce qui est entre parenthèses):
Un objet de la classe java.awt.Label qui affiche simplement
une chaîne de caractères.
Le mot clé new, suivi du nom de la classe (et des éventuels
paramètres) permet de créer une instance de l’objet Label.
2018-2019 Thibault Carron - DUT MMI 2 27Analyse du code de l’applet (3)
Cette fois-ci, on a créé un objet (= un
représentant d’une classe existante) et
non une classe dérivant d’une autre
classe comme précédemment.
Exercice:
Fermez votre cours et essayez de recréer les
deux petits programmes vus précédemment.
2018-2019 Thibault Carron - DUT MMI 2 28Les Structures de contrôle
A savoir avant de commencer:
Les noms de Classes commencent par une
Majuscule.
Les noms d’instances, de variables ou de
méthodes commencent par une minuscule.
Lorsqu’un nom est composé de plusieurs
mots, les mots sont accolés et chacun d’eux
(sauf le premier, pour lequel les règles
précédentes s’appliquent) commence par une
majuscule.
2018-2019 Thibault Carron - DUT MMI 2 29La séquence
La structure la plus simple est la
séquence: plusieurs instructions qui se
suivent, sont exécutées les unes après les
autres, dans l’ordre dans lequel elles
figurent dans le programme.
Le branchement par appel de méthode
permet de détourner le flux d’exécution
d’un programme).
Cf. Exemple donné en cours
2018-2019 Thibault Carron - DUT MMI 2 30L’instruction de branchement
return
Le retour d’une méthode se fait à
l’instruction return si elle est présente, ou
à la fin du bloc dans le cas contraire. Une
méthode peut d’ailleurs contenir plusieurs
instructions return qui seront exécutées
en fonction de la réalisation de différentes
conditions.
2018-2019 Thibault Carron - DUT MMI 2 31Les instructions conditionnelles
L’instruction if prend pour paramètre une
expression de type booléen (boolean) placée
entre parenthèses. Cette expression est évaluée
et produit un résultat valant true ou false.
Syntaxe:
if (expression) instruction;
Ou
if (expression) {
instruction1;
instruction2;
…
}
2018-2019 Thibault Carron - DUT MMI 2 32Les instructions conditionnelles
L’instruction else permet de compléter la
richesse d’expression de l’instruction
conditionnelle:
if (expression) {
instruction1;
}
else {
instruction2; …
}
2018-2019 Thibault Carron - DUT MMI 2 33Les instructions conditionnelles (2)
SWITCH (VARIABLE) {
CASE valeur1 : instruction1 ;
Break ;
CASE valeur2 : instruction2 ;
Break ;
CASE valeur3 : instruction3 ;
Break ;
…
DEFAULT : instructions ; // sert à traiter les cas non prévus
2018-2019 Thibault Carron - DUT MMI 2 34Les actions itératives (boucles)
On connaît le nombre d’itérations (le nombre de
fois que l’on va passer dans la boucle).
Choix : boucle POUR.
FOR (initialisation, test, incrémentation) {
// Le test peut être appelé aussi condition.
instructions ;
}
2018-2019 Thibault Carron - DUT MMI 2 35Les actions itératives (boucles)
On ne connaît pas le nombre de fois que
l’on va parcourir la boucle et on peut ne
jamais passer dedans.
Choix : boucle TANTQUE.
WHILE (CONDITION) {
instructions ;
}
2018-2019 Thibault Carron - DUT MMI 2 36Les actions itératives (boucles)
On ne connaît pas le nombre de fois que
l’on va parcourir la boucle et on passe au
moins une fois dans la boucle.
Choix : boucle REPETER.
DO {
Instructions ;
}
WHILE (CONDITION) ;
2018-2019 Thibault Carron - DUT MMI 2 37Déclarer un tableau
Vecteur
Exemple : Déclaration d’un vecteur (tableau à 1 dimension)
de 100 entiers.
int[] vect = new int[100] ;
Tableau à plusieurs dimensions
Exemple : Déclaration d’un tableau à 3 dimensions d’entiers
représentant une année (7jours X 5semaines X 12mois).
int[] [] [] tableau3D = new int[12] [7] [5];
2018-2019 Thibault Carron - DUT MMI 2 38Les types de données (nombres)
Max ou
Initialisation
valeurs Exemple
par défaut
possibles
byte 127 89 0
short 32767 -3 0
int 2147483647 10 0
long 10E18 10 0
float 10E38 123.45678 0.0
double 10E308 2.1 0.0
2018-2019 Thibault Carron - DUT MMI 2 39Les types de données (divers)
Max ou
Initialisation
valeurs Exemple
par défaut
possibles
boolean true false true false
A-Z, a-z, ! @
char * ‘’
...
int i [];
xxx [ ] - selon le type
char tablo [] []
String ‘‘…….’’ ‘‘SRC ’’ ‘‘ ’’
2018-2019 Thibault Carron - DUT MMI 2 40Exemples
Comparer deux chaînes de caractère (strings):
Import java.io.*;
Class Str_Comp {
public static void main (String[ ] argv)) throws IOException {
BufferedReader in = new BufferReader (new
InputStreamReader(System.in));
System.out.println(« Entrez une chaîne de caractère, svp »);
String prem_str = in.readLine();
System.out.println(« Entrez une seconde chaîne, svp »);
String sec_str = in.readLine();
If (sec_str.length() > prem_str.length()) {
System.out.println(« La seconde est la plus grande »);
Else {
if (sec_str.length() < prem_str.length()) {
System.out.println(«La première est la plus grande»);}
else {
System.out.println(«Elles ont même longueur »);
} }} }
2018-2019 Thibault Carron - DUT MMI 2 41Exemple (2)
Négatif ou positif?
Import java.io.*;
Class Neg_Pos {
public static void main (String[ ] argv)) throws IOException {
BufferedReader in = new BufferReader (new
InputStreamReader(System.in));
System.out.println(« Entrez un nombre, svp »);
Integer nombre.intValue() = new Integer(in.readLine());
if (nombre.intValue() < 0) {
System.out.println(«Le nombre est négatif»);}
else {
System.out.println(«Le nombre est positif»);
} }
2018-2019 Thibault Carron - DUT MMI 2 42Créer une classe AireDeJeu
On considère qu’une AireDeJeu est avant tout une largeur et une
longueur.
// dérivation ou extension de notre classe depuis la classe Object
public class AireDeJeu extends Object {
// ************ partie déclaration *********************************
private int x,y; // position dans le repère
private int larg,haut; // dimension;
// ************ partie méthodes *********************************
// ************ partie méthodes constructeur *********************************
public AireDeJeu (int _x, int _y,int _larg, int _haut) {
x= _x; // x du coin haut gauche
y= _y; // y du coin haut gauche
larg= _larg; // largeur de la partie utile de l'aire de jeu
haut= _haut; // hauteur de la partie utile de l'aire de jeu
}
// ************ fin partie méthodes *********************************
} // fin def class AireDeJeu ****************************************
2018-2019 Thibault Carron - DUT MMI 2 43// dérivation ou extension de notre classe depuis la classe Object
public class AireDeJeu extends Object {
// ************ partie déclaration *********************************
private int x,y; // position dans le repère
private int larg,haut; // dimension;
private Color coul_aire; // couleur aire de jeu
// ************ partie méthodes *********************************
// ************ partie méthodes constructeur *********************************
public AireDeJeu (int _x, int _y,int _larg, int _haut) {
x= _x; // x du coin haut gauche
y= _y; // y du coin haut gauche
larg= _larg; // largeur de la partie utile de l'aire de jeu
haut= _haut; // hauteur de la partie utile de l'aire de jeu
coul_aire = new Color(150,128,0); // l'aire de jeu est marron pas beau
}
// ************ partie méthodes générales *********************************
public void dessiner(Graphics g) {
// dessin de l'aire de jeu, un rectangle.
g.setColor(coul_aire);
g.fillRect( x, y,larg,haut);
} // fin de la méthode dessiner
// ************ fin partie méthodes *********************************
} // fin def class AireDeJeu ****************************************
2018-2019 Thibault Carron - DUT MMI 2 44Comment créer un objet
Une nouvelle classe a été créée: AireDeJeu
Dans l’application, on va tout simplement déclarer une
nouvelle instance d’airedejeu et dans la méthode main(),
créer une nouvelle instance grâce à la méthode
constructeur:
//définition d'une aire de jeu
private AireDeJeu a1;
…
public void main() {
// instanciation d'une nouvelle aire de jeu
a1 =new AireDeJeu(20,20,600,400);
2018-2019 Thibault Carron - DUT MMI 2 45Appeler une méthode de
AireDeJeu
A créer dans une classe JFrame par exemple
…
// ************ partie méthodes *******
public void afficher(Graphics g) { // appelée paint normalement
a1.dessiner(g); // dessin de l'aire de jeu a1
…
2018-2019 Thibault Carron - DUT MMI 2 46Fenêtres et Boutons
Composants :
En java, les éléments de l’interface utilisateur sont des
composants, c'est-à-dire des objets dérivants de la
classe Component.
Les composants lourds : ceux dont l’implémentation dépend du
système comme « la fenêtre ». En effet, ce composant doit
communiquer avec le reste du système. Ils sont bien sûr réduits
au minimum. (Pas nécessaire d’aborder les concepts de
méthodes natives, etc...)
Les composants légers sont entièrement écrits en Java et sont
donc identiques sur tous les systèmes. Ex : un bouton (il n’est
pas dessiné par les système mais par Java).
2018-2019 Thibault Carron - DUT MMI 2 47Fenêtres et Boutons (2)
Les fenêtres :
Il y a plusieurs sortes de fenêtres : celles
créées par le système pour le programme
Java (composant lourd) et celles créées par
Java à l’intérieur de la première.
Java dispose de deux composants de ce
type : Window pour les applications locales et
Applet pour les programmes destinés à
fonctionner sur Internet et disposant de
restrictions de sécurité particulières).
2018-2019 Thibault Carron - DUT MMI 2 48Fenêtres et Boutons (3)
Hiérarchie des fenêtres JAVA
Window Applet
java.awt
Frame Dialog
JFrame JDialo JWindow JApplet JInternalFrame
g
javax.swing
JRootPane
2018-2019 Thibault Carron - DUT MMI 2 49Fenêtres et Boutons (4)
Les packages (bibliothèques de composants)
SWING (ou SWT, AWT) contiennent tous les
composants nécessaires pour créer une
interface.
Toutes ces fenêtres ont certaines
caractéristiques en commun. En particulier, elles
possèdent un composant de type JRootPane
qui recevra tous les éléments constituant le
contenu de la fenêtre (ex : barre de menu,
boutons, menus déroulant…).
2018-2019 Thibault Carron - DUT MMI 2 50Structure d’une fenêtre
JRootPane
glassPane layeredPane
Component JLayeredPane
contentPane
Component JMenuBar
(Optionnel)
2018-2019 Thibault Carron - DUT MMI 2 51Structure d’une fenêtre
Composition d’une fenêtre
menuBar
glassPane
layeredPane
JRootPane
contentPane
2018-2019 Thibault Carron - DUT MMI 2 52Créer une application fenêtrée
import javax.swing.*;
public class Window1 {
static JFrame maFenetre;
public static void main( string[] args) {
maFenetre = new JFrame(‘’ Ma fenêtre ’’ );
maFenetre.setBounds(100,100,300,200);
maFenetre.setVisible(true);
}
}
2018-2019 Thibault Carron - DUT MMI 2 53Composants Swing
Utilisation des composants Swing:
..\..\..\..\Bureau\Java\Raccourci vers
SwingSet2.html.lnk
Démos diverses:
..\..\..\..\Bureau\Java\Raccourci vers
Java2Demo.html.lnk
..\..\..\..\Bureau\Java\Raccourci vers
JavaSound.html.lnk
..\..\..\..\Bureau\Java\Raccourci vers
example1.html.lnk
2018-2019 Thibault Carron - DUT MMI 2 54Les événements
Intercepter les événements d’une fenêtre.
En java, tout est objet, les événements sont donc des
objets.
L’événement « fermeture de la fenêtre » est un objet qui est
« envoyé ». Chaque fois qu’une fenêtre est fermée, activée,
iconifiée, etc., un événement est créé et envoyé.
Chaque fois que la souris est déplacée ou qu’un de ses
boutons est cliqué, un événement est créé et envoyé.
Chaque fois qu’un article de menu est sélectionné, qu’une
case est cochée, qu’une bande de défilement est actionnée,
que le texte d’une zone de texte est modifié, un événement
est créé et envoyé.
2018-2019 Thibault Carron - DUT MMI 2 55Les événements (2)
Les événements ainsi envoyés doivent être
reçus pour être traités. C’est la fonction des
listeners.
Pour que l’événement correspondant à la
fermeture soit reçu (afin d’être traité), il faut que
cette fenêtre possède un listener correspondant
à ce type d’événement.
Il existe un type de listener pour chaque type
d’événement.
Un listener est simplement un objet qui contient
du code qui est exécuté lorsque l’objet reçoit un
événement.
2018-2019 Thibault Carron - DUT MMI 2 56Les événements(3)
Les événements sont des instances des
classes JAVA suivantes :
java.awt.event (14 événements et 13
listeners)
javax.swing.event (20 événements et 21
listeners)
2018-2019 Thibault Carron - DUT MMI 2 57Les événements : exemples
dans le package « swing » :
DocumentEvent, Document
Event.ElementChange, AncestorEvent,
CaretEvent, ChangeEvent, EventListenerList,
HyperlinkEvent, InternalFrameEvent,
ListDataEvent, ListSelectionEvent,
MenuDragMouseEvent, MenuEvent,
MenuKeyEvent, PopupMenuEvent,
TableColumnModelEvent, TableModelEvent,
TreeExpansionEvent, TreeModelEvent,
TreeSelectionEvent, UndoableEditEvent
2018-2019 Thibault Carron - DUT MMI 2 58Les listeners : exemples
dans le package « swing » :
AncestorListener, CaretListener, CellEditorListener,
ChangeListener, DocumentListener,
HyperlinkListener, InternalFrameListener,
ListDataListener, ListSelectionListener,
MenuDragMouseListener, MenuKeyListener,
MenuListener, MouseInputListener,
PopupMenuListener, TableColumnListener,
TableModelListener, TreeExpansionListener,
TreeModelListener, TreeSelectionListener,
TreeWillExpandListener, UndoableEditListener.
2018-2019 Thibault Carron - DUT MMI 2 59Exemple concret de récupération
d’événement :
Pour fermer l’application, en même temps que la fenêtre.
import javax.swing.* ;
import java.awt.event.* ;
public class windowtest {
static JFrame maFenetre ;
public static void main ( String [] args ) {
maFenetre = new JFrame (“ Ma fenêtre”);
maFenetre.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0) ;
}}) ;
maFenetre.setBounds( 100, 100, 300, 200) ;
maFenetre.setVisible(true) ;
}
}
2018-2019 Thibault Carron - DUT MMI 2 60Commentaires
sur l’exemple précédent
Il existe plusieurs solutions mais la plus
« élégante » est d’utiliser une classe
anonyme (cf. exemple précédent).
De cette façon, il n’est plus nécessaire de
faire référence à la classe externe et le code
du listener se trouve vraiment à l’endroit où il
est utilisé.
2018-2019 Thibault Carron - DUT MMI 2 61Exemple concret de récupération
d’événement (2):
Pour modifier la couleur du « Label » L1 du bouton B2.
…
B2 = new JButton(« Bleu ») ;
B2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
L1.setForeground(new Color(0, 0, 255));
L1.repaint(); // pour redessiner le composant Label
}});
…
2018-2019 Thibault Carron - DUT MMI 2 62Commentaire
un ActionListener reçoit les événements de
type ActionEvent.
Ces événements n’ont rien à voir avec la souris,
même si, ici, ils peuvent être générés par un clic.
Ils correspondent au fait qu’un bouton est
actionné. Cela peut se faire en cliquant, mais
également en sélectionnant le bouton à l’aide de
la touche tabulation et en l’actionnant à l’aide de
la barre d’espace.
2018-2019 Thibault Carron - DUT MMI 2 63Résumé Un objet réagit à des événements parce qu’il est doté d’un listener pour ce type d’événement. Cliquer sur un bouton ne fait rien si le bouton n’est pas doté d’un listener adéquat. Un listener est réalisé en implémentant l’interface xxxListener où xxx désigne le type d’événement écouté. Les types d’événements sont nommés xxxEvent. Un listener écoute un type d’événement et non un événement particulier. Le type WindowEvent (close, open, iconize, move, resize, …) en comporte 7 particuliers. Le type ActionEvent n’en comporte qu’un seul. Un listener n’a pas à déterminer quel événement précis l’a réveillé. Java s’en charge en invoquant automatiquement la méthode correspondant à l’événement. (L’événement est toutefois passé en paramètre à la méthode). 2018-2019 Thibault Carron - DUT MMI 2 64
Exemples à tester et compléter
Boîtes de dialogues (composants swing):
JOptionPane.showInputDialog(f, « SVP,
choisir un nom », « Exemple JList »,
JOptionPane.QUESTION_MESSAGE, null,
new Object[] { « Aurélie », « Gauthier », «
Thomas », « Vincent », « Marie », « Sonia »,
« Maxime »}, « Sonia»);
2018-2019 Thibault Carron - DUT MMI 2 65Exemples à tester et compléter (2)
JOptionPane.showInputDialog(f, « SVP,
entrez votre nom », « Exemple JTextfield »,
JOptionPane.QUESTION_MESSAGE, null,
null, « Vincent »);
2018-2019 Thibault Carron - DUT MMI 2 66Exemples à tester et compléter (3)
Fenêtre interne de dialogue avec boutons
modifiés (composants swing):
JOptionPane.showInternalOptionDialog(desk,
« SVP, sélectionner une couleur », «
Exemple Internal Frame Dialog»,
JOptionPane.DEFAULT_OPTION,
JOptionPane.QUESTION_MESSAGE, null,
new Object[] {« Red », « Green », « Blue »},
« Blue »);
2018-2019 Thibault Carron - DUT MMI 2 67Les layout managers
Tous les composants qui peuvent contenir
d’autres composants font appel à un layout
manager pour organiser la disposition des
composants. Il existe par défaut plusieurs layout
manager définis dans Java :
BorderLayout (nord, sud, est, ouest, centre),
GridLayout (mise en page quadrillée),
GridBagLayout,
FlowLayout (ligne /ligne)
…
2018-2019 Thibault Carron - DUT MMI 2 68L’architecture MVC
Modèle : description du mécanisme abstrait qui
représente l’objectif, le but du problème. Aucune
information n’existe sur une manière de le
représenter.
Vue : Représentation graphique du modèle. Il
peut exister différents types de vues dirigées par
le même et unique modèle
Contrôleur : Les modèles ne sont pas statiques:
les actions qui peuvent être faites pour modifier
leur état sont du ressort du contrôleur. Il sait ce
qui peut être fait au modèle et ce que l’utilisateur
doit faire pour accomplir cela.
2018-2019 Thibault Carron - DUT MMI 2 69L’architecture MVC
La bibliothèque graphique SWING intègre
directement cette architecture au sein de
ses composants.
Ex: La barre de curseur (JSlider)
Modèle: min, max, courant, pas
Vue: 2 boutons, un curseur.
Contrôleur: répondre aux clics sur les boutons ou
au glisser-déplacer du curseur pour augmenter ou
diminuer la valeur courante dans la limite des
bornes min et max.
2018-2019 Thibault Carron - DUT MMI 2 70Le cycle de développement d’une
application.
Schéma (source Tecfa) :
Corriger
Editeur Erreurs de
Entrer du code compilation
Compiler (« javac *.java »)
DEBUT
Pas OK
Compilateur
Ok (java *.class)
Changer JVM
Erreurs OK
d’exécution Pas OK Résultats
bons
Erreurs
logiques
FIN
2018-2019 Thibault Carron - DUT MMI 2 71La structure d’un programme JAVA
Programme
Fait avec des
Classes
Fait avec des
Membres
Champs ou Attributs Sont
Méthodes (void ou typed)
Sont
variables objets
Déclarés avec
types classes constructeurs paramètres champs Instructions
(champs)
2018-2019 Thibault Carron - DUT MMI 2 72Réaliser une application:
méthodologie succinte
1. Avoir à sa disposition, la documentation
JAVA (API) afin de trouver les classes
existantes et les méthodes pré-définies.
2. Utiliser les exemples donnés avec le
code source pour voir comment réaliser
ce que l’on souhaite.
3. Avoir une idée précise de ce que l’on
veut réaliser en s’appuyant sur un
modèle clair.
2018-2019 Thibault Carron - DUT MMI 2 73Et PHP Objet? La programmation objet a été intégrée à partir de la version 4 de PHP mais on ne peut parler de vraie programmation orientée objet qu’à partir de la version 5. On va retrouver tous les termes de la POO. Classe, instance, attribut, méthode 2018-2019 Thibault Carron - DUT MMI 2 74
Exemple de classe Source : https://apprendre-php.com/tutoriels/tutoriel-29-les-classes-et-objets.html 2018-2019 Thibault Carron - DUT MMI 2 75
Pour aller jeter un coup d’œil… https://apprendre- php.com/tutoriels/tutoriel-29-les-classes- et-objets.html (lisez aussi les commentaires bien instructifs) Vous verrez qu’il existe quelques différences: méthode __construct() pour construire un objet, pas de surcharge de constructeurs ou de méthodes, existence de méthodes « magiques », concept de « traits ». 2018-2019 Thibault Carron - DUT MMI 2 76
En conclusion
Vous connaissez les concepts OO donc
vous saurez lire et comprendre du PHP
Objet.
Pour en écrire, il y a des petites nuances
ou des limitations qui nécessiteront un peu
de travail.
2018-2019 Thibault Carron - DUT MMI 2 77Discussion…Retours
Mon auto-critique:
Mettre de la pratique plus tôt.
Proposer des sujets avec du « code tout prêt » à
analyser, à commenter puis à modifier.
Illustrer le lien POO et JAVA dans la pratique.
2018-2019 Thibault Carron - DUT MMI 2 78Vous pouvez aussi lire