0 Rappel - Charger des classes et rattacher des classes à un package
1 Généralités sur le modèle objet de Java
2 Exploration pratique et partielle des packages Java
3 Le package Applet
4 Les packages java.awt et javax.swing
5 Le package io
6 Le package lang
7 Le package util
Exercices Corrigés
package PackA; import java.util.*; import javax.swing.JFrame; import Divers.Utils; public class A{ /*Definition des méthodes et des attributs*/ }
package packA; import packA.*; ...Est tout à fait redondant.
Pour une bonne utilisation d'un langage objet, il y a une démarche optimale à avoir
entre le coût que représente le fait de coder des fonctionnalités et le fait d'assimiler des fonctionnalités du modèle
objet.
Lorsqu'on conçoit une hiérarchie de classes pour une application particulière, soit la hiérarchie est indépendante, soit
elle se rattache à la hirérarchie des objets de Java (elle s'y rattache toujours de manière implicite puisque tout objet
implémente l'interface Object).
Il existe plusieurs moyens d'accéder aux codes sources de l'API java. Lors de l'installation du sdk, un dossier src peut
ou non apparaître. Si il apparaît, on peut l'explorer pour aller voir l'ensemble des classes de l'API.
Une autre manière d'accéder aux codes sources est d'utiliser la documentation en ligne de java. Dans Google, tapez "sun java LinkedList" et
le premier élement renvoyé par Google est une page HTML de documentation sur la classe LinkedList de l'API.
En explorant l'API java, il est parfois difficile de comprendre les distinctions très fines qui sont faites. Ainsi java distingue entre des
classes de flux sur fichier (java.io.FileOutputStream par exemple) et une classe Fichier (java.io.File). Ce type de distinction a des raisons
qui n'apparaissent pas forcément, rendent l'utilisation parfois opaque, et induit un coût en temps pour la recherche des fonctionalités voulues.
Compatibilité ascendante : au cours des différentes version, l'API java s'enrichit et parfois les concepteurs sont obligés de modifier les classes
fondamentales de l'API. Le modèle définit à la base est suffisamment large pour ne pas être souvent modifié. Néanmoins, des classes ont été modifiées
au cours du temps et certains des rajouts se sont fait de manière contrainte par rapport à l'existant. Pour ce qui est des modifications des classes au
cours du temps, on trouve que certaines méthodes sont annotées deprecated dans la documentation et le compilateur javac refuse la compilation
d'applications appelant l'utilisation de telles méthodes. Les modifications apportées à l'API font que les fonctionnalités de ces méhodes sont accessibles
par d'autres moyens.
On aborde ici les principaux packages utiles pour une première approche de java, le lecteur curieux et avisé pourra poursuivre lui même l'exploration.
java.Applet | Le package contient notamment une classe Applet dont on pourra faire hériter des classes |
java.awt | Ce package définit une série d'élements graphiques. awt pour Abstract Windows Toolkit |
java.io | io pour input/output : ce parckage permet de gérer des flux vers et depuis des fichiers. |
java.lang | Le package contient une série de classes/Interfaces fondamentales : cf Object, Thread, Runtime etc... java.lang contient des Wrappers pour les ensembles de types de base |
java.util | Contient notamment des objets collection de différents types (LinkdList, Map, et...) et des éléments pour la gestion temporelle (Date par exemple). |
javax.swing | Un package graphique, en quelque sorte, une seconde génération des objets graphiques après awt. |
Une applet est une application graphique pouvant être intégrée dans un site Web. Elle est stockée sur le server (compressée au foramt jar ou non) et s'éxecute sur le client. Il faut être assez modeste dans les fonctionnalités de l'application : un utilisateur avertit aura configuré la sandbox de sa machine qui définit les opérations autorisées pour une application java.
Les deux packages permettent de créer des interfaces graphiques aux applications (Fenetre, bouton, dessns etc...). awt est le package le plus anciens des deux, il contient des classes : Color, Frame, Panel (une surface), Component(une forme générale de zone graphique), Container (une interface définissant un objet contenant des objets graphiques)... Un cours est consacré à ces objets.
io pour "in and out". Ce package donne un ensemble de classes permettant de travailler sur des flux vers des fichiers, une classe d'interfaçage vers le système de fichier. Classes de flux etc... une interface : Serializable. Un objet qui implémente cette interface peut être sauvegardé sous forme d'un fichier binaire dans son état courant et récupérer ensuite. Voir le chapitre sur les flux vers les fichiers
Ce package est toujours actif. Il n'est pas besoin de faire un import de ce package. C'est pour cela qu'on peut manipuler
directement String par exemple.
Un package qui contient :
public class Memoire { public static void main(String[] args){ System.out.print("Mémoire totale : "); System.out.print(Runtime.getRuntime().totalMemory() / 1000000d); System.out.println("Mo."); System.out.print("Mémoire disponible : "); System.out.print(Runtime.getRuntime().freeMemory() / 1000000d); System.out.println("Mo."); System.out.print("Mémoire maximum utilisable : "); System.out.print(Runtime.getRuntime().maxMemory() / 1000000d); System.out.println("Mo."); } }
Ce package contient des collections qui seront explicitées au chapitre collections, les formats Date, Currency, Timer etc...
Il existe d'uatres package qui n'ont pas été évoqués ici : java.sql, java.text, javax.*, com.* etc... Certains s'expliciteront dans ce qui suit, mais le cours est loin d'aborder l'ensemble des packages pour des raisons évidentes, par ailleurs, certains packages évoluent au cours du temps.