Vous êtes sur la page 1sur 58

Le Langage Java et le Monde des Objets

Les principes de la modlisation Oriente Objet.


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