Algorithmique et initiation à la programmation Java

Transcription

Algorithmique et initiation à la programmation Java
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
L3 Monnaie - Finance
Algorithmique et initiation à la
programmation java
Première partie
O. Auzende
2012-2013
1
Modalités
Cours en amphithéâtre : les lundis de 12 h à 13 h 30 (amphi 3)
o Deux fascicules de cours (polycopiés à trous) sont distribués en cours
Travaux dirigés (12 séances, les TD commençant dès la première semaine du
semestre)
o Un fascicule de TD est distribué lors du premier TD.
Huit groupes de TD :
Horaire
Mardi 18 h 50
Mardi 20 h 25
Mercredi 14 h 05
Mercredi 15 h 40
Vendredi 9 h 20
Vendredi 10 h 55
Vendredi 12 h 30
Vendredi 14 h 05
Salle
501
501
503
503
502
502
502
502
Pour les TD :
o avoir toujours les fascicules de cours et de TD avec soi
o disposer dès le premier TD d’une clé USB standard
Evaluation : contrôle continu et projet
o 1 contrôle sur 20 points au TD 5 (C1)
o 1 contrôle sur 20 points au TD 8 (C2)
o 1 contrôle sur 30 points au TD 11 (C3)
 Programme : cours et TD précédents
o Un projet sur 30 points (P)
 Rendu progressif, de la 6ème à la 11ème semaine
 Soutenance lors du TD de la 12ème semaine
Note finale sur 10 : (C1 + C2 + C3 + P)/10
En cas d’absence en TD
o Prévenir l’enseignant
o Venir en TD dans un autre groupe de la même semaine
o Tout contrôle non passé est sanctionné par un 0
2
Enseignant
O. Auzende
O. Auzende
N. Thibault
N. Thibault
F. Jézéquel
F. Jézéquel
N. Thibault
O. Auzende
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
MODALITES
2
INTRODUCTION
5
Qu’est-ce que l’algorithmique ?
5
Qu’est-ce qu’un programme ?
5
Comment écrire un programme ?
5
Le langage machine
6
Les langages de programmation
6
Java, compilé et interprété
7
Applications, applets et servlets
7
ELEMENTS DE PROGRAMMATION JAVA
8
Notion de variable
8
Affectation
8
Egalité, inégalité
8
Conjonction, disjonction
9
Types de données
9
Notion d’application
10
Les tests
11
Tableaux
12
Les boucles
12
Les sauts
14
JAVA, LANGAGE A OBJETS
15
Classes et instances
15
Attributs et méthodes d’instances
18
Attributs et méthodes de classes
18
ALGORITHMIQUE
19
Permuter le contenu de deux variables
19
Pour les algorithmes sur tableaux suivants,
19
3
Insérer un élément x dans un tableau à la suite des éléments existants
20
Déterminer les éléments maximum et minimum d’un tableau
20
Déterminer l’indice du maximum ou du minimum d’un tableau
20
Somme des éléments d’un tableau
21
Comptages divers
21
Insérer un élément à sa place, le tableau étant déjà rangé
22
Les tris sur tableaux
23
LES PAQUETAGES JAVA
25
Qu’est-ce qu’un paquetage ?
25
La notion d’héritage
25
Protection des attributs et méthodes
25
Les interfaces
26
Les classes d’exceptions
26
Le paquetage java.lang
27
Le paquetage java.util
28
Le paquetage java.text
31
4
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Introduction
Qu’est-ce que l’algorithmique ?
L’algorithmique est une branche des mathématiques dont le but est de trouver de trouver comment réaliser
…
s’obtenir par une formule, mais
…
des tâches dont le résultat
par une succession de
…
effectués en fonction du résultat de tests.
Quelques exemples
o Nombre de jours écoulés depuis …
o Maximum d’un tableau de nombres (il n’y a pas de
…
o Somme d’un tableau de nombres (il existe une notation mathématique
o pour le calcul effectif)
o Tri d’un tableau de nombres …
donnant la solution)
, mais elle n’est pas
…
La solution s’appelle un algorithme : c’est un ensemble …
Exemple : il existe différents algorithmes permettant de trier un tableau de nombres, mais …
Qu’est-ce qu’un programme ?
Un programme est un
…
(appelées couramment des
…
)
permettant à un ordinateur d’exécuter une tâche plus ou moins complexe, en interaction ou non avec l’utilisateur.
Exemples de programmes élémentaires
Calculer :
o le nombre de jours écoulés …
o le maximum, le minimum, la somme des éléments d’un …
o le montant …
o un seuil …
Trier :
o un tableau …
o un tableau …
Exemples de programmes complexes, appelés logiciels, destinés
o traitement …
o …
o programme de gestion de …
o programme de …
o programme de conception assistée …
o programme de publication assistée …
…
:
Comment écrire un programme ?
Il faut d’abord …
Il faut ensuite trouver un (ou des) …
Il faut enfin traduire les instructions qui composent ces algorithmes dans un
par un ordinateur
5
…
compréhensible
Le langage machine
Le processeur d’un ordinateur ne comprend que du langage machine (
…
) composé …
Toute instruction élaborée :
o
répéter une même …
o
faire des choses différentes en fonction de …
se décompose ainsi en des milliers…
Les langages de programmation
o
o
o
o
Intermédiaires entre …
Permettent de décrire les instructions élaborées de manière plus
…
pour former le
…
du programme
Le code source doit ensuite être
…
en langage machine pour pouvoir être exécuté par le …
Il y a deux modes de traduction du code source :
* la
…
(langage dit
…
)
* l’
…
(langage dit
…
)
Les langages compilés
Le compilateur
o
o
est dédié à
…
et au …
vérifie la
…
du code source ; si c’est correct, génère un fichier
machine, exécutable sur toute machine
…
Exemples de langages compilés : Cobol (
…
…
en langage
…
), C, C++ (
)
…
la syntaxe de chaque instruction et ne l’exécute que si …
Avantage des langages compilés :
o Le code objet s’exécute …
Inconvénient des langages compilés :
o Le code objet est dédié à un seul …
Les langages interprétés
L’interpréteur
o
lit le fichier source ligne à ligne,
Exemples de langages interprétés : HTML, javaScript, PHP (
…
Avantage des langages interprétés
o On peut interpréter le fichier sur tout type d’ordinateur, à condition de disposer de l’
à cet ordinateur
Inconvénient des langages interprétés
o La vérification ligne à ligne cause une certaine
…
6
à l’exécution
), SQL
…
adapté
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Java, compilé et interprété
Langage développé par SUN depuis 1995.
Universellement …
Sur l’ordinateur sur lequel on écrit un programme Java, le fichier source est transformé par le compilateur javac
en un
…
non exécutable, qui est
…
quel que soit le type de machine sur
lequel on travaille.
Transféré sur un autre type d’ordinateur, le pseudo-code est interprété par un
L’interpréteur :
o ne vérifie plus la syntaxe des instructions (gain de temps)
o exécute directement …
Le pseudo-code est donc indépendant du type d’ordinateur sur lequel
lequel …
…
…
appelé
…
et de celui sur
Pour écrire un programme java sur un ordinateur, il suffit donc de disposer …
Pour exécuter un programme java compilé, il suffit donc de disposer …
Le pseudo-code est de
…
, donc …
java est donc devenu le langage idéal …
Applications, applets et servlets
Java permet d’écrire :
o
Des applications : programmes …
o
Des applets : petits programmes appelés dans une page HTML par la balise
interprétés par …
…
o
Des servlets : programmes java stockés
dynamiquement des pages html en réponse à …
permettant de générer
…
7
et
Eléments de programmation Java
Notion de variable
La notion de variable en informatique est assez proche …
En mathématiques, x = 5 veut dire …
En informatique, x est un
…
dont la taille (nombre de …
emplacement) dépend de ce qu’on veut y stocker : un entier, un réel…
qui composent cet
Le contenu de cet emplacement-mémoire peut constamment être …
On écrit donc (syntaxe java) :
int x ;
(réservation de place
x = 2 ;
(on y met la valeur 2)
x = 5 ;
(on change, on y met
float y ;
(réservation de place
y = 3.5 ;
(on y met la valeur 3.5)
ou bien directement :
int x = 8;
float y = 3.5 ;
(les deux opérations
…
)
…
…
)
)
…
)
Affectation
Toute instruction complète se termine par …
Les deux instructions x = 5 ; x = 7 ; y = 3.5 ; donnent des valeurs (
emplacements-mémoire x et y. Elles sont appelées des
…
On dit qu’on
…
…
)
aux
une valeur à une variable occupant une certaine place-mémoire.
Il serait plus naturel d’écrire : x  5 (x reçoit la valeur 5), y  3.5 (y reçoit la valeur 3.5), mais tous les
langages de programmation actuels (C, C++, JavaScript, Java, PHP…) utilisent la notation a = b au lieu de
a  b.
L’écriture a = b correspond donc en fait à a  b et doit se lire « a
…
la valeur de b ».
A gauche : …
A droite : …
On peut affecter à une variable :
o une
…
o la
…
d’une autre variable
o le résultat du
…
d’une …
o le résultat du calcul d’une
…
x = 3; y = 5 ; z = 4 ;
x = y; (x reçoit la VALEUR de y, donc 5)
x = y + z; (x reçoit la VALEUR de y + z)
t = max(x, y, z) ;
Egalité, inégalité
Egalité
Le symbole = étant réservé à l’affectation, on teste l’égalité de deux variables a et b autrement. On écrit :
if
…
qui se lit si (a = b) ...
Inégalité
On teste l’inégalité de deux variables a et b en écrivant :
if
…
qui se lit si (a ≠ b) ...
8
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Exemples
o si x = 4 alors y = 7 :
o si annee = 2012 alors nb_jours_fevrier = 29 :
o si x ≠ 10 alors y = 8 :
o si mois ≠ 2 alors nb_jours > 29 :
Conjonction, disjonction
Conjonction
La conjonction ET s’écrit &&
si (a=b) et (c=d) s’écrit donc :
Disjonction
La disjonction OU s’écrit | |
si (a=b) ou (c=d) s’écrit donc :
Exemples
o si x = 4 et y = 5 alors z = 7 : …
o si annee=2012 et mois=2 alors nb_jours=29 : …
o si mois =1 ou mois=3 alors nb_jours =31 : …
Types de données
Java est un langage typé
Toute variable utilisée doit nécessairement être
Un nom de variable doit :
o être constitué …
o ne PAS comporter
o ne pas être un
…
…
…
et son
…
doit être …
ni de …
du langage (liste fournie en TD)
Exemples : float revenu; int mois_annee;
Les types élémentaires sont appelés des
…
Toute variable d’un type primitif est une variable simple, non composée (int, float…)
Les types autres que primitifs sont des
…
(on verra plus tard)
Types de données primitifs en Java
Il y a 8 types de données primitifs (les plus utilisés sont soulignés) :
o boolean :
…
o char :
…
o byte :
…
o short :
…
o int :
…
o long :
…
o float :
…
o double :
…
L’instruction : boolean fini = false; définit une variable fini de type
…
et de valeur
false.
L’instruction : int i = 254256; définit une variable i de type
…
, stockée sur 32 bits et de valeur
254256
L’instruction : float f = 156.256; définit une variable f de type
…
, stockée sur 32 bits et
de valeur 156.256
9
Opérateurs de cast
Pour créer une variable d’un type à partir d’une variable d’un autre type semblable (nombre et nombre, par
exemple), on utilise un
…
Il est noté entre …
Exemples
float f=156.256; int j=(int)f;
 j est alors un entier valant 156
double t=0.567833333; float d=(float)t;
 d est un flottant stocké sur 32 bits au lieu de 64 bits. On a donc perdu
…
Notion d’application
Fichier Programme .java :
public class Programme {
public static void main(String[] args) {
int a = 25 ;
int b = 76 ;
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
Un programme java est contenu dans une
La description d’une classe est faite entre une
…
…
S’il n’y a qu’une seule classe, elle est déclarée
…
{ et une
…
…
déclarée
sous
la
forme
:
compris entre { et }
Tout programme contenant une méthode appelée
o
o
o
o
o
}
afin d’être accessible à tout utilisateur
Le programme proprement dit figure dans une méthode appelée
public static void main(String[] args)
Toute méthode a un
…
…
est appelé
…
public signale que tout le monde peut exécuter …
static indique que la méthode main est une méthode
…
(on verra plus tard)
void dit que la méthode main …
String[] args permet de passer
…
à la méthode main (ce qu’on ne fera pas)
System.out.println(chaîne) fait afficher à l’écran une
…
Pour
construire une chaîne à partir de plusieurs morceaux, on utilise …
qui réalise leur …
Compilation
javac Programme.java
o javac est …
o Il compile le fichier Programme.java et crée le fichier
…
exécutable
Exécution
java Programme
o java est …
o Il charge le fichier
…
et
…
Résultat à l’écran
a vaut : 5
b vaut : 7
10
…
Programme.class qui n’est pas
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Les tests
Les tests permettent de faire des traitements …
Le test simple : if … else
Il s’écrit :
if (test) {
instructions;
}
else {
instructions;
}
La clause else est
…
On peut avoir simplement :
if (test) {
instructions ;
}
Exemple : fichier Programme1.java
public class Programme1 {
public static void main(String[] args) {
int a = 25 ; int b = 76 ;
System.out.println("a = " + a);
System.out.println("b = " + b);
int min ;
if (a < b) { min = a; }
else { min = b; }
System.out.println("le minimum de a et b est " + min);
}
}
Le test multiple : switch
Il s’écrit :
switch (variable) {
case 1: instructions;
case 2: instructions;
...
default : instructions;
}
La variable testée doit être de type …
Le cas
…
sert si l’on veut prévoir
un traitement par défaut.
...
dans les instructions signale que
le cas est traité et que l’on saute …
Exemple : fichier Programme1b.java
public class Programme1b {
public static void main(String[] args) {
int num = 11 ; String mois = "" ; // type chaîne de caractères
switch(num) {
case 1 : mois="janvier"; break ;
case 2 : mois="fevrier"; break ;
case 3 : mois="mars"; break ;
case 4 : mois="avril"; break ;
case 5 : mois="mai"; break ;
case 6 : mois="juin"; break ;
case 7 : mois="juillet"; break ;
case 8 : mois="aout"; break ;
case 9 : mois="septembre"; break ;
default : mois="au dernier trimestre";
}
System.out.println("le mois est " + mois);
}
}
11
Tableaux
Les tableaux sont des collections de variables
On doit d’abord les
…
, puis faire
…
Une fois qu’un tableau est créé, sa taille
…
, en
…
…
.
.
On accède à l’élément d’indice i de t par t[i], les indices …
Exemples
int[] t ;
// ou int t[];
// déclaration d’un tableau d’entiers
t=new int[20];
// création de t en mémoire
String[] t1 ;
// ou String t1[]; // déclaration d’un tableau de chaînes
t1 = new String[10] ;
// création de t1 en mémoire
Utilisation : fichier Tableau.java
public class Tableau {
public static void main(String[] args) {
String[] t = new String[12] ;
t[0]="janvier"; t[1]="fevrier"; t[2]="mars"; t[3]="avril";
t[4]="mai"; t[5]="juin";t[6]="juillet"; t[7]="aout";
t[8]="septembre"; t[9]="octobre"; t[10]="novembre";
t[11]="decembre";
System.out.println("Les mois de l'annee sont : ");
System.out.println(t[0]); System.out.println(t[1]);
System.out.println(t[2]); System.out.println(t[3]);
System.out.println(t[4]); System.out.println(t[5]);
System.out.println(t[6]); System.out.println(t[7]);
System.out.println(t[8]); System.out.println(t[9]);
System.out.println(t[10]); System.out.println(t[11]);
}
}
Les boucles
La boucle for
La boucle for permet de
…
un certain nombre de fois des instructions. Elle s’écrit :
for (initialisation; test_continuation; incrémentation) {instructions;}
Exemple : répéter 10 fois des instructions
for (int i = 0 ; i < 10 ; i++) {
instructions;
}
o
L’initialisation précise
int i=0
…
qui contrôle la boucle et
o
Le test est un
i < 10
…
o
L’incrémentation précise comment …
Généralement on écrit i++ qui veut dire i=i+1 (on passe de i à i+1, donc
…
( test qui doit être vérifié pour que la boucle
12
…
…
)
)
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Fichier Tableau1.java : une seule instruction …
public class Tableau1 {
public static void main(String[] args) {
String[] t = new String[12] ;
t[0]="janvier"; t[1]="fevrier"; t[2]="mars"; t[3]="avril";
t[4]="mai"; t[5]="juin"; t[6]="juillet"; t[7]="aout";
t[8]="septembre";t[9]="octobre";t[10]="novembre";
t[11]="decembre";
System.out.println("Les mois de l'annee sont : ");
for (int i = 0 ; i < 12; i++) {
System.out.println(t[i]);
}
}
}
Fichier Tableau2.java : on utilise deux boucles for : une pour
l’autre pour faire …
…
,
public class Tableau2 {
public static void main(String[] args) {
double[] t = new double[20] ;
for (int i = 0 ; i < 20 ; i++) {
t[i] = i ;
}
for (int i = 0; i < 20 ; i++) {
System.out.print(t[i] + " * ");
}
}
}
o
o
o
La variable i est déclarée …
Entre les deux boucles, i …
On dit que la
…
se limite à la
…
en cours
Fichier Tableau2b.java : la variable i est …
o
La portée de i est alors
…
toute entière (i est connu dans
…
).
public class Tableau2b {
public static void main(String[] args) {
double[] t = new double[20] ;
int i ;
for (i = 0 ; i < 20 ; i++) {
t[i] = i ;
}
for (i = 0; i < 20 ; i++) {
System.out.print(t[i] + " * ");
}
System.out.println("\n ---> i vaut maintenant " + i) ;
}
}
La boucle while
Elle permet de
Elle s’écrit :
…
des instructions tant …
while (test) {
instructions ;
}
Les instructions doivent modifier …
une variable
intervenant dans le test, pour que la boucle while ne
boucle …
13
Exemple : afficher les éléments d’un tableau de nombres t tant qu’ils sont inférieurs à 20.
int i = 0 ;
while (t[i] < 20) {
System.out.print(t[i] + " ") ;
i++ ;
}
i est modifié dans les instructions, donc t[i] correspond à chaque passage à
Attention cependant à ne pas dépasser
…
…
du tableau t.
!
Si le tableau est de taille n, il faut écrire :
int i = 0 ;
while ((i < n) && (t[i] < 20)) {
// && est la notation pour ET
System.out.print(t[i] + " ") ;
i++ ;
}
La boucle do … while
Elle permet de faire exécuter
ces instructions tant qu’un test est vérifié.
Elle s’écrit :
…
do
{
instructions ;
}
while (test);
des instructions puis de
…
Les instructions doivent modifier
…
une variable du test, pour que le do … while ne boucle
pas …
Exemple : afficher le premier élément du tableau t, puis les éléments suivants tant qu’ils sont inférieurs au
premier :
int i = 0 ;
do
{
System.out.print(t[i]+ " ");
i++ ;
}
while ((i<n)&&(t[i]<t[0]));
Les sauts
Le break
break permet
…
le test ou la boucle (on saute donc
…
en reprenant l’exécution directement …
les cas suivants).
Exemple : afficher les éléments du tableau t tant qu’ils sont inférieurs à 20. On arrête donc dès qu’on rencontre
un élément supérieur ou égal à 20.
for (int i = 0 ; i < n ; i++) {
if (t[i]<20) {
System.out.print(t[i]+" * ");
}
else {
break ;
}
}
C’est équivalent à la boucle while ci-dessous :
int i = 0 ;
while ((i<n) && (t[i] < 20)) {
System.out.print(t[i]+" * ") ;
i++ ;
}
14
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Le continue
continue permet de sortir
…
en reprenant l’exécution à l’itération suivante.
On arrête donc les instructions de l’itération en cours pour passer …
Exemple : afficher les éléments du tableau t qui sont différents de 20.
Deux versions, selon que l’on teste si t[i] est égal à 20 ou est différent de 20 :
Si on teste si t[i] est égal à 20, on écrit :
Si on teste si t[i] est différent de 20, on écrit :
for (int i = 0 ; i < n ; i++) {
if (t[i] == 20) {
continue ;
}
else {
System.out.print(t[i]+" * ");
}
}
for (int i = 0 ; i < n ; i++) {
if (t[i] != 20) {
System.out.print(t[i]+ " * ");
}
else {
continue ;
}
}
Le return
L’instruction return permet
celle-ci.
…
sans nécessairement attendre la fin de
Cette instruction ne peut donc pas figurer directement
par la suite.
…
mais sera très largement utilisée
Java, langage à objets
Classes et instances
Un programme java peut ne contenir qu’une seule
Cette classe, qui contient
…
…
, comme on l’a vu jusqu’à présent
, constitue à elle toute seule toute l’application
Mais java est avant tout un « langage
…
», ce qui veut dire qu’une classe peut aussi être un …
à partir duquel on peut fabriquer des objets qu’on appelle des …
On souhaite créer des « objets » comportant :
o un entier n qui représente la …
d’un tableau
o un tableau t de n entiers comportant les entiers 1, 2, 3, … n-1
Exemple de deux tels objets :
La classe (encore embryonnaire) correspondant à ces objets est la suivante :
class ObjetTableau {
int n ;
int[] t ;
}
//
//
//
//
début de la classe
deux attributs : ...
et t ...
fin de la classe
15
Cette description signifie que tout objet de la classe ObjetTableau, dès qu’il sera créé, comportera
automatiquement deux variables (qu’on appellera des
…
) n et t.
Une classe correspond donc à la description d’un ensemble d’objets ayant …
Les objets créés selon ce modèle sont appelés des
…
de la classe.
Pour donner des valeurs aux attributs, donc remplir n et t, on doit ajouter dans la classe une méthode
spécifique appelée …
Le
…
est
…
class ObjetTableau {
int n ;
int[] t ;
permettant de construire des objets
// début de la classe
// deux attributs : n et t
ObjetTableau(int a) {
// le ...
n = a ;
// n prend la valeur ...
t = new int[n] ;
// on réserve la place pour ...
for (int i=0 ; i < n ; i++) {
t[i] = i+1 ;
// remplissage de ...
}
}
// fin du ...
}
// fin de ...
Créer des objets de la classe ObjetTableau se fait
programme principal :
…
, dans une autre classe qui sert de
public class ProgObjet {
public static void main (String args[ ]) {
ObjetTableau obj1 = new ObjetTableau(6);
ObjetTableau obj2 = new ObjetTableau(3);
}
}
// début de
// le main
classe
// fin ...
// fin ...
Ce programme crée bien les deux objets, mais pour le moment n’affiche …
On ajoute donc à la classe ObjetTableau une méthode void affiche() permettant à un objet …
(c’est-à-dire de s’afficher
…
):
class ObjetTableau {
int n ;
int[] t ;
// début de la classe
// deux attributs : n et t
ObjetTableau(int a) {
// le constructeur
n = a;
// n prend la valeur a
t = new int[n] ; // on réserve la place pour le tableau t
for (int i=0;i<n;i++) {
// remplissage du tableau
t[i] = i+1 ;
}
}
// fin du constructeur
void affiche() {
System.out.println("affichage des elements");
for (int i = 0; i < n; i++){
System.out.print(t[i]+" * ");
}
System.out.println("");
}
}
// fin de la classe
16
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
On ajoute ensuite à la même classe une méthode int inferieurs(int p) permettant à un objet de
calculer le nombre d’éléments de son tableau qui sont …
class ObjetTableau {
int n ;
int[] t ;
// début de la classe
// deux attributs : n et t
ObjetTableau(int a) {
// le constructeur
n = a;
// n prend la valeur a
t = new int[n] ; // on réserve la place pour le tableau t
for (int i=0;i<n;i++) {
// remplissage du tableau
t[i] = i+1 ;
}
}
// fin du constructeur
void affiche() {
System.out.println("affichage des elements");
for (int i = 0; i < n; i++){
System.out.print(t[i]+" * ");
}
System.out.println("");
}
int inferieurs(int p) {
int compteur = 0 ;
for (int i = 0; i < n; i++){
if (t[i]<p) compteur++ ;
}
return compteur ;
}
}
// fin de la classe
On ajoute enfin à
méthodes :
…
les instructions demandant aux objets créés d’exécuter ces
public class ProgObjet {
// classe principale
public static void main (String args[ ]) {
// main
ObjetTableau obj1 = new ObjetTableau(6);
obj1.affiche();
// affichage de obj1
// nb elements < 3
System.out.println(obj1.inferieurs(3)) ;
ObjetTableau obj2 = new ObjetTableau(3);
obj2.affiche();
// affichage de obj2
// nb elements < 4
System.out.println(obj2.inferieurs(4)) ;
}
// fin du main
}
// fin de classe
Les deux méthodes void affiche() et int inferieurs(int p) ne peuvent être exécutées que par …
o On les appelle des …
void affiche() affiche les éléments à l’écran, mais ne calcule rien, d’où son type de valeur de retour : …
int inferieurs(int p)calcule le nombre d’éléments de t qui sont strictement inférieurs à p
o int (valeur de retour) indique que le résultat …
(valeur du compteur)
o int p est le
…
de la méthode
o return permet de …
la valeur du compteur
Le fichier comporte finalement deux classes : ObjetTableau et ProgObjet. Il y aura donc … fichiers compilés.
17
Il s’agit d’une
…
, car il y a dans une des classes une méthode appelée …
La classe principale est celle qui comporte le main ; elle …
o On l’appelle aussi
…
l’application
Le fichier doit porter le nom
o Ce sera donc ici …
…
, suivi de l’extension .java
Attributs et méthodes d’instances
Une classe est un
…
permettant de construire des objets.
Un objet est nécessairement créé à partir d’une classe, à l’aide …
On dit que l’objet est une …
de la classe et qu’il est …
Mais une classe n’oblige pas forcément à créer des objets
Un objet comporte des
sa classe.
…
et dispose de
…
, définis dans
Ainsi, dans la classe ObjetTableau,
o n et t sont des …
o les méthodes void affiche() et int inferieurs(int p) sont des …
Attributs et méthodes de classes
Une classe peut aussi comporter des
…
Ils sont signalés par le mot-clé …
et existent dès le début de l’application
Seule exception : le
…
et des
…
.
est une méthode de classe, alors qu’il n’est jamais précédé de …
Exemple d’utilisation d’un attribut de classe et d’une méthode de classe pour compter les objets créés : fichier
ProgObjet1.java
class ObjetTableau {
static int nbobjets = 0;
int n ;
int[] t ;
//
// attribut d’instance
// attribut d’instance
ObjetTableau(int a) {
// constructeur
n = a;
t = new int[n] ;
for (int i=0;i<n;i++) { t[i] = i+1 ;}
nbobjets++ ;
// incrémentation du compteur
}
18
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
void affiche() {
System.out.print("affichage d'un objet :");
for (int i = 0; i < n; i++){
System.out.print(t[i]+" * ");
}
System.out.println("");
}
static void nombreObjets() { // méthode de classe
System.out.println("Nombre d'objets : " + nbobjets) ;
}
}
public class ProgObjet1 {
// début de classe
public static void main (String args[ ]) {
// le main
ObjetTableau.nombreObjets() ; // appel à la méthode de classe
ObjetTableau obj1 = new ObjetTableau(6);
obj1.affiche();
// affichage de obj1
ObjetTableau.nombreObjets() ; // appel à la méthode de classe
ObjetTableau obj2 = new ObjetTableau(10);
obj2.affiche();
// affichage de obj2
ObjetTableau.nombreObjets() ; // appel à la méthode de classe
}
// fin du main
}
// fin de classe
static int nbobjets : attribut de classe initialisé
…
, modifié dans …
static void nombreObjets() : méthode de classe affichant le nombre d’objets, appelée dans le
programme principal sur
…
par : ObjetTableau.nombreObjets();
Exécution
Nombre d'objets : 0
affichage d'un objet : 1 * 2 * 3 * 4 * 5 * 6 *
Nombre d'objets : 1
affichage d'un objet : 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 *
Nombre d'objets : 2
Algorithmique
Permuter le contenu de deux variables
On veut permuter le contenu de deux variables a et b.
Exemple :
o Avant la permutation, a contient 38 et b contient 56.
o Après la permutation, a doit contenir 56 et b doit contenir 38.
Si on écrit a  b (a reçoit la valeur de b), a prend la valeur de b mais …
Il faut donc
On écrit donc :
temp 
…
...
où l’on puisse stocker ….
;
...

...
;
Pour permuter deux variables, on a donc impérativement besoin …
Pour les algorithmes sur tableaux suivants,
On suppose qu’un tableau t, de taille nb, contient n nombres, n ≤ nb.
Les cases t[0], t[1], …, t[n-1] du tableau sont donc …
Les cases t[n], t[n+1], t[nb-1] sont …
19
...
 temp ;
Insérer un élément x dans un tableau à la suite des éléments existants
Exemple
Le tableau t dispose de 15 places (nb = 15) mais contient 7 nombres (n = 7), et on veut y insérer le nombre 10.
Algorithme
si (n = nb)
alors ...
sinon
faire
...
...
fin faire


...
...
fin si
Résultat
Déterminer les éléments maximum et minimum d’un tableau
Le tableau t est donné, ainsi que son nombre d’éléments n.
On recherche le plus grand ou le plus petit élément du tableau.
Algorithme de recherche du maximum
Algorithme de recherche du minimum
max  ...
pour i allant de 1 à n
faire
si ( ...
)
alors faire
...
 ...
fin faire
fin si
fin faire
fin pour
min  ...
pour i allant de 1 à n
faire
si ( ...
)
alors faire
...
 ...
fin faire
fin si
fin faire
fin pour
A la fin de l’algorithme, max contient le plus grand
élément du tableau.
A la fin de l’algorithme, min contient le plus petit
élément du tableau.
Déterminer l’indice du maximum ou du minimum d’un tableau
C’est le même algorithme, mais où on mémorise en même temps :
o la plus grande (ou petite) valeur …
o son …
20
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Algorithme pour l’indice du plus grand
Algorithme pour l’indice du plus petit
max  ...
indice  ...
pour i allant de 1 à n
faire
si ( ...
)
alors faire
max  ...
indice  ...
fin faire
fin si
fin faire
fin pour
min  ...
indice  ...
pour i allant de 1 à n
faire
si ( ...
)
alors faire
min  ...
indice  ...
fin faire
fin si
fin faire
fin pour
A la fin de l’algorithme, max contient le plus grand
élément du tableau et indice contient son indice dans
le tableau
A la fin de l’algorithme, min contient le plus petit
élément du tableau et indice contient son indice dans
le tableau
Somme des éléments d’un tableau
Il s’agit de
…
au fur et à mesure les valeurs des éléments du tableau.
Il est donc nécessaire d’avoir une variable contenant …
Algorithme :
som  ...
pour i allant de 0 à n
faire
som  ...
fin faire
fin pour
A la fin, la somme des éléments du tableau est …
Comptages divers
On a besoin de variable supplémentaire.
Exemple : compter le nombre d’éléments égaux à p.
Algorithme :
cpt  ...
pour i allant de 0 à n
faire
si ( ...
)
alors faire
...
fin faire
fin si
fin faire
fin pour
 ...
A la fin, le nombre d’éléments égaux à p est …
21
Insérer un élément à sa place, le tableau étant déjà rangé
Un tableau de nb places contient n nombres déjà rangés dans l’ordre croissant.
On veut y insérer un nouveau nombre.
Exemple :
Principe
o
si le tableau est déjà plein, …
o
si le tableau est vide, …
o
sinon, c’est que le tableau est partiellement rempli :
- on cherche alors le premier indice i tel que…
- on décale vers la fin du tableau les éléments d’indice allant de …
- on place x en …
- on augmente … d’une unité
Algorithme
si (
...
)
...
sinon si ( ...
)
faire
t[n]  ...
n  ...
fin faire
sinon faire
i  ...
tant que ( ...
pour j  ...
faire ...
t[i]  ...
n  ...
fin faire
fin si
fin si
Résultat
22
) faire

...
i  ...
fin faire
fin faire
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Les tris sur tableaux
Algorithme du tri tournoi
Principe
A partir d’un rang i, on considère l’élément …
du tableau et on le compare à tous les éléments t[j]
suivants.
A chaque fois que t[i] est
…
à t[j], on permute …
et …
On effectue cela pour i allant du
…
indice à
…
indice.
Exemple
i = 0. On compare t[0] à t[1], t[2],…, t[n-1] et à chaque fois que t[0] > t[j], on permute …
A la fin de ce premier parcours, le plus petit élément est arrivé …
On recommence avec i = 1 : on compare t[1] à t[2], … , t[n-1] et lorsque t[1] > t[j], on permute …
A la fin du deuxième parcours, les deux plus petits éléments sont …
On recommence ensuite avec i = 2, 3, … n-2.
Algorithme :
pour i  ...
pour j  ...
si ( ...
)
faire
temp  ...
t[i]  ...
t[j]  ...
fin faire
fin si
fin pour
fin pour
23
Algorithme du tri à bulles
Principe
On compare chaque élément à son suivant.
S’il lui est supérieur, on les permute ; sinon, on passe à
l’élément suivant.
Lorsqu’on a parcouru tout le tableau, on recommence un
nouveau parcours s’il y a eu au moins une permutation.
Exemple du premier parcours : ci-contre
A la fin de ce premier parcours, le plus grand élément est
arrivé …
Au parcours suivant, on obtient le résultat ci-contre.
Les deux plus grands éléments sont
position et
…
position.
…
Le tableau est trié dès qu’un parcours est fait sans …
Pour contrôler l’arrêt des permutations, on utilise une
variable initialisée à 0 au début de chaque parcours, et que
l’on passe à 1 dès que …
Il suffit alors de boucler alors tant que cette variable, à la fin
d’un parcours, est égale …
Algorithme
permut  ...
tant que ( ...
)
faire
permut  ...
pour i  0 à ...
si ( ...
)
faire
permut  ...
temp  ...
t[i]  ...
t[i+1]  ...
fin faire
fin si
fin pour
fin faire
fin tant que
24
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Les paquetages Java
Qu’est-ce qu’un paquetage ?
Les paquetages (
…
) sont des librairies de
…
, de
…
regroupées selon leur fonction.
Elles sont fournies en même temps que le compilateur javac et l’interpréteur java.
et
…
La documentation concernant chaque paquetage est stockée sous forme de pages HTML dans un dossier
spécifique
o A l’université, C:\sun\appserver\docs\doc\docs\
o Chez vous, …
Choisir la page index.html puis cliquer sur le lien intitulé : Java 2 Platform … API Specification
La notion d’héritage
Toutes les classes sont liées par la notion
…
On déclare qu’une classe dérive d’une autre classe par :
class Fille extends Mere {
...
}
La classe fille hérite de tous
…
et
…
Un objet de la classe fille est donc un objet de la classe
…
et des méthodes supplémentaires), mais la réciproque est …
de la classe mère.
(éventuellement complété par des champs
Toutes les classes héritent d’une classe spécifique appelée
…
d’héritage dans la définition d’une classe, par défaut cette classe hérite de …
. Si on ne précise pas de clause
Protection des attributs et méthodes
Déclarations de protection
Les attributs et méthodes d’une classe peuvent être déclarés private, public, protected ou ne pas être précédés
de déclaration de protection.
Exemple
class Truc {
private int a ;
protected int b ;
public int c ;
int d ;
}
Déclaration private
Les attributs et méthodes déclarés private ne sont accessibles qu’à l’intérieur de leur propre classe
 a ne sera donc accessible …
Déclaration protected
Les attributs et méthodes déclarés protected ne sont accessibles qu’aux sous-classes (qu’elles soient dans le
même paquetage ou pas) et aux classes du même paquetage
 b sera donc accessible …
25
Déclaration public
Les attributs et méthodes déclarés public sont toujours accessibles
 c sera …
Sans déclaration
Les attributs et méthodes sans aucune déclaration de protection (mode dit
toutes les classes du même paquetage. C’est le mode de protection par défaut
 d sera donc accessible …
…
) sont accessibles par
Les interfaces
Une interface est une sorte de classe spéciale, dont toutes les méthodes sont déclarées …
et
…
(sans code). En fait, une interface
…
, mais sans donner le code permettant d’exécuter
ces services.
Une classe qui souhaite utiliser une interface le signale par le mot implements :
class B implements C { ... } ;
On dit alors qu’elle
…
l’interface.
Dans la classe B, on doit alors donner le code de
…
les méthodes de l’interface.
Une classe B peut hériter d’une classe A et implémenter une ou plusieurs interfaces :
class B extends A implements C, D {...} ;
class A
interface C, D
extends
implements
class B
Les méthodes des interfaces C et D doivent alors obligatoirement …
On utilisera quelques interfaces par la suite.
Les classes d’exceptions
Lever une exception
Lorsqu’une méthode est exécutée, il peut se produire des erreurs. On dit alors qu’une …
est
o Une exception est un objet, instance d’une des nombreuses sous-classes de la classe Exception.
…
Chaque méthode qui risque de provoquer une ou des erreur(s) le
…
de la nature des erreurs susceptibles de se produire.
o Les différentes classes d’erreurs possibles sont spécifiées dans …
suivi
par le mot
…
Exemple : dans la classe FilterInputStream, une méthode de lecture d’un fichier est déclarée sous la forme :
public int read() throws IOException
Cela signale que cette lecture peut provoquer une erreur d’entrée-sortie (
…
).
Utiliser une méthode à clause throws
Lorsqu’on a besoin d’utiliser une méthode risquant de provoquer des erreurs :
o
o
on englobe l’appel à cette méthode dans un bloc
…
on précise ce qu’on fera en cas d’erreur dans une clause …
26
(pour
(pour
…
…
l’erreur)
l’erreur).
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Exemple :
try
{
fichier.read() ;
}
catch (IOException) {
System.out.println(" erreur de lecture ") ;
return ;
}
Le paquetage java.lang
java.lang = java.language
Le paquetage java.lang est le seul paquetage dont ...
Il comprend notamment la classe Object,
…
classes enveloppantes, la classe Math et la classe String (classe des
, la classe System, les
).
…
La classe System
La classe System contient des
…
et des
…
Quand on écrit System.out.println(...), on fait appel à
System.
du système.
…
out de la classe
System.out : …
System.in : …
Les classes enveloppantes
Les variables des types de données primitifs (int, char, double, etc) sont les seuls éléments qui ne sont
objets dans Java.
Mais on peut
…
… des
à partir de ces types primitifs à l’aide des …
type
nature
classe enveloppante
boolean
true ou false
Boolean
char
caractère 16 bits
Character
byte
entier 8 bits signé (petit entier)
Byte
short
entier 16 bits signé (entier court)
Short
int
entier 32 bits signé (entier)
Integer
long
entier 64 bits signé (entier long)
Long
float
virgule flottante 32 bits (réel simple)
Float
double
virgule flottante 64 bits (réel double)
Double
int n = 5 ;
Integer obj1 = new Integer(n) ;
// n n’est pas un objet
// obj1 est ...
double f = 4.68756 ;
Double obj2 = new Double(f) ;
// f n’est pas un objet
// obj2 est ...
La classe Math
La classe Math contient toutes les
mathématiques.
…
nécessaires
On effectue donc l’appel à une méthode par l’instruction : …
27
pour
effectuer
tous
les
calculs
Exemples
double j
double k
double l
double m
=
=
=
=
-3.145 ;
Math.abs(j) ;
Math.pow(j,k) ;
Math.sqrt(p) ;
// k 
// l 
// m 
...
...
...
La classe String
La classe String contient de très nombreuses
caractères
…
pour le traitement des chaînes de
Il est indispensable de consulter la documentation pour trouver la méthode dont on a besoin
Le paquetage java.util
java.util = utilitaires de java
Il contient toutes les classes utilitaires, notamment :
o Scanner : pour les …
o Random : pour la …
Importation de paquetage
Pour utiliser une partie d’un paquetage autre que java.lang, on utilise le mot-clé
o
import java.util.Scanner ;
 on se donne le droit d’utiliser la classe Scanner …
o
import java.util.Random ;
 on se donne le droit d’utiliser la classe Random…
o
import java.util.* ;
 on se donne le droit d’utiliser …
…
:
Utilisation de la classe Scanner
Fichier UtilScanner.java :
import java.util.Scanner ;
public class UtilScanner {
static Scanner sc ;
public static void main(String args[]) {
sc = new Scanner(System.in);
System.out.println("Veuillez saisir une phrase :");
String str = sc.nextLine();
System.out.println("Vous avez saisi : " + str);
System.out.println("Veuillez saisir un entier :");
int n = sc.nextInt();
System.out.println("Vous avez saisi le nombre : " + n);
System.out.println("Veuillez saisir un float :");
float f = sc.nextFloat();
System.out.println("Vous avez saisi le nombre : " + f);
System.out.println("Veuillez saisir un double :");
double d = sc.nextDouble();
System.out.println("Vous avez saisi le nombre : " + d);
}
}
28
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Le programme UtilScanner.java crée un objet sc de la classe Scanner par un constructeur relié au clavier :
sc = new Scanner(System.in);
puis d’entrer au clavier :
o une phrase : …
o un entier : …
o un float : …
o un double : …
Attention : sous Windows, les float et double doivent être entrés sous la forme …
du système, comme pour Excel).
(liée à la configuration
Utilisation de la classe Random
Le programme UtilObjet.java suivant demande la création d’un objet o qui comporte …
Le
…
Objet() :
o crée
…
par l’instruction t = new float[40] ;
o appelle le constructeur
…
de la classe Random par Random r = new Random(); l’objet
construit est appelé un
…
o demande à ce
…
de remplir le tableau par l’instruction t[i]=r.nextFloat();
La méthode nextFloat() de la classe Random génère un
...
compris entre
et …
Fichier UtilObjet.java
import java.util.Random ;
Un exemple de
résultat :
class Objet {
float[] t ;
Objet() {
t = new float[20] ;
Random r = new Random();
for (int i = 0 ; i < 20 ; i++) {
t[i]=r.nextFloat();
}
}
void affiche() {
for (int i = 0 ; i < 20 ; i++) {
System.out.println(t[i]);
}
}
}
public class UtilObjet {
public static void main(String[] args) {
Objet o = new Objet();
o.affiche();
}
}
0.37464726
0.008410811
0.36294508
0.9819035
0.9982327
0.2542473
0.7204915
0.52173376
0.94769883
0.7458367
0.70877224
0.2125029
0.7863865
0.22088677
0.8084339
0.76560336
0.94098556
0.81110626
0.085951984
0.12518334
Si on veut obtenir des entiers, on modifie le programme en conséquence et on fait appel à la méthode
nextInt() qui génère un
…
dans
…
des entiers possibles.
29
Fichier UtilObjet2.java
import java.util.Random ;
Un exemple de
résultat :
class Objet {
int[] t ;
Objet() {
t = new int[20] ;
Random r = new Random();
for (int i = 0 ; i < 20 ; i++) {
t[i]=r.nextInt();
}
}
void affiche() {
for (int i = 0 ; i < 20 ; i++) {
System.out.println(t[i]);
}
}
}
public class UtilObjet2 {
public static void main(String[] args) {
Objet o = new Objet();
o.affiche();
}
}
Si on veut obtenir des entiers compris entre 0 et m (0
méthode nextInt(m).
…
1106836022
-727453113
1406092303
911562671
-1133440582
-1386178611
-1588036922
-994776228
1092643285
1158792337
1429772425
-498695102
341520753
-1052563006
-674535242
789254811
1820655005
1633617820
-1003275755
-1409624375
,m
…
), on fait appel à la
Exemple ci-dessous avec des entiers entre 0 (compris) et 50 (exclu) : UtilObjet3.java
Fichier UtilObjet3.java
import java.util.Random ;
class Objet {
int[] t ;
Objet() {
t = new int[20] ;
Random r = new Random();
for (int i = 0 ; i < 20 ; i++) {
t[i]=r.nextInt(50);
}
}
void affiche() {
for (int i = 0 ; i < 20 ; i++) {
System.out.println(t[i]);
}
}
}
public class UtilObjet3 {
public static void main(String[] args) {
Objet o = new Objet();
o.affiche();
}
}
On peut obtenir un entier de n’importe quel intervalle [a, b[ par t[i]= ...
30
Un exemple de
résultat :
42
7
13
0
35
40
43
17
8
29
26
4
34
49
7
47
28
48
36
46
Licence Monnaie - finance
2012-2013
Algorithmique et programmation java
Le paquetage java.text
Fournit des classes pour le traitement des …
Il contient notamment les classes DecimalFormat, DecimalFormatSymbol permettant d’afficher de manière
variée des …
Exemple : programme UtilFormat.java
import java.text.* ;
public class UtilFormat {
public static void main(String args[]) {
double d = 12556125.458997 ;
System.out.println("0 : " + d) ;
DecimalFormat df = new DecimalFormat() ;
DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();
dfs.setGroupingSeparator(' ') ;
df.setDecimalFormatSymbols(dfs);
System.out.println("1 : " + df.format(d)) ;
df.applyPattern("#,###,##0.00 €") ;
System.out.println("2 : "+df.format(d)) ;
}
}
Exécution :
0 : 1.2556125458997E7
1 : 12 556 125,459
2 : 12 556 125,46
3 : 12 556 125,46 €
Analyse du programme :
System.out.println("0 : " + d) ;
 affichage …
DecimalFormat df = new DecimalFormat() ;  on crée ...
DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();
 on récupère …
dfs.setGroupingSeparator(' ') ;
 dans dfs, on choisit ...
df.setDecimalFormatSymbols(dfs);
 on réassocie …
System.out.println("1 : "+df.format(d));  résultat …
df.applyPattern("#,###,##0.00 €") ;
 on ajoute …
System.out.println("2 : "+df.format(d));  résultat …
31