Upload
joss87
View
1.215
Download
6
Embed Size (px)
Citation preview
PO
O :
PO
O :Java
Java Programmation Orientée ObjetProgrammation Orientée Objet
JavaJava
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
ResponsableResponsable
Tarak CHAARITarak CHAARI
[email protected]@isecs.rnu.tn
[email protected]@gmail.com
PO
O :
PO
O :Java
Java
ContenuContenuContenu
C’estC’est quoiquoi Java?Java?
LesLes basesbases dudu langagelangage
ConceptConcept ObjetObjet dudu langagelangage JavaJava
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
ClassesClasses etet ObjetsObjets enen JavaJava
ProgrammationProgrammation orientéeorientée objetobjet avancéeavancée JavaJava
LesLes classesclasses dede basesbases
ExercicesExercices etet corrigéscorrigés
PO
O :
PO
O :Java
Java
ChapitreChapitre
11
ChapitreChapitre
11
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
11
C'est quoi Java ? C'est quoi Java ?
11
C'est quoi Java ? C'est quoi Java ?
PO
O :
PO
O :Java
Java
DéveloppéDéveloppé enen 19901990 chezchez SUNSUN MicroSystemsMicroSystems soussous laladirectiondirection dede BillBill JoyJoy etet JamesJames GoslingGosling..
LeLe nomnom oakoak étantétant déjàdéjà utiliséutilisé lele langagelangage estest appeléappelé JavaJava(café(café enen argotargot américain)américain)..
EnEn 19931993,, avecavec l'intérêtl'intérêt grandissantgrandissant d'Internet,d'Internet, cece
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--1 Historique du langage Java1 Historique du langage Java
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
EnEn 19931993,, avecavec l'intérêtl'intérêt grandissantgrandissant d'Internet,d'Internet, cece
langage,langage, sese métamorphosemétamorphose enen langagelangage dédiédédié àà InternetInternet ::
SUN diffuse le premier browser HotJava qui permetd'exécuter des programmes Java encapsulés dans despages WEB (i.e. des applets Java) de plus en plus «vivantes ».
19961996 :: LesLes JJavaava DDéveloppementéveloppement KKitsits ((JDKJDK)) ouou ((JJ22SDKSDK))
sontsont disponiblesdisponibles gratuitementgratuitement pourpour lala plupartplupart desdes
machinesmachines dudu marchémarché..
PO
O :
PO
O :Java
Java
LeLe langagelangage JavaJava estest familierfamilier ::
Java est un langage familier très proche du langage C, C++. Par exemple :
Même types de base que C++ (int, float, double, etc.),
Même formes de déclarations que C++,
Même structure de contrôle que C++ (if, while, for, etc.).
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--2 Caractérisation du langage Java 2 Caractérisation du langage Java (1/8)(1/8)
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Même structure de contrôle que C++ (if, while, for, etc.).
LeLe langagelangage JavaJava estest simplesimple ::
Java est un langage simple par rapport au langage Cet C++.
Il n'y a plus de pointeurs et des manipulations les concernant ;
Java se charge (presque) de restituer au système les zonesmémoire inaccessibles et ce sans l'intervention duprogrammeur.
PO
O :
PO
O :Java
Java
LeLe langagelangage JavaJava estest orientéorienté objetobjet ::
Paquetage pour la réutilisation :
java.lang : classes de base
java.io : entrée/sortie
java.awt : interfaces graphiques
java.net : communication réseaux (socket et URL)
java.applet : API Applet
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--2 Caractérisation du langage Java 2 Caractérisation du langage Java (2/8)(2/8)
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
java.applet : API Applet
java.util : classes outils
LeLe langagelangage JavaJava estest distribuédistribué ::
Supporte des applications réseaux (protocoles decommunication java.net)
URL : permet l ’accès à des objets distants
RMI : Remote Method Invocation
Programmation d'applications Client/Serveur : classe Socket
Manipulation de fichier local ou fichier distant identique : indifférenceà la localisation.
PO
O :
PO
O :Java
Java
LeLe langagelangage JavaJava estest interprétéinterprété ::
Un programme Java n'est pas compilé en codemachine ;
Il sera compilé en code intermédiaire interprété nomméByteCode.
Lors de l'exécution le ByteCode sera interprété à l’aide d’une
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--2 Caractérisation du langage Java 2 Caractérisation du langage Java (3/8)(3/8)
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Lors de l'exécution le ByteCode sera interprété à l’aide d’unemachine dite virtuelle JVM (Java Virtual Machine).
LeLe langagelangage JavaJava estest portableportable etet indépendantindépendant desdes platesplates--formesformes ::
Le code intermédiaire produit « ByteCode » estindépendant des plates-formes.
Il pourra être exécuté sur tous types de machines et systèmespour peu qu'ils possèdent l'interpréteur de code Java « JVM ».
PO
O :
PO
O :Java
Java
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
COMPILATEURJAVAProg.java Class1.class
Bytecode
11--2 Caractérisation du langage Java 2 Caractérisation du langage Java (4/8)(4/8)
Production d’une application Java standard
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Bytecode = Pseudo code machine qui contrairement à du code
binaire natif, n'est pas exécuté directement par le processeur – ce qui a
pour conséquence de ralentir son exécution.
Class2.class
Code source
PO
O :
PO
O :Java
Java
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--2 Caractérisation du langage Java 2 Caractérisation du langage Java (5/8)(5/8)
BytecodeJVM
Exécution d’une application Java standard
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
JVM = Programme capable d'interpréter les instructions contenues
dans les fichiers ByteCode Java afin de les exécuter.
Prog.class INTERPRETEUR
DE BYTECODE
JVM
RésultatsRésultats
PO
O :
PO
O :Java
Java
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--2 Caractérisation du langage Java 2 Caractérisation du langage Java (6/8)(6/8)
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
PO
O :
PO
O :Java
Java
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--2 Caractérisation du langage Java 2 Caractérisation du langage Java (7/8)(7/8)
Code Java
MVJ
Système d’exploitation
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Code Java
PO
O :
PO
O :Java
Java
LeLe langagelangage JavaJava estest robusterobuste etet sûrsûr ::
Détection des erreurs d’invocation des méthodes :
java est fortement typé
seules des conversions sûres sont automatiques
Fiabilité de la gestion de la mémoire
pas de pointeurs
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--2 Caractérisation du langage Java 2 Caractérisation du langage Java (8/8)(8/8)
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
ramasse miettes automatique
contrôle automatique d’accès aux tableaux et aux chaînes decaractères.
LeLe langagelangage JavaJava estest multithreadmultithread ::
JAVA permet l’exécution simultanée de plusieurs processuslégers (thread)
Classe java.lang.thread avec les méthodes permettant de :
Démarrer, Exécuter, Stopper ces processus.
contrôler les synchronisations et l’état cohérent des données.
PO
O :
PO
O :Java
Java
Un programme doit contenir au moins une classe.
Une méthode main() avec un type de retour void.
Une constante est définie au sein d’une classe à l’aide del’instruction final.
L’instruction include est remplacée par l’instruction import
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--3 Java vs C++3 Java vs C++
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
L’instruction include est remplacée par l’instruction importsuivie par un nom complet de la classe.
Représentation des caractères et des identificateurs sur 16 bits(Unicode).
Pas de pointeurs, seulement des références.
Pas de fonctions à nombre variables d’arguments (Template).
Pas d’héritage multiple de classes.
PO
O :
PO
O :Java
Java
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--4 Java par l’exemple4 Java par l’exemple
// Commentaire
Fichier «XXX.java »
Définition d’une classe XXX
Méthode main ( )
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
UneUne applicationapplication JavaJava minimaleminimale doitdoit contenircontenir uneune classeclasse ::
Portant le même nom que le fichier ayant l’extension« .java » dans lequel elle est enregistrée.
Comportant (au moins) une méthode :
appelée main,
de type public et static,
ayant un argument de type String[ ],
PO
O :
PO
O :Java
Java
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
// Ce programme se contente d’afficher le message « Ca Marche »
Fichier «PremierProgramme.java »
classPremierProgramme{
11--4 Java par l’exemple4 Java par l’exemple
ProgrammeProgramme JavaJava minimalminimal ::
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
{
}
public static void main(String args[] ){
System.out.println("Ca Marche");}
PO
O :
PO
O :Java
Java
LaLa premièrepremière ligneligne dudu programmeprogramme «« PremierProgrammePremierProgramme »»estest uneune ligneligne dede commentairecommentaire ::
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--4 Java par l’exemple4 Java par l’exemple
// Ce programme se contente d’afficher le message « Ca Marche »
Fichier «PremierProgramme.java »
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
LaLa premièrepremière ligneligne dudu programmeprogramme «« PremierProgrammePremierProgramme »»estest uneune ligneligne dede commentairecommentaire ::
Elle commence par //.
Tout ce qui est compris entre ces deux caractères etla fin de la ligne est ignoré par le compilateur.
En revanche, d’autres outils peuvent utiliser le textecontenu dans ce type de commentaire.
PO
O :
PO
O :Java
Java
LeLe motmot classclass veutveut diredire queque nousnous allonsallons définirdéfinir uneune nouvellenouvelleclasseclasse Java,Java, suivisuivi dudu nomnom dede cettecette classeclasse..
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--4 Java par l’exemple4 Java par l’exemple
classPremierProgramme{}
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
classeclasse Java,Java, suivisuivi dudu nomnom dede cettecette classeclasse..
EnEn Java,Java, lesles majusculesmajuscules etet lesles minusculesminuscules sontsont considérésconsidéréscommecomme desdes caractèrescaractères différentsdifférents..
PremierProgramme n’est pas identique àPREMIERProgramme.
LesLes caractèrescaractères «« {{ «« etet «« }} »» marquentmarquent lele débutdébut etet lala finfindudu blocbloc d’instructionsd’instructions àà réaliserréaliser parpar lala classeclasse..
PO
O :
PO
O :Java
Java
main()main() {{ :: signifiesignifie queque nousnous allonsallons définirdéfinir uneune méthodeméthode
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--4 Java par l’exemple4 Java par l’exemple
public static void main(String args[] ){
}
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
main()main() {{ :: signifiesignifie queque nousnous allonsallons définirdéfinir uneune méthodeméthodeappeléeappelée mainmain..
LeLe motmot mainmain indiqueindique queque cettecette méthodeméthode estest lala méthodeméthodeprincipaleprincipale dede lala classeclasse..
UnUn interpréteurinterpréteur JavaJava aa pourpour fonctionfonction d’exécuterd’exécuter leslesinstructionsinstructions contenuescontenues dansdans lele blocbloc d’instructiond’instruction dede lalaméthodeméthode principaleprincipale mainmain,, dudu programmeprogramme qu’onqu’on luilui soumetsoumet..
UneUne méthodeméthode estest uneune sortesorte dede procédureprocédure (ensemble(ensembled’d’instructionsinstructions)) appartenantappartenant àà uneune classeclasse..
PO
O :
PO
O :Java
Java
UneUne méthodeméthode peutpeut prendreprendre desdes paramètresparamètres dede typestypes précisprécisetet renvoierenvoie éventuellementéventuellement uneune valeurvaleur dede typetype touttout aussiaussiprécisprécis..
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--4 Java par l’exemple4 Java par l’exemple
public static void main(String args[] ){
}
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
précisprécis..
lele motmot voidvoid signifiesignifie queque lala méthodeméthode mainmain nene renvoierenvoieaucuneaucune valeurvaleur..
args[args[ ]] estest lele paramètreparamètre d’entréed’entrée dede typetype StringString dede lalaméthodeméthode mainmain..
lesles motsmots publicpublic etet staticstatic décriventdécrivent chacunchacun uneunecaractéristiquecaractéristique dede lala méthodeméthode ((voirvoir plusplus loinloin))..
PO
O :
PO
O :Java
Java
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--4 Java par l’exemple4 Java par l’exemple
public static void main(String args[] ){
System.out.println(" Ca Marche");}
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
SystemSystem..outout..printlnprintln estest uneune commandecommande permettantpermettantd’afficherd’afficher lala chaînechaîne dede caractèrecaractère «« CaCa MARCHEMARCHE »» sursur lalasortiesortie parpar défautdéfaut dede votrevotre machinemachine quiqui estest l’écranl’écran..
PO
O :
PO
O :Java
Java
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--5 Structure d’une application 5 Structure d’une application JavaJava standardstandard
// Commentaire
// Commentaire
Fichier «XXX.java »
Définition d’une classe AAA
Définition d’une classe BBB
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Parmi les classes définies dans le fichier XXX.java il ne peut y
avoir qu’une seule classe publique et cette classe doit avoir le
même nom XXX que le fichier.
Définition d’une classe XXX
Méthode main ( )
Définition d’une classe BBB
PO
O :
PO
O :Java
Java
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--6 Exemple d’une application 6 Exemple d’une application JavaJava standardstandard
// Ce programme se contente d’afficher le message « Ca Marche »
Fichier «PremierProgramme.java »
classPremierProgramme{
static void Affiche( )
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
}
public static void main(String args[] ){
Affiche( );}
static void Affiche( ){
System.out.println(" Ca Marche");}
PO
O :
PO
O :Java
Java
LeLe JDKJDK ouou JJ22SDKSDK ((JavaJava 22 SoftwareSoftware DevelopmentDevelopment KitKit))::
est l’ensemble des outils nécessaires pour développeret exécuter une application Java.
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--7 Le Java developper Kit : 7 Le Java developper Kit : JDKJDK
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
DesDes environnementenvironnement intégrésintégrés dede développementdéveloppement JavaJava sontsontactuellementactuellement ::
commercialisés (Visual j++, Symnatec café, etc.)
distribués gratuitement à travers le Web (Eclipse).
PO
O :
PO
O :Java
Java
LeLe compilateurcompilateur javacjavac::
Compile les fichiers sources java de nom XXX.java.
Traduit les fichiers sources en ByteCode :
Produit autant de fichier .class qu’il y a de classe définie dansle fichier .java.
L’interpréteurL’interpréteur javajava::
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--8 Outils fournis par le 8 Outils fournis par le JDK JDK ((1/41/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
L’interpréteurL’interpréteur javajava::
Prend en paramètre le nom de la classe.
Cherche le ou les fichiers .class qui lui correspondent.
Appelle la méthode main de la classe.
LeLe documenteurdocumenteur javadocjavadoc::
Génère automatiquement une documentation sous laforme de fichiers html à partir des fichiers sourcescommentés.
PO
O :
PO
O :Java
Java
L’interpréteurL’interpréteur d’appletd’applet appletviewerappletviewer::
Un programme permettant de tester les applets Java,prévues pour être intégrées dans des pages HTML.
LeLe générateurgénérateur d’interfaced’interface avecavec C,C, javahjavah ::
Un programme permettant de lier des programmes
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--8 Outils fournis par le 8 Outils fournis par le JDK JDK ((2/42/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Un programme permettant de lier des programmesJava avec des méthodes natives, écrites dans un autrelangage et dépendants des systèmes.
LeLe désassembleurdésassembleur dede classeclasse javapjavap ::
Un programme permettant de désassembler lesfichiers compilés en prenant en paramètre les fichiers.class et de produire un texte en clair de la classe afind’examiner le ByteCode.
PO
O :
PO
O :Java
Java
LeLe débogueurdébogueur JavaJava JDBJDB::
Un programme permettant de faciliter la mise au point desprogrammes grâce à de nombreuses options permettant desurveiller leur exécution.
Il est beaucoup plus facile à utiliser lorsqu’il est intégré à unIDE « Integrated Developpement Environnement »
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--8 Outils fournis par le 8 Outils fournis par le JDK JDK ((3/43/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
LesLes librairieslibrairies dede classeclasse standardstandard ::
Classes pour réaliser les entrées sorties.
Classes pour réaliser des applications réseau.
LeLe jfcjfc ::
Exemples des nouveaux composants swing de l’interfaceutilisateur.
Si vous voulez en avoir un catalogue complet, exécuter le programmeSwingSet2.
PO
O :
PO
O :Java
Java
Contient tout ce qui est nécessaire pour diffuser vosapplications.
En cas d’une application devant être diffusée au publicsur un CD-ROM, vous ne pouvez pas supposer quechaque utilisateur sera équipé d’une JVM.
Il est nécessaire d’accompagner chaque application d’une
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--8 J2RE (Java 2 Runtime Environment)8 J2RE (Java 2 Runtime Environment)
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Il est nécessaire d’accompagner chaque application d’unemachine virtuelle .
C’est à cette fin que Sun MicroSystems met à la disposition detous, gratuitement le J2RE. Celui-ci contient tous les élémentsnécessaires pour faire fonctionner une application Java, paropposition au J2SDK, qui contient tout ce qui est nécessairepour développer une application.
Le J2RE peut être diffusé librement sans payer aucun droit àSun Microsystems.
PO
O :
PO
O :Java
Java
PréPré requisrequis
Un éditeur de texte
http://java.sun.com/j2se/1.4.1/download.hl
EtapesEtapes ::
Ecrire le code source du programmePremierProgramme.java dans un fichier portant le
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--9 Ecrire une application 9 Ecrire une application Java Java en ligne de en ligne de
commandescommandes
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
PremierProgramme.java dans un fichier portant lenom de la classe.
Respecter la casse des caractères(majuscules/minuscules).
Compiler le code source: javacPremierProgramme.java.
Un fichier PremierProgramme.class contenant duByteCode sera généré.
Exécuter le ByteCode : java PremierProgramm.
PO
O :
PO
O :Java
Java
PréPré requisrequis
ECLIPSE : www.eclipse.org
EtapesEtapes ::
Créer un projet.
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--10 Ecrire une application 10 Ecrire une application Java Java avec un avec un IDE IDE ((1/41/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
File � new Project
Java� Java Project
Next� ‘’Test ‘’
PO
O :
PO
O :Java
Java
EtapesEtapes ((suitesuite)) ::
Créer une classe.
File � new Class
Source folder� ‘’Test’’
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--10 Ecrire une application 10 Ecrire une application Java Java avec un avec un IDE IDE ((2/42/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
PO
O :
PO
O :Java
Java
EtapesEtapes ((suitesuite)) ::
Insérer l’instruction « System.out.println("Ca Marche"); »dans le corps de la méthode main.
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--10 Ecrire une application 10 Ecrire une application Java Java avec un avec un IDE IDE ((3/43/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
PO
O :
PO
O :Java
Java
EtapesEtapes ((suitesuite)) ::
Compiler le code source.
Exécuter le ByteCode
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--10 Ecrire une application 10 Ecrire une application Java Java avec un avec un IDE IDE ((4/44/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Exécuter le ByteCode
PO
O :
PO
O :Java
Java
PasPas aussiaussi rapiderapide qu’unqu’un programmeprogramme natifnatif..
GourmandGourmand enen mémoiremémoire..
AbsenceAbsence dansdans lele langagelangage desdes typestypes paramétriquesparamétriques
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--11 Point faible de Java11 Point faible de Java
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
AbsenceAbsence dansdans lele langagelangage desdes typestypes paramétriquesparamétriques(Templates)(Templates)..
Java, est actuellement, un langage propriétaire (Sun)
PO
O :
PO
O :Java
Java
111--- C’est quoi JavaC’est quoi JavaC’est quoi Java
11--12 Références12 Références
SitesSites WebWeb ::
Site officiel Java (JDK et doc.) :
http://www.javasun.com.
Info sur Java :
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Info sur Java :
http://www.javaworld.com.
Applications, applets, packages, ...
http//www.gamelan.com.
Java pour linux :
http://www.blackdown.com.
PO
O :
PO
O :Java
Java
ChapitreChapitre
22
ChapitreChapitre
22
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
22
Les bases du langageLes bases du langage
22
Les bases du langageLes bases du langage
PO
O :
PO
O :Java
Java
ToutTout programmeprogramme (grand(grand ouou petit,petit, simplesimple ouou complexe)complexe)contientcontient (ou(ou devraitdevrait contenir)contenir) desdes commentairescommentaires..
IlsIls ontont pourpour butbut d'expliquerd'expliquer ::
Ce qu'est sensé faire le programme,
Les conventions adoptées,
222--- Les bases du langageLes bases du langageLes bases du langage
2.1 Les commentaires (2.1 Les commentaires (1/41/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Les conventions adoptées,
Tout autre information rendant le programme lisible àsoi même et surtout à autrui.
JavaJava disposedispose dede troistrois typestypes dede commentairescommentaires ::
Les commentaires multilignes,
Les commentaires lignes,
Les commentaires de type documentation.
PO
O :
PO
O :Java
Java
CommentairesCommentaires enen ligneslignes
LesLes commentairescommentaires ligneslignes débutentdébutent avecavec lesles symbolessymboles````////'''' etet quiqui sese terminentterminent àà lala finfin dede lala ligneligne..
222--- Les bases du langageLes bases du langageLes bases du langage
2.1 Les commentaires (2.1 Les commentaires (2/42/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
// Ce programme imprime la chaîne
// de caractères " bonjour " à l'écran
...
IlsIls sontsont utilisésutilisés pourpour desdes commentairescommentaires courtscourts quiquitiennenttiennent sursur uneune ligneligne..
PO
O :
PO
O :Java
Java
CommentairesCommentaires multilinguesmultilingues ::
UnUn commentairecommentaire multilignemultiligne commencecommence parpar leslescaractèrescaractères ````/*/*'''' etet sese terminentterminent parpar ````*/*/''''..
222--- Les bases du langageLes bases du langageLes bases du langage
2.1 Les commentaires (2.1 Les commentaires (3/43/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
/* Ce programme imprime la chaîne
de caractères "bonjour" à l'écran
*/
AA l'intérieurl'intérieur dede cesces délimiteursdélimiteurs toutetoute suitesuite dedecaractèrescaractères estest validevalide (sauf(sauf évidemmentévidemment ````*/*/'')'')..
PO
O :
PO
O :Java
Java
CommentairesCommentaires dede typestypes documentationdocumentation ::
CesCes commentaires,commentaires, appelésappelés aussiaussi commentairescommentaires javadocjavadoc,,serventservent àà documenterdocumenter lesles classesclasses queque l'onl'on définitdéfinit..
CesCes commentairescommentaires sontsont encadrésencadrés entreentre ````/**/**'''' etet ````*/*/'''' ..
222--- Les bases du langageLes bases du langageLes bases du langage
2.1 Les commentaires (2.1 Les commentaires (4/44/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
/**/** DocumentationDocumentation dede lala classeclasse ..
*/*/
JavaJava exigeexige queque cesces commentairescommentaires figurentfigurent avantavant lala définitiondéfinitiondede lala classe,classe, d'und'un membremembre dede lala classeclasse ouou d'und'un constructeurconstructeur..
CesCes commentairescommentaires servironsservirons àà produireproduire automatiquementautomatiquement(avec(avec l'outill'outil javadocjavadoc)) lala documentationdocumentation soussous formeforme HTMLHTML ààl'imagel'image dede lala documentationdocumentation officielleofficielle dede SUNSUN..
PO
O :
PO
O :Java
Java
LeLe langagelangage JavaJava estest unun langagelangage fortementfortement typétypé ::
Chaque variable et chaque expression possède untype bien défini.
Le choix d’un type est en fonction de l'étendu devaleur souhaitée pour vos variables.
222--- Les bases du langageLes bases du langageLes bases du langage
2.3 Les types de données élémentaires2.3 Les types de données élémentaires
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
valeur souhaitée pour vos variables.
LesLes typestypes dede donnéesdonnées dede JavaJava sontsont divisésdivisés enen deuxdeux grandsgrandsgroupesgroupes ::
Les types primitifs (ou de base)
Exemple : Les types numériques, le type booléen, Le typecaractère.
Les types références.
PO
O :
PO
O :Java
Java
222--- Les bases du langageLes bases du langageLes bases du langage
2.4 Les types primitifs2.4 Les types primitifs numériques (numériques (1/21/2))
byte short int long
Taille en bits 8 16 32 64
Etendue -128
..
127
-32768
..
32767
-231 .. 231-1 -263 .. 263-1
Les types numériques entiers
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
127 32767
Le bit y est utilisé pour décrire les tailles.
Un bit ne peut prendre que deux valeurs (0 ou 1).
n bits ne peuvent définir que 2n valeurs.
Un octet ou byte en anglais = 8 bits.
Un octet peut donc contenir 28 (soit 256) valeursdistinctes.
PO
O :
PO
O :Java
Java De même que pour les types numériques, il existe deux types
pour les nombres flottants :
float,
double.
222--- Les bases du langageLes bases du langageLes bases du langage
Les types numériques flottants
2.4 Les types primitifs2.4 Les types primitifs numériques (numériques (2/22/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
double.
la seule différence résidant dans la taille utilisée pour stockerune valeur de ce type.
float double
Taille en bits 32 64
Exemple devaleur
3.25f 3.25
PO
O :
PO
O :Java
Java
Ce type est introduit en Java par le mot clé booléen.
Ce type est un vrai type booléen
il accepte seulement deux états :
l'un est nommé true :
222--- Les bases du langageLes bases du langageLes bases du langage
2.5 Le type primitif booléen2.5 Le type primitif booléen
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Symbolise un état d'acceptation,
l'autre, nommé false,
Symbolise un état de réfutation.
Attention, contrairement au langage C, le type booléen enJava n'est pas un sous-type numérique :
En C par exemple, la valeur 0 est considérée commefausse et les autres valeurs entières comme vraies.
PO
O :
PO
O :Java
Java
Ce type, introduit par le mot clé char, et permet la gestiondes caractères.
Java utilise le codage de caractères universel Unicode quiest un extension du codage ASCII.
222--- Les bases du langageLes bases du langageLes bases du langage
2.6 Le type primitif caractère2.6 Le type primitif caractère
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Le codage ASCII utilise 8 bits et permet de représenterseulement 128 caractères.
Le codage Unicode permet la portabilité du code produit.
Il utilise 16 bits pour représenter un caractère.
65536 caractères possibles.
Codage des caractères d’alphabets Cyrillique, Hébreux, Arabe,Chinois, Grec, ...
PO
O :
PO
O :Java
Java
222--- Les bases du langageLes bases du langageLes bases du langage
2.7 Les types références 2.7 Les types références
Tout type non primitif, est un type de référence.
Le rôle d’un type de référence est de référencer ou repérerune zone mémoire.
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
une zone mémoire.
Un type de référence a un rôle analogue à celui despointeurs du langage C .
Plus de détails plus loin …
PO
O :
PO
O :Java
Java
222--- Les bases du langageLes bases du langageLes bases du langage
2.8 Déclaration et initialisation des variables2.8 Déclaration et initialisation des variables
Syntaxe :
Type identificateur [= constante ou expression];
int NbredeMois = 12 ; int NbredeMois = 4*3 ;
int nbrDeDoigts = 012 ; // on octal =10 en décimal
int annee = 0x7d4; //on hexadécimal = 2004 en décimal.
boolean Unboolean = false ;
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
boolean Unboolean = false ;
float Unfloatant = 1.3f ;
float Unfloatant = 5.2e+2f //520
double Undouble = 1.3 ; float
char Uncaractère = 'c' ; char Uncaractère = ‘\n' ;
String Unstring= " bonjour \n " ;
Et éventuellement, un « modificateur d’accès ou devisibilité » : final float pi=3.14159
String n'est pas un type primitif, mais une classe
PO
O :
PO
O :Java
Java
Les opérateurs dans Java sont regroupés par :
type d’opérations :
d’affectation
numérique,
de comparaison,
2.92.9-- Les opérateursLes opérateurs
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
logique,
sur les chaînes de caractères,
de manipulations binaires.
le nombre d’opérandes :
unaire,
binaire,
ternaire.
PO
O :
PO
O :Java
Java
Opérateurs unaires
Action Exemple
- négation i=-j
++ incrémentation de 1 i=j++ ou i=++j
-- décrémentation de 1 i=j-- ou i=--j
2.102.10-- Opérateurs unairesOpérateurs unaires
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
++ et -- peuvent préfixer ou postfixer la variable.
i = j++ : post-incrémentation
La valeur en cours de j est affectée à i et ensuite la valeur de jest incrémentée de 1.
i = ++ j : pré-incrémentation
La valeur en cours de j est incrémentée de 1 et ensuite la valeurde j est affectée à i.
PO
O :
PO
O :Java
Java
Opérateurs binaires
Action Exemple Syntaxe équivalente
+ addition i = j+k;
+= i += 2; i= i + 2
- soustraction i = j - k;
-= i -= j; i= i - j
* multiplication x=2*y;
2.112.11-- Opérateurs binairesOpérateurs binaires
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
* multiplication x=2*y;
*= x *=x; x= x * x
/ division (tronque si les
arguments sont entiers)
i =j/k;
/= x /= 10; x= x /10
% modulo i = j %k;
%= i %=2 i= i %2
>> décalage vers la droite i>>k; i*2k
<< décalage vers la gauche i<<k; i/2k (si i>0)
PO
O :
PO
O :Java
Java
Le résultat d'une comparaison est une valeur booléenne(vrai ou faux).
Dans le langage Java, le résultat d'une comparaison esttrue ou false.
2.122.12-- Opérateurs relationnelsOpérateurs relationnels
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Opérateurs relationnels
Action Exemple
< plus petit que x<i;
> plus grand que i>100;
<= plus petit ou égal que j<=k;
>= plus grand ou égal que c>=‘a’;
== égal à i==20;
!= différent de c!=‘z’;
PO
O :
PO
O :Java
Java
Opérateurs logiques
Action Exemple Syntaxe équivalent
! négation !p;
& ET p & (i<10)
| OU p | q
^ OU exclusif p ^ false
2.132.13-- Opérateurs logiquesOpérateurs logiques
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
^ OU exclusif p ^ false
&& ET évalué p && q && r
|| OU évalué p || q || r
!= négation assignée p!=p;
&= ET assigné p&=q p= p & q
|= OU assigné p|=q p= p | q
Dans le cas d’un opérateur logique évalué, l’évaluation del’expression logique est stoppée dès que sa valeur devérité peut être assurée.
PO
O :
PO
O :Java
Java
Un unique opérateur ternaire.
Cette expression est une sorte de si-alors-sinon sousforme d'expression :
a = (condition e) ? x : y
2.142.14-- Opérateurs ternaireOpérateurs ternaire
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
a = (condition e) ? x : y
si la condition e est vraie alors a vaut x sinon elle vaut y.
Exemple : a = (v==2) ? 1 : 0;
Cette expression affecte à la variable a la valeur 1 si v vaut 2,sinon affecte à la variable a la valeur 0.
PO
O :
PO
O :Java
Java
Syntaxe :
Exemple :
2.15 structures de contrôle2.15 structures de contrôle : : if if
if (expression booléene ) instruction ;
public class ifApplication1 {
public static void main(String[ ] args)
Résultat d’affichage
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Attention : L'expression logique attendue estobligatoirement de type boolean.
si l'on écrit if ( i = 1 ), le compilateur détectera une erreur, carle type de l'expression logique est alors int.
public static void main(String[ ] args){
int i = 4 ;
}}
if ( i %0 != 0 ) System.out.print (" i est impair ");
PO
O :
PO
O :Java
Java
Syntaxe
if (expression booléenne ){
instruction 1 ;……instruction i ;
}else
public class if_elseApplication {
public static void main(String[ ] args){int i = 4 ;
Exemple
if (i % 2 == 0 ){
2.15 structures de contrôle2.15 structures de contrôle : : if if -- elseelse
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
else{
instruction j ;……instruction n ;
}
}}
{System.out.println (" i est pair " );
}else{
System.out.println (" i est impair " );}
Résultat d’affichage
i est pair
PO
O :
PO
O :Java
Java
2.15 structures de contrôle : 2.15 structures de contrôle : if if –– else else -- ifif
Syntaxe
if (expression booléene 1){
instruction 1 ;……instruction i ;
}else if (expression booléene 2 )
public class if_else_ifApplication {
public static void main(String[ ] args){int i = 1, j =2 ;
Exemple
if (i == j ){
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
else if (expression booléene 2 ){
instruction j;……instruction m ;
}else{
instruction m+1 ;……
}}
}
{System.out.println (" i est égal à j " );
}else if ( i>j){System.out.println (" i est supérieur à j" );}else{System.out.println (" i est inférieur à j " );}
Résultat d’affichage
i est positive
PO
O :
PO
O :Java
Java
Syntaxe
switch (variable)
{
case valeur 1 :
instr1_1; instr1_2; …
break;
public class switchApplication {
public static void main(String[ ] args){int i = 1,
Exemple
switch (i){ case 0 :
2.15 structures de contrôle : 2.15 structures de contrôle : switchswitch
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
break;...
case valeur N :instrN_1; instrN_2;break;
default: /* optionnel */instrD_1; instrD_2; ...break;
}
}}
{ case 0 :System.out.println (" 0 " );break;
case 1 :System.out.println (" 1 " );break;
case 2 :System.out.println (" 2 " );break;
default :System.out.println (i);break;
}Résultat d’affichage
1
PO
O :
PO
O :Java
Java
Exemple :
public class forApplication {
public static void main(String[ ] args){
int somme = 0;for ( int compteur = 1, max = 4 ; compteur < max ; compteur++)
{
2.15 structures de contrôle : 2.15 structures de contrôle : forfor
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Fonctionnement :initialisation du compteur,comparaison avec max,réalisation des instructions,Incrémentation du compteur et on recommence.
{somme = somme + compteur;
}System.out.println (somme );
}}
Résultat d’affichage
6
PO
O :
PO
O :Java
Java
Exemple :
public class whileApplication {
public static void main(String[ ] args){
int compteur =1; int max = 4 ; int somme = 0;
2.15 structures de contrôle : 2.15 structures de contrôle : whilewhile
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
System.out.println (somme );}
}
while (compteur < max ){
somme = somme + compteur ;compteur++;
}
Résultat d’affichage
6
PO
O :
PO
O :Java
Java
Exemple :
public class do_WhileApplication {
public static void main(String[ ] args){
int compteur =1; int max = 4 ; int somme = 0;
do
2.15 structures de contrôle : 2.15 structures de contrôle : dodo -- whilewhile
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
System.out.println (somme );}
}
do{
somme = somme + compteur ;compteur++;
}while (compteur < max ) ;
Résultat d’affichage
6
PO
O :
PO
O :Java
Java
Utilisation :
Pour sortir d’une structure de boucle avant que lacondition du test soit remplie.
Quand la boucle rencontre une instruction break, elle setermine immédiatement en ignorant le code restant.
Résultat d’affichage
2.15 structures de contrôle : 2.15 structures de contrôle : breakbreak
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
public class breakApplication {
public static void main(String[ ] args){
int compteur =0;
while (compteur < 10 ){
System.out.println (compteur );compteur++;
}}
}
if (compteur == 5) break;
Résultat d’affichage
01234
PO
O :
PO
O :Java
Java
Utilisation :
Pour ignorer le reste de la boucle et reprendrel’exécution à l’itération suivante de la boucle.
public class continueApplication {
public static void main(String[ ] args)
2.15 structures de contrôle : 2.15 structures de contrôle : continuecontinue
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
{int compteur =0;
for(compteur=0 ; compteur< 6 ; compteur++ ){
System.out.println (compteur );}
}}
if (compteur == 4) continue; Résultat d’affichage
01235
PO
O :
PO
O :Java
Java
Il y a 2 catégories de conversions possibles :
Conversions explicites :
celles faites sur une demande explicite par un programmeur.
2.16 Les conversions des types (2.16 Les conversions des types (1/81/8))
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Conversions implicites :
celles faites automatiquement par un compilateur :
lors d'une affectation,
lors d'une promotion arithmétique,
lors d'un passage de paramètres (lors de l'invocation d'uneméthode),
PO
O :
PO
O :Java
Java
Conversion explicite :
Objectif :
changer le type d'une donnée si besoin.
Comment ? :
2.16 Les conversions des types (2.16 Les conversions des types (2/82/8))
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Comment ? :
Préfixer l’opérande par le type choisi.
Encadrer le type choisi par des parenthèses.
Exemple :
double d = 2.5 ;
long l = (long) d ;
PO
O :
PO
O :Java
Java
Conversion implicite lors d'une affectation :
Objectif :
changer automatiquement le type d'une donnée si besoin.
Comment ? :
2.16 Les conversions des types (2.16 Les conversions des types (3/83/8))
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Comment ? :
Exemple 1 :
Contrairement à ce qui se passe dans C, les conversionspouvant provoquer une perte de valeur ne sont pasautorisées de manière implicite dans C : cela doit êtreexplicitement demandé.
Exemple 2 :
Un type char peut être utilisé partout où une valeur detype int est permise.
PO
O :
PO
O :Java
Java
Conversion implicite lors d'une affectation :
Illustration pour l’exemple 1:
public class ProgrammeAffectation {
public static void main(String[ ] args){
2.16 Les conversions des types (2.16 Les conversions des types (4/84/8))
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Solution :
{int i;short j = 2 ;i = j ;
float k= 1.2 f ;i = k;
}}
Erreur de compilation
i = (int) k;
Conversion implicite
PO
O :
PO
O :Java
Java
Conversion implicite lors d'une affectation :
Illustration pou l’exemple 2:
public class ProgrammeSoustraction {
public static void main(String[ ] args){
2.16 Les conversions des types (2.16 Les conversions des types (5/85/8))
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Résultat d’affichage :
{int i;i = ‘A’;
System.out.print( i ) ;
}}
Conversion implicite
65
PO
O :
PO
O :Java
Java
Conversion implicite lors d'une promotion arithmétique :
Objectif :
Si un opérateur s'applique sur deux arguments de typedifférent un des deux arguments sera converti dans le type del'autre.
Exemple :
2.16 Les conversions des types (2.16 Les conversions des types (6/86/8))
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Exemple :
Résultat d’affichage :
public class ProgrammeSoustraction {
public static void main(String[ ] args){
int i;i = ‘A’-1;
System.out.print( i ) ;}
}
Conversion implicite
64
PO
O :
PO
O :Java
Java
Conversion implicite lors d'un passage de paramètres(lors de l'invocation d'une méthode) :
public class ProgrammeSoustraction {
static short entierShort;
2.16 Les conversions des types (2.16 Les conversions des types (7/87/8))
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
static void Afficher( int entier ){
System.out.print( entier ) ;}
public static void main(String[ ] args){
entierShort = 2 ;Afficher(entierShort ) ;
}}
Invocation de la méthode Afficher
PO
O :
PO
O :Java
Java
Attention :
Il n'y a pas de conversion possible (implicite ouexplicite) entre un type entier et le type boolean :
int i = 0;
2.16 Les conversions des types (2.16 Les conversions des types (8/88/8))
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
If ( i ){
………..}
If ( i != 0 ){
………..}
// Ok
// Erreur à la compilation
PO
O :
PO
O :Java
Java
Déclaration
monodimensionnel
int[ ] tableau_Entier;
équivalent à : int tableau_Entier[ ];
multidimensionnel
2.17 Les tableaux (2.17 Les tableaux (1/21/2))
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
multidimensionnel
Color rgb_cube[ ][ ][ ];
Création et initialisation
int[] primes = {1, 2, 3, 5, 7};
int[] tableau_Entier = new int[50];
rgb_cube = new int[256][256][256];
tableau_Entier[0]= 3;
PO
O :
PO
O :Java
Java
Pour les tableaux dont le type de données est primitifchaque élément est initialisé à une valeur par défaut.
Pour les tableaux dont les éléments sont des objetschaque élément est initialisé à null.
Les indices des tableaux commencent par 0.
Exemple d’utilisation des tableaux :
2.17 Les tableaux (2.17 Les tableaux (1/21/2))
222--- Les bases du langageLes bases du langageLes bases du langage
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Exemple d’utilisation des tableaux :
public class tabeauApplication {
public static void main(String[ ] args){
int[ ] tableau_Entier = new int[50]; // créationSystem.out.println(tableau_Entier.length);
tableau_Entier[51]=10;
}} Résultat d’affichage
50java.lang.ArrayIndexOutOfBoundsException: 51
PO
O :
PO
O :Java
Java
ChapitreChapitre
33
ChapitreChapitre
33
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
33
Le Concept Objet de Java Le Concept Objet de Java
33
Le Concept Objet de Java Le Concept Objet de Java
PO
O :
PO
O :Java
Java
L'abstraction dans l’approche objet permet lareprésentation des entités du monde réel sous formed’entités informatiques de la manière la plus naturelle.
Etablir une association entre le modèle du problème àrésoudre et le modèle de la machine :
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
3.1 Les bienfaits de l'abstraction3.1 Les bienfaits de l'abstraction
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
PO
O :
PO
O :Java
Java
L’abstraction est une représentation des éléments dumonde réel « objets réels » dans l'espace du problème (lamachine) en tant qu'« objets informatiques».
décrire le problème avec les termes mêmes duproblème plutôt qu'avec les termes de la machine.
un programme traitant des images doit manipuler des
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
3.1 Les bienfaits de l'abstraction (3.1 Les bienfaits de l'abstraction (1/21/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
un programme traitant des images doit manipuler desstructures de données représentant des images, et non leurtraduction sous forme de suite de 0 et de 1.
un programme de gestion de personnel doit représenter despersonnes avec toutes les informations pertinentes, qu’ils’agisse de texte, de date, de nombres ou autre.
L'idée est d’adapter le programme à l'esprit du problèmeréel en ajoutant de nouveaux types « objets ».
Quand on lit le code décrivant la solution, on lit aussiquelque chose qui décrit le problème.
PO
O :
PO
O :Java
Java
La complexité des problèmes et la capacité à les résoudresont directement proportionnelles au type et à la qualitéde nos capacités d'abstraction.
Un Objet :
plusieurs niveaux d ’abstraction :
de point de vue concepteur un micro-ordinateur est un
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
3.1 Les bienfaits de l'abstraction (3.1 Les bienfaits de l'abstraction (2/22/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
de point de vue concepteur un micro-ordinateur est unobjet formé d’un ensemble d’éléments physiques appelésmatériels (hardware).
de point de vue informaticien un micro-ordinateur est unobjet résultant d’un assemblage hardware et d’unensemble de programmes appelé logiciels (software).
de point de vue utilisateur, un micro-ordinateur est uneboite noire qui offre un certain nombre de fonctions ou deservices qui permettent d’interagir avec elle.
PO
O :
PO
O :Java
Java
Un objet est semblable à une variable améliorée :
elle stocke des données qui décrivent son « état »;
mais qui possède aussi un ensemble de fonctions ouméthodes « comportement », pour répondre aux «requêtes » des utilisateurs.
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
3.2 Approche Objet (3.2 Approche Objet (1/61/6))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
L’ensemble des services (méthodes) proposées par unobjet est appelé l’interface de cet objet.
Un objet est encapsulé par son interface :
la seule manière d’interagir (demander un service)avec cet objet est d’invoquer une des méthodes deson interface.
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
Exemple 1 :
Un poste de Télévisionmoderne est une boiteayant pour interface :un écran, des haut-parleurs et unetélécommande.
3.2 Approche Objet (3.2 Approche Objet (2/62/6))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Principe d’Objet
télécommande.
Pour changer de chaîne ilsuffit de demander àcette boite noire de lefaire pour nous, enappuyant simplementsur le boutoncorrespondant. Peuimporte ce qui se passeréellement dans le poste.
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
R1 est un objetRectangle de hauteur10 de largeur 20, ayantune interface quipermet de:
Exemple 2 : Objet Rectangle R1
3.2 Approche Objet (3.2 Approche Objet (3/63/6))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
calculer le périmètre durectangle,
sa surface,
Le diagonale
et un dernier service pour dessiner le rectangle.
Pour utiliser l’un de ces services, il suffit d’invoquer laméthode correspondante.
Objet R1 Identité
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
Un objet représente informatiquement une entité précisedu monde à modéliser, exemple : ma_voiture.
3.2 Approche Objet (3.2 Approche Objet (4/64/6))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Il existe généralement de nombreux objets représentant lemême concept « voiture », exemple :présidence_voiture
Il est intéressant de définir le concept (classe voiture),puis de créer autant de représentants que voulu baséssur ce concept.
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
Une classe est un moule pour fabriquer des objets demême structure et de même comportement.
En programmation, une classe apparaît donc commeun nouveau type construit par l’utilisateur.
Le nom d’une classe peut être utilisé en Java comme le typed’un attribut ou d’une variable ou aussi comme le type de
3.2 Approche Objet (3.2 Approche Objet (5/65/6))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
d’un attribut ou d’une variable ou aussi comme le type deretour d’une fonction (méthode).
Le processus de création d’un objet à partir d’uneclasse est appelé en jargon objet instanciation d’unobjet ou création d’instance d’une classe .
Exemple :
String s1 = "Hello " ;
String est le nom de la classe, la variable s1 est un objetinstancié ou instance de la classe String.
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
Un objet :
est un élément d’une classe;
a une durée de vie et une identité.
3.2 Approche Objet (3.2 Approche Objet (6/66/6))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
L’identité d'un objet (Oid) :
Une constante : R1, R2
Unique et indépendante de la valeur des propriétés de l'objet;
invisible à l’utilisateur.
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
3.3 Attribut de classe, attribut d’instance 3.3 Attribut de classe, attribut d’instance
Les données membres d’une classe sont appelées dans lejargon informatiques attribut.
Java distingues deux types d’attributs :
Attribut d’instance dont la valeur peut varier d’uneinstance à une autre, exemple :
La valeur de l’attribut « Couleur » de la classe « Voiture »
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
La valeur de l’attribut « Couleur » de la classe « Voiture »varie d’une instance à une autre.
Attribut de classe dont la valeur est commune pourtoutes les instances, exemple :
La valeur « pi » dans la classe « Cercle » est la même 3.14 pourchaque instance de la classe.
classe : cercle
rayon : donnée d’instance
pi : donnée de classe
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
L’encapsulation d’un objet par son interface permet demasquer son contenu :
i.e montrer uniquement ce qui est nécessaire pour sonutilisation :
Les données sont généralement considérées comme donnéesprivées. Elles ne sont donc pas accessibles directement.
3.4 Encapsulation (3.4 Encapsulation (1/21/2) )
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
privées. Elles ne sont donc pas accessibles directement.
Les méthodes constituent l’interface d’interaction avec un objetd’une classe. Elles sont donc accessibles (publiques).
Un objet n'est accessible qu’à travers l’interface de sa classe ;
Java propose plusieurs niveaux de visibilité (modificateurd’accès) utilisables sur les données d'une classe pourassurer le principe de l’encapsulation.
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
Pour respecter ce principe d'encapsulation on ne doitinteragir avec un objet que par l’invocation d’une de cesméthodes de son interface.
3.4 Encapsulation (3.4 Encapsulation (2/22/2) )
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
On dit à l’objet ce qu’il doit faire, sans se préoccuper decomment il doit le faire.
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
L'héritage est l’un des grands intérêts des langagesorientés objet :
pouvoir définir des dépendances entres classes en factorisant lespropriétés communes à plusieurs classes :
ordonner hiérarchiquement les classes d’une application,
réaliserdesprogrammesparfaitementmodulaires,
3.5 Héritage (3.5 Héritage (1/21/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
réaliserdesprogrammesparfaitementmodulaires,disposer de modules réutilisatsables.Exemple :
Une classeChevalétant définie.
On peut définir une classeZèbreest un cheval en précisantseulement qu’un zèbre est un cheval qui possède desrayures.
Une instance de zèbre contient les informations d’une instance decheval auxquelles on ajoute les informations propres d’un zèbre.
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
3.5 Héritage (3.5 Héritage (2/22/2))
Les deux classes Personne et Forme sont appelées classesde base
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Les classes Ouvrier, Etudiant et Chercheur héritenttoutes les trois de la classe Personne.
Les classes Cercle, Rectangle et Triangle sont appeléesdes classes dérivées de la classe Forme.
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
Le polymorphisme est la possibilité pour deux classesséparées, mais dépendantes l’une de l’autre, de recevoir lemême message mais d’agir dessus de différentes façons.
En d’autres termes, c’est la faculté d’une méthodehéritée à pouvoir s’appliquer à des classes dérivées.
3.6 Polymorphisme3.6 Polymorphisme
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
La motivation essentielle de cette approche estd'augmenter les possibilités de réutilisation :
L'encapsulation des données et du code dans unemême entité permet de garantir la cohérence desobjets.
Cette cohérence est indispensable pour envisager de réutiliser
3.7 Pourquoi utiliser l’approche Objet ? (3.7 Pourquoi utiliser l’approche Objet ? (1/21/2) )
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Cette cohérence est indispensable pour envisager de réutiliserun objet dans un autre contexte.
La notion d'encapsulation par une interface permet denormaliser le fonctionnement des objets :
Il est possible de changer le fonctionnement interned'un objet particulier, sans modifier la manière del'utiliser (c'est à dire le reste du programme)
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
La notion d'héritage permet de réutiliser ce qui a déjà étédéfini lors de la conception d'un objet pour en créer denouveaux.
La notion de polymorphisme permet de manipuler demanière identique et la plus naturelle possible des objets
3.7 Pourquoi utiliser l’approche Objet ? (3.7 Pourquoi utiliser l’approche Objet ? (2/22/2) )
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
manière identique et la plus naturelle possible des objetsayant des comportements totalement différents :
des comportements qui ne sont pas obligatoirementconnus au moment où l'on définit ces manipulations :
Vouloir afficher un rectangle, un cercle ou un triangle, on esttoujours dans le même espace de problème, qui est afficherune forme géométrique. C’est la manière d’afficher chaqueforme qui est différente.
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
L'amélioration de la qualité et de la productivité deslogiciels.
La modularité qui permet de :
décomposer un problème en modules élémentairesfaciles à écrire, à maintenir et à étendre,
créer des modules complexes par composition de
3.8 Apports de l’approche Objet3.8 Apports de l’approche Objet
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
créer des modules complexes par composition demodules simples.
L'extensibilité :
les logiciels objets : ensemble de modulesincrémentalement extensibles;
L'uniformité des différents niveaux de représentation desdonnées.
résolution du problème de la Faille sémantique("Semantic gap ").
PO
O :
PO
O :Java
Java
333--- Le Concept Objet de JavaLe Concept Objet de JavaLe Concept Objet de Java
3.3 Approche Procédurale 3.3 Approche Procédurale vs vs approcheapproche Objet Objet
Approche procédurale :
Opérations et donnéessont séparées.
Les actions sontdécomposées demanière hiérarchique
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
manière hiérarchique
Approche Objet :
Pas de séparation desdonnées et des actions.
chaque objet peutinvoquer une méthoded’un autre objet quicoopère en répondant àcette demande.
obj1
obj2
obj3
PO
O :
PO
O :Java
Java
ChapitreChapitre
44
ChapitreChapitre
44
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
44
Classes et Objets en Classes et Objets en JavaJava
44
Classes et Objets en Classes et Objets en JavaJava
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
4.1 Classe en 4.1 Classe en Java Java ((1/31/3))
Les classes constituent le concept de base de laprogrammation objet.
Elles permettent de définir des nouveaux types dedonnées qui doivent se comporter comme des types prédéfinis et dont les détails d'implantation sont cachés auxutilisateurs de ces classes.
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Une définition de classe est introduite par le mot cléclass.
Une classe définit généralement deux choses :
les données associées aux objets de la classe appeléschamps ou attributs de la classe,
les services interactifs que peuvent rendre les objetsde cette classe, qui sont les méthodes définies dans laclasse.
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
modificateur_visibilité class nom_Class {
modificateur_visibilité data-type attribut1 ;
modificateur_visibilité data-type attribut2 ;
...
é
Syntaxe générale d’une classe
4.1 Classe en 4.1 Classe en Java Java ((2/32/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
modificateur_visibilité data-type attributN ;
modificateur_visibilité Return-type nom_Method1( paramètres)
{// instructions ; }
...
modificateur_visibilité Return-type nom_Method2( paramètres)
{// instructions ; }
}
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
Exemple de classe :
class Date {
private int j; // jour
private int m; // mois
Fichier " Date.java "
4.1 Classe en 4.1 Classe en Java Java ((3/33/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
private int a; // an
void initialise(int jour, int mois, int an)
{ j=jour; m=mois; a=an; }
void affiche( ){ System.out.println(j + "/" + m + "/" + a) ; }
}
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
4.2 Modificateurs de visibilité (4.2 Modificateurs de visibilité (1/31/3))
Valable pour un attribut ou une méthode :
« public » :
accessible à partir d’une instance par n’importe quelle classe.
« private »:
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
accessible uniquement par les méthodes de la classe.
« protected »:
accessible par la classe et ses classes dérivées.
« static »:
donnée ou méthode de classe et non pas d’instance.
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
4.2 Modificateurs de visibilité (4.2 Modificateurs de visibilité (1/31/3))
« final » :
Une classe définie comme final ne peut pas être dérivée (on nepeut pas créer une nouvelle classe héritant de cette classe).
Une méthode déclarée final ne peut pas être redéfinie dansune classe dérivée.
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Un attribut défini comme final, permet de spécifier que cetattribut est une constante (sa valeur ne pourra jamais êtremodifiée).
Un attribut final doit obligatoirement être initialisé lors de sadéclaration (puisqu'on ne peut pas le modifier après cela ) !
rien :
Par défaut public.
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
NB1 :
static cumulable avec d’autres modificateurs.
NB2 :
Un attribut ou une méthode de classe est appelée àtravers la classe et non pas par l’instance.
4.2 Modificateurs de visibilité (4.2 Modificateurs de visibilité (2/32/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
travers la classe et non pas par l’instance.
NB3 :
Un paquetage (package) est un regroupementthématique de classes.
NB4 :
sans modificateur de visibilité, un attribut ou uneméthode est appelée amie.
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
class Machin {
private int x;public int y;final int entier =2;
Machin ( ) { …. }; // constructeur
void modifx(int value) { x=value;}
Fichier " Machin.java "
4.2 Modificateurs de visibilité (4.2 Modificateurs de visibilité (3/33/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
void modifx(int value) { x=value;}
static void truc( ) { … }; // méthode de classe……..
Machin m= new Machin( ); // création d’une instance de Machin.
m.y = 5; // OK y est publiquem.x = 6; // ERREURE x est privéem.entier =4; // ERREURE entier est une constante.m.modifx(6); // OK x est modifiée par la méthode modifx.m.truc(); // Warning truc est une méthode static.Machin.truc( ); // OK appel d’une méthode de classe.
}
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
4.3 Constructeur d’une classe (4.3 Constructeur d’une classe (1/21/2))
Un constructeur est une méthode spéciale d’initialisationd’un objet :
un constructeur n'a pas de type de retour, et senomme toujours de la même manière que sa classe
Une classe peut avoir plusieurs constructeurs quidiffèrent par le nombre et la nature de leurs
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
diffèrent par le nombre et la nature de leursparamètres (principe de surcharge).
Utilité d’un constructeur :
un constructeur est une méthode spéciale appelée à lacréation d’un objet pour initialiser cet objet.
surcharger les constructeurs pour une même classe cequi permet d’initialiser les objets de diversesmanières.
NB. La surcharge peut être appliquée pour n’importequelle méthode et pas seulement pour les constructeurs.
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
Exemple de classe :
class Date {
private int j; // jour
private int m; // mois
private int a; // an
Fichier " Date.java "
4.3 Constructeur d’une classe (4.3 Constructeur d’une classe (2/22/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
private int a; // an
void initialise(int jour, int mois, int an)
{ j=jour; m=mois; a=an; }
Date( ) // constructeur sans paramètres{ j=1 ; m=1 ; a=1900 ; }
Date(int jour, int mois, int an) // constructeur avec paramètres{ j=jour ; m=mois ; a=an ; }
void affiche( ){ System.out.println(j + "/" + m + "/" + a) ; }
}
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
4.4 Appels de constructeur4.4 Appels de constructeur
Exemples 1:
Le constructeur sans arguments initialise la date d à1/9/1900.
// création d’une date d (1/1/1900)
Date d1 = new Date() ;Exemples 2:
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Exemples 2:
Le constructeur Date à 3 arguments permetd’initialiser une date avec des valeurs quelconques.
// création d’une date d2 (1/6/2004)Date d2 = new Date(1,6,2004) ;
Attention :
Si aucun constructeur n'est spécifié dans la définitionde la classe, un constructeur par défaut vous estobligatoirement fourni, celui-ci n'admettant aucunparamètre.
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
4.5 L’attribut caché : 4.5 L’attribut caché : thisthis ((1/31/3))
Le mot-clé this représente une référence sur l'objetcourant.
celui qui est en train d'exécuter la méthode danslaquelle se trouvent les instructions concernées.
this peut être utile :
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Pour déclencher un constructeur depuis un autreconstructeur.
this peut servir à lever des ambiguïtés entre desnoms d’attributs et des noms d’arguments deméthodes
Lorsqu'une variable locale (ou un paramètre) "cache", enportant le même nom, un attribut de la classe.
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
class Date {
private int j; // jour
private int m; // mois
private int a; // an
Fichier " Date.java "
Exemple d’utilisation de this pour lever des ambiguïtés.
4.5 L’attribut caché : 4.5 L’attribut caché : thisthis ((2/32/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
private int a; // an
void initialise(int jour, int mois, int an)
{ j=jour; m=mois; a=an; }
Date( ) // constructeur sans paramètres{ j=1 ; m=1 ; a=1900 ; }
Date(int j, int m, int a) // constructeur avec paramètres{ this.j = j ; this.m = m ; this.a = a ; }
void affiche( ){ System.out.println(j + "/" + m + "/" + a) ; }
}
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
Exemple d’utilisation de this pour déclancher unconstructeur depuis un autre constructeur.
class Date {private int j; // jourprivate int m; // moisprivate int a; // an
void initialise(int jour, int mois, int an)
Fichier " Date.java "
4.5 L’attribut caché : 4.5 L’attribut caché : thisthis ((3/33/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
void initialise(int jour, int mois, int an)
{ j=jour; m=mois; a=an; }
Date(int j, int m, int a) // constructeur avec paramètres{ this.j = j ; this.m = m ; this.a = a ; }
void affiche( ){ System.out.println(j + "/" + m + "/" + a) ; }
}
Date( ) { j=1 ; m=1 ; a=1900 ; }
Date( ){ this(1 ,1 ,1900); }
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
4.6 Un programme 4.6 Un programme JavaJava complet (complet (1/21/2))
class Date {private int j; // jourprivate int m; // moisprivate int a; // an
// les constructeurs de la classeDate( ) { j=1 ; m=1 ; a=1900 ; }Date(int j, int m, int a) { this.j = j ; this.m = m ; this.a = a ; }
Fichier " Date.java "
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Date(int j, int m, int a) { this.j = j ; this.m = m ; this.a = a ; }
// les méthodes de la classevoid affiche( ) { System.out.println(j + "/" + m + "/" + a) ; }void initialise(int jour, int mois, int an) { j=jour; m=mois; a=an; }
public static void main(String[ ] args){Date d = new Date(1,6,1997);Date d2= new Date( );d2.affiche( );d.initialise(2,6,1997);d.affiche( );
}}
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
public static void main(String args[])
La méthode main est le point d'entrée du programmeet elle est nécessairement public, static et void :
public : car elle est appelée de l’extérieur de la classe par laJVM.
static : car elle n’a pas besoin d'un objet pour être invoquée.Elle est appelée par le JVM avant toute création d’instance
4.6 Un programme 4.6 Un programme JavaJava complet (complet (2/22/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
static : car elle n’a pas besoin d'un objet pour être invoquée.Elle est appelée par le JVM avant toute création d’instance(elle est une méthode de classe).
void : car elle ne renvoie pas de valeur.
Elle a comme argument un tableau de String ce qui lui permetde récupérer des paramètres introduits sur la ligne decommande (comme en C++).
la commande java Date jour mois année lance l’exécutionde la classe Date avec comme paramètres jour mois année .La méthode main de la classe date peut récupérer ainsi leschaînes jour mois année dans args[0], args[1] et args[2].
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
Les instances des classes (objets) sontsystématiquement manipulées à l’aide d’une référence(pointeur sur la zone mémoire représentant l’objet).
la création d’une variable instance d’une classe nécessitedeux opérations :
1- la création d’une référence qui ne pointe sur rien:
4.7 Création d’instances de classes (4.7 Création d’instances de classes (1/31/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
1- la création d’une référence qui ne pointe sur rien:
2- la réservation de la place mémoire à l’aide del’opérateur new et l’affectation de la donnée.
Date d1;Date d2;
d1 = new Date( ); // le constructeur initialise la date d1 à 1/1/1900.
d2 = new Date (11, 011, 2001) ; // le constructeur initialise la date d2 à 11/9/2001.
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
Schéma d’implantation en mémoire :
d1
Date d1;
1 2 1998 d1 = new Date(1,2,1998);
4.7 Création d’instances de classes (4.7 Création d’instances de classes (2/32/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
d2
Date d2;
d2 = d1;
Date d3 = new Date( );1 1 1900d3
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
Schéma de libération de mémoire :
d1
Date d1;
1 2 1998 d1 = new Date(1,2,1998);
Date d2;11 9 2001
4.7 Création d’instances de classes (4.7 Création d’instances de classes (3/33/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
d2 d2 = d1;
Date d3 = new Date( );1 1 1900d3
d1 = null ;
d2=new Date(11,9,2001);
11 9 2001
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
La plupart des langages orientés objet possèdent uneméthode nommée destructeur, appelée pour détruire unobjet.
La destruction d’un objet consiste à libérer les ressourcesqui lui ont été déjà affectées par le constructeur .
Un objet est détruit lorsqu’il ne référence aucune zone
4.8 Destruction d'un objet (4.8 Destruction d'un objet (1/51/5))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Un objet est détruit lorsqu’il ne référence aucune zonemémoire.
En Java, la destruction des objets est prise en charge parun mécanisme automatique appelé ramasse- miettes(garbage collector GC).
Le GC fonctionne en arrière plan pendant l'exécution d'unprogramme Java. il est géré dans une thread de faiblepriorité.
difficile de savoir à quel moment le GC détruiraréellement votre objet.
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
La récupération de mémoire peut être aussi invoquéeexplicitement pas le programmeur à des moments bienprécis avec la commande System.gc().
Certaines situations nécessitent un nettoyage spécial quele GC ne peut pas effectuer :
Par exemple, certains fichiers ont été ouverts pendant
4.8 Destruction d'un objet (4.8 Destruction d'un objet (2/52/5))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Par exemple, certains fichiers ont été ouverts pendantla durée de vie de l’objet et vous voulez vérifier qu’ilssont correctement fermés quand l’objet est détruit.
Pour cela, une autre méthode spéciale, appelée finalize(),peut être définie.
Cette méthode (si elle est présente) est appelée par le GClorsque l'objet est détruit pour assurer ce type denettoyage spécial.
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
class Date {private int j; // jourprivate int m; // moisprivate int a; // an
void initialise(int jour, int mois, int an) { j=jour; m=mois; a=an; }
Date( ) { j=1 ; m=1 ; a=1900 ; }
Fichier " Date.java "
Résultat d’affichage
1/6/1997Nettoyage spécial
4.8 Destruction d'un objet (4.8 Destruction d'un objet (3/53/5))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Date( ) { j=1 ; m=1 ; a=1900 ; }
Date(int j, int m, int a) { this.j = j ; this.m = m ; this.a = a ; }
void affiche( ) { System.out.println(j + "/" + m + "/" + a) ; }public void finalize() { System.out.println("Nettoyage spécial" ); }
public static void main(String[ ] args){Date d = new Date(1,6,1997);d.affiche( );d =null; // d ne désigne plus rien, il ne possède plus de référence.
// Elle n'est plus accessible. A tout moment le GC peut détruire l'objet.System.gc( ); // appel implicite du GC
}
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
class Date {private int j; // jourprivate int m; // moisprivate int a; // an
void initialise(int jour, int mois, int an) { j=jour; m=mois; a=an; }
Date( ) { j=1 ; m=1 ; a=1900 ; }
Fichier " Date.java "
Résultat d’affichage
1/6/1997
4.8 Destruction d'un objet (4.8 Destruction d'un objet (4/54/5))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Date( ) { j=1 ; m=1 ; a=1900 ; }
Date(int j, int m, int a) { this.j = j ; this.m = m ; this.a = a ; }
void affiche( ) { System.out.println(j + "/" + m + "/" + a) ; }protected void finalize() { System.out.println("Nettoyage spécial" ); }
public static void main(String[ ] args){Date d = new Date(1,6,1997);d.affiche( );Date d2=d;d =null; // d ne désigne plus rien, il n’y plus de référenceSystem.gc( ); // appel implicite du GC
}
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
class Date {private int j; // jourprivate int m; // moisprivate int a; // an
void initialise(int jour, int mois, int an) { j=jour; m=mois; a=an; }
Date( ) { j=1 ; m=1 ; a=1900 ; }
Fichier " Date.java "
Résultat d’affichage1/6/1997Nettoyage spécial
4.8 Destruction d'un objet (4.8 Destruction d'un objet (5/55/5))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Date( ) { j=1 ; m=1 ; a=1900 ; }
Date(int j, int m, int a) { this.j = j ; this.m = m ; this.a = a ; }
void affiche( ) { System.out.println(j + "/" + m + "/" + a) ; }protected void finalize() { System.out.println("Nettoyage spécial" ); }
public static void main(String[ ] args){Date d = new Date(1,6,1997);d.affiche( );Date d2=d;d =null; d2=null;System.gc( ); // appel implicite du GC
}
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
Utilisation de ‘==‘ :
Il n’y a égalité que si d1 et d2 désignent la mêmezone mémoire représentant une date.
Date d1 = new Date(1,2,2000) ;
Date d2 = new Date(1,2,2000) ;
if(d1 == d2) . . . . // il n’y a pas égalité
4.9 Comparaison d’instances4.9 Comparaison d’instances
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
if(d1 == d2) . . . . // il n’y a pas égalité
Date d1 = new Date(1,2,2000) ;
Date d2 = d1 ;
if(d1 == d2) . . . . // il y a égalité
Pour comparer deux objets, il faut utiliser la méthode‘equals‘ :
Date d1 = new Date(1,2,2000) ;
Date d2 = new Date(1,2,2000) ;
if(d1.equals(d2)). . . .// il y a égalité si « equals » est définie.
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
Les membres sont accessibles via une instance de laclasse ou via la classe (pour les membres statiques).
On distingues 4 types d’accès aux membres d’uneclasse :
On accède à un attribut d’une instance.
4.10 Accès aux membres (4.10 Accès aux membres (1/21/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
On accède à un attribut d’une instance.
On invoque la méthode d’une instance.
On accède à un attribut statique d’une classe
On invoque une méthode statique d’une classe.
L'accessibilité des membres est pondérée par desmodificateurs de visibilité (public, private, ...)
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
Exemple :
class Circle( ){public double x, y; // Coordonnée du centreprivate double r; // rayon du cercle
public Circle(double r) {this.r = r; // On accède à l'attribut 'r' de l'instance en cours
}
4.10 Accès aux membres (4.10 Accès aux membres (2/22/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
this.r = r; // On accède à l'attribut 'r' de l'instance en cours}
public Circle( ) {this.Circle(2.0); // On invoque la méthode Circle (constructeur) de l’instance courante.
}
private double pi() {return Math.PI; On accède à l'attribut statique 'PI' de la classe 'Math‘
}
public double area(){return pi * Math.sqrt(r); On invoque la méthode ' sqrt ' statistique de la classe ‘Math’
}
}
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
Le mode de passage des paramètres dans les méthodes dépendde la nature des paramètres :
par référence pour les objets,par copie pour les types primitifs.
class Test{
public string s;
Fichier " Test.java "
4.11 Modes de passage4.11 Modes de passage
Résultat d’affichage
La valeur de i = 0
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
{public string s;public int i;
Test() { }; // constructeur
void modifier(int value, StringBuffer chaine2)
{ value++ ; chaine2.append(" tout le monde"); }
public static void main(String[ ] args){Test t = new Test();int a=0; StringBuffer chaine1= new StringBuffer ("Bonjour" );t.modifier(a, chaine1);System.out.println(" La valeur de i="+a);System.out.println(" La valeur de s="+chaine1);
}
La valeur de i = 0
La valeur de s= Bonjour tout le monde
PO
O :
PO
O :Java
Java
444--- Classes et Objet en JavaClasses et Objet en JavaClasses et Objet en Java
Les seuls opérateurs sur les références sont desopérateurs logiques :
== : permet de tester si deux références
désignent le même objet.
!= : permet de tester si deux références ne
désignent pas le même objet.
4.12 Les opérateurs sur les références4.12 Les opérateurs sur les références
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
désignent pas le même objet.
equals: permet de comparer le contenu de deuxréférences.
instanceof: permet de tester si l'objet référencé est
une instance d'une classe donnée ou d'une de sessous-classes
if ( d1 instanceof Date ) {
… Traitement}
PO
O :
PO
O :Java
Java
ChapitreChapitre
55
ChapitreChapitre
55
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
55
Programmation Orientée Programmation Orientée
Objet Avancée Objet Avancée JavaJava
55
Programmation Orientée Programmation Orientée
Objet Avancée Objet Avancée JavaJava
PO
O :
PO
O :Java
Java
Principe :
La réutilisation par composition :
Quand une classe est testée et elle est opérationnelle on peutl’utiliser aussi en tant que nouveau type dans une autre classe.
Les données d’une classe peuvent être des instancesd’autres classes.
5.1 Composition de classes (5.1 Composition de classes (1/41/4))
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
d’autres classes.
Class Date{…..
}
class Personne{
private String nom;private String prénom;private Date naissance;…..
}
Classe StringClasse String
Classe DateClasse Date
Classe PersonneClasse Personne
PO
O :
PO
O :Java
Java
Classe Date :
class Date {
private int j; // jour
private int m; // moisprivate int a; // an
void initialise(int jour, int mois, int an)
5.1 Composition de classes (5.1 Composition de classes (2/42/4))
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
void initialise(int jour, int mois, int an){ j=jour; m=mois; a=an; }
Date( )
{ j=1 ; m=1 ; a=1900 ; }
Date(int j, int m, int a)
{ this.j = j ; this.m = m ; this.a = a ; }
void affiche( ) { System.out.println(j + "/" + m + "/" + a) ; }
}
PO
O :
PO
O :Java
Java
Classe Personne :
class Personne {
private String nom;private String prénom;private Date naissance;
Personne(String nom, String prénom, int jour, int mois, int an)
5.1 Composition de classes (5.1 Composition de classes (3/43/4))
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Personne(String nom, String prénom, int jour, int mois, int an){this.nom=nom;this.cépage=prénom;naissance=new Date(jours,mois,an);
}
void affiche(){
System.out.println("Identité Personne : ");System.out.println(nom+ " " +prénom);naissance.affiche();
}}
PO
O :
PO
O :Java
Java
Classe ApplicationPersonne :
ApplicationPersonne est une classe de lancement.
Elle sert d’enveloppe à la méthode main qui sert de «programme principal ».
Résultat d’affichage
Identité Personne :
5.1 Composition de classes (5.1 Composition de classes (4/44/4))
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
class ApplicationPersonne {
public static void main(String args[ ]){
Personne p = new Personne("Jacques", "DUPONT", 1,2,1947);
p.affiche();}
}
Identité Personne :
Jacques DUPONT
1/2/1947
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Principe : Réutilisation par extension:
Une classe représentant un concept voisin d’une classe existanten’a pas besoin d’être définie à partir de rien.
définition d’une classe comme extension d’une autre.
spécification des modifications seulement.
La deuxième classe hérite de la première.
5.2 Héritage (5.2 Héritage (1/141/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
La deuxième classe hérite de la première.
classe initiale = classe mère ou de base.
deuxième classe = classe dérivée (héritière) de la première.
Données+
méthodes
Classe Cheval
Classe Zèbre
Données+
méthodes
Classe Cheval
rayures+
……
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Intérêt :
L'héritage supprime, en grande partie, lesredondances dans le code.
Une fois la hiérarchie de classes bien établie, on peutlocaliser en un point unique les sections de code(celles-ci restantes à tous moments accessibles grâce
5.2 Héritage (5.2 Héritage (2/142/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
(celles-ci restantes à tous moments accessibles grâceau mot clé super).
Si la hiérarchie des classes est bien pensée, on peuttrès facilement rajouter une classe, dans la mesure oùon peut réutiliser le code des classes parentes.
Si vous n'aviez pas encore modélisé un comportementdans une classe donnée, et que vous vouliezmaintenant le rajouter, une fois l'opération terminée,ce comportement sera alors directement utilisabledans l'ensemble des sous-classes de celle considérée.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
En Java, une classe ne peut hériter que d'une seule classe.
Syntaxe :
class Héritière extends mère { ... }
5.2 Héritage (5.2 Héritage (3/143/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Les classes dérivent, par défaut, de java.lang.Object.
Une référence d'une classe C peut contenir des instancesde C ou des classes dérivées de C.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
L'opérateur instanceOf permet de déterminer la classed'une instance.
Une sous-classe peut re-définir une ou plusieurs des
5.2 Héritage (5.2 Héritage (4/144/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Une sous-classe peut re-définir une ou plusieurs desméthodes dont elle hérite.
Il est possible d’interdire qu’une méthode soit re-définiedans une sous-classe en utilisant final.
Il est possible d’interdire qu’une classe puisse être héritéeen utilisant final.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Exemple :
Une classe mère « Compteur », qui permet de créerdes compteurs classiques.
Dispose de méthodes d’incrémentation et de décrémentation.
5.2 Héritage (5.2 Héritage (5/145/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
class Compteur {
private int valeur ;
Compteur() { valeur = 0 ; }
void inc( ) {valeur ++ ; }
void dec( ) {valeur --; }
int vaut() { return valeur ; }}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Exemple :
Une classe dérivée « Contrôle_Compteur » de laclasse mère « compteur » qui permet de créer descompteurs capables de contrôler l’incrémentation descompteurs classiques.
class Compteur_Controle extends Compteur
5.2 Héritage (5.2 Héritage (6/146/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
class Compteur_Controle extends Compteur
{private int maxval;
Compteur_Controle(int maxval)
{super();this.maxval = maxval;
}
void inc(){if( vaut( ) < maxval ) super.inc( );
}
int get_maxval( ) { return maxval; }}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Exemple :
TestControle_Compteur, une classe de lancement.
class TestControle_Compteur {
{
public static void main(String args[])
5.2 Héritage (5.2 Héritage (7/147/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
public static void main(String args[])
{ Compteur_Controle c = new Compteur_Controle(6);
c.inc( ); // Première incrémentation
c.inc( ); // Deuxième Incrémentation
System.out.println("valeur : "+c.vaut( ) );
c.dec( ); // Première décrémentation
c.dec( ); // Deuxième décrémentation
System.out.println("valeur : "+c.vaut( ) );}
}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Utilisation de « super() » :
Compteur_Controle(int maxval){
super( );this.maxval = maxval;
}
5.2 Héritage (5.2 Héritage (8/148/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Le constructeur de Compteur_Controle appelle leconstructeur de la classe Compteur à l’aide de lafonction super().
L’appel du constructeur de la classe mère doit être lapremière instruction du constructeur de la classedérivée.
super() représente un appel au constructeur de laclasse mère.
}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Une partie du traitement de la méthode inc() de
Utilisation de « super » et masquage des données :
void inc()
{
if( vaut( ) < maxval ) super.inc( );}
5.2 Héritage (5.2 Héritage (9/149/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Une partie du traitement de la méthode inc() deCompteur_Controle peut être effectuée par laméthode inc() de Compteur, c’est pourquoi inc() deCompteur_Controle appelle inc() de Compteur enutilisant super.inc().
super désigne l’instance en cours de la classe mère.
La méthode inc() de la classe Compteur_Controle,masque (remplace) la méthode inc() héritée de laclasse Compteur.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Utilisation de « super » et masquage des données :
Class C extends B
class A{ int x;
void m( ) {...}}
class B extends A{
int y;void m( ) {...}}
5.2 Héritage (5.2 Héritage (10/1410/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Class C extends B{ int a;
……..
a = super.y; // a reçoit la valeur de la variable y de la classe B
a = super.super.x; // erreur syntaxique
a = ((B) this).y; // a reçoit la valeur de la variable y de la classe B
a = ((A) this).x; // a reçoit la valeur de la variable x de la classe A
super.m( ); // Appel à la méthode m de la classe B}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Accès à des attributs privés de la classe mère :
class Compteur {
private int valeur ;……}
class Compteur_Controle extends Compteur{
……..
class Compteur_Controle extends Compteur{
……..
5.2 Héritage (5.2 Héritage (11/1411/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
L’attribut « valeur » est déclaré private.
{……..void inc(){if( valeur < maxval ) super.inc( );
}}
seules les méthodes de la classe Compteur ont accèsà l’attribut « valeur ».
nécessité d’utiliser la fonction d’accès publique vaut().
{……..void inc(){if( vaut( ) < maxval ) super.inc( );
}}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Accès à des attributs privés de la classe mère :
class Compteur {
protected int valeur ;……}
class Compteur_Controle extends Compteur{
……
5.2 Héritage (5.2 Héritage (12/1412/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
L’attribut « valeur » est déclaré protected.
{……void inc(){if( valeur < maxval ) super.inc( );
}}
L’attribut « valeur » est hérité par la classeCompteur_Controle et il est donc accessible par cetteclasse.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Héritage et conversion : utilisation de « instanceof »
Compteur c1 = new Compteur( );Compteur_Controle c2 = new Compteur_Controle(1000);
int maximum = c1. get_maxval( ) ; // Erreur
System.out.println((c1 instanceof Compteur_Controle)); // false
5.2 Héritage (5.2 Héritage (13/1413/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
System.out.println((c1 instanceof Compteur_Controle)); // false
System.out.println((c1 instanceof Compteur)); // true
System.out.println((c2 instanceof Compteur_Controle)); // true
System.out.println((c2 instanceof Compteur )); // true
c1 = c2;
System.out.println((c1 instanceOf Compteur_Controle)); // trueSystem.out.println((c1 instanceOf Compteur)); // true
c2 = c1; // Erreur
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Classe, et méthode finale :
une méthode déclarée final ne peut pas être redéfiniedans une classe dérivée.
class Base
{
final void f()
class Dérivée extends Base
{
void f( ) // Erreur
5.2 Héritage (5.2 Héritage (14/1414/14))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
final void f()
{- - - }
- - - -
}
void f( ) // Erreur
{- - - }
- - - -
}
une classe déclarée final ne peut pas avoir de classesdérivées
final class Base{- - - -}
class Dérivée extends Base{- - - -}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Regroupement de classes
les paquetages permettent de regrouper un ensemblede classes portant sur un même thème (classesd’entrées sorties, classes réseau, classesgéométriques).
Un paquetage contient des classes et des paquetages
5.3 Les paquetages (package) (5.3 Les paquetages (package) (1/41/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Un paquetage contient des classes et des paquetagesce qui permet de constituer une arborescence depaquetages.
Les paquetages permettent une manipulation aiséedes groupes de classes, une limitation des espaces denoms et un niveau de protection.
Constitution d’un paquetage
dans un fichier xxx.java la déclaration package truc audébut du texte source indique au compilateur que lesclasses contenues dans le fichier doivent être rangéesdans le paquetage truc.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Nom d’un paquetage :
Les paquetages étant organisés en arborescences, ladésignation d’un paquetage s’effectue en donnant lechemin sous la forme pointée.
bidule.machin.truc désigne le paquetage truc situédans le paquetage machin, lui même situé dans le
5.3 Les paquetages (package) (5.3 Les paquetages (package) (2/42/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
dans le paquetage machin, lui même situé dans lepaquetage bidule.
Accès aux éléments d’un paquetage :
Une classe appartenant à un paquetage a un accès àchaque élément du paquetage.
Une classe peut faire référence à une classe d’un autrepaquetage en donnant le chemin complet despaquetages jusqu’à elle.
paqu1.paqu2.classe1 c1 ;
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Importation des paquetages :
Une classe peut importer une classe d’un autrepaquetage en donnant seulement le nom de la classeet le chemin d’accès à l’aide de la déclaration importau début du fichier xxx.java.
// import de la classe classe1 du paquetage machin.truc
5.3 Les paquetages (package) (5.3 Les paquetages (package) (3/43/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
// import de la classe classe1 du paquetage machin.truc
import machin.truc.classe1 ;
// import de toutes les classes du paquetage machin.truc
import machin.truc.* ;
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Les paquetages standard :
Java.lang : contient Object, class, classloader, lesclasses adaptatrices, system, runtime, String,StrinBuffer, etc.
java.util : contient des structures de données (vector,stack, hashtable, Enumeration, etc.) et des classes
5.3 Les paquetages (package) (5.3 Les paquetages (package) (4/44/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
stack, hashtable, Enumeration, etc.) et des classescomme random, date.
java.io : contient des classes pour E/S sur disque avecfiltrages divers.
java.net : contient des classes réseau (URL, sockets,etc.).
java.awt : contient les classes pour interfacesgraphiques.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Situations possibles des différentes classes :
5.4 Paquetages et protection des données (5.4 Paquetages et protection des données (1/41/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Les classes Fille1, Fille2 et Fille3 héritent de la classemère.
La classe Fille3 se trouve dans un paquetage différentde celui des classes Fille1 et Fille2.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Attributs ou méthodes public :
5.4 Paquetages et protection des données (5.4 Paquetages et protection des données (2/42/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Les attributs et méthodes public sont accessibles partoutes instances de toutes les classes.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Attributs ou méthodes protected :
5.4 Paquetages et protection des données (5.4 Paquetages et protection des données (3/43/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Les attributs et méthodes protected d’une instanced’une classe sont accessibles par les instances desclasses du même paquetage et par les classesdérivées.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Attributs ou méthodes private :
5.4 Paquetages et protection des données (5.4 Paquetages et protection des données (4/44/4))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Les attributs et les méthodes private d’une instancede la classe Mère ne sont accessibles que par uneinstance de la classe Mère
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Une classe abstraite sert à mettre en facteur des attributset des méthodes pour des classes dérivées concrètes.
Une classe abstraite est introduite par le mot clé« abstract » et elle a au moins une méthode abstraite.
Une méthode abstraite est déclarée par le mot clé abstract,
5.5 Les classes abstraites (5.5 Les classes abstraites (1/21/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Une méthode abstraite est déclarée par le mot clé abstract,elle n’a pas de corps.
Une classe abstraite ne peut pas être instanciée (new).
Si une classe dérivée d’une classe abstraite ne redéfinit pastoutes les méthodes abstraites alors elle est abstraite.
Pour utiliser une classe abstraite on doit définir une classehéritière qui fournit les réalisations des méthodesabstraites de la classe abstraite.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Exemple :
class abstract Shape {public abstract double perimeter();
}
class Circle extends Shape
5.5 Les classes abstraites (5.5 Les classes abstraites (2/22/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
class Circle extends Shape {...public double perimeter() { return 2 * Math.PI * r ; }
}
class Rectangle extends Shape { ...public double perimeter() { return 2 * (height + width); }
}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Exemple :
5.6 Polymorphisme5.6 Polymorphisme
Shape[ ] shapes = { new Circle(2), new Rectangle(2,3), …….. };
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
double sum_of_perimeters = 0;
for (int i = 0; i < shapes.length; i++)
sum_of_perimeters += shapes[i].perimeter( );
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (1/131/13))
Principe de l’héritage multiple :
La classe Lion hérite de la classe Carnivore et Animal.
Une instance de Lion contient donc les attributs et lesméthodes de la classe Carnivore, les attributs et lesméthodes de la classe Animal, et enfin les attributs etles méthodes spécifiques concernant un Lion.
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Lion
Carnivore Animal
Classe Lion
Classe Animal
+……
Classe Carnivore
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Problème de l’héritage multiple en diamant :
Un attribut de la classe Personne apparaît en doubledans la classe Enseignant-Chercheur.
Si une méthode de la classe Personne est redéfiniedans la classe Enseignant et dans la classe Chercheur,laquelle est utilisée dans la classe Enseignant-Chercheur ?
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (2/132/13))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Chercheur ?
Enseignant
Enseignant-chercheur
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Principe de l’interface :
Une interface est introduite par le mot clé «interface»,et se comporte comme une classe dont toutes lesméthodes sont abstract et dont tous les attributs sontfinal.
Les mots clés final et abstract n’apparaissent pas dans
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (3/133/13))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Les mots clés final et abstract n’apparaissent pas dansla définition d’une interface.
Une interface est un moyen de préciser les servicesqu'une classe peut rendre. C’est un modèled'implémentation.
Une interface est inutilisable en elle-même.
Une classe doit implémenter l’interface, c’est à diredéfinir les corps des méthodes abstraites de l’interface.
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Une interface est utilisée lorsque nous avons seulementbesoin de savoir que telle ou telle classe possède tellesméthodes et se comporte de telle manière, exemple :
On peut imaginer une interface appareilElectrique quidéfinit les méthodes estEnclenche() etalimente(boolean).
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (4/134/13))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Si une classe implémente l'interface appareilElectrique,on sait donc qu'elle possède au moins ces deuxméthodes, qu'il s'agisse d'une radio, d'une lampe oud'un autre appareil.
Lorsque l'on désire indiquer à un appareil qu'il estalimenté, on exécute app.alimente(true), et pour luiindiquer qu'il a été débranché, on exécuteapp.alimente(false).
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Exemple d’interface :
Appareil_Electrique
public interface Appareil_Electrique { /** teste si l'appareil est enclenche */
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (5/135/13))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
/** teste si l'appareil est enclenche */ public boolean estEnclenche( );
/** on appelle cette methode lorsque l'on branche l'appareildans une source de courant active, avec true, ou false si lasource est inactive */public void alimente(boolean alim);
}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Exemple d’utilisation de l’interface Appareil_Elctrique.
classe Radio.
class Radio implements Appareil_Electrique { final static int freqMiseEnRoute = 1007; // 100.7 MHz int freq;boolean allumee = false;
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (6/136/13))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
boolean allumee = false;public boolean estEnclenche() { return allumee; }
public void alimente(boolean a) { allumee = a; if (allumee) freq = freqMiseEnRoute;
}
public boolean changeFreq(int freq) { if (allumee == true) { this.freq = freq; return allumee; }return false;
}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Le mot clé « implements » indique que la classe Radio doitforcément donner une définition précise pour les méthodesspécifiées dans l’interface.
Une classe peut implémenter plusieurs interfaces.
Elle doit dans ce cas fournir des définitions pour toutesles méthodes spécifiées dans l’interface.
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (7/137/13))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
les méthodes spécifiées dans l’interface.
Plusieurs classes différentes peuvent implémenter demanières différentes une même interface.
Plusieurs réalisations possibles d’une mêmespécification (polymorphisme).
interface Truc
{
void e( );
}
class Machin implements Truc, Bidule{void e( ) {- - -; }void f( ) {- - -; }
}
interfaceBidule
{
void f( );
}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Héritage multiple :
Le problème de l’héritageen diamant peut être résoluà l’aide des interfaces :
Une classe peut hériter d’uneclasse et implémenter
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (8/138/13))
Enseignant
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
classe et implémenterplusieurs interfaces.
interface Personne{- - -}
interface Chercheur extends Personne {- - -}
class Enseignant implements Personne {- - -}
class Enseignant-Chercheur extends Enseignant implements Chercheur {…}
Enseignant-chercheur
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Héritage multiple :
Les attributs de Personne nesont pas redéfinis dansEnseignant ni Chercheur
Ils sont déclarés final.
Personne
ChercheurEnseignant
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (9/139/13))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Ils sont déclarés final.
Les méthodes de Personnesont implémentées dansEnseignant, voir redéfiniesdans Enseignant_Chercheur,mais ne peuvent pas êtreimplémentées par Chercheurqui est une interface.
Enseignant-chercheur
classe
interface
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Les interfaces peuvent hériter de plusieurs autresinterfaces :
interface X {- - - -}
interface Y {- - - -}
interface Z extends X,Y {…}
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (10/1310/13))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
interface Z extends X,Y {…}
Il n’y a pas de risque de duplication des attributs de Xet de Y dans Z:
Les attributs sont final donc non héritables.
Et pour les méthodes ?
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Conflit de nom avec lesinterfaces :
Si les méthodes f situées
dans les interfaces X et Y
ont des paramètres
interface X
{
void f( int i);
}
interface Y
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (11/1311/13))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
ont des paramètres
différents et n’importe
comme type de retour.
La classe Z aura deux
implémentations de la
méthode f qui correspond aux
deux versions distinguées par
les paramètres.
{
void f(char c );
}
class Z implements X,Y{void f(int i ) {….}void f(char c) {…};
}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Conflit de nom avec lesinterfaces :
Si les méthodes f situées
dans les interfaces X et Y
interface X
{
void f( );
}
interface Y
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (12/1312/13))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
ont les mêmes paramètres
et le même type de retour.
La classe Z aura une
implémentation de f
correspondant aux deux
spécifications identiques.
{
void f( );
}
class Z implements X,Y{void f( ) {……….};
}
PO
O :
PO
O :Java
Java
555--- POO Avancée JavaPOO Avancée JavaPOO Avancée Java
Conflit de nom avec lesinterfaces :
Si les méthodes f situées
dans les interfaces X et Y
interface X
{
void f(int i );
}
interface Y
5.7 Héritage multiple et les Interfaces (5.7 Héritage multiple et les Interfaces (13/1313/13))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
ont les mêmes paramètres
et des types de retour
différents.
la classe Z ne peut pas
implémenter les deux
interfaces.
{
int f(int i );
}
class Z implements X,Y{????????
}
PO
O :
PO
O :Java
Java
ChapitreChapitre
66
ChapitreChapitre
66
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
66
Les classes de baseLes classes de base
66
Les classes de baseLes classes de base
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
La classe Object est la classe mère de toutes les classes.
Elle contient 2 méthodes que la plupart des classesJava doivent redéfinir :
String toString() : qui retourne une description de l'objet.
6.1 Classe Object (6.1 Classe Object (1/21/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
boolean equals(Object) : qui permet de tester l'égalitésémantique de deux objets.
Une méthode Class (non pas d’instance) getClass() qui peut êtreutilisée sur tout objet pour déterminer sa nature
nom de la classe,
nom de ses ancêtres,
structure.
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Exemple de manipulation de la classe Object :
class Personne // dérive de Object par défaut
{
private String nom ;
Utilisation des méthodes toString, equals et getClass
Résultat d’affichage
Classe : Personne Objet : Jean Dupond
6.1 Classe Object (6.1 Classe Object (2/22/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Personne p1 = new Personne("Jean Dupond") ;
Personne p2 = new Personne("Jean Dupond") ;
System.out.println( p1.toString( ) ) ;
Exemple d’utilisation
private String nom ;
public Personne(String nom) { this.nom = nom ; }
public String toString() { return "Classe:" + getClass().getName() + "Objet :" + nom ;}
boolean equals(Personne p) { return p.nom.equals(this.nom) ; } }
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Les classes Wrapper sont des classes qui permettent dereprésenter les types de base sous forme d'objets :
Boolean
pour représenter les types de base boolean.
Integer
pour représenter les types de base int.
6.2 Les classes Wrapper (6.2 Les classes Wrapper (1/21/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
pour représenter les types de base int.
Float
pour représenter les types de base float.
Double
pour représenter les types de base double.
Long
pour représenter les types de base long.
Character
pour représenter les types de base char.
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Les classes Wrapper permettent en particulier derécupérer les valeurs minimum et maximum du type debase correspondant.
6.2 Les classes Wrapper (6.2 Les classes Wrapper (2/22/2))
double f;if (f> Integer.MIN_VALUE && f < Integer.MAX_VALUE); int i = (int) f;
Les conversions entre types de base et chaînes de
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Les conversions entre types de base et chaînes decaractères sont possibles via des objets Wrapper :
Conversion d’une chaîne de caractère vers un entier :
Integer.parseInt(String s) ;
Integer(String s)).intValue( ) ;
Integer.valueOf(String s).intValue( ) ;
Conversion d’un entier en chaîne de caractère :
Integer(int i).toString( ) ;
String.valueOf(int i) ;
"" + i ;
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
La classe String :
La classe String décrit des objets qui contiennent unechaîne de caractères constante (cette chaîne ne peutpas être modifiée).
String s ;
s = "voici une chaîne";
6.3 Les chaînes de caractères non modifiables (6.3 Les chaînes de caractères non modifiables (1/21/2))
Voici une chaîne
s
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
s = "voici une chaîne";
s = "voici une autre chaîne";
C'est aussi la seule classe qui dispose d'opérateurssupplémentaires : + et += pour la concaténation dechaînes de caractères.
int nombre = 3 ;String message = "Mon nombre est " + 3 ;
Voici une autre chaîne
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Classe java.lang.String :
Description des méthodes utilisées :
int length( )
Retourne le nombre de caractères compris dans la chaîne.
int indexOf(char c, int i)
6.3 Les chaînes de caractères non modifiables (6.3 Les chaînes de caractères non modifiables (2/22/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Retourne la position du caractère c en partant de la positioni
String substring(int i, int j)
Retourne une chaîne extraite de la chaîne sur laquelle estappliquée cette méthode, en partant de la position i à laposition j
boolean equals(String s)comparaison sémantique des chaînes.
String toLowerCase( ), String toUpperCase( )
majuscule vers minuscule, minuscule vers majuscule.
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Classe java.lang.StringBuffer :
Un objet de la classe StringBuffer se caractérise pardeux tailles, qui sont retournées par les méthodes :
int length( ) : qui retourne le nombre exacte de caractères ducontenu de la chaîne de caractères.
int capacity( ) : qui retourne la taille actuelle du tableau
6.4 Les chaînes de caractères modifiables (6.4 Les chaînes de caractères modifiables (1/31/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
int capacity( ) : qui retourne la taille actuelle du tableauinterne
Quelques méthodes supplémentaires:
StringBuffer append(p) : ajoute p en fin de chaîne (p estn'importe quel type de base)
StringBuffer insert(int offset, p) : idem, mais en insérant p àl'emplacement indiqué par offset.
StringBuffer reverse( ) : inversion des caractères de la chaîne.
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Exemple 1:
StringBuffer s = new StringBuffer("Bonjour");
s.append(" tout le monde");
System.out.println("s : "+s);
System.out.println("length : "+s.length());
System.out.println("capacity : "+s.capacity());
6.4 Les chaînes de caractères modifiables (6.4 Les chaînes de caractères modifiables (2/32/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Résultats :
s : Bonjour tout le mondelength : 21capacity : 23
Exemple 2 :
s.insert(2,"hop");
System.out.println("s : "+s);
Résultat :
Bohopnjour tout le monde
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Classe java.util.StringTokenizer :
Cette classe permet de construire des objets quisavent découper des chaînes de caractères en sous-chaînes.
Lors de la construction du StringTokenizer, il fautpréciser la chaîne à découper et, le ou les caractèresqui doivent être utilisés pour découper cette chaîne :
6.4 Les chaînes de caractères modifiables (6.4 Les chaînes de caractères modifiables (3/33/3))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
qui doivent être utilisés pour découper cette chaîne :
void AfficheParMots(String texte){StringTokenizer st = new StringTokenizer(texte, ",:") ;
while( st.hasMoreTokens() ){
String mot = st.nextToken() ;System.out.print(mot + " ") ;
}
}Résultat d’affichage
Lundi Mardi Mercredi;Jeudi
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Les objets de la classe Vector représentent des tableaux àtaille variable, c.à.d. il n'y a pas de limite au nombred'objets qu'il peut contenir :
Object elementAt(int index):retourne (sans retirer) l'élément à la position index.
void insertElementAt(Object obj,int pos):
6.5 Classe Vector (6.5 Classe Vector (1/51/5))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
void insertElementAt(Object obj,int pos):place l'objet obj à la position pos indiquée (remplacement)
boolean contains(Object obj):retourne true si obj est dans le tableau.
int indexOf(Object obj):retourne la position de obj (-1 si obj n'est pas présent)
int size() :retourne la taille du tableau
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Présentation :
Classe située dans package java.util
Vector permet de réaliser des listes d’élémentsquelconques pourvu qu’ils héritent de la classe Object.
Exemple d’utilisation 1:
import java.util.* ;
6.5 Classe Vector (6.5 Classe Vector (2/52/5))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
import java.util.* ;
Vector v = new Vector() ;
v.addElement(″1″);v.addElement(″2″);v.addElement(″3″);System.out.printl(v.toString()) ; //affichage du Vector
Résultat
[1,2,3]
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Exemple d’utilisation 2:
v.insertElementAt(″hop″,2) //insertion en 3eme position
System.out.printl(v.toString()) ; // affichage du Vector
Résultat
6.5 Classe Vector (6.5 Classe Vector (3/53/5))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
Résultat
[1,2,hop,3]
v.setElementAt(″truc″,2) // changement d’un élément
System.out.printl(v.toString()) ; // affichage du Vector
Résultat
[1,2,truc,3]
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Parcours d’un Vector :
for(int i = 0 ; i< v.size( ) ;i++) // affichage du Vector
System.out.println(v.elementAt(i)) ;
for(Enumeration e = v.elements( ) ; e.hasMoreElements( ) ;)
System.out.println(e.nextElement( )) ;
6.5 Classe Vector (6.5 Classe Vector (4/54/5))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
System.out.println(e.nextElement( )) ;
NB :
« e » est un itérateur, c’est une instance de Enumeration quipossède les méthodes nécessaires pour parcourir une liste.
Autres méthodes utiles
int num ;
num = v.indexOf(″elem2″) ; // indice d’un élément
v.removeElement(″elem2″) ; // retrait d’un élément
System.out.println(v.lastElement( )) ;
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Conversion en sortie de Vector :
Un Vector peut contenir des Object (structurepolymorphe)
un élément retiré d’un Vector doit être converti au typedésiré
6.5 Classe Vector (6.5 Classe Vector (5/55/5))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
import java.util.* ;
class Bidule{- - - - - }
Bidule b;
Vector v = new Vector( ) ;
v.addElement(new Bidule(..)); // ajout d’un bidule
v.addElement(new Bidule(..)); // ajout d’un bidule
v.addElement(new Bidule(..)); // ajout d’un bidule
b = (Bidule) v.elementAt(1) ; // conversion en bidule
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Présentation :
Création des tables contenant des doubles <clé,info>quelconques pourvu qu’ils héritent de la classe Object
Opérations possibles sur tables : ajout, retrait,recherche de l’info associée à une clé donnée, test deprésence de clé ou d’info, etc.
6.6 Classe Hashtable (6.6 Classe Hashtable (1/21/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
présence de clé ou d’info, etc.
Exemples d’utilisation
import java.util.* ;
Hashtable t = new Hashtable() ; // création d’une Hashtable
Integer a, b, c ; // création de 3 Integer
Integer n ;
a = new Integer(1) ; b = new Integer(2) ; c = new Integer(3) ;
t.put(″un″,a) ; t.put(″deux″,b) ; t.put(″trois″,c) ;
PO
O :
PO
O :Java
Java
666--- Les classes de basesLes classes de basesLes classes de bases
Méthodes utiles :
n = (integer) t.get(″deux″) ; // recherche de l’info associée à une clé
if(t.contains(c))..... // test présence d’une info
if(t.containsKey(″deux″) ).. // test présence d’une clé
t.remove(″deux″) ; // suppression d’une entrée
6.6 Classe Hashtable (6.6 Classe Hashtable (2/22/2))
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
t.remove(″deux″) ; // suppression d’une entrée
Parcours d’une Hashtable
affichage des infos :
for(Enumeration e = t.elements() ;e.hasMoreElements( ) ;)
System.out.println(e.nextElement( )) ;
affichage des clés :
for(Enumeration e = t.keys( ) ;e.hasMoreElements( ) ;)
System.out.println(e.nextElement( )) ;
PO
O :
PO
O :Java
Java
ExercicesExercices
&&
ExercicesExercices
&&
‹N‹N°°››
PO
O :
PO
O :
Tarak CHAARI
&&
CorrigésCorrigés
&&
CorrigésCorrigés