Professional Documents
Culture Documents
Enrica Duchi
LIAFA, Paris 7
Enrica.Duchi@liafa.jussieu.fr
Introduction Premiers pas en Java La notion dobjet et les classes Un peu de syntaxe de Java Une classe du JDK pour les entr ees sorties. La gestion des erreurs ` a laide des exceptions Variables de classes ou dinstance
Langages de programmations
Pour ex ecuter un algorithme sur un ordinateur, il faut le traduire dans un langage de programmation: d ecrire de mani` ere non ambigu e les etapes de calcul ` a eectuer par le processeur. Historiquement, sont apparus dabord des langages bas niveau: code ecrit directement en langage machine, avec les op erations du processeur. Programmes peu lisibles. Portabilit e tr` es limit ee (r e ecrire pour changer dordinateur) Seul avantage (?): le programmeur contr ole tout ce qui se passe
Langages de programmations
Pour ex ecuter un algorithme sur un ordinateur, il faut le traduire dans un langage de programmation: d ecrire de mani` ere non ambigu e les etapes de calcul ` a eectuer par le processeur. Historiquement, sont apparus dabord des langages bas niveau: code ecrit directement en langage machine, avec les op erations du processeur. Programmes peu lisibles. Portabilit e tr` es limit ee (r e ecrire pour changer dordinateur) Seul avantage (?): le programmeur contr ole tout ce qui se passe Aujourdhui on utilise plus couramment des langages haut niveau: le code tend ` a ressembler ` a la description de lalgorithme, il est compil e ou interpr et e par un programme pour etre ex ecut e par le processeur. Langages plus expressifs, automatisation de la gestion de la m emoire programmation plus ais ee, plus sure. Meilleure portabilit e Ecacit e en progr` es grace ` a lam elioration des interpr eteurs/compilateurs
Programmation fonctionnelle (Lisp, ML, CAML) bas ee sur: lop eration d evaluation (programme = expression ` a evaluer) les appels de fonctions et la r ecursivit e Programmation orient ee objet lobjet, unit e de base du programme, encapsule un ensemble de donn ees et dactions applicables ` a celles-ci. soit fonctionnelle (CLOS, OCAML) ou it erative (C++, Java) Java est un langage orient e objet imp eratif
Java et internet
Applet: programmes ecrits en java et int egr es dans une page web utilis ees pour cr eer des applications interactives quon ne peut pas faire avec HTML (HTML fait uniquement de la mise en page) charg ees depuis une machine distante (serveur) mais ex ecut ee sur la machine locale (client) ex ecut ee sous le contr ole dune autre application (navigateur avec interpr eteur Java) Servlet: (hors du champs de ce cours) pour d evelopper des serveurs pour internet
Le langage Java
Bibliographie: Bruce Eckel, Comment penser en java ? http://penserenjava.free.fr Sites webs: http://www.oracle.com/technetwork/java/index.html produits, mais surtout docs en ligne et tutoriaux: ` a consulter !! Historique 1990: chez Sun, groupe de travail sur la portabilit e des programmes 1995: JDK 1.0 avec 200 classes disponibles ... Java 2 (JdK 1.2 ` a 1.5) avec > 3000 classes aujourdhui, rachet e et d evelopp e par Oracle: Java SE 6, bient ot 7 La compatibilit e ascendante permet de continuer ` a utiliser avec les nouvelles versions, les programmes ecrits pour les anciennes versions.
Introduction Premiers pas en Java La notion dobjet et les classes Un peu de syntaxe de Java Une classe du JDK pour les entr ees sorties. La gestion des erreurs ` a laide des exceptions Variables de classes ou dinstance
Introduction Premiers pas en Java La notion dobjet et les classes Un peu de syntaxe de Java Une classe du JDK pour les entr ees sorties. La gestion des erreurs ` a laide des exceptions Variables de classes ou dinstance
Introduction Premiers pas en Java La notion dobjet et les classes Un peu de syntaxe de Java Une classe du JDK pour les entr ees sorties. La gestion des erreurs ` a laide des exceptions Variables de classes ou dinstance
Organisation du code
Un programme Java est form e dun ou plusieurs chiers, contenant chacun une ou plusieurs d enitions de classe. En 1` ere approx, une d enition de classe est de la forme: <modificateur> class <NomDeClasse> { <d eclaration des variables globales de la classe> <d efinition des m ethodes de la classe> } Le modicateur permet de pr eciser les propri et es de la classe (cf. plus loin) Les m ethodes sont les fonctions ou proc edures fournies dans la classe. Elles sont organis ees ` a peu pr` es comme des fonctions du C: <modificateur> <type retour> <nom> (<liste parametres> ){ <d eclaration des variables locales> <instructions> }
Relisons lexemple
// fichier SommeCarres.java class SommeCarres{ static int calcul (int n){ int i,s=0; for (i=0;i<n;i++) s=s+i*i; return s; } public static void main ( String [] args ){ if (args.length != 1) System.out.println("Donner le nb de termes en argument"); else System.out.println("Somme des carr es ="+calcul(args[0])); } } Le chier contient une classe (SommeCarres) contenant deux m ethodes (calcul et main).
Chaines
Les chaines sont manipul ees ` a laide de la classe String La d eclaration dune chaine alloue la place pour une r ef erence: String mot; Alors quon cr ee normalement les objets par un appel new, on peut cr eer des cha nes explicitement avec labbr eviation: mot = "Bonjour"; une chaine est un objet constant: ` a lex ecution du fragment mot = "Bonjour"; mot = "Ciao"; deux objets di erents sont cr e es successivement; au d ebut la variable mot contient la r ef erence ` a la 1` ere cha ne, puis la r ef erence ` a la 2nde. lorsquun objet nest plus r ef erenc e par aucune variable la m emoire est automatiquemet lib er e par le GC (garbage collector). Lop erateur + agit par concat enation sur les cha nes: mot = "Ciao " + nom + ", tu as le num ero "+ i + "."; Les types primitifs sont munis dune fonction de conversion en cha ne appel ee implicitement dans les expressions de cha ne.
Tableaux
Comme en C, un tableau est form e dobjets tous de m eme type. D eclaration: int [] tableauEntiers; String [] args; int [] [] matrice; La taille nest pas sp eci ee ` a la d eclaration. Allocation: tableauEntier = new int[10]; args = new String [20]; matrice = {{1,2,3},{1,2},{1,2,3,4,5,6}} matrice = new int [] [15]; Lappel new <type> [n] alloue un tableau de n objets du type sp eci e et renvoit la r ef erence ` a ce tableau. Utilisation: for (i=0; i<tableauEntier.length; i++) System.out.println(tableauEntier[i]);
Introduction Premiers pas en Java La notion dobjet et les classes Un peu de syntaxe de Java Une classe du JDK pour les entr ees sorties. La gestion des erreurs ` a laide des exceptions Variables de classes ou dinstance
cons.printf(String format, [arguments du format]): ecrit une cha ne formatt ee sur le terminal. Conversion: Aux types primitifs (int, double,...) correspondent des classes (java.lang.Integer, java.lang.Double,...) qui fournissent des m ethodes: int Integer.parseInt(String s): convertir une cha ne en entier. String Integer.toString(int i): renvoit une cha ne repr esentant lentier (utilis e implicitement dans "les " + i + " amis"). int Double.parseDouble(String s): idem pour les doubles, String Double.toString(double d)
Introduction Premiers pas en Java La notion dobjet et les classes Un peu de syntaxe de Java Une classe du JDK pour les entr ees sorties. La gestion des erreurs ` a laide des exceptions Variables de classes ou dinstance
Introduction Premiers pas en Java La notion dobjet et les classes Un peu de syntaxe de Java Une classe du JDK pour les entr ees sorties. La gestion des erreurs ` a laide des exceptions Variables de classes ou dinstance Les prochaines fois: 2` eme cours: Les objets. Lh eritage. 3` eme cours: Les applets.
Enrica Duchi
LIAFA, Paris 7
Enrica.Duchi@liafa.jussieu.fr
Variables de classe et dinstance; constantes Constructeurs M ethodes de classe et dinstance H eritage Classes abstraites et interfaces Modicateurs dacc` es Packages
Constantes, initialisation
Les constantes sont construites avec le mot clef final. final static float Pi=3.1415; Une constante nest plus modiable apr` es sa d eclaration, il faut donc linitialiser imm ediatement, et il est inutile dintroduire des constantes qui ne soient pas statiques (on aurait autant de copies identiques que dobjets). Les variables globales (dinstance ou de classe) sont initialis ees par d efaut en Java, alors que les variables locales (d enies dans les m ethodes) doivent etre initialis ee avant d etre utilis ee sous peine derreur de compilation,
Les valeurs par d efaut sont 0 pour les types num eriques, false pour boolean. Les variables de type non primitif contiennent des r ef erences ` a des objets (et non des objets directement). Elles sont donc initialis ees par d efaut ` a null.
x=3 y=0
x=0 y=1
class MonExecutable{ public static void main (String [] args){ Point p1, p2, p3; Cercle c1, c2; p1=new Point(); p2=new Point(); p3=new Point(); p1.x=2; p1.y=1; p2.x=3; p3.y=1; c1=new Cercle(); c1.centre=p2; c1.rayon=3; c2=new Cercle(); c2.centre=p3; c2.rayon=1; Point.nbPts=3; Cercle.nbCercles=2; }
x=3 y=0
x=0 y=1
class MonExecutable{ public static void main (String [] args){ Point p1, p2, p3; Cercle c1, c2; p1=new Point(); p2=new Point(); p3=new Point(); p1.x=2; p1.y=1; p2.x=3; p3.y=1; c1=new Cercle(); c1.centre=p2; c1.rayon=3; c2=new Cercle(); c2.centre=p3; c2.rayon=1; Point.nbPts=3; Cercle.nbCercles=2; }
Variables de classe et dinstance; constantes Constructeurs M ethodes de classe et dinstance H eritage Classes abstraites et interfaces Modicateurs dacc` es Packages
Constructeurs
Les constructeurs sont des m ethodes particuli` eres, de m eme nom que la classe, qui permettent de sp ecier des op erations ` a faire lors de la cr eation des objets par new. Ils sont d enis dans la classe juste apr` es les variables. class Point{ static int nbPts; float x,y; Point(float nx, float ny){ x=nx; y=ny; nbPts++; } } On peut alors ecrire: Point p = new Point(3,1);
Constructeurs et surcharge
On peut donner plusieurs constructeurs pour une m eme classe ` a condition quils aient des signatures (types des arguments) di erents. class Point{ static int nbPts; float x,y; Point(){ nbPts++; } Point(float nx, float ny){ x=nx; y=ny; nbPts++; } } Dans cet exemple on a red enit le constructeur par d efaut (sans argument), le compteur nbPts sera donc incr ement e par chaque appel new Point()
x=3 y=0
x=0 y=1
Variables de classe et dinstance; constantes Constructeurs M ethodes de classe et dinstance H eritage Classes abstraites et interfaces Modicateurs dacc` es Packages
Variables de classe et dinstance; constantes Constructeurs M ethodes de classe et dinstance H eritage Classes abstraites et interfaces Modicateurs dacc` es Packages
les constructeurs
Recette(String nom){ this.n=compteur; compteur++; this.nom = nom.toUpperCase(); les constructeurs } Recette(String nom, int note){ this(nom); changeNote(note); } utilisation habituelle de this() pour eviter de dupliquer le code void changeNote(int note){ if (note>=0 && note<=20) this.note=note; des m ethodes dinstance } String description(){ return "Recette:" + this.nom + "; Note:" +this.note; }
Lh eritage: un exemple
Le mot clef extends permet de faire h eriter une classe dune classe d ej` a existente: class Exotique extends Recette{ String pays; }
Recette Exotique
Les objets de la classe Exotique h eritent des variables et m ethodes de la classe Recette (les champs nom, note, la m ethode changeNote,...) et peuvent poss eder des propri et es suppl ementaires (variable dinstance pays). Une classe ne peut h eriter directement que dune autre classe: on parle dh eritage simple (et non multiple).
Lh eritage: un exemple
Le mot clef extends permet de faire h eriter une classe dune classe d ej` a existente: class Exotique extends Recette{ String pays; } Objets Recette Exotique
Les objets de la classe Exotique h eritent des variables et m ethodes de la classe Recette (les champs nom, note, la m ethode changeNote,...) et peuvent poss eder des propri et es suppl ementaires (variable dinstance pays). Une classe ne peut h eriter directement que dune autre classe: on parle dh eritage simple (et non multiple). Lorganisation en sous-classe forme un arbre, de racine la classe Objet. Si une classe na pas de classe m` ere d enie par extend, elle h erite automatiquement de la classe Objet. La classe Objet contient des m ethodes toString et equals qui sont donc h erit ees par toutes les classes.
void changeNote(int note){ if (note>=0 && note<=20) this.note=note; } String description(){ return "Recette:" + this.nom + "; Note:" +this.note; }
En particulier on remarque que les recettes Exotique sont des recettes ` a part enti` ere: elles seront num erot ees avec les recettes normales, via la variable compteur.
Variables de classe et dinstance; constantes Constructeurs M ethodes de classe et dinstance H eritage Classes abstraites et interfaces Modicateurs dacc` es Packages
Classes abstraites
Les classes abstraites donnent la possibilit e de d eclarer certaines m ethodes sans les impl ementer (m ethodes abstraites). abstract class Fiche{ Date dateCreation; Fiche(){ this.dateCreation = Date.getDate(); } abstract String description (); String afficheCreation(){ return dateCreation; } } Les classes abstraites ne sont pas instanciables: pas dobjets abstraits ! Une classe abstraite peut contenir m ethodes non abstraites et variables. Une sous-classe non-abstraite dune classe abstraite doit d enir explicitement toutes les m ethodes abstraites dont elle a h erit e.
En particulier on remarque que les recettes impl ementent bien la m ethode description comme demand e.
Geographique Chanson
On ne peut pas utiliser directement lh eritage (extend) car on a interdit lh eritage multiple.
Interfaces
Une interface est une classe enti` erement abstraite: les variables sont implicitement static et final (uniquement des constantes) et les m ethodes implicitement d eclar ees abstraites. interface Geographique{ String Origine(); } On ajoute ` a la d enition de la classe Exotique: class Exotic extends Recette implements Geographique{ ... Les constantes et m ethodes sont h erit ees par toute classe qui impl emente linterface. Pour etre instanciable (non abstraite), une telle classe doit d enir toutes les m ethodes de linterface. Une classe peut impl ementer plusieurs interfaces, alors quelle ne peut h eriter que dune classe. Un interface peut elle-m eme h eriter de plusieurs interfaces.
class Exotique extends Recette implements Geographique{ String pays; Exotique(String nom, String pays){ super(nom); this.pays = pays.toUpperCase(); } String description(){ return super.description() + this.pays; } String Origine(){ return this.pays; } }
void changeNote(int note){ if (note>=0 && note<=20) this.note=note; } String description(){ return "Recette:" + this.nom + "; Note:" +this.note; }
Variables de classe et dinstance; constantes Constructeurs M ethodes de classe et dinstance H eritage Classes abstraites et interfaces Modicateurs dacc` es Packages
Modicateurs dacc` es
Les modicateurs dacc` es permettent de pr eciser qui peut acc eder ` a chaque variable, m ethode ou classe: private: la variable ou m ethode nest accessible que dans sa classe. public: la variable ou m ethode est accessible sans restriction. On prot` ege les variables en les d eclarant private:
class Recette extends Fiche{ private static int compteur; private String n; private String nom; private int note; ...
Puis on donne un acc` es contr ol e ` a ces variables par linterm ediaire de m ethodes accesseurs: public void changeNote(int note){ accesseur en modication if (note>=0 && note<=20) this.note=note; garanti que 0 note 20. }
public int renvoitNote(){ return note; }
accesseur en lecture
le constructeur de la classe Exotique ne peut acc eder ` a cette variable que par linterm ediaire des constructeurs publique de la classe Recette, ` a laide dappels de la forme super(...)
Variables de classe et dinstance; constantes Constructeurs M ethodes de classe et dinstance H eritage Classes abstraites et interfaces Modicateurs dacc` es Packages
Packages
Pour permettre la r eutilisation de code, on organise les classes en packages. Cest le cas notamment des biblioth` eques standards (le JDK): java.lang, automatiquement charg ee, contient les classes de bases (Object, System, String java.io contient di erentes classes dentr ee-sortie. java.util contient di erentes classes utiles (Date,...) java.applet pour les applets. java.awt et javax pour les interfaces graphiques Pour pouvoir utiliser une de ces classes il faut limporter (ou importer tout le package), en mettant en t ete de chier une directive de la forme: import java.util.Date ou import java.util.* Pour les packages personnels il faut indiquer leur chemin dans la variable denvironnement CLASSPATH avec: setenv CLASSPATH ~/mespackages puis les importer avec une directive: import monPackage.maClasse
Packages personnels
Sp ecier le package dappartenance en t ete de chaque chier: package nomPackage Placer les chiers .class dans un r epertoire qui porte le nom du package: soit ` a la main soit directement via le compilateur: javac -d <nom repertoire> <fichiers.java> Chaque chier du package peut contenir une classe publique, indiqu ee par un modicateur public et portant le m eme nom que le chier. Les classes qui ne sont pas publiques (sans modicateur) ne sont accessibles que depuis les classes du package. // fichier Recette.java package mesFiches; public class Recette{ ... Par d efaut, tous les chiers du r epertoire courant qui nont pas de directive package sont consid er es comme formant un package.
et quon place les chiers Recette.class et Exotique.class dans un sous-r epertoire mesFiches du r epertoire mesPackages du CLASSPATH. On peut alors utiliser le package dans un autre chier (m eme situ e ailleurs): // fichier Test.java import mesFiches.* public class Test{ public static void main ( String [] args){ Exotique monTagine = new Exotique("Tagine", "Maroc"); ... }
Variables de classe et dinstance; constantes Constructeurs M ethodes de classe et dinstance H eritage Classes abstraites et interfaces Modicateurs dacc` es Packages Prochain cours: Applets
Enrica Duchi
LIAFA, Paris 7
Enrica.Duchi@liafa.jussieu.fr
Introduction Composants graphiques avec AWT Applet et cycle de vie Applet dans HTML Utilitaire jar et appletviewer Des composants pour interagir enements et capteurs Ev` Applet avec ev` enements
CoursJava3.pdf
Introduction Composants graphiques avec AWT Applet et cycle de vie Applet dans HTML Utilitaire jar et appletviewer Des composants pour interagir enements et capteurs Ev` Applet avec ev` enements
CoursJava3.pdf
Lid ee est de d ecoupler en 2 parties la gestion des interactions: Le syst` eme graphique de JAVA soccupe danalyser les ev` enements physique (d eplacement de la souris, clic, entr ee au clavier...) et de les transformer en ev` enements logiques (appuis sur un bouton, choix dans un menu d eroulant, redimensionnement dune fen etre,...) associ es aux composants de linterface de lapplet. Le programmeur d eclare des objets comme capteurs pour les ev` enements logiques qui lint eressent et fournit ` a ces capteurs des m ethodes d ecrivant les actions ` a eectuer.
Les capteurs
Pour rendre un bouton actif il faut lui attacher un capteur ` a laide de la m ethode public void addActionListener(ActionListener) de la classe Button. Exemple: on compl` ete la mise en place de notre bouton pr ec edent: Frame f = new Frame ("une fenetre"); Button b = new Button ("Cliquez ici pour fermer"); b.addActionListener(new MonCapteur()); f.add(b); f.pack(b); f.setVisible(true);
Lexemple en entier
class MonCapteur implements ActionListener{ public void actionPerformed(ActionEvent evt){ System.out.println("Clic sur le bouton de " + evt.getActionCommand()); } } class Exemple{ Button b1,b2; Frame f; void creationBoutons(){ b1 = new Button ("Bouton de gauche"); b1.setActionCommand("gauche"); b1.addActionListener(new MonCapteur()); b2 = new Button ("Bouton de droite"); b2.setActionCommand("droite"); b2.addActionListener(new MonCapteur()); } public void main(String [] args){ fenetre = new Frame ("une fenetre"); creationBoutons(); fenetre.add(b1); fenetre.add(b2) fenetre.pack(); fenetre.setVisible(true); } }
Introduction Composants graphiques avec AWT Applet et cycle de vie Applet dans HTML Utilitaire jar et appletviewer Des composants pour interagir enements et capteurs Ev` Applet avec ev` enements
CoursJava3.pdf
Un exemple
public class AppletBouton extends Applet implements ActionListener { Button okButton; Button wrongButton; boolean couleur; public void init() { setLayout(new FlowLayout()); okButton = new Button("Change couleur!"); wrongButton = new Button("Ne pas cliquer!"); add(okButton); add(wrongButton); okButton.addActionListener(this); wrongButton.addActionListener(this); } public void paint(Graphics g) { if (couleur) g.setColor(Color.red); else g.setColor(Color.blue); } public void actionPerformed(ActionEvent evt) { if (evt.getSource() == okButton){ couleur = (couleur == false); repaint(); } else if (evt.getSource() == wrongButton) { wrongButton.setLabel("Arrgghhh!"); repaint(); } } }