Title: LICENCE MIAGE Introduction Programmation Orient
1LICENCE MIAGE IntroductionProgrammation
Orientée ObjetJAVAphilippe.collard_at_unice.frhtt
p//deptinfo.unice.fr/pc
2P.O.OLangage Java
- Introduction (rappel)
- Bases du langage (rappel)
- Programmation Orientée Objet
3Organisation
- 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 (amphiTDMpartiel) (33)
- Examen (67)
- ECTS 3
4Bibliographie
- 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
- consulter la Java Book List http//metalab.unc.ed
u/javafaq/books.html
5 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
6Créer votre première application
- Le premier programme, Hello, affiche simplement
le texte "Hello !" - Créer un fichier source Hello.java
- Un fichier source contient du texte, écrit en
Java -
- Compiler le source en fichier bytecode
Hello.class - Le compilateur javac, traduit le texte source en
instructions compréhensibles par la Machine
Virtuelle 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
7Compilation vs. Interprétation
- Le compilateur convertit le programme source en
programme exécutable avant exécution
8Write 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
9(No Transcript)
10Application "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 -
-
11- 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
12Environnement de développement
- javac le compilateur java
- java la machine virtuelle java
- jdb le debugger java
- jar le système darchivage java - utile pour les
applets multifichiers - javadoc convertir le code en documentation HTML
- appletviewer exécuter des applets sans passer
par le navigateur
13Disséquons l'application"Hello"
- Insérer des commentaires
- Définir une classe
- Définir la méthode main
- Utiliser des classes et des objets
14Insé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 /
-
-
15Dé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
16Définir la méthode main
- /
- 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
17Utiliser une méthode et une variable
- class Hello
- public static void main(String args)
- System.out.println("Hello !")
-
-
- System.out.println("Hello !")
- La classe System (package java.lang) fournie des
accès "system-independent" à des fonctionnalités
"system-dependent" - System.out.println("Hello !")
- Variable out de la classe System
- System.out.println("Hello !")
- Méthode println()
- http//java.sun.com/j2se/1.4.2/docs/api/index.html
18(No Transcript)
19(No Transcript)
20Conventions décriture de code
- Classe CompteEnBanque
- Méthodes
- crediterCompte(25)
- getSolde()
- setSolde(10)
- Variables
- empruntCourant
- Constantes
- TAUX_INTERET
- Java les respecte donc respectez-les !!
21P.O.OLangage Java
- Introduction (rappel)
- Bases du langage (rappel)
- Programmation Orientée Objet
22Bases du Langage
- public class BasicsDemo
- public static void main(String args)
- int sum 0
- for (int c 1 c lt 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
23Concept de Variable
- Définition un élément dinformation identifié
par un nom - On doit explicitement indiquer le nom et le type
dune variable - On utilise le nom pour faire référence à
linformation 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é
24- 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.40282e38
- Le caractère est S
- Valeur du booléen true
25(No Transcript)
26(No Transcript)
27(No Transcript)
28Types é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 -231 to 231-1
long 64 bits -263 to 263-1
Logical
Textual
one bit true or false
char 16bits 0 to 65535
29Variable Final
- La valeur dune 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
30Opérateur Arithmétique
31Opérateur Relationnel
32Opérateur Conditionnel
Operator Use Returns true if
op1 op2 op1 and op2 are both true conditionally evaluates op2
op1 op2 either op1 or op2 is true conditionally evaluates op2
! ! op op is false
op1 op2 op1 and op2 are both true always evaluates op1 and op2
op1 op2 either op1 or op2 is true always evaluates op1 and op2
op1 op2 if op1 and op2 are different that is if one or the other of the operands is true but not both
33Entré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 int entré au
clavier - Console.readDouble(str)
- retourne un nombre de type double entré au clavier
34Utiliser la classe 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)
35Classe 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)
-
36Contrôle du Flux dinstructions
- Sans contrôle du flux
- les instructions sont exécutées dans lordre 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
37Les Instructions de Contrôle
Les Instructions de Contrôle
if
return
switch
continue
while
do-while
for
break
38Instruction while
- 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
39Instruction 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 i0
- char ccopyFromMe.charAt(i)
- while (c ! 'g')
- copyToMe.append(c) ii1
- c copyFromMe.charAt(i)
-
- S.o.p(copyToMe)
- Valeur affichée par S.o.p ?
40Instruction 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
41Instruction do-while (2)
- String copyFromMe "Copy this string until you
encounter the letter 'g'." - StringBuffer copyToMe new StringBuffer()
- int i0
- char c
- do
- c copyFromMe.charAt(i)
- copyToMe.append(c)
- ii1
-
- while (c ! 'g')
- S.o.p(copyToMe)
- Valeur affichée par S.o.p ?
42Instruction 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)
43Instruction for
- int arrayOfInts 32, 87, 3, 589
- for(int i0 iltarrayOfInts.length i)
-
- S.o.p(arrayOfIntsi " ")
-
- Valeurs affichées par S.o.p ?
44for vs. while
- for(int i0 iltarrayOfInts.length i)
-
- S.o.p(arrayOfIntsi " ")
-
- int i0
- while(iltarrayOfInts.length)
-
- S.o.p(arrayOfIntsi " ")
- i
45Garantir la fin des itérations
do afficher(a) a a1 while (a ! 10)
- do
- afficher(a)
-
- while (a ! 10)
a 1 do afficher(a) a a1 while (a !
10)
a 10 do afficher(a) a a1 while (a !
10)
46Instructions if/else
- if (reponse OK)
- // code to perform OK action
-
- if (reponse OK)
- // code to perform OK action
-
- else
- // code to perform Cancel action
-
47Une cascade de if
- int score 76
- char grade
- if (score gt 90) grade 'A'
- else // score lt 90
- if (score gt 80) grade 'B'
- else // score lt 80
- if (score gt 70) grade 'C'
- else // score lt 70
- if (score gt 60) grade 'D' else //
score lt 60 - grade 'F'
- S.o.p("Grade " grade)
- Valeur affichée par S.o.p ?
48Instruction 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 ?
49Un 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
50- 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 repConsole.readChar("Faites votre
choix") - switch (rep)
- case 'S' S.o.p(nb1nb2)break
- case P' S.o.p(nb1nb2)break
- case M' S.o.p((nb1nb2)/2)break
- default S.o.p("erreur de saisie")
-
- System.exit(0)
51- 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 repConsole.readChar("Faites votre
choix") - switch (rep)
- case 'S'
- case 's' S.o.p(nb1nb2)break
- case 'p'
- case 'P' S.o.p(nb1nb2)break
- case 'm'
- case 'M' S.o.p((nb1nb2)/2)break
- default S.o.p("erreur de saisie")
52- public static void main(String args)
- char rep
- 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("")
- do
- repCharacter.toLowerCase(Console.readChar("cho
ix ?")) - switch (rep)
- case S' S.o.p("somme "(nb1nb2))
break - case P' S.o.p("produit "(nb1nb2))
break - case M' S.o.p("moyenne "(nb1nb2)/2)break
- default S.o.p("erreur de saisie")
-
- while ((rep ! 's') (rep ! 'p') (rep !
'm'))
53Conversion d'un caractèreminuscule en MAJUSCULE
Il faut distinguer le type primitif char et la
classe Character
- char rep
- repCharacter.toLowerCase(Console.readChar("votre
choix ?")) - S.o.p(rep)
Console.readChar("votre choix ?") readChar est
une méthode de la classe Console qui retourne le
char lu au clavier static char
toLowerCase(char ch) Méthode static de la classe
Character le caractère donnée char ch est
converti en minuscule avant d'être retourné en
résultat char
54Capitaliser un texte
- Public static void main(String args)
- String strConsole.readLine("Tapez un texte")
- char ch // un caractère de str
- char prevCh'.' // le caractère précédent ch
- for (int i 0 i lt str.length() i )
- ch str.charAt(i)
- if ( Character.isLetter(ch)
- ! Character.isLetter(prevCh) )
- S.o.p( Character.toUpperCase(ch) )
- else S.o.p(ch)
- prevCh ch
-
55Algorithme d'Euclide
- Calculer le PGCD de deux entiers A et B
- PGCD(A,B) PGCD(B,R)
- A (B x Q) R 0 lt R lt B
- 294 (231 x 1) 63
- 231 (63 x 3) 42
- 63 (42 x 1) 21
- 42 (21 x 2) 0
- PGCD(294,231) 21
56Algorithme d'Euclide
- int a21, b14
- int r
- S.o.p("PGCD "a" et "b)
- rab
- / division euclidienne de a par b
- abqr et 0ltrltb /
- while (r!0)
- ab br // pgcd(a,b)pgcd(b,r)
- rab
-
- S.o.p(b)
57Le nombre Mystérieux
- public static void main (String args)
- int inconnu (int) (Math.random()100)
- int score0
- int propConsole.readInt("proposition ")
score - while (prop ! inconnu)
- if (prop lt inconnu)
- S.o.p("TROP PETIT")
- else S.o.p("TROP GRAND")
- propConsole.readInt("proposition ")
score -
- S.o.p("Vous avez trouvé en "score" coups")
- System.exit(0)
58É s o p e r e s t e i c i e t s e r e p o s e
- public static void main(String args)
- final int taille
- String phraseConsole.readLine("Entrez une
string") - taille phrase.length()
- int i 0, j taille - 1
- while(ilttaille/2
- phrase.charAt(i) phrase.charAt(j))
- i j--
- if (I gt taille/2)
- S.o.p(phrase" est un palindrome")
- else
- S.o.p (phrase" nest pas un palindrome")
- System.exit(0)
59É s o p e r e s t e i c i e t s e r e p o s e
- public static void main(String args)
- String phrase
- phraseConsole.readLine("votre
texte").toUpperCase() - StringBuffer sb1 new StringBuffer(phrase)
- StringBuffer sb2 new StringBuffer(phrase)
- sb1.reverse()
- if (sb1.toString().equals(sb2.toString()))
- S.o.p(phrase" est un palindrome")
- else S.o.p(phrase" n'est pas un palindrome")
- System.exit(0)
60Algorithme du drapeau tricolore
- On aligne n boules, réparties en un nombre
quelconque de boules bleues, blanches ou rouges,
disposées dans un ordre quelconque - Écrire un algorithme qui trie le tableau de telle
façon que toutes les boules bleues apparaissent
au début, suivies des boules blanches puis des
boules rouges - Le tri doit être réalisé en unique parcours
61(No Transcript)
62(No Transcript)
63Algorithme du drapeau tricolore
- int d3,1,3,1,2,3,2,3,2,1
- // 1bleu 2blanc 3rouge
- for(int k0 kltd.length k) S.o.p(dk"
") - int i0 , b0 , rd.length-1
- while ( i lt r )
- switch (di)
- case 1 echanger(b,i) bibreak
- case 2 i break
- case 3 echanger(r,i) r-- break
-
-
- S.o.p("le drapeau ...")
- for(int k0 kltd.length k) S.o.p(dk"
")
64Comment les arguments sont-ils passés aux
méthodes ?
- public class CallDemo
- static void f(int b)
- b 10
-
- public static void main(String args)
- int a 5
- f(a)
- S.o.p("a " a)
-
-
- Quelle est la valeur affichée, 5 ou 10 ?
65Passage des arguments par valeur
- public class CallDemo
- static void f(int a)
- a 10
- S.o.p("a de f " a)
-
- public static void main(String args)
- int a 5
- f(a)
- S.o.p("a du main " a)
-
66Passage d'un objet en argument
- static void lireTableau(int tl)
- for (int i0 ilttl.length i)
tliConsole.readInt("Taper un entier ") -
- static void afficherTableau(int ta)
- for (int i0iltta.lengthi) S.o.p(tai "
") -
- public static void main(String args)
- final int TAILLE5
- int tableau new intTAILLE
- lireTableau(tableau)
- afficherTableau(tableau)
- System.exit(0)
67Sélectionner pour trier
- public static void main(String args)
- int tab -2, 0, 8 ,7 ,1, -5, 12, 10, 25, 5
- final int TAILLEtab.length int aux int
indMin - for(int k0 kltTAILLE k)
- // rechercher la place IndMin du plus petit
élément dans - // le sous tableau tabk..TAILLE
- indMink
- for(int jk1 jltTAILLE j)
if(tabj lt tabindMin) indMinj - // échanger l'élément d'indice indMin
- // avec l'élément d'indice k
- aux tabindMin
- tabindMin tabk
- tabk aux
-
68Sales tax in New York City is 8.25
- public static void main (String args)
- final double TAUX 0.0825
- double prixDouble.valueOf(args0).doubleValue()
- //double prix Double.parseDouble(args0)
- S.o.p("taxe " prixTAUX)
- S.o.p("prix ttc " prix(1TAUX))
-
- static Double valueOf(String s) Returns a new
Double object initialized to the value
represented by the specified String - Double doubleValue() Returns the double value
of this Double - static double parseDouble(String s) Returns a
new double initialized to the value represented
by the specified String
69(No Transcript)
70NEUTRE ARCHITECTURALEMENT
- Le compilateur JAVA compile le code dans un
langage fait dinstructions élémentaires, en
fait, un code exécutable dans une machine virtuel
(la java virtual machine) - Toutes les plates-formes, PC windows, Mac,
UNIX, digital contiennent la JVM. Ainsi que les
navigateurs internet
code.java
Compilateur JAVA
code.class
JVM
JVM
JVM
Unix
MAC
Windows