Langage Java Plan du cours Historique du langage

publicité
Plan du cours
Introduction au
Langage Java
Master Informatique 1ère année
Julien Velcin
http://mediamining.univ-lyon2.fr/velcin
• 
• 
• 
• 
• 
• 
Historique du langage
Nouveautés de Java 7
http://www.oracle.com/technetwork/java/index.html
•  Java 1.0 (1995) : Oak
.
.
.
•  Java 1.5.0 (2004) ou Java 5.0 : Tiger
•  Java 1.6.0 (2006) ou Java 6 : Mustang
•  Java 7 (2012) : Dolphin
•  Java 8 (2014)
Sous licence GPL depuis 2006 !
Sun est racheté par Oracle en 2010
Trois versions : JavaEE, JavaME et JavaSE
Java Runtime Environment (JRE) et Java SDK (JDK)
Introduction au langage Java
Programmation Orientée Objet
Notions complémentaires
Quelques API standards
Interface graphique en Java FX
API pour la recherche d’information
•  Améliorations de la machine virtuelle
•  Petites améliorations du langage
–  ex. : switch sur les chaînes (String), expressions litérales
binaires (0b101000101), multi-catch (IOException |
SQLException)…
• 
• 
• 
• 
Support des langages dynamiques
Nouveau package d’accès aux données
API de concurrence (framework Fork/Join)
AWT/Swing (transparence, Nimbus…)
Nouveautés de Java 8
•  Programmation fonctionnelle avec les « lambdas »
(paramètres) -> {code}
•  Ajout de méthodes par défaut pour beaucoup
d’interfaces (permet par ex. l’ajout d’une méthode de tri
direct pour les collections)
•  Nouveaux package « java.util.function » et
« java.util.stream » pour réaliser des opérations
fonctionnelles sur des flux (en ligne ou parallèles)
•  De nouvelles annotations (ex. @FunctionalInterface pour
les interfaces dites « fonctionnelles »)
•  Gestion améliorée des dates et du temps
Mon premier programme
Dans le fichier Hello.java, écrire :
public class Hello
{
public static void main(String [] arg)
{
System.out.print(" Hello world ");
}
}
• 
• 
• 
• 
Ouvrir la ligne de commande (DOS, bash)
Se placer dans le répertoire de travail (cd nom_repertoire)
Tapez javac Hello.java (création du pseudo code)
Puis java Hello (interprétation du pseudo code)
Caractéristiques
•  Langage interprété (bytecode)
WORA : Write Once Run Anywhere
Code
Byte-Code
Pseudo compilateur
javac
Machine virtuelle
(JVM) java
â haut niveau
â portabilité
Exécution
•  Langage orienté objet
•  Gestion des exceptions
•  Garbage collector
â réutilisabilité
â extensibilité
â robustesse
â intégrité
Variables d environnement
Sous Windows :
•  Mise à jour du chemin de la JVM :
set path=%path%;c:\Program Files\Java\jdk1.5.0_06\bin
•  Mise à jour du chemin de recherche des classes :
set classpath=%classpath%;.
Sous Linux ou MacOS (architecture UNIX) :
•  Mise à jour du chemin de recherche des classes :
export CLASSPATH=$CLASSPATH:.
Environnement NetBeans (1)
Environnement NetBeans (2)
Organisation du projet
Code source
Environnement NetBeans (3)
Environnement NetBeans (4)
•  Quelques raccourcis TRES utiles :
Exécution (texte) du programme
–  Ctrl + Shift/Cmd + i : import automatique
–  Cmd + Shift + C : toggle comments
–  Clic droit + Insert Code
–  St + tab : String
–  sout + tab : System.out.println…
–  ifelse : if (cond.) {} else {}
Environnement ECLIPSE (1)
Environnement ECLIPSE (2)
Organisation du projet
Code source
Environnement ECLIPSE (3)
Environnement ECLIPSE (4)
Organisation de la classe
Exécution (texte) du programme
Types de données simples (2)
Types de données simples (1)
• 
Entiers (1, 2, 3, …) : int
Opérateurs : + - * / % (reste de la divistion)
Exemple : 5/2 = 2 et 5%2 = 1
• 
Réels (2.4, 3.1416, …) : double
Opérateurs : + - * /
Exemple : 5.0/2.0 = 2.5
• 
Booléens (true, false) : boolean
Opérateurs : && (and), || (or), ! (not)
Exemple : !true = false
Note : pas de type simple pour les chaînes de caractères
Caractères spéciaux
\ caractère d échappement pour introduire caractères spéciaux
'\t' tabulation
'\n' nouvelle ligne
'\r' retour chariot retour arrière
'\f' saut de page
…
'\\' '\ ' '\"
\u03a9 ( \u suivi du code hexadécimal à 4 chiffres d un
caractère Unicode)
Type
Codage
Domaine
Char
2 octets
caractère Unicode
int
4 octets
[-231, 231-1]
long
8 octets
[-263, 263 -1]
byte
1 octet
[-27 , 27 -1]
short
2 octets
[-215, 215-1]
float
4 octets
[3.4 10-38, 3.4 10+38] en
valeur absolue
double
8 octets
[1.7 10-308 , 1.7 10+308] en
valeur absolue
boolean
1 bit
true, false
String
référence d'objet
chaîne de caractères
Date
référence d'objet
date
Types de données simples (3)
• 
Déclaration de variables :
int i;
i
Nom de la variable,
représente un espace mémoire.
Type de la variable,
ce que peut contenir l’espace mémoire.
• 
i
Affectation :
i = 10;
i = i + 1;
int j = 11;
10
Valeurs
i
11
Types de données simples (4)
• 
Opérateurs de comparaison :
Opérateurs d entrées / sorties
• 
<, <=, >, >=, !=, == â ne pas confondre avec =
System.out.print("Ecrit à l'écran");
System.out.println("Et passe à la ligne");
boolean ← var_type_1 opérateur var_type_1
• 
Exemple :
commentaire
Utiliser la classe Scanner du package java.util :
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
String s = scan.nextLine();
Structures de contrôle (1)
Branchement conditionnel :
Structures de contrôle (2)
Exemple (saisie d’information) :
Syntaxe :
if (condition)
{
instructions
}
else
{
instructions
}
Entrée :
System.in.read( … );
boolean b = (5<2); // b = false
• 
Sortie :
public class Saisie {
if (condition)
public static void main(String [] arg) {
System.out.println(“Pause ?");
int reponse = Lire.i();
if (reponse==1)
System.out.println(“Non, continuons.");
else
System.out.println(“Oui, dans 1 heure.");
}
instruction
else
instruction
(facultatif)
}
Structures de contrôle (3)
• 
Branchement multiple :
Syntaxe :
Structures de contrôle (4)
• 
Nouveauté Java 7 : String supportée
switch (variable_énumérable) {
case valeur_1 :
instructions
break;
Ne pas oublier !
case valeur_2 :
instructions
break;
default :
Tous les autres cas
instructions
}
L exécution est contrôlée par un indice ⇒ nombre d itérations
connu à l avance.
Syntaxe :
Exécuté 1 fois
Exemple :
for (indice=0; indice<30; indice++) {
System.out.println(indice); // réalisée 30 fois
}
L exécution est contrôlée par une condition
â nombre d itérations inconnu par avance.
Syntaxe :
(On peut ne pas rentrer)
Problème :
o  Programme trop long
o  Copier/Coller
• 
Solution :
Créer des blocs isolés réutilisables = fonctions et procédures
Continue tant que condition = vrai
while ( condition )
{
instructions;
}
Fonctions et procédures (1)
• 
Boucles conditionnelles :
Exécuté à chaque fois
for ( initialisation ; condition_de_boucle ; évolution )
{
instructions;
}
Continue tant que condition = vrai
Structures de contrôle (5)
• 
Boucles indicées :
do {
instructions;
} while ( condition )
(On rentre au moins une fois)
Syntaxe :
public class nom_classe {
…
public static type_retour nom_fonction(type_param nom_param1, …)
{
instructions;
return valeur;
}
…
}
Fonctions et procédures (2)
Fonctions et procédures (3)
Exemple :
• 
public class UneFonction {
public static double la_fonction(int param_1) {
System.out.println("Paramètre de la fonction: "+ param_1);
return param_1*2;
}
public static void main(String arg[]) {
System.out.println("Avant l'appel");
int pour_fonction = 23;
int resultat_fct = la_fonction(pour_fonction);
System.out.println("Résultat de la fonction: "+resultat_fct);
}
Procédure :
o  Type retour vide â void
o  Pas d’instruction return
Exemple :
public static void main( … )
}
Avant l’appel
Paramètre de la fonction: 23
Résultat de la fonction: 46
Tableaux (1)
Tableaux (2)
•  Déclaration :
•  Autres :
type[] nom_tableau; ⇔ type nom_tableau [];
t_d
∅
Ex.: double[] t_d;
t_d.length
t_d
Exemple :
Ex.: t_d = new double[4];
•  Accès aux cellules du tableau :
o  Ecriture :
o  Lecture :
t_d[0] = 3.2;
double d = t_d[0];
double t_d[] = {0.3,9.0,1.2,4.6 };
o  Taille du tableau :
•  Instanciation :
nom_tableau = new type [taille];
o  Instanciation à la volée :
t_d
t_d[0]
3.2
d
3.2
t_d[3]
for (int i=0;i<t_d.length;i++)
{
System.out.println("valeur case " + i + ":"
+ t_d[i]);
}
Projet : une base d’actualité
•  Objectif des TDs :
–  Construire un système d’information pour stocker et
interroger des news
–  Noyau du projet qui sera demandé pour l’évaluation
de cet enseignement
•  Plusieurs étapes :
–  TD1 : squelette du SI sans interface graphique
–  TD2 : héritage, flux, manipulation de chaînes de
caractères, ajout d’une interface graphique
–  TD3 : indexation des textes avec Lucene
Plan du cours
• 
• 
• 
• 
• 
• 
Introduction au langage Java
Programmation Orientée Objet
Notions complémentaires
Quelques API standards
Interface graphique en Java FX
API pour la recherche d’information
Petite démonstration
Téléchargement