Vous êtes sur la page 1sur 42

Programmation Orientée Objet

Dr. Sana HAMDI


sana.hamdi@fst.utm.tn
Sana.Hamdi@insat.u-carthage.tn

2018-2019
2

Sana Hamdi 06/10/2


018

Syntaxe et structures de contrôle


3

Sana Hamdi 06/10/2


018

• Éléments de base du langage Java

• Les structures de contrôle


4

Sana Hamdi 06/10/2018

Éléments de base du langage Java


5

Sana Hamdi 06/10/2018

Les commentaires
• Trois notions sont admises pour l ’insertion de commentaires:
 // commentaire sur une seule ligne
 /* commentaire sur une ou plusieurs lignes */
 /** commentaire d ’explication */

• Les commentaires d’explication sont des commentaires


sur plusieurs lignes permettant de générer automatiquement
une documentation avec l’utilitaire javadoc (générateur
automatique de document)

• Exemple: int i; // i est un entier


6

Sana Hamdi 06/10/2018

Vocabulaires Objet…
• Tout objet sauf :

Les types primitifs (int, float,…)

• Les chaînes sont des objets

• Il existe pour chaque type simple, une vision objet

nomméé enveloppeur (classe Integer, Float, ..)


7

Sana Hamdi 06/10/2018

Point virgule, blocs et blancs

• Dans Java, les instructions se terminent par un point virgule (;)

• Un bloc d’ instructions est délimité par des accolades { et }

• Les blancs sont autorisés entre les éléments du code source


(espaces, tabulations et sauts de ligne)
{
int x;
x= 5*8;
}
8

Sana Hamdi 06/10/2018

Identificateurs
• Les identificateurs permettent de nommer les différents éléments
(variables, constantes, classe, méthodes, packages,…) des
programmes Java
• Un identificateur commence par une lettre, un trait de
soulignement ( _) ou un signe dollar ($)
• Après le premier caractère, il peut contenir n’importe quelle
combinaison de lettres, dollar "$", caractère de soulignement "_",
ou des chiffres.
• les caractères Unicode supérieurs à 0x00c0, permettent d’introduire
dans les identificateurs des caractères internationaux tels que ç, ü,…
• Les identificateurs opèrent une distinction majuscules/minuscules
et n’ont pas de longueur maximale
9

Sana Hamdi 06/10/2018

Identificateurs
• Exemple:
 $valeur-système // identificateur valide
 ça // identificateur non valide (ç premier caractère)
 note# // identificateur non valide (contient # au dessous de0x00c0)

• On ne peut pas utiliser un mot-clé comme un identifiant dans vos programmes.


Voici ci-dessous la liste complète des mots-clés disponibles.
abstract boolean break byte
switch case catch char
class final continue default
do double else extends
false finally float for
transient if implements import
instanceof int interface long
native new null package
private protected public return
short static super synchronized
this throw throws true
try void while
10

Sana Hamdi 06/10/2018

Conventions de Codage
• Classes ou Interfaces : la première lettre de l’identificateur d’une classe
doit conventionnellement être en majuscule

• Méthodes ou Variables : la convention de nommage indique que la


première lettre du mot doit être en minuscule

• Constantes : la convention de nommage indique que leur nom doit être en


majuscule

• Autres conventions
o Structure de contrôle : utilisez des ({ et }) autour des instructions, même s’il s ’agit
d’une seule, lorsqu’elles font partie d ’une structure de contrôle, telle que if-else ou for.

o Placez une seule instruction par ligne, et utilisez une indentation pour que le code soit
plus lisible.
11

Sana Hamdi 06/10/2018

Les types de données


• Java est un langage fortement typé : chaque variable et

chaque expression possède un type bien défini.

• Les types de données de Java sont divisés en deux grands

groupes:

o Les types primitifs (ou de base) : boolean, int, short, byte, float,

long, double, char

o Le type référence : chaîne de caractères (String),tableau ou classe


12

Sana Hamdi 06/10/2018

Les types primitifs


Taille en Valeur par
Type primitif Représentation
octets défaut
boolean Non spécifié false true / false
char 2 '\u0000' Entre '\u0000' et '\uffff'
byte 1 0 [-27;27-1]
short 2 0 [-215;215-1]
int 4 0 [-231;231-1]
long 8 0L [-263;263-1]
float 4 0f Entre -3,4.1038 et 3,4.1038
double 8 0d Entre -1,7.10308 et 1,7.10308
13

Sana Hamdi 06/10/2018

Variables, déclarations et affectations


• L’utilisation d’une variable dans Java doit toujours être précédée par la
déclaration de celle-ci.

• Le compilateur va utiliser les informations associées à la déclaration de la


variable pour effectuer des vérifications: compatibilité de type dans les
expressions, visibilité de la variable,…

• La déclaration d’une variable s’effectue en préfixant le nom de la variable par


son type: int i ;

• On peut préciser (d’une façon optionnelle) un modificateur (qualifier) à une


variable:
Le modificateur final : précise que la valeur de la variable ne pourra plus être
changée après son affectation initiale: final float f=0.25;

• Le type d ’une variable est soit un type de base (int, float….), soit une
référence (type class, défini par le programmeur)
14

Sana Hamdi 06/10/2018

Opérateurs
• Les opérateurs sont des symboles qui permettent de
manipuler des variables, c'est-à-dire effectuer des
opérations, les évaluer, ...
• On distingue plusieurs types d'opérateurs :
o les opérateurs de calcul
o les opérateurs d'assignation
o les opérateurs d'incrémentation
o les opérateurs de comparaison
o les opérateurs logiques
o les opérateurs bit-à-bit
o les opérateurs de rotation de bit
15

Sana Hamdi 06/10/2018

Opérateurs de calcul
Ils permettent de modifier mathématiquement la valeur d'une variable.
Opérateur Dénomination Effet Exemple Résultat (int x=7)

+ opérateur Ajoute deux valeurs x+3 10


d'addition
- opérateur de Soustrait deux valeurs x-3 4
soustraction
* opérateur de Multiplie deux valeurs x*3 21
multiplication
/ opérateur de Calcul le quotient de la x/3 2
division division de deux valeurs
% opérateur de Calcul le reste de la division x%3 1
congruence de deux valeurs
= opérateur Affecte une valeur à une x=3 Met la valeur 3 dans
d'affectation variable la variable x
16

Sana Hamdi 06/10/2018

Opérateurs d’assignation
• Ces opérateurs permettent de simplifier des opérations telles que ajouter
une valeur dans une variable et stocker le résultat dans la variable.
• Une telle opération s'écrirait habituellement de la façon suivante par
exemple: x=x+2.
• Avec les opérateurs d'assignation, il est possible d'écrire cette opération
sous la forme suivante: x+=2. Ainsi, si la valeur de x était 7, elle sera 9.

Opérateur Effet
+= addition deux valeurs et stocke le résultat dans la variable
-= soustrait deux valeurs et stocke le résultat dans la variable
*= multiplie deux valeurs et stocke le résultat dans la variable
/= divise deux valeurs et stocke le quotient dans la variable
%= divise deux valeurs et stocke le reste dans la variable
17

Sana Hamdi 06/10/2018

Opérateurs d’incrémentation
• Ce type d'opérateur permet de facilement augmenter ou diminuer d'une
unité une variable. Ces opérateurs sont très utiles pour des structures telles
que des boucles, qui ont besoin d'un compteur.
• Un opérateur de type x++ permet de remplacer des notations lourdes telles
que x=x+1 ou bien x+=1
• Exemple pour x=7
o int y=x++; y est initialisé à 7, puis x est incrémenté à 8
o int y=++x; x est incrémenté à 8, puis y est initialisé à 8

Opérateur Dénomination Effet Syntaxe Résultat


(Int x=7)
++ Incrémentation Augmente d'une x++ ou ++x 8
unité la variable
-- Décrémentation Diminue d'une x-- ou --x 6
unité la variable
18

Sana Hamdi 06/10/2018

Les opérateurs de comparaison


Dénomination Effet Exemple Résultat

== opérateur d'égalité Compare deux valeurs et vérifie leur x==3 Retourne true si x est égal
égalité à 3, sinon false
< opérateur Vérifie qu'une variable est x<3 Retourne true si x est
d'infériorité stricte strictement inférieure à une valeur inférieur à 3, sinon false
<= opérateur Vérifie qu'une variable est inférieure x<=3 Retourne true si x est
d'infériorité ou égale à une valeur inférieur ou égal à 3,
sinon false
> opérateur de Vérifie qu'une variable est x>3 Retourne true si x est
supériorité stricte strictement supérieure à une valeur supérieur à 3, sinon false
>= opérateur de Vérifie qu'une variable est x>=3 Retourne true si x est
supériorité supérieure ou égale à une valeur supérieur ou égal à 3,
sinon false
!= opérateur de Vérifie qu'une variable est différente x!=3 Retourne true si x est
différence d'une valeur différent de 3, sinon false
19

Sana Hamdi 06/10/2018

Les opérateurs logiques


• Ce type d'opérateur permet de vérifier si plusieurs conditions
sont vraies :

Dénomination Effet Syntaxe


|| OU logique Retourne true si au moins une des condition1 ||
deux conditions condition2
vaut true (ou false sinon)
&& ET logique Retourne true si les deux condition1 &&
conditions condition2
valent true (ou false sinon)
! NON logique Retourne true si la variable !condition
vaut false, et false si elle vaut true)
20

Sana Hamdi 06/10/2018

Les opérateurs bit-à-bit


• Ce type d'opérateur traite ses opérandes comme des données binaires,
plutôt que des données décimales, hexadécimales ou octales. Ils traitent
ces données selon leur représentation binaire mais retournent des
valeurs numériques standards dans leur format d'origine.
Dénomination Effet Syntaxe Résultat
& ET bit-à-bit Retourne 1 si les deux bits 9 & 12 (1001 & 1100) 8 (1000)
de même poids sont à 1
| OU inclusif Retourne 1 si l'un ou 9 | 12 (1001 | 1100) 13 (1101)
l'autre des deux bits de
même poids est à 1 (ou
les deux)
^ OU exclusif Retourne 1 si l'un des 9 ^ 12 (1001 ^ 1100) 5 (0101)
deux bits de même poids
est à 1 (mais pas les deux)
21

Sana Hamdi 06/10/2018

Les opérateurs de décalage


• Ils effectuent des décalages sur les bits, c'est-à-dire qu'ils décalent chacun des bits
d'un nombre de bits vers la gauche ou vers la droite. La première opérande désigne la
donnée sur laquelle on va faire le décalage, la seconde désigne le nombre de bits
duquel elle va être décalée.
Dénomination Effet Syntaxe Résultat

<< Décalage à Décale les bits vers la gauche (multiplie 6 << 1 12 (1100)
gauche par 2 à chaque décalage). Les bits qui (110 << 1)
sortent à gauche sont perdus, tandis
que des zéros sont insérés à droite
>> Décalage à droite Décale les bits vers la droite (divise par 6 >> 1 3 (0011)
avec conservation 2 à chaque décalage). Les bits qui (0110 >> 1)
du signe sortent à droite sont perdus, tandis que
le bit non-nul de poids plus fort est
recopié à gauche
>>> Décalage à droite Décale les bits vers la droite (divise par 3 >>> 1 1 (0001)
avec remplissage 2 à chaque décalage). Les bits qui (0011 >>> 1)
de zéros sortent à droite sont perdus, tandis que
des zéros sont insérés à gauche
22

Sana Hamdi 06/10/2018

Opération de transtypage
• Transtypage (cast) : (typeCast) expression

• Cette opération permet de convertir le type de l’expression en


typeCast.

• L’opération peut diminuer la généralité (downcasting) du type avec


un risque de perte d’informations. Elle peut également augmenter la
généralité (upcasting) du type (sans aucun risque).

• Du moins général au plus général (pour les types primitifs), on a :

byte  short  int  long  float  double


23

Sana Hamdi 06/10/2018

Cast implicite
• Lors d’une affectation, une opération de upcasting implicite peut avoir lieu

(lorsque la partie droite de l’affectation est d’un type moins général).

• Par exemple, lors de l’évaluation de :

double x = 15;

• la valeur entière 15 est transformée automatiquement en la valeur réelle

(double) 15.0 avant d’être affectée à la variable x.


24

Sana Hamdi 06/10/2018

Cast explicite
• Lors de certaines opérations, il est parfois nécessaire d’utiliser
explicitement une opération de transtypage.
• Par exemple, l’exécution de :
int x=3, y=2;
double z = x/y;
affecte la valeur 1.0 à z
• Pour que la valeur 1.5 soit affectée à z, il faut :
double z = (double) x/y;
afin de convertir x en double et que la division soit ainsi une division
réelle.
25

Sana Hamdi 06/10/2018

Instruction
 Une instruction est une seule commande.

 Une commande peut occuper plusieurs lignes de code, mais le


compilateur lit l’ensemble comme une seule commande.

 Les instructions individuelles (habituellement sur une seule


ligne) se terminent par un point-virgule (;)

 Les groupes d’instructions (sur plusieurs lignes) se délimitent


par des accolades
26

Sana Hamdi 06/10/2018

Instruction
 Les règles de portée déterminent où est reconnue une variable dans un
programme. Les variables appartiennent à deux catégories de portée
principales:
 Variables globales : Variables reconnues dans toute une classe.
 Variables locales : Variables reconnues uniquement dans le bloc de
code où elles sont déclarées.
 Une variable déclarée dans un bloc de code n’est visible que dans ce
bloc et dans les blocs qui y sont imbriqués.

class Portée { void méthode2( ) {


int x = 0; int z = 1;
void méthode1( ) { z = y; // Cela ne fonctionne pas :
int y = x; // y est définie hors de la portée de méthode2.
} }
}
27

Sana Hamdi 06/10/2018

Bloc d'instructions
• Un bloc d'instructions est une séquence d'instructions délimitée par une

paire d'accolades.

• Il est possible de déclarer des variables dans un bloc.

• La portée (visibilité) d'une variable commence à sa déclaration jusqu'à la fin

du bloc.
28

Sana Hamdi 06/10/2018

Exemple
{ Bloc externe
int i;
… i
{
int j=0; Bloc interne
… j
double x = 3.5;

x
}
}
29

Sana Hamdi 06/10/2018

Variables homonymes
• En Java, il n'est pas possible déclarer des variables

homonymes dans deux blocs imbriqués.

• En C/C++, il est possible de le faire :

▫ La variable interne cache la variable externe

▫ Cela constitue une source d'erreur 


30

Sana Hamdi 06/10/2018

Exemple
{ Bloc externe
int i;
… conflit i
{
int i=0; conflit Bloc interne
i
… x
double x = 3.5;

}
}
31

Sana Hamdi 06/10/2018

Les types de données: tableau


 Tableau : est un objet référencé

 Une variable de type tableau n’est pas un type élémentaire (c’est une
référence sur un tableau)

 Déclaration
 type NomTableau[ ] \\ ou type [] NomTableau
 type NomTableau[ ][ ]

 Allocation et initialisation
 int T1[ ]=new int[12];
 int T2[ ]={5,7,-12,8};

 L’attribut length : retourne la taille d’un tableau


32

Sana Hamdi 06/10/2018

Les types de données: tableau


 Allocation et initialisation

int T1 [ ] = new int [12]; \\ allocation dynamique de 12 entiers pour T1

T1
0 0 0 0 0 0 0 0 0 0 …
33

Sana Hamdi 06/10/2018

Les types de données: tableau


Exemple Résultat d’exécution
Class Tableau1D 1
{
2
public static void main(String[] args){
int[] tabent={1,2,3}; 3
for (int i=0; i<tabent.length;i++){
System.out.println(tabent[i] + “ “ ); 0
}
System.out.println ();
0
int[] tab2ent= new int [5]; 20
boolean [] tbool= new boolean[3]; 0
tab2ent[2]=20; tab2ent[4]=50;
50
for (int i=0; i<tab2ent.length;i++){
System.out.println(tab2ent[i] + “ “ );
} false
for (int i=0; i<tbool.length;i++){ false
System.out.println(tbool[i] + “ “ );}
}
false
}
34

Sana Hamdi 06/10/2018

Les types de données: tableau d’objets


 Déclaration identique
 Balle [ ] TabBalle = new Balle[6]; \\ un tableau d’éléments pouvant
référencer 6 objets de type Balle
 La déclaration du tableau ne crée pas les objets référencés
TabBalle
null null null null null null

 Lesréférences des objets crées doivent être affectés au tableau par la suite
TabBalle[0] = new Balle(4);

TabBalle[1] = new Balle(6);

…
35

Sana Hamdi 06/10/2018

Les structures de contrôle


36

Sana Hamdi 06/10/2018

La structure conditionnelle if
 if (Expr) S1; else S2;

 L’instruction S1 est exécutée si l’expression logique Expr est évaluée à vraie.

 L’instruction S2 est exécutée si l’expression logique Expr est évaluée à fausse

Exemple

static intexemple(inti) {
if (i<10) return i* 100;
else return i* 10;
}
37

Sana Hamdi 06/10/2018

La structure conditionnelle switch


Syntaxe Exemple

switch (Expr1) int note = 10; //la note maximale est 20

{ switch (note)
case constante_1: statements_1; {
case 0: System.out.println("Ouch !");
break;
case constante_2: statements_2 break;

break; case 10: System.out.println("juste la moyenne.");



break;
case constante_N: statements_N;
case 20: System.out.println("Parfait !");
break;
default: statements_default; break;

} default: System.out.println("Il faut travailler.");


}
38

Sana Hamdi 06/10/2018

Les structures itératives while and do .. while


Syntaxe Exemple While
 while (condition) public class WhileTest
{
Bs; //une ou un bloc public static void main(String
args[])
d’instructions {
double r = 0;
 do S1 while (condition); while (r < 0.99)
{
// Exécuter S1 tant que r = Math.random();
System.out.println(r);
l’expression condition est }
}
vraie }
39

Sana Hamdi 06/10/2018

La structure itérative for


Syntaxe Exemple

 for (e1; e2; e3) /** * montre la boucle for" en


listant tous les caractères
Bs; ASCII */

 e1 : initialise l’itérateur (compteur), cette public class ListCharacters


{
expression n’est exécutée qu’une seule fois; public static void main(String args[])
{
 e2 : exprime la condition de test (tant for ( char c = 0; c < 128; c++ )

qu’elle est vraie on continue la boucle) ; if (c != 26 )

elle est vérifiée à chaque itération System.out.println( "value: " +


(int)c + " character: " + c );
 e3 : modifie l’itérateur, elle est exécutée à }
}
chaque itération
40

Sana Hamdi 06/10/2018

Etiquette, break, continue et return


boucle1:
 Etiquette : N’importe quelle qu’elle instruction for (int i=0; i<10; i++){
peut être étiquetée. for (int j=0; j<15 j++){
Nom_etiquette: bloc d’instruction; System.out.println(i+“/“+j);
}}
 Rupture
break ; class TestBreak {
break label; public static void main (String args[]){
bloc1:
 Continuation for (int i=0; i<10; i++){
continue; for (int j=0; j<10; j++){
continue label; System.out.println(i+“/“+j);
if (j==1) break; // quitte la boucle j
 Retourner if (i==2) break bloc1; // quitte bloc1
return; }}}}
return Expression;
41

Sana Hamdi 06/10/2018

Etiquette, break, continue et return


// BreakAndContinue.java
/** les clauses break et continue */ Résultat :
0
public class BreakAndContinue
{ 9
public static void main(String args[]) 18
{ 27
for(int i = 0; i < 100; i++)
{
36
if(i == 74) break; // quitter boucle 45
if(i % 9 != 0) continue; // iter.suiv. 54
System.out.println(i); 63
}
int i = 0; // 72
while(true) { 10
i++; 20
int j = i * 27;
30
if(j == 1269) break; // quitter boucle
if(i % 10 != 0) continue; 40
System.out.println(i);
}
}
}
Merci pour votre attention !

Dr. Sana Hamdi

Maitre Assistante en Informatique à l’INSAT

Membre du Laboratoire LIPAH (FST-Tunisie)


et du Laboratoire SAMOVAR (Telecom SudParis-France)