Programmation Orientée
Objet-Java
Pr. Fatima MOURCHID
Année universitaire 2023-2024
Identification du cours
Intitulé: Programmation orientée objet-Java
Durée: 24 heures
10 heures (Cours)
12 heures (Travaux pratiques)
2
Plan
Introduction
Présentation de Java et son environnement d’exécution
Types de données
Structures de contrôle
Tableaux de données
Opérateurs
3
Plan
Programmation Orientée Objet
Classe et Objet
Attributs et méthodes
Encapsulation et polymorphisme
Héritage et redéfinition des méthodes
Classes abstraites et interfaces
Collections
Gestion des exceptions
Gestion des entrées/sorties
Bases de données et Java
Interfaces graphiques
4
Introduction
5
Introduction
Java est un langage de programmation orienté objet, dont la syntaxe est
proche du langage C et basé sur le langage C++
Créé en 1995 par Sun Microsystems suite aux recherches, débutées en 1990
En 2009, Sun Microsystems est racheté par Oracle Corporation qui fournit
dorénavant les outils de développement Java SE (Standard Edition) contenus
dans le Java Development Kit (JDK)
Dernière version est Java SE 21 (17 octobre 2023)
Types de programmes en Java
Applications : exécutées localement
Applets : exécutées côté client http (page web)
Servlets : exécutées côté serveur http (page web)
6
Introduction
Caractéristiques du langage Java
Orienté objet
Fortement typé
Toute variable doit être déclarée avec un type
Compilateur vérifie que les utilisations des variables sont compatibles avec leur type
(notamment via un sous-typage correct)
Types fournis par le langage, mais également par la définition des classes
Compilé
Bytecode, i.e., code intermédiaire indépendant de la machine
Interprété
Bytecode est interpété par une machine virtuelle Java
7
Introduction
Code source Java est écrit sous la forme de classes, dans des fichiers dont
l’extension est « .java »
Ce code source est alors compilé par le compilateur « javac » en un langage
appelé bytecode et enregistre le résultat dans un fichier dont l’extension est
« .class »
Ce Bytecode est interprété par la « machine virtuelle Java » qui transforme le
code compilé en code machine compréhensible par le système d’exploitation
Exécution s’effectue par la commande « java » suivie du nom de la classe à
exécuter (sans l’extension .class)
8
Introduction
Machine Virtuelle Java
Il s’agit d'abstraire le comportement d'une machine afin de le rendre indépendant
de la plateforme d’exécution
Traduit le bytecode dans le langage machine de la plateforme d’exécution
9
Introduction
Technologie Java
Composée du langage de programmation et du compilateur
JVM et des APIs (Application Programming Interfaces) regroupées dans une «
plateforme »
Java SE (Java Platform, Standard Edition): pour applications desktop
Java EE (Java Platform, Enterprise Edition): pour développer et déployer des applications
serveur, Web services, etc…
Java ME (Java Platform, Micro Edition): J2ME pour les applications embarquées (PDA,
téléphones, etc…)
Il suffit du JRE (Java Runtime Execution) pour exécuter une application java par
opposition au JDK (Java Developpement Kit)
10
Introduction
public class HelloWorld {
public static void main(String[] args) {
[Link](”Hello world”);
}
}
11
Introduction
Blocs de code sont encadrés par { . . .}
Chaque instruction se termine par un ;
Instruction peut tenir sur plusieurs lignes
Commentaires ne sont pas pris en compte par le compilateur
// commentaire sur une seule ligne
/* commentaires ligne 1
commentaires ligne 2 */
12
Introduction
Méthode Main
Constitue la partie principale du programme, permettant l'exécution d'une
application Java
Doit être déclarée public, static, et void
Argument est un tableau d'éléments textuels fournissant le moyen de passer des
paramètres au programme
Argument du array de strings peut être renommé en n'importe quoi, mais la
convention est de choisir entre « args » ou « argv »
13
Introduction
Déclaration de la méthode main ()
public static void main(String[] args) {
…
}
ou
public static void main(String... args) {
…
}
14
Syntaxe du langage Java
15
Variables
Par convention :
Identificateurs de classe commencent toujours par une majuscule
Identificateurs de variables et de méthodes commencent toujours par une
minuscule
Identificateurs formés par la concaténation de plusieurs mots comportent une
majuscule à chaque début de mot sauf pour le premier mot qui dépend du type de
l’identificateur
16
Types de données
Variables locales comme les champs des classes et des objets peuvent être de
type
Primitif
Dans ce cas, la déclaration de la variable réserve la place mémoire pour stocker sa valeur
(qui dépend de son type)
Non primitif
Tableaux, matrices
Objet ou référence
Dans ce cas, la déclaration de la variable réserve la place d'une référence afin d'accéder à l'objet
lui-même (null si la référence est inconnue)
17
Types de données
Types primitifs
Types entiers signés
byte (octet) sur 8 bits
short sur 16 bits
int sur 32 bits
long sur 64 bits
Type caractère
char sur 16 bits
Types à virgule flottante
float sur 32 bits
double sur 64 bits
Type booléen: boolean (true ou false)
18
Types de données
Types primitifs
19
Types de données
Terme « void » est utilisé pour spécifier le retour vide ou une absence de
paramètres d’une méthode
Chaque type primitif possède une classe qui encapsule un attribut du type
primitif
Exemple: la classe Integer encapsule un attribut de type int et permet d’effectuer
des opérations sur les objets de type int
20
Types de données
Conversion (également appelée transtypage) d’un type primitif en un autre se
fait de la manière suivante :
typeVariableA variableA = (typeVariableA) valeurB
21
Types de données
int a ;
double b = 5.0 ;
a=b;
est interdit et doit être écrit de la manière suivante :
int a ;
double b = 5.0 ;
a = (int)b ;
22
Types de données
Opérateurs de comparaison
Permettent de comparer deux variables d’un même type primitif (entier, flottant,
booléen et caractère) et renvoient une valeur booléenne
== comparaison d’égalité
!= différence
< inférieur strict
<= inférieur ou égal
> supérieur strict
>= supérieur ou égal
23
Types de données
Expressions composées doivent être complètement parenthésées :
double a = 8;
boolean estDansIntervalle = ((a >= 0) && (a <= 10)); // true ssi a appartient
à [0,10]
24
Types de données
Tableaux à une dimension
int[] tabInt ; // Déclaration d’un tableau d’entiers
char[] tabChar ; // Déclaration d’un tableau de caractères
int[] tabInt ; // Déclaration d’un tableau d’entiers
tabInt = new int[100]; // Instanciation d’un tableau de 100 éléments entiers
25
Types de données
Tableaux à deux dimensions
char[][] Matrice ; // Déclaration d’un tableau à 2 dimensions de caractères
Matrice= new char[3][5]; // Instanciation d’un tableau contenant 3 tableaux de
// 5 caractères chacun
26
Types de données
Chaînes de caractères
Ne sont pas considérées en Java comme un type primitif
Classe « String », fournie dans le package « [Link] », contenant un ensemble de
méthodes permettent d’effectuer des opérations sur les chaînes de caractères
Caractéristiques
Valeur ne peut pas être modifiée
Initialisation
String s1 = new String(); //pour une chaine vide
String s2 = new String(”hello world”); // pour une chaîne de valeur ”hello
//world”
27
Types de données
On peut utiliser l’opérateur « + » pour concaténer deux chaînes de caractères
String s1 = “hello” ;
String s2 = “world” ;
String s3 = s1 + ” ” + s2 ; // s3 =“hello world”
28
Types de données
Objets définies par l’utilisateur
Classe
Description des objets, (ex : les clients) et définit les attributs et les méthodes
communes aux objets d’un certain type
Objets construits à partir de ces classes sont des instances
Constructeur de la classe
Toute classe doit contenir au moins une méthode particulière appelée constructeur
Porte le même nom que la classe et est appelée lorsque l’on instancie un nouvel
objet
Initialise les valeurs des attributs et ne renvoie aucune valeur
29
Types de données
class Client {
//les attributs de la classe Client
String nom;
String prenom;
int nbCommandes;
}
30
Types de données
Client() { // premier constructeur
nom = new String("");
prenom = new String("");
nbComamndes = 0;
}
Client (String nom, String prenom, int nbCommandes) { // deuxième constructeur
[Link] = new String(nom);
[Link] = new String(prenom);
[Link] = nbCommandes;
}
31
Structures de contrôle
Bloc d’instructions
Accolades {} permettent de délimiter un bloc d’instructions
Variables déclarées dans un bloc sont accessibles à l’intérieur de ce bloc
uniquement
Deux variables de même nom peuvent être déclarées dans deux blocs distincts
32
Structures de contrôle
Structures de contrôle conditionnelles
Spécifier à quelles conditions (sous forme d’expressions logiques) un bloc
d’instructions va être exécuté
[Link] alternative
if (condition) {// (condition == true)
// bloc d’instructions exécutées si condition est vraie
} else {
// bloc d’instructions exécutées si condition est fausse
}
33
Structures de contrôle
if (condition) {// (condition == true)
// bloc d’instructions exécutées si condition est vraie
} else if {
// bloc d’instructions
} else if {
// bloc d’instructions
}
…
} else {
// bloc d’instructions
}
34
Structures de contrôle
[Link] à choix multiples
switch (variable) {
case valeur1 :
Liste d’instructions // exécutées si (variable == valeur1)
break;
...
case valeurN :
Liste d’instructions // exécutées si (variable == valeurN)
break;
default:
Liste d’instructions // exécutées sinon
}
35
Structures de contrôle
Structures itératives
[Link]ération répétée n fois
for (int compteur = 0 ; compteur < n ; compteur = compteur + 1) {
// bloc instructions répétées n fois
}
Ou:
for (int compteur = n ; compteur > 0 ; compteur = compteur - 1) {
// bloc instructions répétées n fois
}
36
Structures de contrôle
[Link]ération répétée tant qu’une condition est vraie
while (condition) { // (condition == true)
// bloc d’instructions répétées tant que condition est vraie
// condition doit être modifiée dans ce bloc
}
37
Structures de contrôle
3. Itération exécutée au moins une fois
do {
// bloc d’instructions exécutées
// condition doit être modifiée dans ce bloc
} while (condition); // si condition est vraie,
// le bloc est exécuté à nouveau
38
Structures de contrôle
Break et continue (rupture de séquence)
Break est utilisée pour sortir immédiatement d’un bloc d’instructions (sans traiter
les instructions restantes dans ce bloc)
Dans le cas d’une boucle on peut également utiliser l’instruction continue
avec la différence suivante :
break : l’exécution se poursuit après la boucle (comme si la condition d’arrêt
devenait vraie)
continue : l’exécution du bloc est arrêtée mais pas celle de la boucle. Une
nouvelle itération du bloc commence si la condition d’arrêt est toujours vraie
39
Structures de contrôle
for (int i = 0, j = 0 ; i < 100 ; i++) {
if (i > [Link]) {
break ;
}
if (tab[i] == null) {
continue ;
}
tab2[j] = tab[i];
j++;
}
40
Méthodes
Méthode
Bloc d’instructions exécuté par un appel de la méthode dans le bloc du programme
principal (méthode main) ou dans une autre méthode
Créée pour
Regrouper un ensemble d’instructions qui participent à la réalisation d’une même tâche
Regrouper un ensemble d’instructions qui sont appelées à différents endroits du
programme
41
Méthodes
1.Méthodes prédéfinies
Méthodes d’une librairie
nomMethode (parametre_1,... , parametre_n);
double racine = [Link](5.2);
[Link]("la chaîne de caractères à afficher");
42
Méthodes
2.Méthodes définies par l’utilisateur
static TypeRetour nomMethode(Type1 param1,..., TypeN paramN) {
//bloc d’instructions
return valeurRetournee;
}
TypeRetour: type de valeurRetournee
Void: si la méthode ne renvoie aucune valeur
43
Méthodes
static int addition(int x, int y) {
return x + y;
}
public static void main (String[] args) {
int a = 7;
int b = 3;
int somme = addition(a,b);
}
44
Méthodes
3. Méthodes récursives
public class Factorielle {
static int calculeFactorielle(int n) {
if(n > 0) { // cas général
return n * calculeFactorielle (n-1); }
else { //cas d’arrêt
return 1; }
}
public static void main (String[] args) {
int valeur = 4;
[Link](calculeFactorielle(valeur));
}
}
45
Exercices
Outils de développement
Utiliser Eclipse, un environnement de développement intégré (IDE)
Utiliser Eclipse en mode collaboratif sur GitHub grâce à l’extension Git pour
Eclipse
46
Exercices
Exercice 1: Écrire un programme Java pour afficher le message «Hello
World». Utiliser la méthode [Link]() pour afficher un argument
qui lui est transmis
public class Main {
public static void main(String[] args) {
[Link]("Hello world");
}
}
47
Exercices
Exercice 2: Écrire un programme Java pour calculer la somme de deux
nombres et l’afficher
public class Main {
public static void main(String[] args) {
[Link]( 10+ 5);
}
}
48
Exercices
Exercice 3:Écrire un programme Java pour calculer le résultat de la division
de deux nombres et l’afficher
public class Main {
public static void main(String[] args) {
[Link](10 / 5);
}
}
49
Exercices
Exercice 4: Écrire un programme Java qui prend un nombre en entrée et affiche sa table de multiplication
jusqu’à 100
import [Link];
public class Exercice4 {
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
[Link]("Entrer un nombre: ");
int n = [Link]();
for (int i=0; i<100; i++){
[Link](n + " x " + (i+1) + " = " + (n * (i+1)));
}
}
}
50
Exercices
Exercice 5: Écrire un programme Java pour calculer l’aire et le périmètre d’un cercle et
l’afficher
public class Exercice5 {
public static void CalculerAirePerimetre(double rayon){
double perimeter = 2 * [Link] * rayon;
double aire = [Link] * rayon * rayon;
[Link]("Le périmètre est = " + perimeter);
[Link]("L'aire est = " + aire);
}
public static void main(String[] args) {
CalculerAirePerimetre(4.2);
}
}
51
Exercices
Exercice 6: Écrire un programme Java qui prend 4 nombres en entrée pour
calculer et afficher la moyenne de ces nombres
52
Exercices
import [Link];
public class Exercice6 {
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
[Link]("Entrer le premier nombre: ");
int nbr1 = [Link]();
[Link]("Entrer le deuxième nombre: ");
int nbr2 = [Link]();
[Link]("Entrer le troisième nombre: ");
int nbr3 = [Link]();
[Link]("Entrer le quatrième nombre: ");
int nbr4 = [Link]();
[Link]("La moyenne est: "+ (float) (nbr1 + nbr2 + nbr3 + nbr4) /4 );
}
}
53
Exercices
Exercice 7: Écrire un programme Java pour permuter deux variables
54
Exercices
public class Exercice7 {
public static void main(String[] args) {
int a, b, tmp;
a = 100;
b = 50;
[Link]("Avant la permutation: a = "+a+", b = "+b);
tmp = a;
a = b;
b = tmp;
[Link]("Après la permutation: a = "+a+", b = "+b);
}
}
55
Exercices
Exercice 8: Écrire un programme Java qui calcule la factorielle d’un nombre
donné
56
Exercices
public class Exercice8 {
static int calculerFactorielle(int n) {
if(n > 0) { // cas général
return n * calculerFactorielle (n-1); }
else { //cas de base ou d’arrêt
return 1; }
}
public static void main (String[] args) {
int valeur = 4;
[Link](calculerFactorielle(valeur));
}
}
57
Exercices
Exercice 9: Écrire un programme Java pour calculer la diagonale, l’aire et le
périmètre d’un rectangle et l’afficher
58
Exercices
public class Exercice9 {
public static void CalculerAirePerimetre(double L, double l){
double perimeter = (L+l) *;
double aire =L*l;
double diagonale = [Link](L*L + l*l);
[Link]("Le périmètre est = " + perimeter);
[Link]("L'aire est = " + aire);
[Link]("La diagonale est = " + diagonale);
}
public static void main(String[] args) {
CalculerAirePerimetre(12.5,85);
}
}
59