1.- PRESENTATION GENERALE DU LANGAGE JAVA
1.1. – Introduction
1.2. – Historique
1.3. – Les principales raisons du succès de Java
1.4.- Les particularités de Java
1.5.- Questions courantes concernant Java
1.6.- Ouvrages et sites de référence
2.- LES PRINCIPES DE LA POO
2.1.- L’encapsulation
2.2.- L’héritage
2.3.- Le polymorphisme
3.- LE LANGAGE JAVA
3.1.- Les sources et les commentaires
3.2.- Types simples et opérations arithmétiques
3.3.- Les instructions : de l’algorithme au programme
3.4.- Les conversions de type
3.5.- Tableaux et chaînes de caractères
3.6.- Classes et objets
3.7.- Les méthodes
3.8.- Les constructeurs et le destructeur
3.9.- L’héritage
3.10.- Les modificateurs
3.11.- Les packages
3.12.- Classes abstraites et interfaces
5.13.- Les exceptions
3.14.- Les fichiers
3.15.- La sérialisation
4.- JAVA ET LES INTERFACES HOMME – MACHINE (IHM)
4.1.- Les composants du package Swing
4.2. La gestion des événements
4.3.- Les menus et les boites de dialogue
4.4.- Les environnements de développement intégrés
5.- JAVA : PROGRAMMATION AVANCEE
5.1.- Les threads
5.2.- Les collections
5.3.- Les images
5.4.- Dessiner avec Java
6.- LES APPLETS
6.1.- Applet et application : différences
6.2.- Création d’une applet
6.3.- Inclure une applet dans une page Web
6.4.- Passer des paramètres à une applet
7.- JAVA3D
7.1.- Les bases de la programmation en Java 3D
7.2.- Les formes 3D
7.3.- Les attributs d’apparence
7.4.- Eclairage d’une scène
7.5.- Interaction
A.- ANNEXES
A.1.- C++ – Java : les principales différences
A.2.- Problèmes avec les méthodes de la classe Thread
A.3.- Quelques exemples
1.- Présentation générale du langage Java
1.1. – Introduction
Java est un langage de programmation récent (les premières versions datent de 1995) développé par Sun MicroSystems. Il est fortement inspiré des langages C et C++.
Comme C++, Java fait partie de la « grande famille » des langages orientés objets. Il répond donc aux trois principes fondamentaux de l’approche orientée objet (POO) : l’encapsulation, le polymorphismeet l’héritageNous reviendrons bien évidemment en détails sur ces trois notions dans la suite de ce document (Cf. chapitre 2 : « Les principes de la POO »).
1.2. – Historique
Le langage Java trouve ses origines dans les années 1990. A cette époque, quelques ingénieurs (innovateurs) de SUN Microsystems commencent à parler d’un projet d’environnement indépendant du hardware pouvant facilement permettre la programmation d’appareil aussi variés que les téléviseurs, les magnétoscopes etc … James Grosling (SUN Microsystems) développe un premier langage, Oak, permettant de programmer dans cet environnement. En 1992, tout est prêt pour envahir le marché avec cette nouvelle technologie mais la tentative se solde par un échec.
Bill Joy (co-fondateur de SUN Microsystems) sauve malgré tout le projet. Devant la montée en puissance de l’Internet, il lui semble intéressant d’insister sur l’élaboration d’un langage indépendant des plates-formes et des environnements (les principaux problèmes rencontrés sur l’Internet étant liés à l’hétérogénéité des machines et des logiciels utilisés).
Dès lors tout s’accélère. Oak est renommé (en 1995) Java et soumis à la communauté Internet grandissante. Une machine virtuelle, un compilateur ainsi que de nombreuses spécifications sont données gratuitement et Java entame une conquête fulgurante. Aujourd’hui, après de nombreuses améliorations (parfois modifications) Java n’est plus uniquement une solution liée à l’Internet. De plus en plus de sociétés (ou de particuliers) utilisent ce langage pour l’ensemble de leurs développements (applications classiques, interfaces homme-machine, applications réseaux …).
1.3. – Les principales raisons du succès de Java
Java a rapidement intéressé les développeurs pour quatre raisons principales :
• C’est un langage orienté objet dérivé du C, mais plus simple à utiliser et plus « pur » que le C++. On entend par « pur » le fait qu’en Java, on ne peut faire que de la programmation orienté objet contrairement au C++ qui reste un langage hybride, c’est-à-dire autorisant plusieurs styles de programmation. C++ est hybride pour assurer une compatibilité avec le C ;
• Il est doté, en standard, de bibliothèques de classes très riches comprenant la gestion des interfaces graphiques (fenêtres, boites de dialogue, contrôles, menus, graphisme), la programmation multi-threads (multitâches), la gestion des exceptions, les accès aux fichiers et au réseau … L’utilisation de ces bibliothèques facilitent grandement la tâche du programmeur lors de la construction d’applications complexes ;
• Il est doté, en standard, d’un mécanisme de gestions des erreurs (les exceptions) très utile et très performant. Ce mécanisme, inexistant en C, existe en C++ sous la forme d’une extension au langage beaucoup moins simple à utiliser qu’en Java ;
1.4.- Les particularités de Java
1.4.1.- Multi plates-formes
Java est un langage qui doit être compilé et interprété. Dans une première phase on compile un programme (un ou plusieurs fichiers source .java) en fichiers .class. Le compilateur génère un fichier .class pour chacune des classes définies dans le(s) fichier(s) .java. L’ensemble des fichiers .classest ensuite interprété par la Machine Virtuelle Java (Java Virtual Machine) pour exécuter le programme (seule la JVM dépend du système). Ce principe donne à Java une portabilité maximale (Windows, Unix, MacIntosh …). Les figures ci-dessous montrent la différence de principe entre la compilation dans un langage classique (C++) et la compilation/interprétation en Java.
1.4.2.- Applets et applications
Il est possible de développer des applications isolées (standalone applications), fonctionnant avec l’interpréteur comme un programme habituel dans un langage classique mais aussi des « applets ». Les applets sont des programmes qui peuvent être téléchargés sur l’Internet puis exécutés automatiquement quand ils sont intégrés à dans des pages HTML. Dans ce dernier cas, l’ensemble des fichiers .classest utilisé avec un fichier HTML qui fait appel à une des classes (Cf. chapitre 6).
Bien que les principes de programmation soient très proches, ce document traite uniquement des applications car la philosophie est plus proche des langages classiques (C/C++, Pascal, ADA …) Néanmoins, nous consacrerons le chapitre 7.1 est consacré aux spécificités des applets.
1.5.- Questions courantes concernant Java
1.5.1. – Pourquoi ne pas interpréter directement le programme Java ?
• Les fichiers .classcontiennent du bytecode,une sorte de code machine Java (comparable au code machine d’un microprocesseur). L’interpréteur exécute beaucoup plus rapidement ce bytecode que les fichiers sources .java.
• Seuls les fichiers .class sont nécessaires à l’exécution d’un programme Java. Ils contiennent du code machine et ne peuvent donc pas être lus par des tiers, protégeant ainsi le code source.
• Etant compilés, les fichiers .classsont de taille plus petite que le code source Java; ceci est un argument important pour transférer les programmes sur l’Internet.
• Chaque fichier .classdécrivant une classe d’objet, une même classe peut être utilisée par différents programmes sans que cette classe ne soit dupliquée dans chacun des programmes.
1.5.2. – Pourquoi ne pas compiler directement et générer un exécutable ?
Un exécutable contient du code qui n’est exécutable que sur la machine pour laquelle il est destiné et le seul moyen de rendre un langage multi plates-formes, sans avoir à recompiler le code source (comme en C/C++), est d’utiliser un interpréteur. L’autre avantage de l’interpréteur est qu’il peut être incorporé à un navigateur (Netscape/Internet Explorer), ce qui lui permet d’exécuter des programmes Java à l’intérieur de pages HTML.
1.5.3. – Qu’en est-il de la rapidité d’exécution de Java ?
Le plus gros problème d’un programme Java est son manque de rapidité d’exécution :
l’interpréteur prend forcément un certain temps pour interpréter le code des fichiers .class, ce qui rend les programmes moins rapides que de « vrais exécutables ». Mais Java est encore jeune et Sun Microsystems et d’autres éditeurs de logiciels tentent d’optimiser les Machines Virtuelles Java. L’un des axes d’optimisation est actuellement le développement de compilateurs JIT (Just In Time) : quand une classe est chargée, elle est traduite dans le code machine de la plate-forme où elle est exécutée (traduction à la volée du micro-code Java vers par exemple, le code machine PowerPC ou Intel). Cette opération ralentit le départ de l’application, mais l’exécution du programme est ensuite beaucoup plus rapide !..
Programmer en Java (981 KO) (Cours PDF)