700 likes | 910 Views
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe.collard@unice.fr http://deptinfo.unice.fr/~pc. P.O.O Langage Java. Introduction (rappel) Bases du langage (rappel) Programmation Orientée Objet. Organisation. 8 cours jeudi 10h-11h30 semaine 40 - 42..45 - 47..49
E N D
LICENCE MIAGE IntroductionProgrammation Orientée ObjetJAVAphilippe.collard@unice.frhttp://deptinfo.unice.fr/~pc
P.O.OLangage Java • Introduction(rappel) • Bases du langage (rappel) • Programmation Orientée Objet
Organisation • 8 cours • jeudi 10h-11h30 • semaine 40 - 42..45 - 47..49 • 12 TDM • groupe 1 (lundi 10h-12h) • groupe 2 (lundi 13h-15h) • semaine 41..44 - 46..51 - 1 - 2 • Évaluation • Contrôle continu (amphi+TDM+partiel) (33%) • Examen (67%) • ECTS : 3
Bibliographie Java : de l'esprit à la méthode Michel Bonjour et al. Vuibert The Java Programming Language Ken Arnold et James Gosling The Java Series. Addison Wesley consulterlaJava Book List http://metalab.unc.edu/javafaq/books.html
Quelques sites Sun http://java.sun.com produits, documentation, the JavaTM Tutorial Java Developer Connection Gamelan http://www.gamelan.com JavaWorld Magazine http://www.javaworld.com/ Java FAQ http://www.ibiblio.org/javafaq/javafaq.html
Créer votre première application Le premier programme, Hello, affiche simplement le texte "Hello !" • Créer un fichier sourceHello.java Un fichier source contient du texte, écrit en Java • Compiler le source en fichier bytecodeHello.class Le compilateurjavac, traduit le texte source en instructions compréhensibles par la MachineVirtuelle Java (JVM) • Exécuter le programme contenu dans le fichier bytecode L'interprète Java implémente la JVM L'interprète traduit le bytecode en instructions exécutables par votre machine
Programme source Compilateur Programme exécutable Système d’exploitation Matériel Compilation vs. Interprétation Le compilateur convertit le programme source en programme exécutable avant exécution
Write once, run anywhere • La compilation d'un programme, ne génère pas d'instructions spécifiques à votre plate-forme • Mais du bytecode Java, qui sont des instructions de la Machine Virtuelle Java (JVM) • Si votre plate-forme (Windows, UNIX, MacOS, un browser Internet) dispose de VM, elle peut comprendre le bytecode
Application "Hello" Créer le fichier source Java Hello.java /** * La classe Hello implémente une * application qui affiche "Hello !" sur la * sortie standard */ class Hello { public static void main(String[] args) { System.out.println("Hello !"); //Affiche le texte } }
Compiler le fichier source javac Hello.java Si la compilation réussit, le fichier Hello.class est créer. Ce fichier contient le bytecodes • Interpréter et exécuter l'application java Hello L'argument de l'interprète est le nom de la classe à exécuter (pas le nom du fichier) Faire la distinction M/m
Environnement de développement • javac : le compilateur java • java: la machine virtuelle java • jdb: le debugger java • jar: le système d’archivage java - utile pour les applets multifichiers • javadoc: convertir le code en documentation HTML • appletviewer: exécuter des applets sans passer par le navigateur
Disséquons l'application"Hello" • Insérer des commentaires • Définir une classe • Définir la méthodemain • Utiliser des classes et des objets
Insérer des commentaires /** * Documentation * ignorer par le compilateur * générée par l'outil javadoc */ class Hello { public static void main(String[] args) { System.out.println("Hello !"); // commentaire sur une ligne /* commentaire … */ } }
Définir une classe /** * documentation */ class Hello { public static void main(String[] args) { System.out.println("Hello !"); // afficher le texte } } une classe est la brique de base d'un langage orienté-objet ; elle fournit une description des données et des comportements associés
Définir la méthodemain /** * documentation */ class Hello { public static void main(String[] args) { System.out.println("Hello !"); // afficher le texte } } Une application Java doit contenir une méthode main • Appelée en premier par l'interprète • Qui appelle les autres méthodes nécessaires pour exécuter l'application
Utiliser une méthode et une variable class Hello { public static void main(String[] args) { System.out.println("Hello !"); } } System.out.println("Hello !") La classeSystem (package java.lang) fournie des accès "system-independent" à des fonctionnalités "system-dependent" System.out.println("Hello !") Variableoutde la classeSystem System.out.println("Hello !") Méthode println(…) http://java.sun.com/j2se/1.4.2/docs/api/index.html
Conventions d’écriture de code • Classe CompteEnBanque • Méthodes • crediterCompte(25) • getSolde() • setSolde(10) • Variables • empruntCourant • Constantes • TAUX_INTERET Java les respecte donc respectez-les !!
P.O.OLangage Java • Introduction (rappel) • Bases du langage (rappel) • Programmation Orientée Objet
Bases du Langage public class BasicsDemo { public static void main(String[] args) { int sum = 0; for (int c = 1; c <= 10; c++){sum += c;} S.o.p("Sum = " + sum); } } Que fait ce programme ? Même un petit programme comme celui-ci utilise de nombreuses caractéristiques du langages comme des variables, des opérateurs, et des instruction de flux de contrôle
Concept de Variable Définition : un élément d’information identifié par un nom • On doit explicitement indiquer le nom et le type d’une variable • On utilise le nom pour faire référence à l’information que la variable contient • Le type détermine les valeurs licites pour la variable et les opérations autorisées • Pour donner un nom et un type à une variable il faut la déclarer : type name • Une variable, a une portée : la section de code ou le nom de la variable peut être utilisé
int maxInteger = Integer.MAX_VALUE; float maxFloat = Float.MAX_VALUE; char aChar = 'S'; boolean aBoolean = true; S.o.p("Plus grand integer :" + maxInteger); S.o.p("Plus grand float :" + maxFloat); S.o.p("Le caractère est :" + aChar); S.o.p("Valeur du booléen :" + aBoolean); Plus grand integer : 2 147 483 647 Plus grand float : 3.40282e+38 Le caractère est : S Valeur du booléen : true
Keyword Description Size/Format (integers) byte Byte-length integer 8-bit two's complement short Short integer 16-bit two's complement int Integer 32-bit two's complement long Long integer 64-bit two's complement (real numbers) float Single-precision floating point 32-bit IEEE 754 double Double-precision floating point 64-bit IEEE 754 (other types) char A single character 16-bit Unicode character boolean A boolean value (true or false) true or false
Types élémentaires Primitive Data Types Floating Integer byte 8bits -128 to 127 float 32bits 1.4E-45 3.4E38 short 16bits -32768 to 32767 double 64bits 4.9E-324 1.8E308 int 32bits -2^31 to 2^31-1 long 64 bits -2^63 to 2^63-1 Logical Textual one bit : true or false char 16bits 0 to 65535
Variable Final • La valeur d’une variable déclarée final ne peut pas être modifiée après avoir été initialisée • Une telle variable est similaire à une constante dans les autres langages de programmation • Pour déclarer une variable final : final int A_FINAL_VAR = 0;
Operator Use Description + op1 + op2 Adds op1 and op2 - op1 - op2 Subtracts op2 from op1 * op1 * op2 Multiplies op1 by op2 / op1 / op2 Divides op1 by op2 % op1%op2 Computes the remainder of dividing op1 by op2 Opérateur Arithmétique
Operateur Use Returns true if > op1 > op2 op1 is greater than op2 >= op1 >= op2 op1 is greater than or equal to op2 < op1 < op2 op1 is less than op2 <= op1 <= op2 op1 is less than or equal to op2 == op1 == op2 op1 and op2 are equal != op1 != op2 op1 and op2 are not equal Opérateur Relationnel
Entrées au clavier : classe Console Problème : les entrées au clavier ne sont pas aisées en Java • Nous allons utilisé (Travaux Dirigés) la classe Console pour simplifier la tâche Console.readInt(str) • retourne un nombre entier de type intentré au clavier Console.readDouble(str) • retourne un nombre de type doubleentré au clavier
Utiliser laclasse Console • Pour chaque classe qui fait appel à la classe Console ajoutez (entre votre commentaire de début et le mot class) import unsa.Console; • ajouter comme dernière instruction de la méthode main() System.exit(0);
Classe ConsoleExemples import unsa.Console; public class TestConsole{ public static void main (String args[]){ char c = Console.readChar("Entrez un char"); S.o.p("echo: " + c ); int i = Console.readInt("Entrez un int"); S.o.p("echo: " + i ); double d = Console.readDouble("Entrez un double"); S.o.p("echo: " + d ); long l = Console.readLong("Entrez un long"); S.o.p("echo: " + l ); System.exit(0); } }
Contrôle du Flux d’instructions • Sans contrôle du flux • les instructions sont exécutées dans l’ordre où elles apparaissent dans le fichier source • Contrôler le flux pour • Exécuter conditionnellement des instructions • Exécuter de façon répétitive un bloc de code
Les Instructions de Contrôle Les Instructions de Contrôle if return switch continue while do-while for break
Instructionwhile On utilise l'instruction while pour exécuter répétitivement un bloc de code tant qu'une condition reste vraie while (expression) { instructions } • On commence par évaluer l'expression, qui doit retourner une valeur booléenne • Si expression retourne true, alors on exécute les instructions associées • L'instruction while continue en testant expression et en exécutant les instructions jusqu'à ce que expression retourne false
Instruction while (2) Ce programme utilise une instruction while pour parcourir une string, copiant les caractères dans un buffer jusqu'à rencontrer la lettre 'g' String copyFromMe = "Copy this string until you encounter the letter 'g'."; StringBuffer copyToMe = new StringBuffer(); int i=0; char c=copyFromMe.charAt(i); while (c != 'g') { copyToMe.append(c); i=i+1; c = copyFromMe.charAt(i); } S.o.p(copyToMe); Valeur affichée par S.o.p ?
Instruction do-while Java fournit une autre structure similaire do-while do { instructions } while(expression); • expression est évaluée à la base de la boucle • les instructions associées sont donc exécutées au moins une fois
Instruction do-while (2) String copyFromMe = "Copy this string until you encounter the letter 'g'."; StringBuffer copyToMe = new StringBuffer(); int i=0; char c ; do { c = copyFromMe.charAt(i); copyToMe.append(c); i=i+1 ; } while (c != 'g'); S.o.p(copyToMe); Valeur affichée par S.o.p ?
Instruction for for (initialisation ; terminaison ; incrément) { instructions } • initialisation initialise la boucle ; exécuté une seule fois au début de la boucle • terminaison détermine quand terminer la boucle • evalué au début de chaque itération • Quand l'expression retourne false, la boucle se termine • incrément exécuté à la fin de chaque itération Souvent utilisé pour parcourir les éléments d'un tableau (array), ou les caractères d'une chaîne (string)
Instruction for int[] arrayOfInts = {32, 87, 3, 589}; for(int i=0; i<arrayOfInts.length; i++) { S.o.p(arrayOfInts[i] + " "); } • Valeurs affichées par S.o.p ?
for vs. while for(int i=0 ; i<arrayOfInts.length ; i++) { S.o.p(arrayOfInts[i] + " "); } int i=0 ; while(i<arrayOfInts.length) { S.o.p(arrayOfInts[i] + " "); i++; }
Garantir la fin des itérations do { afficher(a) } while (a != 10) • do { • afficher(a) • a = a+1; • } • while (a != 10) • a = 1; • do { • afficher(a) • a = a+1 ; • } • while (a != 10) • a = 10; • do { • afficher(a) • a = a+1; • } • while (a != 10)
Instructions if/else if (reponse == OK) { // code to perform OK action } if (reponse == OK) { // code to perform OK action } else { // code to perform Cancel action }
Une cascade de if … int score = 76; char grade; if (score >= 90) { grade = 'A'; } else // score < 90 if (score >= 80) { grade = 'B'; } else // score < 80 if (score >= 70) { grade = 'C'; } else // score < 70 if (score >= 60) { grade = 'D'; } else // score < 60 { grade = 'F'; } S.o.p("Grade = " + grade); • Valeur affichée par S.o.p ?
Instruction switch Permet d'exécuter, conditionnellement à la valeur d'un entier, certaines instructions int mois = 10; switch (mois) { case 1: S.o.p("Janvier") ; break; case 2: S.o.p("Février") ; break; case 3: S.o.p("Mars") ; break; … case 10: S.o.p("Octobre") ; break; case 11: S.o.p("Novembre") ; break; case 12: S.o.p("Décembre") ; break; default: S.o.p("non valide!"); } Valeur affichée par S.o.p ?
Un exemple … Un programme qui permette de : • Saisir deux nombres réels au clavier • Afficher un menu à l'écran S)omme des deux nombres P)roduit des deux nombres M)oyenne des deux nombres • Saisir le choix de l'utilisateur, ‘S', 'P' ou 'M‘ • Afficher le résultat correspondant
import unsa.Console; public class Test { public static void main(String [] args) { float nb1= Console.readFloat("Entrer un nombre réel : "); float nb2= Console.readFloat("Entrer un nombre réel : "); S.o.p("*****************************"); S.o.p("* S)omme des deux nombres *"); S.o.p("* P)roduit des deux nombres *"); S.o.p("* M)oyenne des deux nombres *"); S.o.p("*****************************"); char rep=Console.readChar("Faites votre choix"); switch (rep) { case 'S' : S.o.p(nb1+nb2);break; case ‘P' : S.o.p(nb1*nb2);break; case ‘M' : S.o.p((nb1+nb2)/2);break; default : S.o.p("erreur de saisie"); } System.exit(0);}}