Vous êtes sur la page 1sur 9

Module 211

Programmation oriente objet

Chapitre 1 : Introduction au langage Java


Introduction
Premier exemple

Philippe Boulnois
philippe.boulnois@free.fr

Introduction
Java est un langage rcent (1995). Il a t cr par lentreprise Sun (http://java.sun.com/).
Java est constitu de 4 parties distinctes :

I) Un langage
Cest un langage objet.
Sa syntaxe est proche du C++, mais en plus simple.
Java possde les 4 caractristiques dun langage objet :
1) Lencapsulation :
Les donnes et les procdures relatives aux donnes sont runies dans une mme
entit : lobjet.
Une partie des donnes et des procdures reste inaccessible et invisible de lextrieur de
lobjet.
Une autre partie de ces donnes et de ces procdures (linterface) permet la
communication avec les autres objets.
2) Lhritage :
Toute classe est sous classe dune autre.
Une sous-classe peut utiliser les champs et les mthodes accessibles de sa super classe.
3) Le polymorphisme :
Un message identique envoy des objets de type diffrent donnera des rsultats
diffrents...

Exemple de polymorphisme de la langue franaise :


- <<cambrioleur, voles !>>
- <<pigeon, voles !>>
Ces deux ordres (messages) identiques donns deux entits (objets) de type diffrent provoquent deux
comportements diffrents.

4) Les liens dynamiques :


Il nest pas ncessaire de connatre au moment de la compilation le type exact de lobjet
auquel on envoie un message. Le lien entre le message et lobjet rcepteur se fait au
moment de lexcution.

file:///C|/IEM/gmB211/JavaBoulnois/S1/S1.htm (1 sur 6) [01/08/2003 15:11:21]

Java : Introduction

II) Une machine virtuelle


Devise de Sun : crire une fois, excuter partout
La machine virtuelle distingue nettement Java des autres langages1, qui sont soit compils
(par ex :C, C++, Fortran) soit interprts (par ex : Basic, Lisp).
Remarque : il existe aussi des compilateurs pour Basic ou Lisp.
Le langage Java est compil et interprt

La Machine Virtuelle joue le rle dun microprocesseur logiciel. Comme tout


microprocesseur, la Machine Virtuelle possde un langage de programmation : le byte code.
Le rle du compilateur Java est donc de traduire les fichiers source en byte code.
Le rle de la Machine Virtuelle est dinterprter le programme source qui a t compil en
byte code.
Cette faon de procder permet une grande portabilit. Il nest pas ncessaire dcrire un
compilateur natif (c. d. dans le langage du microprocesseur matriel : Sparc, PowerPC,
AMD ) Pour chaque type de machine sur laquelle on veut implmenter le langage, il suffit
dimplmenter la Machine Virtuelle.
La Machine Virtuelle existe sur de nombreuses plates-formes matrielles et logicielles :
Solaris (lUnix de Sun), Les distributions Linux, MacOSX, Wxx-NT, PalmOS

III) Une plate-forme


Java est aussi une plate-forme de dveloppement.
Sun propose un ensemble trs fourni de classes qui abordent tous les domaines actuels du
dveloppement : rseau, graphique, encryptage, scurisation de donnes etc.
volution de java.
En quelques annes, le langage Java a connu une extension considrable de sa plate-forme
de dveloppement (sans compter les amliorations importantes du langage lui-mme et de
ses outils : compilateurs, interprteur, dbogueur ) :
Java 1.0 : 212 classes rparties en 8 paquetages
Java 1.1 : 504 classes rparties en 23 paquetages
Java 1.2 : 1520 classes rparties en 59 paquetages
Java 1.3 : Corrections de bogues et MAJ
Lvolution de la version 1.2 a t si importante quon parle souvent de Java 2 partir de la
version 1.2.

Principaux paquetages de Java 2


java.applet

Fournit les classes ncessaires la ralisation dApplet

java.awt

Classes ncessaires pour la ralisation dinterface graphique, pour le fentrage et le


graphisme ainsi que les images.

java.awt.event

Gestion des vnements dclenchs par des composants AWT.

java.awt.font

Gestion des polices de caractres.

java.awt.image

Gestion des images

java.io

Gestion des flux (octets et caractres) dentres sorties

java.lang

Classes fondamentales du langage (System, Math, Numriques, Chaines, Thread,


Objet

java.net

Gestion du rseau des connexions.

java.rmi

Gestion dinvocation de mthodes sur une machine distante

java.security

Scurit

java.sql

Gestion des changes avec les bases de donnes

java.text

Gestion de la localisation, au niveau du texte, des dates etc

java.util

Trs nombreuses classes fournissant des services de types stockage de donnes


(pile, file, vecteur, liste, collection, table de hash, dictionnaire) mais aussi
calendrier, temporisateur

java.util.jar

Gestion des JAR (archives java compresses)

java.util.zip

Gestion de la compression

javax.swing

Remplace AWT ; gestion de linterface du graphisme, du fentrage de faon


indpendante du serveur de fentre de lOS hte.

javax.swing.event

Gestion des vnements gnrs par les composants Swing

javax.swing.table

Provides classes and interfaces for dealing with java.awt.swing.JTable.

javax.swing.text

Gestion des textes, sous classes pour interprts directement le format rtf ou le
format html

javax.swing.tree

Gestion du composant Tree, permet dafficher graphiquement une structure darbre


(rpertoire de fichiers par exemple)

IV) Des outils de dveloppement


Java est fourni avec de nombreux outils de dveloppement :
Compilateur, gnrateur de documentation, dsassembleur de byte code, dbogueur.

Les points clefs


Portabilit
Un programme Java, une fois compil, peut tre excut sur nimporte quel environnement
matriel pour lequel existe une machine virtuelle.
Cela permet aux dveloppeurs, comme aux utilisateurs finaux de diminuer leur dpendance
vis--vis dun systme dexploitation ou du matriel.
Une API centre rseau
LAPI (Application Programming Interface) Java apporte une valeur ajoute essentielle au
langage. Par sa richesse et sa robustesse, elle permet de diminuer de faon trs notable le
temps de dveloppement.
En particulier de nombreuses classes fournissent des objets de haut niveau pour grer tous
les aspects des rseaux (connexions, applications clients serveurs : Applets et Servlets).
Scurit
Consquence de lorientation rseau, Java a t conu ds le dpart pour scuriser
lexcution de code dorigine inconnue.
Dynamique et extensible
Une classe nest charge quau moment de son utilisation, ce qui diminue dautant le besoin
en bande passante sur le rseau.
Il faut envisager une application crite en Java comme un ensemble de composants logiciels
interconnects plutt que comme une application monolithique.
Internationalisation
Les possibilits de localisation ont fait partie du projet Java ds lorigine. Le choix
dUnicode en est un exemple, les possibilits offertes par la classe Text en est un autre.
Performances
Un des gros reproches fait Java est sa relative lenteur. Mais :
1) Java est plus rapide que les langages de script : Perl, PHP, byte code, Python etc.
2) C++ est plus lent quun programme crit en assembleur.

3) Avec les compilateurs JIT (Just In Time) les performances de Java samliorent et
approchent celles des langages compils natifs.
4) Enfin il est possible dinsrer des parties de code en C dans du Java aux passages pour
lesquels la vitesse est un facteur critique.
Rapidit dapprentissage et de dveloppement
Lallocation mmoire est prise en charge par le systme lui-mme, ce qui limine un grand
nombre de bogues dont on peut avoir l'exprience avec le langage C.
La suppression des pointeurs, lAPI trs fournie et bien structure, acclrent
lapprentissage de Java et permettent de produire un code plus robuste dans un temps de
dveloppement plus court. Sans oublier que ce code est portable tel quel sur tous les
systmes disposant de la MV (Machine Virtuelle).
Gratuit
Sun fournit gratuitement le SDK (System Development Kit) et lon trouve de nombreux
systmes de dveloppement gratuits sur Internet.
Vous pouvez donc dvelopper en Java sans dbourser un centime !
Diffrences entre Java et C ou C++
Pas de pr processeur.
Pas de compilation conditionnelle (inutile, car la portabilit est assure par ma MV).
Pas de Constantes, elles sont remplaces par des variables dclares static et final.
Pas de variable globale.
Systme des paquetages.
Les types primitifs sont indpendants de limplmentation, notamment ils ont une taille
dfinie quelque soit la plate forme.
Pas de pointeur ; allocation et rcupration mmoire automatique et transparente.
Pas de goto, mais un mcanisme sophistiqu de gestion dexception permettant la sortie du
contexte o se produit une erreur.
Dclaration de variable possible partout dans le code.
Possibilit de faire rfrence des mthodes avant quelles ne soient dfinies, de faon
transparente.
Pas de structure ou dunion, tout cela est remplac par le mcanisme de classe.
Pas de types numrs, pas de champs de bits, pas de pointeur de mthodes, pas de liste
darguments.
Questions :
1- Quelles sont les 4 caractristiques dun langage objet ?
2- Le langage Java est-il compil ou interprt ?

3- Que dsigne le terme de byte code ?


4- Quest ce qui rend le langage Java plus facilement portable que les autres langages ?
5- Pourquoi parle-t-on de Java 2 alors que la dernire version sur le site de Sun indique
1.4.1 ?
6- LAPI (la plateforme) contient elle 50, 300, 1000 classes ou davantage ?
7- En dehors dtre un langage, quelles sont les 3 autres parties qui composent Java ?
8- Quel est le reproche le plus frquent fait Java ?
9- Quelles rponses Java apporte-t-il cette critique ?
10- Y-a-t-il des constantes en Java ?
11- L'implmentation des entiers varie-t-elle d'une plateforme une autre ?
12- Java utilise-t-il des pointeurs ?

1 Le

Pascal UCSD a, dans les annes 80-90, utilis cette mme technique.

Un premier exemple
Nous voulons raliser un programme permettant de manipuler des objets de la gomtrie plane (nous nous
limiterons aux cercles). Nous voulons que ces objets soient capables de rpondre aux messages suivants :
- modifie la valeur de ton rayon x
- quelle est ta surface ?
Dfinition de la classe Cercle
Cette classe est enregistre dans un fichier Cercle.java.
class Cercle
{
private double rayon ;
public void setRayon (double r)
{
rayon = r ;
}
public double aire()
{
return rayon * rayon * PI ;
}
}
Une classe dtermine un nouveau type de donne, ici nous avons cr le type Cercle.
Cette classe est constitue dun champ : rayon de deux mthodes : setRayon() et aire().
Nous retrouvons ici ce que nous disions plus haut propos de lencapsulation : le type Cercle que vous venons de
crer contient la fois les donnes caractristiques de lobjet (rduites ici rayon) et les comportements que lon
peut attendre de lobjet Cercle : savoir les mthodes setRayon() et aire().
Cration dun objet de type Cercle
Une fois la classe construite nous pouvons produire (instancier) autant dobjets que ncessaire. Si on regarde la
classe comme un moule, linstanciation est analogue faire couler de la pte dans ce moule pour obtenir un objet.
Pour instancier une classe en Java on utilise linstruction new avec la syntaxe suivante :
Cercle c1 ; // dclaration dune variable c1 de type Cercle ;
c1 = new Cercle(); //cration dun objet de type Cercle
// laide de lexpression new Cercle() et stockage
//de la rfrence1 cet objet dans c

O placer ce code ?
Assurment dans le corps dune mthode : Java tant un langage objet le code ne peut tre crit que dans le corps
dune mthode.
Le point dentre dun programme Java
Nous allons construire une autre classe partir de laquelle nous pourrons appeler linstanciation dobjets de type
Cercle
Cette classe aura aussi une particularit de ne pas vraiment correspondre un objet du problme que nous
essayons de traiter (lide de dpart est de raliser un programme pouvant manipuler des objets gomtriques).

En fait cette classe est ncessaire pour fournir un point dentre du programme.
Le point dentre est reprsent par une mthode ayant la signature suivante :
public static void main(String[] args)

Cette mthode est une mthode classe (modificateur static), elle ne retourne rien (modificateur void), elle peut
recevoir des arguments de la ligne de commande (tableau de chanes de caractres args)
public class MonApp.java
{
public static void main(String[] args)
{
Cercle c1 = new Cercle();// cration dun objet rfrenc par c1
double s1 = var1.aire();// envoi dun message aire() lobjet c1
Cercle c2 = new Cercle();
c2.setRayon(6.0); //envoi dun message pour modifier le rayon de c2
double s2 = c2.aire();// on demande c2 de calculer sa surface
}
}

Remarque : le point (.) est loprateur denvoi de message un objet.

Questions :
1- En prenant exemple sur la classe Cercle, construisez une classe Rectangle.
2- Faites une liste (trs simplifie) des donnes et des comportements relatifs lutilisation dun compte bancaire
3- Faites une liste (trs simplifie) des donnes et des comportements relatifs lutilisation dun magntoscope
4- Faites une liste (trs simplifie) des donnes et des comportements relatifs lutilisation dune guitare
Remarque :
Pour les exercices 2,3,4 vos rponses sont sans doute diffrentes, peut tre plus compltes et plus pertinentes,
ce qui importe ici est de distinguer entre les donnes et les comportements relatifs un objet, donnes et
comportements qui deviendront champs et mthodes de la classe abstraction lobjet rel