projet programmation orient e objet poo n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Projet Programmation orientée objet (POO) PowerPoint Presentation
Download Presentation
Projet Programmation orientée objet (POO)

Loading in 2 Seconds...

play fullscreen
1 / 248

Projet Programmation orientée objet (POO) - PowerPoint PPT Presentation


  • 94 Views
  • Uploaded on

Université Antonine 2010 - 2011. Projet Programmation orientée objet (POO). Plan détaillé. Initiation Java Interfaces Graphiques Awt Swing Evénements ActionListener MouseListener Etc. Rappel sur les notions de POO Application Client - Serveur Base de données

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Projet Programmation orientée objet (POO)' - nikita


Download Now An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
plan d taill
Plan détaillé
  • Initiation Java
  • Interfaces Graphiques
    • Awt
    • Swing
  • Evénements
    • ActionListener
    • MouseListener
    • Etc.
  • Rappel sur les notions de POO
  • Application Client - Serveur
    • Base de données
  • Threading et Gestion du Graphisme
plan d taill1
Plan détaillé
  • Initiation C#
  • Interface Graphique
  • Manipulation Fichiers
    • Editeur de Texte
  • Réseaux et Sockets
    • Serveur Chat
connaissances acquises
Connaissances Acquises
  • Elaborer une bonne démarche scientifique nécessaire pour le développement d’une application
  • Intégrer les interfaces de programmation nécessaires à l’application en question.
  • Développer des applications dotées d’interfaces graphiques et/ou de communication (client/serveur).
connaissances requises
Connaissances Requises
  • Des notions de bases en
    • Algorithmique L3G
    • Algorithme OO
introduction java
Introduction Java
  • Orienté objet
    • Java ne permet d'utiliser que des objets (hors les types de base)
  • Sûr
    • Seul le bytecode est transmis, et «vérifié» par l’interpréteur
      • Le code source est préservé
caract ristiques du langage java
Caractéristiques du langage Java
  • Simple
    • Apprentissage facile
      • faible nombre de mots-clés
      • simplifications des fonctionnalités essentielles
    • Développeurs opérationnels rapidement
  • Familier
    • Syntaxe proche de celle de C/C++
caract ristiques du langage java1
Caractéristiques du langage Java
  • Fiable
    • Gestion automatique de la mémoire(ramasse-miette ou "garbagecollector")
    • Gestion des exceptions
    • Sources d'erreurs limitées
      • typage fort, (le type est imposé)
      • pas d'héritage multiple,
      • pas de manipulations de pointeurs, etc.
    • Vérifications faites par le compilateur facilitant une plus grande rigueur du code
      • Vérification des types, des constructeurs des classes, …
java un langage interpr t
Java, un langage Interprété
  • Java est un langage interprété
    • La compilation d'un programme Java crée du pseudo-code portable : le "byte-code"
    • Sur n'importe quelle plate-forme, une machine virtuelle Java peut interpréter le pseudo-code afin qu'il soit exécuté
  • Les machines virtuelles Java peuvent être
    • des interpréteurs de byte-code indépendants (pour exécuter les programmes Java)
    • contenues au sein d'un navigateur(pour exécuter des applets Java)
langage compil
langage Compilé

Compilateur C

Fichier C

(.c)

Code

executable

langage interpr t
langage interprété

Compilateur

Javac

Fichier Java

(.java)

bytecode(.class)

Machine Virtuelle

java

Code

executable

l api de java
L’API de Java
  • Java fournit de nombreuses librairies de classes remplissant des fonctionnalités très diverses : c'est l'API Java
  • Ces classes sont regroupées, par catégories, en paquetages (ou "packages")
    • Swing
    • Java2D
    • Java3D
    • JAAS (Java Authentication and Authorization Service)
      • Java Security Framework
    • Etc.
apis correspondantes
APIs correspondantes
  • AWT
    • Utilise des composants du systèmes
  • Swing (Sun Microsystems)
    • Composants entièrement dessinés en Java
  • SWT (Standard WidgetToolkit)
    • Initialement développée par IBM
    • Maintenu par Eclipse foundation
    • Une librairie graphique
    • Utilise les composants du système d’exploitation( comme le dll WinApi,..)
    • Elle est plus riche que AWT/Swing
les fen tres
Les Fenêtres
  • JWindow
    • Conteneur que vous pouvez afficher sur votre écran
  • Jframe
    • Fenêtre destinée à être la fenêtre principale de votre application
  • JDialog
    • Fenêtre destinée aux boîtes de dialogue
      • Lancer un message d’avertissement
      • Entrer les données
      • Note the JoptionPaneexample(JavaApplication1/JButton7)
        • . showConfirmDialog
        • . showMessageDialog
        • . showInputDialog
        • . showOptionDialog
jframe
JFrame

import javax.swing.JFrame;

public class SimpleFenetre extends JFrame{

public SimpleFenetre(){

super();

build();//On initialise notre fenêtre

}

privatevoidbuild(){

setTitle("Ma première fenêtre"); //On donne un titre à l'application

setSize(320,240); //On donne une taille à notre fenêtre

setLocationRelativeTo(null); //On centre la fenêtre sur l'écran

setResizable(false); //On interdit la redimensionnement de la fenêtre

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix

}

}

les fen tres1
Les Fenêtres
  • JDialog
    • Fenêtre destinée aux boîtes de dialogue
      • . showConfirmDialog
      • intrep=jOptionPane1.showConfirmDialog(this, "Cont O/N:Presss Escape or Close for Cancel", "My_title", jOptionPane1.CLOSED_OPTION);
      • //0 si OK, -1 si ESCAPE or CLOSE
      • System.out.println("reponse="+rep);
les fen tres2
Les Fenêtres
  • JDialog
    • Fenêtre destinée aux boîtes de dialogue
      • . showMessageDialog
      • jOptionPane1.showMessageDialog(this,
      • "Eggs are not supposed to be green.",
      • "Inane warning",
      • jOptionPane1.WARNING_MESSAGE);
les fen tres3
Les Fenêtres
  • JDialog
    • Fenêtre destinée aux boîtes de dialogue
      • . showOptionDialog
      • Object[] options = {"Yes, please",
      • "No, thanks",
      • "No eggs, no ham!"};
      • int n = jOptionPane1.showOptionDialog(this,
      • "Wouldyoulikesome green eggs to go « 
      • + "withthatham?",
      • "A Silly Question",
      • jOptionPane1.YES_NO_CANCEL_OPTION,
      • jOptionPane1.QUESTION_MESSAGE,
      • null,
      • options,
      • options[2]);
      • System.out.println("n=" + n + "!");
les fen tres4
Les Fenêtres
  • JDialog
    • Fenêtre destinée aux boîtes de dialogue
      • . showInputDialog
      • Object[] possibilities = {"ham", "spam", "yam"};
      • //possibilities=null;
      • String s = (String)jOptionPane1.showInputDialog(
      • this,
      • "Complete the sentence:\n« 
      • + "\"Green eggs and...\"",
      • "CustomizedDialog",
      • jOptionPane1.WARNING_MESSAGE,
      • null,
      • possibilities,
      • "ham");
      • //If a string wasreturned
      • if ((s != null) && (s.length() > 0)) {
      • System.out.println("Green eggs and... " + s + "!");}
positionnement des composants
Positionnement des composants
  • Les Layouts
    • BorderLayout
    • GridLayout
    • FlowLayout
    • CardLayout
    • Boxlayout
    • Etc.
borderlayout
BorderLayout
  • Divise ses composants en 5 régions : nord, sud, ouest, est, et centre.
  • "nord" et "sud" occupent toute la largeur de la partie réservée à nord ou sud,
  • "ouest" et "est" occupent toute la hauteur qui reste de la partie réservée à ouest et est,
  • Centre" occupe la place restante.
borderlayout1
BorderLayout
  • Demo: JavaApplication1\NewJFrame1
gridlayout
GridLayout
  • Composants sur une grille, ligne par ligne (dans l'ordre d'adjonction),
  • Les cellules ont la même taille,
  • à la retaille, les cellules se taillent,
  • hgapet vgapsont nuls par défaut.
  • Demo:JavaApplication1\NewJFrame
    • FrameGridLayout 5 lignes 0 colonne
    • Jpanels dans Jframe
      • Jpanels GridLayout 2 lignes 0 colonne

GridLayout(intlignes, int cols, inthgap, intvgap)

GridLayout(intlignes, int cols)

flowlayout
FlowLayout
  • FlowLayoutest le gestionnaire par défaut 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, inthgap, intvgap)

FlowLayout(int align)

FlowLayout()

e.g.

FlowLayout fl=new FlowLayout(FlowLayout.center,0,2)

slide37

public class Frame1 extendsJFrame{

public Frame1()

{

super();

this.setTitle("Ma premiere application");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLocationRelativeTo(null);

BorderLayoutbLayout= new BorderLayout();

this.getContentPane().setLayout(bLayout);

JPanelbuttonsPanel= new JPanel();

JPaneltextPanel = new JPanel();

JLabel label = new JLabel("Nom: ");

JTextFieldtextField = new JTextField(20);

JButtonbtok = new JButton("ok");

textPanel.add(label);

textPanel.add(textField);

buttonsPanel.add(btok);

this.getContentPane().add(buttonsPanel, BorderLayout.SOUTH);

this.getContentPane().add(textPanel, BorderLayout.CENTER);

this.pack();

this.setVisible(true);

}

}

la m thode main
La méthode main

public staticvoid main (String args[]) {

Frame1 frame = new Frame1();

}

exercice
Exercice
  • Développez le code qui permet d’afficher la fenêtre suivante
que se passe t il lors d un clic
Que se passe-t-il lors d'un clic ?

En java, un clic génère un événement (Un objet)

slide42

import javax.swing.*;

public class FenetreAvecBouton extends JFrame{

privateJButtonunBouton;

privateJpanel pane = new JPanel ();

public FenetreAvecBouton (){

JButtonunBouton = new JButton("Quitter");

pane.add (unBouton);

setContentPane(pane);

//or this.getContentPane().add(pane);

}

public static void main (String args []) {

new FenetreAvecBouton().setVisible (true);

}

}

events
Events

Create the Listener:

Objects of this class are GoHandlers but also ActionListeners

public class GoHandler

implements ActionListener

{

...

public void actionPerformed (ActionEvent e)

{

...

}

}

This method is called automatically when the button is clicked

...

JButton go = new JButton (“Go”);

go.addActionListener (new GoHandler ());

Register the Listener:This method expects an ActionListener object (GoHandler)

events1
Events
  • L'objet événement de Java est un objet de type EventObject
  • Tout objet de type EventObject a un attribut source qui peut être récupéré en utilisant la fonction getSource() de la class EventObject
qui cr e ce type d objet
Qui crée ce type d'objet ?
  • Un Thread (comme le EventDispatchingThread) dans JVM permet de récupérer les interactions de l’utilisateur avec l’application
  • Si on clique sur un composant, ce thread crée un événement relatif à l’action réalisée en utilisant le composant comme source de l’événement
  • Ensuite il appel le « handler » correspondant à ce composant
  • Cependant, on ne crée pas les événements: on se contente de les gérer
  • Explication additionnelle
la gestion des v nements
La gestion des événements
  • Pour pouvoir gérer les événements, il faut les écouter
  • Tout le principe de la programmation événementielle repose sur la définition des événements et des objets qui les écoutent
cat gories des v nements
Catégories des événements
  • Pour chaque catégorie d’événements, il existe une interface qui doit être respectée par toute classe souhaitant recevoir cette catégorie événements.
    • Cette interface exige que toutes les méthodes soient définies.
    • Ces méthodes sont appelées lorsque des événements particuliers surviennent.
qu est ce qu un couteur
Qu’est ce qu’un écouteur
  • Le diapo précédent indique que à chaque catégorie une interface est associée
  • Un écouteur est un objet destiné à recevoir et à gérer une catégorie d’ événement générés par le système
  • N'importe quel objet peut devenir un écouteur du moment qu’il implémente les méthodes définies dans l'interface.
ecouteurs
Ecouteurs
  • Par défaut, un écouteur ne récupère pas tous les événements produits par le système
  • Il n'écoute que les objets qu'on lui dit d'écouter !
  • Donc, Il doit être associé à un objet qui génère des événements
  • Ainsi, les objets qui génèrent des événements possèdent des méthodes qui permettent de leur associer des écouteurs
ajout d couteurs
Ajout d’écouteurs
  • Pour ajouter un écouteur à un composant :
    • addActionListener
      • JButton, JCheckBox, JComboBox, JTextField et JRadioButton.
    • addAdjustementListener
      • JScrollBar
    • addFocusListener
      • tous les composants.
    • addItemListener
      • JCheckBox, JRadioButton et JComboBox.
    • addKeyListener
      • JTextField ,… saisie de texte au clavier.
    • addMouseListener, addMouseMotionListener
      • tous les composants.
r sum
Résumé
  • Une même catégorie peut être utilisée avec plusieurs objet, et un objet peut avoir plusieurs catégories
  • Les méthodes de l’interface correspondent aux différents événements supportés par cette catégorie
  • Le nom de la catégorie d’un événement est généralement utilisé avec
    • L’interface de l’écouteur du l’objet
    • Les méthodes de l’écouteur et leur événement passé en paramètre
    • La méthode de l’objet utilisée pour ajouter l’ écouteur à cet objet
  • Par exemple à la catégorie d’ événement Action correspond
    • L’interface ActionListener
    • La méthode ActionPerformed et l’ événement ActionEvent en paramètre
    • La méthode addActionListener
r sum1
Résumé
  • Le eventdispatcher contrôle les événements amorcés à partir de l’interface graphique
  • Les correspond à leurs objets sources
  • Il Crée les événements catégories correspondants
  • Si des écouteurs sont déclarés pour ces evenements et enregistrés avec les objets sources alors le eventdiapatcher appelle les méthodes correspondantes de l’écouteur tout en lui passant l’événement catégorie afin de répondre à l’événement
slide56

import javax.swing.*;

import java.awt.event.*;

public class FenetreAvecBouton extends JFrame

implementsActionListener{

privateJButtonunBouton;

public FenetreAvecBouton (){

Jpanel pane = new JPanel ();

JButtonunBouton = new JButton("Quitter");

pane.add (unBouton);

setContentPane(pane);

}

public void actionPerformed (ActionEvent e) {

System.exit (0);

}

}

slide57

import javax.swing.*;

import java.awt.event.*;

public class FenetreAvecBouton extends JFrame

implementsActionListener{

privateJButtonunBouton;

public FenetreAvecBouton (){

Jpanel pane = new JPanel ();

JButtonunBouton = new JButton("Quitter");

pane.add (unBouton);

unBouton.addActionListener(this);

setContentPane(pane);

}

public void actionPerformed (ActionEvent e) {

System.exit (0);

}

}

correction
Correction
  • Il s’agit en effet de séparer les interfaces graphiques des événements récepteurs

import javax.swing.*;

import java.awt.event.*;

public class FenetreAvecBouton extends JFrame

{

MonEventevent = new MonEvent();

privateJButtonunBouton;

public FenetreAvecBouton (){

Jpanel pane = new JPanel ();

JButtonunBouton = new JButton("Quitter");

pane.add (unBouton);

unBouton.addActionListener(event);

setContentPane(pane);

}

}

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

public class MonEventimplementsActionListener{

public voidactionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(null, "Test ");

}

}

ou encore

import javax.swing.*;

import java.awt.event.*;

public class FenetreAvecBouton extends JFrame

{

MonEventevent = new MonEvent();

privateJButtonunBouton;

public FenetreAvecBouton (){

Jpanel pane = new JPanel ();

JButtonunBouton = new JButton("Quitter");

pane.add (unBouton);

unBouton.addActionListener(event);

setContentPane(pane);

}

class MonEventimplementsActionListener{

public voidactionPerformed(ActionEvent e) {

getContentPane().setBackground(Color.red);

}

}

}

Ou encore…

Inner Class

A la possibilité d’accéder aux attributs de la classe principale

ou encore1
Ou encore…

import javax.swing.*;

import java.awt.event.*;

public class FenetreAvecBouton extends JFrame

{

privateJButtonunBouton;

public FenetreAvecBouton (){

Jpanel pane = new JPanel ();

JButtonunBouton = new JButton("Quitter");

pane.add (unBouton);

unBouton.addActionListener(event);

setContentPane(pane);

}

ActionListenerevent= new ActionListener {

public voidactionPerformed(ActionEvent e) {

getContentPane().setBackground(Color.red);

}

}

}

exercice1
Exercice
  • Comment faire un écouteur pour 2 objets
solution
Solution

import javax.swing.*;

import java.awt.event.*;

public class FenetreAvecDeuxBouton extends JFrame

{

MonEventevent = new MonEvent();

privateJButtonbtOk = new JButton(" ok" );

privateJButtonbtCancel = new Jbutton("Cancel");

public FenetreAvecDeuxBouton (){

Jpanel pane = new JPanel ();

pane.add (btOk );

pane.add (btCancel);

btOK.addActionListener(event);

btCancel.addActionListener(event);

setContentPane(pane);

}

}

solution1
Solution

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

public class MonEventimplementsActionListener{

public voidactionPerformed(ActionEvent e) {

JButton b = (JButton)e.getSource();

if(e.getActionCommand().equals("ok")){

}

else

if(e.getActionCommand().equals("Cancel"))

{

….

}

}

}

les v nements souris
Les événements souris

interface MouseListener{

voidmouseClicked(MouseEvent e);

voidmouseEntered(MouseEvent e);

voidmouseExited(MouseEvent e);

voidmousePressed(MouseEvent e);

voidmouseReleased(MouseEvent e);

}

Quelques fonctions intéressantes de MouseEvent:

Point getPoint()

Retourne les coordonnées de la souris lors de la génération de l'événement.

intgetX()

Retourne la coordonnée en X de la souris lors de la génération de l'événement.

intgetY()

Retourne la coordonnée en Y de la souris lors de la génération de l'événement.

exemple
Exemple

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

public class MonMouseListenerimplementsMouseListener{

public voidmouseClicked(MouseEvent e) {

System.out.println("X: "+e.getX()+" Y: "+e.getY());

}

public voidmousePressed(MouseEvent e) {

}

public voidmouseReleased(MouseEvent e) {

}

public voidmouseEntered(MouseEvent e) {

}

public voidmouseExited(MouseEvent e) {

}

}

exercise
Exercise
  • Demo: JavaApplication1
  • Développez une application qui permet de récupérer et afficher les coordonnées de la souris en passant en dessus d’une fenêtre
pour commencer
Pour commencer…
  • Se poser les bonnes questions
    • Quelles sont les objets qui interviennent dans le problème?
    • Quelles sont les données, les objets, que le programme va manipuler?
    • Quelles vont être les relations entre ces objets? Quelles sont les opérations que je vais pouvoir effectuer sur ces objets?
concevoir un mod le uml
Concevoir un modèle UML
  • Avant de construire un bâtiment il nous faut le plan
  • En programmation objet il faut élaborer le schéma UML avant de commencer le codage
objets
Objets
  • Un objet représente un concept, une idée ou toute entité du monde physique
  • Un objet est une structure qui regroupe des données (attributs) et les moyens de traiter ces données (des fonctions que l'on appelle "méthodes" en POO)
    • Un fichier est un objet. cet objet existe, on peut l'utiliser
    • La voiture est un objet
    • Un conducteur est un objet
    • Un gâteau est un objet
caract ristiques d un objet
Caractéristiques d’un objet…
  • Les caractéristiques qui représentent un objet
    • Une voiture est caractérisée par une couleur, un type, marque, un numéro de châssis, un moteur, vitesse, etc.
    • Un conducteur a un nom, sexe, nationalité, etc.
    • Un gâteau a un type (forêt noire, forêt blanche, etc.), poids, etc.
classes
Classes…
  • Une classe est un modèle de données
    • famille d'objets, ou encore moule à objets
    • tous les objets d’une même classe partagent les mêmes attributs et les mêmes méthodes
  • Une instance de la classe voiture serait par exemple un objet de
    • marque "Renault",
    • modèle "Clio",
    • couleur "rouge"
    • vitesse 0
classes1
Classes…
  • le mot clé class permet de déclarer une classe d'objet.

UML

Java

Nom de la classe

public class Voiture

{

//code de la classe

}

Attributs de la classe

Méthodes de la classe

attributs d une classe
Attributs d’une classe
  • Les attributs d'une classe sont des variables (ou des constantes) décrivant les caractéristiques de l'objet
      • Elles composent le type
      • Elles caractérisent l'objet
variables d une classe
Variables d’une classe

UML

Java

public class Voiture

{

private String marque = "bmw";

privateint vitesse= 10;

}

Type texte

Type entier

Types: texte, entier, réel, booléen, etc.

m thodes d une classe
Méthodes d’une classe
  • Représentent les moyens de traiter les attributs et les données d’un objet
  • Elles peuvent posséder des paramètres.
  • Elles peuvent éventuellement renvoyer une valeur

public [or private] returnType

methodName (type1 name1, ..., typeNnameN)

{

...

}

m thodes d une classe1
Méthodes d’une classe
  • Par exemple, si on souhaite arrêter une voiture en marche, il suffit d’utiliser une méthode freiner() qui permet d’associer à l’attribut vitesse la valeur 0

class Voiture

{

private String marque = "bmw";

privateint vitesse= 10;

public int freiner(){this .vitesse = 0;

return this.vitesse;}

}

UML

Retourne une variable de type entier

m thodes d une classe2
Méthodes d’une classe
  • Passage de paramètres à une fonction

double u = 3, v = -4;

...

Polynomial p = new Polynomial (1.0, -(u + v), u * v);

double y = p.getValue (2 * v - u);

public class Polynomial

{

public Polynomial (double a, double b, double c) { ... }

public double getValue (double x) { ... }

...

m thodes d une classe3
Méthodes d’une classe
  • Passage de paramètres à une fonction
    • Les données de types primitives sont toujours passées par valeur

public class Polynomial

{

...

public double getValue (double u)

{

double v;

...

}

}

copy

double x = 3.0;

double y = p.getValue ( x );

u acts like a local variable in getValue

x: 3.0

u:3.0

copy

m thodes d une classe4

A Fraction

object:

num = 5

denom = 17

Méthodes d’une classe
  • Passage de paramètres à une fonction
    • Les objets sont toujours passées par référence

Fraction f1 = new Fraction (1, 2);

Fraction f2 = new Fraction (5, 17);

Fraction f3 = f1.add (f2);

public class Fraction

{

...

public Fraction add

(Fraction f)

{

...

}

}

refers to

refers to the same object

m thodes d une classe5
Méthodes d’une classe
  • Une méthode peut avoir plusieurs instruction return

public someTypemyMethod (...)

{

...

if (...)

return <expression1>;

else if (...)

return <expression2>;

...

return <expression3>;

}

m thodes d une classe6
Méthodes d’une classe
  • Une méthode booléenne peut retourner true/false ou bien le résultat d’une expression booléenne

public booleanmyMethod (...)

{

...

if (...)

return true;

...

return n % 2 == 0;

}

m thodes d une classe7
Méthodes d’une classe
  • Une méthode de type voidpeut utiliser l’instruction return pour quitter la méthode

public void myMethod (...)

{

...

if (...)

return;

...

}

No need for a redundant return at the end

constructeur d une classe
Constructeur d’une classe
  • Le rôle du constructeur est de déclarer et de permettre d'initialiser les données membres de la classe
  • Le constructeur est appelé automatiquement quand on crée un objet.
  • Un constructeur se définit comme une méthode standard, mais ne renvoie aucune valeur.
  • Tous les noms des constructeurs ont le même nom de la classe
  • Si une classe possède plusieurs constructeurs, ces derniers doivent avoir différent nombre et/ou différent types de paramètres
  • Java affecte par défaut à une classe ayant aucun constructeur, le constructeur vide.
constructeur d une classe1
Constructeur d’une classe

Java

class Voiture

{

private String marque = "";

privateint vitesse= 0;

public Voiture(String m, int v)

{

this.vitesse=v;

this.marque = m; 

}

}

UML

constructeur d une classe2
Constructeur d’une classe
  • Les constructeurs d’une même classe peuvent appeler l’un l’autre en utilisant le verbe « this »

class Voiture

{

private String marque = "";

privateint vitesse= 0;

public Voiture(String m, int v)

{

this(100);

}

public Voiture(int v)

{

vitesse=v;

}

}

constructeur d une classe3
Constructeur d’une classe
  • Les constructeurs sont invoqués en utilisant l’operateur new

public class Fraction

{

public Fraction (int n)

{

num = n;

denom = 1;

}

...

  • Fraction f1 = new Fraction ( );
  • Fraction f2 = new Fraction (5);
  • Fraction f3 = new Fraction (4, 6);
  • Fraction f4 = new Fraction (f3);
etude de cas a faire
Etude de Cas (A faire…)
  • Elaborer en UML et Java la classe qui représente les gâteaux
  • Attributs
    • poids
    • type
    • bon
  • 2 Constructeurs
    • Premier, sert à initialiser les attributs à
      • Poids: 100
      • type: forêt noire
      • bon: TRUE
    • Second; prend trois paramètres pour charger les attributs
      • Poids
      • type
      • bon
  • Méthodes
    • BienPreparé
      • retourne la valeur de l’attribut bon
    • ModifieType
      • Prend le nouveau type en paramètre et modifie la valeur de l’attribut type
solution2
Solution

Java

class Gateau

{

private String type= "";

privateint poids= 0;

privateboolean bon=true;

public Gateau()

{

this.poids=100;

this.type= forêt noire;

this.bon= bon ;

}

public Gateau(String type, boolean bon, int poids)

{

this.poids=poids;

this.type=type;

this.bon= bon ;

}

public booleanbienPreparé()

{

return this .bon;

}

public voidmodifiéType ( String nouveauType)

{

this.type = nouveauType;

}

}

UML

instanciation
Instanciation
  • Créer un objet se fait en "instanciant" une classe.
  • Quand on instancie une classe, on crée une version de l'objet ayant des caractéristiques propres
instanciation1

f1

f1

A Fraction

object:

num = 3

denom = 7

A Fraction

object:

num = 3

denom = 7

A Fraction

object:

num = 3

denom = 7

f2

Instanciation

Fraction f1 = new Fraction(3,7);

Fraction f2 = f1;

Fraction f1 = new Fraction(3,7);

Fraction f2 = new Fraction(3,7);

f2

Refere au meme objet

visibilit de donn es
Visibilité de données
  • publique: les fonctions de toutes les classes peuvent accéder aux données ou aux méthodes d'une classe définie avec le niveau de visibilité public. Il s'agit du plus bas niveau de protection des données
  • protégée: l'accès aux données est réservé aux fonctions des classes héritières, c'est-à-dire par les fonctions membres de la classe ainsi que des classes dérivées
  • privée: l'accès aux données est limité aux méthodes de la classe elle-même. Il s'agit du niveau de protection des données le plus élevé
encapsulation
Encapsulation
  • Les attributs et les méthodes d'un objet qui constituent sa structure interne ne sont en général pas accessibles aux autres objets, c'est le principe de l'encapsulation
  • Par exemple, pour pouvoir modifier la couleur d'une voiture, il faudra lui ajouter une méthode publique, changerCouleur, qui s'occupera de changer la valeur de son attribut couleur
  • Les autres objets n'ont ainsi plus besoin de savoir comment changer la couleur de la voiture, ils se contentent d'appeler la méthode changerCouleur
encapsulation1
Encapsulation

public class MyClass

{

// Private fields:

private <sometype> myField;

...

// Constructors:

publicMyClass (...) { ... }

...

// Public methods:

public <sometype> myMethod (...) { ... }

...

// Private methods:

private <sometype> myMethod (...) { ... }

...

}

Public interface: public constructors and methods

encapsulation exemple
Encapsulation: Exemple

On souhaite incrémenter l’attribut useCount d’une manière sécurisée

acc s statique attribut statique
Accès statique: Attribut statique
  • Un attribut statique est partagée à travers tous les objets de

la même classe

    • Si vous avez à utiliser une même variable à travers plusieurs objets, vous pouvez la déclarer statique

class Voiture

{

public staticint roues = 4;

}

Voiture v1=new Voiture()

v1.roues=4

Voiture v2=new Voiture()

//4

System.out.println(v2.roues);

V2.roues=10;

Voiture v3=new Voiture();

//10

System.out.println(v3.roues);

acc s statiques attribut statique
Accès statiques: Attribut statique
  • On peut l’appeler directement via la classe sans instanciation
  • Exemple

Voiture.roues=4

Voiture v2=new Voiture()

//4

System.out.println(v2.roues);

Voiture.roues=14

Voiture v3=new Voiture();

//14

System.out.println(v3.roues);

//14

System.out.println(v2.roues);

acc s statiques m thode statique
Accès statiques: Méthode statique
  • Les méthodes statiques manipulent seulement les attributs statiques de leur classe
  • Les méthodes statiques ne peuvent plus manipuler les attributs non statiques, et, ne peuvent appeler que des méthodes statiques
  • Sont appelées sans instanciation
    • Exemple d’appelle des méthodes statiques

double x = Math.random();

double y = Math.sqrt (x);

System.exit();

acc s statiques m thode statique1
Accès statiques: Méthode statique
  • Un autre exemple

public class MyClass

{

public static final intstatConst;

private staticintstatVar;

private intinstVar;

...

public staticintstatMethod(...)

{

statVar = statConst;

statMethod2(...);

instVar = ...;

instMethod(...);

}

Static method

OK

Errors!

acc s statiques remarque
Accès statiques: Remarque
  • Pas besoin de créer une instance sur une classe ayant tous ses attributs et/ou méthodes statiques
  • Les classes Math et System sont des exemples

double x = Math.random();

double y = Math.sqrt (x);

System.exit();

m thode non statique
Méthode non statique
  • Pour accéder aux méthodes non statiques il est nécessaire de créer une instance sur la classe
  • Les méthodes non statiques peuvent accéder aux attributs et méthodes statiques et non statiques
a faire
A faire…
  • Elaborer une classe Forme

Créez deux instances différentes de la classe forme et comparez les en utilisant la méthode comparerForme

h ritage
Héritage
  • Souvent, vous aurez besoin d'une classe avec des méthodes et fonctions similaires à une autre classe
  • Il est bon de définir des classes génériques, qui pourront être réutilisées et adaptées à tous vos projets
  • Pour faciliter cela, une classe peut être une extension d'une autre classe.
h ritage1
Héritage
  • La classe dérivée hérite alors toutes les méthodes et variables de la classe parent
  • La classe dérivée que nous appelons fille peut définir ses propres fonctions et variables, qui s'ajouteront
  • Une classe ne peut hériter que d'une seule autre classe, et l'héritage multiple n'est pas supporté
  • Les héritages se font avec le mot clé ' extends '.
h ritage2
Héritage
  • Le principe d’héritage permet la réutilisabilité et l'adaptabilité des objets
    • Classes filles qui héritent des caractéristiques (attributs et méthodes) d'une classe mère
    • Les classes filles peuvent également définir leurs propres caractéristiques.
  • Le principe d’héritage réduit la duplication d’un même code tout en l’écrivant dans la classe mère
h ritage3
Héritage

UML

Lien d’héritage

h ritage4
Héritage

Java

class Vehicule

{

protected String marque = "";

public void avance()

{

//code qui fait avancer le véhicule

}

public void freine()

{

//code qui fait freiner le véhicule

}

}

UML

h ritage5
Héritage

Java

class Voiture extendsVehicule

{

privateint porte=4;

public intnbrPortes()

{

//retourne nbrPortes

}

}

UML

la classe voiture possède un attribut marque par héritage, un attribut porte, une méthode freine et une méthode avance par héritage et une méthode nbrPortes()

h ritage6
Héritage

java

UML

class Camion extendsVehicule

{

privateint Remorque=40;

public intvolumeRemorque()

{

//retourne volumeRemroque

}

}

la classe Camion possède un attribut Remorque et une méthode volumeRemorque, ainsi qu’ un attribut marque, une méthode freine et une méthode avance par héritage

etude de cas
Etude de Cas

Elaborez les classes suivantes

Héritage

red finition de m thode
Redéfinition de méthode

Les méthodes hérités peuvent être réécrites dans la classe fille

class Vehicule

{

protected String marque = "";

public void avance()

{

//code qui fait avancer le véhicule

}

public void freine()

{

//code qui fait freiner le véhicule

}

}

class Voiture extendsVehicule

{

public void avance()

{

//code qui fait avancer la voiture

}

public void freine()

{

//code qui fait freiner la voiture}

}

contr le d acc s h ritage
Contrôle d’accès héritage
  • Les accès aux attributs et méthodes sont redéfinissables dans les classes filles pourvu que la directive soit identique ou plus large
    • Une méthode protégée peut être redéfinie comme protégée ou publique dans une classe fille.
    • Une méthode publique ne peut être que publique dans une classe fille.
contr le d acc s h ritage1
Contrôle d’accès héritage

Biped

  • Appel des constructeurs d’une super classe

En utilisant super, et ceci seulement à partir d’un

constructeur

Walker

public class Walker extends Biped

{

// Constructor

public Walker(int x, int y, Image leftPic, Image rightPic)

{

super(x, y, leftPic, rightPic);

...

}

}

Calls Biped’s constructor

The number / types of parameters passed to super must match parameters of one of the superclass’s constructors.

If present, must be the first statement

contr le d acc s h ritage2
Contrôle d’accès héritage
  • Appel des constructeurs d’une super classe
    • Il est conseillable d’ajouter toujours un constructeur vide dans les classes et ceci afin d’éviter des erreurs de compilation en cas d’ héritage
    • Par exemple l’écriture suivante est erronée et peut generer l’ erreur suivante:

public class NewClass { public class NewClass2 extends NewClass {

public NewClass(int a) void f1()

{ {

} System.out.println("hello")

void f0() }

{ }

}

}

syntax error:

cannot find symbol : constructor ...

contr le d acc s h ritage3
Contrôle d’accès héritage
  • Appel des constructeurs d’une super classe
    • Alors elle sera juste en ajoutant le constructeur par défaut à NewClass1

public class NewClass1 public class NewClass2 extends

NewClass 1

{ {

public NewClass()void f1()

{ {

System.out.println("hello")

} }

}

public NewClass1(int a)

{

}

void f0()

{

}

}

contr le d acc s h ritage4
Contrôle d’accès héritage
  • Appel des constructeurs d’une super classe
  • Conclusion:
    • Pour bien faire fonctionner le code en présence de plusieurs constructeurs dans une hiérarchie de classes, essayer toujours de mentionner explicitement le constructeur par défaut (sans argument) dans l’hiérarchie.
contr le d acc s h ritage5
Contrôle d’accès héritage

Walker

  • Appel des méthodes de la classe

supérieur

CharlieChaplin

public class CharlieChaplin

extends Walker

{

...

public voidnextStep ()

{

turnFeetIn();

super.nextStep();

turnFeetOut();

}

...

}

Calls Walker’s nextStep

super.someMethod refers to someMethod in the nearest class, up the inheritance line, where someMethod is defined.

contr le d acc s h ritage6
Contrôle d’accès héritage
  • Les appels super sont fréquemment utilisés dans les sous classes d’un classe librairie.

public class Canvas extends JPanel

{

...

public voidpaintComponent (Graphics g)

{

super.paintComponent(g);

...

}

...

contr le d acc s h ritage7
Contrôle d’accès héritage
  • En Java toutes les classes étendent par défaut la classe Object, une classe concrète et non plus abstraite

public class Object

{

public String toString {...}

public boolean equals (Object other) {... }

public inthashCode() { ... }

// a few other methods

...

}

polymorphisme1
Polymorphisme
  • Polymorphisme vient du grec et signifie "multiforme "
  • Il y a 3 types de polymorphisme en POO
    • Polymorphisme de classe
    • Polymorphisme d’héritage
    • Polymorphisme paramétrique
polymorphisme de classe
Polymorphisme de classe
  • Une donnée membre ou une méthode de deux classes différentes peuvent avoir le même nom, et le langage saura faire la différence.

class B {

public voidlire(String chaine_sql) {

// fait une requête SQL dans la base

}

}

class A {

public voidlire(String fichier_texte) {

// lit le fichier texte

}

}

polymorphisme d h ritage
Polymorphisme d’héritage
  • Une même donnée ou une même méthode peut être redéfinie dans une classe dérivée
  • Ca sera cette donnée ou méthode que l’objet instancié de la classe dérivée utilisera
exemple1
Exemple

class Personne {

private String prenom;

private String nom;

public Personne(String prenom, String nom) {

this.prenom = prenom;

this.nom = nom;

}

public String info() {

return this.prenom +” “this.nom;

}

}

Héritage

class Pirate extends Personne {

private String bateau;

Public Pirate(String prenom, String nom){super(prenom, nom);}

public String info() {

return "pirate “+this.prenom + “ ”+this.nom;

}}

Redéfinition

polymorphisme param trique
Polymorphisme paramétrique
  • Il permet de définir plusieurs constructeurs/méthodes qui diffèrent en fonction du type et/ou du nombre d’arguments
polymorphisme param trique1
Polymorphisme paramétrique

class A {

private String nom;

public A() {

this.nom= « JaneDoe »

}

public A(String nom, String prenom) {

this.nom= nom;

this.prenom;

}

}

polymorphisme2
Polymorphisme

Biped

Walker

  • Poly. D’héritage: exemple

The actual parameter passed to this method can be a Walker, a Hopper, etc.  any subclass of Biped.

public void moveAcross (Biped creature, int distance)

{

creature.firstStep();

while (creature.distanceTraveled () < distance)

creature.nextStep();

creature.stop();

}

Correct methods will be called automatically for any specific type of creature: Walker’s methods for Walker, Hopper’s for Hopper, etc.

m thodes abstraites
Méthodes abstraites
  • Une méthode abstraite ne doit pas avoir d’implémentation
  • Elle est indiquée avec le mot-clé abstract.

public abstractint périmètre();

classe abstraite
Classe abstraite
  • Une classe contenant une ou plusieurs méthodes abstraites doit être elle-même déclarée abstraite
  • Ne peut être instanciée : c’est à dire qu’on ne peut pas créer d’objet basé sur une classe abstraite
  • Noter qu’une classe abstraite peut contenir des méthodes avec leur code

abstract class Forme

{

}

public abstract class Biped

{

...

public abstract void firstStep();

public abstract void nextStep();

public abstract void stop();

...

public void draw(Graphics g) { ... }

}

classe abstraite1
Classe abstraite
  • Elle peut servir de classe de base à d’autres classes qui la étend (extends)
  • Ces sous-classes devront implémenter toutes les méthodes abstraites de la superclasse
  • Sinon il faut déclarer ces classes abstraites
    • On forme alors une hiérarchie de classes abstraites
  • En utilisant l’abstraction, un compilateur peut détecter des erreurs additionnelles
  • Elle est utilisée de la même manière dans le Polymorphisme
  • Elle peut contenir des constructeurs qui peuvent être appelés par les sous classes
  • Préférable d’avoir un constructeur vide
exemple2
Exemple

Italic = Abstract

Développez l’exemple ci-dessus

interface1
Interface
  • Spécifie quelles méthodes et variables une classe peut implémenter, sans avoir à définir comment ces méthodes seront gérées
  • Non instanciable
  • Seules les signatures des méthodes d’une interface sont déclarées (pas d’implémentation)
  • Toutes les méthodes de l'interface doivent être implémentées
  • Les classes peuvent implémenter plus d'une interface en séparant chaque interface par une virgule
interface2
Interface
  • Une Interface est similaire à une classe abstraite mais pas d’attributs et de constructeurs, ainsi que toutes ses méthodes sont abstraites par défaut.
  • Une classe qui implémente une interface doit fournir toutes les méthodes de l’interface.
  • Une Interface peut être définit comme suit:
    • interface InterfaceName {

constant definitions

method declarations (without implementations)

}

Exemples:

interface3
Interface

Mais public static final pour les constantes ainsi que public pour les méthodes sont considérés par défaut, alors l’exemple précédent peut être écrit comme suit:

interface4
Interface

interfacepeutAvancer

{public void avancer();public void freiner();

}

interfacepeutTourner

{public voidtourneGauche();public voidtourneDroite();

}

Méthodes sans code

interface5
Interface

public interface Dance

{

DanceStepgetStep (inti);

intgetTempo ();

intgetBeat (inti);

}

public class Waltz implements Dance

{

// Methods:

public DanceStepgetStep (inti) { ... }

public intgetTempo () { return 750; }

public intgetBeat (inti) { ... }

}

L’ecrituresuivanteest possible:

Dance d = new Waltz( );

interface6
Interface
  • Alors Le polymorphisme peut être géré par les interfaces

public interface Edible

{

String getFoodGroup();

intgetCaloriesPerServing();

}

public class Pancake

implements Edible

{

...

}

public class Breakfast

{

private intmyTotalCalories = 0;

...

public void eat (Edibleobj, int servings)

{

myTotalCalories +=

obj.getCaloriesPerServing () * servings;

}

}

Polymorphism: the correct method is called for any specific type of Edible,e.g., a Pancake

abstract vs interface
Abstract VS interface
  • Aucun code n’est présent dans une interface
    • Une interface est donc une classe abstraite qui ne contiendrait que des méthodes abstraites
    • Une classe ne peut dériver que d’une classe abstraite mais peut implémenter plusieurs interfaces
mot cl final
Mot clé Final
  • Une méthode ou une classe est finale, si elle est précédée du mot-clé final
  • Elle ne peuvent plus redéfinit et hérité respectivement

Redéfinition

class BaseClass

{

public void test() {

System.out.println("test() appelé ");

}

final public voidmoreTesting() {

System.out.println("moreTesting() appelé");

}

}

class ChildClassextendsBaseClass {

public voidmoreTesting() {

System.out.println("moreTesting() appelé dans Child Class");

}

}

Fatal error: Cannot override final method BaseClass::moreTesting()

etude de cas 1
Etude de cas 1
  • On souhaite simuler une gestion de location de véhicules.
    • Un véhicule est caractérisé par un numéro d'immatriculation, un kilométrage, un modèle et une marque. (Classe abstraite)
    • Fonction: avancer, reculer, toString.
    • Parmi les véhicules on distingue
      • les véhicules utilitaires
      • les voitures
      • Les motos
    • Client (Caractérisé par son nom, prénom, date de naissance) qui
      • loue un véhicule
      • et le conduit
etude de cas 2
Etude de cas 2
  • Modifiez l’étude de cas précédent afin d’ajouter
    • L’attribut nbPersonnes à la classe Moto
    • L’attribut nbPortes à la classe Voiture
    • L’attribut poids à la classe Utilitaire
  • Les attributs doivent être initialisés par le constructeur
  • Redéfinissez la méthode toString dans chaque classe afin d’afficher les détails correspondants
etude de cas 3
Etude de cas 3
  • Ajoutez la classe VoitureDeSport qui étend la classe Voiture
  • Une voiture de sport a deux portes par défaut
  • Faites les modifications nécessaires en fonction du diagramme ci-dessous
introduction
Introduction
  • En java, l’api JDBC (Java DataBaseConnectivity) permet de gérer les connexions à une base de données.
  • En réalité, JDBC permet aux programmeurs Java d’écrire un code indépendant de la base de données et du moyen de connexion utilisé
slide152
JDBC ?
  • Un package (java.sql.*) contenant
    • un ensemble de classes et d’interfaces pour écrire des requêtes destinées aux SGBD (SQL)
  • Il sert a
    • Créer des connexions à une base distante
    • Gérer la création et l'exécution de requêtes SQL
    • Récupérer et traiter les résultats
interfaces jdbc
Interfaces JDBC
  • 8 interfaces :
    • Connection (createdfrom the DriverManager)
    • Statement,CallableStatement, PreparedStatement
      • (createdfrom the connection)
    • ResultSet
      • Created from the statements
    • DatabaseMetaData, ResultSetMetaData
    • Driver
  • Interface OJDBC
    • OraclePreparedStatement, OracleResultSet
1 enregistrer un pilote
1 - Enregistrer un pilote
  • Pour qu'un driver soit disponible, il faut charger sa classe en mémoire en utilisant:
    • Class.forName("driverName")
        • Class.forName("oracle.jdbc.driver.OracleDriver");
    • DriverManager.registerDriver(instance de driver);
      • DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver())
1 enregistrer un pilote exemples
1- Enregistrer un pilote(exemples)
  • Access database
    • Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver");
  • Microsoft SQL Server
    • Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver");
  • Mysql
    • Class.forName(“com.mysql.jdbc.Driver");
2 etablir une connexion
2 – Etablir une connexion
  • On utilise la méthode getConnection() de DriverManager
  • 3 arguments :
    • l’URL de la base de données
    • le nom de l’utilisateur de la base
    • son mot de passe

Connectionconn = DriverManager.getConnection(url, user, password);

2 etablir une connexion1
2 – Etabliruneconnexion
  • le DriverManager essaye tous les drivers enregistrés (chargés en mémoire avec Class.forName()) jusqu’à ce qu’il trouve un driver qui lui fournisse une connexion
  • Le chemin de la base depend de la base en question
      • URL="jdbc:oracle:thin:@computer_name:1521:oracleinstance”
2 etablir une connexion2
2 – Etabliruneconnexion
  • MS Access
    • String chemin= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ= c:\\XmlDB ";
  • Microsoft SQL Server
    • String chemin= "jdbc:sqlserver://Computername;" +

databaseName=DBname;user=usename;password=passname";

  • Mysql
    • String chemin= "jdbc:mysql://Computername:port/dbname";
3 creation d un statement
3- Creation d’un Statement
  • Statement: permet d’exécuter des requêtes SQL
  • 3 types de Statement :
    • Statement : requêtes statiques simples
    • PreparedStatement : requêtes dynamiques précompilées (avec paramètres d’entrée/sortie)
    • CallableStatement : procédures stockées
3 creation d un statement1
3- Creation d’un Statement
  • La création d’un statement s’effectue a partir de l’instance de connexion déjà créée
      • Statement req1 = conn.createStatement();
      • PreparedStatement req2 = conn.prepareStatement(str);
      • CallableStatement req3 = conn.prepareCall(str);
  • Str est une requête SQL
4 execution de la requ te
4- Execution de la requête
  • 3 types d’exécution pour le statement
    • Consultation (requêtes de type SELECT)
      • executeQuery() : retourne un ResultSet (n-uplets résultants)
    • Modification (requêtes de type INSERT, UPDATE, DELETE, CREATE TABLE, DROP TABLE)
      • executeUpdate() : retourne un entier (nombre de n-uplets traités)
    • Exécuter des requêtes qlq, procédures stockées, retour de plusieurs ensemble de résultats (plusieurs ResultSet)
      • execute()
5 traiter le r sultat
5 - Traiter le résultat
  • ResultSet de executeQuery()
    • executeQuery() renvoie une instance de ResultSet qui permet d’accéder aux champs des n-uplets sélectionnés
    • seules les données demandées sont transférées en mémoire par le driver JDBC
    • il faut donc les lire "manuellement" et les stocker dans des variables pour un usage ultérieur
exemple3
Exemple

public void connect (String host, String user, String pass)

{

//enregistrer le pilote

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

//creer la connexion

Connectionconn = DriverManager.getConnection(

"jdbc:oracle:thin:@  " +host +" :1521:nomdb", user, pass);

//creer un Statement

Statement stmt = conn.createStatement();

//execution de la requete

ResultSet res = stmt.executeQuery(“Select nom, prenom from user”);

}

5 traiter le r sultat1
5 - Traiter le résultat
  • Méthode next() de ResultSet
    • retourne false si dernier tuple lu, true sinon
    • un appel fait avancer le curseur sur le tuple suivant
    • au départ, le curseur est positionné avant le premier tuple
    • exécuter next() au moins une fois pour avoir le premier
5 traiter le r sultat2
5 - Traiter le résultat
  • Ou encore
    • on peut parcourir le ResultSet d’avant en arrière :
      • next() vs. previous()
    • en déplacement absolu : aller à la n-ième ligne
      • absolute(introw), first(), last(), ...
    • en déplacement relatif : aller à la n-ième ligne à partir de la position courante du curseur, …
      • relative(introw), afterLast(), beforeFirst(), ...
exemple4
Exemple

{

//enregistrer le pilote

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

//creer la connexion

Connectionconn = DriverManager.getConnection(

"jdbc:oracle:thin:@  " +host +" :1521:nomdb", user, pass);

//creer un Statement

Statement stmt = conn.createStatement();

//execution de la requete

ResultSet res = stmt.executeQuery(“Select nom, prenom from user”);

while (res.next()){

System.out.println(res.getString(1)+” ”+res.getString(2));

}

}

type sql vs type java
Type SQL vs. Type Java
  • Le driver JDBC traduit le type JDBC retourné par le SGBD en un type Java correspondant
  • le XXX de getXXX() est le nom du type Java correspondant au type JDBC attendu
  • chaque driver a des correspondances entre les types SQL du SGBD et les types JDBC
exemple scrollable result set
Exemple – Scrollable Result Set
  • Pour utiliser absolute et relative ilfautque le resultsetsoitResultSet.TYPE_SCROLL_SENSITIVE :

Statement stmt =

con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,

ResultSet.CONCUR_READ_ONLY);

String query = “select students from class where type=‘not sleeping’ “;

ResultSetrs = stmt.executeQuery( query );

rs.previous(); / / go back in the RS (not possible in JDBC 1…)

rs.relative(-5); / / go 5 records back

rs.relative(7); / / go 7 records forward

rs.absolute(100); / / go to 100th record

exemple updatable resultset
Exemple – Updatable ResultSet

Statement stmt =

con.createStatement(ResultSet.TYPE_FORWARD_ONLY,

ResultSet.CONCUR_UPDATABLE);

String query = " select students, grade from class

where type=‘really listening this presentation’ “;

ResultSetrs = stmt.executeQuery( query );

while ( rs.next() )

{

int grade = rs.getInt(“grade”);

rs.updateInt(“grade”, grade+10);

rs.updateRow();

}

exemple delete update using statement
Exemple – Delete/Update using Statement
    • Statement stmt = conn.createStatement();
  • String deleteStr =

"DELETE FROM Member "+

"WHERE Lower(Name) = 'harry potter'";

    • intdelnum = stmt.executeUpdate(deleteStr);
  • String createLehigh = "Create table Lehigh " +

"(SSN Integer not null, Name VARCHAR2(32), " + "Marks Integer)";

    • stmt.executeUpdate(createLehigh);
  • String insertLehigh = "Insert into Lehigh values“ + "(123456789,abc,100)";
    • stmt.executeUpdate(insertLehigh);
6 fermeture de la connexion
6 – Fermeture de la connexion
  • resultset.close()
  • statement.close()
  • conn.close();
encore les requ tes pr par es
Encore – Les requêtes préparées
  • La méthode prepareStatement() de l’objet Connection crée un PreparedStatement :

PreparedStatementps = conn.prepareStatement("SELECT * FROM Clients WHERE name = ? ");

  • les paramètres sont spécifiés par un "?"
    • ils sont ensuite instanciés par les méthodes setInt(), setString(), setDate()…
  • ces méthodes nécessitent 2 arguments (setInt(n, valeur))
    • le premier (int) indique le numéro relatif de l’argument dans la requête
    • le second indique la valeur à positionner
  • setNull(n,type) positionne le paramètre à NULL (SQL)
exemple preparedstatement
Exemple – PreparedStatement

PreparedStatementps = conn.prepareStatement(“Select uid from user where username = ? and password = ?");

ps.setString(1, user);

ps.setString(2, pass);

ResultSetres = ps.executeQuery();

}

Variable locale

Variable locale

exemple preparedstatement1
Exemple – PreparedStatement
  • String queryStr=

"SELECT * FROM Items "+

"WHERE Name = ? and Cost < ?";

  • PreparedStatementpstmt = conn.prepareStatement(queryStr);
  • pstmt.setString(1,"t-shirt");
  • pstmt.setInt(2, 1000);
  • ResultSetrs = pstmt.executeQuery();
exemple preparedstatement2
Exemple – PreparedStatement
  • String deleteStr =

“DELETE FROM Items "+

"WHERE Name = ? and Cost > ?";

  • PreparedStatementpstmt = conn.prepareStatement(deleteStr);
  • pstmt.setString(1, "t-shirt");
  • pstmt.setInt(2, 1000);
  • intdelnum = pstmt.executeUpdate();
exemple preparedstatement3
Exemple – PreparedStatement
  • Are these the same? What do they do?

Stringval ="abc";

PreparedStatementpstmt = conn.prepareStatement("select * from R where A=?");

pstmt.setString(1, val);

ResultSetrs = pstmt.executeQuery();

String val ="abc";

Statement stmt = conn.createStatement( );

ResultSetrs =

stmt.executeQuery("select * from R where A=" + val);

exercice2
Exercice
  • Développez un module d’authentification qui permet d’authentifier des utilisateurs. A noter que les informations des utilisateurs sont stockées dans une table users dans la base de données oracle
introduction1
Introduction
  • En java, il est possible de simuler l'exécution de plusieurs taches dans un même programme en même temps . C'est le multithreading. L'exécution de chaque tache est alors appelé un thread.
thread
Thread
  • Un thread n’est pasun vrai objet
  • Un thread est un flot de contrôle
  • Un thread est une série d’instructions à exécuter
creation des threads
Creation des Threads
  • En Java, il existe deux méthodes pour créer des threads.
    • Etendre la classe Thread
    • Implémenter l’interface Runnable
etendre la classe thread
Etendre la classe Thread

public class MonThreadextendsThread {

public voidrun () {

// ici se trouve la description

// du comportement du thread

}

public static void main ( String [] args ) {

MonThread t1 = new MonThread ();

t1. start ();

}

implementer l interface runnable
Implementer l’interfaceRunnable

public class Tache implementsRunnable {

public voidrun () {

// ici se trouve la description

// du comportement du thread

}

public static void main ( String [] args ) {

// on crée une tache pour un thread :

Tache job = new Tache ();

//Runnable job=new Tache();

Thread t1 = new Thread (job ); :

t1. start ();

}

les m thodes d un thread
Les méthodes d’un Thread
  • voidstart()
    • Démarre le thread – appelle la méthode run() du thread
    • Elle est appelée une seule fois
  • voidrun()
    • Contient les taches à exécuter par le thread
  • void stop()
    • Arrête le Thread
    • A ne pas utiliser
    • Il suffit d’arrêter le thread manuellement
      • Par code (sortir de la fonction run())
      • Utilisation de la méthode interrupt();
exemple5
Exemple

public static void main ( String [ ] args ) {

// étape 1

Runnable r = new MaTache ();

Thread t = new Thread (r);

t. start (); // étape 2 : une nouvelle pile est créée

Chat c = new Chat ();

c.start();

}

les m thodes d un thread1
Les méthodes d’un Thread
  • voidyield()
    • Permet l’arrêt momentané du thread et sa re-jointure à la queue
    • Le/Les thread/s qui sont dans la queue et de même priorité seront exécutés
  • voidsleep(int m) ou sleep(int m, intn)
    • Faisendormirle thread
exemple yield
Exemple – yield()

class YieldThreadextends Thread {

public voidrun() {

for ( int count = 0; count < 4; count++) {

System.out.println( count + "From: " + getName() );

yield();

}

}

}

class TestYield {

public static void main( String[] args ) {

YieldThread first = new YieldThread();

YieldThread second = new YieldThread();

first.start();

second.start();

System.out.println( "End" );

}

}

Résultat

End

0From: Thread-0

0From: Thread-1

1From: Thread-0

1From: Thread-1

2From: Thread-0

2From: Thread-1

3From: Thread-0

3From: Thread-1

cycle de vie d un thread
Cycle de vie d’un thread
  • Le thread est nouveau. L'objet est créé mais il n'y a pas encore de file d'exécution.
      • Thread t = new Thread (r);
  • Le thread est exécutable. Quand vous lancez le thread, une pile est créée. Le thread attend dans la file pour que la JVM le choisisse afin de s'exécuter.
      • t. start () ;
  • le thread est en cours d'exécution. C'est le thread qui s'exécute, le seul. C'est l'ordonnanceur de la JVM qui décide quel thread va s'exécuter à un moment donné. Quand un thread s'exécute les autres sont en attente. A tout moment l'ordonnanceur peut arrêter l'exécution du thread (il retourne alors dans l'état Active) et en choisir un autre.
cycle de vie d un thread1
Cycle de vie d’un thread

new

Active in the queue

start()

sleep(500)

Blocked

wake up

Born

JVM

suspend()

Runnable

resume()

Stop/Interrupt()

wait

notify

Stop/Interrupt()

Waiting for a monitor

Dead

block on I/O

Acquire monitor

I/O available

quel est le resultat de ce programme
Quel est le resultat de ce programme ?

public class MaTacheimplementsRunnable {

public voidrun () {

for ( int i = 0; i < 30; i++) {

String nom = Thread . currentThread (). getName ();

System .out. println (nom + "est en cours d'exécution ");

}

}

public staticvoid main ( String [] args ) {

Runnable tache = new MaTache ();

Thread a = new Thread ( tache );

a. setName (" Caroline ");

Thread b = new Thread ( tache );

b. setName (" Cedric ");

System.out.println("wawawawa");

a. start ();

b. start ();

System.out.println("laaaaaaaa");

}

}

slide194

Cedric est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Cedric est en cours d'exécution

Cedric est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Cedric est en cours d'exécution

Cedric est en cours d'exécution

Cedric est en cours d'exécution

Cedric est en cours d'exécution

probl me d acc s concurrent
Problème d’accès concurrent
  • les Threads partagent les mêmes ressources (mémoire, écran, les attributs et méthodes d’un même object partagé, etc.)
  • Dans certaines situations, il est nécessaire d’obtenir un résultat cohérent
  • Exemple
    • Garantir des opérations de débits et crédits synchronisées qui peuvent être interprétées, par des opérations de lectures, comme cohérentes à tout instant
      • Transaction bancaire
      • Reservation billets d’avion
  • Dans certaines situations, il est nécessaire de bloquer l’ accès concurrent à un même attribut ou méthode
    • Cas où deux thread traitent un même objet
probl me d acc s concurrent1
Problème d’accès concurrent
  • L’utilisation des Threads implique de nombreux problèmes !
    • Accès concurrent à certains conteneurs de données (et leurs modifications) !
    • Protection de certaines sections pour éviter des interblocages
      • Par exemple lorsque deux threads essayent de verrouiller alternativement deux fonctions synchronisées de deux instances différentes d’un même classe
synchronization
Synchronization
  • Une solution pour résoudre à l’accès concurrent
  • Attention aux méthodes statiques qui sont associées aux classes. Synchroniser de telles méthodes revient a bloquer l'accès à toute la classe

synchronized public voidmaMethode {

// Cette méthode ne peut être exécutée de manière concurrente

...

}

les critures suivantes sont equivalentes
public synchronized void a() {

//… some code …

}

Les écrituressuivantessontEquivalentes

public void a() {

synchronized (this){

//… some code …

}

}

synchronization1
Synchronization

public class MaTacheimplementsRunnable {

public voidrun () {

synchronized (this){

for ( int i = 0; i < 30; i++) {

String nom = Thread . currentThread (). getName ();

System .out. println (nom + "est en cours d'exécution ");

}

}

}

resultat
Resultat

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Caroline est en cours d'exécution

Cedric est en cours d'exécution

Cedric est en cours d'exécution

Cedric est en cours d'exécution

Cedric est en cours d'exécution

Cedric est en cours d'exécution

Cedric est en cours d'exécution

Cedric est en cours d'exécution

les methodes wait et notify
Les methodes wait() et notify()
  • wait()
    • S’exécute dans un bloc synchronized
    • Met le thread en exécution en attente(bloquee) jusqu’à ce qu’un autre thread crée sur le même objet exécute la méthode notify() ou notifyAll()
    • Libère le monitor de l’objet/fonction courant(e)
    • Wait est similaire àyield sauf que wait attend l’ exécution de notify pour remettre le thread dans la queue, l’ ordonnanceur le choisit, et le thread essaye d’acquérir le monitor pour verrouiller l’objet/la fonction.
slide202

public class CubbyHole {

  • privateint contents;
  • privatebooleanavailable = false;
  • public synchronizedvoidget() {
  • if (available == false) {
  • try {
  • wait();
  • } catch (InterruptedException e) { }
  • }
  • available = false;
  • System.out.println( “consume " +
  • contents);
  • notifyAll();
  • }
  • public synchronizedvoid put(int value) {
  • if (available == true) {
  • try {
  • wait();
  • } catch (InterruptedException e) { }
  • }
  • contents = value;
  • available = true;
  • System.out.println( “produce: " +
  • contents);
  • notifyAll();
  • }
  • }
applications
Applications
  • Exemple 1

PrintThread1 a = new PrintThread1("*");

PrintThread1 b = new PrintThread1("-");

a.start();

b.start();

applications1
Applications
  • Exemple 1 suite

class PrintThread1 extends Thread {

String name;

public PrintThread1(String name) {

this.name = name;

}

public void run() {

for (inti=1; i<100 ; i++) {

try {

sleep((long)(Math.random() * 100));

} catch (InterruptedExceptionie) { }

System.out.println(name);

}

}

}

applications3
Applications
  • Exemple 2

bankAccount b=new bankAccount();

setBalance b1=new setBalance(b,100,50);

b1.start();

setBalance b2=new setBalance(b,200,100);

b2.start();

setBalance b3=new setBalance(b,300,150);

b3.start();

applications4
Applications
  • Exemple 2

class bankAccount

{

private float debit=1000;

private float credit=500;

public synchronized void deposit(float amount){

debit += amount;

System.out.println("db="+debit);

}

public synchronized void withdraw(float amount){

credit -= amount;

System.out.println("cr="+credit);

}

}

applications5
Applications
  • Exemple 2

class setBalance extends Thread {

bankAccountba;

intdp;

int wd;

public setBalance(bankAccountbanka, intdp, int wd){

this.ba = banka;

this.dp=dp;

this.wd=wd;

}

public void run() {

ba.deposit(this.dp);

ba.withdraw(this.wd);

}

}

applications6
Applications
  • Avec synchronization

db=1100.0

cr=450.0

db=1300.0

cr=350.0

db=1600.0

cr=200.0

  • Sans synchronization

db=1100.0

cr=450.0

db=1300.0

db=1600.0

cr=300.0

cr=200.0

Avec une possibilité d’accès concurrent à une même méthode par deux thread

db=1300.0 (1300)

db=1600.0 (1400)

applications7
Applications
  • Exemple 3

incr c1=new incr(5);

incr c2=new incr(5);

c1.start();

c2.start();

applications8
Applications

Exemple 3

class incr extends Thread {

int n;

inti=0;

public incr(int k){

this.n = k;

}

public void run() {

while (i<=n)

{

System.out.println(Thread.currentThread().getName()+ "i="+i);

i++;

try {

sleep(100);

} catch (InterruptedException ex) {

Logger.getLogger(incr.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

}

applications9
Applications
  • Compléter la notion de producteur et consommateur en utilisant la classe CubbyHole
  • On suppose
    • Que la fonction put() est le producteur, et que la fonction get() est le consommateur
    • Qu’on souhaite produire et consommer 10 espèces
    • La sortie peut être comme suit:
      • Produce : 0
      • Consume: 0
      • Produce : 1
      • Consume: 1
      • Produce : 3
      • Consume: 3
introduction2
Introduction
  • Interagissant simplement avec les DB
  • Essentiellement OO
  • Lisible en XML et optant pour les services Web
langages net
Langages .Net
  • Tous les langages doivent se conformer au CTS(Common Type System).
    • Tout est objet
    • C# est très fortement typé. Plus riche que Java.
    • Décrit les classes(visibilite, type, constructeur,…), interfaces, delegates, arrays, pointers, events, data types …
    • Décrit deux systèmes de typage: par valeur ou par référence
    • Assure une interopérabilité avec les autres langages
      • Types natives définis par le CTS et communs à tous les langages .Net
    • Type existant (int) ou type crée (enum, classe,…)
    • Les pointeurs sont possibles mais très rarement utilisés
langages net1
Langages .Net
  • Le CLS(Common Langage Specification) est une couche qui décrit largement les règles d’interopérabilité
  • Les programmes doivent respecter un ensemble de règles pour permettre l’intégration des langages
    • Un composant créé par un langage respectant CLS peut être utilisé par un autre langage respectant CLS
    • Les règles définies par le standard CLS obéissent aux règles imposer par le CTS
langages net2
Langages .Net
  • Les programmes sont exécutés dans le CLR(Common Langage Runtime) = machine virtuelle (à la Java): gestion sécurité et gestion mémoire.
  • De nombreuses librairies .Net: I/O, String, Securité, Network, thread, Collections, XML + Services Web, SQL, GUI (Windows Forms).
les librairies
Java

C#

  • import java.util.ArrayList;
  • usingSystem.Collections;
LES LIBRAIRIES
sortie
Java

C#

  • System.out.println("hello world");
  • Console.WriteLine("hello world");
Sortie
pointeurs
Java

C#

  • Non pas de pointeurs
  • Existent mais rarement utilises
Pointeurs
types
Java

C#

  • Boolean
    • boolean
  • Entiers signés
    • Tous les types primitifs sont signés
  • String
  • Boolean
    • Bool, Boolean
  • Entiers signés et non signés
    • int, uint, long, ulong, etc.
  • String, string
Types
types1
Java

C#

  • Comparaison des Strings
    • Operateur equals()
  • Conversion String a Integer
    • Integer.parseInt("3");
  • Passage par valeur
  • Comparaison des Strings
    • Soit == soit Equals ()
  • Conversion String a Integer
    • int.Parse("3");
  • Passage par valeur et par adresse (mot clé ref )
Types
boucle foreach
Java

C#

  • for (int i : someArray) { }
  • foreach (inti in someArray) { }
Boucle foreach
heritage
Java

C#

  • Heritage simple et pas d’heritage multiple
    • class Dog extends Animal implements Comparable
  • Mot clé super
  • Heritage simple et pas d’heritage multiple
    • class Dog : Animal, IComparable
  • Mot clé base
Heritage
les propri t s en c
Les propriétés en C#
  • Une propriété est un membre d'une classe permettant d'accéder ou de modifier les caractéristiques d'un objet
  • Une propriété comprend un accesseur get qui permet de retourner une valeur et un accesseur set qui permet de modifier une valeur.
exemple6
Exemple

class User {

private int age;

public int Age

{

get { return age; }

set { age = value; }

}

}

class Test {

private User user;

public Test ()

{

user = new User();

// Set

user.Age = 25;

// Get

int age = user.Age;

// Set

user.Age += 1;

}

}

h ritage7
Héritage

class Etudiant: Personne

{

public Etudiant(String nom, intage):base(nom, age) {…}

}

les tableaux
Les Tableaux
  • String [] noms = new String[4];
  • int[] ia= new int[4];
  • String [] noms = {«John», «Denise», «Pierre», «Paul»};
  • int[] ia= {1, 2, 5, 7, 9, 2, 3};
  • noms[3] = «Isabelle»;
  • nom.Length;
  • Homme [] lesHommes= new Homme[];
  • lesHommes[0] = new Homme();
  • int[,] V= new int[3,3];
    • En JAVA: int[][] V= new int[3][3];
  • int[,] = {{1,1},{3,2},{4,5}};
    • En JAVA: int[][] v={{1,1},{3,2},{4,5}};
exemple7

using System;

usingSystem.Collections;

public class TestForeach

{

public staticvoid Main()

{

ArrayListlist = new ArrayList();

list.Add("John");

list.Add("Paul");

list.Add("Frank");

list.Add("Pierre");

foreach(String p in list)

{

Console.WriteLine(p);

}

}

}

Exemple
la classe array de system
La classe Array de System
  • String [] s = {“ John “ ,“ Denise “, “ Pierre “, “ Paul “};
  • Array.Sort(s);
    • // cela donnera 2.
    • Int pos = Array.BinarySearch(s, “Paul”);
  • Array.Reverse(s);
introduction3
Introduction
  • Pour manipuler des fichiers en C# il s’agit d’utiliser la classe File de System.IO
      • Plusieurs autres méthodes peuvent être utilisées . On en examinera une dans le TP
  • Cette classe permet d’effectuer les opérations courantes telles que la copie, le déplacement, l'attribution de nouveau nom, la création, l'ouverture, la suppression et l'ajout de fichiers
exemple ecriture
Exemple – Ecriture

string path = @"c:\temp\MyTest.txt";

if (!File.Exists(path))

{

// Create a file to write to.

using (StreamWritersw = File.CreateText(path))

{

sw.WriteLine("Hello");

sw.WriteLine("And");

sw.WriteLine("Welcome");

}

}

exemple lecture
Exemple – Lecture

// Open the file to read from.

using (StreamReadersr = File.OpenText(path))

{

string s = "";

while ((s = sr.ReadLine()) != null)

{

Console.WriteLine(s);

}

}

introduction4
Introduction
  • La programmation réseau repose sur les sockets
  • Sockets
    • Une norme de communication sur réseau
    • Permettent à deux applications de communiquer a l’aide d’UN PROTOCOLE
      • TCP
      • UDP
architecture

Internet

Proc4

Ports

Proc3

Proc2

Proc1

Proc5

Architecture
  • Un port et un IP forment un ‘EndPoint’

A

B

Adresse IP1

Adresse IP2

creation d un objet endpoint
Creation d’un objet Endpoint
  • Utiliser les fonctions suivantes pour récupérer l’adresse IP et le nom de la machine locale Dns.Resolve() and Dns.GetHostName()
  • IPHostEntry.AddressList==> la liste de tous les adresses IP sur cette machine

IPHostEntryhostEntry = Dns.Resolve(Dns.GetHostName());

IPEndPointendPoint =

new IPEndPoint(hostEntry.AddressList[0], 11000);

//Oubienpuisque “Dns.Resolve is obsoleted”

string hostName = System.Net.Dns.GetHostName();

IPHostEntry myself = Dns.GetHostEntry(hostName);

IPEndPointendPoint =

new IPEndPoint(myself.AddressList[0], 11000);

Utiliser les ports > 1023

creation tcp socket
Creation TCP Socket

using System.Net;

using System.Net.Sockets;

using System.Text;

Socket serveur= new Socket(AddressFamily.InterNetwork,

SocketType.Stream,

ProtocolType.Tcp);

InterNetwork: Reseaux IP

.Stream ou .Dgram

tcp sockets
TCP Sockets

Serveur

Client

Creation d’un socket TCP

Creation d’un socket TCP

Etablir la connexion

Ecouter et attendre les connexions du client

Lire et envoyer les données

Créer un socket du nœud distant

Fermeturesocket

Lire et envoyer des données

Femeture socket

mettre un socket en mode d coute
Mettre un Socket en mode d’écoute
  • Une fois le socket serveur est créé, il faut le relier à un endPoint
  • Pour mettre le socket en mode d’écoute il suffit d’appeler la méthode listen de la classe socket. Le nombre indique le nombre de connections dans la file

serveur.Bind(endPoint);

serveur.Listen(number);

cr ation socket du n ud distant
Création Socket du nœud distant
  • Utiliser Accept pour accepter une connection de la file, et retourne un socket représentant le client distant
  • //création du socket qui représente le nœud distant //coté serveur
  • Socket client= serveur.Accept();
lecture des donn es
Lecture des données
  • La fonction Receive () bloquera l’application serveurjusqu’à la réception des informations

byte[] bytes = new byte[1024];

intbytesRec = client.Receive(bytes);

if (bytesRec == 0)

break; (oubienautre action)

Console.WriteLine(Encoding.ASCII.GetString(bytes, 0, bytesRec));

envoyer des donn es
Envoyer des données
  • La fonction send() bloquera l’applicationjusqu’à l’envoie des informations
  • Ici le serveurrepond au client

byte[] msg = Encoding.ASCII.GetBytes("This is a test");

Console.WriteLine("Sending data.");

client.Send(msg);

fermeture du socket
Fermeture du Socket

serveur.Close();