2. javaOOP.fr
SOMMAIRE
• Introduction
• Qu'est-ce qu'un langage ?
• Question de popularité
• Invention de Java
• JRE, JDK ou Java SE ?
• Historique des versions
• Java 8
• Duke
• Et Oracle racheta Sun
• Processus d'évolution du langage
• Au cœur de Java et de la POO
• Conclusion
2
3. javaOOP.fr
QUESTION DE POPULARITÉ 1/3
3
Calcul effectué à partir du nombre de recherches de
divers moteurs de recherches(Google, MSN…):
http://en.wikipedia.org/wiki/Tiobe_index
http://www.java.com/fr/about/
Calcul effectué sur le nombre d’offre d’emploi sur
Twitter http://www.sitepoint.com/best-programming-
language-learn-2014/
4. javaOOP.fr
QUESTION DE POPULARITÉ 2/3
4
Analyse par popularité sur GitHub et StackOverflow
http://redmonk.com/sogrady/2014/01/22/language-rankings-1-14/
5. javaOOP.fr
QUESTION DE POPULARITÉ 3/3 (2014)
1. Java
2. C
3. C++
4. C# (.NET)
5. Objective-C (Apple)
6. PHP
7. Python
8. Ruby
9. Javascript
10. SQL
5
6. javaOOP.fr
INVENTION DE JAVA
•A Sun Microsystems, James Gosling, Mike Sheridan, et Patrick Naughton
initient la création du langage Oak (d’un chêne devant leurs bureaux ?) en
1991,c’est le Green Project. Objectif initial du langage, le proposer aux câblo-opérateurs
Améridains qui pourront déployer leurs applications sur les nombreux modèles
de décoleurs équipant leurs clients.
Première démo en 92 avec un pda nommé Star7, vidéo à ne pas manquer !
=> http://www.youtube.com/watch?v=1CsTH9S79qI
L’idée était de créer un langage plateforme indépendant paliant les déficiances du C++.
Write Once, Run Anywhere (WORA) [ => Write Once, Debug Everywhere (WODE)]
• Oak étant déjà une marque déposée, le langage est baptisé Java à l’issue d’une réunion de
brainstorming pour trouver un terme évoquant les idées clés: dynamique, vivant, révolutionnaire,
électrochoc… Et l’un des participants qui buvait du café proposa entre autres Java (en argot anglais:
jus, café).
http://www.javaworld.com/article/2077265/core-java/so-why-did-they-decide-to-call-it-java-.html
• Leur idée de génie fut d’associer Java à l’émergence du Web, notamment
avec les applets. Java est incorporé dès ses débuts à Netscape.
http://oracle.com.edgesuite.net/timeline/java/
6
Green team
7. javaOOP.fr
23 MARS 1995 – AVIS DE NAISSANCE
7
http://web.archive.org/web/20070119042830/http://java.sun.com/features/1998/05/birthday.html
« Ce que ces types font
est indéniablement,
absolument nouveau.
C'est un super truc…
Ces types repoussent
vraiment les limites. »
Marc Andreesen (co-fondateur
de Netscape)
8. javaOOP.fr
JAVA SOUS TOUTES SES FORMES
• Ligne de commande, application complète sur le poste client, architecture client serveur, mobile
(Android, Java ME), périphériques intégrés (lecteurs Blu-ray, imprimantes…), carte à puce…
8
9. javaOOP.fr
Java SE : Java Standard Edition => implémenté par deux produits Oracle le JDK pour les
développeurs et le JRE pour tous les autres utilisateurs
• JRE: Java SE Runtime Environment (contient Java SE API ( Application Programming
Interface: librairies java) + Outils de déploiements (Applet et Java Web Start) et JVM)
• Server JRE (outils de monitoring JVM, pas d’intégration browser)
• JRE pour les utilisateurs (intégration browser)
• JDK: Java Development Kit (contient le JRE, le langage Java et également tous les outils de
développement (compilation etc.)) => pour les développeurs uniquement
9
JRE, JDK OU JAVA SE ?
http://docs.oracle.com/javase/7/docs/index.html
10. javaOOP.fr
3 « SAVEURS » PRINCIPALES DE JAVA
•Java SE: Java Standard Edition (anciennement J2SE) contient le JDK (java
Development Kit –> Java SE API, JVM (Java Virtual Machine) et outils de
développement) => applications java s’exécutant sur le poste client
•Java EE: Java Enterprise Edition (anciennement J2EE), extension de Java SE pour
les entreprises afin de développer des applications multi-tiers solides dans un
environnement réseau. Java EE repose sur Java SE mais en plus permet la gestion
de serveurs d'applications (Servlet, JSP, JSF, JSTL, JavaMail, JNDI…) et contient
Glassfish un serveur d’application Open Source => applications web (client-serveur)
•Java ME: Java Platform Micro Edition pour les applications embarquées et mobiles
Mais aussi
•Java Embedded:
• Java SE Embedded pour les systèmes à au moins 32 MB de RAM, Java ME
Embedded pour au moins 8 MB de RAM => blu ray, imprimantes…
• Java TV (repose sur Java ME, applications java pour la TV, ex VOD, jeux, réseaux
sociaux…)
• Java Card pour les cartes à puces, c’est la plus minuscule des plateformes java
existantes…
10
11. javaOOP.fr
HISTORIQUE DES VERSIONS
• JDK Alpha et Beta: 1995 premières versions publiques, instables
• JDK 1.0 : 23 janvier 1996 Oak - Version initiale stable
• JDK 1.1 : 1997 classes internes, jdbc, reflection…
Java est renommé Java 2 pour marquer l’évolution majeur du langage et les versions sont nommées J2SE pour distinguer J2EE et J2ME
• J2SE 1.2 : 1998, Playground : Swing, compilateur JIT, collections => 1500 classes
• J2SE 1.3 : 2000, Kestrel : Grandes améliorations de performances
• J2SE 1.4 : 2002, Merlin : Expression régulières, JAXP, API de Logging, Java Web Start… => 2700 classes
La version 1.5 est renommée 5.0 pour marquer l’évolution majeur du langage.
• J2SE 5.0 : 2004, Tiger : Grandes améliorations du langage (boucle foreach, génériques, …) => 3300 classes
J2SE devient Java SE, le .0 de la version mineure est abandonnée.
• Java SE 6 : 2006, Mustang : améliorations de performances, JDBC 4.0, JAX-WS… => 3500 classes
• Java SE 7 : 2011, Dolphin : diverses améliorations. => 7400 classes
• Java SE 8 : 2014 Lambda et API Stream => 7700 classes , en attente de soritie pour Java EE8
• Java SE 9 : 2016 ?
http://fr.wikipedia.org/wiki/Java_(langage)#Historique_des_versions
11
http://upload.wikimedia.org/wikibooks/en/b/b8/Java_Development_Path.svg
12. javaOOP.fr
LA MASCOTTE, DUKE
• Crée par Joe Palrang (qui travaillera plus tard sur Shrek).
• Apparait pour la première fois sur le Star7.
• Une nouvelle personnalité chaque année
https://blogs.oracle.com/java/entry/new_duke_personality_scientist_duke
https://duke.kenai.com/
12
2013 – Scientist Duke2012 – Adventure Duke2011 – Future Tech Duke 2014 – Manifest the Future
13. javaOOP.fr
ET ORACLE RACHETA SUN…
• 13 novembre 2006, Java est sous licence libre GNU GPL (logiciel libre)
• 2007 : Java devient Open Source
• 27 Janvier 2010: Oracle rachète Sun Microsystems, une bonne ou une mauvaise nouvelle pour l’avenir de
Java ?
• Question d’argent: Java est gratuit mais le support est payant pour rester averti des failles de sécurité,
(alternative à l’achat de la licence, bien penser à mettre sa version de java à jour 1 fois par an), également des
outils d’analyse de performance avancés payants (JRockit Mission Control), les certifications payantes…
• http://www.oracle.com/us/technologies/java/standard-edition/support/overview/index.html
http://en.wikipedia.org/wiki/Sun_acquisition_by_Oracle
http://www.javaworld.com/article/2078033/spring-framework/oracle-sun--the-end-of-java-as-we-know-it-.html
http://blogs.enterprisedb.com/2011/03/03/survey-reveals-oracle-is-bad-for-java-and-mysql/
13
14. javaOOP.fr14
PROCESSUS D’ÉVOLUTION DU LANGAGE
•JCP: Java Community Process, créé par Sun en 1998 pour coordonner l’évolution du
langage Java et des technologies associées. Il émet des JSR.
•JSR: Java Specification Request, décrit des spécifications d’un ajout à la plateforme java.
Etapes: Initialisation, ébauche préliminaire, release finale, maintenance. Des revues sont
menées puis est votée (ou non) par l’executive committe du JCP. Il existe actuellement 350
JSR. https://www.jcp.org/en/jsr/all
•EC: Executive committee: groupe de membres guidant l’évolution de la technologie java
(Eclipse Foundation, Fujitusu Limited, Credit Suisse, Nokia, Oracle, Red Hat Middleware,
SAP…) https://jcp.org/ja/participation/committee
https://blogs.oracle.com/darcy/entry/pictorial_jcp
15. javaOOP.fr
SOMMAIRE
• Introduction
• Au cœur de Java et de la POO
• Compilé vs Interprété
• Java Virtual Machine
• POO: Héritage, Encapsulation, Abstraction et Polymorphisme
• Installer une environnement de développement
• Tests Unitaires: JUnit 4, TDD
• Gestion de versions, outils de build et packaging
• Applets, Java Web Start
• Intégration continue
• Javadoc
• Java Avancé
• Conclusion
15
16. javaOOP.fr
COMPILÉ VS INTERPRÉTÉ
16
Compilé
•La compilation c’est traduire un code par un programme
annexe appelé compilateur afin de générer un nouveau fichier
autonome, c’est-à-dire qui n’a plus besoin d’un programme
autre que lui pour s’exécuter, il devient exécutable.
Avantages
• Pas besoin de programme annexe pour s’exécuter une fois
compilé.
•Plus rapide à l’exécution.
•Meilleur sécurité du code (code compilé difficilement lisible,
peut même être « obfusqué »).
Inconvénients
•Moins souple à la modification (à chaque fois il faut recompiler)
•N’est pas plateforme indépendant (faire une compilation pour
chaque plateforme).
Interprété
•Rendu « intelligible » au processeur par le biais d’un
programme auxiliaire (l’interpréteur) traduisant au fur et à
mesure les instructions du programme.
Avantages
•Un programme interprété peut même se modifier lui-
même et se réécrire dans sa phase d’exécution.
•Plateforme indépendant.
Inconvénients
•Plus lent à l’exécution (l’interprétation à l’exécution
ralentit le programme).
Hybride => compilé et interprété
•Plateforme indépendant
•Rapide à l’exécution
17. javaOOP.fr
JAVA COMPILÉ ET INTERPRÉTÉ
17
HelloWorld.java
HelloWorld.class
javac HelloWorld.java
COMPILATION
Bytecode
JVM pour
windows
JVM pour
Linux
INTERPRETE
java HelloWorld
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World! I am
new to Java.");
}
}
0: iconst_2 1: istore_1 2: iload_1 3: sipush 1000 6:
if_icmpge 44 9: iconst_2 10: istore_2
Write Once, Run Anywhere
(WORA) => Write Once,
Debug Everywhere (WODE)
18. javaOOP.fr
JAVA VIRTUAL MACHINE
•JVM = Java Virtual Machine, est donc comme son nom l’indique une « machine virtuelle » ou l’illusion d’une
appareil informatique créée par un logiciel d’émulation. Il exécute des programmes compilés sous forme de
bytecode java.
•Contient un Bytecode interpreter mais aussi le JIT compiler (Just In Time, compilation à la volée, optimise et
compile directement en code machine des petites portions de code en se basant sur les statistiques du programme
en train de tourner pour trouver les parties « Hot » et les met en cache pour les réutiliser)
•Cet « appareil informatique fictif » est simulé par un logiciel spécifique à chaque plateforme => WORA.
•JVM existantes: Hotspot (Oracle), JRockit (Oracle (anciennement Weblogic)), Dalvik (Android) etc.
•Initialement conçue pour java, mais utilisée par de nombreux autres langages (Clojure, Groovy, Scala, Jruby,
Jython, Rhino etc.), du moment que ces programmes sont compilés en bytecode.
•La JVM est le point d’entrée pour analyser les performances d’un programme java à l’exécution et chercher des
pistes d’optimisation (outils de monitoring JConsole, VisualVm, Java Mission Control, Flight Recorder…)
•Une spécification JSR décrit le comportement à respecter par toutes les JVM.
The Java virtual machine is the cornerstone of the Java platform. It is the component of the technology responsible for its hardware- and
operating system-independence, the small size of its compiled code, and its ability to protect users from malicious programs.
[…] The Java virtual machine knows nothing of the Java programming language, only of a particular binary format, the class file format. A
class file contains Java virtual machine instructions (or bytecodes) and a symbol table, as well as other ancillary information.
[…] However, any language with functionality that can be expressed in terms of a valid class file can be hosted by the Java virtual
machine. Attracted by a generally available, machine-independent platform, implementors of other languages can turn to the Java virtual
machine as a delivery vehicle for their languages.
http://download.oracle.com/otn-pub/jcp/jvm-se7-mr3-approved-oth-JSpec/jvm-javase7-mr3-spec.pdf?AuthParam=1391528359_95a49eef8ad45e73415419f4aeea1d17
18
19. javaOOP.fr
POO
Un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d'un livre.
On appelle classe la structure d'un objet.
Un objet est donc « issu » d'une classe, c'est le produit qui sort d'un moule.
Un objet est une instanciation d'une classe, c'est la raison pour laquelle on pourra parler indifféremment d'objet ou d'instance.
Les attributs : il s'agit des données représentant l'état de l'objet
Les méthodes: il s'agit des opérations applicables aux objets (son comportement)
19
Attributs
Méthodes
Constructeur
Classe
Objet
20. javaOOP.fr
CONCEPTS CLÉS POO
• Héritage => transfère le savoir à « ses filles ».
• Encapsulation => protège l’intégrité des données.
• Abstraction => code commun dans une représentation abstraite
• Polymorphisme => code qui peut prendre plusieurs formes à l’exécution.
20
21. javaOOP.fr
POO - HÉRITAGE
• Permet la réutilisabilité et le polymorphisme.
• Les « filles » (sous-classes) héritent des caractéristiques (attributs et méthodes) de leur « mère »
(super-classe) en fonction du niveau de visibilité déclaré par la mère (public, private, protected).
• On ne peut hériter que d’une seule classe.
• Enrichissement: Il est possible « d’enrichir » la classe fille avec des attributs et méthodes supplémentaires.
• Redéfinition (ou substitution): Il est possible de « redéfinir » les méthodes héritées avec une nouvelle
implémentation.
Syntaxe en java: public class Chat extends Animal
21
Classe mère Classe fille
22. javaOOP.fr
POO - ENCAPSULATION
22
Encapsulation
Encapsulation: les attributs (déclarés private) ne sont accessibles que via les mutateurs (setter) et les accesseurs
(getter). Le fonctionnement interne de l’objet reste intègre, toute modification d’un attribut de l’objet est maîtrisée. Il est
une « boîte noire ».
Attention à la déclaration d’attributs public ou protected, c’est possible mais ne respecte pas le principe
d’encapsulation.
23. javaOOP.fr
ABSTRACTION 1/2
•Une classe abstraite n’est pas instanciable mais on peut en hériter.
•Elle est définie par l’emploi du modificateur abstract.
public abstract class FormeGeometrique {
•Elle peut contenir des méthodes abstraites, ce sont des méthodes sans
implémentation pour lesquelles les classes filles (sauf si elles sont
également déclarées abstraites), doivent obligatoirement définir une
implémentation.
protected abstract double calculerSurface();
23
25. javaOOP.fr
POO - POLYMORPHISME
•Du grec signifiant « plusieurs formes »
•Un même bout de code correspond à l’exécution du code à l’appel de différentes méthodes.
•Repose sur l’héritage ou les interfaces
25
26. javaOOP.fr
INSTALLER JAVA
26
•Télécharger le JDK sur http://www.oracle.com/technetwork/java/javaee/overview/index.html
•Configurer la variable d’environnement JAVA_HOME dans
ordinateur/propriétés/Paramètres système avancés bouton variable d’environnement
27. javaOOP.fr
IDE: ENVIRONNEMENT DE DÉVELOPPEMENT INTÉGRÉ
27
•IDE: Integrated Development Environment (environnement de développement intégré). C’est
un regroupement d’outils d’aide au développement, permettant d’augmenter la productivité
des développeurs et la qualité du code.
•Les IDE permettent la compilation, le débogage, le refactoring, la connexion aux outils de
gestion de version, l’intégration d’outils de déploiement (Maven, Ant), d’analyse du code
(Checkstyle, findbugs…), la connexion avec les serveurs d’application (start/stop et
déploiement), l’accès au bases de données…
•Principaux IDE pour java: Eclipse, Netbeans (Oracle), IntelliJ (JetBrains)…
28. javaOOP.fr
JUNIT 4
•Framework de tests unitaires
• Ecriture de tests pour tester le contrat d’interface d’une classe (annotation @Test sur une méthode)
• Utilisation d’assertion pour valider le résultat
• Regroupement des Tests en Suite de Tests
• Exécutables de façon automatique en environnement d’intégration continue pour détecter des régressions.
http://junit.org/ (4.x)
28
29. javaOOP.fr
TDD: TEST DRIVEN DEVELOPMENT
Le Test Driven Development (TDD) ou développement piloté par les tests est une technique de développement qui préconise d'écrire
les tests unitaires avant d'écrire le code source.
Avantages:
• Cela permet de spécifier le fonctionnement de sa méthode avant de l’implémenter évitant des erreurs de conception, et permettant une
« documentation technique ».
• Influe sur la conception du code:
• L’implémentation est faite à partir d’un cas de test et donc le programmeur se concentre sur le contrat d’interface avant
l’implémentation.
• Cela encourage le développeur à implémenter son code en petites briques unitaires testables et lisibles avec un faible couplage.
• Cela permet de mettre en place dès le codage les tests de non régression automatisés.
29
1. Ecrire un premier test JUnit.
2. Vérifier qu'il échoue (car le code qu'il teste
n'existe pas), afin de vérifier que le test
est valide.
3. Ecrire juste le code suffisant pour passer
le test.
4. Vérifier que le test passe.
5. Puis refactoriser le code, c'est-à-dire
l'améliorer tout en gardant les mêmes
fonctionnalités.
30. javaOOP.fr
GESTION DE VERSIONS
30 No.
Problème : chaque développeur écrit sur son propre poste
Solution: Logiciels de contrôle de version
Permet de travailler avec des branches: branche en production,
branche de la futur version etc. Puis de fusionner les branches
Repository
Copie locale
Copie locale
0 : Commit
1 : Update
2 : Gestion
des conflits
3 : Commit
Exemples : Subversion, Git, Git
31. javaOOP.fr
OUTILS DE BUILD
31
Un outil de build automatise les fonctions répétitives du développement: la compilation, la génération
de javadoc, la création du war, le déploiement etc.
Ant: repose sur un fichier xml (ex build.xml) composé d’un ensemble de cibles (ou targets) ayant
chacune un rôle dans la construction du projet : nettoyage de répertoires, initialisation, compilation,
transfert de fichiers, tests unitaires… Il existe une grande panoplie de tâches possibles et il est
possible d’en créer des customs. Avec Ivy en + il permet également de gérer les dépendances.
Maven: Repose sur des pom.xml (signifiant Project Object Model) dans les différents niveaux du
projet. Ils permettent la compilation, lancement des tests unitaires, déploiement etc. mais surtout la
gestion des dépendances grâce à des repositories distants et locaux.
Gradle: Le petit nouveau très tendance, combine les avantages de ant et maven sans leurs
inconvénients.
http://zeroturnaround.com/rebellabs/java-build-tools-part-2-a-decision-makers-comparison-of-
maven-gradle-and-ant-ivy/
http://blog3.lemondeinformatique.fr/?p=299
32. javaOOP.fr
PACKAGING/LIVRABLE
32
•JAR = Java ARchive => fichier zip (ouvrable par 7-zip ou winzip). Il contient des classes java compilées, un fichier manifest
(versions, nom de la class principale, dépendances etc), des applets…
•Ex log4J.jar
•WAR = Web application Archive => fichier JAR contenant une application web (librairies JAR, classes java, html, xhtml, JSP,
images, javascript, css, web.xml…) à déployer sur un serveur d’application.
•Ex: SNCF.war
•EAR = Enterprise Archive => fichier JAR contenant plusieurs modules à déployer sur un serveur d’application (WAR, EJB, JAR…)
•EX: PortailAMELI.ear
33. javaOOP.fr
APPLETS JAVA
•Introduite dès la première version du langage en 95. Une applet java s’exécute dans un navigateur web
(bytecode java exécuté par la jvm). Elle peut également être testée dans l’appletviewer.
•De préférence, on recommande maintenant l’utilisation de la technologie Java Web Start.
•Exemple d’applets: http://www.oracle.com/technetwork/java/index-135948.html
•Depuis les derniers update de java 7, la sécurité s’est renforcée au maximum en réponse aux failles de
sécurité controversées => il faut désormais livrer des applets signées avec un certificat acheté auprès
d’une autorité de confiance reconnue mondialement telle que Thawte ou Verisign pour éviter les fenêtres
de blocage sécurité.
33
34. javaOOP.fr
JAVA WEB START 1/2
-Java Web Start permet de lancer une application java directement depuis le web, d’un seul clic. L’extension est jnlp (Java
Network Launching Protocol).
-Java Web Start garantit l’exécution de la version la plus récente de l’application.
-Par défaut, lancement de l’application dans un « bac à sable » (sandbox), préserve l’intégrité et la sécurité de l’ordinateur.
-Page de démo: http://docs.oracle.com/javase/tutorial/uiswing/examples/misc/index.html
http://www.java.com/fr/download/faq/java_webstart.xml
34
35. javaOOP.fr
JAVA WEB START 2/2
35
•La gestion des applets et applications java web start se fait dans panneau de configuration/Java/Général/Fichiers Internet
temporaires/Visualiser
•On peut vider le cache, lancer directement une application sans passer par le navigateur, ou l’installer en raccourci sur le
bureau.
36. javaOOP.fr
INTÉGRATION CONTINUE 1/2
36
Ensemble de pratiques consistant à vérifier de façon automatique à chaque modification du code source dans le
gestionnaire de sources qu’il n’y a pas de régression.
A la détection d’une modification, le serveur d’intégration peut lancer un compilation voire un déploiement et
l’exécution des tests unitaires (JUnit). On peut paramétrer l’envoi d’e-mails en cas de problème.
L’exécution repose sur un logiciel de gestion de versions (svn, git…), un outil de build (ant, maven…), ainsi qu’un outil
d’intégration continue (ex Jenkins). La plateforme peut aussi planifier (par ex une fois par jour) le lancement d’outils
d’audit qui génère des rapports.
Ex d’outils d’audit (Open source)
•Checkstyle: vérifie le respect des règles de codage
•PMD: détecte les mauvaises habitudes de codage pouvant être la cause de bugs.
•Findbugs: détecte des bugs courants
•JaCoCo: couverture de code (analyse du pourcentage de code testé par les tests unitaire), permet de détecter les
portions de code manquant de tests.
•SonarQube: permet d’agréger les résultats des outils d’audit (findbugs, checkstyle etc) en rapports et graphiques.
38. javaOOP.fr
JAVADOC 1/3
•Outil permettant de générer une documentation html de l’API à partir des commentaires présents dans
le code.
• A livrer avec toute API, sinon l’API est pratiquement inutilisable.
• Indispensable pour toute application, notamment si TMA, changement de développeurs sur le projet,
développeur intervenant sur des parties codées par un autre etc.
• A faire « au fil de l’eau » de l’écriture du code par le développeur, sinon ne sera pas fait ou mal fait a
postériori…
• Ceci est un commentaire java mais n’est pas de la javadoc:
• La javadoc commence par /** et se termine par */
• Oracle fournit une javadoc détaillée de ses API de base (core java API).
Ex de javadoc d’une classe
Exemple de javadoc d’une méthode et d’un constructeur
38
39. javaOOP.fr
JAVADOC 2/3
39
Génération en ligne de commande:
javadoc -d homehtml -sourcepath
homesrc -subpackages java -exclude
java.net:java.lang
Ou via l’IDE:
41. javaOOP.fr
SOMMAIRE
• Introduction
• Au cœur de Java et de la POO
• Conclusion
• Java vs Javascript
• Java vs .NET
• TOY
• Le future de Java ?
• Restez dans la boucle !
41
42. javaOOP.fr
JAVASCRIPT ET JAVA : RIEN À VOIR !
42
•Java a été créé par Sun Microsystems.
•Java permet de créer des Applets, des applications
standalone, la logique côté serveur d’une application Web.
•Java est un langage de programmation Orienté Objet.
•Java créée des application tournant dans une machine
virtuelle.
•Java doit être compilé.
•JavaScript a été créé par Netscape Inc.
•JavaScript est embarqué dans l’HTML pour créer de la
« richesse » côté client.
•JavaScript est un langage de script à la fois procédural et
orienté object.
•JavaScript tourne sur un navigateur (plus entièrement
vrai, le server side javascript prend de l’ampleur ex
Node.js).
•JavaScript est interprété
https://developer.mozilla.org/en-US/docs/Web/JavaScript/About_JavaScript
http://www.java.com/en/download/faq/java_javascript.xml
Quelques similitudes (javaScript s’est entre autres inspiré
de java) mais surtout beaucoup de différences de syntaxe,
typage, framework etc.
43. javaOOP.fr
JAVA VERSUS .NET
43
JAVA
•Produit d’Oracle
•Open source
•Gratuit
•Multi plateforme
•IDE: Eclipse, NetBeans..
•Applications d’entreprise
•Nombreux outils, logiciels, framework, API à
disposition => nombreux fournisseurs
commerciaux et nombreuses communautés open
source => la concurrence stimule l’innovation,
permet de négocier de façon concurrentielle entre
deux produits etc.
++ Applications mobiles (Android)
++ Serveurs sont essentiellement sous Linux
++ Considéré meilleur, plus robuste pour les
applications complexes avec de gros volumes
d’utilisateurs
.NET
•Produit de Microsoft
•Propriétaire
•Prix des licences pour l’OS, l’IDE, Microsoft
IIS…
•Plateforme Windows
•IDE: Microsoft visual studio
•Applications d’entreprise
•Seul fournisseur Microsoft, outils cadrés et
stables mais sont-ils innovants ?
++ Application de bureau windows
++ « Ecosystème » plus petit, plus simple et
conduit par une seule source, Microsoft => plus
facile à appréhender et maîtriser
http://www.youtube.com/watch?v=9QFK1cLhytY&hd=1
44. javaOOP.fr
LE FUTUR DE JAVA ?
•Reste le langage de programmation le plus populaire, la tendance TIOBE
est relativement constante, signifie aussi une forte masse de développeurs.
•Ecosystème important de librairies open sources et commerciales
•Outils reconnus et de grande qualité (Eclipse, Netbeans…)
•Open source
•Forte implantation dans les entreprises
•Belle avenir sur la téléphonie mobile avec Android (70% de la téléphonie
mobile)
•Période de flottement de 2008 à 2011, mais avec Java 8 et ses avancées
majeures Java est remis sur les rails
•Et pas de concurrent valide pour le remplacer (Objective-C ? Pour Apple
uniquement, Microsoft.NET ? Verrouillé par Microsoft. Peut être un
mystérieux nouveaux langage ? Le temps qu’il s’implante laisse du temps
pour voir venir…)
•A considérer pour le futur de java, peut être Scala (niveau d’abstraction
supérieur) compilé en bytecode java.
•En conclusion, on en reparle dans 5 ans…
44
45. javaOOP.fr
RESTEZ DANS LA BOUCLE !
•Le site web: https://home.java.net/
• Le site web @Oracle: http://www.oracle.com/technetwork/java/index.html
•Le blog: https://blogs.oracle.com/java/
• Twitter: https://twitter.com/java
• Facebook: https://www.facebook.com/ilovejava
•Le e-magazine: http://www.oracle.com/technetwork/java/javamagazine/index.html
•YouTube: http://www.youtube.com/user/java
•Apprendre la POO en s’amusant avec Alice: http://www.alice.org/
•S’initier au java en s’amusant avec le projet Greenfoot: http://www.greenfoot.org/
•Apprendre le java: http://docs.oracle.com/javase/tutorial/tutorialLearningPaths.html
45
46. javaOOP.fr
POUR LES UTILISATEURS…
•JUG: Java User Groups, groupe d’utilisateurs java se rassemblant pour partager leurs connaissances
java à travers des conférences, des pizzas…
http://www.alpesjug.org/ http://www.lyonjug.org/
•JavaOne: conférence annuelle inaugurée en 1996 par Sun Microsystems sur les technologies java,
présentations techniques, nouveautés etc. The place to be…
•Devoxx est la conférence Java européenne, créé en 2001 par BeJUG (JUG Belgique), elle existe
aujourd’hui en France, Belgique et Angleterre. Conférences et recrutement…
•JavaZone: Conférence annuelle en Norvège, à Oslo sur l’open source depuis 2002 organisé par javaBin
(JUG Norvégien). Conférences, exposition de produits et recrutement.
46
http://www.oracle.com/javaone/index.html
Pôle de compétence Java
Introduction à java
Donner une culture générale autour de java
Donner un vocabulaire, des connaissances pour échanger avec experts et développeurs
Donner les clés pour gérer un projet java
- Comment estimer la popularité d’un langage ? Différentes méthodes, par recherches sous google, par offres d’emploi, par questions sur les forums, par projets sous GitHub…
TIOBE ="The Importance Of Being Earnest” compagnie validant la qualité des logiciels
- 2004 => changement de méthode ranking de google, par la suite TIOBE ajoute MSN et yahoo dans ces calculs
- Java toujours numéro 1, en concurrence avec C mais ce n’est pas la même catégorie de programmation (C est plus bas niveau: c’est pour les softwares systèmes: OS, BIOS, firmware, drivers…)
- Stabilisation de la plateforme Microsoft.Net (c#) sur les 2 dernières années, en dessous de Java
Montée d’Objective-C (apple, iphone)
Un fabricant d'équipement d'origine (FEO, ou en anglais OEM, Original Equipment Manufacturer) est, dans l'industrie automobile, aéronautique, informatique ou électronique, un fabricant de pièces détachées.
Github: service d’hébergement et de gestion de projets (compte gratuit pour les logiciels libres)
http://stackoverflow.com/: forum pour développeurs
En synthèse, voici la liste des gagnants 2014, à réactualiser en 2015
Star 7 => sous Unix et Java
The device was called *7 ("StarSeven"), named after an "answer your phone from any extension" feature of the phone system in the Green Team office.
PDA: Personal Digital Assistant
=> malheureusement, les câblo-opérateurs en était encore à leurs débuts et à la recherche d’un modèle économique viable, le projet était trop en avance sur son temps, redirection du projet vers Internet
3 finalistes: Java, DNA, Silk
Hotjava navigateur web développé en java par sun, lancé en 95 en même temps que java pour démontrer ses capacités, abandonné en 99.
The JDK forms an extended subset of a software development kit (SDK). It includes "tools for developing, debugging, and monitoring Java applications".[5] Oracle strongly suggests that they now use the term "JDK" to refer to the Java SE Development Kit. The Java EE SDK is available with or without the "JDK", by which they specifically mean the Java SE 7 JDK.
Fonctionnement par update: exemple Version 7 Update 67
Java SE 8u20
- Inquiétudes autour d’une grande compagnie possédant un produit open source, qui plus est utilisé par ses concurrents.
Quelques bourdes autour de Java 7, première release java après le rachat, des problèmes de sécurité qui ternissent son image public, un ralentissement des sorties de version et notamment java 8 longuement repoussé le temps de corriger ces failles.
Des rumeurs d’une « premium JVM », mais apparemment fausse rumeur: https://blogs.oracle.com/theaquarium/entry/the_story_of_a_tweet , mais cela accentue la méfiance des développeurs.
Grosse bourde en poursuivant Android
Mais potentiellement, Oracle a l’appui monétaire pour investir dans l’avenir de Java
Démission de Gosling 3 mois après le rachat : http://nighthacks.com/roller/jag/entry/time_to_move_on
http://www.youtube.com/watch?v=E3418SeWZfQ&list=UU1s3pFsMZv37NAxIIW90MGw
Système hérité de l’époque de Sun, évite qu’Oracle soit le seul a avoir le contrôle de Java.
Ce processus de JCP est lui-même défini dans un JSR.
La JVM Dalvik était d’ailleurs l’angle d’attaque d’Oracle dans ses poursuites juridiques pour violation de brevets contre Google (qu’Oracle a perdu).
Citation: James Gosling
Most people talk about Java the language, and this may sound odd coming from me, but I could hardly care less.
What I really care about is the Java Virtual Machine as a concept, because that is the thing that ties it all together; it's the thing that makes Java the language possible; it's the thing that makes things work on all kinds of different platforms; and it makes all kinds of languages able to coexist.
http://www.theserverside.com/news/2240037412/James-Gosling-Says-He-Doesnt-Care-About-Java
Analogie:
Public => Le numéro de téléphone est dans les pages jaunes
Protected => Le numéro de téléphone est sur liste rouge
Private => Pas de téléphone
Redéfinition de getTVA
Enrichissement en ajoutant la méthode setAntivolNumber
netPrice est private dans la classe mère et ne peut donc être accédé directement, on passe par getNetPrice (encapsulation
Egalement attirer l’attention sur l’annotation @Override
Une annotation permet d’ajouter des méta-données (donnée servant à décrire ou définir une autre donnée) au code, soit à titre purement informatif, (exemple @Deprecated), soit pour le lier à une code utilisé soit à la compilation, soit à l’exécution (ex Hibernate, RESTful Web Service
Très brève explication des interfaces, ce n’est pas le sujet.
Java pourrait être écrit dans un notepad mais grosse baisse de productivité…
Fait partie des pratiques agiles.
Avec ou sans verrou
Avec verrou => Le contrôle de concurrence pessimiste, tend à disparaitre => verrouiller-modifier-déverrouiller
Sans verrou => Le contrôle de concurrence optimiste => copier-modifier-fusionner
Les plus populaires sont: subversion et git
http://zeroturnaround.com/rebellabs/developer-productivity-report-2013-how-engineering-tools-practices-impact-software-quality-delivery/10/
Ant: robuste, flexible, bien connu des développeurs, simple à prendre en main
Maven: pas flexible, complexe à prendre en main, à utiliser pour les gros projets avec de nombreuses dépendances et des développeurs maîtrisant déjà maven
La majorité des applications web sont livrés sous forme fichier war.
Les applets Java sont la plupart du temps écrites en langage Java, mais elles peuvent également être écrites dans n'importe quel langage qui se compile en bytecode, comme Jython, Groovy ou encore Scala.
Débat sur l’utilité de la javadoc si mal faite => copier/coller abusifs, non mise à jour au fil du temps, le strict minimum dans le javadoc (param, return) qui n’apporte rien à la compréhension, rend plus difficile le refactoring automatique puisqu’il faut aussi mettre à jour la javadoc etc.
Egalement le piège est de trop en mettre dans la javadoc, en faire une annexe des SFD rend la mise à jour de la javadoc difficile au fil du temps et quand les SFD évoluent.
On peut intégrer des outils d’analyse de la javadoc à l’intégration continue.