0% ont trouvé ce document utile (0 vote)
17 vues186 pages

Introduction à la Programmation Java

Le document présente un cours sur la programmation orientée objet en Java, comprenant une introduction, l'historique du langage, ses atouts, et les étapes de développement d'une application. Il aborde également la plateforme Java, y compris l'API Java et la machine virtuelle JVM. Enfin, il décrit les méthodes d'écriture et de déploiement de programmes Java, que ce soit via un éditeur de texte ou un environnement de développement intégré (IDE).

Transféré par

khmayess ghannouchi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
17 vues186 pages

Introduction à la Programmation Java

Le document présente un cours sur la programmation orientée objet en Java, comprenant une introduction, l'historique du langage, ses atouts, et les étapes de développement d'une application. Il aborde également la plateforme Java, y compris l'API Java et la machine virtuelle JVM. Enfin, il décrit les méthodes d'écriture et de déploiement de programmes Java, que ce soit via un éditeur de texte ou un environnement de développement intégré (IDE).

Transféré par

khmayess ghannouchi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Programmation Orientée

Objets
Langage Java
DR. HAJER NABLI
n a b l i . h a j e r @ ya h o o .f r
UNIVERSITÉ DE MONASTIR
Plan du cours
Chapitre 1: Introduction à la programmation en Java
Chapitre 2: Syntaxe et Éléments de base de langage Java
Chapitre 3: Le concept Objet en Java
Chapitre 4: Classes et Objets en Java
Chapitre 5: Programmation orientée objet avancée
Chapitre 6: Les classes de base

Dr. Hajer Nabli ISIMM -- 2022/2023 2


Chapitre 1:

INTRODUCTION À LA
PROGRAMMATION EN JAVA

Dr. Hajer Nabli ISIMM -- 2022/2023 3


Historique de Java (1/2)
o 1990: Le développement de Java a commencé par une équipe de Sun dirigée par James Gosling. Le
projet, qui portait au début le nom Oak (chêne en anglais), avait pour but de développer un nouveau
langage de programmation indépendant du système, orienté objet et léger

o 1992: Première présentation interne des possibilités de Oak. Un appareil appelé Star Seven permet de
visualiser une animation montrant Duke, la mascotte actuelle de Java

o 1993: Sun redirige ce langage vers Internet et diffuse HotJava, un navigateur internet entièrement écrit
en Java

o 1995 : Sun a changé le nom du langage de Oak à Java (café en argot américain) car il était déjà utilisé
par un autre langage de programmation

o Mai 1995: Lancement officiel de Java 1.0

Dr. Hajer Nabli ISIMM -- 2022/2023 4


Historique de Java (2/2)
o Depuis sa première diffusion en 1995, le langage et les plateformes Java ont subi de nombreuses
améliorations, on peut citer :
o 1996 : Lancement du JDK 1.0.1 o 2014 : Lancement de JavaSE 8
o 1997 : Lancement du JDK 1.1 o 2017 : Lancement de Java SE 9, Java EE 8
o 1998 : Lancement de J2SE 1.2 o 2018 : Lancement de Java SE 10, Java SE 11
o 1999 : Lancement de J2EE 1.2 o 2019 : Java SE 12, Java SE 13, Jakarta EE 8
o 2000 : Lancement de J2SE 1.3 o 2020 : Java SE 14, Java SE 15, Jakarta EE 9
o 2001 : Lancement de J2EE 1.3 o 2021 : Java SE 16, Java SE 17, Jakarta EE 9.1
o 2002 : Lancement de J2SE 1.4 o 2022 : Java SE 18, Jakarta EE 10
o 2003 : Lancement de J2EE 1.4
o 2004 : Lancement de J2SE 5.0
o 2006 : Lancement de JavaSE 6
Évolution très rapide et succès du langage
o 2009 : Lancement de Java EE 6
o 2010 : Sun Microsystem est racheté par Oracle.
Désormais, Java est maintenu par la société Oracle.
o 2011 : Lancement de JavaSE 7
o 2013 : Lancement de Java EE 7

Dr. Hajer Nabli ISIMM -- 2022/2023 5


Atouts de Java (1/3)
o Java est Familier :
▪ Syntaxe proche de celle de C/C++
• Même types de données (int, float, double, etc.) et Même formes de déclarations
• Même structure de contrôle : if, for, while, etc.

o Java est Simple :


▪ Apprentissage facile
▪ Pointeurs et goto eliminés

o Java est Ouvert et Distribué :


▪ Possède une importante bibliothèque ([Link]) pour
• l’accès à des objets distants sur Internet via des URL (Universal Resource Locators)
• la programmation client/serveur via des sockets TCP et UDP
• l’exécution des méthodes distantes (RMI : Remote Method Invocation)
• la gestion de serveurs Web via les Servlets
▪ Connexion intégrée aux bases de données (JDBC)

Dr. Hajer Nabli ISIMM -- 2022/2023 6


Atouts de Java (2/3)
o Java est Orienté Objet :
o Java ne permet d'utiliser que des objets
o Objet est une entité regroupant un ensemble de données et de méthodes de traitement

o Java est Fiable :


▪ Gestion automatique de la mémoire
• Possède une fonctionnalité appelée le Ramasse-miettes (ou Garbage Collector) qui se charge
de libérer la mémoire lorsqu’il détecte qu’elle n’est plus utilisée
▪ Gestion des exceptions
• Ouverture d’un fichier inexistant, division par zéro, création d’un point de communication
réseau (socket) vers une @IP inexistante, . . . Le programmeur est forcé de gérer diverses
exceptions
▪ Sources d'erreurs limitées
• Typage fort, Pas d'héritage multiple, Pas de manipulations de pointeurs, etc.

Dr. Hajer Nabli ISIMM -- 2022/2023 7


Atouts de Java (3/3)
o Java est Interprété :
▪ Un code écrit en Java n'est pas exécuté tel quel
• Le compilateur Java transforme le code Java en un fichier intermédiaire appelé Bytecode
• L’interpréteur Java exécute le Bytecode directement sur n’importe quelle plateforme à l’aide
d’une machine virtuelle JVM (Java Virtual Machine)

o Java est portable et indépendant de l’architecture :


▪ Le Bytecode généré par le compilateur est indépendant de la plate-forme
▪ Les bibliothèques sont intégrées de manière standard au langage
▪ Un programme écrit en Java sur une plateforme peut être exécuté sans aucune modification sur
un autre système, à condition bien sûr qu'une machine virtuelle JVM soit disponible sur ce dernier

Dr. Hajer Nabli ISIMM -- 2022/2023 8


Déploiement d’un programme (1/4)
Programme

Traduire Exécuter

Traducteur

o Il existe deux façons pour convertir le code source en langage machine


▪ Compiler le code : c’est à dire le traduire en binaire
▪ Interpréter le code : c’est à dire le lire en temps réel et exécuter les instructions

Dr. Hajer Nabli ISIMM -- 2022/2023 9


Déploiement d’un programme (2/4)
o Langages Compilés : C, C++, Pascal et OCaml S’exécute
Langage Machine
Compilateur
pour Windows Windows
Code Source
Langage Machine
Compilateur
pour Linux
Linux
Langage Machine
prog.c
Compilateur
pour MacOs

MacOs

Le Compilateur génère du code natif directement exécutable, mais spécifique à


chaque environnement

Dr. Hajer Nabli ISIMM -- 2022/2023 10


Déploiement d’un programme (3/4)
o Langages Interprétés : Java et Python
JVM
Interpréteur
Java
Code Source Bytecode Windows
JVM
Compilateur Interpréteur
Java Java

[Link] Linux
[Link] JVM
Interpréteur
Java

MacOs
Le Compilateur traduit le programme en un code intermédiaire appelé Bytecode
L’ Interpréteur traduit le Bytecode en langage binaire et l’exécute sur la machine

Dr. Hajer Nabli ISIMM -- 2022/2023 11


Déploiement d’un programme (4/4)
LANGAGE COMPILÉ (EXP. C++) LANGAGE INTERPRÉTÉ (EXP. JAVA)

+ Rapidité d’exécution + Portabilité (Indépendant de la plateforme)


Mais + Code est plus léger
- Demande beaucoup plus de lignes de code + Plus simple à écrire
- Plus dure à apprendre Mais
- Code compilé dépends de la plateforme - Plus lent que les langages compilés

Écrire une fois,


exécuter partout

Dr. Hajer Nabli ISIMM -- 2022/2023 12


Plateforme Java (1/3)
o La plateforme Java est entièrement logicielle et s'exécute au dessus des plateformes matérielles
o La plateforme Java est constituée de :
▪ Des interfaces de programmation d’application (API Java)
▪ Machine virtuelle (JVM)

Dr. Hajer Nabli ISIMM -- 2022/2023 13


Plateforme Java – API Java (2/3)
o Java Application Programming Interface (Java API)
▪ Vaste collection de composants logiciels (classes et interfaces)
▪ Organisée en paquetages (ou packages)
▪ Offre de nombreuses fonctions de manière standard (indépendamment de la plateforme
matérielle)
▪ Les principaux packages :
• [Link] : structures de données classiques
• [Link] : entrées / sorties
• [Link] : chaînes de caractères, interaction avec l'OS, threads
• [Link] : les applets sur le web
• [Link] : interfaces graphiques, images et dessins
• [Link] : création d’interfaces graphiques
• [Link] : sockets, URL
• [Link] : Remote Method Invocation
• [Link] : fournit le package JDBC

Dr. Hajer Nabli ISIMM -- 2022/2023 14


Plateforme Java – JVM (3/3)
o Java Virtual Machine (JVM)
▪ Les machines ne peuvent pas comprendre un Bytecode. Il s'agit d'un type de code non exécutable
qui devient compréhensible par la machine après qu'un interpréteur Java l'a traduit en code
machine au fur et à mesure que le programme est exécuté

C’est le rôle de la JVM

▪ Ainsi, tout système disposant déjà d'une JVM peut facilement exécuter un tel code quel que soit
le système d'exploitation

Dr. Hajer Nabli ISIMM -- 2022/2023 15


Étapes de développement d’une
application en Java (1/14)
o Il existe deux manières pour écrire un programme en Java

▪ En écrivant le code dans un simple éditeur de texte


• Compilation et exécution du code en ligne de commande (DOS)

▪ En utilisant un environnement de développement (IDE)


• Eclipse ([Link]
• Netbeans ([Link]
• Borland JBuilder ([Link]
• IBM WebSphere Studio ([Link]
• Sun ONE Studio ([Link]
• Microsoft .Net Studio ([Link]

Dr. Hajer Nabli ISIMM -- 2022/2023 16


Étapes de développement d’une
application en Java (2/14)
o Écriture du code en utilisant un éditeur de texte

▪ Téléchargez la dernière version du JDK (Java Development Kit)


▪ Le JDK est l’ensemble des outils nécessaire pour développer et exécuter une application Java.
▪ Outils fournis par le JDK :
• Le compilateur javac: Compile les fichiers sources .java en fichiers Bytecode .class
• L’interpréteur java: Prend en paramètre le nom de la classe, cherche le ou les fichiers .class
qui lui correspondent et appelle la méthode main de la classe
• Le documenteur javadoc: Générateur de documentation d’API
• L’utilitaire Jar: Permet de grouper et compresser des fichiers utilisés par un programme Java
• L’interpréteur d’applet appletviewer: Un programme permettant de tester les applets Java,
prévues pour être intégrées dans des pages HTML
• Le générateur d’interface avec C, javah : Un programme permettant de lier des programmes
Java avec des méthodes natives, écrites dans un autre langage et dépendants des systèmes
• Etc.

Dr. Hajer Nabli ISIMM -- 2022/2023 17


Étapes de développement d’une
application en Java (3/14)
o Écriture du code en utilisant un éditeur de texte

Dr. Hajer Nabli ISIMM -- 2022/2023 18


Étapes de développement d’une
application en Java (4/14)
o Écriture du code en utilisant un éditeur de texte
1. Créer un fichier texte : [Link]

public class HelloWorld Tout code java doit être défini à l'intérieur d'une
classe
{
public static void main (String[]args) Le point d'entrée pour l'exécution est la
méthode main qui porte la signature ci-contre
{
[Link]("Hello the World"); Écrire à l’écran “Hello the World”
}
La description de la classe est effectuée à
} l'intérieur d'un bloc encadré par des accolades { }

Dr. Hajer Nabli ISIMM -- 2022/2023 19


Étapes de développement d’une
application en Java (5/14)
o Écriture du code en utilisant un éditeur de texte
2. Compiler le programme : javac [Link]

3. Le compilateur génère le Bytecode dans le fichier : [Link]

Dr. Hajer Nabli ISIMM -- 2022/2023 20


Étapes de développement d’une
application en Java (6/14)
o Écriture du code en utilisant un éditeur de texte
4. Exécuter l’application : java HelloWorld

5. Hello the World s’affiche sur l’écran

Dr. Hajer Nabli ISIMM -- 2022/2023 21


Étapes de développement d’une
application en Java (7/14)
o Écriture du code en utilisant un environnement de développement (IDE)

▪ Eclipse est un Environnement de Développement Intégré (IDE)


▪ Spécialement conçu pour le développement en Java
▪ Créé à l’origine par IBM, puis cédé à la communauté Open Source
▪ Caractéristiques principales
• Notion de « projet » (1 programme ➔ 1 projet)
• Colore le code en fonction de la signification des mots utilisés
• Compile le code en temps réel ➔ Identifie les erreurs en cours de frappe
• Peut générer des bouts de code automatiquement
• Permet de gérer le lancement des applications

Dr. Hajer Nabli ISIMM -- 2022/2023 22


Étapes de développement d’une
application en Java (8/14)
o Écriture du code en utilisant un environnement de développement (IDE)
1. Créer un projet:
a. File → New → Java Project

Dr. Hajer Nabli ISIMM -- 2022/2023 23


Étapes de développement d’une
application en Java (9/14)
o Écriture du code en utilisant un environnement de développement (IDE)
1. Créer un projet:
a. File → New → Java Project
b. Project name → Exp. « PremierProjet »

Dr. Hajer Nabli ISIMM -- 2022/2023 24


Étapes de développement d’une
application en Java (10/14)
o Écriture du code en utilisant un environnement de développement (IDE)

▪ Notre projet a été créé, alors nous pouvons commencer le développement de l’application
• Une application Java est composée de « Classes »
• Chaque classe correspond à un fichier
• Le fichier source doit prendre le nom de la classe et son extension est .java
• Java est dit « case-sensitive » ➔ Distingue majuscules et minuscules!!!

Dr. Hajer Nabli ISIMM -- 2022/2023 25


Étapes de développement d’une
application en Java (11/14)
o Écriture du code en utilisant un environnement de développement (IDE)
2. Créer une Classe:
a. File → New → Class
b. Package → Exp. « Test »
c. Name → Exp. « HelloWorld »

Dr. Hajer Nabli ISIMM -- 2022/2023 26


Étapes de développement d’une
application en Java (12/14)
o Écriture du code en utilisant un environnement de développement (IDE)
3. Insérer l’instruction « [Link](« Hello the World"); » dans le corps de la
méthode main.

Dr. Hajer Nabli ISIMM -- 2022/2023 27


Étapes de développement d’une
application en Java (13/14)
o Écriture du code en utilisant un environnement de développement (IDE)
4. Compiler et Exécuter le code source
a. Run As → Java Application

Dr. Hajer Nabli ISIMM -- 2022/2023 28


Étapes de développement d’une
application en Java (14/14)
o Écriture du code en utilisant un environnement de développement (IDE)
5. Affichage du résultat

Dr. Hajer Nabli ISIMM -- 2022/2023 29


Chapitre 2:

SYNTAXE ET ÉLÉMENTS DE BASE DE


LANGAGE JAVA

Dr. Hajer Nabli ISIMM -- 2022/2023 30


Structure d’un programme Java
Un programme java est composé de :

❑ Vocabulaire
➔ Mots clés, identificateurs, commentaires, constantes et variables

❑ Grammaire
➔ Structures et règles du langage Java

❑ Conventions
➔ En général des règles de notations adoptées par tous les programmeurs

Dr. Hajer Nabli ISIMM -- 2022/2023 31


Vocabulaire Java
Les Mots clés
abstract else interface switch
assert enum long synchronized
boolean extends native this
break false new throw o Les mots clés sont des mots réservés
byte final null throws utilisés dans le programme Java ayant
case finally package transient un rôle particulier dans la syntaxe du
catch float private true code
char for protected try
o Les mots clés ne peuvent pas être
class goto public void
utilisés comme identificateur (c-à-d.
const if return volatile nom d’une classe, d’une variable ou
continue implements short while d’une méthode)
default import static
do instanceof strictfp
double int super

Dr. Hajer Nabli ISIMM -- 2022/2023 32


Vocabulaire Java
Les Identificateurs
o Les identificateurs (identifiers) sont utilisés pour nommer des éléments du code source Java
notamment les variables, les classes, les méthodes, les paramètres, les packages, les interfaces, etc.
o Un identificateur est un nom choisi par le développeur tout en respectant les conventions suivantes :
▪ Interdiction d’utiliser les mots-clés
▪ Ne peuvent pas contenir d’espaces ou des caractères internationaux (avec accents)
▪ Commencent par une lettre, « _ » ou « $ »
▪ Ne commencent pas par un chiffre ou un signe de ponctuation autre que « $ » ou « _ »
▪ La première lettre est majuscule pour les classes et les interfaces
▪ La première lettre est minuscule pour les méthodes, les attributs et les paramètres
• Si plusieurs mots sont accolés, mettre une majuscule à chacun des mots sauf le premier (Exp.
uneVariableEntiere)
▪ Les constantes sont entièrement en majuscules (Exp. LONGUEUR_MAX)

Dr. Hajer Nabli ISIMM -- 2022/2023 33


Vocabulaire Java
Les Commentaires (1/4)
o Un commentaire permet d'insérer du texte au code source
o Il ne sera ni compilé ni interprété → Il ne se termine pas par un ;
o Un commentaire est utile pour :
▪ expliquer le choix technique effectué : pourquoi cet algorithme et pas un autre, pourquoi appeler
cette méthode, etc.
▪ expliquer ce qui doit être fait ensuite : amélioration, problème à corriger, etc.
▪ donner les explications nécessaires à la compréhension du code source pour l'utiliser soi-même
plus tard, ou pour d'autres développeurs

o Il existe trois types de commentaire en Java :


▪ Commentaire abrégé
▪ Commentaire multiligne
▪ Commentaire de documentation automatique

Dr. Hajer Nabli ISIMM -- 2022/2023 34


Vocabulaire Java
Les Commentaires (2/4)
1. Commentaire abrégé

o Permet d’insérer un commentaire sur une seule ligne


o Utilisé pour des commentaires courts
o Début avec les symboles « // »

// Un commentaire pour donner l'exemple

int N=1; // déclaration du compteur

Dr. Hajer Nabli ISIMM -- 2022/2023 35


Vocabulaire Java
Les Commentaires (3/4)
2. Commentaire multiligne

o Permet d’insérer un commentaire sur plusieurs lignes


o Commence par le caractère « /* » et se termine par « */ »
o Tout ce qui est situé entre « /* » et « */ » fait partie du commentaire
o Peut être utilisé pour que le compilateur ignore une partie du code : code temporaire de
débogage, code en cours de développement, etc.

/* Ceci est un commentaire


sur plusieurs lignes */

/* Ce programme affiche la chaîne


de caractères « Bonjour » sur l'écran
*/

Dr. Hajer Nabli ISIMM -- 2022/2023 36


Vocabulaire Java
Les Commentaires (4/4)
3. Commentaire de documentation automatique

o Appelé aussi commentaire javadoc, utilisé pour la documentation des classes que l’on définit
o Ces commentaires sont encadrés entre « /** » et « */ »
o Java exige que ce type de commentaire figure juste avant une déclaration (d’une classe, d’un
attribut, d’une méthode ou d'un constructeur)
o Ces commentaires sont récupérés par l’outil javadoc et ils sont inclus dans la documentation
ainsi générée sous forme HTML
/**
* commentaire de la méthode
* @param val la valeur à traiter
* @since 1.0
* @return la valeur de retour
* @deprecated Utiliser la nouvelle méthode XXX
*/

Dr. Hajer Nabli ISIMM -- 2022/2023 37


Vocabulaire Java
Les Constantes et les Variables
o Une Constante est une donnée qui ne peut pas être modifiée durant toute l'exécution du programme
o Elle est définie avec le mot clé final (Exp. public final double PI = 3.14 ;)

o Une Variable est une donnée dont la valeur peut changer au cours de l'exécution d'un programme
o Elle est repérée par son nom, sa valeur et son type

Exp. public int maVariable = 5 ; int

- Le nom de la variable est « maVariable » 5


- Sa valeur est 5
- Et le type de la valeur stockée est int maVariable

Dr. Hajer Nabli ISIMM -- 2022/2023 38


Grammaire Java
Types de données élémentaires
o Java est un langage fortement typé
▪ Toute donnée (variable ou constante) appartient à un type bien précis
▪ Cela permet de déterminer à la fois le format des données et la quantité de mémoire (en octets)
qu'elles occupent
▪ La taille nécessaire au stockage de ces types est indépendante de la machine
• L’octet est utilisé pour décrire les tailles
• Un octet ou byte en anglais = 8 bits
• Un bit ne peut prendre que deux valeurs 0 ou 1
• n bits ne peuvent définir que 2n valeurs
• Un octet peut donc contenir 28 (soit 256) valeurs distinctes
Types
o On distingue deux grandes familles de types de données en Java :
primitifs
▪ Les types primitifs (ou de base) Types Java
▪ Les types références Types
références

Dr. Hajer Nabli ISIMM -- 2022/2023 39


Grammaire Java
Types de données élémentaires
1. Les types primitifs
o Une donné de type primitif est une donnée élémentaire de base telles que les nombres entiers, les
nombres réels, les caractères et les booléens

o Java définit 8 types primitifs :


▪ 4 types pour les nombres entiers
▪ 2 types pour les nombres flottants (c'est-à-dire à virgule)
▪ 1 type booléen (vrai ou faux) Types
▪ 1 type caractère primitifs

Types Types Type Type


Entiers Flottants Booléen Caractère

byte short int long float double boolean char

Dr. Hajer Nabli ISIMM -- 2022/2023 40


Grammaire Java
Types de données élémentaires
1. Les types primitifs
a. Les types numériques entiers

Types Taille en Nombre de


Signification
entiers octet valeurs
byte 1 octet 28 valeurs Entier très court allant de (-27) à (27–1)
short 2 octets 216 valeurs Entier court allant de (-215) à (215 –1)
int 4 octets 232 valeurs Entier allant de (-231) à (231 –1)
long 8 octets 264 valeurs Entier long allant de (-263) à (263 -1)

Dr. Hajer Nabli ISIMM -- 2022/2023 41


Grammaire Java
Types de données élémentaires
1. Les types primitifs
b. Les types numériques flottants ou réels

Types Taille en Nombre de


Signification
flottants octet valeurs
float 4 octet 232 valeurs Nombre réel allant de -1.4E-45 à +3.4E38
Nombre réel double précision allant de
double 8 octets 264 valeurs
4.9E-324 à +1.7E308

Dr. Hajer Nabli ISIMM -- 2022/2023 42


Grammaire Java
Types de données élémentaires
1. Les types primitifs
c. Le type primitif booléen

Type Nombre de
Taille en bit Signification
booléen valeurs
boolean 1 bit 2 valeurs variable booléenne true ou false

Dr. Hajer Nabli ISIMM -- 2022/2023 43


Grammaire Java
Types de données élémentaires
1. Les types primitifs
d. Le type primitif caractère

Types Taille en Nombre de


Signification
entiers octet valeurs
65536
char 2 octets Caractère Unicode de 0 à 65535
caractères

o Le langage Java utilise le codage de caractères universel


Exp.
Unicode qui est une extension du codage ASCII
char c = ‘a’ ; // Utilisation des simples quotes ‘
o Le codage ASCII utilise 8 bits et permet de représenter 128
char a = 97 ; // La valeur Unicode de caractère ‘a’ est 97
caractères seulement
char a = '4’ ; // La valeur Unicode de '4' est 52
o Le codage Unicode utilise 16 bits pour représenter 65536
char c1 = '\n’ ; // Un retour à la ligne
caractères possibles

Dr. Hajer Nabli ISIMM -- 2022/2023 44


Grammaire Java
Types de données élémentaires
1. Les types primitifs
e. Déclaration et Initialisation des variables

Type identificateur [= constante ou expression] ;

int nbre ; // Une déclaration de la variable nbre de type int


int nbre = 2 ; // Initialisation de la variable nbre lors de la déclaration
int nbre ;
nbre = 2 ; // Initialisation plus tard, en utilisant une affectation
long x = 12L ; // entier au format long en base décimal
double y =23.1 ; // Initialisation d’un double
float d = 3.15F ; // Nombre accolé à un F
boolean b = true ; // Variable booléenne b initialisée à true
char a = ‘2’ ; // La valeur Unicode de ‘2' est 50

Dr. Hajer Nabli ISIMM -- 2022/2023 45


Grammaire Java
Types de données élémentaires
1. Les types primitifs
f. Fonctionnement

o Pour pouvoir être utilisée, une variable en Java doit être :


Déclarée (définir son nom et son type)
Initialisée (lui donner une valeur initiale). Peut être fait en même temps que la déclaration
Affectée (modifier sa valeur au cours de son cycle de vie)

int a = 5 ; int b = 8 ; a=b;


a b a b

5 8 8 8

Dr. Hajer Nabli ISIMM -- 2022/2023 46


Grammaire Java
Types de données élémentaires
1. Les types primitifs
g. Les opérateurs

o le signe = est l'opérateur de base d’une affectation


o Il s'utilise avec une expression de la forme variable = expression.
▪ Exp. int a = 5;

o Il existe trois types d’opérateurs:


▪ Opérateurs arithmétiques
▪ Opérateurs relationnels
▪ Opérateurs logiques

Dr. Hajer Nabli ISIMM -- 2022/2023 47


Grammaire Java
Types de données élémentaires
1. Les types primitifs
g. Les opérateurs
i. Opérateurs arithmétiques
Opérateur Exemple Équivalent à
= expr1=10 expr1 = 10
+= expr1 += expr2 expr1 = expr1 + expr2
-= expr1 -= expr2 expr1 = expr1 – expr2
*= expr1 *= expr2 expr1 = expr1 * expr2
/= expr1 /= expr2 expr1 = expr1 / expr2
%= expr1 %= expr2 expr1 = expr1 % expr2 (Reste de la division)
++ expr1++ expr1 = expr1 + 1 (Incrémentation)
-- expr1-- expr1 = expr1 – 1 (Décrémentation)

Dr. Hajer Nabli ISIMM -- 2022/2023 48


Grammaire Java
Types de données élémentaires
1. Les types primitifs
g. Les opérateurs
i. Opérateurs arithmétiques
o Exp.
Public static void main (String[] args) Résultat:
{
int a = 1 ; a=2
int b = 2 ; b=3
int c = ++b ; c=4
int d = a++ ; d=1
c++ ;
[Link]("a = " + a) ;
[Link]("b = " + b) ;
[Link]("c = " + c) ; i++ → Affecter → Incrémenter
[Link]("d = " + d) ; ++i → Incrémenter → Affecter
}

Dr. Hajer Nabli ISIMM -- 2022/2023 49


Grammaire Java
Types de données élémentaires
1. Les types primitifs
g. Les opérateurs
ii. Opérateurs relationnels
Opérateur Exemple Renvoie TRUE si
> v1 > v2 v1 est strictement supérieur à v2
>= v1 >= v2 v1 est supérieur ou égal à v2
< v1 < v2 v1 strictement inférieur à v2
<= v1 <= v2 v1 inférieur ou égal à v2
== v1 == v2 v1 égal à v2
!= v1 != v2 v1 différent de v2

Tout type Java (primitifs et références) peut être comparé avec == et !=


Chaque opérateur renvoie un type booléen

Dr. Hajer Nabli ISIMM -- 2022/2023 50


Grammaire Java
Types de données élémentaires
1. Les types primitifs
g. Les opérateurs
iii. Opérateurs logiques
Opérateur Exemple Renvoie TRUE si
&& expr1 && expr2 expr1 et expr2 sont vraies (ET logique)
& expr1 & expr2 ET binaire
|| expr1 || expr2 Expr1 ou expr2, ou les deux sont vraies (OU logique)
| expr1 | expr2 OU binaire
^ expr1 ^ expr2 OU exclusif binaire
! ! expr1 expr1 est fausse (NON unitaire logique)
!= expr1 != expr2 si expr1 est différent de expr2

Les opérateurs logiques agissent uniquement sur des opérandes booléen

Dr. Hajer Nabli ISIMM -- 2022/2023 51


Grammaire Java
Types de données élémentaires
2. Les types références

o En Java, les variables de type primitif (entier, réel, booléen ou caractère) sont manipulées par valeur.
Les variables de type non primitif sont manipulées par référence.

→ Le contenu d’une variable de type non primitif est appelée une référence (ou une adresse)

o Un nouvel objet est crée par l’opérateur new qui retourne la référence à cette objet

Dr. Hajer Nabli ISIMM -- 2022/2023 52


Grammaire Java
Types de données élémentaires
2. Les types références
o Tableau
float [] T = new float [10] ;

o Chaine de caractères
String jour = new String(“Mercredi“) ;
String jour = “Mercredi“ ;

o Classes
class Personne
{
String nom ;
int age ;
}

Dr. Hajer Nabli ISIMM -- 2022/2023 53


Grammaire Java
Types de données élémentaires
2. Les types références
a. Fonctionnement
L’opérateur new crée un objet de type Tableau d’entiers, et
int[] T = new int[3] ; retourne l’adresse où est stocké le premier élément du tableau
dans la mémoire
T

[I@34c45dca

Tableau Adresse, suivi de


l'adresse en hexadécimal
D’entiers

Dr. Hajer Nabli ISIMM -- 2022/2023 54


Grammaire Java
Types de données élémentaires
2. Les types références
a. Fonctionnement

Personne p = new Personne() ; L’opérateur new crée un nouvel objet de la classe


Personne, et retourne la référence à cet objet

p null 0

- Le contenu de la variable p est une référence


- L'opérateur new initialise les champs de la
structure à leur valeur par défaut : null pour une
chaîne de caractères, et 0 pour un entier
- null est une référence spéciale: c'est la valeur par
défaut de toute variable de type non primitif

Dr. Hajer Nabli ISIMM -- 2022/2023 55


Grammaire Java
Types de données élémentaires
2. Les types références
b. Les tableaux

o Un Tableau permet de stocker plusieurs valeurs de même type dans une variable
▪ Les valeurs contenues dans la variable sont repérées par un indice
▪ Les indices des tableaux commencent par 0
▪ Les tableaux sont identifiés par des crochets [ ]
▪ Un tableau doit être déclaré, initialisé, et rempli
int[] nombres; // Déclaration
nombres = new int[10]; // Création
int[] nombres = new int[10]; // Déclaration et création
nombres[0] = 28; // Le 1er élément est 28
▪ Chaque élément du tableau est initialisé à une valeur par défaut
▪ En langage java, les tableaux sont des objets
▪ Le nombre d'éléments du tableau est fournie par : [Link]

Dr. Hajer Nabli ISIMM -- 2022/2023 56


Grammaire Java
Types de données élémentaires
2. Les types références
b. Les tableaux

o On peut construire des tableaux à plusieurs dimensions (multidimensionnel)


▪ Des tableaux multidimensionnels sont en fait des tableaux de tableaux
int [][] matrice = new int[3][2]; // matrice est un tableau d'entiers de 3 lignes et 2 colonnes
matrice[0][0] = 25; // Le premier élément de la matrice est un entier de valeur 25

Dr. Hajer Nabli ISIMM -- 2022/2023 57


Grammaire Java
Types de données élémentaires
2. Les types références
b. Les tableaux

o Exp.
Public static void main (String[] args) Résultat:
{
int[][] M = new int[3][3]; // Déclation d’un tableau d’entiers à 2 dimension 1 1 1
[Link](“Les elements du tableau sont:”); 2 2 2
for (int i = 0; i <3; i++) { 3 3 3
for (int j = 0; j < 3; j++) {
M[i][j] = i+1; // Attribuer des valeurs à chaque élément du tableau
[Link](M[i][j] + “ “); // Afficher chaque élément
}
}
}

Dr. Hajer Nabli ISIMM -- 2022/2023 58


Grammaire Java
Types de données élémentaires
2. Les types références
c. Les classes en Java

o Une classe est un bloc de base d'un programme Java. Elle définit un type non primitif et peut contenir :
▪ des variables ou des attributs
▪ des méthodes
▪ d'autres classes

o Un objet est une instance d’une classe

o Un constructeur d'une classe est une méthode, de même nom que la classe, et sans type de retour

Dr. Hajer Nabli ISIMM -- 2022/2023 59


Grammaire Java
Types de données élémentaires
2. Les types références
c. Les classes en Java
o Les constructeurs servent à créer des objets. Ils sont appelés par l’opérateur new

class Personne
{
String nom ;
int age ; Personne p = new Personne (“Rahma”,21) ;
Personne (String s, int a)
{
nom = s ;
age = a ;
Déclaration d’une Création d’un
}
} variable référence objet Personne

Liaison de l’objet à
la référence

Dr. Hajer Nabli ISIMM -- 2022/2023 60


Grammaire Java
Types de données élémentaires
2. Les types références
c. Les classes en Java
o On peut avoir un ou plusieurs constructeurs dans une classe, qui se diffèrent par le nombre ou le type
de leurs arguments
class Personne
{
String nom ;
int age ;
Personne (String s, int a)
{
nom = s ; Personne p = new Personne (“Rahma”,21) ;
age = a ; Personne q = new Personne (“Ali”) ;
}
Personne (String s)
{
nom = s ;
}
}

Dr. Hajer Nabli ISIMM -- 2022/2023 61


Grammaire Java
Types de données élémentaires
2. Les types références
c. Les classes en Java
o Si aucun constructeur n'a été défini, Java utilise un constructeur par défaut, sans argument

class Personne
{
String nom ;
int age ;
Le constructeur par défaut n'est plus défini
public static void main(String[] args)
{ si un autre constructeur a été défini !!!
Personne p = new Personne() ;
}
}

Dr. Hajer Nabli ISIMM -- 2022/2023 62


Grammaire Java
Types de données élémentaires
2. Les types références
d. Exemple Déclaration de 2 références et création de 2 objets
Objet 1 Objet 2

d1 d2
d3 prends comme valeur celle de d2 (l’adresse de l’Objet 2)
Date d1 = new Date ( ) ; Objet 1 Objet 2
Date d2 = new Date ( ) ;
Date d3 = d2 ; d1 d2 d3
d2=d1 ;
d2 prends comme valeur celle de d1 (l’adresse de l’Objet 1)
Objet 1 Objet 2

d1 d2 d3

Dr. Hajer Nabli ISIMM -- 2022/2023 63


Grammaire Java
Accessibilité des membres
o Tous les membres (attributs ou méthodes) ont une accessibilité qui est spécifiée à la déclaration par un
modificateur de visibilité
o Java définit quatre niveaux de visibilité pour les attributs et les méthodes (private, par défaut,
protected et public)
o Si un membre d’une classe A:
▪ est private: accessible uniquement depuis sa propre classe (la classe A)
▪ est par défaut: accessible depuis toutes les classes qui sont dans le même package que A
▪ est protected: accessible depuis toutes les classes qui sont dans le même package que A, et
également depuis celles qui ne sont pas dans le même package mais qui héritent de la classe A
▪ est public: accessible depuis n'importe où

Dr. Hajer Nabli ISIMM -- 2022/2023 64


Grammaire Java
Les structures de contrôle
o Il existe 4 grands types de structures de contrôle en Java :

▪ Les conditionnelles : if()-else / switch()-case


▪ Les boucles : for( ; ; ) / while() / do-while()
▪ Les branchements : break / continue
▪ Le traitement d’exceptions : try-catch finally / throw

Dr. Hajer Nabli ISIMM -- 2022/2023 65


Grammaire Java
Les structures de contrôle
1. Les instructions conditionnelles
a. Instruction if()
if (condition) //La condition est obligatoirement de type booléen
{
//instructions à réaliser si la condition est vraie
}

b. Instruction if()-else
if (condition)
{
//instructions à réaliser si la condition est vraie
}
else
{
//instructions à réaliser si la condition est fausse
//Peut contenir elle-même d’autres sous-conditions
}

Dr. Hajer Nabli ISIMM -- 2022/2023 66


Grammaire Java
Les structures de contrôle
1. Les instructions conditionnelles
c. Instruction switch()-case
switch(variable)
{
case valeur1 : instructions; // A réaliser si la variable vaut valeur1
case valeur2 : instructions; break; // Si la variable vaut valeur2
default : instructions; // Dans tous les autres cas
}

o La variable peut être de tout type primitif


o La valeuri doit être du même type que la variable

Dr. Hajer Nabli ISIMM -- 2022/2023 67


Grammaire Java
Les structures de contrôle
2. Les boucles
a. La boucle for(;;)
for (initialisation; condition; itération)
{
// instructions
}

o initialisation: à exécuter lorsque le programme rentre pour la première fois dans la boucle ➔ Sert à
définir le compteur de la boucle
o condition: à remplir pour recommencer le bloc d’instructions
o itération: instruction exécutée chaque fois que la boucle est terminée

Dr. Hajer Nabli ISIMM -- 2022/2023 68


Grammaire Java
Les structures de contrôle
2. Les boucles
a. La boucle for(;;)

o Exp.
Public static void main (String[] args) Résultat:
{
int s = 0;
La somme est: 45
for (int i=0 ; i<10 ; i++)
{
s = s + i;
}
[Link](“La somme est : " + s);
}

Dr. Hajer Nabli ISIMM -- 2022/2023 69


Grammaire Java
Les structures de contrôle
2. Les boucles
b. La boucle while()
[intialisation;]
while (condition)
{
// Instructions à réaliser tant que la condition est vraie
itération; // A la fin de chaque itération, on réévalue la condition
// et on décide soit de rester dans la boucle avec une nouvelle itération, soit de sortir
}

Dr. Hajer Nabli ISIMM -- 2022/2023 70


Grammaire Java
Les structures de contrôle
2. Les boucles
b. La boucle while()

o Exp.

Public static void main (String[] args) Résultat:


{
int s = 0; La somme est: 45
int i=0;
while (i<10)
{
s = s + i;
i++;
}
[Link](“La somme est : " + s);
}

Dr. Hajer Nabli ISIMM -- 2022/2023 71


Grammaire Java
Les structures de contrôle
2. Les boucles
c. La boucle do-while()
[intialisation;]
do
{
// Instructions à réaliser tant que la condition est vraie
itération;
} while (condition);

Dr. Hajer Nabli ISIMM -- 2022/2023 72


Grammaire Java
Les structures de contrôle
2. Les boucles
c. La boucle do-while()

o Exp.

Public static void main (String[] args) Résultat:


{
int s = 0; La somme est: 45
int i=0;
do
{
s = s + i;
i++;
} while (i<10);
[Link](“La somme est : " + s);
}

Dr. Hajer Nabli ISIMM -- 2022/2023 73


Grammaire Java
Les structures de contrôle
3. Les branchements
a. break / continue

o Ils servent à interrompre une boucle une fois lancée


o L’instruction break; achève immédiatement la boucle ou la conditionnelle
o L’instruction continue; ignore le reste des instructions et passe tout de suite à l’itération suivante (au
début de la boucle)
o Exp.
Public static void main (String[] args) Résultat:
{
for (int i=0; i<10 ;i++)
The value of i is : 0
{
if (i==5) continue; // Si i=5, on passe à 6 sans afficher The value of i is : 1
if (i==7) break; // Si i=7, on sort de la boucle The value of i is : 2
[Link]("The value of i is : " + i); The value of i is : 3
} The value of i is : 4
} The value of i is : 6

Dr. Hajer Nabli ISIMM -- 2022/2023 74


Grammaire Java
Les structures de contrôle
4. Le traitement d’exceptions
a. Les blocs try-catch
o Les blocs try-catch servent à Intercepter les erreurs ou les exceptions qui pourront se produire lors de
l’exécution
o Certains traitements sont parfois « à risque », càd que le programmeur ne peut savoir avec certitude à
l’avance si l’instruction qu’il écrit fonctionnera correctement ou non au moment de l’exécution car cela
dépendra de paramètres dont il n’a pas le contrôle
try
{

// Une ou plusieurs instructions potentiellement « à risque »

} catch(ExceptionXYZ unProblemeDeTypeXYZ){

// Ce qu’il faut faire si un problème de type XYZ se produit

Dr. Hajer Nabli ISIMM -- 2022/2023 75


Conventions Java
Conventions de programmation en Java
o Les packages: Java permet de regrouper les classes en des ensembles appelés Package
▪ L'instruction permettant de nommer un package doit figurer au début du fichier source
(Exp. package nomTest;)
▪ L’instruction import permet d’importer les classes du package nomTest (Exp. import
nomTest;)
o Les classes, les interfaces et les constructeurs:
▪ La première lettre est en majuscule
▪ Si le nom est composé de plusieurs mots, la première lettre de chaque mot doit être en
majuscule (Exp. MaClasse)
o Les méthodes:
▪ Leur nom devrait contenir un verbe
▪ La première lettre est obligatoirement une minuscule
▪ Si le nom est composé de plusieurs mots, la première lettre du premier mot doit être en
minuscule et celle des autres mots en majuscule (Exp. public float calculerMontant())

Dr. Hajer Nabli ISIMM -- 2022/2023 76


Conventions Java
Conventions de programmation en Java
o Les variables:
▪ La première lettre est obligatoirement une minuscule et ne devrait pas être un
caractère dollar '$' ou underscore '_’
▪ Si le nom est composé de plusieurs mots, la première lettre du premier mot doit être en
minuscule et celle des autres mots en majuscule (Exp. String nomPersonne;)
o Les constantes:
▪ Toujours en majuscules
▪ Chaque mots est séparés par un underscore '_’
▪ Ces variables doivent obligatoirement être initialisées lors de leur déclaration (Exp.
static final int VAL_MIN = 0;)

Dr. Hajer Nabli ISIMM -- 2022/2023 77


Exercice
o Ecrire un programme permettant d’encoder les notes d’étudiants à un examen et
fournissant quelques statistiques de base sur ces notes
o Créer une classe Etudiant
o Créer une méthode qui permet de saisir le nombre d’étudiants (soit N) ) par l’utilisateur
o Créer une méthode qui permet d’introduire une à une les notes des N étudiants (/20) et les
mémorise dans un tableau
o Créer une méthode qui permet d’afficher les notes saisies
o Créer une méthode qui permet d’afficher quelques statistiques de base:
▪ le nombre de réussites et d’échecs
▪ la moyenne totale
▪ la note moyenne des échecs
▪ la note moyenne des succès

Dr. Hajer Nabli ISIMM -- 2022/2023 78


Correction
import [Link]; public void statistiques(float[] T, int n) {
public class Etudiant { int r=0; //nbre des reussites
public int saisirNbrEtudiant() { int e=0; //nbre des echecs
Scanner in = new Scanner([Link]); float s=0; //somme des notes
[Link]("Donner le nbre des etudiants"); float sr=0; //somme des notes réussies
int n = [Link](); float se=0; //somme des notes échouées
return n; for(int i=0; i<n; i++) {
} if(T[i]>=10) {
public float[] introduireNote(int n) { r++;
Scanner in = new Scanner([Link]); sr+=T[i];
float[] T = new float[n]; }else {
[Link]("Entrez les elements du tableau : "); e++;
for(int i=0; i<n;i++) { se+=T[i]; }
do { s+=T[i]; }
T[i] = [Link](); [Link]("Le nombre de reussites est "+r+ " et des echecs est " + e);
}while(T[i]>20 || T[i]<0); [Link]("La moyenne totale est "+ s/n);
} [Link]("La note moyenne des succes est "+ sr/r);
[Link](); [Link]("La note moyenne des echecs est "+ se/e); }
return T;} public static void main(String[] args) {
public void afficherNotes(float[] T, int n) { Etudiant etudiant = new Etudiant();
for(int i=0; i<n; i++) { int n= [Link]();
[Link]("La note de l'eleve N°"+(i+1)+" est "+T[i]); float[] T = [Link](n);
} [Link](T, n);
} [Link](T, n); } }

Dr. Hajer Nabli ISIMM -- 2022/2023 79


Chapitre 3:

LE CONCEPT OBJET EN JAVA

Dr. Hajer Nabli ISIMM -- 2022/2023 80


L’abstraction (1/3)
o L’abstraction dans l’approche objet permet la représentation des entités du monde réel
sous forme d’entités informatique 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

Dr. Hajer Nabli ISIMM -- 2022/2023 81


L’abstraction (2/3)
o L’abstraction est une représentation des éléments du monde réel « objets réels » dans
l'espace problème (la machine) en tant qu'« objets informatiques»
▪ Décrire le problème avec les termes mêmes du problème plutôt qu'avec les termes de
la machine
• Un programme traitant des images doit manipuler des structures de données représentant
des images, et non leur traduction sous forme de suite de 0 et de 1
• Un programme de gestion de personnel doit représenter des personnes avec toutes les
informations pertinentes, qu’il s’agisse de texte, de date, de nombres ou autre

o L'idée est d’adapter le programme à l'esprit du problème réel en ajoutant de nouveaux


types « objets »
▪ Quand on lit le code décrivant la solution, on lit aussi quelque chose qui décrit le
problème

Dr. Hajer Nabli ISIMM -- 2022/2023 82


L’abstraction (3/3)
o La complexité des problèmes et la capacité à les résoudre sont directement
proportionnelles au type et à la qualité de nos capacités d'abstraction
▪ Un Objet possède
• plusieurs niveaux d’abstraction
✓ de point de vue concepteur un micro-ordinateur est un objet formé d’un ensemble
d’éléments physiques appelés matériels (hardware)
✓ de point de vue informaticien un micro-ordinateur est un objet résultant d’un
assemblage hardware et d’un ensemble de programme appelé logiciels (software)
✓ de point de vue utilisateur, un micro-ordinateur est une boite noire qui offre un certain
nombre de fonctions ou de services qui permettent d’interagir avec elle

Dr. Hajer Nabli ISIMM -- 2022/2023 83


Approche Objet (1/6)
o 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 ou méthodes « comportement »,
pour répondre aux « requêtes » des utilisateurs
o L’ensemble des services (méthodes) proposées par un objet est appelé l’interface de cet
objet
o 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 de son interface

Dr. Hajer Nabli ISIMM -- 2022/2023 84


Approche Objet (2/6)
o Exp. 1
▪ Un poste de Télévision moderne est une boite
ayant pour interface : un écran, des haut-parleurs
et une télécommande
• Pour changer de chaîne il suffit de demander
à cette boite noire de le faire pour nous, en
appuyant simplement sur le bouton
correspondant. Peu importe ce qui se passe
réellement dans le poste

Principe d’Objet

Dr. Hajer Nabli ISIMM -- 2022/2023 85


Approche Objet (3/6)
o Exp. 2: Objet Rectangle R1
▪ R1 est un objet Rectangle de hauteur 10 de
largeur 20, ayant une interface qui permet de:
• calculer le périmètre du rectangle,
• sa surface,
• son diagonale,
• et un dernier service pour dessiner le
rectangle
▪ Pour utiliser l’un de ces services il suffit
d’invoquer la méthode correspondante
Objet R1 Identité

Dr. Hajer Nabli ISIMM -- 2022/2023 86


Approche Objet (4/6)
o Un objet représente informatiquement une entité précise du monde à modéliser, exemple :
ma_voiture

o Il existe généralement de nombreux objets représentant le mê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ésentant que voulu basé sur ce concept

Dr. Hajer Nabli ISIMM -- 2022/2023 87


Approche Objet (5/6)
o Une classe est un moule pour fabriquer des objets de même structure et de même
comportement
▪ En programmation, une classe apparaît donc comme un nouveau type construit par
l’utilisateur
• Le nom d’une classe peut être utilisé en Java comme le type d’un attribut ou d’une
variable ou aussi comme le type de retour d’une fonction (méthode)
o Le processus de création d’un objet à partir d’une classe est appelé instanciation d’un objet
ou création d’instance d’une classe
▪ Exp. String s1 = "Hello " ;
→ String est le nom de la classe, la variable s1 est un objet instancié ou instance
de la classe String

Dr. Hajer Nabli ISIMM -- 2022/2023 88


Approche Objet (6/6)
o Un objet
▪ est un élément d’une classe
▪ a une durée de vie et une identité
o 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

Dr. Hajer Nabli ISIMM -- 2022/2023 89


Attribut de classe, attribut d’instance
o Les données membres d’une classe sont appelées attributs
o Java distingue deux types d’attributs :
▪ Attribut d’instance dont la valeur peut varier d’une instance à une autre
• Exp. La valeur de l’attribut « Couleur » de la classe « Voiture » vari d’une instance à
une autre

▪ Attribut de classe dont la valeur est commune pour toutes les instances
• Exp. La valeur « pi » dans la classe « Cercle » est la même 3.14 pour chaque
instance de la classe

Dr. Hajer Nabli ISIMM -- 2022/2023 90


Encapsulation (1/2)
o L’encapsulation d’un objet par son interface permet de masquer son contenu :
▪ montrer uniquement ce qui est nécessaire pour son utilisation :
• Les données sont généralement considérées comme données privées. Elle ne sont
pas donc accessibles directement.
• Les méthodes constituent l’interface d’interaction avec un objet d’une classe. Elle
sont donc accessibles (publiques).
• Un objet n'est accessible qu’à travers l’interface de sa classe
o Java propose plusieurs niveaux de visibilité (modificateur d’accès) utilisable sur les données
d'une classe pour assurer le principe de l’encapsulation.

Dr. Hajer Nabli ISIMM -- 2022/2023 91


Encapsulation (2/2)
o Pour respecter ce principe d'encapsulation on ne doit interagir avec un objet que par
l’invocation d’une de ces méthodes de son interface

o On dit à l’objet ce qu’il doit faire, sans se préoccuper de comment il doit le faire

Dr. Hajer Nabli ISIMM -- 2022/2023 92


Héritage (1/2)
o L'héritage est l’un des grands intérêts des langages orienté objet
▪ pouvoir définir des dépendances entres classes en factorisant les propriétés communes
à plusieurs classes :
• ordonner hiérarchiquement les classes d’une application,
• réaliser des programmes parfaitement modulaires,
• disposer de modules ré-utilisatsables
• Exp.
✓ Une classe Cheval étant définie
✓ On peut définir une classe Zèbre est un cheval en précisant seulement qu’un
zèbre est un cheval qui possède des rayures
✓ Une instance de zèbre contient les informations d’une instance de cheval
auxquelles on ajoute les informations propres d’un zèbre

Dr. Hajer Nabli ISIMM -- 2022/2023 93


Héritage (2/2)

o Les deux classes Personne et Forme sont appelées classe de base


o Les classes Ouvrier, Etudiant et Chercheur héritent toutes les trois de la classe Personne
o Les classes Cercle, Rectangle et Triangle sont appelées des classes dérivées de la classe
Forme

Dr. Hajer Nabli ISIMM -- 2022/2023 94


Polymorphisme
o Le polymorphisme est la possibilité pour deux classes séparées, mais dépendantes l’une de
l’autre, de recevoir le même message mais d’agir dessus de différentes façons
▪ En d’autres termes, c’est la faculté d’une méthode hérité à pouvoir s’appliquer à des
classes dérivées.

Dr. Hajer Nabli ISIMM -- 2022/2023 95


Pourquoi utiliser l’approche Objet? (1/2)
o La motivation essentielle de cette approche est d'augmenter les possibilités de réutilisation:
▪ L'encapsulation des données et du code dans une même entité permet de garantir la
cohérence des objets.
• Cette cohérence est indispensable pour envisager de réutiliser un objet dans un
autre contexte.

o La notion d'encapsulation par une interface permet de normaliser le fonctionnement des


objets :
▪ Il est possible de changer le fonctionnement interne d'un objet particulier, sans
modifier la manière de l'utiliser (c'est à dire le reste du programme)

Dr. Hajer Nabli ISIMM -- 2022/2023 96


Pourquoi utiliser l’approche Objet? (2/2)
o 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 de nouveaux

o La notion de polymorphisme, permet de manipuler de manière identique et la plus naturelle


possible des objets ayant des comportements totalement différents :
▪ des comportements qui ne sont pas obligatoirement connus au moment où l'on définit
ces manipulations :
• Vouloir afficher un rectangle, un cercle ou un triangle, on est dans toujours dans le
même espace de problème, qui est afficher une forme géométrique. C’est la
manière d’afficher chaque forme qui est différentes.

Dr. Hajer Nabli ISIMM -- 2022/2023 97


Apports de l’approche Objet
o L'amélioration de la qualité et de la productivités des logiciels
o La modularité qui permet de :
▪ décomposer un problème en modules élémentaires faciles à écrire, à maintenir et à
étendre,
▪ créer des modules complexes par composition de modules simples
o L'extensibilité :
▪ les logiciels objets : ensemble de modules incrémentalement extensibles
o L'uniformité des différents niveaux de représentation des données

Dr. Hajer Nabli ISIMM -- 2022/2023 98


Approches Procédurale vs approche
Objet
o Approche procédurale :
▪ Opérations et données sont
séparées
▪ Les actions sont décomposées de
manière hiérarchique
obj2

o Approche Objet : obj1


▪ Pas de séparation des données et
des actions
▪ chaque objet peut invoquer une
méthode d’un autre objet qui
coopère en répondant à cette
demande.
obj3
Dr. Hajer Nabli ISIMM -- 2022/2023 99
Chapitre 4:

CLASSES ET OBJETS EN JAVA

Dr. Hajer Nabli ISIMM -- 2022/2023 100


Classe en Java (1/3)
o Les classes constituent le concept de base de la programmation objet.

o Elles permettent de définir des nouveaux types de données qui doivent se comporter
comme des types pré définis et dont les détails d'implantation sont cachés aux utilisateurs
de ces classes.

o Une définition de classe est introduite par le mot clé class

o Une classe est défini généralement par :


▪ les données associées aux objets de la classe appelés champs ou attributs de la classe,
▪ les services que peuvent rendre les objets de cette classe interactifs, qui sont les
méthodes définies dans la classe.

Dr. Hajer Nabli ISIMM -- 2022/2023 101


Classe en Java (2/3)
o Syntaxe générale d’une classe:

modificateur_visibilité class nom_Class {


modificateur_visibilité data-type attribut1 ;
modificateur_visibilité data-type attribut2 ;
...
modificateur_visibilité data-type attributN ;

modificateur_visibilité Return-type nom_Method1( paramètres)


{// instructions ; }
...
modificateur_visibilité Return-type nom_Method2( paramètres)
{// instructions ; }
}

Dr. Hajer Nabli ISIMM -- 2022/2023 102


Classe en Java (3/3)
o Exp. Fichier [Link]

class Date {
private int j; // jour
private int m; // mois
private int a; // an

void initialise(int jour, int mois, int an)


{ j=jour; m=mois; a=an; }

void affiche( )
{ [Link](j + "/" + m + "/" + a) ; }
}

Dr. Hajer Nabli ISIMM -- 2022/2023 103


Modificateurs de visibilité (1/3)
o Valable pour un attribut ou une méthode :
▪ « public » :
• accessible à partir d’une instance par n’importe quelle classe.
▪ « private »:
• 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.

Dr. Hajer Nabli ISIMM -- 2022/2023 104


Modificateurs de visibilité (2/3)
o Valable pour un attribut ou une méthode :
▪ « final » :
• Une classe définie comme final ne peut pas être dérivée (on ne peut pas créer une
nouvelle classe héritant de cette classe).
• Une méthode déclarée final ne peut pas être redéfinie dans une classe dérivée.
• Un attribut définie comme final, permet de spécifier que cet attribut est une
constante (sa valeur ne pourra jamais être modifiée).
• Un attribut final doit obligatoirement être initialisée lors de sa déclaration
(puisqu'on ne peut pas le modifier après cela ) !
▪ rien
• Par défaut public

Dr. Hajer Nabli ISIMM -- 2022/2023 105


Modificateurs de visibilité (3/3)
o Exp. Fichier [Link]
class Machine {
private int x;
public int y;
final int entier =2;
Machine ( ) { …. }; // constructeur
void modifx(int value) { x=value;}
static void truc( ) { … }; // méthode de classe
……..
Machine m= new Machine( ); // création d’une instance de Machine.
m.y = 5; // OK y est publique
m.x = 6; // ERREUR x est privée
[Link] =4; // ERREUR entier est une constante.
[Link](6); // OK x est modifiée par la méthode modifx.
[Link](); // Warning truc est une méthode static.
[Link]( ); // OK appel d’une méthode de classe.
}

Dr. Hajer Nabli ISIMM -- 2022/2023 106


Constructeur d’une classe(1/2)
o Un constructeur est une méthode spéciale d’initialisation d’un objet :
▪ un constructeur n'a pas de type de retour, et se nomme toujours de la même manière
que sa classe
▪ Une classe peut avoir plusieurs constructeurs qui diffèrent par le nombre et la nature
de leurs paramètres (principe de surcharge).
o Utilité d’un constructeur :
▪ un constructeur est une méthode spéciale appelée à la création d’un objet pour
initialiser cet objet.
▪ surcharger les constructeurs pour une même classe ce qui permet d’initialiser les objets
de diverses manières.
➢ NB. La surcharge peut être appliquer pour n’importe quelle méthode et pas seulement
pour les constructeurs

Dr. Hajer Nabli ISIMM -- 2022/2023 107


Constructeur d’une classe(2/2)
o Exp. Fichier [Link]
class Date {
private int j; // jour Date d1 = new Date () ;
private int m; // mois Date d2 = new Date (1,6,2004) ;
private int a; // an
o Le constructeur sans
void initialise(int jour, int mois, int an)
arguments initialise la date
{ j=jour; m=mois; a=an; }
d à 1/9/1900
Date( ) // constructeur sans paramètres o Le constructeur Date à 3
{ j=1 ; m=9 ; a=1900 ; } arguments permet
Date(int jour, int mois, int an) // constructeur avec paramètres d’initialiser une date avec
{ j=jour ; m=mois ; a=an ; } des valeurs quelconques
o Si aucun constructeur n'a
void affiche( ) été défini, Java utilise un
{ [Link](j + "/" + m + "/" + a) ; } constructeur par défaut,
} sans argument

Dr. Hajer Nabli ISIMM -- 2022/2023 108


L’attribut caché « this » (1/3)
o Le mot-clé this représente une référence sur l'objet courant:
▪ celui qui est entrain d'exécuter la méthode dans laquelle se trouvent les instructions
concernées
o this peut être utile
▪ pour déclencher un constructeur depuis un autre constructeur
▪ pour lever des ambiguïtés entre des noms d’attributs et des noms d’arguments de
méthodes
• Lorsqu'une variable locale (ou un paramètre) "cache", en portant le même nom, un
attribut de la classe

Dr. Hajer Nabli ISIMM -- 2022/2023 109


L’attribut caché « this » (2/3)
o Exemple d’utilisation de this pour lever des ambiguïtés.
class Date {
private int j; // jour
private int m; // mois
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( )
{ [Link](j + "/" + m + "/" + a) ; }
}

Dr. Hajer Nabli ISIMM -- 2022/2023 110


L’attribut caché « this » (3/3)
o Exemple d’utilisation de this pour déclencher un constructeur depuis un autre constructeur
class Date {
private int j; // jour
private int m; // mois
private int a; // an
void initialise(int jour, int mois, int an)
{ j=jour; m=mois; a=an; }

Date( ) Date( )
{ j=1 ; m=1 ; a=1900 ; } { this(1 ,1 ,1900); }

Date(int j, int m, int a) // constructeur avec paramètres


{ this.j = j ; this.m = m ; this.a = a ; }
void affiche( )
{ [Link](j + "/" + m + "/" + a) ; }
}

Dr. Hajer Nabli ISIMM -- 2022/2023 111


Un programme Java complet (1/2)
class Date {
private int j; // jour
private int m; // mois
private int a; // an
// les constructeurs de la classe
Date( ) { j=1 ; m=1 ; a=1900 ; }
Date(int j, int m, int a) { this.j = j ; this.m = m ; this.a = a ; }
// les méthodes de la classe
void affiche( ) { [Link](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( );
[Link]( );
[Link](2,6,1997);
[Link]( );
}
}
Dr. Hajer Nabli ISIMM -- 2022/2023 112
Un programme Java complet (2/2)
o public static void main(String[] args)
▪ La méthode main est le point d'entrée du programme et elle est nécessairement public,
static et void
• public : car elle est appelée de l ’extérieur de la classe par la JVM
• 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 permet de récupérer des
paramètres introduits sur la ligne de commande (comme en C++)
✓ La commande java Date jour mois année lance l’exécution de la classe Date
avec comme paramètres jour mois année . La méthode main de la classe date
peut récupérer ainsi les chaînes jour mois année dans args[0], args[1] et
args[2]

Dr. Hajer Nabli ISIMM -- 2022/2023 113


Création d’instance d’une classe (1/3)
o Les instances des classes (objets) sont systématiquement manipulées à l’aide d’une
référence (pointeur sur la zone mémoire représentant l’objet).
o la création d’une variable instance d’une classe nécessite deux opérations :
▪ la création d’une référence qui ne pointe sur rien
Date d1;
Date d2;
▪ la réservation de la place mémoire à l’aide de l’opérateur new et l’affectation de la
donnée
d1 = new Date( ); // le constructeur initialise la date d1 à 1/1/1900.

d2 = new Date ( 11, 9, 2001) ; // le constructeur initialise la date d2 à 11/9/2001.

Dr. Hajer Nabli ISIMM -- 2022/2023 114


Création d’instance d’une classe (2/3)
o Schéma d’implantation en mémoire

Date d1;
d1 1 2 1998 d1 = new Date(1,2,1998);

Date d2;

d2 d2 = d1;

1 1 1900 Date d3 = new Date( );


d3

Dr. Hajer Nabli ISIMM -- 2022/2023 115


Création d’instance d’une classe (3/3)
o Schéma de libération de mémoire
Date d1;
d1 1 2 1998 d1 = new Date(1,2,1998);

Date d2;
11 9 2001
d2 d2 = d1;

1 1 1900 Date d3 = new Date( );


d3

d1 = null ;

d2=new Date(11,9,2001 );

Dr. Hajer Nabli ISIMM -- 2022/2023 116


Destruction d’un objet (1/5)
o La plupart des langages orientés objet possèdent une méthode nommée destructeur,
appelée pour détruire un objet
o La destruction d’un objet consiste à libérer les ressources qui lui ont été déjà affectées par le
constructeur
▪ Un objet est détruit lorsqu’il ne référencie aucune zone mémoire
o En Java, la destruction des objets est prise en charge par un mécanisme automatique appelé
ramasse- miettes (garbage collector GC)
o Le GC fonctionne en arrière plan pendant l'exécution d'un programme Java. il est géré dans
une thread de faible priorité
▪ difficile de savoir à quel moment le GC détruira réellement votre objet

Dr. Hajer Nabli ISIMM -- 2022/2023 117


Destruction d’un objet (2/5)
o La récupération de mémoire peut être aussi invoquée explicitement pas le programmeur à
des moments bien précis avec la commande [Link]().
o Certaines situations nécessitent un nettoyage spécial que le GC ne peut pas effectuer :
▪ Par exemple, certains fichiers ont été ouverts pendant la durée de vie de l’objet et vous
voulez vérifier qu’ils sont correctement fermés quand l’objet est détruit
o Pour cela, une autre méthode spéciale, appelée finalize(), peut être définie
o Cette méthode (si elle est présente) est appelée par le GC lorsque l'objet est détruit pour
assurer ce type de nettoyage spécial.

Dr. Hajer Nabli ISIMM -- 2022/2023 118


Destruction d’un objet (3/5)
class Date { Résultat d’affichage
private int j; // jour
private int m; // mois
1/6/1997
private int a; // an
Nettoyage spécial
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( ) { [Link](j + "/" + m + "/" + a) ; }


public void finalize() { [Link]("Nettoyage spéciale" ); }
public static void main(String[ ] args)
{
Date d = new Date(1,6,1997);
[Link]( );
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étruite l'objet.
[Link]( ); // appel implicite du GC
}
Dr. Hajer Nabli ISIMM -- 2022/2023 119
Destruction d’un objet (4/5)
class Date { Résultat d’affichage
private int j; // jour
private int m; // mois
1/6/1997
private int a; // an
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( ) { [Link](j + "/" + m + "/" + a) ; }


protected void finalize() { [Link]("Nettoyage spéciale" ); }
public static void main(String[ ] args)
{
Date d = new Date(1,6,1997);
[Link]( );
Date d2=d;
d =null; // d ne désigne plus rien, il n’y plus de référence
[Link]( ); // appel implicite du GC
}
Dr. Hajer Nabli ISIMM -- 2022/2023 120
Destruction d’un objet (5/5) Résultat d’affichage
class Date {
private int j; // jour 1/6/1997
private int m; // mois Nettoyage spéciale
private int a; // an Nettoyage spéciale
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( ) { [Link](j + "/" + m + "/" + a) ; }


protected void finalize() { [Link]("Nettoyage spéciale" ); }
public static void main(String[ ] args)
{
Date d = new Date(1,6,1997);
[Link]( );
Date d2=d;
d =null; d2=null;
[Link]( ); // appel implicite du GC
}
Dr. Hajer Nabli ISIMM -- 2022/2023 121
Comparaison d’instances
o Utilisation de ‘==‘ :
▪ Il y’a égalité que si d1 et d2 désignent la même zone 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é

Date d1 = new Date(1,2,2000) ;


Date d2 = d1 ;
if(d1 == d2) . . . . // il y a égalité

o 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([Link](d2)). . . .// il y a égalité si « equals » est définie

Dr. Hajer Nabli ISIMM -- 2022/2023 122


Accès aux membres (1/2)
o Les membres sont accessibles via une instance de la classe ou via la classe (pour les
membres statiques)
▪ On distingue 4 types d’accès aux membres d’une classe :
• 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
o L'accessibilité des membres est pondérée par des modificateurs de visibilité (public, private,
protected, …)

Dr. Hajer Nabli ISIMM -- 2022/2023 123


Accès aux membres (2/2)
o Exp.
class Circle( )
{
public double x, y; // Coordonnée du centre
private double r; // rayon du cercle
public Circle(double r)
{
this.r = r; // On accède à l'attribut 'r' de l'instance en cours
}
public Circle( )
{
[Link](2.0); // On invoque la méthode Circle (constructeur) de l’instance courante.
}
private double pi()
{
return [Link]; On accède à l'attribut statique 'PI' de la classe 'Math‘
}
public double area()
{
return pi * [Link](r); On invoque la méthode ' sqrt ' statistique de la classe ‘Math’
}
}

Dr. Hajer Nabli ISIMM -- 2022/2023 124


Mode de passage
o Le mode de passage des paramètres dans les méthodes dépend de la nature des
paramètres :
▪ Mode de passage par référence pour les objets,
▪ Mode de passage par copie pour les types primitifs Résultat d’affichage
class Test
{ La valeur de i = 0
public String s;
public int i;
La valeur de s= Bonjour tout le monde
Test() { }; // constructeur
void modifier(int value, StringBuffer chaine)
{ value++ ; [Link](" tout le monde"); }
public static void main(String[ ] args)
{
Test t = new Test();
int a=0; StringBuffer chaine= new StringBuffer ("Bonjour" );
[Link](a, chaine);
[Link](" La valeur de i="+a);
[Link](" La valeur de s="+chaine);
}

Dr. Hajer Nabli ISIMM -- 2022/2023 125


Les opérateurs sur les références
o Les seuls opérateurs sur les références sont des opé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
▪ equals: permet de comparer le contenu de deux références
▪ instanceof: permet de tester si l'objet référencé est une instance d'une classe donnée
ou d'une de ses sous-classes
if ( d1 instanceof Date ) {
… Traitement
}

Dr. Hajer Nabli ISIMM -- 2022/2023 126


Chapitre 5:

PROGRAMMATION ORIENTÉE OBJET


AVANCÉE

Dr. Hajer Nabli ISIMM -- 2022/2023 127


Composition de classes (1/4)
1. Principe
a. La réutilisation par Composition
• Quand une classe est testée et elle est opérationnelle on peut l’utiliser aussi en
tant que nouveau type dans une autre classe
• Les données d’une classe peuvent être des instances d’autres classes
Class Date Classe String
{
…..
Classe Date
}

class Personne
{ Classe Personne
private String nom;
private String prénom;
private Date naissance;
…..
}

Dr. Hajer Nabli ISIMM -- 2022/2023 128


Composition de classes (2/4)
o Exp.
class Date {
private int j; // jour
private int m; // mois
private int a; // an
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( )
{ [Link](j + "/" + m + "/" + a) ; }
}

Dr. Hajer Nabli ISIMM -- 2022/2023 129


Composition de classes (3/4)
o Exp.
class Personne {
private String nom;
private String prenom;
private Date naissance;
Personne(String nom, String prenom, int jour, int mois, int an)
{
[Link]=nom;
[Link]=prenom;
naissance=new Date(jour,mois,an);
}
void affiche()
{
[Link]("Identité Personne : ");
[Link](nom +" " +prenom);
[Link]();
}
}

Dr. Hajer Nabli ISIMM -- 2022/2023 130


Composition de classes (4/4)
o Exp.
▪ ApplicationPersonne est une classe de lancement càd qui contient la méthode main

Résultat d’affichage
Identité Personne :
class ApplicationPersonne { Jacques DUPONT
public static void main(String args[ ])
1/2/1947
{
Personne p = new Personne("Jacques", "DUPONT", 1,2,1947);
[Link]();
}
}

Dr. Hajer Nabli ISIMM -- 2022/2023 131


Héritage (1/14)
1. Principe: Réutilisation par extension
▪ Une classe représentant un concept voisin d’une classe existante n’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
• classe initiale = classe mère ou de base
• deuxième classe = classe dérivée ou fille (ou héritière) de la première Classe Zèbre
Classe Cheval
Classe Cheval Données
+
Données méthodes
+
méthodes rayures
+
……

Dr. Hajer Nabli ISIMM -- 2022/2023 132


Héritage (2/14)
2. Intérêt
▪ L'héritage supprime, en grande partie, les redondances dans le code
▪ Une fois la hiérarchie de classes bien établie, on peut localiser en un point unique les
sections de code (celles-ci restantes à tous moments accessibles grâce au mot clé
super)
▪ Si la hiérarchie des classes est bien pensée, on peut trè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 comportement dans une classe donnée, et que
vous vouliez maintenant le rajouter, une fois l'opération terminée, ce comportement
sera alors directement utilisable dans l'ensemble des sous-classes de celle considérée

Dr. Hajer Nabli ISIMM -- 2022/2023 133


Héritage (3/14)
3. Syntaxe
▪ En Java, une classe ne peut hériter que d'une seule classe
▪ Le mot clé extends est utilisé pour illustrer la dérivation d’une classe fille à partir d’une
classe mère
class fille extends mère { ... }
▪ Les classes dérivent, par défaut, de [Link]
▪ Une référence d'une classe A peut contenir des instances de A ou des classes dérivées
de A
class A { ... }
class B extends A { ... }

A instance = new A();


A instance = new B();

Dr. Hajer Nabli ISIMM -- 2022/2023 134


Héritage (4/14)
▪ L'opérateur instanceOf permet de déterminer la classe d'une instance
▪ Une sous-classe peut redéfinir une ou plusieurs des méthodes dont elle hérite
▪ Il est possible d’interdire qu’une méthode soit redéfinie dans une sous-classe en
utilisant final
▪ Il est possible d’interdire qu’une classe puisse être héritée en utilisant final

Dr. Hajer Nabli ISIMM -- 2022/2023 135


Héritage (5/14)
4. Exemple
▪ Une classe mère Compteur, qui permet de créer des compteurs classiques dispose de
méthodes d’incrémentation et de décrémentation

class Compteur {
private int valeur ;
Compteur() { valeur = 0 ; }
void inc( ) {valeur ++ ; }
void dec( ) {valeur --; }
int vaut() { return valeur ; }
}

Dr. Hajer Nabli ISIMM -- 2022/2023 136


Héritage (6/14)
4. Exemple
▪ Une classe dérivée Compteur_Controle de la classe mère Compteur qui permet de
créer des compteurs capables de contrôler l’incrémentation des compteurs classiques
class Compteur_Controle extends Compteur
{
private int maxval;
Compteur_Controle(int maxval)
{
super();
[Link] = maxval;
}
void inc()
{
if( vaut( ) < maxval ) [Link]( );
}
int get_maxval( ) { return maxval; }
}
Dr. Hajer Nabli ISIMM -- 2022/2023 137
Héritage (7/14)
4. Exemple
▪ La classe TestControle_Compteur est une classe de lancement
class TestControle_Compteur {
{
public static void main(String args[])
{
Compteur_Controle c = new Compteur_Controle(6);
[Link]( ); // Première incrémentation
[Link]( ); // Deuxième Incrémentation
[Link]("valeur : "+[Link]( ) );
[Link]( ); // Première décrémentation
[Link]( ); // Deuxième décrémentation
[Link]("valeur : "+[Link]( ) );
}
}

Dr. Hajer Nabli ISIMM -- 2022/2023 138


Héritage (8/14)
5. Utilisation de super() et masquage des données

Compteur_Controle(int maxval)
{
super( );
[Link] = maxval;
}

▪ Le constructeur de Compteur_Controle appelle le constructeur de la classe Compteur


à l’aide de la fonction super()
▪ L’appel du constructeur de la classe mère doit être la première instruction du
constructeur de la classe dérivée
▪ super() représente un appel au constructeur de la classe mère

Dr. Hajer Nabli ISIMM -- 2022/2023 139


Héritage (9/14)
5. Utilisation de super() et masquage des données

void inc()
{
if( vaut( ) < maxval ) [Link]( );
}

▪ Une partie du traitement de la méthode inc() de la classe dérivée Compteur_Controle


peut être effectuée par la méthode inc() de la classe mère Compteur, c’est pourquoi
inc() de Compteur_Controle appelle inc() de Compteur en utilisant [Link]()
▪ super désigne l’instance en cours de de la classe mère
▪ La méthode inc() de la classe Compteur_Controle, masque (remplace) la méthode
inc() héritée de la classe Compteur

Dr. Hajer Nabli ISIMM -- 2022/2023 140


Héritage (10/14)
5. Utilisation de super() et masquage des données
class A class B extends A
{ int x; {
int y;
void m( ) {...} void m( ) {...}
} }

Class C extends B
{ int a;
……..
a = super.y; // a reçoit la valeur de la variable y de la classe B
a = [Link].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
}

Dr. Hajer Nabli ISIMM -- 2022/2023 141


Héritage (11/14)
6. Accès à des attributs privés de la classe mère
class Compteur {
private int valeur ;
} ……

class Compteur_Controle extends Compteur


{
……..
void inc()
{
if( vaut( ) < maxval ) [Link]( );
}
}

▪ L’attribut « valeur » est déclaré comme private dans la classe mère Compteur
▪ 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()

Dr. Hajer Nabli ISIMM -- 2022/2023 142


Héritage (12/14)
6. Accès à des attributs protégés de la classe mère
class Compteur {
protected int valeur ;
} ……

class Compteur_Controle extends Compteur


{
……..
void inc()
{
if( valeur < maxval ) [Link]( );
}
}

▪ L’attribut « valeur » est déclaré comme protected dans la classe mère Compteur
▪ L’attribut « valeur » est hérité par la classe Compteur_Controle, il est donc accessible
par cette classe

Dr. Hajer Nabli ISIMM -- 2022/2023 143


Héritage (13/14)
7. Héritage et conversion : utilisation de « instanceof »
Compteur c1 = new Compteur( );
Compteur_Controle c2 = new Compteur_Controle(1000);

int maximum = c1. get_maxval( ) ; // Erreur

[Link]((c1 instanceof Compteur_Controle)); // false


[Link]((c1 instanceof Compteur)); // true
[Link]((c2 instanceof Compteur_Controle)); // true
[Link]((c2 instanceof Compteur )); // true

c1 = c2;
[Link]((c1 instanceOf Compteur_Controle)); // true
[Link]((c1 instanceOf Compteur)); // true

c2 = c1; // Erreur

Dr. Hajer Nabli ISIMM -- 2022/2023 144


Héritage (14/14)
8. Classe, et méthode finale :
▪ Une méthode déclarée final ne peut pas être redéfinie dans une classe dérivée
class Base class Dérivée extends Base
{ {
final void f() void f( ) // Erreur
{- - - } {- - - }
---- ----
} }

▪ Une classe déclarée final ne peut pas avoir de classes dérivées


final class Base class Dérivée extends Base
{ {
---- ----
} }

Dr. Hajer Nabli ISIMM -- 2022/2023 145


Les paquetages ou « package » (1/4)
o Regroupement des classes
▪ Les paquetages permettent de regrouper une ensemble de classes portant sur un
même thème (classes d’entrées sorties, classes réseau, classes géométriques)
▪ Un paquetage contient des classes et des paquetages ce qui permet de constituer une
arborescence de paquetages
▪ Les paquetages permettent une manipulation aisée des groupes de classes, une
limitation des espaces de noms et un niveau de protection
o Construction de paquetage
▪ Dans un fichier [Link] la déclaration package truc au début du texte source indique au
compilateur que les classes contenues dans le fichier doivent être rangées dans le
paquetage truc

Dr. Hajer Nabli ISIMM -- 2022/2023 146


Les paquetages ou « package » (2/4)
o Nom d’un paquetage
▪ Les paquetages étant organisés en arborescences, la désignation d’un paquetage
s’effectue en donnant le chemin sous la forme pointée
▪ [Link] désigne le paquetage truc situé dans le paquetage machine, lui
même situé dans le paquetage bidule
o Accès aux éléments d’un paquetage
▪ Une classe appartenant à un paquetage a un accès a chaque élément du paquetage
▪ Une classe peut faire référence à une classe d’un autre paquetage en donnant le
chemin complet des paquetages jusqu’à elle

paqu1.paqu2.classe1 c1 ;

Dr. Hajer Nabli ISIMM -- 2022/2023 147


Les paquetages ou « package » (3/4)
o Importation des paquetages
▪ Une classe peut importer une classe d’un autre paquetage en donnant seulement le
nom de la classe et le chemin d’accès à l’aide de la déclaration import au début du
fichier [Link]

// import de la classe classe1 du paquetage [Link]

import [Link].classe1 ;

// importe toutes les classes du paquetage [Link]

import [Link].* ;

Dr. Hajer Nabli ISIMM -- 2022/2023 148


Les paquetages ou « package » (4/4)
o Les paquetages standards
▪ Le paquetage [Link] : contient Object, class, classloader, les classes adaptatrices, system,
runtime, String, StrinBuffer, etc.
▪ Le paquetage [Link] : contient des structures de données (vector, stack, hashtable,
Enumeration, etc.) et des classes comme random, date
▪ Le paquetage [Link] : contient des classes pour E/S sur disque avec filtrages divers
▪ Le paquetage [Link] : contient des classes réseau (URL, sockets, etc.)
▪ Le paquetage [Link] : contient les classes pour interfaces graphiques

Dr. Hajer Nabli ISIMM -- 2022/2023 149


Paquetages et protection des données
(1/4)
o Situations possibles des différentes classes

▪ Les classes Fille1, Fille2 et Fille3 héritent de la classe mère


▪ La classe Fille3 se trouve dans un paquetage différent de celui des classes Fille1 et Fille2

Dr. Hajer Nabli ISIMM -- 2022/2023 150


Paquetages et protection des données
(2/4)
o Attributs ou Méthodes public :
▪ Les attributs et les méthodes public sont accessibles par toutes instances de toutes les
classes

Dr. Hajer Nabli ISIMM -- 2022/2023 151


Paquetages et protection des données
(3/4)
o Attributs ou Méthodes protected :
▪ Les attributs et les méthodes protected sont accessibles par les instances des classes du
même paquetage et par les classes dérivées

Dr. Hajer Nabli ISIMM -- 2022/2023 152


Paquetages et protection des données
(4/4)
o Attributs ou Méthodes private :
▪ Les attributs et les méthodes private d’une instance de la classe Mère ne sont
accessibles que par une instance de la classe Mère

Dr. Hajer Nabli ISIMM -- 2022/2023 153


Les classes abstraites (1/2)
o Une classe abstraite sert à mettre en facteur des attributs et des méthodes pour des classes
dérivées concrètes
o Une classe abstraite est introduite par le mot clé abstract et elle a au moins une méthode
abstraite
o Une méthode abstraite est déclarée par le mot clé abstract, et elle n’a pas de corps
o Une classe abstraite ne peut pas être instanciée (new)
o Si une classe dérivée d’une classe abstraite ne redéfinie pas toute les méthodes abstraites
alors elle est abstraite
o Pour utiliser une classe abstraite on doit définir une classe héritière (ou fille) qui fournit les
réalisations des méthodes abstraites de la classe abstraite

Dr. Hajer Nabli ISIMM -- 2022/2023 154


Les classes abstraites (2/2)
o Exp.
class abstract Shape
{
public abstract double perimetre();
}

class Circle extends Shape


{
...
public double perimetre() { return 2 * [Link] * r ; }
}

class Rectangle extends Shape


{
...
public double perimetre() { return 2 * (height + width); }
}

Dr. Hajer Nabli ISIMM -- 2022/2023 155


Polymorphisme
o Exp.
Shape[ ] shapes = {new Circle(2),
new Rectangle(2,3),
……..
};

double sum_of_perimeters = 0;

for (int i = 0; i < [Link]; i++)

sum_of_perimeters += shapes[i].perimetre( );

Dr. Hajer Nabli ISIMM -- 2022/2023 156


Héritage multiple et les Interfaces (1/13)
1. 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 les méthodes de la classe
Carnivore, les attributs et les méthodes de la classe Animal, et enfin les attributs et les
méthodes spécifiques concernant un Lion

Classe Lion
Carnivore Animal
Classe Animal

Classe
Carnivore
Lion
+
……

Dr. Hajer Nabli ISIMM -- 2022/2023 157


Héritage multiple et les Interfaces (2/13)
2. Problèmes de l’héritage multiple
▪ Un attribut de la classe Personne apparaît en double dans la classe
Enseignent_Chercheur
▪ Si une méthode de la classe Personne est redéfinie dans la classe Enseignent et dans la
classe Chercheur, quelle est celle qui est utilisée dans la classe Enseignent_Chercheur.

Dr. Hajer Nabli ISIMM -- 2022/2023 158


Héritage multiple et les Interfaces (3/13)
3. Principe de l’Interface
▪ Une interface est introduite par le mot clé « interface », et se comporte comme une
classe dont toutes les méthodes sont abstract et dont tous les attributs sont final
▪ Les mots clés final et abstract n’apparaissent pas dans la définition d’une interface
▪ Une interface est un moyen de préciser les services qu'une classe peut rendre. C’est
un modèle d'implémentation
▪ Une interface est inutilisable en elle-même
▪ Une classe doit implémenter l’interface, c’est a dire définir les corps des méthodes
abstraites de l’interface

Dr. Hajer Nabli ISIMM -- 2022/2023 159


Héritage multiple et les Interfaces (4/13)
3. Principe de l’Interface
▪ Une interface est utilisée lorsque nous avons seulement besoin de savoir que telle ou
telle classe possède telles méthodes et se comporte de telle manière
▪ Exp. On peut imaginer une interface appareilElectrique qui définit les méthodes
estEnclenche() et alimente(boolean)
• Si une classe implémente l'interface appareilElectrique, on sait donc qu'elle
possède au moins ces deux méthodes
• Lorsque l'on désire indiquer à un appareil qu'il est alimenté, on exécute
[Link](true), et pour lui indiquer qu'il a été débranché, on exécute
[Link](false)

Dr. Hajer Nabli ISIMM -- 2022/2023 160


Héritage multiple et les Interfaces (5/13)
o Exp.

public interface Appareil_Electrique


{
/** teste si l'appareil est enclenche */
public boolean estEnclenche( );

/** on appelle cette methode lorsque l'on branche


l'appareil dans une source de courant active, avec true, ou
false si la source est inactive */
public void alimente(boolean alim);

Dr. Hajer Nabli ISIMM -- 2022/2023 161


Héritage multiple et les Interfaces (6/13)
o Exp. Exemple d’utilisation de l’interface Appareil_Elctrique

class Radio implements Appareil_Electrique


{
final static int freqMiseEnRoute = 1007; // 100.7 MHz int freq;
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) { [Link] = freq; return allumee; }
return false;
}

Dr. Hajer Nabli ISIMM -- 2022/2023 162


Héritage multiple et les Interfaces (7/13)
o Le mot clé implements indique que la classe Radio doit forcément donner une définition
précise pour les méthodes spécifiées dans l’interface
o Une classe peut implémenter plusieurs interfaces
▪ Elle doit dans ce cas fournir des définitions pour toutes les méthodes spécifiées dans
l’interface
interface Truc interface Bidule class Machine implements Truc, Bidule
{ { {
void e( ) {- - -; }
void e( ); void f( ); void f( ) {- - -; }
} } }

o Plusieurs classes différentes peuvent implémenter de manières différentes une même


interface
▪ Plusieurs réalisations possibles d’une même spécification (polymorphisme)

Dr. Hajer Nabli ISIMM -- 2022/2023 163


Héritage multiple et les Interfaces (8/13)
4. Résolution du problèmes de l’héritage multiple
▪ Le problème de l’héritage en diamant peut être résolu à l’aide des interfaces
• Une classe peut hériter d’une classe et implémenter plusieurs interfaces

interface Personne{- - -}
interface Chercheur extends Personne {- - -}
class Enseignent implements Personne {- - -}
class Enseignent_Chercheur extends Enseignent implements Chercheur {- - - }

Dr. Hajer Nabli ISIMM -- 2022/2023 164


Héritage multiple et les Interfaces (9/13)
4. Résolution du problèmes de l’héritage multiple
▪ Les attributs de Personne ne sont pas redéfinis dans Enseignent ni Chercheur
• Ils sont déclarés final
▪ Les méthodes de Personne sont implémentées dans Enseignent, voir redéfinies dans
Enseignent_Chercheur, mais ne peuvent pas être implémentées par Chercheur qui est
une interface Personne

Enseignent Chercheur
classe

Enseignent_Chercheur interface

Dr. Hajer Nabli ISIMM -- 2022/2023 165


Héritage multiple et les Interfaces
(10/13)
o Les interfaces peuvent hériter de plusieurs autres interfaces

interface X {- - - -}
interface Y {- - - -}
interface Z extends X,Y {- - - -}

o Il n’y pas de risque de duplication des attributs de X et de Y dans Z:


▪ Les attributs sont final donc non héritables
▪ Et pour les méthodes ?

Dr. Hajer Nabli ISIMM -- 2022/2023 166


Héritage multiple et les Interfaces
(11/13)
o Conflit de nom avec les interfaces :
▪ Si les méthodes f situées dans les interfaces X et Y 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
interface X interface Y
{ {
void f( int i); void f(char c );
} }

class Z implements X,Y


{
void f(int i ) {….}
void f(char c) {…};
}

Dr. Hajer Nabli ISIMM -- 2022/2023 167


Chapitre 6:

LES CLASSES DE BASE

Dr. Hajer Nabli ISIMM -- 2022/2023 168


Classe Object (1/2)
o La classe Object est la classe mère de toutes les classes
▪ Elle contient 2 méthodes que la plupart des classes Java doivent redéfinir :
• Une méthode String toString() : qui retourne une description de l'objet
• Une méthode boolean equals(Object) : qui permet de tester l'égalité sémantique
de deux objets
▪ Et une méthode Class (non pas d’instance) getClass() qui peut être utilisée sur tout
objet pour déterminer sa nature (nom de la classe, nom de ses ancêtres, structure)

Dr. Hajer Nabli ISIMM -- 2022/2023 169


Classe Object (2/2)
o Exp. Utilisation des méthodes toString, equals, getClass
class Personne // dérive de Object par défaut
Résultat d’affichage
{
Classe : Personne Objet : Jean Dupond
private String nom ;
public Personne(String nom) { [Link] = nom ; }
public String toString() { return "Classe:" + getClass().getName() + "Objet :" + nom ;}
boolean equals(Personne p) { return [Link]([Link]) ; }

public static void main(String args[]){


Personne p1 = new Personne("Jean Dupond") ;
Personne p2 = new Personne("Jean Dupond") ;
[Link]( [Link]( ) ) ;}
}

Dr. Hajer Nabli ISIMM -- 2022/2023 170


Les classes Wrapper (1/2)
o Les classes Wrapper sont des classes qui permettent de repré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
▪ 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
o Les classes Wrapper permettent en particulier de récupérer les valeurs minimum et
maximum du type de base correspondant

double f;
if (f> Integer.MIN_VALUE && f < Integer.MAX_VALUE);
int i = (int) f;

Dr. Hajer Nabli ISIMM -- 2022/2023 171


Les classes Wrapper (2/2)
o Les conversions entre types de base et chaînes de caractères sont possibles via des objets
Wrapper :
▪ Conversion d’une chaîne de caractère vers un entier :
• [Link](String s) ;
• Integer(String s).intValue( ) ;
• [Link](String s).intValue( ) ;
▪ Conversion d’un entier en chaîne de caractère :
• Integer(int i)).toString( ) ;
• [Link](int i) ;
• "" + i ;

Dr. Hajer Nabli ISIMM -- 2022/2023 172


Les chaînes de caractères non
modifiables (1/2)
o La classe String :
▪ La classe String décrit des objets qui contiennent une chaîne de caractères constante
(cette chaîne ne peut pas être modifiée).
• String s ;
• s = "voici une chaîne";
• s = "voici une autre chaîne";
▪ C'est aussi la seule classe qui dispose d'opérateurs supplémentaires : + et += pour la
concaténation de chaînes de caractères.
• int nombre = 3 ;
• String message = "Mon nombre est " + 3 ;

Dr. Hajer Nabli ISIMM -- 2022/2023 173


Les chaînes de caractères non
modifiables (1/2)
o La classe String :
▪ La classe String décrit des objets qui contiennent une chaîne de caractères constante
(cette chaîne ne peut pas être modifiée).
• String s ; s
• s = "voici une chaîne"; Voici une chaîne
• s = "voici une autre chaîne";
Voici une autre chaîne

▪ C'est aussi la seule classe qui dispose d'opérateurs supplémentaires : + et += pour la


concaténation de chaînes de caractères.
• int nombre = 3 ;
• String message = "Mon nombre est " + 3 ;

Dr. Hajer Nabli ISIMM -- 2022/2023 174


Les chaînes de caractères non
modifiables (2/2)
o La classe [Link] :
▪ 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): Retourne la position du caractère c en partant de la
position i
• String substring(int i, int j): Retourne une chaîne extraite de la chaîne sur laquelle
est appliquée cette méthode, en partant de la position i à la position j
• boolean equals(String s): comparaison sémantique des chaînes
• String toLowerCase( ), String toUpperCase( ): majuscule vers minuscule, minuscule
vers majuscule

Dr. Hajer Nabli ISIMM -- 2022/2023 175


Les chaînes de caractères modifiables
(1/3)
o La classe [Link] :
▪ Un objet de la classe StringBuffer se caractérise par deux tailles, qui sont retournées
par les méthodes :
• int length( ) : qui retourne le nombre de caractères exacte du contenu de la chaîne
de caractère
• int capacity( ) : qui retourne la taille actuelle du tableau interne

▪ Quelques méthodes supplémentaires:


• StringBuffer append(p) : ajoute p en fin de chaîne ( p est n'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.

Dr. Hajer Nabli ISIMM -- 2022/2023 176


Les chaînes de caractères modifiables
(2/3)
o La classe [Link] :
o Exp.

StringBuffer s = new StringBuffer("Bonjour");


[Link](" tout le monde");
[Link]("s : "+s);
[Link]("length : "+[Link]());
[Link]("capacity : "+[Link]());
[Link](2,"hop");
[Link]("s : "+s); Résultat d’affichage
s : Bonjour tout le monde
length : 21
capacity : 23
s : Bohopnjour tout le monde

Dr. Hajer Nabli ISIMM -- 2022/2023 177


Les chaînes de caractères modifiables
(3/3)
o La classe [Link] :
▪ Cette classe permet de construire des objets qui savent découper des chaînes de
caractères en sous-chaînes.
▪ Lors de la construction du StringTokenizer, il faut préciser la chaîne à découper et, le ou
les caractères qui doivent être utilisés pour découper cette chaîne :
import [Link];
public class Simple{
public static void main(String args[]){
StringTokenizer st = new StringTokenizer("Mon nom est Ali"," ");
while ([Link]()) { Résultat d’affichage
[Link]([Link]());
Mon
}
nom
}
est
}
Ali

Dr. Hajer Nabli ISIMM -- 2022/2023 178


Classe Vector (1/5)
o Classe située dans le package [Link]
o La classe Vector permet de réaliser des listes d’éléments quelconques pourvu qu’ils
héritent de la classe Object
o Les objets de la classe Vector représentent des tableaux à taille variable, c.à.d. il n'y a pas
de limite au nombre d'objets qu'il peut contenir :
o Les méthodes de la classe Vector
▪ Object elementAt(int index): retourne (sans retirer) l'élément à la position index
▪ 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

Dr. Hajer Nabli ISIMM -- 2022/2023 179


Classe Vector (2/5)
o Exp.
import [Link];
public class addElement{
public static void main(String[] args) {
Vector v = new Vector();
[Link](1);
[Link](2);
[Link](3);
[Link]([Link]());
[Link](4);
[Link](v); Résultat d’affichage
[Link](2);
[1, 2, 3]
[Link](v);
[1, 2, 3, 4]
}
} [1, 2, 4]

Dr. Hajer Nabli ISIMM -- 2022/2023 180


Classe Vector (3/5)
o Exp.

[Link](hop,2); //insertion en 3eme position


[Link]([Link]()) ; // affichage du Vector
Résultat d’affichage
[1, 2, hop, 4]

[Link](truc,2) ; // changement d’un élément


[Link]([Link]()) ; // affichage du Vector
Résultat d’affichage
[1, 2, truc, 4]

Dr. Hajer Nabli ISIMM -- 2022/2023 181


Classe Vector (4/5)
o Parcours d’un Vector

for(int i = 0 ; i< [Link]( ) ; i++) // affichage du Vector


[Link]([Link](i)) ;
for(Enumeration e = [Link]( ) ; [Link]( ) ;)
[Link]([Link]( )) ;

NB. « e » est un itérateur, c’est une instance de Enumeration qui possède les méthodes nécessaires pour
parcourir une liste
o Autres méthodes utiles
int num ;
num = [Link](truc) ; // indice d’un élément
[Link](truc) ; // retrait d’un élément
[Link]([Link]( )) ;

Dr. Hajer Nabli ISIMM -- 2022/2023 182


Classe Vector (5/5)
o Conversion en sortie de Vector
▪ Un Vector peut contenir des Object (structure polymorphe)
▪ un élément retiré d’un Vector doit être converti en le type désiré

import [Link].* ;
class Bidule{- - - - - }

Bidule b;
Vector v = new Vector( ) ;
[Link](new Bidule(..)); // ajout d’un bidule
[Link](new Bidule(..)); // ajout d’un bidule
[Link](new Bidule(..)); // ajout d’un bidule

b = (Bidule) [Link](1) ; // conversion en bidule

Dr. Hajer Nabli ISIMM -- 2022/2023 183


Classe Hashtable (1/2)
o Présentation
▪ Création des tables contenant des doubles <clé,info>quelconques pourvu qu’ils
héritent de la classe Object
▪ Opérations possible sur tables : ajout, retrait, recherche de l’info associée à une clé
donnée, test de présence de clé ou d’info, etc.
▪ Exp.
import [Link].* ;
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) ;
[Link](un,a) ; [Link](deux,b) ; [Link](trois,c) ;

Dr. Hajer Nabli ISIMM -- 2022/2023 184


Classe Hashtable (2/2)
o Méthodes utiles
n = (integer) [Link](deux) ; // recherche de l’info associée à une clé
if([Link](c))..... // test présence d’une info
if([Link](deux) ).. // test présence d’une clé
[Link](deux) ; // suppression d’un entrée

o Parcours d’une Hashtable


▪ Affichage des infos
for(Enumeration e = [Link]() ;[Link]( ) ;)
[Link]([Link]( )) ;

▪ Affichage des clés


for(Enumeration e = [Link]( ) ;[Link]( ) ;)
[Link]([Link]( )) ;

Dr. Hajer Nabli ISIMM -- 2022/2023 185


Références
o Doudoux, J.M. , Développons en Java v 2.30, Copyright (C) 1999-2022, 2022
o Cay S. Horstmann, Gary Cornell, Au coeur de Java 2 - Volume 1 : Notions fondamentales, 8ème édition,
Pearson education, avril 2008
o Programmation Java: [Link]
o Du C/C++ à Java: [Link]
o Support de cours Java :
[Link]
df
o Le JDK et la documentation sont librement téléchargeables sur le site d'Oracle:
[Link]
o Booch, G., Maksimchuk, R. A., Engle, M. W., Young, B. J., Connallen, J., & Houston, K. A. (2008). Object-
oriented analysis and design with applications. ACM SIGSOFT software engineering notes, 33(5), 29-29.

Dr. Hajer Nabli ISIMM -- 2022/2023 186

Vous aimerez peut-être aussi