Cour JAVA.doc

Ennoncés des exercices ..... ne sera pas redéfinie, le compilateur peut optimiser
les accès en limitant la liaison dynamique. ...... Ecrire une classe Matrice (en vous
inspirant de l'exercice 4), qui implémente les deux interfaces Alg et Treillis.

Part of the document


Programmation Orientée Objet
Langage JAVA

Jacques Gispert
Département d'Informatique
Faculté des Sciences de Marseille-Luminy
Université de la Méditerranée

Plan
Historique et principes
Historique du langage
Spécifications essentielles
Système java

Bases du langage
Programmation orientée objets
Classes et hiérarchie
Encapsulation
Liaison dynamique
Types primitifs
Objets, références et ramasse-miettes
Constructeurs
This et super
Protection des accès
Variable de classe
Le modifieur final
Classes abstraites
Méthodes natives
Tableaux
Les instructions
Affectation
Les expressions et la liste des opérateurs
Les conversions
Passage de paramètres
Les autres instructions
Les classes abstraites
Un aperçu de la généricité
Exceptions
Définition
Exemple : analyse syntaxique
Mécanisme
Exceptions java
Création d'exceptions
Récupération de plusieurs exceptions
Ordre de récupération
Hiérarchie prédéfinie
Les interfaces
Définition et héritage multiple
Type interface
Contenu
Exemple
Les paquetages
Découpage d'un programme
Utilité et nommage
Stockage sur disque
Exemple complet
Les Entrées/Sorties
Problèmes à résoudre
Hierarchie des classes
Indépendance de la plate-forme
ES tamponnées
Sources de données
Formattage des données
Fichiers directs
Classe StreamTokenizer
Lecture au clavier
Lecture formattée
Exemple
Java 1.1
Interfaçage : AWT
Fenêtrage et interfaçage
Exemple
Interfaçage : Swing
Présentation
Apparence
Fenêtre
Animation, classe Timer
Utilisation d'un Timer
Exemple
Fichier Animation.java
Fichier UrsaMajor.java
Les paquetages Swing
Le réseau
Utilisation indirecte : Applet
Adressage
Utilisation indirecte : images
classe MediaTracker
Usage direct : exemple
La machine virtuelle
Une colle
ClassLoader
Classe Class
Eléments de la classe
Fichier .class
Ecriture d'un ClassLoader Les Travaux dirigés
Ennoncés des exercices
Historique et principes

Historique
L'origine du langage se situe en 1991, alors que Mosaic et le World Wide
Web n'étaient que d'intéressants concepts.
JAVA a été conçu par James Gosling, chez SUN.

Le but principal était de développer une plate-forme à bas prix, avec un
logiciel indépendant du matériel.
Partant de C++, et de ses défauts, James Gosling a développé le langage
Oak, en supprimant les concepts dangereux : héritage multiple, conversion
automatique de types, pointeurs, gestion mémoire par le programmeur.
En 1994, le Web a été créé ; Oak a été renommé JAVA.
JAVA a été alors utilisé pour la programmation du Web ;
il a permis d'écrire WebRunner, un programme de navigation.
Une version alpha de JAVA a été diffusée sur le Web au début 1995.
Depuis le 23 janvier 1996, la version 1.0 est officiellement disponible.
Netscape 2.0 supporte JAVA.

Spécifications essentielles de JAVA
JAVA est un langage :
. généraliste, bien que souvent associé à Internet ;
. orienté objet ;
. indépendant de la plate-forme ;
. sûr ;
. gérant le parallélisme ;
. autorisant un développement rapide ;

Java a été défini pour un usage sur Internet, d'où de nombreuses propriétés
:
. environnement d'accès au réseau :
o toutes les primitives nécessaires pour la communication par
Internet sont prévues dans le langage ; mais on verra plus loin
qu'elles sont incluses sous une forme évolutive ;
o des fragments de code (Applets) peuvent transiter par le Web
pour exécution à distance.
. indépendance de la plate-forme
o on doit pouvoir écrire des programmes et les expédier à travers
le réseau pour les faire exécuter sur la machine cible, quelle
qu'elle soit ;
o l'implémentation des types de base est spécifiée par le langage
;
o d'où la définition d'un environnement graphique associé au
langage, et des procédures qui le manipulent, identiques sur
toute plate-forme ;
o les programmes Java sont compilés pour une machine virtuelle ;
il suffit d'implémenter cette machine virtuelle sur une machine
hôte pour pouvoir y exécuter un programme Java compilé sur
n'importe quelle autre machine
. sûreté
o C/C++ est très souple, donc très vulnérable ; JAVA est défensif
!
o quand on charge un programme à travers le réseau (Applet), on
doit se prémunir contre la malveillance (cheval de Troie) ;
toute applet est contrôlée avant d'être exécutée (accès aux
fichiers...) ;
o de plus, on souhaite que les programmes soient exempts de fautes
(au maximum) ; pour cela, le compilateur est plus contraignant
encore que celui de Pascal !
o JAVA ne suppose jamais que vous savez ce que vous faites ; il
s'assure que vous le savez !
o JAVA contrôle le déroulement du programme à l'exécution ; il
détecte ainsi de nombreuses erreurs sémantiques, non détectées
par d'autres langages.
o JAVA sépare les programmes locaux et les programmes venant du
réseau, empêchant de remplacer le code local par un moins sûr !
. Langage généraliste, syntaxe inspirée de celle de C/C++, mais...
o débarrassée de ses éléments redondants, complexes, dangereux ;
o plus simple, plus sûre, et plus facile d'emploi
o une seule façon de définir des données (classe, pas de struct) ;
o pas de conversions automatiques ;
o pas de pointeurs, et surtout pas d'arithmétique sur des
adresses... ;
o le langage est fortement typé
o contrôles de type, de débordement... ;
o gestion mémoire simplifiée : allocation, mais pas de libération,
donc pas d'accès à un bloc qui a été libéré...
o libération automatique par ramasse-miettes ;
o traitement des exceptions bien conçu, rendu obligatoire ;
JAVA (ou un langage ayant les mêmes spécifications) a de grandes chances de
devenir un langage très utilisé dans le développement d'applications
distribuées. Avec le Web, celles-ci seront demain le cas général.
API : Application Programming Interface Langage JAVA

Système java
[pic]
Le langage proprement dit est complété par :
. certaines primitives contenues dans des librairies (E/S en
particulier) ;
. la toolbox pour les événements, interfaces...
Java contient à la fois le langage et une toolbox abstraite, capable de
tourner sur toute machine.

Bases du langage


Programmation orientée objets
Pascal, C : programmation procédurale
Dans les années 60, analyse de ses défauts : les variables locales
disparaissent à la fin de la procédure
|on attache des procédures aux |
|données |
|au lieu d' |
|attacher des données aux |
|procédures |
On pensait procédure, et on attachait des variables aux procédures ; On
pense données, et on attache des traitements à ces données.
Les données sont essentielles, les procédures accessoires
Appellant et appelé ont même durée de vie ; symétrie totale
Avantage pour l'écriture de coroutines (entrées/sorties)
Langages
Le langage Simula 67 a été créé en 1967, dans le but d'écrire des
programmes de simulation (gestion d'un port par exemple). Le port offre des
ressources, et des acteurs (bateaux) doivent les partager. Bien que ce ne
soit pas un langage orienté objets à proprement parler, les données
décrivant les bateaux (services nécessaires, heure d'arrivée au port...)
sont associées aux actions que ceux-ci peuvent entreprendre. La notion
d'objet est sous-jacente. Les acteurs sont indépendants, sauf pour la
possession des ressources.
Le langage Smalltalk (1972) est le véritable ancêtre des langages orientés
objets. Il présente des interfaces graphiques (Xerox) menus, souris, qui
sont représentés par des classes.
Les langages de programmation classiques ont été étendus pour utiliser le
nouveau paradigme. Objective C, Object Pascal, Loops (Bobrow), ... en sont
des exemples. Mais les contraintes de compatibilité avec l'existant sont
trop fortes pour donner une description très claire des langages.

Classes
Données et procédures sont réunies dans une classe. Une classe est une
construction syntaxique. Elle représente un modèle sur lequel on pourra
construire autant d'objets semblables qu'on pourra le souhaiter.
Un objet est une instance d'une classe. Tous les objets d'une même classe
seront semblables, mais différents. Les différences entre eux proviendront
des données qui leurs sont associées.
procédures nommées Méthodes
|[pic] |Une méthode s'applique à un objet de sa classe (en |
| |première approximation) |
Hiérarchisation
|exemple : un point sur l'écran |[pic] |
|x et y : coordonnées du point | |
|toString() : méthode présentant | |
|l'objet sous forme de chaîne | |
|[pic] |ajout des informations de couleur : |
| |définition d'u