Quest-ce quune classe ?. Les types de base. Utiliser les classes. Les tentacules de Java. . p.1 Bibliographie Les livres : in Java - Bruce Eckel : http://www.mindview.net Java in a nutshell - David Flanagan OReilly Les sites internet : http://java.sun.com/j2se/ http://www.developpez.com/java/cours http://www.sogid.com/javalist/index.html . p.2 JAVA - un langage Un histoire de caf . . . Caractristiques : Une machine virtuelle. Ecriture de byte code. Outils : Un environnement de dveloppement Java 2 Platform Standard Edition 5.0 (j2se) contenant un JDK. Un environnement dexcution : JRE. Des compilateurs : javac rmic . . p.3 La programmation Oriente Objet Toute chose est un objet : donnes + fonctionnalits (mieux quune variable) Un programme est un ensemble dobjets communiquant par envoi de messages. Chaque objet est dun type prcis (instance dune classe). Tous les objets dun type particulier peuvent recevoir le mme message. Une classe dcrit un ensemble dobjets partageant des caractristiques communes (donnes) et des comportements (fonctionnalits). . p.4 Caractristiques dun modle orient objet Modularit : Scinder un programme en composants individuels an den rduire la complexit. Partition du programme qui cre des frontires bien dnies (et documentes) lintrieur du programme dans lobjectif den rduire la complexit (Meyers). Le choix dun bon ensemble de modules pour un problme donn, est presque aussi difcile que le choix dun bon ensemble dabstractions. . p.5 Les concepts de base - 1 Objets : Units de base organises en classes et partageant des traits communs (attributs ou procdures). Peuvent tre des entits du monde rel, des concepts de lapplication ou du domaine trait. Classes : Les types dobjets peuvent tre assimils aux types de donnes abstraites en programmation. . p.6 Les concepts de base - 2 Abstraction et Encapsulation : Les structures de donnes et les dtails de limplmentation sont cachs aux autres objets du systme. La seule faon daccder ltat dun objet est de lui envoyer un message qui dclenche lexcution de lune de ses mthodes. Abstraction et encapsulation sont complmentaires, lencapsulation dessant des barrires entre les diffrentes abstractions. . p.7 Les concepts de base - 3 Hritage : Lhritage est un des moyens dorganiser le monde c.--d. de dcrire les liens qui unissent les diffrents objets. Chaque instance dune classe dobjet hrite des caractristiques (attributs et mthodes) de sa classe mais aussi dune ventuelle super-classe. . p.8 Les concepts de base - 3 Hritage : Pour quune sous-classe hrite des champs et des mthodes dune autre classe on utilise le mot cl : extends. Pour faire partager un ensemble de fonctionnalits un groupe de classes, on peut crer des mthodes de type abstract dont le corps nest pas dni. . p.9 Les concepts de base - 4 Gnricit : Les comportements (mthodes) des objets sont accessibles sans avoir connatre le type (la classe) de lobjet utilis. Un objet peut ragir lenvoi dun message sans connatre le type de lobjet mteur du message (le client ). . p.10 Les concepts de base - 5 Surcharge des mthodes : le polymorphisme : On nomme polymorphisme le fait de pouvoir appeler du mme nom des mthodes diffrentes. A lintrieur dune mme classe, il est possible de crer des mthodes ayant le mme nom mais ayant des signatures diffrentes . void veillir(){ age++; } void veillir(int nb){ age+=nb;} . p.11 Concept de base : la classe Une classe est dnie par lensemble de ses caractristiques et de ses comportements : les attributs et les mthodes class Animal{ String ident; int age; void affiche() { System.out.println(identifiant +ident); System.out.println(age =+age); } } . p.12 Les types primitifs Types Caractristiques boolean true ou false char caractre 16 bits Unicode byte entier 8 bits signs short entier 16 bits signs int entier 32 bits signs long entier 64 bits signs oat nombre virgule ottante 32-bits double nombre virgule ottante 64-bits . p.13 Les oprateurs Arithmtiques : +, , , /, %, + =, =, =, / =, ++, , Boolens : ==, ! =, =<,=>, ||, &&, ? :. Les structures de contrle : if, for , while, switch, . p.14 La classe String Crer un String : String mot = "abc"; char data[] = {a, b, c}; String motNouveau = new String(data); Tester lgalit : mot.equals(bcd); Attention au pige avec ==. Rcuprer un String partir dun int, dun double String nom=String.valueOf(num) Obtenir des informations : length(), charAt() . . . . p.15 Les classes wrapper Les types primitifs peuvent tre encapsuls dans des classes : Integer, Byte, Long, Double, Float, Character, Void. Exemple : int num=Integer.parseInt(mot); double taille=Double.parserDouble(mot2); . p.16 Un petit programme ! class Hello{ public static void main(String []args){ System.out.println(Hello World); } } . p.17 Dnir une classe Dclaration des attributs : public class Animal{ private String nom; private int age; private boolean vivant; } . p.18 Dnir une classe Dnir le constructeur : public class Animal{ String nom; int age; boolean vivant; public Animal(){ nom=Absent; age=0; vivant=true; } } . p.19 Dnir une classe Surcharge du constructeur : public Animal(String chaine){ nom=chaine; age=0; vivant=true; } . p.20 Dnir une classe Surcharge du constructeur : public Animal(String chaine,int valeur){ nom=chaine; age=valeur; vivant=true; } . p.21 Dnir une classe Utilisation de this : public Animal(String nom,int age){ this.nom=nom; this.age=age; vivant=true; } . p.22 Utiliser une classe Crer une variable de type Animal public void main (String []arg){ Animal item; item=new Animal(); Animal item2=new Animal(medor); Animal item3=new Animal(medor,2); . p.23 Dnir les mthodes Utilisation des variables dinstances : public String getNom(){ return (nom); } public int getAge(){ return(age); } public void setAge(int val){ age=val; } . p.24 Appel de mthodes Appel de mthode lie une instance : Animal item2=new Animal(medor); item2.setAge(2); String nom=item2.getNom(); System.out.println(cet animal sappelle+nom); System.out.println(il a +item2.getAge()+ans); . p.25 Crer un tableau dAnimal Le type tableau : [] Dclarer un tableau : int []tableauInt; Dclaration et allocation mmoire : int []tableau=new int [10]; Animal []tableau = new Animal[MAX]; Accs aux cases du tableau : int num=tableau[2]; Taille du tableau : int taille =tableau.length . p.26 Saisir une chaine de caractres au clavier public static String saisie_chaine () { try { BufferedReader buff = new BufferedReader (new InputStreamReader(System.in)); String chaine=buff.readLine(); return chaine; } catch(IOException e) { System.out.println(" impossible de travailler" +e); return null; } } . p.27 Saisir un entier au clavier public static int saisie_entier () { try{ BufferedReader buff = new BufferedReader (new InputStreamReader(System.in)); String chaine=buff.readLine(); int num = Integer.parseInt(chaine); return num; } catch(IOException e){return 0;} } . p.28 Lutilisation de static Dnition de variable de classe et non dinstance. Laccs cette variable se fait par le nom de la classe. Exemple : System.out . p.29 Lutilisation de static class Animal{ boolean vivant; private int age; private int matricule; static int nombre=0; public Animal(){ age =0; vivant=true; nombre++; matricule=nombre; } } . p.30 Lutilisation de static Une mthode peut galement tre qualie de static. Exemple : main Consquence : toutes les mthodes appeles par une mthode static doivent aussi tre static. Une mthode static ne peut jamais adresser une variable dinstance. . p.31 Lutilisation de final Lattribut final permet de spcier quune variable ne pourra pas subir de modication - c..d une constante. La valeur initiale de la variable devra tre donne lors de la dclaration. Une mthode peut tre qualie de final, dans ce cas elle ne pourra pas tre rednie dans une sous-classe. Une classe peut tre qualie de final, dans ce cas elle ne pourra pas tre hrite. Permet de scuriser une application. . p.32 Hritage et rutilisabilit La conception oriente objet permet de dgager des concepts (ou fonctionnalits) qui sont partags par plusieurs classes (ou types). Dans ce cas on dnit une classe gnrique et on spcie les particularits dans des sous-classes qui hritent de cette classe gnrique. Une sous-classe hrite de toutes les variables et mthodes qui sont soit public soit protected dans la super-classe. . p.33 Exemple Nous dsirons raliser un programme de gestion dune animalerie qui contient plusieurs types danimaux. Quelque soit ces types on sinteresse toujours leur ge, leur statut (vivant ou non). De mme on leur affecte un numro de squence qui correspond leur ordre darrive lanimalerie. . p.34 Dclaration de sous-classe Cette dclaration est ralise grce au mot cl extends. public class Chat extends Animal{....} NB : toutes les classes hritent dune super classe object Toutes les variables non-prives de classe ou dinstance de la super-classe sont accessibles partir de la sous-classe ou dinstances de celle-ci. La rednition dune mthode ou surcharge est effective ds quune sous-classe dclare un mthode ayant la mme signature que celle de la super-classe. . p.35 Utilisation de super Le constructeur dune sous classes peut appeler le constructeur de sa super classe grce la mthode super(). Cet appel doit obligatoirement tre la premire instruction du constructeur. De la mme faon on peut toujours appeler la mthode dune super classe (qui aurait tait surcharge dans une sous classe) en prxant le nom de la mthode par super. . p.36 Classe Abstraite On peut dsirer fournir une implmentation partielle dune classe ou interdire son instantiation. Le mcanisme disponible pour permettre ceci est de dclarer cette classe comme abstraite. Le mot cl abstract permet dnir une classe ou une mthode abstraite. NB : ce comportement nest utile que si la classe abstraite est une super classe. . p.37 Exemple Dans notre classe Animal nous allons ajouter une mthode crier qui sera spcique de chaque type danimaux. On ne dsire pas donner de comportement par dfaut pour la classe Animal. La mthode crier dans la classe Animal ne sera pas implmenter public abstract void crier(); . p.38 Utilisation de abstract Toute classe ayant une mthode abstraite devient automatiquement abstraite. La dclaration de la classe est donc maintenant : public abstract class Animal {...} Consquence : il est interdit dinstancier une variable de type Animal, plus aucun appel a new nest possible. . p.39 Les Interfaces Il existe un autre type dobjets : les interfaces. Le mot cl interface permet de les dclarer. Le rle dune interface est de dclarer des comportements gnriques qui seront partags par plusieurs classes - sans crer de liens dhritage entre elles. Cest une rponse limpossibilit de lhritage multiple en Java. Une classe peut implementer autant dinterface quelle le dsire. . p.40 Les Interfaces Une interface est de fait une classe abstraite car elle nimplmentent aucune des mthodes dclares. Les mthodes sont donc implicitement publiques et abstraites. Une interface na pas de champs - uniquement des mthodes. . p.41 Exemple : Enumeration Linterface Enumeration permet de parcourir de manire identique des collections diffrentes dobjets : Vector( et Stack par hritage), StringTokenizer. La mthode elements() de Vector retourne une Enumeration qui peut donc tre parcourue au moyen des mthodes de linterface : hasMoreElements() nextElement() . p.42 Implmentation des Interfaces Toutes mthodes qui dsirent utiliser une interface doit le dclarer grce au mot cl implements class exemple implements Enumeration{....} Cette classe doit alors fournir une implmentation des mthodes de linterface. Les sous-classes peuvent hriter de limplmentation comme des autres mthodes. . p.43 Les Exceptions Java propose un mcanisme de gestion des erreurs, les exceptions. Une Exception est un objet qui est cr lors des situations derreurs. Lorsque ces situations surviennent, on dit que le programme lve - throw - une exception. Vous pouvez choisir soit de capturer, soit de laisser passer ces exceptions : capture : oprateurs try - catch, dlgation du traitement : throws. Si le traitement dune exception est dlgu sa prise en compte est reporte sur la mthode appellante. . p.44 Exemple public static String saisieChaine () { try { BufferedReader buff = new BufferedReader (new InputStreamReader(System.in)); String chaine=buff.readLine(); return chaine; } catch(IOException e) { System.out.println(" impossible de travailler" +e); return null; } } . p.45 Exemple sans traitement public static String saisieChaine () throws IOException { BufferedReader buff = new BufferedReader (new InputStreamReader(System.in)); String chaine=buff.readLine(); return chaine; } Dans ce cas, la mthode appellante devra soit encapsuler al partie de code correspondant lappel dans un try catch, soit dclarer elle-mme laisser passer - throws - lexception. . p.46 Les objets Exception Les exceptions ont rparties en classe comme tous les objets. Il existe donc un mcanisme dhritage entre les diffrentes classes. La super classe est Exception. Exemple : la capture dune erreur de format sur une saisie clavier. . p.47 Capture de NumberFormatException public int saisie_entier (){ while (true){ try{ BufferedReader buff = new BufferedReader (new InputStreamReader(System.in)); String chaine=buff.readLine(); int num = Integer.valueOf(chaine).intValue(); return num; } catch(NumberFormatException e) { System.out.println (" erreur de saisie recommencez"); } catch(IOException e) { System.out.println(" impossible de travailler" +e); return 0; } } } . p.48 Les entres sorties Pour tre utile un programme doit imprativement communiquer avec lextrieur. Les donnes qui sont soit envoyes au programme soit afches, stockes depuis le programme vers lxtrieur sont manipules au travers de ux. Un certain nombre de classes Java prdnissent ces ux et les mthodes qui les caractrisent. java travaille essentiellement sur des ux squentiels dont lordre de lecture ne peut tre chang. . p.49 Les ux standards Le clavier et lcran sont deux ux standards dentre - sortie. Les variables in et out sont respectivement du type InputStream et PrintStream (qui hrite de OutputStream. La sortie erreur est reprsente par la variable err qui elle aussi de type PrintStream. . p.50 Nomenclature des ux Sens du ux : Reader et Writer Type de la source ou de la destination : Source ou destination Prxe du nom de ux Tableau de caractres CharArray Flux doctets Input Stream ou OutputStream Chaine de caractres String Programme Pipe Fichier File Tableau doctets ByteArray Objet Object . p.51 Flux squentiels et traitements de donnes Traitement Prxe tampon Buffered concatnation de ux dentree Sequence conversion de donnes Data numrotation des lignes LineNumber lecture avec retour arrire PushBack impression Print srialisation Object conversion octets - caractres InputStream OutputStream . p.52 Ecriture dans un chier public static void ecrire (Vector leclub) throws IOException { BufferedWriter buff=new BufferedWriter (new FileWriter("fichier.txt")); for(Enumeration e = leclub.elements();e.hasMoreElements();) { Animal courant = (Animal)e.nextElement(); courant.save(buff); } buff.flush(); buff.close(); } . p.53 Ecriture dans un chier void save(BufferedWriter buff)throws IOException { buff.write(nom); buff.newLine(); buff.write((new Integer(age)).toString()); buff.newLine(); if (vivant) buff.write("vivant"); else buff.write("mort"); buff.newLine(); } . p.54 Lecture dans un chier public static void lire (Vector leclub)throws IOException { BufferedReader buff=new BufferedReader(new FileReader("fichier.txt" try { Animal courant=null ; for(;;){ String nom = buff.readLine(); courant = (Animal) new Animal(nom); int num = Integer.valueOf(buff.readLine()).intValue(); courant.setAge(num); String en_vie = buff.readLine(); if (en_vie.equals("mort")) courant.mourrir(); leclub.addElement(courant); } } catch (InstantiationException e){ System.out.println("Fini"); buff.close(); } } . p.55 Paquetage Un paquetage est dsign par linstruction : package monpack; en dbut de chier. Cette instruction sapplique la ou les classes contenues dans ce chier. Les classes et les mthodes public sont visibles dans toutes lesclasses du mme paquetage. Le rpertoire courant constitue un paquetage par dfaut quand aucune instruction contraire nest donne. . p.56 Paquetage Une classe dans un paquetage voit son nom prefx par le nom de ce paquetage. Trs souvent le nom du rpertoire contenant une classe est utilis comme nom de paquetage. nompaquetage.nomclasse Lorsque la machine virtuelle java excute le byte code dune classe, elle recherche cette classe en cherchant un rpertoire du nom du paquetage et en remplaant le . par un / La valeur du PATH doit permettre de construire le chemin daccs ncessaire. Linstruction -d un rpertoire lors de la compilation permet de dposer le .class dans le rpertoire dsign . p.57 Serialization et persistance des objets La classe qui dsire utiliser la possibilit de copier/relire un objet dans un chier doit implmenter linterface Serializable Les mthodes de lecture/criture sont : readObject(); writeObject(unObjet); Elles sont utilisables resp. avec un ObjectInputStream et un ObjectOutputStream qui sont crs partir dun FileInputStream ou dun FileOutputStream. . p.58