USSI1R – Algorithmique et programmation
Présentation du
langage JAVA
Nada Mimouni
2
Plan
¡ Rappel
¡ La programmation procédurale
¡ La programmation objet
¡ Le langage JAVA
¡ Instructions
¡ Variables, types et codage
¡ Opérateurs
¡ Les entrées sorties
¡ Un premier programme
3
Références papier
¡ Programmer en Java de Claude Delannoy
¡ Eyrolles
¡ Le livre de Java premier langage de Anne Tasso
¡ Eyrolles
¡ Java - Tête la première, de Kathy Sierra , Bert
Bates
¡ O'Reilly
¡ Très bien, mais plus en vente
4
Références électroniques
¡ Programmation en Java (anciennement site du zéro, désormais
openclassrooms)
¡ [Link]
programmer-en-java
¡ Apprendre Java - Cours et exercices (Irène Charon)
¡ [Link]
¡ Et plein d’autres
5
Programmation procédurale
¡ le programme est conçu comme une suite de procédures à réaliser pour
répondre au problème considéré
¡ Principe :
¡ Un programme principal fait appel à des fonctions en mémoire, qui peuvent être
réutilisées n’importe où avec différentes variables
¡ Principe
¡ Chaque procédure peut appeler une ou plusieurs autres procédures
¡ Exemple
¡ Une procédure principale (main)
¡ Début
¡ main appelle une procédure 1 (P1)
¡ main appelle une procédure 2 (P2)
¡ P2 appelle une procédure 3 (P3)
¡ main appelle une procédure 4 (P4)
¡ Fin
USSI1R
6
Programmation objet
¡ Un programme est composé d’objets
¡ Un objet est une instance d’une classe
¡ Une classe
¡ a des attributs (décrivent l’état)
¡ a des méthodes : procédures concernant les attributs (décrivent le
comportement)
¡ Exemple
¡ Classe Carré
¡ Attributs : largeur et couleur
¡ Méthodes : périmètre(), surface (), agrandir(coef), constructeur (largeur,
couleur)
¡ Objets Instance de Carré
¡ c1 : carré rouge de largeur 10
USSI1R
¡ c2 : carré bleu de largeur 5
7
Introduction
¡ Java est un langage
¡ Développé par Sun Microsystems (racheté par Oracle)
¡ Portable (compatible avec tous les systèmes ayant une
machine virtuelle Java) avec Windows, Mac, Linux, etc.
¡ Très utilisé
¡ De nombreuses sortes de programmes Java existent :
¡ 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 (téléphones, PDA, …) ;
¡ ...
¡ Attention
¡ Ne pas confondre avec Javascript (langage de scripts utilisé sur
les sites web)
8
Java
¡ Développer en java des codes sources
¡ Utiliser uniquement JDK
¡ Le Java Development Kit (JDK)
¡ Pour compiler le code source Java en bytecode afin que la
machine virtuelle Java (JVM) puisse l'interpréter.
¡ Utiliser un environnement de développement (IDE : Integrated
Development Environment)
¡ Compilateur + éditeur de code + outils d’aide pour retrouver les
bugs + …
¡ Nous utiliserons l’IDE Eclipse
¡ [Link]
9
9
10
Java
¡ Exécuter en java des bytecodes nécessite un
environnement d'exécution Java dit JRE (Java Runtime
Environment)
¡ Constitué d'une JVM (Java Virtual Machine)
¡ Des bibliothèques standards dites API (Application
Programming Interface) à partir desquelles doivent être
développés tous les programmes en Java
¡ Les distributions Java
¡ JSE (Java Standard Edition) = JDK + JRE + …
¡ JEE (Java Enterprise Edition) = JDK + JRE + +++
¡ JME (Java Micro Edition destiné à des systèmes légers
(téléphone mobile, PDA, …), quelques variantes
¡ …
11
Les instructions en Java
¡ Un programme est une suite d’instructions
¡ Chaque instruction se termine par un « ; »
¡ Les instructions sont regroupées dans des blocs délimités par des { }
¡ Indentation pour faire ressortir les blocs
¡ Les commentaires {
¡ Il est possible d’ajouter des commentaires Instructions
¡ Deux syntaxes différentes {
¡ // commentaire sur une ligne Instructions
¡ /* }
commentaire sur plusieurs lignes
Instructions
*/
¡ Indispensables pour comprendre {
le code et le reprendre plus tard Instructions
}
¡ Un langage de programmation à donc }
une syntaxe à respecter
12
Les variables simples et
opérateurs
¡ Nombres entiers
¡ Nombres à virgule flottante
¡ Caractère
¡ Booléen
USSI1R
13
Les variables
¡ Une variable
¡ est caractérisée par un nom
¡ Attention : les noms sont sans accent, sans caractère blanc
¡ Majuscule ≠ minuscule
¡ renvoie à une position de la mémoire de l’ordinateur
¡ a un type qui définit la taille réservée en mémoire et les opérations possibles
¡ peut prendre successivement différentes valeurs pendant l'exécution d'un
programme.
Nom : X
¡ Syntaxe : type nom; Valeur actuelle :
¡ Exemples :
¡ int a; //déclarer a de type entier
Adresse : 10FFA3
¡ int a,b,c; //déclare a, b et c de type entier
¡ int a = 0; //déclare a de type entier et lui affecte la valeur 0
14
Le codage des variables
¡ L’ordinateur d’un point de vue physique ne connait que :
¡ Un bit (binary digit)
¡ Valeurs possibles
¡ 0 («le courant ne passe pas») ou 1 («le courant passe»)
¡ binaires
¡ Plus petite unité théorique
¡ Regroupé en octet (plus petite unité pratique)
¡ Un octet (synonyme byte)
¡ 8 bits adjacents
1 0 0 1 0 0 1 0
15
Codage d’un entier positif
¡ Utilisation d’un octet 0 0 0 0 1 1 0 1
¡ exemple
27 26 25 24 23 22 21 20
¡ 1101
¡ (1 x 23)+(1 x 22)+(0 x 21)+(1 x 20)
¡ (1 x 8)+(1 x 4)+(0 x 2)+(1 x 1)
¡ 8+4+0+1 = 13
¡ Le plus petit entier 0 0 0 0 0 0 0 0
« codable »
27 26 25 24 23 22 21 20
¡ 0
¡ Le plus grand entier « codable »
¡ 27+26+…+20
¡ 28-1 1 1 1 1 1 1 1 1
¡ 256 entiers possibles 27 26 25 24 23 22 21 20
¡ De 0 à 255
16
Codage d’un entier positif
¡ Notation avec la base en indice
¡ Exercices
¡ Décoder 10012
¡ Coder 1210
¡ addition
¡ 102 + 12 = 112
¡ 1102 + 12 = 1112
¡ 102 + 11 = 1012
¡ Adition avec retenu classique en base 2
¡ Problème
¡ Taille limité et débordement
¡ Exemple Octet
¡ 111111112 + 12 = 000000002
Codage Octet et
17
Hexadécimal
¡ Remarques
¡ 8 « 0 ou 1 » c’est long
¡ Pour réduire il est possible de changer de base
¡ Utilisation d’une puissance de 2 comme base
¡ Autre écriture possible
¡ Base Hexadécimale (base 16)
¡ Valeurs
¡ 0,1 … 9, A, B … F
¡ Remarque
¡ 28 = 162
¡ 1 octet = 2 chiffres Hexadécimaux
¡ 00000000 = 00 (en Hexadécimal)
¡ Notation avec la base en indice
¡ 000000002 = 0016
¡ 111111112 = FF16
¡ Exemple
¡ Les nuances de couleurs sont souvent codé en Hexadécimal sur 226 valeurs
18
Autres codages
¡ Entiers positifs et négatifs (un octet) : pour coder les nombres
positifs et négatifs
¡ Représentation 1 :
¡ 1 bit est réservé pour le signe
¡ 7 bits pour la valeur absolue
¡ Exemple :
¡ 000000102 = 210 et 100000102 = -210
¡ Représentation 2 :
¡ Complément à 2
¡ On prend le nombre positif
¡ Exemple : 410 = 000001002
¡ On inverse les bits :
¡ 11111011
¡ On ajoute 1 :
¡ 11111100
19
Autres codages
¡ Nombre à virgule (nombre flottant)
¡ Pour coder les nombres en binaire
¡ Représentation sous la forme
¡ SM2e
¡ S est le signe
¡ M la mantisse
¡ e l'exposant
20
Autres codages
¡ Caractères
¡ Sur un octets : norme ASCII
¡ Les 128 sont commun
¡ Les 128 suivant sont différents
¡ Spécifique à un groupe de langue
¡ Différentes tables ASCII (US, latin …)
¡ Exemple
¡ Latin
¡ Commun
¡ A à 4116
¡ Spécifique
¡ é à E916
21
Autre codage
¡ Caractère sur un octet (ASCII)
¡ Plusieurs variantes
¡ 127 premiers sont communs
¡ La suite appartient à une famille de langue
¡ Exemple latin
¡ Il n’est pas possible de mélanger
¡ Caractères latin + Caractères cyrillique impossible
¡ Caractères sur une longueur variables
¡ Unicode et UTF-8
¡ de 1 à 4 octets (compliqué) largeur variable
¡ Les premiers bits traduisent le fait qu’il y a d’autres octets
¡ Exemple
¡ 0XXXXXXX à pas d’autres octets
¡ Même codage que pour les 127 premiers ASCII
¡ 10XXXXXX à un autre octet (codage sur 2 octets)
22
Les types simples de variables
en Java
¡ Les nombres entiers
¡ Le type byte (1 octet) peut contenir les entiers entre -128 et
+127.
¡ Exemple :
¡ byte temperature; // instruction de déclaration d’une variable
// temperature type de la variable byte
temperature = 20 ; // en degré
¡ Le type short (2 octets) contient les entiers compris entre -32 768
et +32 767.
¡ Exemple :
¡ short vitesseMax;
vitesseMax = 32000;
23
Les types simples de variables
en Java
¡ Les nombres entiers (suite)
¡ Le type int (4 octets) va de -231 (» -2,147x109) à 231
¡ Exemple :
¡ int temperatureSoleil;
temperatureSoleil = 15600000; // en kelvins
¡ Le type long (8 octets) de -9*1018 à 9*1018
¡ Exemple :
¡ long anneeLumiere;
anneeLumiere = 9460700000000000;
Les types simples de variables 24
en Java
¡ Nombre à virgule flottante
¡ Le type float (4 octets)
¡ 7 chiffres significatifs
¡ Exemple
¡ float pi;
¡ pi = 3.1415927 et non 3.141592653…;
¡ Attention c’est un point pas une virgule (notation anglo-saxonne)
¡ Le type double (8 octets)
¡ 15 chiffres significatifs
¡ Exemple :
¡ Pi = 3.141592653589793
¡ double division;
division = 0.333333333333333333333333333333333333333333334;
Les types simples de variables 25
en Java
¡ Caractère
¡ Le type char contient UN caractère (par défaut 2 octets
Unicode)
¡ Pour affecter une valeur, il faut écrire le caractère entre de
simples quottes ' '
¡ 'a' est le caractère a
¡ a est la variable de nom a
¡ Exemple :
¡ char caractere;
caractere = ‘a';
¡ Les booléens (vrai, faux)
¡ Le type boolean contient true (vrai) ou false (faux)
¡ Exemple
¡ boolean question;
question = true;
26
L’affectation
¡ Affectation :
¡ attribution d’une valeur à une variable :
¡ a = 4;
¡ b = 2 + a; //affectation résultant du calcul d’une expression
¡ Possibilité de déclarer et d’affecter dans la même instruction
¡ int a = 4;
¡ Déclaration simultanée de plusieurs variables de même type
¡ int a, b, c; // séparation des variables par des virgules
¡ int a = 5, b = 10, c = 3; // déclaration et affectation
¡ Remarque
¡ La première affectation d’une valeur à une variable s’appelle
¡ L’initialisation
27
Les opérateurs simples
¡ Les opérateurs arithmétiques (pour les nombres)
¡ Adition : a = b+c;
¡ Soustraction : a = b-c;
¡ Multiplication : a = b*c;
¡ Division (div) : a = b/c;
¡ Si b et sont des entiers, la variable « a » a pour valeur
le résultat de la division entière
¡ Modulo (mod) : a = b%c;
¡ le reste de la division entière
¡ Expression:
¡ une suite de variables (opérandes) et d’opérateurs
respectant la syntaxe
28
Les opérateurs
¡ Exercise
¡ Si a vaut 10, b vaut 2, c vaut 3 et d vaut 0
¡ Que vaut a/b ?
¡ Que vaut a/d ?
¡ Que vaut a/c ?
¡ Que vaut a%b ?
¡ Que vaut a%c ?
¡ Comment tester qu’un nombre est pair ?
29
Les opérateurs moins simples
¡ Il est courant d’ajouter à une variable une quantité
¡ Exemple
¡ a = a + 10;
¡ a = a + b;
¡ Syntaxe abrégée
¡ a += 10;
¡ a += b;
¡ Cette syntaxe abrégée existe aussi pour - * /
¡ Exercice
¡ Réécrire si possible
¡ a = a - 3;
¡ a = 10 + a;
¡ a = a / b;
¡ a = b/a ;
¡ a = a % 2;
30
Les opérateurs moins simples
¡ Incrémentation
¡ Il est courant d’ajouter à une variable une unité
¡ a = a+1;
¡ Syntaxe abrégée
¡ a++;
¡ ++a;
¡ Question : pourquoi a++ et ++a ?
¡ b = a++; équivaut à
¡ b = a;
¡ a = a+1;
¡ b = ++a; équivaut à
¡ a = a+1;
¡ b = a;
31
Les opérateurs moins simples
¡ Décrémentation
¡ a = a-1;
¡ Syntaxe abrégée
¡ a--;
¡ --a;
¡ Exercice
¡ int a = 5, b = 10, c = 3;
¡ a++;
¡ a = c++;
¡ a /= --c;
¡ Que valent a, b et c ?
32
Conversion de type
¡ Remarque très importante
¡ Les opérateurs doivent avoir des opérandes de même type
¡ Comment changer de type ?
¡ Il faut faire une conversion (cast)
¡ Syntaxe :
¡ nouveau type entre parenthèses suivi du nom de la variable
¡ Exemple
¡ float a = (float) 10.3; // java considère 10.3 comme un double
¡ // possible aussi d’écrire 10.3f ou 10.3F
¡ double b = 10.235689;
¡ // nous voulons un résultat de type float pour l’opération a/b
¡ float c = (float) b;
¡ float resultat = a/ c; // resultat = a/ c;
33
Conversion implicite
¡ Java sait écrire une variable de petite taille dans
une variable de plus grande taille
¡ Exemple
¡ int i=10;
¡ long j = i;
¡ float x =10; // 10 est un entier mis dans un float
¡ double y = x;
¡ Conversion d’ajustement de type
char
byte short int long Conversions sans perte d'information
Celles pouvant souffrir d'une perte.
float double
34
Conversion de type
¡ Exercice
¡ Corriger les instructions suivantes si nécessaires :
¡ int i = 1;
¡ long j = 1;
¡ byte k = 2;
¡ int r1 = i + j;
¡ long r2 = i + k;
35
Opérateurs booléens
¡ Opérateur qui compare deux opérandes et renvoie vrai ou faux
¡ Tester l'égalité : a == b
¡ Test l’inégalité : a != b
¡ Strictement inférieur : a < b
¡ Inférieur ou égal : a <= b
¡ Strictement supérieur : a > b
¡ supérieur ou égale : a >= b
¡ La négation
¡ ! a
¡ Opérateur qui combine deux booléens
¡ ET : &&
¡ OU : ||
36
Opérateurs booléens
¡ Exercice
¡ Que valent a, b, c et d
¡ int i = 2, j = 3;
¡ boolean a, b, c, d;
¡ a = (i<j);
¡ b = (i+1==j);
¡ c = a && b ;
¡ c = a || (! b ) ;
37
Les constantes
¡ Il est possible d’interdire de modifier la valeur
d’une variable une fois initialisée
¡ Syntaxe
¡ final int I = 10;
¡ final float PI = 3.14;
¡ Convention d’écriture
¡ Les constantes sont écrites en majuscule
38
Les entrées sorties
¡ Opérations de bases
¡ Ecriture :
¡ depuis la mémoire vers périphérique de sortie (par
défaut, l’écran)
¡ Lecture :
¡ depuis un périphérique d'entrée (par défaut, le
clavier) vers mémoire
39
Ecriture
¡ Pour écrire, nous utilisons l’instruction :
[Link]();
¡ Exemple
int a = 10;
[Link](a);
¡ Explication rapide :
¡ La méthode print() va écrire la valeur de la variable a en utilisant
l'objet out de la classe System
¡ La variable a est le paramètre de cette méthode
40
Ecriture
¡ Explication un peu plus détaillée
¡ System : classe qui permet surtout d'utiliser l'entrée et la sortie standard
¡ out : objet de la classe System qui gère la sortie standard
¡ print : méthode qui écrit dans la console le paramètre
¡ Les méthodes se terminent toute par des ( ) avec des paramètres si
nécessaire
¡ Entre le nom de l’objet et la méthode, il y a un point
¡ Entre le nom de la classe et le nom de l’objet, il y a un point
41
Ecriture
¡ Pour écrire et passer à la ligne, nous utilisons l’instruction:
[Link]();
¡ Exemple
int a = 10;
[Link](a);
¡ Exercice
¡ Que vont écrire les instructions suivantes :
int a = 10;
int b = 5;
[Link](a);
[Link](b);
[Link](a+b);
Lecture de valeurs entrées 42
au clavier
¡ La classe Scanner
¡ Pour lire, il faut utiliser un objet de la classe Scanner
¡ Pour dire qu’il faut lire ce qui est tapé au clavier (entrée
standard)
¡ [Link] en paramètre
¡ Ce qui donne une déclaration d’un objet du type :
Scanner sc = new Scanner([Link]);
¡ Pour utiliser cette classe, il faut importer au préalable le
package (bibliothèque) qui contient la classe Scanner
¡ Elle se trouve dans le package [Link]
¡ Donc cela donne l’instruction
import [Link]; // première ligne du programme
¡ Remarque :
¡ Un package est une liste de dossiers et sous-dossiers contenant des
classes Java
Lecture de valeurs entrées 43
au clavier
¡ Saisie d’un entier de type int : nextInt();
int i = [Link]();
[Link]("i vaut "+i);
¡ Saisie d’un double nextDouble();
¡ Idem pour float, byte, long, boolean, …
¡ Le type char n’est pas pris en compte
¡ Remarque :
¡ Standard de notation : notation dite dromadaire
¡ les mots se touchent
¡ Le premier mot commence par une majuscule uniquement si c’est une classe
¡ Les autres commencent par une majuscule
Lecture de valeurs entrées 44
au clavier
¡ La saisie d’une chaîne de caractères
¡ Emploie de la méthode nextLine()
¡ Lit la chaîne de caractères tapée au clavier jusqu’à la touche
retour
¡ Renvoie une chaîne de caractères, qu’il faut stocker dans un
objet de la classe String
¡ Exemple
Scanner sc = new Scanner([Link]);
[Link]("Veuillez saisir un mot :");
String str = [Link]();
[Link]("Vous avez saisi : " + str);
Lecture de valeurs entrées 45
au clavier
Exercice
Écrire les instructions pour
¡ afficher un message pour demander de saisir un entier,
¡ lire l’entrée de type double,
¡ le stocker dans une variable d,
¡ puis afficher le message « d vaut … »
46
Premier programme (1)
¡ Objectif écrire dans la console
« Mon premier programme »
¡ Pas à pas
¡ Java est orienté objet
¡ Besoin d’au moins une classe que vous nommez comme vous le voulez
¡ Une classe
¡ Une entête : public class NomDeLaClasse
¡ public :
¡ les autres classes ont le droit d’accéder à cette méthode
¡ Un corps entre accolades
¡ Dans le corps de la classe, création de la fonction principale : main
47
Premier programme (2)
¡ La méthode main
¡ a une entête (signature)
¡ a un corps (un bloc d’instructions)
48
Premier programme (3)
¡ Entête de main
public static void main(String[] args)
¡ Détail de l’entête
¡ public :
¡ les autres classes ont le droit d’accéder à cette méthode
¡ static :
¡ veut dire que la méthode main n’est pas associé à une instance de
cette classe
¡ void
¡ Ne renvoie pas de résultat, que des affichages dans la consoles
¡ (String[] args)
¡ Permet de passer des paramètres si nécessaire (ici c’est inutile)
¡ L’entête de la méthode main est toujours celle-ci (obligatoire)
49
Premier programme (4)
¡ Le corps de main
¡ C’est un bloc d’instructions
¡ Entre accolades
¡ Contient la suite d’instructions
50
Premier programme (5)
¡ Le code dans Eclipse
¡ Puis exécuter
¡ à l’aide du bouton
¡ Affichage dans la console (en bas)
51
Les erreurs (bugs)
¡ Icône dans la colonne à la ligne de l’erreur
¡ Message d’erreur dans la console en anglais simple
52
Exercices 1
¡ Ajouter des instructions pour
¡ Définir deux variables
¡ x (un double) qui vaut 10.256
¡ i (un int) qui vaut 3
¡ Afficher le résultat de x * i
53
Exercices 2
¡ Ajouter des instructions pour
¡ Définir deux variables
¡ x (un double)
¡ i (un int)
¡ Afficher dans la console un texte pour demander à
l’utilisateur d’entrer des valeurs pour x et i
¡ Lire les valeurs de x et i
¡ Afficher le résultat de x * i
¡ Attention pour les lectures, il faut importer avant de
définir la classe, la classe Scanner
import [Link];
54
Fonctions mathématiques
¡ Constante
¡ [Link]
¡ Fonctions générales
¡ [Link](nombre) // double float, int et long sont supportés
¡ [Link](x) //double
¡ [Link](x,p) // xP en double
¡ [Link](x) // racine carrée
¡ [Link](x,y) // min, double float, int et long sont supportés
¡ [Link](x) // arrondi, ceil pour arrondi sup, floor pour arrondi inf
¡ Fonctions trigonométriques
¡ [Link](angleEnRadian) //de même sin, tan
¡ [Link] // conversion de radian en degrés l’inverse est toRadians
¡ Aléatoire
¡ [Link]() // renvoie un double dans l’intervalle [0,1]
55
Résumé
¡ Rappel
¡ La programmation procédurale
¡ La programmation objet
¡ Java
¡ Introduction
¡ Syntaxe et structure de programmes
¡ Variables et codage de caractères
¡ Types et opérateurs
¡ Les entrées sorties
56
¡ Questions ?