181
: : Java Java Programmation Orientée Objet Programmation Orientée Objet Java Java ‹N ‹N° °› POO POO Tarak CHAARI Responsable Responsable Tarak CHAARI Tarak CHAARI [email protected] [email protected] [email protected] [email protected]

Programmation Orientée Objet

  • Upload
    joss87

  • View
    1.215

  • Download
    6

Embed Size (px)

Citation preview

Page 1: Programmation Orientée Objet

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

Page 2: Programmation Orientée Objet

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

Page 3: Programmation Orientée Objet

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 ?

Page 4: Programmation Orientée Objet

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é..

Page 5: Programmation Orientée Objet

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.

Page 6: Programmation Orientée Objet

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.

Page 7: Programmation Orientée Objet

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 ».

Page 8: Programmation Orientée Objet

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

Page 9: Programmation Orientée Objet

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

Page 10: Programmation Orientée Objet

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

Page 11: Programmation Orientée Objet

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

Page 12: Programmation Orientée Objet

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.

Page 13: Programmation Orientée Objet

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.

Page 14: Programmation Orientée Objet

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[ ],

Page 15: Programmation Orientée Objet

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");}

Page 16: Programmation Orientée Objet

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.

Page 17: Programmation Orientée Objet

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..

Page 18: Programmation Orientée Objet

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..

Page 19: Programmation Orientée Objet

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))..

Page 20: Programmation Orientée Objet

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..

Page 21: Programmation Orientée Objet

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

Page 22: Programmation Orientée Objet

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");}

Page 23: Programmation Orientée Objet

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).

Page 24: Programmation Orientée Objet

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.

Page 25: Programmation Orientée Objet

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.

Page 26: Programmation Orientée Objet

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.

Page 27: Programmation Orientée Objet

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.

Page 28: Programmation Orientée Objet

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.

Page 29: Programmation Orientée Objet

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 ‘’

Page 30: Programmation Orientée Objet

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

Page 31: Programmation Orientée Objet

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

Page 32: Programmation Orientée Objet

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

Page 33: Programmation Orientée Objet

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)

Page 34: Programmation Orientée Objet

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.

Page 35: Programmation Orientée Objet

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

Page 36: Programmation Orientée Objet

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.

Page 37: Programmation Orientée Objet

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..

Page 38: Programmation Orientée Objet

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 ````*/*/'')'')..

Page 39: Programmation Orientée Objet

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..

Page 40: Programmation Orientée Objet

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.

Page 41: Programmation Orientée Objet

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.

Page 42: Programmation Orientée Objet

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

Page 43: Programmation Orientée Objet

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.

Page 44: Programmation Orientée Objet

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, ...

Page 45: Programmation Orientée Objet

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 …

Page 46: Programmation Orientée Objet

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

Page 47: Programmation Orientée Objet

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.

Page 48: Programmation Orientée Objet

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.

Page 49: Programmation Orientée Objet

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)

Page 50: Programmation Orientée Objet

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’;

Page 51: Programmation Orientée Objet

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.

Page 52: Programmation Orientée Objet

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.

Page 53: Programmation Orientée Objet

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 ");

Page 54: Programmation Orientée Objet

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

Page 55: Programmation Orientée Objet

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

Page 56: Programmation Orientée Objet

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

Page 57: Programmation Orientée Objet

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

Page 58: Programmation Orientée Objet

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

Page 59: Programmation Orientée Objet

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

Page 60: Programmation Orientée Objet

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

Page 61: Programmation Orientée Objet

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

Page 62: Programmation Orientée Objet

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),

Page 63: Programmation Orientée Objet

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 ;

Page 64: Programmation Orientée Objet

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.

Page 65: Programmation Orientée Objet

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

Page 66: Programmation Orientée Objet

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

Page 67: Programmation Orientée Objet

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

Page 68: Programmation Orientée Objet

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

Page 69: Programmation Orientée Objet

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

Page 70: Programmation Orientée Objet

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;

Page 71: Programmation Orientée Objet

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

Page 72: Programmation Orientée Objet

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

Page 73: Programmation Orientée Objet

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

Page 74: Programmation Orientée Objet

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.

Page 75: Programmation Orientée Objet

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.

Page 76: Programmation Orientée Objet

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.

Page 77: Programmation Orientée Objet

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.

Page 78: Programmation Orientée Objet

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é

Page 79: Programmation Orientée Objet

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.

Page 80: Programmation Orientée Objet

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.

Page 81: Programmation Orientée Objet

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.

Page 82: Programmation Orientée Objet

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

Page 83: Programmation Orientée Objet

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.

Page 84: Programmation Orientée Objet

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.

Page 85: Programmation Orientée Objet

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.

Page 86: Programmation Orientée Objet

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.

Page 87: Programmation Orientée Objet

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

Page 88: Programmation Orientée Objet

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)

Page 89: Programmation Orientée Objet

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.

Page 90: Programmation Orientée Objet

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 ").

Page 91: Programmation Orientée Objet

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

Page 92: Programmation Orientée Objet

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

Page 93: Programmation Orientée Objet

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.

Page 94: Programmation Orientée Objet

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 ; }

}

Page 95: Programmation Orientée Objet

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) ; }

}

Page 96: Programmation Orientée Objet

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.

Page 97: Programmation Orientée Objet

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.

Page 98: Programmation Orientée Objet

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.

Page 99: Programmation Orientée Objet

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.

}

Page 100: Programmation Orientée Objet

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.

Page 101: Programmation Orientée Objet

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) ; }

}

Page 102: Programmation Orientée Objet

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.

Page 103: Programmation Orientée Objet

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.

Page 104: Programmation Orientée Objet

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) ; }

}

Page 105: Programmation Orientée Objet

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); }

Page 106: Programmation Orientée Objet

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( );

}}

Page 107: Programmation Orientée Objet

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].

Page 108: Programmation Orientée Objet

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.

Page 109: Programmation Orientée Objet

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

Page 110: Programmation Orientée Objet

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

Page 111: Programmation Orientée Objet

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.

Page 112: Programmation Orientée 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.

Page 113: Programmation Orientée Objet

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

}

Page 114: Programmation Orientée Objet

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

}

Page 115: Programmation Orientée Objet

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

}

Page 116: Programmation Orientée Objet

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.

Page 117: Programmation Orientée Objet

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, ...)

Page 118: Programmation Orientée Objet

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’

}

}

Page 119: Programmation Orientée Objet

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

Page 120: Programmation Orientée Objet

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}

Page 121: Programmation Orientée Objet

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

Page 122: Programmation Orientée Objet

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

Page 123: Programmation Orientée Objet

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) ; }

}

Page 124: Programmation Orientée Objet

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();

}}

Page 125: Programmation Orientée Objet

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

Page 126: Programmation Orientée Objet

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+

……

Page 127: Programmation Orientée Objet

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.

Page 128: Programmation Orientée Objet

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.

Page 129: Programmation Orientée Objet

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.

Page 130: Programmation Orientée Objet

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 ; }}

Page 131: Programmation Orientée Objet

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; }}

Page 132: Programmation Orientée Objet

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( ) );}

}

Page 133: Programmation Orientée Objet

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.

}

Page 134: Programmation Orientée Objet

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.

Page 135: Programmation Orientée Objet

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}

Page 136: Programmation Orientée Objet

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( );

}}

Page 137: Programmation Orientée Objet

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.

Page 138: Programmation Orientée Objet

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

Page 139: Programmation Orientée Objet

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{- - - -}

Page 140: Programmation Orientée Objet

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.

Page 141: Programmation Orientée Objet

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 ;

Page 142: Programmation Orientée Objet

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.* ;

Page 143: Programmation Orientée Objet

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.

Page 144: Programmation Orientée Objet

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.

Page 145: Programmation Orientée Objet

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.

Page 146: Programmation Orientée Objet

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.

Page 147: Programmation Orientée Objet

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

Page 148: Programmation Orientée Objet

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.

Page 149: Programmation Orientée Objet

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); }

}

Page 150: Programmation Orientée Objet

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( );

Page 151: Programmation Orientée Objet

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

Page 152: Programmation Orientée Objet

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

Page 153: Programmation Orientée Objet

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.

Page 154: Programmation Orientée Objet

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).

Page 155: Programmation Orientée Objet

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);

}

Page 156: Programmation Orientée Objet

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;

}

Page 157: Programmation Orientée Objet

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( );

}

Page 158: Programmation Orientée Objet

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

Page 159: Programmation Orientée Objet

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

Page 160: Programmation Orientée Objet

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 ?

Page 161: Programmation Orientée Objet

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) {…};

}

Page 162: Programmation Orientée Objet

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( ) {……….};

}

Page 163: Programmation Orientée Objet

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{????????

}

Page 164: Programmation Orientée Objet

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

Page 165: Programmation Orientée Objet

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.

Page 166: Programmation Orientée Objet

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) ; } }

Page 167: Programmation Orientée Objet

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.

Page 168: Programmation Orientée Objet

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 ;

Page 169: Programmation Orientée Objet

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

Page 170: Programmation Orientée Objet

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.

Page 171: Programmation Orientée Objet

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.

Page 172: Programmation Orientée Objet

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

Page 173: Programmation Orientée Objet

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

Page 174: Programmation Orientée Objet

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

Page 175: Programmation Orientée Objet

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]

Page 176: Programmation Orientée Objet

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]

Page 177: Programmation Orientée Objet

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( )) ;

Page 178: Programmation Orientée Objet

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

Page 179: Programmation Orientée Objet

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) ;

Page 180: Programmation Orientée Objet

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( )) ;

Page 181: Programmation Orientée Objet

PO

O :

PO

O :Java

Java

ExercicesExercices

&&

ExercicesExercices

&&

‹N‹N°°››

PO

O :

PO

O :

Tarak CHAARI

&&

CorrigésCorrigés

&&

CorrigésCorrigés