Vous êtes sur la page 1sur 30

Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Introduction au langage Java

Professeur : C. Fessard Introduction 1


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Qu’est-ce qu’un langage de programmation


 Le langage est la capacité d'exprimer une pensée et de communiquer au moyen d'un système de signes doté d'une
sémantique, et le plus souvent d'une syntaxe. Plus couramment, le langage est un moyen de communication.
 Un langage de programmation est un code de communication, permettant à un être humain de dicter des ordres
(instructions) à une machine qu’elle devra exécuter.

Professeur : C. Fessard Introduction 2


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Généralités sur les ordinateurs


Deux entités fondamentales
 Microprocesseur : circuit intégré complexe qui est capable d'interpréter et d'exécuter les instructions d'un
programme. Schématiquement, on peut le considérer comme une puissance de calcul.
 Mémoire : permet de mémoriser des données.

Démystifions
 L'ordinateur n’est pas une machine pensante et intelligente, capable de résoudre des problèmes.
 En fait, celui-ci n’est capable de rien si un programmeur ne lui fournit la liste des actions à exécuter.
 Les opérations élémentaires que peut exécuter un ordinateur sont en nombre restreint

Les ordinateurs utilisent uniquement le 0 et le 1 :


 Tout ce que qu’on entend ou voit sur l’ordinateur – mots, images, nombres, films et même sons – est stocké à l’aide
de ces deux chiffres uniquement.
 Tout programme exécuté par l’ordinateur est lui aussi codé par des 0 et des 1.

Les ordinateurs, quels qu’ils soient, ne sont fondamentalement capables de comprendre que quatre catégories d'ordres (en
informatique d'instructions). Ces quatre familles d'instructions sont :
 la lecture / écriture en mémoire
 les tests
 les boucles
 les opérations mathématiques

Professeur : C. Fessard Introduction 3


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Présentation de Java
Petit historique du langage
 On peut faire remonter la naissance de Java à 1991.
 SUN conçoit un langage applicable à de petits appareils électriques (on parle de code embarqué).
 Java fondé sur une - syntaxe très proche de C++ & concept de machine virtuelle (Pascal)
 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
 Si cette dernière dispose d’un programme approprié (machine virtuelle) permettant de l’interpréter dans le langage
de la machine concernée.

Quelques caractéristiques de 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...

Java est un langage fortement typé


Un langage de programmation est dit fortement typé quand le compilateur vérifie que l’on ne fait avec les
objets et les variables du programme que ce qui est autorisé par leur type. Cette vérification a pour effet d’accroître la
fiabilité de l’exécution du programme. Java, C++ et C# sont fortement typés. L’étape de compilation y est essentielle.

Professeur : C. Fessard Introduction 4


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Java et la machine virtuelle


 Le langage Java est un langage orienté objet qui doit être compilé.
 Le compilateur Java ne produit pas directement un fichier exécutable, mais du code intermédiaire sous la forme
d'un ou plusieurs fichiers dont l'extension est .class.
 Ce code intermédiaire est appelé bytecode.
 Un programme Java (fichiers .java), une fois compilé en code intermédiaire (fichier .class), n'est compréhensible
que par la machine virtuelle, qui va traduire à la volée (interpréter) les instructions exécutées en code
compréhensible par la machine physique.
 L'utilisation d'une machine virtuelle a l'énorme avantage de garantir une vraie portabilité.
 Il existe des machines virtuelles Java pour de très nombreux environnements : Windows, MacOS, Linux et autres.

Professeur : C. Fessard Introduction 5


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Notion de machine virtuelle Java


Un machine virtuelle est un logiciel spécifique à chaque plate-forme ou couple (machine/système d’exploitation) et
permet aux applications Java compilées en bytecode de produire les mêmes résultats quelle que soit la plate-forme, tant
que celle-ci est pourvue de la machine virtuelle Java adéquate.

Architecture générale : illustration du slogan Compile once, run everywhere.

Professeur : C. Fessard Introduction 6


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Notion de programme
 Un programme est une suite d'instructions (d’opérations, d’ordres) compréhensible par l'ordinateur qui décrit ce
qu’il devra exécuter.
 Une instruction dicte à l'ordinateur l'action nécessaire qu'il doit effectuer avant de passer à l'instruction suivante.

Exemple :
1. Demander les coefficienst a, b et c à l’utilisateur
2. Calculer delta
3. Si delta < 0 => « pas de solution »
4. Sinon si delta = 0 => x=-b/a
5. Sinon si deltat > 0 =>
Remarques :
 expression : évaluer une expression arithmétique pour calculer delta
 variable : mémorise une valeur dont nous avons besoin à plusieurs endroits

Professeur : C. Fessard Introduction 7


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Premier programme
Démo : créer un projet

 main() : Tous les programmes possèdent une fonction dénommée « main » ce qui signifie « principale », elle
représente le point d’entrée du programme. C'est elle que la JVM va chercher afin de lancer votre programme.
 System.out.print : pour l’instant nous considérons cette insruction comme la fonction d’affichage sur le terminal

Exécution du programme

 Expliciter plusieurs exemples de messages d’erreur à la compilation.

Professeur : C. Fessard Introduction 8


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Notion de variable
Une variable, en programmation, est un espace mémoire

Un ordinateur à plusieurs types de mémoire :


1. Les registres : une mémoire ultrarapide située directement dans le processeur – mémoire temporaire
2. La mémoire cache : elle fait le lien entre les registres et la mémoire vive – mémoire temporaire
3. La mémoire vive : c'est la mémoire avec laquelle nous allons travailler le plus souvent – mémoire temporaire
4. Le disque dur : C'est là qu'on enregistre les fichiers – mémoire persistante

Une variable est stockée en mémoire vive (RAM).


Schéma de la mémoire vive
La mémoire est un ensemble de "positions binaires" nommées bits. Les bits sont
regroupés en octets (8bits), et chaque octet est repéré par son adresse.

Deux colonnes :
- Adresses : identifie une zone mémoire
- A chaque adresse, on peut stocker une valeur (en binaire)

Toute information, quelle que soit sa nature, devra être codée sous forme binaire.

Il ne suffit pas de connaître le contenu d'un emplacement de la mémoire pour être


en mesure de lui attribuer une signification mais de connaitre aussi son type.

Professeur : C. Fessard Introduction 9


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Définition d’une variable

Une variable est un triplé composé


1. d'un identificateur : nom par lequel la donnée est désignée
2. d'un type : définit de quel « genre » est la donnée contenue dans la variable
3. le contenu de la variable : sa valeur

Nommer une variable, règles :


- les noms de variables sont constitués de lettres, de chiffres et du tiret-bas _ uniquement.
- Votre nom de variable doit commencer par une lettre.
- Vous n'avez pas le droit d'utiliser des accents
- Les espaces sont interdits.

Les types primitifs (ou de bases) de java


type taille signification
Unicode byte 1 octet entier compris entre -128 et +127
Système de codage créé en 1998, Unicode short 2 octets entier compris entre -32768 et +32767
spécifie un nombre unique pour chaque int 4 octets entier de -2*109 à 2*109
caractère, quels que soient la plate-forme, le long 8 octets entier de -9*10e18 à 9*10e18
logiciel et la langue utilisés. 4 octets nombres à virgule flottante
float
Unicode traduit chaque caractère en 16 bits.
double 8 octets réel (plus précis que float)
char 2 octets UN caractère Unicode
boolean non spécifié contient true (vrai) ou false (faux).

Professeur : C. Fessard Introduction 10


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Déclaration de variable
Permet à l’ordinateur de réservé de l’espace mémoire (dont l’espace dépend du type) et donc de créer la variable.

Déclaration avec initialisation


int n = 4 ;
double d = 4.0 ;

Déclaration sans initialisation


int nCarre ;
double d ;

Règle : Une variable non initialisée ne peut être utilisée.

Exemple

Erreur à la compilation

Professeur : C. Fessard Introduction 11


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Une fois défini, le type de la variable ne peut plus changer

Exemples de déclaration

Règles pour nommer les variables:


 Le nom peut être constitué uniquement de lettres, de chiffres, et des symboles _ (underscore) et $. Pas d’espace !
 Le premier caractère est nécessairement une lettre ou un symbole;
 Le nom ne doit pas être un mot-clé réservé par le langage Java;
 Les majuscules et les minuscules sont autorisées mais ne sont pas équivalentes (ligne et Ligne désignent deux
variables différentes).

Professeur : C. Fessard Introduction 12


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Opérateur d’affectation

Exemple :

Une affectation est une instruction qui permet de modifier la valeur d’une variable.
=> Attention, une affectation n'est pas une égalité mathématique
Règle générale : une expression calcule une valeur, qui doit être de même type que la variable.

L'exécution d’une affectation se décompose en deux temps :


1. L'expression à droite du signe = est évaluée
 n * n est évaluée avec la valeur de n au moment de l’exécution.
 L’étoile * représente la multiplication, n * n vaut donc 4 × 4 = 16
2. La valeur de l’expression est stockée dans la variable à gauche du signe =
 L’ancienne valeur de n_carre est perdue
Autres exemples d’expressions : -4
-n*n
- n * (n + 1) + 3 * n – 2

Professeur : C. Fessard Introduction 13


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Une affectation n'est pas une égalité mathématique

a = a + 1;
=> signifie « calculer l’expression de a + 1 et ranger le résultat dans a. Cela revient à augmenter de 1 la valeur de a »

Déclaration de constantes
Il peut arriver que la valeur d'une variable ne doive pas changer après l'initialisation.

Par exemple:

Dans ce cas, on ne peut plus modifier la variable:

Professeur : C. Fessard Introduction 14


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Conversion et casting des types primitives


Contexte
Les conversions vers un type dont la taille de la représentation est plus grande ou égale se font automatiquement sans
avoir besoin d’être spécifié.

Le casting (mot anglais qui signifie moulage), également appelé cast ou, parfois, transtypage, consiste à effectuer une
conversion d'un type vers un autre type.

Le casting peut être effectué dans deux conditions différentes :


 Vers un type plus général. On parle alors de sur-casting ou de sur-typage.
 Vers un type plus particulier. On parle alors de sous-casting ou de sous-typage.

Sur-casting : Le sur-casting peut se faire implicitement ou explicitement.

Sous-Casting : Le sous-casting ne peut se faire qu’explicitement.

Professeur : C. Fessard Introduction 15


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Ecrire la valeur d’une variable à l’écran

 La fonction System.out.println fait un "retour à la ligne


 Il existe une variante qui ne fait pas de retour à la ligne: System.out.print

 System : ceci correspond à l'appel d'une classe qui s'appelle "System". C'est une classe utilitaire qui permet
surtout d'utiliser l'entrée et la sortie standard.
 out : objet de la classe System qui gère la sortie standard.
 println : méthode qui écrit dans la console la chaîne passée en paramètre.

Professeur : C. Fessard Introduction 16


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

On peut aussi afficher une expression :

Attention, si on veut afficher une somme:

=> ajouter les parenthèses pour éviter l’ambiguïté.

Démo : Exécution du programme pas-à-pas

Professeur : C. Fessard Introduction 17


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Exercices : Qu’affichent ces programmes ?

Exercice : Comment échanger la valeur de deux variables a et b ?

Professeur : C. Fessard Introduction 18


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Notion de paquet (package)


 Le langage Java n'est qu'une multitude de classes ordonnées en paquets.
 Par défaut, le compilateur importe le paquet java.lang contenant les fondements de Java (définition des variables
de bases, la classe System et beaucoup d'autres choses).
 Un paquet est en fait un ensemble de classes.
 Les autres classes doivent être importées pour pouvoir vous en servir.

La notion de paquetage correspond à un regroupement logique sous un identificateur commun d’un ensemble de classes.
Elle est proche de la notion de bibliothèque que l’on rencontre dans d’autres langages.

Attribution d’une classe à un paquetage


 Un paquetage est caractérisé par un nom.
 L’attribution d’un nom de paquetage se définit de la première instruction du fichier source.
 Toutes les classes d’un même fichier source appartiendront donc toujours à un même paquetage.

Professeur : C. Fessard Introduction 19


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Lire à partir du clavier

Créer un objet Scanner :

System.in représente l’entrée standard, le clavier

Professeur : C. Fessard Introduction 20


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

keyb, variable qu'on utilise pour lire des valeurs au clavier, ici un entier :

1. Arrête le programme momentanément;


2. Attend que l'utilisateur entre une valeur au clavier et appuie sur la touche return;
3. Affecte la valeur entrée par l'utilisateur à la variable n,
4. Le programme continue

De façon générale, pour récupérer un type de variable, il vous suffit d'appeler la méthode se prénommant :
next<Type de variable commençant par une majuscule>

Exemples :

Démo : Exécution du programme pas-à-pas

Professeur : C. Fessard Introduction 21


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Lecture d'une ligne complète

=> s contient tous les caractères tapés par l'utilisateur, jusqu'à l'appui de return.
Attention : La méthode nextLine se combine mal avec les autres méthodes de lecture.

Si on tape: 14
terre
mer
=> i contient 14, s1 est vide, s2 contient terre !

car nextLine() lit ce qui suit 14 jusqu'à la fin de la ligne, c'est-à-dire rien !

Pas de nextChar() dans la classe Scanner !


Pour lire un caractère (char) au clavier avec la classe Scanner :

Professeur : C. Fessard Introduction 22


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Expressions et opérateurs
A droite du signe égal dans une affectation se trouve une expression:

Une expression
 calcule une valeur, qui doit être de même type que la variable.
 une expression possède son propre type
 peut-être simplement une valeur littérale (ex : n=4 ou d=3.14)
 ou une formule qui met en œuvre des opérateurs:
n*n
n * (n + 1) + 3 * n - 2

Les valeurs littérales et leurs types


 1 est de type int
 1.0 est de type double
Note : notation scientifique : 2e3 pour 2×10 3 double d = 2e3 ;

Les opérateurs
Sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer.
Les principales familles d'opérateurs:
 Les opérateurs arithmétiques
 Les opérateurs de test
 Les opérateurs logiques booléens

Professeur : C. Fessard Introduction 23


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Les opérateurs arithmétiques


= affectation
+ addition
- soustraction
* multiplication
/ division
% reste de la division (modulo, ne s’applique qu’à des opérandes de type entier).

Note : division
si la division se fait entre deux entier (int), il s'agit de la division entière :
1 / 2 vaut 0 (1 = 0 x 2 + 1) 5 / 2 vaut 2 ( 2 = 2 x 2 + 1)
1 / 2.0 vaut bien 0.5 (1 convertit en double 1.0)

Exemple :

Exercice : Quelle est la valeur de la variable moyenne après l’exécution de la séquence d’instruction suivante ?

Professeur : C. Fessard Introduction 24


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Solutions :

Opérateurs raccourcis : += , -= , *= , /=
a=a+b; est équivalent à a += b ;
c=c*d; est équivalent à c *= d ;

Pour les variables entières, il existe un opérateur d’incrémentation (++n) et un autre de décrémentation (--m) :
++n ; est équivalent à n=n+1;
--m ; est équivalent à m=m-1;

Affectation d’une valeur décimale à une variable entière :

Erreur de compilation :
Type mismatch: cannot convert from double to int

Règle : En Java, il est impossible d'affecter une valeur décimale par exemple
de type double à une variable de type int.

Remarque : En revanche, il est possible d'affecter une valeur de type int à une
variable de type décimale, par exemple double (pas de perte de précision).

Professeur : C. Fessard Introduction 25


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Les fonctions mathématiques


 Java fournit les fonctions mathématiques usuelles, ainsi que des constantes comme Pi.
 L'ensemble des fonctions disponibles est documenté dans:
http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html

Ces fonctions et constantes s'utilisent en suivant la notation:

Professeur : C. Fessard Introduction 26


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Annexe – code source


Exemple : Déclaration de variable
int nCarre;
System.out.println(nCarre);

Ecrire l’écran
Démo : Exécution du programme pas-à-pas
int n = 4;
int nCarre;

nCarre = n * n;

System.out.println("La variable n contient " + n);


System.out.println("Le carre de " + n + " est " + nCarre + ".");
System.out.println("Le double de n est " + 2 * n + ".");

Lire à partir du clavier


Scanner keyb = new Scanner(System.in);

System.out.println("Entrez une valeur pour n");


int n = keyb.nextInt();

int nCarre = n * n;
System.out.println("La variable n contient " + n);
System.out.println("Le carre de " + n + " est " + nCarre + ".");
System.out.println("Le double de n est " + 2 * n + ".");

Démo : Exécution du programme pas-à-pas


Scanner keyb = new Scanner(System.in);
System.out.println("Entrez une valeur pour n");
int n = keyb.nextInt();
int nCarre = n * n;

Professeur : C. Fessard Introduction 27


Licence Génie Logiciel Le langage Java année universitaire 2016/2017
System.out.println("La variable n contient " + n);

Exercices : les opérateurs arithmétiques


int note1 = 4;
int note2 = 5;
double moyenne = (note1 + note2) / 2.0;

Fonctions mathématiques
double angle = 10 * Math.PI / 180;
double s = Math.sin(angle); // conversion degré radian
System.out.println("Le sinus d'un angle de 10 degrés est de : "+s);

public class Principale {


public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println("Entrez un angle en degres: ");


double angleEnDegres = scanner.nextDouble();
double angleEnRadians = Math.PI * angleEnDegres / 180;
System.out.println("Sa valeur en radians est " + angleEnRadians);
System.out.println("Son cosinus vaut " + Math.cos(angleEnRadians));
}
}

Professeur : C. Fessard Introduction 28


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Annexe - dessin

Il faut d'abord importer la classe Scanner


pour la rendre visible au compilateur:

On peut maintenant créer un objet


Scanner et l’utiliser pour lire des
valeurs saisies au clavier.

Professeur : C. Fessard Introduction 29


Licence Génie Logiciel Le langage Java année universitaire 2016/2017

Annexe - Mot réservé Java

Professeur : C. Fessard Introduction 30

Vous aimerez peut-être aussi