Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ......
Transcript of Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ......
![Page 1: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/1.jpg)
Cours java
EILCO - CP2
![Page 2: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/2.jpg)
Page : 2Introduction à JAVA : la POO
Décomposition fonctionnelleDécomposition fonctionnelle
• Le programme est une fonction principale• int main(argc, argv[])• Cette fonction appelle des sous-fonctions• Qui en appellent d'autres…
main()
init() calcule() trie() affiche()
compare() permute()factorise()
![Page 3: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/3.jpg)
Page : 3Introduction à JAVA : la POO
Portée d’une variable localePortée d’une variable locale
int methode() {
double longueur = 1.5;
…
}
1. 5 longueur
1. 5 longueur
![Page 4: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/4.jpg)
Page : 4Introduction à JAVA : la POO
Variables globales Variables globales
• Variables globales : visibles dans tout le programme, allouées pour toute la durée du programme
• NB : l'usage des variables globales est plus facile à première vue, mais inefficace et déstructurant
• Inefficace : ne sont pas stockées dans la pile, mais dans la mémoire globale => accès plus long
• Déstructurant : éparpillement des données et des fonctions
• Programmation par effet de bord• Elles tendent à disparaître en POO• Mais on verra des effets de bord « locaux aux objets »
![Page 5: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/5.jpg)
Page : 5Introduction à JAVA : la POO
En C : les structuresEn C : les structures• Types complexes constituées de types plus simples
struct Camion {
int nbRoues;int nbRemorques;float longueur;
}
• Déclaration : Camion moncamion;• Camion est un nouveau type• Usage : moncamion.nbRoues = 18;• Transition vers la programmation orientée objets
![Page 6: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/6.jpg)
Page : 6Introduction à JAVA : la POO
Programmation orientée objetsProgrammation orientée objets
• Tous les ingrédients de la programmation impérative et procédurale sont présents
• Mais la décomposition en arbre de fonctions n'est pas assez structurante pour des programmes très complexes
• Structurer le programme autour des objets manipulés• Les traitements sont associés aux objets• Permet de raisonner dans le langage du problème• Séparation plus claire entre données et traitements• « Confinement » des effets de bord aux objets
![Page 7: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/7.jpg)
Page : 7Introduction à JAVA : la POO
Décomposition classique en Décomposition classique en fonctionsfonctions
main()
init() calcule()
trie()
compare() permute()
factorise()
Données
Données
![Page 8: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/8.jpg)
Page : 8Introduction à JAVA : la POO
Décomposition orientée objetsDécomposition orientée objets
init() calcule()trie()
compare() permute()factorise()
Données Données
![Page 9: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/9.jpg)
JAVA c'est quoi ?
• Une technologie développée par SUN Microsystems (acheté par Oracle en 2009) en 1995– un langage de programmation
– une plate-forme, environnement logiciel dans lequel les programmes s'exécutent
• Présente dans de très nombreux domaines d'applications : des serveurs aux téléphones portables
![Page 10: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/10.jpg)
Le langage JAVA
• Dans le « white paper » sur le langage JAVA :Java : a simple, object-oriented, distributed,
robust, secure, architecture neutral, portable,
high-performance, multithreaded, and dynamic language• white paper : the JAVA language environment
![Page 11: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/11.jpg)
Situation de Java
• Outil mature pour des environnements hétérogènes
• Estimations (Oracle)– 800 millions de PC
– 2,1 milliards de téléphones portables
– 3,5 milliards de cartes puce
– décodeurs, imprimantes, automobiles, bornes de paiement,...
• 2006 passage de JAVA sous licence GPL
• Passage en open source en 2007 avant gratuit mais pas open source. Certains fragments de code sont non libres
→ projet IcedTea
• Orientation vers les clients riches
![Page 12: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/12.jpg)
Idées sur Java
• Java est lent : Étant donné que la compilation de programmes Java ne produit pas des fichiers directement exécutables pour un processeur, on pourrait penser que les programmes Java sont plus lents que des programmes C ou C++, et pourtant... Des petits tests montrent que l'on obtient des performances très similaires. Ceci est dû à l'utilisation aujourd'hui systématique de compilateurs JIT (Just In Time), qui recompilent le code juste avant l'exécution, de manière à exécuter du code natif. D'autre part, il arrive que la création d'objets ralentisse un programme Java. Comme ces problèmes de vitesse ne concernent généralement que 1% du code, il suffit souvent d'optimiser ces 1% en limitant la création et la destruction d'objets pour obtenir un programme très rapide.
![Page 13: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/13.jpg)
Idées sur Java
• "Java ne marche pas bien sur les pages web, ou différemment suivant les navigateurs"– Ne pas confondre Java
– Javascript (rien à voir)
![Page 14: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/14.jpg)
Idées sur Java
• Java n'est pas sûr– Pour les applications : aucune différence entre Java et un autre langage
de programmation
– Pour les applets :• Sécurité renforcée
• Les instructions sont vérifiées par la JVM (machine virtuelle JAVA sur laquelle sont exécutées les instructions Java)
• Les instructions non autorisées bloquent le programme (exemple écriture locale sur le disque)
![Page 15: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/15.jpg)
Idées sur Java
• Java est facile à apprendre :– Non !
– Syntaxe simple, proche du C et C++
– Mais orienté-objet
– Hiérarchie des classes difficle à comprendre et maîtriser
![Page 16: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/16.jpg)
Java est orienté objet (OO)
• On définit des classes pour représenter des concepts (par exemple Etudiant)
• On utilise ensuite des instances de ces classes (par exemple toto qui est Etudiant)
• Chaque classe possède des attributs, par exemple nom
• Et des méthodes par exemple afficherLesInfos() (proche des fonctions)
![Page 17: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/17.jpg)
Plate-formes
• Plate-forme– environnement matériel et/ou logiciel dans lequel s'exécute dans notre
case un programme java
– la plupart des plate-formes sont la combinaison d'un OS et du matériel sous-jacent
• MS windows + Intel
• Linux + Intel
• MacOS + PowerPC/Intel
• IOS + Apple A5
![Page 18: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/18.jpg)
Plate-forme java
• L'originalité de la plate-forme java est qu'elle est entièrement logicielle et s'exécute au-dessus des plate-formes matérielles
API (Application ProgrammingInterface) : bibliothèques JAVA disponibles pour le programmeur(réseau, graphisme, ...)
![Page 19: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/19.jpg)
La machine virtuelle java
• le byte-code assure la portabilité des programmes java– c'est un langage pour une machine virtuelle ;
– à l'exécution un interpréteur simule cette machine virtuelle appelée JVM (Java Virtual Machine).
![Page 20: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/20.jpg)
API java
– très vaste collection de composants logiciels
– organisée en bibliothèques appelées packages (paquetages en VF)
– énormément de fonctions/méthodes/services sont disponibles
– programmer en java nécessite de connaître au moins une partie de l'API ou au moins connaître son existence ou savoir retrouver les services nécessaires
• notion d'API: contrat définissant une classe, les attributs accessibles, le mode d'appel des méthodes etleur retour, ainsi que les erreurs qu'il est possible d'intercepter
![Page 21: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/21.jpg)
Vue partielle de l'API java
![Page 22: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/22.jpg)
Vue des API Java
![Page 23: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/23.jpg)
Quelques exemples
• Principaux paquetages :– java.applet : création d'applets.
– java.awt : création d'interfaces graphiques portables avec AWT.
– java.bean : création de Java Bean.
– java.io : accès et gestion des flux en entrées/sorties.
– java.lang : classes et interfaces fondamentales.
– java.math : opérations mathématiques.
– java.net : accès aux réseaux, gestion des communications à travers le réseau
– ...
![Page 24: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/24.jpg)
D'autres plus complexes
– javax.crypto : cryptographie.
– javax.imageio :
– javax.jws : Java Web Services.
– javax.lang.model :
– javax.management : API JMX.
– javax.naming : API JNDI (accès aux annuaires).
![Page 25: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/25.jpg)
Différentes éditions de java
• JSE : Java Standard Edition– version pour les ordinateurs de bureau
– version sur laquelle nous travaillons
• JEE : Java Enterprise Edition– version pour les applications « d'entreprises »
– permet la création d'applications distribuées et de serveurs en utilisant Glassfish(tm)
– accès SGBD
– ...
•
![Page 26: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/26.jpg)
Java Standard Edition
• 2 principaux composants :– JRE (Java Runtime Environment)
• c'est l'environnement nécessaire à l'exécution d'applets et d'applications créées à l'aide de Java
• c'est l'implémentation de la machine virtuelle java
– JDK (Java Development Kit)• sur-ensemble du JRE
• contient le compilateur java
• javadoc générateur de documentations
• jdb, le débogueur
• ...
![Page 27: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/27.jpg)
Différentes éditions de java
• J2ME : Java 2 Micro Edition– version dédiée aux dispositifs mobiles
– partie réseau et sécurité bien développées• JAVA card
• JAVA TV
• PDA (Android en partie)
• Téléphones mobiles
• …
– JavaFX• pas une version à proprement parlé
• contenus enrichis et multimédia pour les applications internet
• glisser/déposer, etc...
![Page 28: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/28.jpg)
JSE : situation actuelle
• Début 2019– Java SE8 version 1.8 sortie en 2014 (support jusqu'en 2025)
version que nous utilisons avec JavaFX (l’année prochaine)Ajout des lambda expressions
– Java SE7 1.7.0• depuis début 2011
• API comme JAXP (parsing XML)
• switch avec des String
• transparence des frames...
• support jusqu'en 2022
• la version Java SE12 prévue pour mars 2019
![Page 29: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/29.jpg)
JSE = JRE + JDK
![Page 30: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/30.jpg)
IDE pour java
• Très, très nombreux– poids lourds
• Eclipse (libre)
• Netbeans (oracle, licence open source GPL v2)
• Intellij IDEA
![Page 31: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/31.jpg)
IDE pour Java
• IDE légers– Jcreator
– emacs (le plus simple), à utiliser conjointement avec JDEEhttp://jdee.sourceforge.net/
– notepad++http://notepad-plus-plus.org/
– gedit (sous Linux)http://projects.gnome.org/gedit/
![Page 32: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/32.jpg)
Mon premier programme
Hello World !
![Page 33: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/33.jpg)
Remarques• Tout code java doit être défini à l'intérieur d'une classe :
public class HelloWorld
• La description de la classe est effectuée à l'intérieur d'un bloc { } ;
• Le code de la classe doit être enregistré dans un fichier de même nom que la classe (casse comprise) HelloWorld.java ;
• Le point d'entrée comme en C est la méthode main (nous reverrons le concept de méthodes ultérieurement)
![Page 34: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/34.jpg)
Un langage compilé/interprété
• Compilation d'un programme java : production de byte-code
• Le byte-code est :– proche du langage machine ;
– indépendant de la plate-forme d'exécution (matériel + OS)
0100011000100110111000011
javac
HelloWorld.java HelloWorld.classbyte-code
![Page 35: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/35.jpg)
Application indépendante
• Application est définie par un ensemble de classes dont une jouera le rôle de classe principale
• La compilation de la classe principale entraîne la compilation de toutes les classes utilisées sauf celles qui dont fournies et font partie de la hiérarchie java
• pour exécuter l'application, on indique à l'interpréteur java le nom de la classe principale
• java charge les classes nécessaires au fur et à mesure de l'exécution
![Page 36: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/36.jpg)
Application indépendante
• L'application doit posséder une classe principale– classe possédant une méthode (proche de fonction du C) appelée (on
parle de signature)public static void main(String[ ] args)
• Cette méthode sert de point d'entrée pour l'exécution– l'exécution de l'application démarre par l'exécution de cette méthode
ex : java AppliVisage1
tableau de caractères équivalent à argc ET argv du C
exécute le code défini dansla méthode main contenue dans le fichier
AppliVisage1.class
![Page 37: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/37.jpg)
Retour sur notre premier programme
• System : ceci correspond à l'appel d'une classe « System ». C'est une classe utilitaire qui permet surtout d'utiliser l'entrée et la sortie standard
• out : objet de la classe System qui gère la sortie standard
• print : méthode qui écrit
• exemplesCours1.java etCours2.java
• méthode : println
![Page 38: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/38.jpg)
Identificateurs
• Permet de nommer les classes, les variables, les méthodes, …
• Un identificateur Java– Est de longueur quelconque ;
– Commence par une lettre Unicode ;
– Peut ensuite contenir des lettres ou des chiffres ou le caractères souligné ;
– Ne doit pas être un mot réservé au langage (mot clef), par exemple if, switch, class, true, ...
![Page 39: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/39.jpg)
Quelques conventions
• Les noms de class commencent par une majuscule– Visage, Objet
• Les mots contenus dans un identificateur commencent par une minuscule:– uneClasse, uneMethode, uneVariable
• Les constantes sont en majuscules– UNE_CONSTANTE
![Page 40: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/40.jpg)
Mots-clés Java
• abstract else instanceof static try boolean false assert enum interface strictfp volatile byte true break extends native super while char case final new switch double catch finally package synchronized float
• class for private this int
• const (*) goto (*) protected throw long
• continue if public throws short
• default implements return transient void null
• do import
![Page 41: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/41.jpg)
Commentaires
• sur une ligne
• sur plusieurs lignes
• commentaires pour l'outil javadoc
// comme en C++int i ; // commentaire sur une ligne
/* comme en C commentaires sur plusieurslignes */
/*** pour l'utilisation de javadoc*/
![Page 42: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/42.jpg)
Commentaires
• Les conseils/consignes utilisés pour les autres langages de programmation sont bien évidemment toujours d'actualité
• commenter le plus possible et judicieusement
• chaque déclaration (variable, méthode ou classe)
![Page 43: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/43.jpg)
Types de données en Java
• 2 grands groupes de types de données :– types primitifs
– objets (instances de classes)
• Java manipule différemment les valeurs des types primitifs et les objets : les variables contiennent :– des valeurs de types primitifs
– ou des références aux objets
![Page 44: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/44.jpg)
Types primitifs
• Valeur logique– boolean (true/false)
• Nombres entiers– byte (1 octet), short (2 octets), int (4 octets), long (8 octets)
– des valeurs minimales et maximales sont disponibles pour chaque typeInteger.MIN_VALUE Integer.MAX_VALUE (Cours3)
• Nombres réels– float (4 octets), double (8 octets)
– ex : Float.MIN_VALUE Float.MAX_VALUE
![Page 45: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/45.jpg)
Types primitifs (suite)
• Caractère– char (2 octets). jeu de caractère unicode : http://www.unicode.org
Entre 2 apostrophesTous les caractères accentués du français sont présents.Il est possible d'utiliser '\u03c0' → p
– '\t' tabulation
– '\n' retour à la ligne
• types indépendants de l'architecture– un int fait toujours 4 octets quelle que soit l'architecture sous-jacente
![Page 46: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/46.jpg)
Le type String
• Ce n'est pas un type primitif, c'est une classe (d'où la présence de la majuscule)
• Nous reviendrons plus tard sur les classes
• Comme c'est une classe, on utilise le mot-clef new pour créer un objet, on parle d'une instance de classe de type String– String str = new String() ;
– str = "ceci est une phrase" ;
• la chaîne de caractères de met entre guillemets
![Page 47: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/47.jpg)
Le type String (suite)
• D'autres possibilités plus classiques de déclaration d'un objet de type String– String str ;
– str = "ceci est une phrase" ;
• ou– String str = "ceci est une phrase" ;
• Mais la classe String est un cas particulier, toute utilisation de classe nécessite une instanciation (mot-clef new)
![Page 48: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/48.jpg)
JAVA langage typé
• Langage fortement typé
• On peut forcer un type (notion de trans-typage) avec la syntaxe (nouveau-type) expression
![Page 49: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/49.jpg)
Casts entre types primitifs
• Attention à la perte de données– conversion d'un int en short
– cf Cours4.java
• Attention à la perte de précision– conversion d'un long en float
![Page 50: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/50.jpg)
casts entre types primitifs
• Les affectations entre types primitifs peuvent utiliser un cast implicite s'il n'y a pas de perte de précision– int i = 180 ;
double v = 4.0*i ;
• Sinon le cast doit être explicite– short s = 65 ;
s = 10000 ; erreur de compilations = (short) 100000 ; ok mais valeur erronée
![Page 51: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/51.jpg)
Casts entre entiers et caractères
• la correspondance char → int, long s'obtient par cast implicite
• les correspondances char → short, byte et long, int, short ou byte → char nécessitent un cast explicite. Les entiers sont signés à la différence des char
•
![Page 52: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/52.jpg)
Les opérateurs Java
• Les plus utilisés– Arithmétiques
• + - * /
• % modulo
• ++ – (pré ou post incrémentation/décrémentation) cf cours C
– Logique• && (et) || (ou) ! (négation), comme en langage C
– Relationnels• >= <= == != < > (toujours inspiré du C)
– Affectation• = += -= /= *=
![Page 53: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/53.jpg)
Ordre de priorité des opérateurs
![Page 54: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/54.jpg)
Déclarations
• Comme en C, toute variable doit être déclarée avant d'être utilisée
• Peut être déclarée à n'importe quel niveau dans le code
• Une variable est accessible (visible) dans le bloc où elle a été déclarée jusqu'à la fin du bloc où elle a été déclarée
![Page 55: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/55.jpg)
Affectation
• Syntaxe identificateur = expression ;
• En java, comme en C il est possible de réaliser des affectations multiples
• cf Cours5.java
![Page 56: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/56.jpg)
Bloc d'instructions
• permet de grouper un ensemble d'instructions en lui donnant la forme syntaxique d'une seule instruction– syntaxe { }
– int k;{
int i = 1 ;int j = 12 ;j = j + i ;k = j*k ;}
![Page 57: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/57.jpg)
Flot de contrôle
• Structure conditionnelle – le if
![Page 58: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/58.jpg)
Flot de contrôle
• structure conditionnelle : le switch
Principe : on évalue la variable après leswitch et on exécute les actions en vis à visdu case
![Page 59: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/59.jpg)
Illustration : le switch
![Page 60: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/60.jpg)
Affichage sur la console
• System.out.println(chaîne) ou System.out.print(chaîne)
• chaîne est ici :– une constante chaîne de caractères (String)
– une expression convertie automatiquement en String si c'est possible
– une concaténation d'objets de type String ou convertis en String séparés par le symbole +
– cf Cours6.java
![Page 61: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/61.jpg)
lecture au clavier
• Pas de moyen simple de faire une lecture au clavier !
• Il faut utiliser la classe Scanner– classe comprenant beaucoup de méthodes
– cf Cours7.java
![Page 62: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/62.jpg)
Lecture au clavier
import java.util.Scanner ;
public class CalculatorPanel {
public static void main(String[] args) {
int i;
System.out.println("Entez un entier: ");
Scanner clavier = new Scanner(System.in);
i = clavier.nextInt();
System.out.println("Vous avez entré : "+i);
}}
![Page 63: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/63.jpg)
Méthode de Scanner
• nextInt() - gets the next integer• nextBoolean() - gets the next
Boolean• nextDouble() - gets the next double• nextFloat() - gets the next float• nextShort() - gets the next short• next() - gets the next string (a line
can have multiple strings separated by space)
• nextLine() - gets the next line
![Page 64: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/64.jpg)
Exercice
• Écrire un programme qui convertit les degrés Celsius en Fahrenheit
• Demande à l'utilisateur de rentrer un nombre en degré celsius
• Calcul en utilisant la formule y=32+(9/5)*x (x est la température en ° celsius)
• Affiche la valeur convertie à l'écran
![Page 65: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/65.jpg)
Jeu de la multiplication
• Pour apprendre la multiplication aux enfants
• Demander à l'utilisateur de multiplier deux chiffres et vérifier le résultat
• Algorithme :– Création de 2 nombres aléatoires entiers x et y
– Affichage des 2 entiers et demande le résultat du produit de ces deux nombres
– Lecture au clavier du résultat z
– Si z = x*y, féliciter l'utilisateur sinon suggérer de mieux apprendre ses tables
![Page 66: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/66.jpg)
Comment créer des nombres aléatoires
Utilisation de la classe Random
https://docs.oracle.com/javase/8/docs/api/java/util/Random.html
import java.util.Random;
public class Test {
public static void main(String [] args){
Random r = new Random();
int a;
a = r.nextInt(100);
System.out.println(a + "\t" + r.nextInt(20));
}
}
![Page 67: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/67.jpg)
Flot de contrôle
• Boucles : instruction while
![Page 68: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/68.jpg)
Flot de contrôle
• boucle – le pour for
![Page 69: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/69.jpg)
Exemple
![Page 70: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/70.jpg)
Raccourcis arithmétiques
int i=5;
System.out.println(i++ + ++i);
![Page 71: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/71.jpg)
Jeu de la devinette
• L'ordinateur choisit un nombre entier entre 1 et 1000
• Le joueur doit le deviner en maximum 10 essais
• Pour chaque tentative, on indique si le nombre à trouver est plus grand ou plus petit que le nombre rentré par l'utilisateur
![Page 72: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/72.jpg)
Les tableaux en java
![Page 73: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/73.jpg)
Introduction
• Principe assez proche du C++
• Plus faciles à manipuler qu'en C
• Les tableaux peuvent être des ensembles ordonnées de :– types de bases (int, char, …)
– d'objets !
• Note : en Java, les tableaux sont des objets
![Page 74: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/74.jpg)
Déclaration
• syntaxe : type [ ] nomDuTableau ;
• int [ ] tableau ;– la déclaration ne fait que déclarer le tableau mais ne crée pas le tableau
en mémoire. La variable déclarée permet de référence tout tableau de même type.
• L'opérateur new permet de créer le tableau– int [] tableau ;
tableau = new int[50] ;
• La taille donnée est fixe, elle ne peut plus être modifiée
![Page 75: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/75.jpg)
Visualisation
![Page 76: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/76.jpg)
Accès aux éléments
• principe : tableau[expression]– Comme en C, les éléments d'un tableau de taille n sont numérotés de 0
à n-1
– expression est une expression donnant une valeur entière bien sûr !
– Java vérifie dynamiquement que la valeur de l'élément existe sinon• erreur : ArrayIndexOutOfBoundsException
• beaucoup mieux que le C
![Page 77: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/77.jpg)
Attribut du tableau
• tableau.length donne la taille du tableau– int [ ] monTableau = new int[10] ;
– monTableau.length → 10 taille du tableau
– monTableau.length – 1 → indice max du tableau
• cf Cours8.java utilisation du tableau args[ ]
![Page 78: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/78.jpg)
Avantage du tableauJeu du Yahtzee
ancienne version :
public class Yahtzee{
int d1 , d2 , d3 , d4 , d5 ; //les 5 dés
...
}
nouvelle version :
public class Yahtzee{
int[] dice = new int[5];
...
}
![Page 79: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/79.jpg)
Avantage du tableau
• Le code est plus compact et plus adaptable (marche avec un nombre quelconque de dés)
ancienne version :
d1 = getRandomDieValue();
d2 = getRandomDieValue();
d3 = getRandomDieValue();
d4 = getRandomDieValue();
d5 = getRandomDieValue();
}
nouvelle version :
public static void rollDice(){
for(int i=0; i < dice.length; i++){
dice[i] = getRandomDieValue();
}
}
![Page 80: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/80.jpg)
Obtenir la valeur d'un dé
public static int getRandomDieValue(){
return Random.nextInt(6) + 1 ;
}
Cette Méthode retourne une valeur entre 1 et 6.
Nous reverrons les méthodes ultérieurement
![Page 81: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/81.jpg)
Refactorisation du Yahtzeeles constantes
• Refactoriser signifie simplifier le programme sans changer son comportement ;
• Exemple:
class Yahtzee{
public static final int NUMBRE_DE_DES = 5;
int[] dice = new int[NOMBRE_DE_DES];
...
}
• 5 est un nombre magique. Il ne faut pas créer un tableau int[] dice = new int[5]
• Cela rend les changements difficiles si on utilise 10 dés
CONSTANTE
![Page 82: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/82.jpg)
Réécriture de la méthode
Utilisation d'une boucle basée sur NOMBRE_DE_DES
for(int i = 0; i < NOMBRE_DE_DES; i++){
dice[i] = getRandomDieValue();
}
• Le code est plus général et fonctionne quel que soit le nombre de dés
• Le code est plus lisible
![Page 83: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/83.jpg)
Autres possibilités de créer des tableaux
• comme en C, on peut donner explicitement la liste de ses éléments à la déclaration (liste de valeurs entre accolades)– int [ ] t = {17, 8, 9, 23, 17} ;
– char [ ] voyelles = { 'a', 'e', 'i', 'o', 'u', 'y' } ;
• L'allocation mémoire (équivalent de new) est réalisée implicitement
![Page 84: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/84.jpg)
Synthèse
• Un tableau est une suite d’éléments du même type
• Le mot-clef new est utilisé pour allouer de l’espace mémoire
• Lors de l’allocation mémoire, il est nécessaire de préciser la taille du tableau
• Une fois que le tableau est créé, sa taille ne peut être modifiée
![Page 85: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/85.jpg)
Tableaux et boucles
• affecter un tableau aux valeurs : {2,4,...,100}
• nous pouvons affecter directement chaque élément, mais cela représente trop de travail
• on utilise plutôt une boucle !
int[] a = new int[500];
for(int i=2, j=0; i<=1000; i+=2, j++){
a[j] = i;
}
• Les boucles sont très pratiques pour le parcours dans un tableau
![Page 86: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/86.jpg)
La classe Arrays
• Java dispose d'une classe Arrays qui propose des méthodes pour trier et rechercher des éléments dans des tableaux
• import java.util.Arrays ; pour l'utiliser
• cf Cours9.java que fait ce code ?
• Exercice :
A partir d'un tableau trié de 100 éléments (cf Cours9.java) demander à l'utilisateur de rentrer une valeur entre 0 et 1000 et afficher si cette valeur est trouvée dans le tableau et si oui à quelle position
• cf Cours10.java recherche dans un tableau
![Page 87: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/87.jpg)
Méthodes
Méthodes statiques
![Page 88: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/88.jpg)
Méthodes
• 2 types de méthodes en java– Opérations sur les objets :
• String str = "coucou" ;
• str.toUpperCase() ; // mise en majuscules
– Opérations statiques (méthodes de classe)• Math.sin(double a) // méthode sin de la classe Math
• Math.max(int a, int b) // méthode max de la classe Math
• Files.delete(c:\temp\toto.txt") // méthode delete
– Pour le moment, nous nous intéressons aux méthodes statiques qui sont des outils
![Page 89: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/89.jpg)
Méthodes statiques
• En java, les méthodes dites « statiques » doivent être vues comme des outils offerts par une classe
• Une méthode statique ne s’applique pas sur un objet à la différente des méthodes d'objets
• Les méthodes statiques s'appliquent en dehors des objets
• C'est ce qui se rapproche le plus des fonctions des langages impératifs (C, Ada, ...)
![Page 90: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/90.jpg)
Exemple
import java.util.*;
public class Remodel {
public static void main(String[] args) {
callBob();
callPeter();
}
public static void callBob() {
System.out.println("Paint room");
}
public static void callPeter() {
System.out.println("Install hardwood floor");
}}
![Page 91: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/91.jpg)
Déclaration
• public static <typeRetour> nomMethode ( <liste de paramètres>) {<corps de la méthode>}
• <typeRetour>
– quand la méthode renvoie une valeur, indique le type de valeur retournée
• static int max3(int a, int b, int c) // retourne un entier
• static int [ ] fibonacci(int n) // retourne un tableau d'entiers
– void si la méthode ne retourne pas de valeur• static void dessinerCercle(Point p, int rayon)
![Page 92: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/92.jpg)
Déclaration
• public static <typeRetour> nomMethode ( <liste de paramètres>) {<corps de la méthode>}
• <corps de la méthode>– suite de déclaration de variables (types primitifs ou objets) et
d'instructions
– si la méthode retourne une valeur, le corps de la méthode doit contenir l'instruction return expression ; où expression délivre une valeur du type attendu en retour public static int abs(int a) {
if (a < 0) return -a ;else return a ;}
![Page 93: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/93.jpg)
Déclaration
• public static <typeRetour> nomMethode ( <liste de paramètres>) {<corps de la méthode>}
• <corps de la méthode>– return est indispensable lorsque la méthode retourne une valeur
– return est facultatif si la méthode ne retourne pas de valeur (void), toutes les instructions suivant le return sont ignorées. Quitte le bloc et retourne ) la fonction appelante
public static void sauteLignes(int a) {if (a <= 0) return ;int i ;for (i = 0 ; i < a ; i++) System.out.println("") ;}
![Page 94: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/94.jpg)
Notes sur les variables
• public static <typeRetour> nomMethode ( <liste de paramètres>) {<corps de la méthode>}
• <corps de la méthode>– elles conservent les données qui sont manipulées par la méthode
– elles ne sont accessibles que dans le bloc dans lequel elles ont été déclarées, et leur valeur est perdue lorsque la méthode termine son exécution public static int methode1(...)
{ double x ; int [ ] t = new int[10] ; double a ;…}
public static int methode2(...){ double y ; int [ ] t = new int[10] ; double a ;…}
on peut utiliser le
même identificateur
dans 2 méthodes distinctes.Variables locales
![Page 95: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/95.jpg)
Appel des méthodes statiques
• Déclaration
• Appel– <liste des paramètres effectifs>
– liste d'expressions séparées par des virgules et dont le nombre et le type correspond au nombre et au type des paramètres de la méthode
nomMethode( <liste des paramètres effectifs>)
public static <typeRetour> nomMethode ( <liste de paramètres>) {<corps de la méthode>}
déclaration Appel
public static void sauteLignes(int a) {}
sauteLignes(10) ;
public static int abs(int a){}
n = abs(-5) ;b = abs(x) ;
public static int [ ] fibonacci(int n){}
int [ ] t = new int[10] ;t = fibonacci(6) ;
![Page 96: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/96.jpg)
Passage de paramètres
• Comme en C, le passage de paramètres se fait par valeur– seule une copie des variables est transmise aux méthodes statiques
– ces paramètres sont considérées comme des variables locales à l'intérieur de la méthode
– cf Cours11.java et Cours12.java
![Page 97: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/97.jpg)
Notes
• Pour nous, tous les méthodes seront public et static
• L’appel à la méthode provoque une interruption du flot de contrôle. Une fois que la méthode est exécutée, le contrôle repart à la méthode appelante
• Les noms de méthode commencent toujours par une minuscule
• Il faut toujours utiliser les parenthèses lors de l’appel de méthodes method_name( ... ) ceci indique à Java que l’on appelle une méthode et qu’on n’utilise pas une variable
• Une méthode soit toujours retourner un type. Si aucune valeur n’est retournée on utilise void
![Page 98: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/98.jpg)
Notes
• Il y a deux manières d’appeler une méthode :
– m(...) à utiliser si la méthode ne retourne rien (méthode void)
– a = m(...) à utiliser si la méthode retourne une valeur
• Lorsque la méthode retourne une valeur cette dernière doit être sauvegardée ou utilisée (par un System.out.print par exempel)
• Une erreur très classique est d’utiliser une méthode qui retourne une valeur et ne pas la mettre dans une variable. Cela ne provoque pas d’erreur mais est totalement inutile
![Page 99: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/99.jpg)
public class Remodel { public static void main(String[] args) { double prixBob = callBob(8, 12); double prixPierre = callPeter(8, 12); double prixTotal = prixBob +prixPierre; System.out.println("prix total du projet : "
prixTotal + "€"); }
public static double callBob(int larg, int long) { System.out.println("Peinture"); double prixM2 = 0.80; return prixM2 * larg * long; }
public static double callPeter(int larg, int long) { System.out.println("Installation matériel électrique"); double prixM2 = 3.20; return prixM2 * larg * long; }}
![Page 100: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/100.jpg)
Qu’est ce qui sera affiché ?
public class Example{
public static void inc(int i){
i++;
}
public static void main(String[] args) {
int i = 3;
inc(i);
System.out.println(i);
}
}
![Page 101: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/101.jpg)
Exercice
• Modifier la méthode inc de manière à obtenir la valeur 4 en sortie de la méthode
![Page 102: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/102.jpg)
Le jeu du marché
• Nous pouvons échanger des pommes et des poires
• Le jeu dure 10 jours
• Les prix changent aléatoirement tous les jours
• Le but étant bien évidemment de gagner le plus d’ €€€
• Chaque journée, il est possible de vendre ou d’acheter des pommes ou des poires
• Le jeu débute avec 100 €
• Il y a des restrictions– on ne peut acheter plus que ce que l’on peut offrir
– il n’est pas possible de vendre si on n’a pas le produit
![Page 103: Cours java - LISICfonlupt/Enseignement/2019/... · 2019-03-22 · Glassfish(tm) – accès SGBD ... version que nous utilisons avec JavaFX (l’année prochaine) Ajout des lambda](https://reader036.fdocument.pub/reader036/viewer/2022081404/5f0458a67e708231d40d86c6/html5/thumbnails/103.jpg)
Le marché (suite)
• on dispose des méthodes calculePrix(PRIX_DE_BASE, VARIATION) qui calculent le prix pour chaque jour
• PRIX_DE_BASE et VARIATION sont des constantes fourniesprixPomme = calculePrix(PRIX_DE_BASE, VARIATION)
• écrire la méthode main