Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin Plan du cours Notions de Génie Logiciel 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 Historique du langage 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) Nouveautés de Java 7 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 Caractéristiques 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 packagex «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 Langage interprété (bytecode) WORA : Write Once Run Anywhere Code Pseudo compilateur javac Langage orienté objet Gestion des exceptions Garbage collector Byte-Code Machine virtuelle (JVM) java! haut niveau! portabilité Exécution! réutilisabilité! extensibilité! robustesse! intégrité 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) 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) Exécution (texte) du programme Quelques raccourcis TRES utiles : 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
Types de données simples (1) Types de données simples (2) Entiers (1, 2, 3, ) : int Opérateurs : + - * / % (reste de la divistion) 5/2 = 2 et 5%2 = 1 Réels (2.4, 3.1416, ) : double Opérateurs : + - * / 5.0/2.0 = 2.5 Booléens (true, false) : boolean Opérateurs : && (and), (or),! (not)!true = false Note : pas de type simple pour les chaines de caractères Type Codage Domaine Char 2 octets caractère Unicode int 4 octets [-2 31, 2 31-1] long 8 octets [-2 63, 2 63-1] byte 1 octet [-27, 27-1] short 2 octets [-215, 215-1] float double 4 octets 8 octets [3.4 10-38, 3.4 10+38] en valeur absolue [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 Caractères spéciaux Types de données simples (3) \ 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) Déclaration de variables : int i; Nom de la variable, représente un espace mémoire. Type de la variable, ce que peut contenir l espace mémoire. Affectation : i = 10; i = i + 1; int j = 11; Valeurs i i i 10 11
Types de données simples (4) Opérateurs de comparaison : <, <=, >, >=,!=, ==! ne pas confondre avec = boolean var_type_1 opérateur var_type_1 boolean b = (5<2); // b = false commentaire Opérateurs d entrées / sorties Sortie : System.out.print("Ecrit à l'écran"); System.out.println("Et passe à la ligne"); Entrée : System.in.read( ); Classe Lire (fichier Lire.java) : Lecture d un entier : Lire.i(); Lecture d un réel : Lire.d(); Enregistrer dans le même répertoire que votre programme. Structures de contrôle (1) Branchement conditionnel : Structures de contrôle (2) Exemple (saisie d information) : public class Saisie if (condition) else if (condition) instruction else instruction (facultatif) 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.");
Structures de contrôle (3) Branchement multiple : Nouveauté Java 7 : String supportée switch (variable_énumérable) case valeur_1 : break; Ne pas oublier! case valeur_2 : break; default : Tous les autres cas Boucles indicées : L exécution est contrôlée par un indice nombre d itérations connu à l avance. Structures de contrôle (4) Exécuté 1 fois Exécuté à chaque fois for ( initialisation ; condition_de_boucle ; évolution ) ; Continue tant que condition = vrai for (indice=0; indice<30; indice++) System.out.println(indice); // réalisée 30 fois Structures de contrôle (5) Boucles conditionnelles : L exécution est contrôlée par une condition! nombre d itérations inconnu par avance. Continue tant que condition = vrai while ( condition ) ; (On peut ne pas rentrer) do ; while ( condition ) (On rentre au moins une fois) Fonctions et procédures (1) Problème : o Programme trop long o Copier/Coller Solution : Créer des blocs isolés réutilisables = fonctions et procédures public class nom_classe public static type_retour nom_fonction(type_param nom_param1, ) ; return valeur;
Fonctions et procédures (2) 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); Fonctions et procédures (3) Procédure : o Type retour vide! void o Pas d instruction return public static void main( ) Avant l appel Paramètre de la fonction: 23 Résultat de la fonction: 46 Déclaration : Tableaux (1) type[] nom_tableau; type nom_tableau []; Ex.: double[] t_d; Instanciation : nom_tableau = new type [taille]; Ex.: t_d = new double[4]; Accès aux cellules du tableau : o Ecriture : t_d[0] = 3.2; o Lecture : double d = t_d[0]; t_d t_d d 3.2 t_d t_d[0] 3.2 % t_d[3] Autres : o Instanciation à la volée : Tableaux (2) double t_d[] = 0.3,9.0,1.2,4.6 ; o Taille du tableau : t_d.length for (int i=0;i<t_d.length;i++) System.out.println("valeur case + i + ":" + t_d[i]);
Projet : une base d actualité Petite démonstration 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 Notions de Génie Logiciel 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