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 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