NOTIONS DE BASE DU
LANGAGE JAVA
(PARTIE 1)
Plan
2
Introduction
Variable, valeur constante, conversion en Java
Opérateurs
Structure de contrôle
Manipulation des types primitifs, les tableaux, les chaînes de
caractères,
passage des paramètres
Notion d‟objets et de classes
Héritage
Interface
Polymorphisme
Paquetage
Petit historique du langage Java
3
On peut faire remonter la naissance de Java à 1991.
Java fondé sur le concept de machine virtuelle
Traduire un programme source, non pas directement en langage
machine, mais
dans un pseudo langage universel
Ce code intermédiaire (formé de byte codes), se
trouve ainsi compact et portable sur
n‟importe quelle machine
Cours POO/JAVA
Une de ses plus grandes forces est son excellente portabilité : une fois
votre programme créé, il fonctionnera automatiquement sous
Windows, Mac, Linux, etc.
On peut faire de nombreuses sortes de programmes avec Java :
- des applications, sous forme de fenêtre ou de console ;
- des applets, qui sont des programmes Java incorporés à des pages
web ;
- des applications pour appareils mobiles, avec J2ME , android;
- et bien d'autres ! J2EE, JMF, J3D pour la 3D...
Langage java
4
C‟est un langage orienté objet
Il est compilé en bytecode
Le bytecode est un code intermédiaire indépendant de la
machine
Cours POO/JAVA
Il est interprété
Le bytecode est interpété par une machine virtuelle Java
Premier exemple : HelloWord
5
Dans un fichier de nom
HelloWorld.java public class
HelloWorld {
/* Un style de
commentaire sur
plusieurs lignes. */
public static void
Cours POO/JAVA
main(String[] args) {
// Un commentaire sur une seule ligne
System.out.println("Bonjour à vous les
IR1!");
}
}
NB: toute classe publique doit être dans un fichier qui a le même nom
que la classe
Ce fichier définit une classe, qui est une unité de compilation,
étant donné qu‟il y a une méthode main, cette classe est «
exécutable »
Compilation et Exécution
6
(Java Virtual Machine)
Cours POO/JAVA
B. NGOM
Le bytecode
7
Le code source d'une classe contenue dans un
fichier est compilé avec la commande javac
Cela produit un code intermédiaire(extension.class),
appelé bytecode, qui est le langage machine de la
machine virtuelle Java
Le bytecode d'une classe est destiné à être chargé par
Cours POO/JAVA
une machine virtuelle qui doit l'exécuter avec la
commande java
Ce bytecode peut être exécuté sous de nombreux
systèmes d‟exploitation par une machine virtuelle
Java.
B. NGOM
Machine Virtuelle Java (JVM)
8
La machine virtuelle Java ou JVM (Java Virtual Machine) est
un environnement d'exécution pour applications Java.
Elle exécute des programmes compilés.
C'est un des éléments les plus importants de la plate-forme
Java.
Cours POO/JAVA
Elle assure l'indépendance du matériel et du système
d'exploitation lors de l'exécution des applications Java.
Une application Java ne s'exécute pas directement dans le
système d'exploitation mais dans une machine virtuelle qui
s'exécute dans le système d'exploitation et propose une
B. NGOM
couche d'abstraction entre l'application Java et ce
système.
Java : langage et plateforme
9
Il existe plusieurs éditions, selon la plateforme java considérée:
Java SE (Java Platform, Standard Edition): Java SEpour
applications classiques, desktop
Java EE (Java Platform, Enterprise Edition): Java EE pour
développer
Cours POO/JAVA
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.
B. NGOM
Plateforme Java
10
La plateforme java utilise un ensemble de bibliothèques,
programmes et d‟outils. Cet ensemble de
contient :
Le kit de développement Java
(JDK)
L‟environnement d‟exécution
(JRE)
Cours POO/JAVA
La machine virtuelle java (JVM)
B. NGOM
JDK / JVM / JRE
11
JDK (Java Developpement Kit) = un ensemble d‟outils et
programmes pour développer, compiler, déboguer et
exécuter un programme en java. Il contient également un
environnement d‟exécution de java (JRE)
JVM (Java Virtual Machine) = un programmequi
permet
Cours POO/JAVA
d‟interpréter le programme java crée avec le JDK
JRE (Java Runtime Execution) = un ensemble d‟outils et de
programmes nécessaires pour exécuter un programme java
(déjà compilé)
B. NGOM
Installation Java
12
Installer JDK (exemple: JDK 8).
Plateforme Java (exemple: Eclipse indigo SE).
Vérification de l‟installation Java (java -version).
NB: Chaque fois que le développeur télécharge un JDK, celui-ci
inclut un JRE compatible avec la version, et ce JRE comprend
lui-même un JVM par défaut.
Cours POO/JAVA
B. NGOM
Compilation et exécution
13
Compilation (commande javac) =>
Fichier.class Exécution (commande java)
=> package.Fichier
Cours POO/JAVA
B. NGOM
Langage java
14
Les variables,les opérateurs, les expressions,
instructions, blocs,
contrôle de flot sont très proches de ceux du C
Les exceptions sont une nouveauté
Les types primitifs ont une taille et une représentation
normée
Cours POO/JAVA
Il y a des spécificités syntaxiques liées à la
programmation objets, aux classes, à l'héritage...
Un style de nommage (très fortement) conseillé
B. NGOM
Première majuscule pour les classes (class HelloWorld)
Première minusculepour les variableset les méthodes
(nom, getNom())
Tout en majuscule pour les constantes (MAX_SIZE)
Plan
15
Introduction
Variable, valeur constante, conversion en Java
Opérateurs
Structure de contrôle
Manipulation des types primitifs, les tableaux, les chaînes de
caractères,
passage des paramètres
Notion d‟objets et de classes
Héritage
Interface
Polymorphisme
Paquetage
Les variables en Java
16
Les variables locales comme les champs des classes et des objets
ne peuvent être
que de deux natures:
De type « primitif »
La déclaration de la variable réserve la place mémoire pour stocker sa
valeur (qui dépend de son type)
Exemple: int entier; long entierLong;
Cours POO/JAVA
De
1 typeLe
« référence » comprennent
type tableau deux
qui est un type sous-catégories
prédéfini;
)
2 Les types des objets. Ils pourront être prédéfinis (ex: String)
)
par ouledéfinis
programmeur. La déclaration de la variable de type
«objet» ne fait que réserver la place d'une référence (une sorte de
pointeur) qui permettra d‟accéder à l‟endroit en mémoire où est
B. NGOM
effectivement stocké l'objet en lui même (vaut null si référence
inconnue)
Exemple:
Pixel p1; p1=new Pixel(1,3);
Type primitif
17
Types entiers signés
byte (octet) sur 8 bits
short sur 16 bits
int sur 32 bits
long sur 64 bits
Type caractère non signé
char sur 16 bits
Cours POO/JAVA
Types à virgule flottante
float sur 32 bits
double sur 64 bits
Type booléen: boolean (true
B. NGOM
ou false)
B. NGOM Cours POO/JAVA
Type Fondamentaux
Valeur constante
19
Une constante est une variable finale, c‟est-`a-dire une
variable non
modifiable.
Pour signalerqu'unevariableest une constante, on
utilise le mot réservé final lors de sa déclaration :
Cours POO/JAVA
final int VAL = 6;
Le compilateur indique donc qu‟on ne peut pas donner une
valeur à
une constante.
B. NGOM
Message d‟erreur: « cannot assign a value »
Valeur littérale
20
Un littéral est une valeur explicite utilisée dans
le
code source d'un programme .
On peut représenter les entiers simplementen donnant
leur valeur sous forme décimale, binaire, octale ou
hexadécimale.
Cours POO/JAVA
Les littéraux de type numériques
Les littéraux sont pardéfaut de type int. Un
littéralpeut être rendu de type long en le suffixant avec l ou
L.
B. NGOM
Exemple:
12345 est de type int
12345L est de type long
Valeur littérale
21
Pour les valeurs numériques, voiciune
récapitulation des règles
appliquées :
Cours POO/JAVA
On remarque que les modificateurs d et f peuvent
s‟appliquer aux entiers et les faire considérer comme des
doubles ou des floats (un entier est un cas particulier de réel)
B. NGOM
Exemple
Conversion des types
22
Java est très strict du point de vue des données et il est parfois
intéressant de convertir une donnée d'un type primitif vers
un autre type primitif.
Cours POO/JAVA
B. NGOM
Conversion implicite /
23
Compatibilité des types
Types numériques
Il est toujours possible de placer un entier de “petite taille”
dans un entier plus grand (par exemple un entier de type int
dans une variable de type long).
De façon générale, il est impossible de faire des affectations
dans l‟autre sens, comme par exemple placer le contenu
Cours POO/JAVA
d‟une variable de type int dans une variable de type byte.
Les types numériques sont donc rangés dans l‟ordre suivant
: byte <
short < int < long < float < double
B. NGOM
Conversion implicite /
24
Compatibilité des types
Cas 1 => Correct
Cas 2 => Erreur de compilation
Cours POO/JAVA
Maintenant, si on avait le contraire, c'est-à-dire une
conversion par
B. NGOM
affectation du type float vers le type int. Dans ce cas, on
aurait eu une erreur de compilation puisque cette
conversion est avec perte d'information.
Conversion implicite /
25
Compatibilité des types
Le type boolean est compatible seulement avec lui-
même. Cela signifie qu‟il est strictement
impossible de placer une valeur de type boolean
dans une variable d‟un type autre que boolean.
Cours POO/JAVA
=> erreur
B. NGOM
Conversion explicite / implicite
26
La conversion est réalisé via l‟un des 2 mécanismes:
conversion implicite ou conversion explicite.
Les conversions qu'on vient de voir se font de manière
implicite, automatiquement.
Conversion implicite:Les conversions automatiques sont possible
seulement lorsque le compilateur sait que la variable s
destination est assez grande.
Exemple:
Cours POO/JAVA
pour réaliser l‟addition, les deux opérandes doivent avoir le
même format. x = 3 + 2.5;
Conversion explicite:le programmeur indique explicitement
la conversion qu‟il
souhaite réaliser.
Exemple: conversion de 2.5 vers int. En mémoire
x = 5. x = 3 + (int) 2.5;
B. NGOM
Compatibilité des types
28
On peut placer une valeur de type char dans une variable de
type int (et donc dans une variable d‟un type “plus grand” que int).
Le type char est compatible avec tous les types numériques
(int, double, etc.);
Pour les types primitifs (char), on parle de conversion
implicite char < int
Conversions explicites entre types numériques et char:
Exemple : (char) 97 ⇒ ‟a‟
Cours POO/JAVA
(int) ‟+‟ ⇒
43 char a
= „a‟;
a = (char)
B. NGOM
(a+1);
Cependant, il est impossible de placer une valeur entière
classique dans un char car les autres types entiers peuvent
prendre des valeurs négatives.
Compatibilité des types
29
On peut se servir des caractères comme
entiers :
Exemple:
int trois =
3; char un
Cours POO/JAVA
= ‟1‟;
char
quatre =
(char)
B. NGOM
(trois +
un);
quatre :
‟4‟.
un a été
converti à
int dans
Exemple
30
Plan
31
Introduction
Variable, valeur constante, conversion en Java
Opérateurs
Structure de contrôle
Manipulation des types primitifs, les tableaux, les chaînes de
caractères,
passage des paramètres
Notion d‟objets et de classes
Héritage
Interface
Polymorphisme
Paquetage
Opérateur logique
32
La valeur de vérité d‟une expression logique est
vrai ou
faux. Une telle valeur est de type booléen
(boolean).
Pour former des expressions logiques, on
Cours POO/JAVA
dispose d‟opérateurs de comparaison.
Les principaux opérateurs sont les suivants
B. NGOM
Opérateur arithmétique
33
Les opérateurs
arithmétiques
Cours POO/JAVA
B. NGOM
Opérateurs d'incrémentation et
34
de décrémentation
L'opération d'incrémentation ( ++ ) est un opérateur
unaire qui ne peut être appliqué qu'à des
variables. Il va modifier la valeur de la variable
sur laquelle il est appliqué, en lui ajoutant 1.
Il y a également un opérateur de décrémentation
Cours POO/JAVA
( -- ) qui fonctionne comme l'opérateur
d'incrémentation, sauf que son effet de bord
consiste à retirer 1 de la variable sur laquelle il
est appliqué.
B. NGOM
Opérateurs d'incrémentation et
35
de décrémentation
Les deux opérateurs (++ et --) existent sous deux formes.
la forme suffixe de l'opérateur; celui-ci étant placé après la
variable.
la forme préfixe, c'est-à-dire qu'on les place avant la
variable.
Cours POO/JAVA
B. NGOM
Opérateurs d'incrémentation et
36
de décrémentation
Les deux opérateurs (++ et --) existent sous deux formes.
la forme suffixe de l'opérateur; celui-ci étant placé après la
variable.
la forme préfixe, c'est-à-dire qu'on les place avant la
variable.
Cours POO/JAVA
B. NGOM
Plan
37
Introduction
Variable, valeur constante, conversion en Java
Opérateurs
Structure de contrôle
Manipulation des types primitifs, les tableaux, les chaînes de
caractères,
passage des paramètres
Notion d‟objets et de classes
Héritage
Interface
Polymorphisme
Paquetage
Structure de contrôle
38
Il existe trois catégories :
les instructions conditionnelles (if-else ,
switch);
les instructions répétitives (while, do et for);
Cours POO/JAVA
les instructions de permettent de faire un saut
un point précis du programme
branchement: depuis
vers autre endroit (Il
un break, continue qui sont utilisés avec
a y boucles
également
les et
return)
B. NGOM
Structure conditionnelle:
39
Syntaxe if
La condition est une expression booléenne et elle
est dite vérifiée si sa valeur est true
Cours POO/JAVA
B. NGOM
Structure conditionnelle:
39
Syntaxe if - else
La condition est une expression booléenne et elle
est dite vérifiée si sa valeur est true
Cours POO/JAVA
B. NGOM
Structure conditionnelle:
39
Syntaxe switch
La condition est une expression booléenne et elle
est dite vérifiée si sa valeur est true
Cours POO/JAVA
B. NGOM
Opérateur conditionnel (plus court)
42
L‟instruction if-else correspondante calcule
exactement la même chose :
Cours POO/JAVA
B. NGOM
Instruction répétitive: While
43
L'instruction while permet de répéter une instruction ou un
bloc de
code tant qu'une condition est vraie.
La condition est une expression booléenne, comme
pour l'instruction if-else.
Cours POO/JAVA
B. NGOM
Instruction répétitive: While
44
Boucle infinie
Lorsqu'on utilise des boucles, il faut faire très attention aux
boucles
infinies.
Comme le nom le suggère, il s'agit de boucles dont le corps
est exécuté un nombre infini de fois. La condition est
Cours POO/JAVA
toujours vérifiée et la boucle ne s'arrête donc jamais de
s'exécuter.
B. NGOM
Syntaxe do - while
45
L'instruction do -while est similaire à l'instruction while sauf pour
ce qui est de l'ordre dans lequel les choses sont exécutées.
Le corps de la boucle est d'abordexécuté,puis la condition
est
évaluée.
Cours POO/JAVA
Le corps de la boucle sera exécuté au moins une fois dans
tous les
cas.
B. NGOM
45
B. NGOM Cours POO/JAVA
Syntaxe For
Instruction continue
47
L'instruction continue, utilisable uniquement dans les boucles,
permet d'arrêter l'exécution de l'itération en cours et de
passer directement à la suivante.
Dans le cas des boucles while et do, on revient directement à
la
vérification de la condition
Cours POO/JAVA
B. NGOM
Instruction continue
48
L'instruction continue, utilisable uniquement dans les boucles,
permet d'arrêter l'exécution de l'itération en cours et de
passer directement à la suivante.
Dans le cas des boucles while et do, on revient directement à
la
vérification de la condition
Cours POO/JAVA
B. NGOM
Instruction break
49
L'instruction break a en fait pour effet de directement
quitter le switch ou la boucle et de poursuivre le programme à
l'instruction suivante.
Voici un exemple de programme qui affiche les entiers de 1 à
5 et qui utilise l'instruction break
Cours POO/JAVA
B. NGOM
Plan
50
Introduction
Variable, valeur constante, conversion en
Java
Opérateurs
Structure de contrôle
Manipulation des types les tableaux, les chaînes de
primitifs,
caractères, passage des paramètres
Notion d‟objets et de
classes
Héritage
Interface
Polymorphisme
Paquetage
Affichage
51
L‟affichage d‟une valeur (System.out.println)
est relativement simple, comme le montre
l‟exemple suivant :
Cours POO/JAVA
B. NGOM
Affichage
52
System.out.print(expression);
Cette méthode permet d‟afficher la valeur de
l‟expression entre
parenthèses sans passer à la ligne après cet affichage.
System.out.println(expression);
Cette méthode passe au contraire à la ligne après l‟affichage.
Cours POO/JAVA
B. NGOM
Saisie
53
Pour que Java puisse lire ce que vous tapez au clavier, vous
allez
devoir utiliser un objet de type Scanner.
Nous allons utiliser l'entrée standard System.in.
Exemple:
Cours POO/JAVA
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
B. NGOM
Saisie
54
Nous présentons certaines méthodes les plus utiles pour lire
différents types de données à partir du périphérique d'entrée par
défaut (récupérer le type de variable primitif adéquat):
nextInt ()
nextByte ()
nextShort ()
nextLong ()
nextFloat ()
Cours POO/JAVA
nextDouble ()
Exemple:
Scanner
scanner =
new
B. NGOM
Scanner( Sy
stem.in ) )
System.out.
print( "Veuill
ez saisir un
premier
entier : " );
int a =
scanner.next
Int();
Saisie
55
La méthode nextLine () permet de lire une ligne de texte
jusqu'au
prochain retour à la ligne (récupère une chaîne de
caractère)
Cours POO/JAVA
B. NGOM
Saisie
56
Remarque:
La classe Scanner ne contient pas de méthode nextChar().
Pour extraire un seul caractère du clavier, vous pouvez
utiliser la méthode nextLine(), puis la méthode charAt().
Exemple
System.out.println("Saisissez une lettre :");
Cours POO/JAVA
Scanner sc = new
Scanner(System.in); String str =
sc.nextLine();
char carac = str.charAt(0);
B. NGOM
System.out.println("Vous avez
saisi le caractère : " + carac);
Tableau
57
La création d‟un tableau peut être faite comme suit :
1) Déclaration d'une variable de tableau avec définition explicite de
taille :
Déclaration de type
int tableau_entiers [] ; // déclaration équivalente à int []
tableau_entiers ;
// tableau_entiers est une variable de type référence vers un tableau
Cours POO/JAVA
contenant
des éléments de type int.
Allocation mémoire, via new
tableau_entiers = new int[5] ;
B. NGOM
L‟opérateur new renvoie une référence vers un tableau
(une référence est un identifiant unique d‟une structure de données)
NB: Pour les tableaux, la valeur spéciale null représente un
tableau sans aucune valeur (0 pour chaque élément) .
Exemple de déclaration d‟un tableau
58
Cours POO/JAVA
B. NGOM
Tableau
59
2) Déclaration et initialisation d'un tableau avec définition implicite
de taille :
Initialisation
<type du tableau> <nom du tableau> [] = {<contenu du
Cours POO/JAVA
tableau>};
Exemple:
int tableau_initialise[] = { 12, 34, 786 };
B. NGOM
Dans cette éventualité, Java crée le tableau, calcule sa taille et
l'initialise
avec les valeurs fournies.
Tableau
60
Exemple:
int tableauEntier [] = {0,1,2,3,4,5,6,7,8,9};
double tableauDouble [] =
{0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0};
char tableauCaractere [] = {'a','b','c','d','e','f','g'}; //
Cours POO/JAVA
initialisation du
caractère
String tableauChaine [] = {"chaine1", "chaine2", "chaine3" ,
"chaine4"}; //
B. NGOM
initialisation du String
Tableau
61
Variable locale constante
Un objet ou un tableau « final » peut avoir
ses
champs ou ses éléments modifiés
Cours POO/JAVA
B. NGOM
Tableau multidimensionnel
62
Tableaux multidimensionnels crées comme
double matrice[][] = new double[4][4];
Ce qui revient à
Cours POO/JAVA
double matrice[][] = new double[4][];
matrice[0] = new double[4];
matrice[1] = new double[4];
matrice[2] = new double[4];
B. NGOM
matrice[3] = new double[4];
Tableau multidimensionnel
63
Initialisation par défaut de tous les éléments.
Des expressions sont permises dans les initialisations de
tableaux. double m[][] = {
{ 0*0, 1*0, 2*0 },
Cours POO/JAVA
{ 0*1, 1*1, 2*1 },
{ 0*2, 1*2, 2*2 }
};
B. NGOM
Tableau multidimensionnel
64
Voici une manière imagée de visualiser une matrice à n+1
lignes et à p+1
colonnes
Int [][] table = new int [n+1][p+1];
Cours POO/JAVA
B. NGOM
Opérations sur le tableau
65
On dispose d'une classe utilitaire, Arrays, dans le package java.util,
qui nous propose des méthodes permettant de manipuler les
tableaux.
Egalement, la classe Arrays offre des méthodes de classe
pour la recherche et le tri d'éléments d'un tableau.
Parmi ces méthodes nous citons:
Cours POO/JAVA
La méthode equals compare deux tableaux renvoie un booléen true
s'ils ont même longueur et contenu,
La méthode binarySearch effectue la recherche binaire d'une valeur
dans un tableau,
La méthode fill remplit un tableau avec la valeur donnée,
B. NGOM
La méthode sort trie un tableau dans l'ordre croissant de ses
éléments.
Opérations sur le tableau
66
Il existe un attribut général de la classe des tableaux, qui
contient la taille d'un tableau quelque soit son type, c'est
l'attribut length.
Exemple :
int [ ] table1 = {17,-9,4,3,57};
int taille;
taille = table1.length; // taille = 5
Cours POO/JAVA
NB:
1) Avec les tableaux, c'est la propriété .length, (array.length)
Si tu essaies la méthode .length(), ça ne compilera pas.
2) Avec les String, c'est la méthode .length(), (string.length())
B. NGOM
Si tu essaies la propriété .length, ça ne compilera pas.
Exemple
67
public class Test {
public static void main(String[] args)
{
// Here array is the array name of
int type int[] array = new int[4];
System.out.println("The size of the
array is " + array.length);
Cours POO/JAVA
// Here str is a string
object String str =
“TestExample";
System.out.println("The
B. NGOM
size of the String is " +
str.length());
// Here str is an array
String[] str = {"Hello", "Every",
"Person" };
System.out.println(str[0].length());
}
Utilisation d'un tableau comme
un Object
68
int [] tab1 = {0, 1, 2, 3, 4} ;
int [] tab2 = {0, 1, 2, 3, 4} ;
La méthode toString() de tab1 nous retourne l'indigeste
chaîne de caractères suivante :
Exemple tab1.toString() ->
: [I@18d107f
La comparaison de ces deux tableaux par la méthode
equals()
nous retourne
Exemple un désespérant
tab1.equals(tab2) -> :
: false
Copie de tableaux
69
La copie d'un tableau dans l'autre peut toujours se faire par
itération sur les éléments du premier tableau, et recopie dans
le second. La méthode à invoquer est System.arraycopy, dont
voici la signature.
public static void arraycopy(Object src, int
src_pos, Object dest, int dest_pos, int
length)
Remarque:
1) Si un dépassement de capacité a lieu, une exception est
générée.
2) Rappelons qu'une fois un tableau créé, il n'est plus possible
d'en changer la taille. L'utilisation de System.arraycopy ne
déroge pas à cette règle.
Accès à un tableau
70
Accès à un élément avec tab[indice]
Exemple : tab[i] = tab[j] * 2;
Attention : les éléments sont indexés à partir de 0
⇒ un tableau possède les éléments allant de 0 à tab.length -
1
Cours POO/JAVA
Un accès en dehors des bornes du tableau provoque une
erreur à l‟exécution (ArrayOutOfBoundsException)
B. NGOM
Exemple d'accès à un tableau
71
Cours POO/JAVA
B. NGOM
Exemple de référencement
72
Cours POO/JAVA
B. NGOM
Chaîne de caractères
73
Comme pour les tableaux, il n‟existe pas de variable de type
String en
Java !
La classe String est une classe fondamentale du langage
Java, puisque c'est elle qui permet de gérer les chaînes
de caractères.
Cours POO/JAVA
Elle déclare une variable référençant une zone mémoire
typée avec le type String
Exemple : String s1 = String s2 =
"Coucou"; s1;
B. NGOM
Chaîne de caractères
74
Construction d'un objet String de deux façons
String s1 = "Coucou"; // création implicite
String s2 = new String("Bonjour le monde !") ; //création
explicite
Concaténation de deux String
1ère méthode
Cours POO/JAVA
String s1 =
"Bonjour" ; String
s2 = “à tous!" ;
String s3 = s1 + "
B. NGOM
" + s2 ;
2ème méthode
=> à l'aide de la
méthode concat :
String
concat(String)
Chaîne de caractères
75
D‟autre opérations
Longueur
intlength(): La méthode length() renvoie la
longueur ( nombre de caractères) de la chaîne.
Comparaison
intcompareTo(String anotherString): Compare
Cours POO/JAVA
une chaîne de caractère à un autre objet.
Renvoie une valeur <0 ==0 ou > 0.
boolean equals(Object anObject): Compare la chaîne a un
objet et retourne true en cas d‟égalité et false sinon
B. NGOM
boolean startsWith(String), endsWith():
renvoient true si la chaîne
commence ou se termine par la chaîne passée en paramètre
Chaîne de caractères
76
Caractère et sous-chaînes
char charAt(int): Retourne le caractère à l‟indice spécifié en
paramètre.
String substring(int): Sous-chaîne depuis l‟indice jusqu‟à la fin.
Conversions
String toLowerCase(): Retourne une chaîne égale à la chaîne
convertie en minuscules.
Cours POO/JAVA
String toUpperCase(): Retourne une chaîne égale à la
chaîne convertie en majuscules.
Recherche:
intindexOf(int): Retourne l‟indice de la première
B. NGOM
occurrence du
caractère.
Conversions vers les types primitifs
77
Les classes Byte, Short, Integer et Long possèdent une
méthode X.parseX(String) qui permet de convertir une chaîne de
caractères en un entier en Byte, Short, Interger …
Exemple :
int s = Integer.parseInt("111"); //
returns 111 int s = Integer.parseInt("-
121"); // returns -121
Cours POO/JAVA
Les classes Float et Double
possèdent une méthode
X.parseX(String) qui
permet de convertir une chaîne de
caractères en un flottant.
B. NGOM
NB: Si cette conversion n'est pas possible, une exception est
levée: NumberFormatException
Les Chaînes modifiables « StringBuffer »
78
Elles sont modifiables par insertion, ajouts, conversions, …
On obtient une « StringBuffer » avec ses
constructeurs StringBuffer mCM = new
StringBuffer(int length); StringBuffer mCM = new
StringBuffer(String str);
On peut les transformer en chaînes normales
String
String s = mCM.toString(); => la méthode toString() renvoie le
nom de la classe de l'objet concerné suivi de l'adresse de cet
objet
On peut leur ajouter n‟importe (surcharge) quoi
mCM.append(...); // String, int, long, float, double, boolean,
char
Exemple: append()
79
StringBuffer sbf = new
StringBuffer("Bonjour - ");
System.out.println("string buffer = "
+ sbf);
String strvalue = " à tous";
// Here it appends the Object value
sbf.append(strvalue);
System.out.println("After appending
result is = " + sbf);
}
Resultat:
string buffer = Bonjour
After appending result is = Bonjour - à
tous
Passage de paramètres
80
Lors des appels de méthode, les arguments sont toujours passés
par
valeur
Dans le cas des types primitifs, c'est la valeur de l'argument
qui est recopiée dans le paramètre de la méthode
Cours POO/JAVA
Dans le cas des types « objet », c'est la valeur de la
variable, (la référence à l'objet) qui est transmise à la
méthode
B. NGOM
Passage de paramètre:
Type primitif
81
Dans le cas des types primitifs, c'est la valeur de l'argument qui
est
recopiée dans le paramètre de la méthode
Les modifications sur le paramètre de la méthode
sont sans effet sur l'argument.
Cours POO/JAVA
B. NGOM
Passage de paramètre:
Type référence
82
Dans le cas des types « objet », c'est la valeur de la
variable, (la
référence à l'objet) qui est transmise à la méthode.
Les modifications effectuées en suivant cette
référence (e.g. modification d'un champ de l'objet) sont
répercutés dans la mé moire et sont donc visibles sur
l'argument.
Cours POO/JAVA
B. NGOM
Type référence et valeur nulle
83
Par défaut, une référencevaut une valeur
particulière,
nulle
Cours POO/JAVA
B. NGOM
Allocation mémoire
84
Pour qu'une variable objet prenne une autre valeur que null, il
faut être
capable d'y affecter une référence.
Elle peut être retournée par l'opérateur d'allocation new.
Cet opérateur a besoin de connaître la
taille de l'objet
new Box(); // j'ai qu'il doit 1 int (field)
besoin de stocker
Cours POO/JAVA
réserver en mémoire.
new int[10]; // stocker 10 int + la taille du tableau
La zone mémoire allouée doit être initialisée
(affectation des valeurs)
new Pixel(1,3); // utilise un « constructeur »
B. NGOM
Ce que retourne l'opérateur new est la
référence qui permet
d'accéder à l'objet alloué en mémoire
Désallocation mémoire
85
La désallocation mémoire n‟est pas gérée par
le programmeur, mais par un Garbage Collector (GC).
En fait, la restitution de la mémoire inutilisée est prise en
charge automatiquement par le récupérateur de mémoire
(garbage collector). Ce GC aussi appelé ramasse-miettes.
Il n'existe pas d'instruction delete comme en C++.
Cours POO/JAVA
En Java, les destructeurs appelés finaliseurs
(finalizers), sont automatiquement invoqués par le
garbage collector.
Pour créer un finaliseur, il faut redéfinir la méthode
B. NGOM
finalize() héritée de
la classe Object.
Désallocation mémoire
86
Les objets qui ne sont plus référencés peuvent être «
récupérés » par le GC, pour « recycler » l'espace mémoire
qu'ils occupent.
Un même objet peut être référencé par plusieurs variables.
Il faut qu'aucune variable ne référence plus un
Cours POO/JAVA
objet pour qu'il soit réclamé.
Les variables cessent de référencer un objet
Quand on leur affecte une autre valeur, ou null
B. NGOM
Quand on quitte le bloc où elles ont été définies: elles
meurent et disparaissent...
Plan
87
Introduction
Variable, valeur constante, conversion en Java
Opérateurs
Structure de contrôle
Manipulation des types primitifs, les tableaux, les chaînes de
caractères, passage des paramètres
Notion d‟objets et de classes
Héritage
Interface
Polymorphisme
Paquetage
POO : Notion de propriétés et de
méthodes
88
Les propriétés sont les caractéristiques(données) d’un objets
Pour un être humain,
Taille
Poids
Couleur
Nom
Prenom
…
Les methodes sont des actions qu’un objet peut effectuer
Pour un etre humain :
Courir
Sauter
Nager
Marcher
…
POO : Notion de propriétés et de
méthodes
88
Les propriétés sont les caractéristiques(données) d’un objets
Pour un être humain,
Taille
Poids
Couleur
Nom
Prenom
…
Les propriétés sont des variables.
Les methodes sont des actions qu’un objet peut effectuer
Pour un etre humain :
Courir
Sauter
Nager
Marcher
…
Les methode sont des fonctions à l’interieur de la classe.
POO : Notion de propriétés et de
méthodes
89
Les propriétés sont des Les methode sont des
variables. fonctions.
int taille = 156; Void courir(){…}
String nom = ‘modou’; Void marcher(){…}
Etc. …
POO : exemple carnet d’adresse
89
Quelles seraient les propriétés Quelles seraient les methodes
POO : exemple carnet d’adresse
89
Quelles seraient les propriétés Quelles seraient les methodes
Nom
Prenom
Telephone
Adresse
…
POO : exemple carnet d’adresse
89
Quelles seraient les propriétés Quelles seraient les methodes
Nom Ajouter()
Prenom Modifier()
Telephone Supprimer()
Adresse Appeler()
… …
POO : Classe et Objet
89
Objet et classe:
Classe = définitions pour des données (variables)
+ fonctions (méthodes) agissant sur ces données
Objet = élément d’une classe (instance) avec un
état
(une méthode ou une variable peut être de
classe = commune à la classe ou d’instance =
dépendant de l’instance)
Class Objet
Definition Une representation
Un modele décrivant les d’une classe
proprietes et les Appartient au monde
methodes réel
Le plan d’un objet Appelé Instance d’une
classe
POO : exemple de classe d’objet
89
Objet Classe
POO : exemple de classe d’objet
89
Classe
Objet Classe
Objet
POO : exemple de classe d’objet
89
POO : exemple de classe d’objet
89
POO : exemple de classe d’objet
89
POO : Encapsulation
89
Un objet renferme ses propriétés et ses méthodes
POO : Avantage de l’Encapsulation
89
Programme : Les données d’un cercle sont le
rayon et une couleur.
Le code fournit en résultat : le diametre, une
aire, et une circonference
Les donnes du
Mes Calculs Les résultats
cercle
POO : Avantage de l’Encapsulation
89
Programme : Les données d’un cercle sont le
rayon et une couleur.
Le code fournit en résultat : le diamètre, une
aire, et une circonférence
Les donnes du
Mes Calculs Les résultats
cercle
Rayon en cm Air : Pi * R2 Air en inch
couleur Circonf : 2Pi*R Circonf en inch
Diam : 2*R Diam en inch
POO : Avantage de l’Encapsulation
89
Programme : Les données d’un cercle sont le
rayon et une couleur.
Le code fournit en résultat : le diamètre, une
aire, et une circonférence
Les donnes du
Mes Calculs Les résultats
cercle
Rayon en cm Air : Pi * R2 Air en inch
couleur Circonf : 2Pi*R Circonf en inch
Diam : 2*R Diam en inch
POO : Avantage de l’Encapsulation
89
Programme : Les données d’un cercle sont le
rayon et une couleur.
Le code fournit en résultat : le diametre, une
aire, et une circonference
POO : Accessibilité de classe
89
class MyClass
• La classe sera accessible depuis toutes les
classes du même paquetage qu'elle (on
parle quelque fois de visibilité de
paquetage)
public class MyClass
• La classe sera accessible de n'importe où
(pourvu qu'on indique son nom de
paquetage complet ou qu'on utilise la
directive import)
• Cette notion d'accessibilité sert à définir
des « composants » de plus grande
granularité que les classes,
• Permet de limiter l'accès
• Peut éviter des conflits de noms
POO : Accessibilité de membre
89
Tous les membres ont une accessibilité qui
est spécifiée à la déclaration par un «
modificateur »
De manière complémentaire à celui de la
classe, il permet de déterminer qui, parmi
ceux qui ont accès à la classe A, ont accès à
ce membre
private : accessible uniquement depuis
l'intérieur de la classe A
Par défaut (pas de modificateur) : accessible
depuis toutes les classes qui sont dans le
même paquetage que A
protected : accessible depuis toutes les classes
qui sont dans le même paquetage que A, et
également depuis celles qui ne sont pas dans le
même paquetage mais qui héritent de la classe
A
POO : Acces aux membres
89
Avec le point « . » sur une référence à un
objet:
p.x, p0.sameAs(p1);
Le compilateur regarde le type déclaré de la
variable (ici p ou p0) et vérifie que le
membre (ici x ou sameAs) existe.
Le compilateur vérifie également les droits
d'accessibilité
Un champ et une méthode peuvent avoir le
même nom
this représente l'instance courante
POO : Acces aux membres
89
Avec le point « . » sur une référence à un
objet:
p.x, p0.sameAs(p1);
Le compilateur regarde le type déclaré de la
variable (ici p ou p0) et vérifie que le
membre (ici x ou sameAs) existe.
Le compilateur vérifie également les droits
d'accessibilité
Un champ et une méthode peuvent avoir le
même nom
this représente l'instance courante
POO : Creation d’instances
89
Une instance, ou un objet, d'une classe est
créée en 3 temps
Pixel p1 = new Pixel(1,3);
new est l'opérateur d'instanciation: comme
il est suivi du nom de la classe, il sait
quelle classe doit être instanciée
Il initialise chaque champ à sa valeur par défaut
Il peut exécuter un bloc d'initialisation éventuel
Il retournera la référence de l'objet ainsi créé
Pixel est le nom de la classe
(1,3) permet de trouver une fonction d'initialisation
particulière dans la classe, qu'on appelle un
constructeur
POO : Constructeur
89
Un constructeur est une méthode particulière,
qui sert à initialiser un objet une fois que la
mémoire est réservée par new
Permet de garantir des invariants sur un objet
sont conservés, par exemple pour initialiser
un objet avec des valeurs particulières
Par exemple, on veut qu'un Pixel soit en (1,1)
Le faire avec une méthode « normale » ne
garantirait pas qu'on accède pas à l'état de
l'objet avant son initialisation
Le constructeur a le même nom que la classe
et pas de type de retour
Ps : En l'absence de constructeur
explicitement défini, le compilateur
ajoute un constructeur public sans
paramètre
POO : appel à un autre Constructeur
89
Plusieurs constructeurs peuvent cohabiter dans la
même classe
Ils ont typiquement des rôles différents et offrent
des « services » complémentaires à l'utilisateur,
par exemple:
new Pixel(1,3) crée un pixel avec les coordonnées
explicites
new Pixel() crée un pixel avec les coordonnées à
l'origine
Quand c'est
new possible,
Pixel(1) crée un pixel sur la diagonale (x == y), etc.
il est préférable qu'il
y en ait un « le plus
général » et que les
autres y fassent appel
Plutôt que de dupliquer le
code dans plusieurs
constrcuteurs
L'appel à un autre
constructeur de la même
classe se fait par this(...)
POO : Champ constant
89
Comme pour les variables locales, il est possible de
déclarer un champ avec le modificateur final.
Cela signifie qu'il doit avoir une
affectation unique
Le compilateur vérifie que il a
bien été initialisé, et ce quelque
soit le constructeur mais
également qu'il n'a été affecté
qu'une seule fois