mardi 25 septembre 2007

Introduction au JAVA

Allo. Comment JAVA ?

Principes de base :

Langage et plateforme JAVA

Le JAVA est un langage informatique orienté objet qui a été créé pour satisfaire à plusieurs besoins :

  • Simplicité de programmation
  • Portabilité
  • Simplicité de la gestion de la mémoire

Pour être exact il faut distinguer le langage JAVA de la plateforme de developpement JAVA qui sont souvent assimilés :

  • Une plateforme de développement permet de créer et d'exécuter des programmes.
  • Un langage permet de décrire soit des objets, soit des actions.

La plateforme Java est utilisée pour exécuter des programmes, il existe déjà des programmes écrits en JAVA qui tournent sous des plateforme autre que JAVA : la plateforme Mono ou .NET.

Cette plateforme est constituée par :

  1. Un compilateur
  2. Un interpréteur ou runtime
  3. Des librairies ou APIS

Les trois étages de représentation en JAVA

En réalité, la transformation en langage machine repose sur deux moments :

  1. La compilation
  2. L'interprétation runtime

Forces et faiblesses du JAVA

Le JAVA est simple, facile à programmer, facile à debugger

Sans cet élément crucial, il est probable que le JAVA n'aurait pas connu un tel succès

Le kit de développement est gratuit et la communauté de développeurs est énorme

De nombreux frameworks sont proposés gratuitement pour accélérer vos développements.

Le JAVA est réellement portable sur les environnements Solaris, Linux, Windows, Mac OS-X et AIX sur tous les aspects non visuels.

C'est a dire qu'aucun développement n'est nécessaire pour effectuer un portage.

Le JAVA est portable facilement quand il y a des aspects visuels à prendre en compte.

C'est a dire que les bugs rencontrés lors des portages seront mineurs et facilement corrigeables.

Le JAVA a des performances moindres sur les aspects nécessitant beaucoup de traitement processeur ( Vidéo, 3D )

Par contre, il est suffisant pour l'imagerie et la publication.

Le JAVA n'est pas recommandé lorsqu'on souhaite se servir de fonctions propres à un OS

Le principe de JAVA étant de factoriser les talents communs à tous les OS, il faudrait revenir sur sa portabilité si l'on souhaitait exploiter des spécificités du système.

Comparatifs technologiques

J’ai un jugement relativement peu nuancé concernant le bénéfice de la technologie JAVA, si je suis intègre dans mon prosélytisme, il n’en demeure pas moins que mon jugement est sans doute une version légèrement euphorique du marché. Cet avertissement donné, je ne parlerai plus au conditionnel ! Le Java, disais-je, est formidable : Il peut être utilisé dans tous les champs connus d’applications de l’informatique :

  • Interface Utilisateur (Client Lourd)
  • Interface Web (Client Léger)
  • Middleware (Batch et Workflow)
  • Informatique Scientifique
  • Informatique embarquée
  • Temps Réel

La différence est que suivant le domaine il ne possède pas les mêmes qualités à opposer à ses adversaires.

Interface Utilisateur

Pour les interfaces utilisateurs on utilise essentiellement les Langages Objet comme C++ et Objective C pour les applications grand public. Ce type d’application il nécessite des installeurs.

Pour les petite application d'entreprise on utilise également du VB et d’autres langages scriptés, les exigences de robustesse et de facilité d’installation sont habituellement moindres. Par rapports à ces deux alternatives les avantages du JAVA sont les suivants :

  • Pour les applications grand public, l’installation est simplifiée du fait de la portabilité native du JAVA.
  • Par rapport aux applications utilisée dans les entreprises basé sur des scripts. Le JAVA possède un design (lié à la force/rigueur du langage) qui lui donne un amortissemenet plus long à ce genre d’application. Cela qui garanti au prix d’un effort un peu plus important au début d’avoir une meilleure pérennité du produit développé.

Interface Web et Middleware

C’est véritablement l’environnement dans lequel le JAVA a vraiment tiré son épingle du jeu, lorsqu’on l’attendait plutôt sur les aspects plus graphiques et grand public. Ce sont les développeurs qui en votant avec leurs pieds ont fait du JAVA un acteur majeur du coté des serveurs. Sa force de ce point de vue réside dans la réponse normalisée qui a été apportées très tôt aux CGI par la plateforme J2EE.

Ses concurrents actuels sont le PHP et les solutions Microsoft. PHP connaît un succès certain en particuliers dans les sites qui ont besoins d’une grande réactivité, mais globalement, les solutions JAVA prennent l’avantage dès qu’il s’agit d’un projet dont l’amortissement est prévu sur plus de 5 ans. Sur le Middleware, IBM s’est aligné avec JAVA et il est pratiquement le seul en lice pour les technologies de demain à ce niveau.

Informatique scientifique

On dépasse progressivement l’époque où c’était avant tout la puissance qui était demandée à l’informatique scientifique. Maintenant, le JAVA est attendu dans toutes les applications scientifiques réellement critiques, comme le pilotage d’un robot sur Mars, pilotage de fusées etc. C’est un phénomène assez nouveau, d’une part les nouveaux chercheurs connaissent ce langage.D’autre parts, on sait mieux intégrer le risque « humain » de programmation.

Informatique embarquée

L’informatique embarquée occupe maintenant une part non négligeable du CA global de ce secteur avec l’avènement du téléphone portable et plus généralement de l’informatique embarquée. Et, surprise, Sun a réalisé une partie non négligeable de son CA l’année dernière sur les jeux embarqués dans les téléphones portables. Pour les mêmes raisons de fiabilité on trouve bénéfice à utiliser ce langage sur des plateformes embarquées.

Runtime et JDK

Sun est le principal acteur du JAVA c'est lui qui détient les droits sur la norme. Cette norme est publique et bien que les sources java des librairies soient publiques, les codes source de la machine virtuelle ne sont pas publics.

Sun fournit deux types de plateforme Java :

JRE

Java Runtime Environnement : c'est ce qu'il faut installer pour faire fonctionner JAVA, ce kit comprend la RunTime ainsi que divers utilitaires qui peuvent être utilisés lors de l'exécution d'un programme, par exemple un gestionnaire de sécurité.

JDK

Java Developpement Kit : Ee kit en plus de la runtime comprend un compilateur, un packager et divers utilitaires qui permettent de créer des programmes JAVA. Il sert pour le developpement. Ce Kit peut être nécessaire pour faire fonctionner certaines applications serveur, en particulier les serveur d'application car il ont besoin d'avoir un compilateur.

La compilation

Pour produire un programme JAVA, il est nécessaire de le compiler. Ainsi le code est transformé en des classes compilées (Qu'on appelle bytecode) qui pourront s'exécuter sur la machine virtuelle.

On peut compiler en utilisant en ligne de commande le programme javac qui fait partie du JDK. Cependant, ce fontionnement est de plus en plus marginal et il existe des IDE gratuites et puissantes comme Eclipse qui effectuent graphiquement ce genre d'opération.

La machine virtuelle

Which pill would you take, the red or the blue?

Pour pouvoir être exécutées les intructions données par le bytecode sont transformées en instructions processeur. Puisque tous les processeurs ne disposent pas du même jeu d'instructions et que certaines opérations sont possibles en un seul cycle d'horloge sur un processeur tandis qu'elles se réalisent en plusieurs instructions sur un autre processeur, le rôle de la machine virtuelle est de convertir un jeu d'instructions propre au processeur.

C'est ici que se trouve la force et la faiblesse du JAVA. La phase d'interprétation du JAVA est celle qui le pénalise le plus par rapport à des langages tel que le C ou C++ qui produisent des exécutables directement en langage machine. En effet, la phase d'interprétation consomme du temps processeur. Les machines virtuelles récentes sont trois fois plus lente que celle en langage processeur. Mais Attention cependant, cela ne veut pas dire que le JAVA est trois fois plus lent car dans un ordinateur il n'y a pas que le processeur qui compte, habituellement ce sont plus les entrées sorties qui consomment le plus de temps.

De plus, ce désavantage en performance sur le papier est compensé par des aspects pratiques au niveau de la programmation. En effet, le langage JAVA est un langage facile à programmer, une bonne conception est souvent la plus grande source de gain en termes de performances. Il ne faut donc pas éliminer le JAVA avec cet argument va-tout que vous entendrez encore dans la bouche de certains vétérans : "Le java n'est pas suffisament performant".

En programmation C ou C++ c'est au programmeur d'allouer et de désallouer de la mémoire. En java on ne parle plus d'allocation de mémoire, mais de référencement d'objet. Pour le programmeur JAVA cette machine virtuelle est une aubaine car elle permet au progammeur de ne plus avoir en tête la représentation mémoire de son programme.

Quand on programme en C, il est facile de penser à allouer de la mémoire sinon ça ne marche pas. Il est par contre beaucoup moins nécessaire de désallouer de la mémoire car le programme fonctionne toujours même s'il consomme plus de mémoire, ce ne sont que de bonne habitudes de développement qui permettent de s'en sortir et il y aura toujours certaines fuites mémoire imprévisibles. C'est assez difficile de s'en apercevoir et difficile à réparer car l'incident se produit parfois longtemps après le développement. En Java, exit ce genre de problème. Ou presque...

Liens utiles

Le site de référence : On y trouve le JDK et tout un tas de tutoriaux (mais c'est en anglais).

Aucun commentaire: