Vous êtes sur la page 1sur 41

Support dexercices

M.Youssfi

Support dexercices POO Java : Objet Class Hritage Accessibilit Polymorphisme Exceptions Entres Sorties Interfaces graphiques

Par M.Youssfi

1/41

Support dexercices

M.Youssfi

Premire Application :
public class PremierProgramme { public static void main(String[] args) { System.out.println("First Test"); } } Lancer un diteur de texte ASCII et Ecrire le code source de ce programme. Enregistrer ce fichier dans un nouveau rpertoire c:\exojava sous le nom PremierProgramme.java Compiler ce programme sur ligne de commande Dos : c:\exojava>javac PremierProgramme.java Corriger les Erreurs de compilation Excuter le programme sur ligne de commande c:\exojava>java PremierProgramme

2/41

Support dexercices

M.Youssfi

Premire Application graphique


import javax.swing.*; import java.awt.FlowLayout; public class FirstGraphicApp { public static void main(String[] args) { // Crer une nouvelle fentre JFrame jf=new JFrame("Titre"); //Crer les composants graphiques JLabel l=new JLabel("Nom:"); JTextField t=new JTextField(12); JButton b=new JButton("OK"); //Dfinir une technique de mise en page jf.setLayout(new FlowLayout()); //Ajouter les composants la fentre jf.add(l);jf.add(t);jf.add(b); //Dfinir les dimensions de la fentre jf.setBounds(10, 10, 400, 400); //Afficher la fentre jf.setVisible(true); } }

3/41

Support dexercices

M.Youssfi

Premire Applet java


import java.applet.Applet; import java.awt.*; public class FirstApplet extends Applet{ public void init(){ add(new Label("Nom:")); add(new TextField(12)); add(new List()); add(new Button("OK")); } public void paint(Graphics g) { g.drawRect(2, 2, 400, 300); } } Rdiger le programme source. Enregistrer le fichier sous le nom FirstApplet.java Compiler le programme source et corriger les erreurs. Crer un page HTML qui affiche l applet sur un navigateur web: <html> <body> <applet code="FirstApplet.class" width="500" height="500"></applet> </body> </html> Vous pouvez galement AppletViewer.exe pour tester l applet : C:\exojava>appletviewer page.htm

4/41

Support dexercices

M.Youssfi

Applet Java avec gestion des vnements

import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class DeuxiemeApplet extends Applet implements ActionListener { // Dclarer etcrer les composants graphiques Label lNom=new Label("Nom:"); TextField tNom=new TextField(12); List listNoms=new List(); Button b=new Button("OK"); // Initialisation de l'applet public void init() { // Ajouter les composants l'applet add(lNom);add(tNom);add(listNoms);add(b); // En cliquant sur le bouton b le gestionnaire // des vnnements actionPerformed s'excute b.addActionListener(this); } //Mthode qui permet de grer les vnements public void actionPerformed(ActionEvent e) { if(e.getSource()==b){ // Lire le contenu de la zone de texte String nom=tNom.getText(); // Ajouter ce contenu dans la liste listNoms.add(nom); } } }

5/41

Support dexercices

M.Youssfi

Srie N1 : Exercices Objet Classe


Exercice 1 : Modlisation dun segment une dimension
extr1 extr2 Un segment est dfini par la valeur de ses deux extrmits extr1 et extr2.
Pour crer un segment, il faut prciser les valeurs de extr1 et extr2. Les oprations que lon souhaite excuter sur le segment sont : ordonne() : mthode qui permet dordonner extr1 et extr2 si extr1 est suprieur extr2 getLongueur() : mthode qui retourne la longueur du segment. appartient(int x) : retourne si x appartient au segment ou non. toString() : retourne une chane de caractres de type SEGMENT[extr1,extr2] 1- Faire une reprsentation UML de la classe Segment. 2- Implmenter en java la classe Segment 3- Crer une application TestSegment qui permet de : a. Crer objet de la classe Segment avec les valeurs extr1=24 et extr2=12. b. Afficher ltat de cet objet en utilisant la mthode toString(). c. Afficher la longueur de ce segment. d. Afficher si le point x=15, appartient ce segment. e. Changer les valeurs des deux extrmits de ce segment. f. Afficher nouveau la longueur du segment.

Exercice 2 : Segment deux dimensions.


P2(x, y)

P1(x, y)
Un segment est dfini par deux points p1 et p2. Chaque point est dfini par son abscisse x et son ordonne y. Dans ce problme, nous allons commencer tout dabord par dfinir la classe Point dfinie par : Les attributs : x et y de type int Un constructeur qui permet de dfinir les valeurs de x et de y. Une mthode toString() qui retourne une chane de caractres de type POINT(x,y). Ensuite on dfinit la classe Segment2D par : Les attributs p1 et p2 qui reprsentent les deux points des deux extrmits du segment. Pour crer un Segment2D, il faut prciser les deux points p1 et p2. Les oprations que lon souhaite excuter sur un Segment2D sont : o getLongueur() : retourne la longueur du segment. o toString() : retourne une chane de caractres de type SEGMENT[P1(x,y)|P2(x,y)] o appartient(Point p) : retourne si le point p appartient au segment ou non. 1234Faire une reprsentation du diagramme de classes. Implmenter la classe Point.java Implmenter la classe Segment2D.java Crer une application TestSegment2D qui permet de : a. Crer deux points. p1(10,20) et p2(50,60) b. Crer un objet de la classe Segment2D en utilisant les deux points crs.

6/41

Support dexercices
c. Afficher ltat de ce segment en utilisant la mthode toString() d. Afficher la longueur de ce segment. e. Afficher si le point p(22,33) appartient ce segment.

M.Youssfi

Exercice 3 : Modlisation objet dun nombre complexe.


Un nombre complexe est dfini par sa partie relle re et sa partie imaginaire im . Pour crer un nombre complexe, il faut prciser les valeurs initiales de re et im. Les oprations que lon souhaite excuter sur le nombre complexe sont : getModule() : retourne le module du nombre complexe getArgument() : retourne largument du nombre complexe. somme(Complexe c) : retourne un nombre complexe qui reprsente la somme du nombre complexe courant et le nombre complexe c. toString() : retourne une chane de caractres de type re+im i 1- Faire une reprsentation UML de la classe Complexe 2- Implmenter la classe Complexe.java 3- Crer une application qui permet de tester la classe complexe : a. Crer un nombre complexe c1=5+6 i b. Afficher largument et le module de ce nombre complexe. c. Crer un nombre complexe c2=3-2 i d. Afficher la somme du nombre complexe c1 et c2.

Exercice 4 :
P2(x,y) R C(x,y)

Une cercle est dfini par : Un point qui reprsente son centre : centre(x,y) Son rayon r On peut crer un cercle de deux manires : Soit en prcisant son centre et son rayon Soit en prcisant son centre et un point du cercle. Les oprations que lon souhaite excuter sur un cercle sont : getPerimetre() : retourne le primtre du cercle getSurface() : retourne la surface du cercle. appartient(Point p) : retourne si le point p appartient ou non au cercle. toString() : retourne une chane de caractres de type CERCLE(x,y,R) 1- Etablir le diagramme de classes 2- Crer la classe Cercle en exploitant les classes Point et Segment2D de lexerci 3- Crer une application qui permet de : a. Crer un cercle dfini par le centre c(100,100) et de rayon r=50 b. Crer un cercle dfini par le centre c(130,100) et de rayon r=40 c. Afficher le primtre et le rayon des deux cercles. d. Afficher si le point p(120,100) appartient lintersection des deux cercles ou non.

7/41

Support dexercices Correction de la srie N1 : Exercice 1 : 1- Diagramme de classes :

M.Youssfi

2- Structure du projet :

8/41

Support dexercices

M.Youssfi

3- Implmentation java de la classe Segment : package fig; public class Segment { public int extr1; public int extr2; // Constructeur public Segment(int a,int b){ extr1=a;extr2=b;ordonne(); } public void ordonne(){ if(extr1>extr2){ int z=extr1; extr1=extr2; extr2=z; } } public int getLongueur(){ return(extr2-extr1); } public boolean appartient(int x){ if((x>extr1)&&(x<extr2)) return true; else return false; } public String toString(){ return ("segment["+extr1+","+extr2+"]"); } }

9/41

Support dexercices

M.Youssfi

4- Application :
package test; import java.util.Scanner;import fig.Segment; public class Application { public static void main(String[] args) { Scanner clavier=new Scanner(System.in); System.out.print("Donner Extr1:");int e1=clavier.nextInt(); System.out.print("Donner Extr2:");int e2=clavier.nextInt(); Segment s=new Segment(e1, e2); System.out.println("Longueur du"+s.toString()+" est :"+ s.getLongueur()); System.out.print("Donner X:");int x=clavier.nextInt(); if(s.appartient(x)==true) System.out.println(x+" Appartient au "+s); else System.out.println(x+" N'appartient pas au "+s); } }

Excution :

Donner Extr1:67 Donner Extr2:13 Longueur dusegment[13,67] est :54 Donner X:7 7 N'appartient pas au segment[13,67]

10/41

Support dexercices Corrig des autres exercices :

M.Youssfi

11/41

Support dexercices

M.Youssfi

12/41

Support dexercices

M.Youssfi

Object, Classe, Hritage, Accessibilit et Polymorphisme


A- Questions de concepts

1. 2. 3. 4. 5.

Par quoi est caractris un objet. Quelle est la particularit des membres statiques dune classe. Quelle est la diffrence entre une classe abstraite et une interface. Pour quelles raisons, on dclare une variable ou une mthode de type final. Quelle est la diffrence entre les autorisations private, protected et package.
d.Mthode abstraite.

6. Donner une dfinition des concepts suivants : a. Classe abstraite b.Interface c.Classe final e. Variable transient.

B- Exercice
On souhaite crer une application java qui permet de calculer de cots de transport de marchandises. Les marchandises transportes sont des instances de la classe Marchandise dfinie par : Les attributs numro, poids et volume Un constructeur avec paramtre et un autre sans paramtre Une mthode toString Les getters et setters Une cargaison peut transporter plusieurs marchandises. Il existe deux types de cargaisons : Routire et Arienne. La classe abstraite Cargaison est dfinie par la distance sur laquelle elle est transporte (distance du parcours) qui est connue au moment de se cration et un vecteur de marchandises. Les oprations de cette classe sont : Une mthode qui permet dajouter une marchandise au vecteur des marchandises. Une mthode qui permet dafficher toutes les marchandises. Une mthode abstraite cout () qui permet de retourner le cot de la cargaison. Une mthode qui permet de retourner une marchandise sachant son numro. Une cargaison arienne est une cargaison dont le cout est calcul selon la formule suivante : cout=10 x distance x poids total des marchandises si le volume total est infrieur 80000 cout=12 x distance x poids total des marchandises si le volume total est suprieur ou gal 80000 Une cargaison routire est une cargaison dont le cout est calcul selon la formule suivante : cout=4 x distance x poids total si le volume total est infrieur 380000 cout=6 x distance x poids total si le volume total est suprieur ou gale 380000 Questions : 1- Crer un diagramme de classe simplifi (Mentionner uniquement les attributs ) 2- Ecrire le code java de la classe Marchandise 3- Ecrire le code java de la classe Cargaison 4- Ecrire le code java de la classe CargaisonRoutire 5- Ecrire le code java de la classe CargaisonArienne 6- Ecrire le code java dune application qui permet de : a. Crer une cargaison routire b. Ajouter la cette cargaison 3 marchandises c. Afficher toutes les marchandises de cette cargaison d. Afficher le cout de cette cargaison e. Crer une cargaison arienne f. Afficher le cout de cette cargaison

13/41

Support dexercices TD de synthse COO et POO java

M.Youssfi

Nous souhaitons concevoir et implmenter une application oriente objet qui permet de grer un cinma. Le cinma contient un ensemble de salles. Chaque salle est dfinir par un numro, un nom et le nombre de places quelle offre. Il existe deux types de salles les salles normales et les salles VIP. Le prix dune place est dfini en fonction du type de salle. Nous supposons que le prix dune place dans salle normale est fix 30 DH alors que le prix dune place dans une salle VIP est fix 60 DH. Le cinma mmorise galement un ensemble de films. Chaque film est dfini par son titre et son ralisateur. Le cinma mmorise galement les sances des projections. Chaque sance de projection concerne un film et se droule dans une salle. Pour chaque sance de projection, on doit mmoriser la date de projection ainsi que le nombre de places vendues. Nous prvoyons galement de dfinir dans la classe Sance une mthode qui permet de ventre un certain nombre de places. Cette application peut tre exploite par un utilisateur, un vendeur et ladministrateur. Un utilisateur peut effectuer les oprations suivantes :
Consulter un film sachant son titre. Consulter les films dans le titre contient un mot cl. Consulter une salle sachant son numro Consulter les films des sances programmes. Acheter une place, si elle est disponible, pour un film donn.

Un vendeur peut effectuer toutes les oprations quun utilisateur peut effectuer. En plus, il peut effectuer lopration suivante :
Vendre un certain nombre de places pour un film donn. Ajouter un nouveau film Ajouter une novelle salle Ajouter une nouvelle sance. Consulter le chiffre daffaire (Total des prix des places vendues de toutes les sances) Consulter le taux de remplissage pour un film donn Charger les films partir dun fichier texte. Srialiser les donnes du cinma.

Un administrateur doit pouvoir effectuer les oprations suivantes :

Le vendeur et ladministrateur doivent sauthentifier avant toute opration. Travail faire : 1- Etablir un diagramme Use Case pour ce problme 2- Etablir un diagramme de classes qui montre les structures de donnes manipules par le systme ainsi que les mthodes implmenter. Les mthodes daccs aux attributs (Getters et Setters) ne seront pas reprsentes. La classe Cinema devrait implmenter les trois interfaces IUserCinema, IVendeurCinema et IAdminCinema 3- Implmenter, en java, les classes Salle, SalleNormale,SalleVIP, Film et Seance 4- Ecrire le code java des trois interfaces IUserCinema, IVendeurCinema et IAdminCinema. 5- Ecrire le code java de la classe Cinema. Nous supposons que les films sont stocks dans un fichier nomm cinema.txt . chaque ligne de ce fichier contient le titre du filme et le ralisateurs spars par un point virgule titre;ralisaeur 6- Crer un diagramme de squence qui permet de traduire , dans une application, les oprations suivantes :
a. b. c. d. e. f. g. h. Crer un nouvel objet Cinema. Charger les films partir dun fichier texte. Ajouter un nouveau film. Ajouter une nouvelle salle. Ajouter une nouvelle sance concernant le film X3D dans la salle 4. Consulter le chiffre daffaire Consulter le taux de remplissage pour le film X3D Srialiser les donnes du cinma.

7- Ecrire le code java dune application qui implmente le diagramme de squence prcdent

14/41

Support dexercices

M.Youssfi

8- Crer une application graphique SWING qui permet de saisir un mot cl et qui affiche les films dont le titre contient ce mot cl. On suppose que les films sont stocks dans une base de donnes

15/41

Support dexercices

M.Youssfi

TD de Synthse POO JAVA


Objet, Classe, Hritage, Encapsulation, Polymorphisme Collection, Exceptions, Entres Sorties, Interface graphiques Problme : On souhaite crer une application java qui permet grer une socit de transport de cargaisons transportant des marchandises. La socit gre un ensemble de cargaisons. Chaque cargaison contient plusieurs marchandises. Chaque marchandise est dfinie par son numro, son poids et son volume. Il existe deux types de cargaisons : Routire et Arienne. Chaque cargaison est dfinie par sa rfrence et sa distance de parcours. Le cout de transport dune cargaison est calcul en fonction du type de la cargaison. Pour une cargaison arienne est une cargaison dont le cout est calcul selon la formule suivante : cout=10 x distance x poids total des marchandises si le volume total est infrieur 80000 cout=12 x distance x poids total des marchandises si le volume total est suprieur ou gal 80000 Une cargaison routire est une cargaison dont le cout est calcul selon la formule suivante : cout=4 x distance x poids total si le volume total est infrieur 380000 cout=6 x distance x poids total si le volume total est suprieur ou gale 380000 Pour chaque cargaison, on souhaite ajouter une marchandise, supprimer une marchandise, consulter une marchandise sachant son numro, consulter toutes les marchandises de la cargaison, consulter le poids total de la cargaison, consulter le volume total de la cargaison et consulter le cout de la cargaison. Cette application peut tre utilise par les clients et les administrateurs. Le client peut effectuer les oprations suivantes : Consulter une cargaison sachant sa rfrence. Consulter une marchandise sachant son numro. Lire le fichier Cargaisons. Consulter toutes les cargaisons. Ladministrateur peut effectuer toutes les oprations effectues par le client. En plus, il peut : Ajouter une nouvelle cargaison. Ajouter une marchandise une cargaison. Supprimer une cargaison Enregistrer les cargaisons dans un fichier. Toutes les oprations ncessitent une authentification Questions : 1- Etablir un diagramme Use case UML. 2- Etablir le diagramme de classes en prenant en considration les critres suivants. La classe SocieteTransport devrait implmenter les deux interfaces IClientTransport et IAdminTranport dclarant, respectivement les oprations relatives aux rles Client et Admin. Dans une premire implmentation de SocieteTransport, on suppose que les cargaisons sont stockes dans une liste de type HashMap de la classe SocieteTransport. Dans une deuxime implmentation, nous supposerons que les cargaisons et les marchandises sont stockes dans une base de donnes relationnelle. 16/41

Support dexercices

M.Youssfi

Lassociation entre cargaison et Marchandise est bidirectionnelle. 3- Ecrire le code java des classes entits Marchandise, Cargaison, CargaisonRoutire et CargaisonArienne 4- Ecrire le code java des deux interfaces IClientTransport et IAdminTransport 5- Crer une premire implmentation java de ces deux interfaces 6- Etablir un diagramme de squence puis crer une application java de type console qui permet de raliser les oprations suivantes : Crer une instance de SocieteTransport pour un administrateur. Ajouter trois cargaisons routires et une cargaison arienne socit de transport : CR1 , CA1 et CR2 Ajouter 3 marchandises la cargaison dont la rfrence est CR1 (Numros 1, 2, 3) Ajouter 2 marchandises la cargaison dont la rfrence est CA1 (Numros 4,5) Afficher toutes les informations concernant la cargaison CR1 Afficher toutes les informations concernant la marchandise 3. Srialiser les donnes dans le fichier transport1.data 7- Etablir un diagramme de squence puis crer une deuxime application java de type console qui permet de raliser les oprations suivantes : Crer une instance de la classe SocieteTransport pour un client. Charger les donnes partir du fichier transport1.data Afficher toutes les informations concernant la cargaison CA1 8- Crer une application SWING qui permet la saisie, lajout, la suppression, la consultation des donnes de lapplication. 9- Etablir un modle logique de donnes relationnel relatif au diagramme de classe. 10- Crer la base de donnes MYSQL. 11- Crer une nouvelle implmentation des deux interfaces pour une gestion de donnes stockes dans la base de donnes en faisant le mapping objet relationnel. Trouver une solution qui permet lapplication de changer limplmentation de SocieteTransport, sans modifier le code source de lapplication. Autrement dit, lapplication doit tre ferme la m

17/41

Support dexercices ANNEXES

M.Youssfi

Dans cette annexe, nous vous donnons quelques exemples de code java des problmes traits en TD et TP. Ce code na aucune relation avec le problme trait. Toute fois, il pourra vous servir pour des consultations syntaxiques.

1- Exemple de classe Abstraite qui contient des mthodes : Figure.java package graphisme;import java.awt.*; public abstract class Figure { protected Point[] points; protected boolean selected; protected Color couleurContour=Color.blue; protected Color couleurRemplissage=Color.YELLOW; public abstract void dessiner(Graphics g); public abstract double getSurface(); public abstract double getPerimetre(); public abstract double distanceAuCentre(Point p); public void selectionner(){selected=true;} public void deSelectionner(){selected=false; } // Getters et Setters } 2- Exemple de classe Cercle qui hrite de la classe Figure package graphisme; import java.awt.Graphics; public class Cercle extends Figure { private double rayon; public Cercle(Point c,double r){ points=new Point[1];points[0]=c;rayon=r; } public Cercle(Point c,Point p2){ points=new Point[1];points[0]=c;rayon=c.distance(p2); } public void dessiner(Graphics g) { g.setColor(couleurContour); int x1=(int)(points[0].x-rayon); int y1=(int)(points[0].y-rayon); g.drawOval(x1, y1, (int)(2*rayon),(int)(2*rayon)); if(selected==true) g.drawOval(x1-2, y1-2, (int)(2*rayon)+4,(int)(2*rayon)+4); g.setColor(couleurRemplissage); g.fillOval(x1, y1, (int)(2*rayon),(int)(2*rayon)); } public double getSurface() { return Math.PI*rayon*rayon; } public double getPerimetre() { return 2*Math.PI*rayon; } public double distanceAuCentre(Point p) { double distance=points[0].distance(p); return distance; } public String toString() { return "Cercle("+points[0].x+","+points[0].y+","+rayon+")"; } }

18/41

Support dexercices

M.Youssfi

3- Exemple dinterface java : package graphisme; import java.awt.Graphics; public interface IDessin { public void addFigure(Figure f); public Figure getFigurePlusProche(Point p); public void dessiner(Graphics g); public void afficher(); public void supprimer(Figure f); } 4- Exemple de classe implmentant cette interface : package graphisme; import java.awt.*;import java.util.ArrayList; import java.util.List; public class Dessin implements IDessin{ private List<Figure> figures=new ArrayList<Figure>(); public void addFigure(Figure f) { figures.add(f); } public Figure getFigurePlusProche(Point p) { double dMin=figures.get(0).distanceAuCentre(p); int index=0; for(int i=1;i<figures.size();i++) if(figures.get(i).distanceAuCentre(p)<dMin){ dMin=figures.get(i).distanceAuCentre(p); index=i; } return figures.get(index); } public void dessiner(Graphics g) { for(Figure f:figures) f.dessiner(g); } public void afficher() { for(Figure f:figures) System.out.println(f.toString()); } public void supprimer(Figure f) { figures.remove(f); } } 5- Exemple dapplication java : package graphisme; public class Application { public static void main(String[] args) { Dessin d=new Dessin(); d.addFigure(new Cercle(new Point(50,70),60)); d.addFigure(new Rectangle(new Point(100,100), new Point(200,200))); d.addFigure(new Cercle(new Point(90,90),

19/41

Support dexercices
new Point(150,150))); d.afficher(); Figure f=d.getFigurePlusProche(new Point(150,200)); System.out.println("Figures plus poche:"); System.out.println(f.toString()); System.out.println("Surface de "+f+"="+f.getSurface()); System.out.println("Surface de "+f+"="+f.getPerimetre()); f.selectionner(); } }

M.Youssfi

6- Exemple de mthodes qui manipulent les fichiers : Une mthode qui permet de charger une liste lesChaines dobjets de type Chaine dont les donnes sont lues partir du fichier texte

public void chargerChaines(){ File f=new File("chaines.txt"); if(f.exists()){ try { FileReader fr=new FileReader(f); BufferedReader br=new BufferedReader(fr); String s; while((s=br.readLine())!=null){ Chaine ch=new Chaine(); String[] tab=s.split(";"); ch.setNumero(Integer.parseInt(tab[0])); ch.setNomChaine(tab[1]); ch.setFrequence(Float.parseFloat(tab[2])); ch.setPolarite(tab[3].charAt(0)); lesChaines.add(ch); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } else{ System.out.println("Fichier introuvable"); } }
Mthode pour srialiser la liste des chaines dans un fichier

public void serialiser(){ File f=new File(nom+".dat"); try { FileOutputStream fos=new FileOutputStream(f); ObjectOutputStream oos=new ObjectOutputStream(fos); oos.writeObject(lesChaines); oos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }

20/41

Support dexercices

M.Youssfi

7- Exemple dinterface graphique SWING

21/41

Support dexercices

M.Youssfi

Corrig :

22/41

Support dexercices

M.Youssfi

23/41

Support dexercices

M.Youssfi

Exercice dapplication sur les exceptions


Crer une application java qui permet de : - Saisir au clavier un nombre entier positif qui reprsente le temps en secondes du parcours dun kilomtre - Afficher la vitesse en km/h : vitesse=3600/temps On tachera de dfinir les mthodes suivantes : - int saisir() : qui permet de retourner un entier positif saisi au clavier - int calcul(int t) : retourne la vitesse.

JVM

main()
IOException NegException NumberFormatException ArithmeticException

Saisir() Solution :

calcul()

1- Crer une exception NegException :


public class NegException extends Exception { public NegException(String s){ super(s); } }

2- Application :
import java.io.*; public class Vitesse { public static void main(String[] args) { try { int temps=saisir(); int v=calcul(temps); System.out.println("Vitesse="+v+"Km/h"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NegException e) { // TODO Auto-generated catch block System.out.println(e.getMessage()); } catch(ArithmeticException e){ System.out.println("Le temps ne peut pas tre nul"); } catch(NumberFormatException e){ System.out.println("Il faut saisir un nombre");

24/41

Support dexercices

M.Youssfi

} } public static int saisir()throws IOException,NegException { BufferedReader br=new BufferedReader( new InputStreamReader(System.in)); System.out.print("Temps:"); String s=br.readLine(); int t=Integer.parseInt(s); if(t<0) throw new NegException("valeur ngative"); return t; } public static int calcul(int t){ return(3600/t); } }

Excussion 1 : Temps:100 Vitesse=36 Km/h Excussion 2 : Temps:0 Le temps ne peut pas tre nul Excussion 3 : Temps:-10 valeur ngative Excussion 4 : Temps:azaze Il faut saisir un nombre

25/41

Support dexercices

M.Youssfi

TP Entres sorties ENTRES-SORTIES et Interfaces graphiques


Exercice 1 On considre un fichier texte qui contient la liste des chanes TV dun rcepteur numrique. Chaque ligne de ce fichier reprsente une chane. Chaque chane est dfinie par un numro, un nom et une frquence et sa polarit qui peut tre soit horizontale H, soit verticale V. Les diffrentes valeurs sont spares par des points virgules. La forme de ce fichier nomm chaines.txt est la suivante : 1;TF1;10911;V 2;2M;12476;H 3;HISTOIRE;10911;V 4;FRANCE5;10873;V 5;TPS FOOT;10796;V 6;INFOSPORT;10796;V 7;M6;10911;V 8;ESCALES;11881;H Travail faire: 1- Crer le fichier chaines.txt 2- Crer la classe Chaine.java 3- Crer la classe Recepteur.java dfinie par un attribut nom et un vecteur de chaines. Les mthodes dfinir pour cette classe sont : a. Une mthode qui permet dajouter une chane au vecteur lesChaines. b. Une mthode qui permet de supprimer une chane. c. Une mthode qui permet de charger toutes les chanes partir du fichier cr. d. Une mthode qui permet dafficher toutes les chanes charges. e. Une mthode qui permet de srialiser toutes les chanes dans un autre fichier qui porte le nom du rcepteur. f. Une mthode qui permet de dssrialiser les chanes partir dun fichier 4- Crer une application sur console qui permet de permet de : a. Crer un rcepteur b. Charger les chanes partir du fichier chaines.txt c. Ajouter une autre nouvelle chane au rcepteur d. Afficher les chanes du rcepteur e. Srialiser le rcepteur dans f. Crer un nouveau rcepteur g. Charger les chanes du fichier Recepteur1.txt en dssrialisant h. Afficher les chanes du nouveau rcepteur 5- Crer une application graphique SWING qui permet de : a. Saisir le nom du rcepteur dans un champ de texte JTextField b. En cliquant sur un bouton, crer un rcepteur en lajoutant un JList c. En cliquant sur un bouton charger toutes les chanes du fichier chaines.txt dans le rcepteur slectionn. d. En cliquant sur un autre bouton srialiser les chanes du rcepteur slectionn

26/41

Support dexercices

M.Youssfi

e. En cliquant sur une autre bouton dssrialiser les chanes vers le rcepteur slectionn. f. En slectionnant chaque rcepteur, afficher toutes ses chanes dans une autre liste. g. En cliquant sur un autre bouton, supprimer la chane slectionne du rcepteur slectionn. Exercice 2 Crer une application java qui permet de : Saisir le nom dun dossier Afficher le contenu de ce dossier ainsi que celui de toute son arborescence

Exercice 3 Crer une application java qui permet de : Saisir le nom dun dossier Compresser le contenu de ce dossier dans un fichier.zip Crer une autre application qui permet de dcompresser cette archive Rdiger un rapport pour ce TP

27/41

Support dexercices Corrig :

M.Youssfi

28/41

Support dexercices

M.Youssfi

29/41

Support dexercices

M.Youssfi

TP POO Java Modlisation objet dun routeur


Problme
Nous souhaitons dvelopper une application orient objet java qui permet la simulation dun rseau local. Dans cette partie, nous allons nous intresser la modlisation dun routeur et ses composants. Un routeur est caractris par son nom. Le routeur se compose galement dun ensemble de Ports RouterPort qui sont de deux types : SerialPort et EthernetPort. Chaque port est dfini par un nom, une adresse IP exemple "192.168.1.1" et un masque ; exemple "255.255.255.0". La particularit des ports de type Ethernet cest quils sont caractrises par une adresse mac qui est de type entier alors que la particularit des SerialPort cest quelles sont caractrises par un serialId qui est de type String.

Routeur

RouterPort

EthernetPort

SerialPort

La classe RouterPort est abstraite et dfinie par ses attributs : portName : reprsente le nom du port avec une valeur initiale Eth ipAdress : reprsente ladresse IP du port mask : reprsente le masque avec une valeur par dfaut de 255.255.0.1. nbPorts : un attribut statique qui reprsente le nombre de ports Cette classe possde un constructeur sans argument qui permet dincrmenter le nombre de ports et dinitialiser le mask la chaine "255.255.255.0" et ladresse IP "192.168.1.x" avec x reprsente le nombre de ports. La mthode toString() de cette classe retourne une chane de caractres qui contient le nom du port, ladresse IP et le masque. Le reste des mthodes tant les getters et setters. - La classe EthernetPort est dfinie par : une variable dinstance macAdress une variable statique nbEthernets qui reprsente le nombre de EthernetPort cres. Pour crer un objet de cette classe, il faut prciser la valeur de macAdress. Le constructeur de cette classe doit galement initialiser le nom de ce port par une chane "Ethernet" suivie par la valeur de nbEthernets . Cette classe possde galement un constructeur sans argument qui permet dinitialiser la valeur de macAdress par une valeur alatoire comprise entre 1 et 50000 et initialiser le nom de ce port par une chane "Ethernet" suivie par la valeur de nbEthernets. La mthode toString() de cette classe retourne une chane de caractres de type "portName/ipAdress/mask/macAdress". Le reste des mthodes tant des getters et des setters. - La classe SerialPort possde la mme structure que la classe EthernetPort sauf quil faut remplacer macAdress par serialId et la variable statique nbEthernets par nbSerials. - La classe Routeur est dfinie par : routerName qui reprsente le nom du routeur.

30/41

Support dexercices

M.Youssfi

un vecteur dobjets de type RouterPort qui permet de stocker les ports sries et Ethernet de ce routeur. Pour crer un routeur, il faut connatre le nombre de ports Ethernet nbEth et le nombre de port srie nbSer de ce routeur. A sa cration un routeur possde nbSer ports sries et nbEth ports Ethernet. Cette classe possde galement un constructeur sans argument qui permet de crer un routeur possdant un port srie et un port ethernet. Les oprations que lon souhaite dfinir pour cette classe sont : addRouterPort(RouterPort rp) : Une mthode qui permet dajouter un port rp au routeur viewConfiguration() : Une mthode qui permet dafficher les caractristiques de tous les ports de ce routeur. getRouterPort(String portName) : Mthode qui permet de retourner un objet RouterPort sachant le nom du port. Si ce port est introuvable, gnrer une exception qui porte le message Port non valide . ipConfig(String portName, String ipAdresse, String mask) : Une mthode qui permet de chercher le port dont le nom est portName et de modifier ladresse IP et le masque de ce port. loadConfig(String fileName) : Une mthode qui permet de modifier la configuration du routeur par des donnes rcupres partir dun fichier texte dont le nom est fileName Ce fichier contient un ensemble de lignes dont chacune contient le nom de du port, ladresse IP et le masque de ce port. Ces trois valeurs sont spares par un point virgule. Exemple dune ligne : ethernet1 ; 192.168.1.1 ; 255.255.255.0 serialiser(String fileName) : Une mthode qui permet de srialiser le routeur dans le fichier fileName deserialiser(String fileName) : Une mthode qui permet de dsrialiser le routeur partir du fichier filename.

Travail demand :
1- Complter le diagramme de classes en inscrivant sur chaque classe ses attributs, ses constructeurs et ses mthodes. 2- Ecrire le code java de la classe RouterPort 3- Ecrire le code java de la classe EthernetPort 4- Ecrire le code java de la classe SerialPort 5- Ecrire le code java de la classe Routeur 6- Ecrire le code java dune application qui permet de : a. Crer un routeur possdant un port srie et un port ethernet. b. Dfinir le nom de ce routeur CISCO SB 107 c. Ajouter deux ports Ethernet et un port srie ce routeur. d. Dfinir ladresse IP 192.168..11 et le masque 255.255.0.1 du port Ethernet1 e. Afficher la configuration de ce routeur f. Charger la configuration partir du fichier cisco11.ini dans ce routeur g. Afficher nouveau la configuration de ce routeur h. Srialiser le routeur 7- Crer une application graphique AWT qui permet de : Saisir le nom du routeur dans une zone de texte En cliquant sur un bouton crer , Crer un routeur dont le nom est celui qui a t saisi. Charger la configuration de ce routeur partir du fichier config12.ini Afficher la configuration de ce routeur dans une zone de liste.

31/41

Support dexercices

M.Youssfi

ANNEXE
Dans cette annexe, vous trouverez le corrig du Tp entre-sorties Ce problme traite le cas dun rcepteur qui contient plusieurs chanes qui sont charges partir dun fichier texte. Le problme trait dans cette annexe na aucun lien avec le problme de lexamen, toutefois, elle peut vous servir pour faire des consultation syntaxiques.
1- Classe Chaine.java package rec; import java.io.Serializable; public class Chaine implements Serializable { private int numero; private String nomChaine; private float frequence; private char polarite; public Chaine() { super(); } public Chaine(int numero, String nomChaine, float frequence, char polarite) { super(); this.numero = numero; this.nomChaine = nomChaine; this.frequence = frequence; this.polarite = polarite; } // Getters et Setters } 2- Classe Recepteur.java

package rec; import java.io.*; import java.util.Vector; public class Recepteur { private String nom; public Vector<Chaine>lesChaines=new Vector<Chaine>(); public Recepteur(String nom) { this.nom = nom; } public void addChaine(Chaine ch){ lesChaines.add(ch); } public void suppChaine(Chaine ch){ lesChaines.remove(ch); } public void chargerChaines(){ File f=new File("chaines.txt"); if(f.exists()){ try { FileReader fr=new FileReader(f); BufferedReader br=new BufferedReader(fr);

32/41

Support dexercices

M.Youssfi

String s; while((s=br.readLine())!=null){ Chaine ch=new Chaine(); String[] tab=s.split(";"); ch.setNumero(Integer.parseInt(tab[0])); ch.setNomChaine(tab[1]); ch.setFrequence(Float.parseFloat(tab[2])); ch.setPolarite(tab[3].charAt(0)); addChaine(ch); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } else{ System.out.println("Fichier introuvable"); } } public void afficher(){ for(int i=0;i<lesChaines.size();i++){ Chaine ch=lesChaines.elementAt(i); System.out.println(ch.getNumero()+"\t"+ ch.getNomChaine()+"\t\t"+ ch.getFrequence()+"\t"+ ch.getPolarite()); } } public void serialiser(){ File f=new File(nom+".dat"); try { FileOutputStream fos=new FileOutputStream(f); ObjectOutputStream oos=new ObjectOutputStream(fos); oos.writeObject(lesChaines); oos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void desserialiser(String nomFic){ File f=new File(nomFic); try { FileInputStream fis=new FileInputStream(f); ObjectInputStream ois=new ObjectInputStream(fis); lesChaines=(Vector<Chaine>) ois.readObject(); ois.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }

33/41

Support dexercices

M.Youssfi

3- Application TestRecepteur.java

import rec.Chaine; import rec.Recepteur; public class TestRecapteur { public static void main(String[] args) { System.out.println("Rcepteur r1"); Recepteur r1=new Recepteur("SONY"); r1.chargerChaines(); r1.afficher(); r1.addChaine(new Chaine(9,"RTM",11097,'V')); r1.serialiser(); System.out.println("Rcepteur r2"); Recepteur r2=new Recepteur("Ech Star"); r2.desserialiser("SONY.dat"); r2.afficher(); } }
4- Interface graphique

import import import import

java.awt.*; java.awt.event.ActionEvent; java.awt.event.ActionListener; java.util.Vector;

import rec.Chaine; import rec.Recepteur; public class FenetreRecepteur extends Frame{ Label l1=new Label("Nom Rec:"); TextField tNom=new TextField("Rec SONY"); List listRec=new List(); List listChaines=new List(); Button bAjout=new Button("Ajouter"); Button bCharger=new Button("Charger"); Vector<Recepteur>lesRecepteurs=new Vector<Recepteur>(); class Handller implements ActionListener{ public void actionPerformed(ActionEvent e) { if(e.getSource()==bAjout){ String nom=tNom.getText(); Recepteur r=new Recepteur(nom); lesRecepteurs.add(r); listRec.add(nom); } else if(e.getSource()==bCharger){ listChaines.removeAll(); int index=listRec.getSelectedIndex(); Recepteur r=lesRecepteurs.elementAt(index); r.chargerChaines(); Vector<Chaine> lesChaines=r.lesChaines; for(int i=0;i<lesChaines.size();i++){ listChaines.add(lesChaines.elementAt(i).getNomChaine()); }

34/41

Support dexercices
} } } public FenetreRecepteur(){ this.setLayout(new FlowLayout()); this.add(l1);add(tNom);add(bAjout); add(listRec);add(listChaines); add(bCharger); Handller h=new Handller(); bAjout.addActionListener(h); bCharger.addActionListener(h); this.setBounds(10,10,500,500); this.setVisible(true); } }
5- Application de linterface graphique

M.Youssfi

public class TestInterface { public static void main(String[] args) { FenetreRecepteur fr=new FenetreRecepteur(); } }

35/41

Support dexercices

M.Youssfi

TP Java : Interfaces graphiques

1- Application AWT :

AppInterface.java
import java.awt.*; import java.awt.event.*; public class AppInterface { Label labelNom=new Label("Nom:"); TextField textNom=new TextField(""); Button bAjout=new Button("Ajouter"); List listNom=new List(); MenuBar menu1=new MenuBar(); Menu fic=new Menu("Fichier"); MenuItem enregistrer=new MenuItem("Enregistrer"); MenuItem quitter=new MenuItem("Quitter"); class Handler implements ActionListener{ public void actionPerformed(ActionEvent e){ if(e.getSource()==bAjout){

36/41

Support dexercices
String nom=textNom.getText(); listNom.add(nom); } else if(e.getSource()==quitter){ System.exit(0); } } } class Handler2 extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0); } } public AppInterface(){ Frame f=new Frame("Application graphique"); f.setLayout(new FlowLayout()); textNom.setText("Saisir un nom ici"); f.add(labelNom); f.add(textNom); f.add(bAjout); f.add(listNom); Handler h=new Handler(); Handler2 h2=new Handler2(); f.addWindowListener(h2); bAjout.addActionListener(h); f.setBounds(10,10,500,500); fic.add(enregistrer); fic.add(quitter); menu1.add(fic); f.setMenuBar(menu1); quitter.addActionListener(h); f.setVisible(true); } public static void main(String[] s){ new AppInterface(); } }

M.Youssfi

Travail faire :
1. 2. 3. 4. Implmenter cette application et essayez de comprendre les concepts Ajouter un bouton qui permet de supprimer un lment de la liste Ajouter un bouton qui permet de dplacer un lment dune liste vers une autre liste Crer la mme application en utilisant Visual Editor de Eclipse.

37/41

Support dexercices

M.Youssfi

2- Exemple dapplet AWT

- AppletTest.java
import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class AppletTest extends Applet implements ActionListener { TextField textEchelle=new TextField("100"); Button bTracer=new Button("Tracer"); private int echelle=100; public void actionPerformed(ActionEvent e){ echelle=Integer.parseInt(textEchelle.getText()); repaint(); } double f(double x){ return 200+(Math.cos(x/7)+Math.sin(x/3))*echelle; }

38/41

Support dexercices
public void init(){ this.setLayout(new FlowLayout()); this.add(textEchelle); this.add(bTracer); bTracer.addActionListener(this); } public void paint(Graphics g){ for(int x=0;x<400;x++) g.drawLine(x,(int)f(x),x+1,(int)f(x+1)); } }

M.Youssfi

- Page.htm
<html> <head> <title> </title> </head> <body> <applet code="AppletTest.class" width="500" height="500"></applet> </body> </html> Application : Ajouter lapplet la possibilit de choisir la couleur du trac.

39/41

Support dexercices Exemple dinterface graphique SWING

M.Youssfi

Code :
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class RecepteurSWING extends JFrame implements ActionListener { private JLabel jl=new JLabel("Rcepteur"); private JTextField jtf1=new JTextField(12); private JButton jb1=new JButton("Add"); private JButton jb2=new JButton("Charcger"); private JButton jb3=new JButton("Srialiser"); private List liste1=new List(); private List liste2=new List(); private JLabel jlErr=new JLabel("OK"); public RecepteurSWING(){ this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setLayout(new BorderLayout()); JPanel jp1=new JPanel(); jp1.setLayout(new FlowLayout()); jp1.add(jl);jp1.add(jtf1);jp1.add(jb1);jp1.add(jb2); jp1.add(jb3); JPanel jp2=new JPanel(); jp2.setLayout(new GridLayout());

40/41

Support dexercices
jp2.add(liste1); jp2.add(liste2); this.add(jp1,BorderLayout.NORTH); this.add(jp2,BorderLayout.CENTER); this.add(jlErr,BorderLayout.SOUTH); jb1.addActionListener(this); jb2.addActionListener(this); jb3.addActionListener(this); this.setBounds(10, 10, 500, 400); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==jb1){ String n=jtf1.getText(); liste1.add(n); jlErr.setText("Cration d'un rcepteur"); /* * A complter */ } else if(e.getSource()==jb2){ jlErr.setText("Chargement des chaines"); /* * A complter */ } else if(e.getSource()==jb3){ /* * A complter */ jlErr.setText("Srialisation"); } } public static void main(String[] args) { new RecepteurSWING(); } }

M.Youssfi

41/41