Escolar Documentos
Profissional Documentos
Cultura Documentos
1 Application HelloWorld
1. 2. 3. 4. 5. 6. Crer un fichier texte : HelloWorld.java Rgle de bonne pratique : 1 classe par fichier et 1 fichier par classe Compiler le programme : javac HelloWorld.java Le compilateur gnre le bytecode dans le fichier : HelloWorld.class Excuter lapplication : java HelloWorld Hello the World saffiche lcran
-1-
3.2 GSM
Crer une classe GSM Quelles sont les variables dtats accessibles et non accessibles? Quelles sont les fonctionnalits offertes lutilisateur? Quelles sont les fonctionnalits caches lutilisateur? Quelle hirarchie de classes pourrait-on proposer?
-2-
public class MyPoint { private int x, y; public MyPoint(int x,int y) { this.x=x; this.y=y; } public MyPoint() {} public static void main (String args[]) { MyPoint start, end; start = new MyPoint (); end = new MyPoint (20,30); System.out.println("Start Point = X: " + start.x + " Y: " + start.y); System.out.println("End Point = X: " + end.x + " Y: " + end.y); start.x = 10; start.y = 10; System.out.println("Start Point = X: " + start.x + " Y: " + start.y); System.out.println("End Point = X: " + end.x + " Y: " + end.y); MyPoint p; p = end; System.out.println("Start Point = X: " + start.x + " Y: " + start.y); System.out.println("End Point = X: " + end.x + " Y: " + end.y); System.out.println("p Point = X: " + p.x + " Y: " + p.y); p.x = 100; p.y = 50; System.out.println("Start Point = X: " + start.x + " Y: " + start.y); System.out.println("End Point = X: " + end.x + " Y: " + end.y); System.out.println("p Point = X: " + p.x + " Y: " + p.y); start.x = 200; start.y = 250; System.out.println("Start Point = X: " + start.x + " Y: " + start.y); System.out.println("End Point = X: " + end.x + " Y: " + end.y); System.out.println("p Point = X: " + p.x + " Y: " + p.y); } }
-3-
4.3 Factorielle
Ecrire un programme qui calcule la factorielle dun nombre Essayer doptimiser le code en gardant en mmoire les factorielles dj calcules Sassurer que la factorielle calcule ne dpasse pas 20 (limite de capacit des entiers de type LONG)
4.4 NameTest
Analyser la classe NameTest Observer la mthode main et la faon dont elle rcupre les arguments
/** * The purpose of this example is to understand the signature of the * main method. * It reads all the arguments in the command line, then returns them * in the reverse order. * It then tries to identify a name */ public class NameTest { public static void main (String args[]) { for (int i=args.length-1; i>=0; i--) {// Loop on the reverse dir. for (int j=args[i].length()-1; j>=0; j--) {// Chaque nom l'envers System.out.print (args[i].charAt(j)); } System.out.print(" "); } // Le processus d'identification System.out.println(); String myName = args[0] + " " + args[args.length-1] ; if (myName.endsWith ("Bersini")) { System.out.println("Hello " + myName); } else { System.out.println("Je ne reconnais pas l'utilisateur"); } } }
-4-
4.5 WordScrambler
Analyser la classe WordScrambler Que ralise-t-elle?
import java.io.*; class WordScrambler { private char words[][] = { "hello".toCharArray(), "sunsparc".toCharArray(), "javajdk".toCharArray(), "sunshine".toCharArray(), "service".toCharArray() // Add more words here... }; private int which; public WordScrambler() { which = (int)(Math.random() * words.length); } private String readit() { byte ans[] = new byte[80]; int count = 0; try { count = System.in.read(ans); } catch (IOException e) { System.err.println("Error reading keyboard input."); System.exit(1); } // End of file detected. if (count == -1) { System.exit(1); } return new String(ans, 0, count - 1); } private void playAgain() { int last = which; while (last == which) { which = (int)(Math.random() * words.length); } } public void start() { System.out.println(); System.out.println("The letters that make up the word are\n"); System.out.println(scramble()); } private char[] scramble() { int length = words[which].length; boolean used[] = new boolean[length]; int rand; char answer[] = new char[length]; for (int i=0;i < length; i++) { while (true) { rand = (int)(Math.random()*length); if (!used[rand]) { answer[i] = words[which][rand]; used[rand] = true; break; } } } return answer; }
-5-
private void guess() { String input; String word = new String(words[which]); for (int i=0; i<5; i++) { System.out.print("\n Enter guess number "+(i+1)+": "); input = readit(); System.out.println("you wrote : "+ input); if (word.equals(input.trim())) { System.out.println("Congratulations, good guess!!"); return; } if (i < 4) { System.out.println( "Good guess but wrong, try again");} else { System.out.println( "Out of guesses, the answer is " + word); } } } public static void main (String args[]) { WordScrambler mine = new WordScrambler(); String ans; while (true) { mine.start(); mine.guess(); System.out.println(); System.out.print("Do you want to play again (Y/N)? "); ans=mine.readit().trim(); if (ans.equals("Y") || ans.equals("y")) { mine.playAgain(); //continue; } else { break; } } } }
-6-
public class Point { private int x,y; public Point(int x, int y) { this.x=x; this.y=y; } public void modifiePoint(Point p) { p=new Point(3,4); } public String toString() { return("Le point a pour coordonnees (x,y) : ("+ x +", "+ y+")"); } public static void main(String[] args) { Point point1 = new Point(5,3); point1.modifiePoint(point1); System.out.println(point1); } }
-7-
public class Scope { private int i=3; private double v; public Scope() { v=4; } public void job() { i=5; for (int i=0; i<10; i++) { System.out.println(i++); } } public int getI() {return i;} public static void main(String[] args) { Scope scope1 = new Scope(); scope1.job(); System.out.println(scope1.getI()); } }
-8-
Quelle initialisation des variables utilise Java, par dfaut ? Diffrenciez le cas des types de base et des types de classe. b) Crez une classe Test qui utilise la classe Ville. La fonction main dans Test comprendra la ligne de commande suivante : Ville[] mesVilles=new Ville[5]; mesVilles[0]= new Ville( Gosselies ) ; mesVilles[1]= new Ville( Namur ) ; Crez une boucle FOR pour appeler la mthode decrisToi() de toutes les villes. Compilez et excutez en ligne de commande. c) Surchargez le constructeur de la classe Ville. Dfinissez un constructeur, deux arguments (un String et un entier), utilisant celui dfini en a). d) Peut-on modifier la variable dinstance nomVille depuis lextrieur de la classe ? et depuis lintrieur ? Pourquoi nutilise-t-on pas le mot cl final ?
-9-
5.3.2 Lhritage
a) Crez une classe Capitale qui hrite de la classe Ville. Celle-ci comprendra une variable dinstance supplmentaire : nomPays. Expliquez le mcanisme de construction dune classe drive. Testez diffrents cas : appel explicite ou non au constructeur de la classe mre ; existence ou non dun constructeur sans arguments. b) Redfinissez la mthode decrisToi(), en faisant appel la mthode de la classe mre. (decrisToi() affichera lcran Capitale de nomPays: nomVille ; nbHabitants). Testez. c) Changez les modificateurs daccs des donnes membres de la classe mre, en remplaant private par protected. Peut-on accder ces variables depuis lextrieur de la classe Ville ? Quel danger cela prsente-t- il ( en terme dencapsulation).
5.3.3 Le polymorphisme
a) Montrez que le transtypage induit par lhritage permet le polymorphisme. Pour ce faire crez un tableau de Ville comprenant des villes et des capitales. b) Mme exercice avec un vecteur. Expliquez la notion de cast (explicite dans ce cas-ci) c) Soit une Capitale londres. Que se passe-t-il lexcution de la commande System.out.println(londres) ? Changez le nom des methodes decrisToi() en le remplaant par toString(). Que se passe-t-il a lexcution de System.out.println(londres) ? Expliquez. d) Peut-on rendre decrisToi() polymorphique ds la conception de la classe mre. Utilisez les mthodes getClass() et getName().
- 10 -
5.5 La jungle
Modliser le systme suivant et le schmatiser en UML Une jungle, cosystme dans lequel voluent des proies et des prdateurs ainsi que des plans deau et des plantes, ncessaires la survie des animaux Les proies se dplacent soit vers leau, soit vers une plante, soit pour fuir un prdateur en fonction du premier de ces objets quelles reprent. Les prdateurs se dplacent soit vers leau, soit vers une proie en fonction du premier de ces objets quils rencontrent Les plantes poussent lentement au cours du temps, tandis que leau svapore peu peu Les animaux puisent leurs ressources nergtiques peu peu, au fur et mesure de leurs dplacements Lorsque les animaux rencontrent de leau, ils sabreuvent et rcuprent de lnergie tandis que le niveau de leau diminue en consquence Lorsquun prdateur rencontre une proie, il la dvore et rcupre de lnergie Lorsquune proie rencontre une plante, il la dvore et rcupre de lnergie
5.6 La circulation
Analyser le code de lapplication Circulation Observer les mcanismes de conversion de types Dterminer les conversions valides et celles qui provoqueront une erreur la compilation Corriger la classe Circulation pour que lapplication puisse tre compile et excute correctement Analyser ensuite la mme application avec cette fois la classe Circulation2 pour classe principale (sans erreurs) et en observer les mcanismes de conversion de types Quels risques pourraient se prsenter en utilisant ces techniques sur des collections htrognes?
- 11 -
- 12 -
- 13 -
*
MyProgram
Bank
Loan
- int amount - int mensuality Loan(int,int,BankAccount) reimbourse():void
NormalAccount
calculInterest():int
SparingAccount
calculInterest():int
- 14 -
VII. Interfaces graphiques et gestion dvnements 7.1 Une premire application graphique
7.1.1 Interface graphique
Crer une classe hritant de Frame Construire la fentre dapplication Ajouter: Au Nord: un Label Au Centre: un Panel contenant lui- mme trois Buttons placer dans un Array Au Sud: un Button Crer une classe principale contenant uniquement la mthode main :
public static void main(String args[]) { Fenetre f = new Fenetre(); }
Implmenter linterface WindowListener dans la classe Fenetre Redfinir les mthodes de linterface et en particulier windowClosing(WindowEvent e) pour quelle provoque la fermeture de la fentre et la sortie de lapplication lorsque lutilisateur clique sur la croix de fermeture
7.2 Calculatrice
Crer une mini calculatrice Crer une classe Calculette hritant de Frame Ajouter dans le Frame : Un Label pour lcran daffichage Un Panel pour le clavier Ajouter un GridLayout au Panel, le divisant en 4 x 4 zones Un tableau de 16 Button qui safficheront dans le Pane l en fonction du GridLayout Instancier les boutons du tableau dans une boucle FOR Crer une classe GestionnaireDeFenetre hritant de WindowAdapter Redfinir sa mthode windowClosing(WindowEvent e) pour quune bote de dialogue souvre pour demander la confirmation de la fermeture Crer une classe GestionnaireDeBoutons implmentant linterface ActionListener Redfinir sa mthode actionPerformed(ActionEvent e) pour quelle identifie la touche presse et dclenche laction correspondante Crer une classe Arithmetique effectuant les calculs et renvoyant le rsultat qui sera affich dans le Label de la fentre principale Crer enfin une classe StartCalculatrice qui contiendra uniquement le main.
- 15 -
7.3 Paint
Lobjectif du projet est la ralisation dun diteur graphique permettant de dessiner des segments de droites colors (une version beta de paint 1.0). La ralisation de lditeur graphique commencera par la construction dune fentre (Frame) , support de lapplication, que nous personnaliserons grce divers lments : boutons (Button) , listes droulantes (Choice), zone de dessin (Canvas)... Ensuite nous grerons les vnements gnrs par lutilisateur (clic de souris, ) pour donner vie cette application. Enfin en utilisant le contexte graphique, fournit par la JVM, nous aborderons les mcanismes de construction graphique en 2D. Lobjectif du projet pourrait tre rsum par la fentre suivante :
- 16 -
Interface graphique
1. Dfinir une classe FenetreEditeur qui drive de la classe Frame et lafficher lcran. Utilisez les mthodes setTitle(String), setSize(int, int), et show() dans le constructeur.
Barre doutils
3. Dfinir une classe BarreOutils qui est un conteneur du type Panel, qui comprendra une liste droulante (pour choisir les couleurs), et les boutons proposs sur la figure. Ajoutez la barre doutils votre fenetre d application, en utilisant le LayoutManager par dfaut. 1
Barre dtats
4. Celle-ci comprendra deux zones de textes permettant dafficher des informations (concernant par ex les mouvements de la souris ). Placez la barre dtats au bas de la fentre.
Zone Graphique
5. Classe drive de Canvas. Utilisez, par exemple, les mthodes setBackground(Color) et setCursor (Cursor) dans le constructeur.
et noubliez pas de consulter la doc en ligne : investiguez la hirarchie du package awt (Component, Container, Window, Frame, Button etc) et recherchez les diffrents types de LayoutManager prdfinis.
- 17 -
Graphismes 2D
10. Dfinir le corps de la mthode termineDroite(int, int), en accdant au contexte graphique du Canvas. public void termineDroite(int x, int y) { Graphics g=getGraphics(); g.drawLine(x,y,xInit,yInit) ; etat.afficheMessage("Relachez pour dessiner la droite"); } 11. Ajoutez une fentre de dialogue lorsque sur litem A Propos du menu dAide. 12. Innovez et ajoutez les fonctionnalits que vous souhaitez. 13. Produisez une uvre originale, et esthtique. 14. Faites partager aux formateurs un doux moment de comtemplation de votre uvre graphique. 2
On noserait pas vous proposer de la vendre, puis de vous lancer dans le commerce des uvres lectroniques bien quil reprsente, dans la conjoncture actuelle, un norme potentiel de march.
- 18 -
Diagramme de classes
MenuBar MenuEditeur +menuQuitter:MenuItem +menuNouveau:MenuItem +menuAPropos:MenuItem -zoneGraphique:ZoneGraphique +MenuEditeur 1 1 0..* Droite xInit:int yInit:int xFin:int yFin:int couleur:Color +Droite +dessineToi:void 0..* 1 Dessin Tous les hritages de ce diagramme sont drivs des packages du Java MouseAdapter GestionSouris -zoneGraphique:ZoneGraphique +GestionSouris 1 +mouseReleased:void +mousePressed:void
1 Frame FenetreEditeur HTAILLE:int VTAILLE:int etat:BarreDEtat zoneGraphique:ZoneGraphique -outils:BarreOutils -gestion:GestionFenetre -menu:MenuEditeur +FenetreEditeur +main:void insets:Insets 1 1 WindowAdapter GestionFenetre 1 +windowClosing:void 1 Panel BarreDEtat -coord:Label -info:Label +BarreDEtat +afficheMessage:void +afficheCoord:void 1 1 Canvas MouseMotionListener ZoneGraphique -etat:BarreDEtat -couleurActive:Color -xInit:int -yInit:int -droite:Droite -dessin:Dessin +ZoneGraphique +paint:void +initieDroite:void +termineDroite:void +mouseMoved:void +mouseDragged:void +efface:void +defaire:void +changeCouleur:void +changeCouleur:void 1
QUITTER:int NOUVEAU:int DEFAIRE:int -image:Image APROPOS:int -textArea:TextArea -ID:int -ap:AProposListener -zoneGraphique:ZoneGraphique -bouton:Button -listeDesCouleurs:Color[] -ap:APropos +APropos +paint:void +GereBarres +actionPerformed:void +GereBarres +itemStateChanged:void 1 +actionPerformed:void
- 19 -
- 20 -
- 21 -
- 22 -