PROB Introduction au langage JAVA EPFC ULB 1
BACHELIER en INFORMATIQUE de Gestion PRMT(1) 120p. LAPR(2) 120p. PR(1) PROB(10) 120p. PR(1) PRDV(4) 40p. PR(2 ou 9) COFI(20) 60p. GBDR(5) 120p. LAOG(9) 120p. PR(1) INID(21) 20p. STO2(6) 60p. ORMA(8) SYS2(7) 100p. MAP2(3) 60p. GNET(12) 120p. PR(7) 40p. ANPM(11) GBS1 BSIS(15) 240p. ICOM(13) 40p. 80p. STAT(14) 40p. GBS2(16) 80p. DGUI(17) 40p. PR(5+10) GBS3(23) 80p. PR(16) ANC2(18) 120p. PR(5+11) DNE2(19) 40p. PR(5+10+12) BIEI(24) PR(1 à 23) SBIN(22) 120p. PR(2ou9+5+7+15) 1 er semestre 2è semestre 1 er semestre 2è semestre 1 er semestre 2è semestre PROB - A. Silovy et B. Verhaegen 2 «PR» étant le ou les pré-requis nécessaire(s) pour pouvoir accéder à l UF
Plan général du cours (tentative) Introduction au langage Java (+/- 3 séances) Java Orienté Objet (+/- 12 séances) Introduction aux interfaces graphiques (+/- 3 séances) Conception Orientée Objet (+/- 6 séances) Programmation concurrente (+/- 4 séances) 3
Evaluation Interrogations régulières Deux (ou trois) projets Examen en juin 4
? Langage de programmation orienté objet créé par Sun Microsystems, racheté récemment par Oracle. Points forts : langage portable entre différents OS. librairies standards (API Java) : String, Math, File, Zip, Network, Mail, Le code Java est compilé en un langage intermédiaire (bytecode) sur une machine virtuelle (JVM) multi plates-formes. Tout est objet (mis à part les types primitifs). 5
Pourquoi JAVA? 6
Terminologie Java JVM : Java Virtual Machine JRE : Java Runtime Environment Ensemble d outils pour exécuter des programmes Java sur toutes les plates-formes supportées. Est constitué d une JVM et d une bibliothèque standard à toutes les plates-formes. JDK : Java Development Kit JRE + outils de developpement comme le compilateur (javac) qui produit du bytecode qui sera interprété par la JVM. IDE : Integrated Development Environment Ensemble d outils pour le développement logiciel (Ex : Eclipse, NetBeans) 7
Documentation http://docs.oracle.com/javase/7/docs/ : toute la documentation des librairies Java. http://docs.oracle.com/javase/tutorial/ : très bon tutoriaux. 8
Un premier programme Fichier HelloWorld.java : public class HelloWorld { public static void main(string[] args) { System.out.println("Hello, World!"); } } Compilation (va créer un fichier HelloWorld.class) : $> javac HelloWorld.java Exécution : $> java HelloWorld 9
Commentaires Sur une ligne : //ceci est un commentaire Sur plusieurs lignes : /* commentaires */ 10
Types de base Types de valeur simple char : caractère ASCII 'a', '\t', '\n' int : entier sur 32 bits byte, short, long : autres entiers (8, 16, 64 bits) float, double : nombre réel boolean : valeur logique (vrai / faux) true, false Types de référence String : chaîne de caractères "hello", "12ab» Objets et tableaux 11
Opérations arithmétiques Addition (+), soustraction(-) Multiplication (*), division (/) Attention : entier / entier à entier Pour faire une division réelle, il faut qu un des deux opérants soit réel. Modulo (%) : reste de la division entière Ordre d évaluation : Parenthèses * / % puis + - 12
Variables Déclaration Crée une variable Une variable a un type et un nom String message; int somme; Assignation (=) message = "hello"; somme = 8+2; Initialisation (déclaration et assignation) : int somme = 0; Avant de lire une variable, une valeur doit lui être assignée. Sinon le compilateur déclenchera une erreur. 13
Conventions et bonnes pratiques Donner des noms «intelligents» aux variables, fonctions, etc. Définir une convention et s y tenir Exemples : lowercamelcase pour les variables et méthodes/fonctions. UpperCamelCase pour les classes Pour les constantes, mots en majuscules séparés par des '_' Style d indentation Placement des accolades 14
Blocs et visibilité Bloc d instructions contenus entre { } Un bloc est considéré comme une instruction (une instruction composée) Une variable déclarée dans un bloc est visible jusqu à la fin du bloc public static void main(string[] args) { { String message = "hello"; } System.out.println(message); } Est-ce que ce code compile? 15
Visibilité public static void main(string[] args) { String message = "Bonjour"; { String message = "hello"; } System.out.println(message); } Qu affiche(rait) ce programme? "Garde fou" en Java 16
Conversion des types Convertir des String en nombres : double a = Double.valueOf("10.5"); int b = Integer.valueOf("20"); //int b = Integer.parseInt("20"); double c = a + b; Convertir des nombres en String : int i = 123; String strnombre = String.valueOf(i); La classe Double est un Wrapper pour le type primitif double, Integer est un Wrapper pour int 17
Affichage (écriture) sur la console Affichage en terminal : System.out.println( ) Affiche du texte sur une ligne System.out.print( ) Affiche du texte mais ne passe pas à la ligne public class HelloWorld { public static void main(string[] args) { System.out.println("Hello, World!"); } } 18
Lecture au clavier import java.util.*; //importer la librairie "util" public class Program { public static void main(string[] args) { //creation d'un Scanner Scanner s = new Scanner(System.in); //lecture d'une ligne (String) String message = s.nextline(); } } System.out.println(message); Il existe d autres méthodes de Scanner comme nextint(), nextdouble(), 19
Démonstration Lire un entier en console et lui ajouter 10. 20
Opérateurs logiques == : égalité (ne pas confondre avec =)!= : différence (non égalité) && : conjonction (et) : disjonction (ou) <, <=, >, >= : comparaison! : négation Expression logique : a une valeur logique (boolean) (a >= 0 && a <= 100) 21
Un peu de logique == && == et == == ou ==! == non Lois de De Morgan : a b a b a b true true true true true false false true false true false true false false false false a a true false false true 22
Instructions de branchement if(condition) instruction1 instruction2 Les conditions sont des expressions logiques Si la condition est vraie, on exécute instruction1 et instruction2. Si elle est fausse, on exécute seulement instruction2 23
Instructions de branchement if(condition) instruction1 else instruction2 instruction3 24
Composition if(condition1) if(condition2) instruction1 else instruction2 instruction3 if(condition1) instruction1 else if(condition2) instruction2 instruction3 25
Bonnes pratiques Un conseil : écrire les instructions conditionnelles dans un bloc même s il n y en a qu une aide à réduire les erreurs futures. 26
Boucles Permet d exécuter une suite d instructions plusieurs fois Boucle for : Initialisation Condition Changement for(int i=0; i<10; i++) { System.out.println(i); } i++ correspond à i = i+1 27
Boucle while while(condition) instruction 1. La condition est évaluée 2. Si la condition est vérifiée, l instruction est exécutée et 3. on retourne au point 1. 4. Sinon on sort de la boucle. 28
Boucle while String msg = monscanner.nextline(); while(! msg.equals("stop") ) { } System.out.println(msg); msg = monscanner.nextline(); 29
Boucle do while do instruction while(condition); 1. L instruction est exécutée 2. La condition est évaluée 3. Si la condition est vérifiée, on retourne au point 1, sinon on sort de la boucle. L instruction est exécutée au moins une fois 30
Fonctions Groupe d instructions A un type, un nom, prend des paramètres et renvoie une valeur public static int somme(int a, int b) { } int reponse = a + b; return reponse; Remarque : pour l instant, toutes nos fonc5ons sont accompagnées du modificateur static return arrête la fonc,on et renvoie la valeur à l instruc,on appellante. void main() est la fonction principale, le point d entrée du programme Appel d une fonction : int d = somme(15,5); 31
Exemple complet (Demo) 32
Passage de paramètres Les types primitifs (int, double, boolean, char, ) sont passés automatiquement par valeur (copie) aux fonctions. Les types références (String, tableaux, objets, ) sont automatiquement passés par référence (voir plus loin) 33
Passage de paramètres Par valeur : l expression donnée comme argument est évaluée et assignée à la variable locale. public static void main() { int j = -3; System.out.println(abs(j)); System.out.println(j); } public static int abs(int i) { //ici, i vaut -3 if(i<0){ i = -i; } return i; //renvoie 3 } sortie : 3-3 34
Tableaux (array) Tableau d objets du même type (vecteur) Sa taille est fixe int[] tableau = new int[10]; int[] tableau2 = {1,2,3,4}; Les cases sont indicées de 0 à n-1 tableau[0] = 1; montableau.length renvoie la taille du tableau length et pas length() contrairement aux Strings Remarques : Un tableau est passé par référence à une fonction. C est à dire qu une fonction qui reçoit un tableau peut modifier ce tableau. Attention à ne pas lire à l extérieur du tableau 35
Parcours d un tableau int[] tableau = {1,2,3,4}; for(int i=0; i<tableau.length; i++) { } System.out.print(tableau[i]); System.out.print("\n"); 36
Boucle Foreach Autre façon de parcourir un tableau dans son ordre naturel (ou plus généralement, une collection) 37
Classe String En Java, les chaînes de caractères sont des objets immuables. Création : String greeting = "Hello world!"; Longueur : int longueur = greeting.length(); Accès à un caractère : char c = greeting.charat(2); Concaténation : String string3 = string1.concat(string2); String machaine = Hello, + world +! ; Affichage en console : System.out.println( I say : + greeting); 38
Comparaison de strings En Java, les chaînes de caractères sont des objets immuables. Pour rappel, String n est pas un type primitif. string1.equals(string2) renvoie true si les deux chaines sont égales Attention : s1 == s2 n est pas équivalent à s1.equals(s2) ne pas utiliser == pour comparer des strings s1.compareto(s2) renvoie -1 si s1 est avant s2 0 si s1 est égal à s2 +1 si s1 est après s2 39