Projet Programmation orientée objet (POO)

  • Published on
    23-Feb-2016

  • View
    27

  • Download
    2

Embed Size (px)

DESCRIPTION

Universit Antonine 2010 - 2011. Projet Programmation oriente objet (POO). Plan dtaill. Initiation Java Interfaces Graphiques Awt Swing Evnements ActionListener MouseListener Etc. Rappel sur les notions de POO Application Client - Serveur Base de donnes - PowerPoint PPT Presentation

Transcript

<p>Base de Donnes</p> <p>Projet Programmation oriente objet (POO)Universit Antonine 2010 - 2011</p> <p>1Plan dtaill Initiation JavaInterfaces GraphiquesAwtSwingEvnementsActionListenerMouseListenerEtc.Rappel sur les notions de POOApplication Client - Serveur Base de donnes Threading et Gestion du Graphisme</p> <p>Plan dtaill Initiation C#Interface GraphiqueManipulation FichiersEditeur de TexteRseaux et Sockets Serveur ChatConnaissances Acquises Elaborer une bonne dmarche scientifique ncessaire pour le dveloppement dune application</p> <p>Intgrer les interfaces de programmation ncessaires lapplication en question. </p> <p>Dvelopper des applications dotes dinterfaces graphiques et/ou de communication (client/serveur).Connaissances Requises Des notions de bases en </p> <p>Algorithmique L3G</p> <p>Algorithme OOInitiation Java Introduction Java Orient objetJava ne permet d'utiliser que des objets (hors les types de base)</p> <p>Sr</p> <p>Seul le bytecode est transmis, et vrifi par linterprteurLe code source est prserv</p> <p>7Caractristiques du langage Java SimpleApprentissage facile faible nombre de mots-clssimplifications des fonctionnalits essentiellesDveloppeurs oprationnels rapidement</p> <p>FamilierSyntaxe proche de celle de C/C++8Caractristiques du langage Java FiableGestion automatique de la mmoire(ramasse-miette ou "garbage collector")Gestion des exceptionsSources d'erreurs limitestypage fort, (le type est impos)pas d'hritage multiple,pas de manipulations de pointeurs, etc.Vrifications faites par le compilateur facilitant une plus grande rigueur du codeVrification des types, des constructeurs des classes, 9Java, un langage InterprtJava est un langage interprtLa compilation d'un programme Java cre du pseudo-code portable : le "byte-code"Sur n'importe quelle plate-forme, une machine virtuelle Java peut interprter le pseudo-code afin qu'il soit excutLes machines virtuelles Java peuvent tre des interprteurs de byte-code indpendants (pour excuter les programmes Java)contenues au sein d'un navigateur(pour excuter des applets Java)1011</p> <p>Fichier C(.c)Compilateur C</p> <p>Codeexecutablelangage Compil1112</p> <p>Fichier Java(.java)Compilateur Javac</p> <p>bytecode(.class)Machine Virtuelle javaCodeexecutablelangage interprt 1213LAPI de JavaJava fournit de nombreuses librairies de classes remplissant des fonctionnalits trs diverses : c'est l'API Java Ces classes sont regroupes, par catgories, en paquetages (ou "packages")Swing Java2DJava3DJAAS (Java Authentication and Authorization Service)Java Security FrameworkEtc.Interface Graphique en JAVAAPIs correspondantesAWT Utilise des composants du systmes Swing (Sun Microsystems)Composants entirement dessins en Java SWT (Standard Widget Toolkit)Initialement dveloppe par IBMMaintenu par Eclipse foundationUne librairie graphiqueUtilise les composants du systme dexploitation( comme le dll WinApi,..)Elle est plus riche que AWT/Swing</p> <p>SWING </p> <p>Les Fentres JWindowConteneur que vous pouvez afficher sur votre cranJframeFentre destine tre la fentre principale de votre applicationJDialogFentre destine aux botes de dialogueLancer un message davertissementEntrer les donnesNote the JoptionPane example(JavaApplication1/JButton7)</p> <p>. showConfirmDialog. showMessageDialog. showInputDialog. showOptionDialogJFrameimport javax.swing.JFrame;</p> <p>public class SimpleFenetre extends JFrame{</p> <p>public SimpleFenetre(){super();build();//On initialise notre fentre}</p> <p>private void build(){setTitle("Ma premire fentre"); //On donne un titre l'applicationsetSize(320,240); //On donne une taille notre fentresetLocationRelativeTo(null); //On centre la fentre sur l'cransetResizable(false); //On interdit la redimensionnement de la fentresetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit l'application de se fermer lors du clic sur la croix}}Les Fentres JDialogFentre destine aux botes de dialogue. showConfirmDialog int rep=jOptionPane1.showConfirmDialog(this, "Cont O/N:Presss Escape or Close for Cancel", "My_title", jOptionPane1.CLOSED_OPTION);</p> <p> //0 si OK, -1 si ESCAPE or CLOSE</p> <p> System.out.println("reponse="+rep);</p> <p>Les Fentres JDialogFentre destine aux botes de dialogue. showMessageDialog</p> <p> jOptionPane1.showMessageDialog(this, "Eggs are not supposed to be green.", "Inane warning", jOptionPane1.WARNING_MESSAGE);</p> <p>Les Fentres JDialogFentre destine aux botes de dialogue. showOptionDialog</p> <p> Object[] options = {"Yes, please", "No, thanks", "No eggs, no ham!"};</p> <p> int n = jOptionPane1.showOptionDialog(this, "Would you like some green eggs to go + "with that ham?", "A Silly Question", jOptionPane1.YES_NO_CANCEL_OPTION, jOptionPane1.QUESTION_MESSAGE, null, options, options[2]); System.out.println("n=" + n + "!");</p> <p>Les Fentres JDialogFentre destine aux botes de dialogue. showInputDialog</p> <p> Object[] possibilities = {"ham", "spam", "yam"}; //possibilities=null;</p> <p> String s = (String)jOptionPane1.showInputDialog( this, "Complete the sentence:\n + "\"Green eggs and...\"", "Customized Dialog", jOptionPane1.WARNING_MESSAGE, null, possibilities, "ham");</p> <p>//If a string was returnedif ((s != null) &amp;&amp; (s.length() &gt; 0)) { System.out.println("Green eggs and... " + s + "!");}</p> <p>Positionnement des composantsLes LayoutsBorderLayout GridLayoutFlowLayout CardLayout BoxlayoutEtc.</p> <p>BorderLayoutDivise ses composants en 5 rgions : nord, sud, ouest, est, et centre. "nord" et "sud" occupent toute la largeur de la partie rserve nord ou sud,"ouest" et "est" occupent toute la hauteur qui reste de la partie rserve ouest et est,Centre" occupe la place restante. BorderLayoutDemo: JavaApplication1\NewJFrame1</p> <p>BorderLayout main_layout=new BorderLayout(5,5);</p> <p>this.setLayout(main_layout);(this=mainFrame)</p> <p>Panel p1=new Panel();this.add(p1, BorderLayout._____) north, center, south, west, east)p1.setLayout( A layout for p1)</p> <p>GridLayoutComposants sur une grille, ligne par ligne (dans l'ordre d'adjonction),Les cellules ont la mme taille, la retaille, les cellules se taillent,hgap et vgap sont nuls par dfaut.Demo:JavaApplication1\NewJFrameFrameGridLayout 5 lignes 0 colonneJpanels dans JframeJpanels GridLayout2 lignes 0 colonneGridLayout(int lignes, int cols, int hgap, int vgap)GridLayout(int lignes, int cols)</p> <p>FlowLayoutFlowLayout est le gestionnaire par dfaut des Panel. Affiche les composants de la gauche vers la droite, et passe la ligne s'il n'y a plus de place.FlowLayout(int align, int hgap, int vgap)FlowLayout(int align)FlowLayout()e.g.FlowLayout fl=new FlowLayout(FlowLayout.center,0,2)FlowLayout</p> <p>CardLayout</p> <p>CardLayout</p> <p>BoxLayout</p> <p>BoxLayout</p> <p>BoxLayout</p> <p>BoxLayout</p> <p>BoxLayout</p> <p>BoxLayout</p> <p>public class Frame1 extends JFrame{ public Frame1() { super(); this.setTitle("Ma premiere application"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null);</p> <p> BorderLayout bLayout= new BorderLayout(); this.getContentPane().setLayout(bLayout); JPanel buttonsPanel = new JPanel(); JPanel textPanel = new JPanel(); JLabel label = new JLabel("Nom: "); JTextField textField = new JTextField(20); JButton btok = new JButton("ok"); textPanel.add(label); textPanel.add(textField); buttonsPanel.add(btok);</p> <p> this.getContentPane().add(buttonsPanel, BorderLayout.SOUTH); this.getContentPane().add(textPanel, BorderLayout.CENTER); this.pack(); this.setVisible(true); }}</p> <p>La mthode main public static void main (String args[]) {</p> <p>Frame1 frame = new Frame1(); } Exercice Dveloppez le code qui permet dafficher la fentre suivante </p> <p>Java et Evnements Que se passe-t-il lors d'un clic ?En java, un clic gnre un vnement (Un objet)</p> <p>import javax.swing.*;</p> <p>public class FenetreAvecBouton extends JFrame {</p> <p>private JButton unBouton;private Jpanel pane = new JPanel ();</p> <p>public FenetreAvecBouton (){JButton unBouton = new JButton("Quitter");pane.add (unBouton);setContentPane(pane);//or this.getContentPane().add(pane);}</p> <p>public static void main (String args []) {new FenetreAvecBouton().setVisible (true);}}</p> <p>16-43Eventspublic class GoHandler implements ActionListener{ ... public void actionPerformed (ActionEvent e) { ... }} ... JButton go = new JButton (Go); go.addActionListener (new GoHandler ());</p> <p>Create the Listener:Objects of this class are GoHandlers but also ActionListenersRegister the Listener:This method expects an ActionListener object (GoHandler)This method is called automatically when the button is clicked43ActionListener specifies one method:</p> <p> void actionPerformed(ActionEvent e);EventsL'objet vnement de Java est un objet de type EventObject</p> <p>Tout objet de type EventObject a un attribut source qui peut tre rcupr en utilisant la fonction getSource() de la class EventObject</p> <p>Hirarchie des vnements </p> <p>Qui cre ce type d'objet ?Un Thread (comme le EventDispatchingThread) dans JVM permet de rcuprer les interactions de lutilisateur avec lapplication Si on clique sur un composant, ce thread cre un vnement relatif laction ralise en utilisant le composant comme source de lvnementEnsuite il appel le handler correspondant ce composantCependant, on ne cre pas les vnements: on se contente de les grer Explication additionnelleQui cre ce type d'objet ?</p> <p>La gestion des vnements Pour pouvoir grer les vnements, il faut les couter</p> <p>Tout le principe de la programmation vnementielle repose sur la dfinition des vnements et des objets qui les coutentCatgories des vnementsPour chaque catgorie dvnements, il existe une interface qui doit tre respecte par toute classe souhaitant recevoir cette catgorie vnements.Cette interface exige que toutes les mthodes soient dfinies.Ces mthodes sont appeles lorsque des vnements particuliers surviennent.</p> <p>Catgories des vnements</p> <p>Quest ce quun couteur Le diapo prcdent indique que chaque catgorie une interface est associeUn couteur est un objet destin recevoir et grer une catgorie d vnement gnrs par le systmeN'importe quel objet peut devenir un couteur du moment quil implmente les mthodes dfinies dans l'interface.Ecouteurs Par dfaut, un couteur ne rcupre pas tous les vnements produits par le systme</p> <p>Il n'coute que les objets qu'on lui dit d'couter !</p> <p>Donc, Il doit tre associ un objet qui gnre des vnements</p> <p>Ainsi, les objets qui gnrent des vnements possdent des mthodes qui permettent de leur associer des couteursAjout dcouteursPour ajouter un couteur un composant : addActionListenerJButton, JCheckBox, JComboBox, JTextField et JRadioButton.addAdjustementListenerJScrollBaraddFocusListenertous les composants.addItemListenerJCheckBox, JRadioButton et JComboBox.addKeyListenerJTextField , saisie de texte au clavier.addMouseListener, addMouseMotionListenertous les composants.RsumUne mme catgorie peut tre utilise avec plusieurs objet, et un objet peut avoir plusieurs catgoriesLes mthodes de linterface correspondent aux diffrents vnements supports par cette catgorie Le nom de la catgorie dun vnement est gnralement utilis avecLinterface de lcouteur du lobjetLes mthodes de lcouteur et leur vnement pass en paramtreLa mthode de lobjet utilise pour ajouter l couteur cet objetPar exemple la catgorie d vnement Action correspondLinterface ActionListener La mthode ActionPerformed et l vnement ActionEvent en paramtreLa mthode addActionListener</p> <p>RsumLe eventdispatcher contrle les vnements amorcs partir de linterface graphiqueLes correspond leurs objets sourcesIl Cre les vnements catgories correspondantsSi des couteurs sont dclars pour ces evenements et enregistrs avec les objets sources alors le eventdiapatcher appelle les mthodes correspondantes de lcouteur tout en lui passant lvnement catgorie afin de rpondre lvnement</p> <p>import javax.swing.*;import java.awt.event.*;</p> <p>public class FenetreAvecBouton extends JFrameimplements ActionListener {</p> <p>private JButton unBouton;</p> <p>public FenetreAvecBouton (){Jpanel pane = new JPanel ();JButton unBouton = new JButton("Quitter");pane.add (unBouton);</p> <p>setContentPane(pane);}public void actionPerformed (ActionEvent e) {System.exit (0);}}</p> <p>import javax.swing.*;import java.awt.event.*;</p> <p>public class FenetreAvecBouton extends JFrameimplements ActionListener {</p> <p>private JButton unBouton;</p> <p>public FenetreAvecBouton (){Jpanel pane = new JPanel ();JButton unBouton = new JButton("Quitter");pane.add (unBouton);unBouton.addActionListener(this);setContentPane(pane);}public void actionPerformed (ActionEvent e) {System.exit (0);}}</p> <p>Le code prsent prcdemment est dconseill CorrectionIl sagit en effet de sparer les interfaces graphiques des vnements rcepteurs import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JOptionPane;</p> <p>public class MonEvent implements ActionListener {</p> <p> public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Test "); }</p> <p>}import javax.swing.*;import java.awt.event.*;</p> <p>public class FenetreAvecBouton extends JFrame{MonEvent event = new MonEvent();private JButton unBouton;</p> <p>public FenetreAvecBouton (){Jpanel pane = new JPanel ();JButton unBouton = new JButton("Quitter");pane.add (unBouton);unBouton.addActionListener(event);setContentPane(pane);}}Ou encoreimport javax.swing.*;import java.awt.event.*;</p> <p>public class FenetreAvecBouton extends JFrame{MonEvent event = new MonEvent();private JButton unBouton;</p> <p>public FenetreAvecBouton (){Jpanel pane = new JPanel ();JButton unBouton = new JButton("Quitter");pane.add (unBouton);unBouton.addActionListener(event);setContentPane(pane);}class MonEvent implements ActionListener {</p> <p> public void actionPerformed(ActionEvent e) { getContentPane().setBackground(Color.red); }}}Inner ClassA la possibilit daccder aux attributs de la classe principaleOu encoreimport javax.swing.*;import java.awt.event.*;</p> <p>public class FenetreAvecBouton extends JFrame{private JButton unBouton;</p> <p>public FenetreAvecBouton (){Jpanel pane = new JPanel ();JButton unBouton = new JButton("Quitter");pane.add (unBouton);unBouton.addActionListener(event);setContentPane(pane);}ActionListener event= new ActionListener {</p> <p> public void actionPerformed(ActionEvent e) { getContentPane().setBackground(Color.red); }}</p> <p>}ExerciceComment faire un couteur pour 2 objets</p> <p>Solutionimport javax.swing.*;import java.awt.event.*;</p> <p>public class FenetreAvecDeuxBouton extends JFrame{MonEvent event = new MonEvent();private JButton btOk = new JButton("ok");private JButton btCancel = new Jbutton("Cancel");</p> <p>publ...</p>