Algorithmique Programmation année 2 - Conception Orientée Objet Java vs PHP 2020-2021

La page est créée Stéphane Noel
 
CONTINUER À LIRE
Algorithmique Programmation année 2 - Conception Orientée Objet Java vs PHP 2020-2021
Algorithmique Programmation
              année 2
            Conception Orientée Objet
                 Java vs PHP

2020-2021          Thibault Carron - DUT MMI 2   1
Plan 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               2
Le 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      3
Qu’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     4
2018-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         6
Java: 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             7
Rappels 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                              8
Liste 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   11
2018-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   15
Analyse 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        16
A 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   17
Analyse 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      18
Analyse 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       19
Analyse 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                    20
Analyse 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     21
Analyse 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           23
Code 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        24
Inté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               25
Analyse 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   26
Analyse 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                  27
Analyse 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    28
Les 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   29
La 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   30
L’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   31
Les 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   32
Les 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   33
Les 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          34
Les 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   35
Les 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   36
Les 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   37
Dé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   38
Les 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                39
Les 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                    40
Exemples
    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                  41
Exemple (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                 42
Cré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                   44
Comment 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    45
Appeler 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         46
Fenê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                   47
Fenê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    48
Fenê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                     49
Fenê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    50
Structure d’une fenêtre

                                  JRootPane

     glassPane                                        layeredPane

             Component              JLayeredPane

                 contentPane

                          Component                 JMenuBar

                                                   (Optionnel)

2018-2019                      Thibault Carron - DUT MMI 2          51
Structure d’une fenêtre
    Composition d’une fenêtre
                                                     menuBar

   glassPane

                                                   layeredPane

                                                 JRootPane

 contentPane

2018-2019          Thibault Carron - DUT MMI 2                 52
Cré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   53
Composants 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   54
Les é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                55
Les é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       56
Les é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   57
Les é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   58
Les 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           59
Exemple 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                60
Commentaires
               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         61
Exemple 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          62
Commentaire
    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     63
Ré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   65
Exemples à 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   66
Exemples à 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   67
Les 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    68
L’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      69
L’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        70
Le 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                             71
La 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                              72
Ré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   73
Et 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   77
Discussion…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   78
Vous pouvez aussi lire