Vous êtes sur la page 1sur 301

Du

Du C/C++ à Java T M Mise à jour du 11/02/2000 (version 1.1.1) Emmanuel PUYBARET http://www.eteks.com

C/C++

à

Java T M

Mise à jour du 11/02/2000 (version 1.1.1)

Emmanuel PUYBARET

http://www.eteks.com

Copyrights

Copyrights Tous les développements (texte, images et programmes) de ce manuel sont protégés par les droits

Tous les développements (texte, images et programmes) de ce manuel sont protégés par les droits d'auteur et ne doivent pas être reproduits par n'importe quel moyen et sur n'importe quel support que ce soit, publiés dans d'autres travaux ou traduits dans d'autres langues sans l'autorisation écrite d'eTeks.

Le manuel Du C/C++ à Java

implicite. Il pourrait notamment comporter des inexactitudes et des erreurs de frappes.

Ce manuel peut être modifié à tout moment en vue de corrections ou d'améliorations.

est fourni tel quel, sans aucune garantie d'aucune sorte, ni expresse ni

Le manuscrit correspondant au manuel a été déposé à la Société Des Gens de Lettre.

Marques déposées

Sun, Sun Microsystems, le logo Sun et Java sont des marques déposées ou des marques de services de Sun Microsystems, Inc, aux Etats Unis et autres pays. Copyright © 1992-1995 Sun Microsystems, Inc. Tous droits réservés.

eTeks est indépendant de Sun Microsystems, Inc.

eTeks est une marque déposée par Emmanuel PUYBARET.

Les autres marques citées dans ce manuel sont des marques déposées ou des marques commerciales détenues par leurs propriétaires respectifs.

vendredi 11 février 2000

Table des matières Du C/C++ à Java

Page: 1

Table des Matières

Copyrightsdes matières Du C/C++ à Java Page: 1 Table des Matières Avant propos Démarrer en Java

Avant proposDu C/C++ à Java Page: 1 Table des Matières Copyrights Démarrer en Java Récupérer le JDK

Démarrer en JavaJava Page: 1 Table des Matières Copyrights Avant propos Récupérer le JDK (Java Development Kit) Introduction

des Matières Copyrights Avant propos Démarrer en Java Récupérer le JDK (Java Development Kit) Introduction Où

Récupérer le JDK (Java Development Kit)des Matières Copyrights Avant propos Démarrer en Java Introduction Où trouver le JDK Installation Description de

IntroductionDémarrer en Java Récupérer le JDK (Java Development Kit) Où trouver le JDK Installation Description de

Où trouver le JDKJava Récupérer le JDK (Java Development Kit) Introduction Installation Description de l'environnement et des

InstallationJDK (Java Development Kit) Introduction Où trouver le JDK Description de l'environnement et des commandes Principe

Description de l'environnement et des commandesKit) Introduction Où trouver le JDK Installation Principe de fonctionnement Description des principales

Principe de fonctionnementDescription de l'environnement et des commandes Description des principales commandes javac java

Description des principales commandeset des commandes Principe de fonctionnement javac java appletviewer Votre première applet : le

javacde fonctionnement Description des principales commandes java appletviewer Votre première applet : le classique

javafonctionnement Description des principales commandes javac appletviewer Votre première applet : le classique

appletviewerDescription des principales commandes javac java Votre première applet : le classique "Hello world

Votre première applet : le classique "Hello world !"des principales commandes javac java appletviewer Applet HelloWorld Les notions de base Objets, classes et

Applet HelloWorld HelloWorld

Les notions de base: le classique "Hello world !" Applet HelloWorld Objets, classes et héritage Références Les mots-clés de

Objets, classes et héritageworld !" Applet HelloWorld Les notions de base Références Les mots-clés de Java Les mots-clés du

RéférencesHelloWorld Les notions de base Objets, classes et héritage Les mots-clés de Java Les mots-clés du

Les mots-clés de Javanotions de base Objets, classes et héritage Références Les mots-clés du C/C++ absent en Java Types

Les mots-clés du C/C++ absent en Javaclasses et héritage Références Les mots-clés de Java Types de base Structure d'un programme Les packages

Types de basemots-clés de Java Les mots-clés du C/C++ absent en Java Structure d'un programme Les packages import

Structure d'un programmede Java Les mots-clés du C/C++ absent en Java Types de base Les packages import Définir

Les packagesabsent en Java Types de base Structure d'un programme import Définir un package Création et utilisation

import

import

Définir un package

Définir un package

Création et utilisation des classesprogramme Les packages import Définir un package Déclaration des classes et des interfaces Identifiants Les

Déclaration des classes et des interfacesDéfinir un package Création et utilisation des classes Identifiants Les classes Les interfaces Déclaration des

Identifiantsdes classes Déclaration des classes et des interfaces Les classes Les interfaces Déclaration des variables

Les classesDéclaration des classes et des interfaces Identifiants Les interfaces Déclaration des variables Syntaxe

Les interfacesdes classes et des interfaces Identifiants Les classes Déclaration des variables Syntaxe Initialisations static

Déclaration des variableset des interfaces Identifiants Les classes Les interfaces Syntaxe Initialisations static Initialisations

SyntaxeLes classes Les interfaces Déclaration des variables Initialisations static Initialisations d'instance

Initialisations static static

Initialisations d'instanceDéclaration des variables Syntaxe Initialisations static Déclaration des méthodes Syntaxe Surcharge des méthodes

Déclaration des méthodesInitialisations static Initialisations d'instance Syntaxe Surcharge des méthodes Constructeur Création

SyntaxeInitialisations d'instance Déclaration des méthodes Surcharge des méthodes Constructeur Création d'objets

Surcharge des méthodesd'instance Déclaration des méthodes Syntaxe Constructeur Création d'objets : opérateur new

ConstructeurDéclaration des méthodes Syntaxe Surcharge des méthodes Création d'objets : opérateur new Outrepasser une

Création d'objets : opérateur new new

Outrepasser une méthodeConstructeur Création d'objets : opérateur new Application Banque Utilisation de classes abstact

Application Banque Banque

Utilisation de classes abstact abstact

Destruction des objetsune méthode Application Banque Utilisation de classes abstact Comment ça marche ? Application ListeChainee

Comment ça marche ?une méthode Application Banque Utilisation de classes abstact Destruction des objets Application ListeChainee

Application ListeChainee ListeChainee

vendredi 11 février 2000

Table des matières Du C/C++ à Java

Page: 2

Objets, tableaux et chaînes de caractères2000 Table des matières Du C/C++ à Java Page: 2 La classe Object La classe Class

La classe Object Object

La classe Class Class

Les tableauxchaînes de caractères La classe Object La classe Class Les chaînes de caractères La classe String

Les chaînes de caractèrescaractères La classe Object La classe Class Les tableaux La classe String La classe StringBuffer La

La classe String String

La classe StringBuffer StringBuffer

La classe System System

Les instructions et les opérateursLa classe String La classe StringBuffer La classe System Les blocs if while , do else

Les blocsLa classe System Les instructions et les opérateurs if while , do else , switch while

classe System Les instructions et les opérateurs Les blocs if while , do else , switch

classe System Les instructions et les opérateurs Les blocs if while , do else , switch

if

while, do

else, switch

while, for

Les expressionsLes blocs if while , do else , switch while , for Utilisation de this et

Utilisation de this et de super this et de super

Les opérateurs, for Les expressions Utilisation de this et de super Opérateurs arithmétiques L'opérateur instanceof

Opérateurs arithmétiquesUtilisation de this et de super Les opérateurs L'opérateur instanceof Opérateurs du C/C++ absent en

L'opérateur instanceof instanceof

Opérateurs du C/C++ absent en JavaOpérateurs arithmétiques L'opérateur instanceof Les conversions (ou casts) Conversions entre types de base

Les conversions (ou casts)instanceof Opérateurs du C/C++ absent en Java Conversions entre types de base avec gain de précision

Conversions entre types de base avec gain de précisiondu C/C++ absent en Java Les conversions (ou casts) Conversions entre types de base avec perte

Conversions entre types de base avec perte de précisionConversions entre types de base avec gain de précision Conversions de références d'une classe dans une

Conversions de références d'une classe dans une autreConversions entre types de base avec perte de précision Priorité des opérateurs Les exceptions throw ,

Priorité des opérateursConversions de références d'une classe dans une autre Les exceptions throw , try , catch ,

Les exceptionsd'une classe dans une autre Priorité des opérateurs throw , try , catch , Syntaxe  

throw, try , catch , , try, catch,

Syntaxe

Syntaxe

 
 
  Application EssaiException

Application EssaiException

Application InstantiationAvecNom

Application InstantiationAvecNom

Avantages des exceptions

Avantages des exceptions

La classe Throwable Throwable

Les exceptions RuntimeAvantages des exceptions La classe Throwable Les classes d'erreurs Les autres exceptions Les threads

Les classes d'erreursdes exceptions La classe Throwable Les exceptions Runtime Les autres exceptions Les threads Définition d'un

Les autres exceptionsThrowable Les exceptions Runtime Les classes d'erreurs Les threads Définition d'un thread Le partage du temps

Les threadsRuntime Les classes d'erreurs Les autres exceptions Définition d'un thread Le partage du temps entre

Définition d'un threadLes classes d'erreurs Les autres exceptions Les threads Le partage du temps entre threads La création

Le partage du temps entre threadsautres exceptions Les threads Définition d'un thread La création d'un thread Applet Chrono Les états

La création d'un threadd'un thread Le partage du temps entre threads Applet Chrono Les états d'un thread La synchronisation

Applet Chrono Chrono

Les états d'un threadentre threads La création d'un thread Applet Chrono La synchronisation des threads Utilisation de synchronized

La synchronisation des threadsd'un thread Applet Chrono Les états d'un thread Utilisation de synchronized Applet AfficheurDeCalcul

Utilisation de synchronized synchronized

La synchronisation des threads Utilisation de synchronized Applet AfficheurDeCalcul Synchronisation avec wait () et

Applet AfficheurDeCalcul

Synchronisation avec wait () et notify () wait () et notify ()

La classe Thread Thread

Les classes internesavec wait () et notify () La classe Thread Les classes internes Syntaxe Utilisation Les classes

Les classes internesavec wait () et notify () La classe Thread Les classes internes Syntaxe Utilisation Les classes

Syntaxeavec wait () et notify () La classe Thread Les classes internes Les classes internes Utilisation

Utilisationavec wait () et notify () La classe Thread Les classes internes Les classes internes Syntaxe

Les classes anonymesavec wait () et notify () La classe Thread Les classes internes Les classes internes Syntaxe

vendredi 11 février 2000

Table des matières Du C/C++ à Java

Page: 3

Autres nouveautés Java 1.12000 Table des matières Du C/C++ à Java Page: 3 Initialisations d'instance Initialisation de tableaux

Initialisations d'instanceDu C/C++ à Java Page: 3 Autres nouveautés Java 1.1 Initialisation de tableaux Utilisation du mot-clé

Initialisation de tableaux3 Autres nouveautés Java 1.1 Initialisations d'instance Utilisation du mot-clé class Variables locales et

Utilisation du mot-clé class class

Variables locales et paramètres final final

Conventions d'éciture et portagedu mot-clé class Variables locales et paramètres final Conventions d'écriture Portage de programmes écrits en

Conventions d'écritureet paramètres final Conventions d'éciture et portage Portage de programmes écrits en C/C++ Conception des

Portage de programmes écrits en C/C++d'éciture et portage Conventions d'écriture Conception des classes Remplacement des définitions de type

Conception des classesd'écriture Portage de programmes écrits en C/C++ Remplacement des définitions de type typedef Remplacement

Remplacement des définitions de type typedef typedef

Remplacement des instructions de précompilation #define #define

Remplacement des instructions de précompilation #ifdef , #else , #endif #ifdef, #else, #endif

Remplacement des énumérations enum enum

Remplacement des unions union union

des énumérations enum Remplacement des unions union Application TestExpression Passage des valeurs par adresse

Application TestExpression

Passage des valeurs par adresseRemplacement des unions union Application TestExpression Allocation dynamique Utilisation des chaînes de caractères

Allocation dynamiqueApplication TestExpression Passage des valeurs par adresse Utilisation des chaînes de caractères Arithmétique des

Utilisation des chaînes de caractèresPassage des valeurs par adresse Allocation dynamique Arithmétique des pointeurs Transformation des pointeurs sur

Arithmétique des pointeursAllocation dynamique Utilisation des chaînes de caractères Transformation des pointeurs sur fonctions Remplacement de

Transformation des pointeurs sur fonctionsdes chaînes de caractères Arithmétique des pointeurs Remplacement de l'héritage multiple Autres problèmes

Remplacement de l'héritage multipledes pointeurs Transformation des pointeurs sur fonctions Autres problèmes propres au C++ La bibliothèque Java 1.0

Autres problèmes propres au C++sur fonctions Remplacement de l'héritage multiple La bibliothèque Java 1.0 Les packages de la bibliothèque

La bibliothèque Java 1.0de l'héritage multiple Autres problèmes propres au C++ Les packages de la bibliothèque Java 1.0 Classes

Les packages de la bibliothèque Java 1.0Autres problèmes propres au C++ La bibliothèque Java 1.0 Classes de base : le package java.lang

Classes de base : le package java.lang java.lang

Gestion de données et utilitaires : le package java.util java.util

Les entrées-sorties : le package java.io java.io

Les accès réseau : le package java.net java.net

Gestion des applets : le package java.applet java.applet

Interface utilisateur : le package java.awt java.awt

Manipulation d'images : le package java.awt.image java.awt.image

Liaison avec l'interface utilisateur du système : le package java.awt.peer java.awt.peer

Hiérarchie des classes Java 1.0utilisateur du système : le package java.awt.peer Les classes de bases Gestion des objets La classe

Les classes de bases: le package java.awt.peer Hiérarchie des classes Java 1.0 Gestion des objets La classe java.lang.Object

Gestion des objetsHiérarchie des classes Java 1.0 Les classes de bases La classe java.lang.Object L'interface

La classe java.lang.Object java.lang.Object

L'interface java.lang.Cloneable java.lang.Cloneable

La classe java.lang.Class java.lang.Class

La classe java.lang.ClassLoader java.lang.ClassLoader

La classe java.lang.Compiler java.lang.Compiler

La classe java.lang.Throwable java.lang.Throwable

Les classes d'emballageLa classe java.lang.Compiler La classe java.lang.Throwable La classe java.lang.Boolean La classe java.lang.Character

La classe java.lang.Boolean java.lang.Boolean

La classe java.lang.Character java.lang.Character

La classe java.lang.Number java.lang.Number

La classe java.lang.Integer java.lang.Integer

La classe java.lang.Long java.lang.Long

La classe java.lang.Float java.lang.Float

La classe java.lang.Double java.lang.Double

La classe java.lang.String java.lang.String

La classe java.lang.StringBuffer java.lang.StringBuffer

Calcul mathématique : la classe java.lang.Math java.lang.Math

Gestion des threadsLa classe java.lang.String La classe java.lang.StringBuffer Calcul mathématique : la classe java.lang.Math

vendredi 11 février 2000

Table des matières Du C/C++ à Java

Page: 4

L'interface java.lang.Runnable java.lang.Runnable

La classe java.lang.Thread java.lang.Thread

La classe java.lang.ThreadGroup java.lang.ThreadGroup

Gestion du systèmeLa classe java.lang.Thread La classe java.lang.ThreadGroup La classe java.lang.System La classe java.lang.Runtime La

La classe java.lang.System java.lang.System

La classe java.lang.Runtime java.lang.Runtime

La classe java.lang.Process java.lang.Process

La classe java.lang.SecurityManager java.lang.SecurityManager

Les outils Javajava.lang.Process La classe java.lang.SecurityManager Gestion de collections de données L'interface

Gestion de collections de donnéesLa classe java.lang.SecurityManager Les outils Java L'interface java.util.Enumeration Application

L'interface java.util.Enumeration java.util.Enumeration

Application EssaiEnumeration EssaiEnumeration

La classe java.util.Vector java.util.Vector

La classe java.util.Stack java.util.Stack

La classe java.util.Dictionary java.util.Dictionary

La classe java.util.Hashtable java.util.Hashtable

La classe java.util.Properties java.util.Properties

La classe java.util.BitSet java.util.BitSet

Gestion des datesLa classe java.util.Properties La classe java.util.BitSet La classe java.util.Date Génération de nombres

La classe java.util.Date java.util.Date

Génération de nombres aléatoiresjava.util.BitSet Gestion des dates La classe java.util.Date La classe java.util.Random Autres classes d'outils La

La classe java.util.Random java.util.Random

Autres classes d'outilsde nombres aléatoires La classe java.util.Random La classe java.util.StringTokenizer L'interface

La classe java.util.StringTokenizer java.util.StringTokenizer

L'interface java.util.Observer java.util.Observer

La classe java.util.Observable java.util.Observable

Applet ObservateurCalcul ObservateurCalcul

La gestion des fichiers et des flux de donnéesLa classe java.util.Observable Applet ObservateurCalcul Gestion des entrées-sorties Mode d'accès aux données

Gestion des entrées-sortiesLa gestion des fichiers et des flux de données Mode d'accès aux données Gestion de l'accès

Mode d'accès aux donnéeset des flux de données Gestion des entrées-sorties Gestion de l'accès aux données avec les exceptions

Gestion de l'accès aux données avec les exceptionsGestion des entrées-sorties Mode d'accès aux données Manipulation des fichiers L'interface

Manipulation des fichiersGestion de l'accès aux données avec les exceptions L'interface java.io.FilenameFilter La classe

L'interface java.io.FilenameFilter java.io.FilenameFilter

La classe java.io.File java.io.File

La classe java.io.FileDescriptor java.io.FileDescriptor

Gestion des flux de donnéesLa classe java.io.File La classe java.io.FileDescriptor Accès à un flux de données en lecture Application

Accès à un flux de données en lectureclasse java.io.FileDescriptor Gestion des flux de données Application LectureFichier Application NumerotationLigne

Application LectureFichier LectureFichier

Application NumerotationLigne NumerotationLigne

La classe java.io.InputStream java.io.InputStream

La classe java.io.FileInputStream java.io.FileInputStream

La classe java.io.PipedInputStream java.io.PipedInputStream

La classe java.io.ByteArrayInputStream java.io.ByteArrayInputStream

La classe java.io.StringBufferInputStream java.io.StringBufferInputStream

La classe java.io.SequenceInputStream java.io.SequenceInputStream

La classe java.io.FilterInputStream java.io.FilterInputStream

La classe java.io.BufferedInputStream java.io.BufferedInputStream

L'interface java.io.DataInput java.io.DataInput

La classe java.io.DataInputStream java.io.DataInputStream

La classe java.io.LineNumberInputStream java.io.LineNumberInputStream

La classe java.io.PushBackInputStream java.io.PushBackInputStream

La classe java.io.StreamTokenizer java.io.StreamTokenizer

Accès à un flux de données en écritureLa classe java.io.StreamTokenizer Application ConcatenationFichiers La classe

Application ConcatenationFichiers ConcatenationFichiers

La classe java.io.OutputStream java.io.OutputStream

vendredi 11 février 2000

Table des matières Du C/C++ à Java

Page: 5

La classe java.io.FileOutputStream java.io.FileOutputStream

La classe java.io.PipedOutputStream java.io.PipedOutputStream

La classe java.io.ByteArrayOutputStream java.io.ByteArrayOutputStream

La classe java.io.FilterOutputStream java.io.FilterOutputStream

La classe java.io.BufferedOutputStream java.io.BufferedOutputStream

L'interface java.io.DataOutput java.io.DataOutput

La classe java.io.DataOutputStream java.io.DataOutputStream

La classe java.io.PrintStream java.io.PrintStream

Gestion de l'accès aléatoire aux fichiersjava.io.DataOutputStream La classe java.io.PrintStream La classe java.io.RandomAccessFile Les accès au réseau

La classe java.io.RandomAccessFile java.io.RandomAccessFile

Les accès au réseaualéatoire aux fichiers La classe java.io.RandomAccessFile Accès via une URL La classe java.net.URL Application

Accès via une URLLa classe java.io.RandomAccessFile Les accès au réseau La classe java.net.URL Application TestProtocole La classe

La classe java.net.URL java.net.URL

Application TestProtocole TestProtocole

La classe java.net.URLConnection java.net.URLConnection

Applet HelloFromNet HelloFromNet

La classe java.net.URLEncoder java.net.URLEncoder

L'interface java.net.URLStreamHandlerFactory java.net.URLStreamHandlerFactory

La classe java.net.URLStreamHandler java.net.URLStreamHandler

L'interface java.net.ContentHandlerFactory java.net.ContentHandlerFactory

La classe java.net.ContentHandler java.net.ContentHandler

L'architecture client-serveurLa classe java.net.ContentHandler Principe Exemples d'utilisation Protocoles Accès via

Principejava.net.ContentHandler L'architecture client-serveur Exemples d'utilisation Protocoles Accès via les sockets

Exemples d'utilisationL'architecture client-serveur Principe Protocoles Accès via les sockets La classe

Protocolesclient-serveur Principe Exemples d'utilisation Accès via les sockets La classe java.net.InetAddress La

Accès via les socketsPrincipe Exemples d'utilisation Protocoles La classe java.net.InetAddress La classe java.net.Socket

La classe java.net.InetAddress java.net.InetAddress

La classe java.net.Socket java.net.Socket

La classe java.net.ServerSocket java.net.ServerSocket

Le client serveur d'échoLa classe java.net.Socket La classe java.net.ServerSocket Application EchoServer Applet EchoClient Le paper board

Application EchoServer EchoServer

Applet EchoClient EchoClient

Le paper board Internetd'écho Application EchoServer Applet EchoClient Application PaperBoardServer Applet PaperBoard Client

Application PaperBoardServer

Application PaperBoardServer

Applet PaperBoard Client

Applet PaperBoard Client

La classe java.net.SocketImpl java.net.SocketImpl

L'interface java.net.SocketImplFactory java.net.SocketImplFactory

Accès via les datagrammesL'interface java.net.SocketImplFactory La classe java.net.DatagramPacket La classe

La classe java.net.DatagramPacket java.net.DatagramPacket

La classe java.net.DatagramSocket java.net.DatagramSocket

Les applications et les appletsjava.net.DatagramPacket La classe java.net.DatagramSocket Les applications Java Les applets Caractéristiques La

Les applications Javajava.net.DatagramSocket Les applications et les applets Les applets Caractéristiques La classe java.applet.Applet

Les appletsLes applications et les applets Les applications Java Caractéristiques La classe java.applet.Applet

Caractéristiqueset les applets Les applications Java Les applets La classe java.applet.Applet L'intégration des applets

La classe java.applet.Applet java.applet.Applet

L'intégration des applets dans les navigateursLes applets Caractéristiques La classe java.applet.Applet L'interface java.awt.AppletContext L'interface

L'interface java.awt.AppletContext java.awt.AppletContext

L'interface java.applet.AppletStub java.applet.AppletStub

Applet PlayApplet PlayApplet

L'interface java.applet.AudioClip java.applet.AudioClip

Applet Piano Piano

Transformer une applet en applicationApplet PlayApplet L'interface java.applet.AudioClip Applet Piano Les composants de l'interface utilisateur

Les composants de l'interface utilisateurApplet PlayApplet L'interface java.applet.AudioClip Applet Piano Transformer une applet en application

vendredi 11 février 2000

Table des matières Du C/C++ à Java

Page: 6

Les composants Java2000 Table des matières Du C/C++ à Java Page: 6 La classe java.awt.Component Les composants prédéfinis

La classe java.awt.Component java.awt.Component

Les composants prédéfinisPage: 6 Les composants Java La classe java.awt.Component La classe java.awt.Button La classe java.awt.Checkbox La

La classe java.awt.Button java.awt.Button

La classe java.awt.Checkbox java.awt.Checkbox

La classe java.awt.CheckboxGroup java.awt.CheckboxGroup

La classe java.awt.Choice java.awt.Choice

La classe java.awt.List java.awt.List

La classe java.awt.Choice La classe java.awt.List Applet Unicode La classe java.awt.Label La classe

Applet Unicode

La classe java.awt.Label java.awt.Label

La classe java.awt.TextComponent java.awt.TextComponent

La classe java.awt.TextField java.awt.TextField

Applet CalculetteSimple CalculetteSimple

La classe java.awt.TextArea java.awt.TextArea

La classe java.awt.Scrollbar java.awt.Scrollbar

Comment ça marche ?La classe java.awt.TextArea La classe java.awt.Scrollbar Le peer d'un composant La classe java.awt.Toolkit Les

Le peer d'un composantLa classe java.awt.Scrollbar Comment ça marche ? La classe java.awt.Toolkit Les containers et la disposition

La classe java.awt.Toolkit java.awt.Toolkit

Les containers et la disposition des composants? Le peer d'un composant La classe java.awt.Toolkit Les containers L'architecture container/composant Applet

Les containersLes containers et la disposition des composants L'architecture container/composant Applet

L'architecture container/composantcontainers et la disposition des composants Les containers Applet TraitementTexte La classe java.awt.Container La

Applet TraitementTexte

container/composant Applet TraitementTexte La classe java.awt.Container La classe java.awt.Panel La

La classe java.awt.Container java.awt.Container

La classe java.awt.Panel java.awt.Panel

La classe java.awt.Window java.awt.Window

La classe java.awt.Frame java.awt.Frame

La classe java.awt.Window La classe java.awt.Frame Transformer une applet en application isolée La classe

Transformer une applet en application isolée

La classe java.awt.Dialog java.awt.Dialog

une applet en application isolée La classe java.awt.Dialog Applet MessageBoxApplet La classe java.awt.FileDialog La

Applet MessageBoxApplet

La classe java.awt.FileDialog java.awt.FileDialog

La disposition des composants : les layoutsApplet MessageBoxApplet La classe java.awt.FileDialog L'interface java.awt.LayoutManager La classe

L'interface java.awt.LayoutManager java.awt.LayoutManager

La classe java.awt.FlowLayout java.awt.FlowLayout

La classe java.awt.BorderLayout java.awt.BorderLayout

classe java.awt.FlowLayout La classe java.awt.BorderLayout Applet BorderBuilder La classe java.awt.GridLayout La

Applet BorderBuilder

La classe java.awt.GridLayout java.awt.GridLayout

La classe java.awt.GridBagLayout java.awt.GridBagLayout

La classe java.awt.GridBagConstraints java.awt.GridBagConstraints

La classe java.awt.CardLayout java.awt.CardLayout

Les menusjava.awt.GridBagConstraints La classe java.awt.CardLayout Applet ShowMenu L'interface java.awt.MenuContainer La

Applet ShowMenu ShowMenu

L'interface java.awt.MenuContainer java.awt.MenuContainer

La classe java.awt.MenuComponent java.awt.MenuComponent

La classe java.awt.MenuBar java.awt.MenuBar

La classe java.awt.MenuItem java.awt.MenuItem

La classe java.awt.Menu java.awt.Menu

La classe java.awt.CheckboxMenuItem java.awt.CheckboxMenuItem

La gestion de l'interface utilisateurclasse java.awt.Menu La classe java.awt.CheckboxMenuItem La gestion événementielle Les événements Applet

La gestion événementielleLa gestion de l'interface utilisateur Les événements Applet MiseAJourHorloge La classe

Les événementsde l'interface utilisateur La gestion événementielle Applet MiseAJourHorloge La classe java.awt.Event La classe

utilisateur La gestion événementielle Les événements Applet MiseAJourHorloge La classe java.awt.Event La classe

Applet MiseAJourHorloge

La classe java.awt.Event java.awt.Event

La classe Graphics : tout pour dessiner Graphics : tout pour dessiner

La classe java.awt.Graphics java.awt.Graphics

Applet DrawIt DrawIt

vendredi 11 février 2000

Table des matières Du C/C++ à Java

Page: 7

Les polices de caractères2000 Table des matières Du C/C++ à Java Page: 7 La classe java.awt.Font La classe java.awt.FontMetrics

La classe java.awt.Font java.awt.Font

La classe java.awt.FontMetrics java.awt.FontMetrics

La classe java.awt.Font La classe java.awt.FontMetrics La couleur Applet ListePolices La classe java.awt.Color

La couleurLa classe java.awt.Font La classe java.awt.FontMetrics Applet ListePolices La classe java.awt.Color Applet

Applet ListePolices

La classe java.awt.Color java.awt.Color

Applet Nuancier Nuancier

Les classes manipulant des dimensionsListePolices La classe java.awt.Color Applet Nuancier La classe java.awt.Dimension La classe java.awt.Insets La

La classe java.awt.Dimension java.awt.Dimension

La classe java.awt.Insets java.awt.Insets

La classe java.awt.Point java.awt.Point

La classe java.awt.Polygon java.awt.Polygon

La classe java.awt.Rectangle java.awt.Rectangle

La création de nouveaux composantsLa classe java.awt.Polygon La classe java.awt.Rectangle La classe java.awt.Canvas Les images Applet

La classe java.awt.Canvas java.awt.Canvas

création de nouveaux composants La classe java.awt.Canvas Les images Applet BoutonsNavigation La génération

Les imagescréation de nouveaux composants La classe java.awt.Canvas Applet BoutonsNavigation La génération d'images

Applet BoutonsNavigation

La génération d'imagesclasse java.awt.Canvas Les images Applet BoutonsNavigation Applet MultiImages La classe java.awt.Image Le chargement

Applet MultiImages MultiImages

La classe java.awt.Image java.awt.Image

Le chargement des imagesd'images Applet MultiImages La classe java.awt.Image Applet ImageSimple La classe java.awt.MediaTracker

Applet ImageSimple ImageSimple

La classe java.awt.MediaTracker java.awt.MediaTracker

L'interface java.awt.image.ImageObserver java.awt.image.ImageObserver

L'interface java.awt.image.ImageObserver Applet ChargementImage La création d'images La classe

Applet ChargementImage

La création d'imagesjava.awt.image.ImageObserver Applet ChargementImage La classe java.awt.image.MemoryImageSource Applet

La classe java.awt.image.MemoryImageSource java.awt.image.MemoryImageSource

d'images La classe java.awt.image.MemoryImageSource Applet ImageTableau La classe java.awt.image.ColorModel La

Applet ImageTableau

La classe java.awt.image.ColorModel java.awt.image.ColorModel

La classe java.awt.image.DirectColorModel java.awt.image.DirectColorModel

La classe java.awt.image.IndexColorModel java.awt.image.IndexColorModel

La classe java.awt.image.IndexColorModel Applet ImageNoirEtBlanc La classe

Applet ImageNoirEtBlanc

La classe java.awt.image.PixelGrabber java.awt.image.PixelGrabber

Transformer des images avec un filtreImageNoirEtBlanc La classe java.awt.image.PixelGrabber La classe java.awt.image.FilteredImageSource La classe

La classe java.awt.image.FilteredImageSource java.awt.image.FilteredImageSource

La classe java.awt.image.ImageFilter java.awt.image.ImageFilter

La classe java.awt.image.CropImageFilter java.awt.image.CropImageFilter

La classe java.awt.image.RGBImageFilter java.awt.image.RGBImageFilter

La classe java.awt.image.RGBImageFilter Applet NegatifImage Comment ça marche ? Applet Compteur

Applet NegatifImage

Comment ça marche ?classe java.awt.image.RGBImageFilter Applet NegatifImage Applet Compteur L'interface

Applet Compteur Compteur

L'interface java.awt.image.ImageProducer java.awt.image.ImageProducer

L'interface java.awt.image.ImageConsumer java.awt.image.ImageConsumer

Gestion d'animationsL'interface java.awt.image.ImageConsumer Enchaînement d'images téléchargées Applet

Enchaînement d'images téléchargéesjava.awt.image.ImageConsumer Gestion d'animations Applet AnimationFleche Utilisation du double buffering

Applet AnimationFleche

d'images téléchargées Applet AnimationFleche Utilisation du double buffering Applet ScrollText Horloge

Utilisation du double bufferingd'images téléchargées Applet AnimationFleche Applet ScrollText Horloge avec image de fond Applet

Applet ScrollText

Utilisation du double buffering Applet ScrollText Horloge avec image de fond Applet Horloge Plus loin avec

Horloge avec image de fondUtilisation du double buffering Applet ScrollText Applet Horloge Plus loin avec Java Les évolutions du

Applet Horloge

ScrollText Horloge avec image de fond Applet Horloge Plus loin avec Java Les évolutions du langage

Plus loin avec JavaApplet ScrollText Horloge avec image de fond Applet Horloge Les évolutions du langage Java 1.1 Java

Les évolutions du langagebuffering Applet ScrollText Horloge avec image de fond Applet Horloge Plus loin avec Java Java 1.1

Java 1.1ScrollText Horloge avec image de fond Applet Horloge Plus loin avec Java Les évolutions du langage

Java 2ScrollText Horloge avec image de fond Applet Horloge Plus loin avec Java Les évolutions du langage

ConclusionScrollText Horloge avec image de fond Applet Horloge Plus loin avec Java Les évolutions du langage

vendredi 11 février 2000

Table des matières Du C/C++ à Java

Page: 8

Principales applets Java de ce manuel (les plus intéressantes sont en gras ) gras)

Compteur de tempsJava de ce manuel (les plus intéressantes sont en gras ) HelloWorld Liste des caractères accentués

HelloWorld(les plus intéressantes sont en gras ) Compteur de temps Liste des caractères accentués Unicode Compteurs

Liste des caractères accentués Unicodeintéressantes sont en gras ) Compteur de temps HelloWorld Compteurs multiples Chronomètre Afficheur synchronisé de

Compteurs multiplesde temps HelloWorld Liste des caractères accentués Unicode Chronomètre Afficheur synchronisé de calculs Observateur

ChronomètreListe des caractères accentués Unicode Compteurs multiples Afficheur synchronisé de calculs Observateur de calculs

Afficheur synchronisé de calculsaccentués Unicode Compteurs multiples Chronomètre Observateur de calculs Lecture d'un fichier sur Internet

Observateur de calculsmultiples Chronomètre Afficheur synchronisé de calculs Lecture d'un fichier sur Internet Paper board Internet

Lecture d'un fichier sur InternetAfficheur synchronisé de calculs Observateur de calculs Paper board Internet partagé Contrôleur d'applet Son

Paper board Internet partagéObservateur de calculs Lecture d'un fichier sur Internet Contrôleur d'applet Son d'un piano Afficheur de

Contrôleur d'appletd'un fichier sur Internet Paper board Internet partagé Son d'un piano Afficheur de composants Java Opération

Son d'un pianoPaper board Internet partagé Contrôleur d'applet Afficheur de composants Java Opération simple entre deux

Afficheur de composants Javapartagé Contrôleur d'applet Son d'un piano Opération simple entre deux nombres Descripteur du

Opération simple entre deux nombresd'applet Son d'un piano Afficheur de composants Java Descripteur du comportement d'une applet

Descripteur du comportement d'une applet Couper/Copier/Coller/Effacer dans un traitement de textede composants Java Opération simple entre deux nombres Boite de message Utilisation de la classe BorderLayout

Boite de messageCouper/Copier/Coller/Effacer dans un traitement de texte Utilisation de la classe BorderLayout Générateur

Utilisation de la classe BorderLayout BorderLayout

Générateur d'interface GridBagBuilderBoite de message Utilisation de la classe BorderLayout Test de menus Mini-éditeur graphique Liste des polices

Test de menusBorderLayout Générateur d'interface GridBagBuilder Mini-éditeur graphique Liste des polices de caractères

Mini-éditeur graphiqueGénérateur d'interface GridBagBuilder Test de menus Liste des polices de caractères disponibles Nuancier Barre

Liste des polices de caractères disponiblesGridBagBuilder Test de menus Mini-éditeur graphique Nuancier Barre de navigation avec boutons images Filtrage en

Nuanciergraphique Liste des polices de caractères disponibles Barre de navigation avec boutons images Filtrage en négatif

Barre de navigation avec boutons imagesListe des polices de caractères disponibles Nuancier Filtrage en négatif Compteur Image animée Défilement de

Filtrage en négatifdisponibles Nuancier Barre de navigation avec boutons images Compteur Image animée Défilement de texte Horloge des

CompteurBarre de navigation avec boutons images Filtrage en négatif Image animée Défilement de texte Horloge des

Image animéenavigation avec boutons images Filtrage en négatif Compteur Défilement de texte Horloge des étoiles Les autres

Défilement de texteboutons images Filtrage en négatif Compteur Image animée Horloge des étoiles Les autres applets accessibles sur

Horloge des étoilesen négatif Compteur Image animée Défilement de texte Les autres applets accessibles sur le site

Les autres applets accessibles sur le site http://www.eteks.comImage animée Défilement de texte Horloge des étoiles Interpréteur de fonctions Démineur Java Historique du

Interpréteur de fonctionsHorloge des étoiles Les autres applets accessibles sur le site http://www.eteks.com Démineur Java Historique du manuel

Démineur Javaétoiles Les autres applets accessibles sur le site http://www.eteks.com Interpréteur de fonctions Historique du manuel

Historique du manueldes étoiles Les autres applets accessibles sur le site http://www.eteks.com Interpréteur de fonctions Démineur Java

vendredi 11 février 2000

Du C/C++ a Java : Avant propos

Page: 1

11 février 2000 Du C/C++ a Java : Avant propos Page: 1 Avant propos Du C/C++

Avant propos

2000 Du C/C++ a Java : Avant propos Page: 1 Avant propos Du C/C++ à Java

Du C/C++ à Java

avec les langages C et C++ sont exposées point par point, en proposant si nécessaire des solutions concrètes aux concepts du C/C++ qui sont traités différemment en Java

(pointeurs, traitement d'erreur,

ensemble classe par classe (classes de base, d'outils, d'entrées- sorties, d'accès réseau et de

gestion de l'interface graphique AWT).

décrit la version 2 du langage Java. Les similitudes et les différences

).

La bibliothèque Java de la version 1.0 est décrite dans son

Du C/C++ à Java

C++, mais aussi aux personnes ayant pratiqué d'autres langages structurés ou orientés objet

(PASCAL, SmallTalk, Visual Basic,

éviter en Java sont mises en valeur pour les retrouver facilement et permettre une lecture

s'adresse tout d'abord aux développeurs connaissant les langages C ou

).

Les remarques sur le C/C++ et sur les pièges à

rapide.

Du C/C++ à Java

peut être utilisé comme cours de programmation des applets et des

applications Java, et comme manuel de référence rapide du langage et de la bibliothèque Java. De nombreux exemples simples et originaux vous guident pas à pas du classique HelloWorld jusqu'à la programmation d'applets évoluées que vous pouvez tester "en direct" dans le site http://www.eteks.com.

Niveau : Initiés/Expérimentés

Des développements futurs traiteront plus en détail des ajouts effectués dans la bibliothèque Java 1.1 et Java 2.

vendredi 11 février 2000

Du C/C++ a Java : Avant propos

Page: 2

Comment utiliser ce manuel ? Suivant le but que vous recherchez et votre méthode d'apprentissage personnelle, vous pouvez aborder ce manuel de différentes manières :

Si vous voulez apprendre Java par l'exemple :vous pouvez aborder ce manuel de différentes manières : Vous pouvez lire le premier chapitre pour

Vous pouvez lire le premier chapitre pour connaître les principes généraux du langage, puis explorer directement les différents exemples d'applets fournies sur le site. Quand vous commencerez à cerner la structure d'un programme Java, vous pourrez lire le chapitre sur les applets et piocher dans les cinq premiers chapitres pour compléter vos connaissances sur le noyau de langage.

Si vous voulez apprendre Java sans affronter dans un premier temps les points les plus difficiles :pour compléter vos connaissances sur le noyau de langage. Lisez rapidement les cinq premiers chapitres présentant

Lisez rapidement les cinq premiers chapitres présentant le noyau du langage, puis passez directement au chapitre sur les applets et suivants pour réaliser vos premières applets. Quand vous serez plus à l'aise avec Java, vous pourrez alors revenir sur les chapitres traitant des exceptions et des threads.

Vous voulez faire une revue rapide des différences entre Java et le C/C++ :sur les chapitres traitant des exceptions et des threads. Lisez surtout les neuf premiers chapitres sur

Lisez surtout les neuf premiers chapitres sur le noyau du langage : comme indiqué ci-après, ces chapitres comportent de nombreuses remarques résumant ces différences. Pour terminer, le chapitre abordant le portage de programmes C/C++ en Java vous donnera un complément d'information.

Vous cherchez une référence des classes de Java 1.0 :C/C++ en Java vous donnera un complément d'information. Soit vous utilisez la table des matières pour

Soit vous utilisez la table des matières pour une recherche thématique, soit vous utilisez la hiérarchie des classes pour une recherche alphabétique et hiérarchisée.

Vous voulez tout connaître sur Java ! Lisez tous les chapitres du premier au dernier, puis si vous avez encore soif de connaissances, soyez patient, la suite arriveclasses pour une recherche alphabétique et hiérarchisée. Ce cours comporte 20 chapitres et représente plus de

Ce cours comporte 20 chapitres et représente plus de 2 Mo de données (fichiers HTML, images et applets). Pour éviter toute incompréhension, tous les exemples de code Java ont été vérifiés et sont sans erreur de compilation.

ont été vérifiés et sont sans erreur de compilation. Ce symbole vous signale des points importants

Ce symbole vous signale des points importants ou des pièges à éviter.

Ces symboles vous signalent les différences entre le C/C++ ou le C++, et Java (utilisation

différente, absence ou ajout dans le langage,

).

vendredi 11 février 2000

Du C/C++ à Java : Démarrer en Java

Page: 1

Démarrer en Java

à Java : Démarrer en Java Page: 1 Démarrer en Java Récupérer le JDK Installation Description

Récupérer le JDK Installation Description de l'environnement et des commandes Votre première applet : le classique "Hello world !"

première applet : le classique "Hello world !" R écupérer le JDK (Java Development Kit) Introduction

Récupérer le JDK (Java Development Kit)

Introductionworld !" R écupérer le JDK (Java Development Kit) Bonne nouvelle : jusqu'à nouvel ordre, vous

Bonne nouvelle : jusqu'à nouvel ordre, vous pouvez développer en Java sans débourser un Kopeck (ou

presque : il vous faut quand même un ordinateur si possible équipé d'un modem

).

Java est un langage de programmation développé par Sun Microsystems. Il n'a que quelques années de vie (les premières versions datent de 1995), et pourtant il a réussi à intéresser et intriguer beaucoup de développeurs à travers le monde. Et pourquoi donc ?

La réponse est vaste et forcément sujet à polémiques. En voici les principaux avantages :

C'est un langage orienté objet dérivé du C, mais plus simple que le C++.sujet à polémiques. En voici les principaux avantages : Il est multi-plateforme : tous vos programmes

Il est multi-plateforme : tous vos programmes tourneront sans modification sur toutes les plateformes où existe Java.orienté objet dérivé du C, mais plus simple que le C++. Il est doté en standard

Il est doté en standard d'une riche bibliothèque de classes, 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 (notamment Internet),modification sur toutes les plateformes où existe Java. Les deux derniers points ont contribué à utiliser

Les deux derniers points ont contribué à utiliser d'abord ce langage pour développer des applets, qui sont des applications qui peuvent être téléchargées via Internet et exécutées dans un navigateur sur n'importe quelle plateforme. Ainsi, une page statique HTML peut s'enrichir de programmes qui lui donneront un comportement dynamique. Cet avantage permet de visualiser directement dans ce manuel le résultat des programmes.

Où trouver le JDKdirectement dans ce manuel le résultat des programmes. Venons-en aux faits. Le JDK est disponible gratuitement

Venons-en aux faits. Le JDK est disponible gratuitement sur le site Java de Sun http://www.javasoft.com/. Actuellement, vous cherchez sur ce site un lien products . Ce lien vous amène sur une page décrivant tout ce que Sun met à la disposition des développeurs pour développer en Java (et il y en a beaucoup).

Java est disponible sous 3 versions : Java 1.0, Java 1.1 et Java 2 (la version 2 est uniquement disponible pour Windows, Solaris et Linux pour le moment).

Il est conseillé de débuter par la version 1.0 en téléchargeant le Java Development Kit - JDK 1.0

version 1.0.2), disponible sous Windows 95/98/NT, MacOS et Solaris sur le site de Javasoft. Si votre système de développement n'est pas un de ceux-ci, ce site fournit des liens vers ces autres systèmes tierces (third party ports ). En commençant par la version 1.0, vous pourrez :

(en fait la

Apprendre Java et utiliser sa bibliothèque de base, sans être noyé par la quantité de fonctionnalitéscommençant par la version 1.0, vous pourrez : (en fait la supplémentaires des versions suivantes (

supplémentaires des versions suivantes (212

classes dans Java 1.0, 504

dans Java 1.1, 1592

dans

Java 2).

Bénéficier d'une documentation complète en utilisant le manuel Du C/C++ à Java bibliothèque). Du C/C++ à Java bibliothèque).

(langage et

vendredi 11 février 2000

Du C/C++ à Java : Démarrer en Java

Page: 2

Faire fonctionner vos applets sur presque tous les navigateurs (notamment Netscape Navigator et Microsoft Internet Explorer dès leur version 3).2000 Du C/C++ à Java : Démarrer en Java Page: 2 Les versions Java 1.0 et

Les versions Java 1.0 et 1.1 pour MacOS développées par Apple (dénommées MRJ 1.5 et MRJ 2.2 respectivement) sont disponibles sur le site http://devworld.apple.com/java/.

Sur son site, Sun fournit aussi des documentations en anglais accompagnant le JDK. Voici la liste des plus intéressantes, qui ont aidé à rédiger ce manuel :

Les spécifications du langage au format Acrobat Reader, pour ceux qui recherchent desplus intéressantes, qui ont aidé à rédiger ce manuel : renseignements détaillés sur le langage et

renseignements détaillés sur le langage et les bibliothèques des classes de base de Java 1.0 (plus de 800 pages).

Le fichier est accessible via Java Language Specification 1.0

d'Adobe Acrobat Reader peuvent se procurer gratuitement cette application sur le site d'Adobe :

http://www.adobe.com/.

; les personnes ne disposant pas encore

L'ensemble des classes Java et leur interface de programmation sous forme de fichiers HTML à visualiser avec un navigateur (très utile pour avoir une référence complète des classes).; les personnes ne disposant pas encore Cet ensemble de fichiers est rassemblé sous forme de

Cet ensemble de fichiers est rassemblé sous forme de fichier .tar

via API Documentation . Les personnes ne disposant pas d'application pour extraire les fichiers d'un

fichier .zip

freewares faisant parfaitement l'affaire. Les moteurs de recherche vous donneront des liens pour satisfaire votre bonheur.

, .zip

ou .hqx

et est accessible

ou .tar , peuvent se procurer sur toute plateforme (Windows, MacOS ou UNIX) des

Un tutorial tutorial

de Java très complet, se dénommant The Java Tutorial - Object-Oriented Programming for the

Internet , est disponible sous forme de fichiers HTML rassemblés dans un fichier tutorial.zip .

Voir aussi les liens utiles sur http://www.eteks.comfichiers HTML rassemblés dans un fichier tutorial.zip . Bon courage pour télécharger ces fichiers et à

Bon courage pour télécharger ces fichiers et à tout à l'heure

combien de temps cette page est chargée : déjà

Voici une petite applet indiquant depuis

chargée : déjà Voici une petite applet indiquant depuis secondes ! Le kit de développement fourni

secondes !

Le kit de développement fourni par Sun est très sommaire (généralement un ensemble de commandes: déjà Voici une petite applet indiquant depuis secondes ! simples), il vous faudra en plus

simples), il vous faudra en plus au moins un éditeur de texte (n'importe lequel, peut importe). De nombreux éditeurs de logiciels fournissent des environnements de développement complet (éditeur,

debugger intégré,

),

mais là, il faudra dégainer la carte bleue !

Installationintégré, ), mais là, il faudra dégainer la carte bleue ! Une fois que vous avez

Une fois que vous avez (au moins) téléchargé le JDK, vous pouvez vous mettre au travail.

Sous MacOS, vous récupérez un fichier auto-extractible, qui vous installe directement les applications nécessaires.téléchargé le JDK, vous pouvez vous mettre au travail. Sous Windows 95/NT, vous récupérez un programme

Sous Windows 95/NT, vous récupérez un programme d'installation qui vous installe toutes les commandes sans difficultés.qui vous installe directement les applications nécessaires. Sous UNIX, désolé, pas de machine UNIX sous la

Sous UNIX, désolé, pas de machine UNIX sous la mainqui vous installe toutes les commandes sans difficultés. Il faudra lire attentivement la documentation

Il faudra lire attentivement la documentation

d'installation mais si vous connaissez bien UNIX, ce sera un jeu d'enfant !

Description de l'environnement et des commandessi vous connaissez bien UNIX, ce sera un jeu d'enfant ! Ce chapitre décrit les principales

Ce chapitre décrit les principales commandes (ou applications pour MacOS) qui vous permettront de programmer en Java. Mais tout d'abord il faut comprendre comment marche un programme Java pour utiliser correctement ces commandes.

Principe de fonctionnementun programme Java pour utiliser correctement ces commandes. Rapidement résumé, Java est langage qui doit être

Rapidement résumé, Java est langage qui doit être compilé et interprété. Compilé et interprété ? En fait dans une première phase, vous compilez un programme (un ou plusieurs fichiers source .java ) en

fichiers .class

fichier(s) .java . L'ensemble des fichiers .class

Virtual Machine ) pour exécuter le programme. Voici une illustration de ce principe :

et le compilateur génère un fichier .class

pour chacune des classes définies dans le(s)

est ensuite interprété par la Machine Virtuelle Java (Java

vendredi 11 février 2000

Du C/C++ à Java : Démarrer en Java

Page: 3

2000 Du C/C++ à Java : Démarrer en Java Page: 3 Figure 1. Cycle de développement

Figure 1. Cycle de développement d'une applet

Il est possible de développer soit des applications isolées (standalone applications ), fonctionnant avec l'interpréteur comme un programme habituel, soit des "applets" ; ce sont des programmes qui sont téléchargés sur Internet puis exécutés automatiquement quand ils sont intégrés à l'intérieur de pages HTML. Dans ce dernier cas, l'ensemble des fichiers .class est utilisé avec un fichier HTML qui fait appel à une des classes (voir aussi la Description des principales commandes). Bien que les principes de programmation soient très proches, ce manuel donne surtout des exemples d'applets car elles peuvent être ainsi intégrées dans le texte pour vous montrer le résultat d'un programme "en direct".

Pourquoi ne pas interpréter directement le programme Java ?

1. Les fichiers .class contiennent du bytecode, une sorte de code machine Java (comparable au code machine d'un microprocesseur), qui sera exécuté beaucoup plus rapidement par l'interpréteur que si ce dernier devait travailler avec les fichiers sources .java .

2. Seuls les fichiers .class sont nécessaires à l'exécution d'un programme Java. Comme ils contiennent du code machine, ils ne peuvent être lus par des tiers, protégeant ainsi le code source.

3. Etant compilés, les fichiers .class sont de taille plus petite que le code source Java ; ceci est un argument important pour transférer les programmes sur Internet.

4. Chaque fichier .class décrivant une classe d'objet, une même classe peut être utilisé par différents programmes, sans que cette classe ne soit dupliquée dans chacun des programmes.

Pourquoi ne pas compiler directement un exécutable ?

Sur ce point, la réponse est plus évidente. En effet, un exécutable contient du code qui n'est exécutable que sur la machine pour lequel il est destiné et le seul moyen de rendre un langage multi-plateforme sans avoir à recompiler le source (comme en C/C++), c'est d'utiliser un interpréteur. L'autre avantage de l'interpréteur est qu'il peut être incorporé par exemple, à un navigateur ce qui lui permet d'exécuter des programmes Java à l'intérieur de pages HTML.

Limites du système :

A vu d'œil, ce système a l'air d'être parfait : Vous écrivez des programmes, les compilez et le

résultat de la compilation fonctionnera en l'état sur toutes les machines ! Forcément, il doit y avoir un os quelque part 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 vos programmes moins rapides que de vrais exécutables.

Mais Java est encore jeune : 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 ) ou juste à temps : Quand une classe est chargée, elle est traduite dans le code machine de la plateforme où elle est exécutée (traduction à la volée du micro-code Java vers par exemple, le code machine PowerPC ou

vendredi 11 février 2000

Du C/C++ à Java : Démarrer en Java

Page: 4

Intel). Cette opération ralentit le départ de l'application, mais ensuite l'exécution du programme est beaucoup plus rapide !

Contrairement au C/C++, le compilateur Java ne génère pas de fichier exécutable. Il crée pour chacunel'exécution du programme est beaucoup plus rapide ! des classes d'un fichier Java un fichier .class

des classes d'un fichier Java

un fichier .class

Description des principales commandesdes classes d'un fichier Java un fichier .class qui sera interprété par la Machine Virtuelle Java.

qui sera interprété par la Machine Virtuelle Java.

L'utilisation des commandes varie forcément suivant l'environnement de développement :

Sous Windows 95/98/NT, ouvrir une fenêtre de commandes ; puis, utiliser les commandes décrites ci-après, en les tapant directement. Pour éviter d'avoir à décrire le chemin d'accès complet aux commandes, il vous est vivement conseillé de modifier la variable d'environnement PATH pour que soit pris en compte le répertoire d'installation des commandes Java.forcément suivant l'environnement de développement : Sous UNIX, utiliser la ligne de commandes comme sous

Sous UNIX, utiliser la ligne de commandes comme sous Windows.compte le répertoire d'installation des commandes Java. Sous MacOS, soit vous effectuez sur l'icône de la

Sous MacOS, soit vous effectuez sur l'icône de la commande un drag-and-drop (ou glisser-déposerUNIX, utiliser la ligne de commandes comme sous Windows. pour les francophiles purs) des fichiers à

pour les francophiles purs) des fichiers à passer en paramètres, soit vous utilisez le premier item du

menu File pour choisir le fichier en question (Java Runner vous demandant de choisir la classe à exécuter).

ouvre directement une boite de dialogue

Toutes les options de chacune de ces commandes peuvent être obtenues en exécutant la commande sans paramètre.

javac, le compilateur (Icône Java Compiler ou javac sous MacOS) :

javac

permet de compiler un ou plusieurs fichiers Java

passé en paramètres. Le compilateur

génère pour chaque classe ClasseI

ayant pour nom le nom de classe et l'extension .class

définie dans le(s) fichier(s) Java compilé(s), un fichier

(ClasseI.class) .

En cas d'erreurs dans vos programmes, le compilateur javac

informations assez précises sur le contexte de l'erreur. C'est pourquoi n'hésitez pas à

compiler vos classes en cours de développement quand vous hésitez sur la bonne syntaxe à

utiliser : javac

vous donne généralement des

vous donnera peut-être la solution !

Principales options à spécifier avant la liste des fichiers Java File | Properties sous MacOS) :

à compiler (boite de dialogue

-O : optimisation (Dans certains cas, les méthodes final sont compilées inline , c'est-à-dire que l'appel : optimisation (Dans certains cas, les méthodes final sont compilées inline , c'est-à-dire que l'appel à une méthode est remplacé par le code de cette méthode).

-classpath dir : dir spécifie un ou plusieurs répertoires d'accès aux classes importées (séparés par classpath dir : dir spécifie un ou plusieurs répertoires d'accès aux classes importées (séparés par ; sous Windows, et : sous UNIX).

-d dir : dir spécifie le répertoire de destination des fichiers de classes .class . dir : dir spécifie le répertoire de destination des fichiers de classes .class .

La variable d'environnement CLASSPATH est utilisée comme équivalent de l'option

-classpath .

Exemple : javac Cube.java

Si vous compilez certains programmes Java respectant la version 1.0 avec le compilateur de la version 1.1 ou 2, vous pouvez avoir des warnings vous indiquant que certaines méthodes que vous utilisez ne sont pas recommandés (deprecated ), mais ceci n'empêchera pas le programme de fonctionner correctement. deprecated ), mais ceci n'empêchera pas le programme de fonctionner correctement.

Note aux utilisateurs de systèmes dont les fichiers ne font pas la différence entre les minuscules et majuscules (Windows et MacOS) : Vous devez créer et utiliser des fichiers utilisant les combinaisons majuscules/minuscules correctes ; par exemple, si vous créez une classe Cube3D, le nom de fichier doit

être Cube3D.java et pas cube3d.java ou Cube3d.java.

vendredi 11 février 2000

Du C/C++ à Java : Démarrer en Java

Page: 5

Java, l'interpréteur (Icône Java Runner ou JBindery sous MacOS) :

Cette commande est utilisée pour exécuter des applications isolées. Dans ce cas, le fichier .class passé en paramètre doit définir une méthode main () qui sera le point d'entrée de l'application. Toutes les valeurs qui suivent le nom de la classe sont passées en paramètres à la méthode main ().

Principales options de la ligne de commande à spécifier avant le nom de la classe (vous

retrouverez ces options dans la boite de dialogue de JBindery

sous MacOS

)

:

-classpath dir : dir spécifie un ou plusieurs répertoires d'accès aux classes importées (séparés par classpath dir : dir spécifie un ou plusieurs répertoires d'accès aux classes importées (séparés par ; sous Windows, et : sous UNIX).

-Dpropriete=valeur : modifie la propriété du système avec la valeur donnée (voir aussi la classe propriete=valeur : modifie la propriété du système avec la valeur donnée (voir aussi la classe System).

-version : écrit la version de la Machine Virtuelle que vous utilisez. : écrit la version de la Machine Virtuelle que vous utilisez.

La variable d'environnement CLASSPATH est utilisée comme équivalent de l'option

-classpath .

Exemple : java ClasseExec

appletviewer, l'interpréteur d'applets (Icône Applet Viewer ou Applet Runner sous MacOS) :

cette commande est utilisée pour exécuter des applets. Dans ce cas, le fichier .html

argument doit définir au moins une balise (tag ) APPLET respectant la syntaxe suivante :

passé en

<APPLET CODE=ClasseApplet WIDTH=largeur HEIGHT=hauteur CODEBASE="repertoire" ALT="Ca marche pas" NAME="NomApplet" ALIGN=alignement ARCHIVE="fichier.jar"> </APPLET>.

L'argument de CODE , ClasseApplet , doit correspondre à un fichier .class qui est la classe de CODE, ClasseApplet, doit correspondre à un fichier .class qui est la classe de l'applet. Vous verrez dans le premier exemple comment définir une classe utilisable comme point d'entrée d'une applet.

WIDTH et HEIGHT définisse la largeur et la hauteur de la zone où sera affichée l'applet. et HEIGHT définisse la largeur et la hauteur de la zone où sera affichée l'applet.

CODEBASE (optionnel) permet de définir le chemin d'accès aux classes utilisées par l'applet. Par défaut le (optionnel) permet de définir le chemin d'accès aux classes utilisées par l'applet. Par défaut le chemin d'accès est le répertoire d'où provient le fichier HTML. Le chemin spécifié par CODEBASE peut être relatif au répertoire courant du fichier HTML, ou être une URL désignant un chemin sur un serveur différent.

ALT (optionnel) définit la chaîne de caractères à afficher quand l'applet ne peut être exécutée (si (optionnel) définit la chaîne de caractères à afficher quand l'applet ne peut être exécutée (si par exemple, un navigateur n'autorise pas Java, il écrira cette chaîne).

NAME (optionnel) définit un nom pour l'applet (utilisé quand vous recherchez une applet par son nom). (optionnel) définit un nom pour l'applet (utilisé quand vous recherchez une applet par son nom).

ALIGN (optionnel) permet de définir l'alignement horizontal de l'applet dans la page (optionnel) permet de définir l'alignement horizontal de l'applet dans la page

HTML (LEFT, RIGHT ou MIDDLE).

ARCHIVE (optionnel) est un attribut apparu à partir de Java 1.1 pour définir le fichier JAR (optionnel) est un attribut apparu à partir de Java 1.1 pour définir le fichier JAR qui rassemble les classes, les images et autres fichiers qu'utilise l'applet.

appletviewer crée pour chaque balise APPLET, une fenêtre de taille (WIDTH,HEIGHT), où sera exécutée l'applet correspondant à la classe de CODE.

Entre <APPLET

> et </APPLET> peuvent figurer la description d'un certain nombre de

paramètres à passer à l'applet, sous la forme <PARAM NAME="appletAttributei" VALUE="valuei">. Tout le reste du fichier HTML est ignoré. Vous pouvez aussi exécuter les applets d'un fichier HTML avec un navigateur intégrant un interpréteur Java. Ceci vous est même vivement conseillé afin de pouvoir vérifier comment

s'intègre vos applets au milieu du texte dans lequel elles sont utilisées.

vendredi 11 février 2000

Du C/C++ à Java : Démarrer en Java

Page: 6

Tout le code HTML compris entre les balises <APPLET <APPLET

> et </APPLET> (sauf bien sûr les balises

<PARAM

>)

est affichée par les navigateurs qui ne sont pas dotés de Java ou sur lesquels Java n'est

pas autorisé. Ceci est très pratique pour offrir une alternative aux applets sur un site Internet. Si vous consultez les source des fichiers du site http://www.eteks.com, vous verrez que justement chaque applet du site a pour alternative l'affichage d'une image qui est la capture d'écran de l'applet.

De nombreux exemples d'Applet avec leur programme Java, sont fournis avec le JDK. Essayez-les pour vous rendre compte des possibilités du langage.

Si une applet définit la méthode main (), elle peut être aussi utilisée comme une application avec l'interpréteur Java.

Exemple : appletviewer index.html

Sur la plupart des Machines Virtuelles Java, tant que vous ne quittez pas l'interpréteur (java , java ,

tant que vous ne quittez pas l'interpréteur ( java , appletviewer quand vous relancez un même

appletviewer

quand vous relancez un même programme Java. Ceci implique qu'en phase de mise au point de vos programmes, il faut quitter l'interpréteur ou le navigateur à chaque fois que vous changez une des classes de votre programme, sinon vous aurez

l'impression que vos modifications n'ont pas été prises en compte !

ou navigateur), les classes déjà chargées restent en mémoire, et NE sont PAS rechargées

Votre première applet : le classique "Hello world !"

Comme vous devez l'avoir compris maintenant, il faut écrire écrire au moins deux fichiers différents

pour pouvoir créer et exécuter une applet : Un fichier source Java

et un fichier .html .

Voici le programme source Java. Donnez lui le nom HelloWorld.java (le nom de la classe public du fichier) :

import java.applet.Applet; import java.awt.Graphics;

public class HelloWorld extends Applet

{

 

public void paint (Graphics g)

{

g.drawString("Hello world !", 50, 20);

}

public static void main (String [ ] args)

{

System.out.println ("Hello World !");

}

}

Les instructions utilisées dans ce programme seront décrites ultérieurement. Vous pouvez le compiler de la manière suivante : javac HelloWorld.java Voici le source HMTL. Donnez lui le nom que vous voulez (MonPremierProgrammeJava.html si ça vous chante !) :

<HTML> <HEAD> <TITLE> Un programme simple </TITLE> </HEAD> <BODY>

voici le résultat que vous devriez voir apparaître :

<APPLET CODE="HelloWorld.class" WIDTH=150 HEIGHT=25> </APPLET> </BODY> </HTML>

vendredi 11 février 2000

Du C/C++ à Java : Démarrer en Java

Page: 7

Vous pouvez exécuter l'applet de la manière suivante : appletviewer MonPremierProgrammeEnJava.html voici le résultat que vous devriez voir apparaître :

voici le résultat que vous devriez voir apparaître : Comme HelloWorld définit aussi une méthode main

Comme HelloWorld définit aussi une méthode main (), qui est le point d'entrée d'une application Java, il est donc possible de l'exécuter directement grâce à la commande : java HelloWorld

directement grâce à la commande : java HelloWorld N'oubliez pas d'autoriser l'utilisation de Java

N'oubliez pas d'autoriser l'utilisation de Java dans votre navigateur, si vous voulez l'essayer pour interpréter vos applets et visualiser le résultat des applets de ce manuel.

Pour les débutants, qui n'ont que de faibles notions de programmation (ou qui ne savent pas comment modifier le PATH sous Windows), voici une procédure plus détaillée pour réaliser cette applet :

Windows 95/98/NT MacOS Ouvrez un nouveau document avec notepad.exe . Recopiez le programme source Java
Windows 95/98/NT
MacOS
Ouvrez un nouveau document avec notepad.exe .
Recopiez le programme source Java HelloWorld
décrit ci-dessus dans ce document (en faisant
attention aux majuscules / minuscules).
Enregistrez ce document dans un fichier
HelloWorld.java (Attention toujours aux
majuscules / minuscules, c'est important) :
Enregistrez-le dans le même répertoire que le
programme javac.exe ; javac.exe doit se trouver
dans un répertoire du style c:\jdk
\bin.
Vérifiez qu'à l'enregistrement notepad n'a pas
ajouté une extension .txt au fichier ; si c'est le
cas, renommez-le pour que ce soit exactement
HelloWorld.java
ouvrez un autre document avec notepad.exe .
Recopiez le source HTML de HelloWorld
décrit à ci-dessus dans ce document.
Enregistrez ce document dans un fichier
HelloWorld.html dans le même répertoire que
celui où vous avez mis HelloWorld.java .
Ouvrez une fenêtre de commandes MS/DOS.
Avec la commande CD , allez dans le répertoire
de javac.exe (cd c:\jdk
\bin).
Tapez ensuite javac HelloWorld.java pour
compiler le programme.
S'il y une erreur, c'est que vous n'avez pas
recopié exactement le programme HelloWorld à
l'identique.
Ouvrez un nouveau document avec
SimpleText .
Recopiez le programme source Java
HelloWorld décrit ci-dessus dans ce document
(en faisant attention aux majuscules /
minuscules).
enregistrez ce document dans un fichier
HelloWorld.java (Attention toujours aux
majuscules / minuscules, c'est important).
Le dossier où vous enregistrez vos
programmes importent peu.
Ouvrez un autre document avec SimpleText .
Recopiez le source HTML de HelloWorld
décrit à ci-dessus dans ce document.
Enregistrez ce document dans un fichier
HelloWorld.html dans le même dossier que
celui où vous avez mis HelloWorld.java .
Faites ensuite un drag-and-drop du fichier
HelloWorld.java sur l'icône Java Compiler (si
vous utilisez le JDK de Sun) ou l'icône javac
(si vous utilisez MRJ 2.x), pour compiler le
programme.
S'il y une erreur, c'est que vous n'avez pas
recopié exactement le programme HelloWorld
à l'identique.
Corrigez-le, enregistrez-le, et refaites la
Corrigez-le, enregistrez-le, et refaites javac
HelloWorld.java, jusqu'à ce qu'il n'y ait plus
d'erreur.
Tapez finalement appletviewer
HelloWorld.html. Normalement une fenêtre
s'ouvre affichant le texte "Hello world !",
comme le montre l'applet ci-dessus.
C'est tout.
Pour faire d'autres programmes, c'est toujours la
même procédure : Reprenez un programme Java
et créez un fichier HTML appelant l'applet
procédure précédente, jusqu'à ce qu'il n'y ait
plus d'erreur.
Faites ensuite un drag-and-drop du fichier
HelloWorld.html sur l'icône Applet Viewer (si
vous utilisez le JDK de Sun) ou l'icône Applet
Runner (si vous utilisez MRJ 2.x).
Normalement une fenêtre s'ouvre affichant le
texte "Hello world !", comme le montre
l'applet ci-dessus.
C'est tout.
Pour faire d'autres programmes, c'est toujours
la même procédure : reprenez un programme
Java et créez un fichier HTML appelant
grâce à la balise <APPLET
>,
compilez-le avec
l'applet grâce à la balise <APPLET
>,
javac
et exécutez-le avec appletviewer
suivi du
compilez-le et exécutez-le avec Applet Viewer
nom du fichier HTML.
ou Applet Runner .

vendredi 11 février 2000

Du C/C++ à Java : Démarrer en Java

Page: 8

Enregistrer vos programmes dans le répertoire où se trouve javac.exe n'est pas la solution idéale
Enregistrer vos programmes dans le répertoire où se
trouve javac.exe
n'est pas la solution idéale pour
organiser le rangement de vos programmes, mais vous
évite d'avoir à changer la variable d'environnement
PATH.

Une fois que vous commencez à comprendre comment marche un programme Java, vous pouvez en modifier un existant ou en créer de complètement nouveaux, et vous pourrez considérer que vous savez programmer en Java. Bonne chance

vendredi 11 février 2000

Du C/C++ à Java : Les notions de base

Page: 1

Les notions de base

à Java : Les notions de base Page: 1 Les notions de base Objets, classes et
à Java : Les notions de base Page: 1 Les notions de base Objets, classes et

Objets, classes et héritage Références Les mots-clés de Java Types de base Structure d'un programme Les packages

Objets, classes et héritage

Qu'entend on par langage objet, ou plus exactement langage orienté objet ? Le propos qui suit, n'est que la n ième réponse, qui complétera une littérature déjà vaste sur le sujet. Cette explication rapide vous permettra de vous rappeler le vocabulaire couramment utilisé en programmation orientée objet. L'exemple donné décrit un cas typique de programmation (gestion de compte en banque), plus parlant

que des cas qui peuvent paraître plus abstraits (les catégories de voitures, les espèces animales, etc Le meilleur moyen d'expliquer la programmation objet passe en effet par l'exemple, car elle essaye de s'appuyer sur l'habitude qu'a l'homme, de classer les objets du monde qui l'entourent en catégories, sous-catégories, et ainsi de suite

).

Il faut faire la différence entre la programmation objet et un langage objet : Un langage objet tel que Java, Small Talk ou C++, est le moyen le plus aisé et le plus rapide de "programmer objet", mais la programmation objet est plus un style de programmation que peut respecter un programme écrit en C ou en PASCAL (plus difficilement tout de même !).

Mettons-nous donc à la place d'une banque : elle a des comptes à gérer, le votre, le mien et des milliers d'autres. Tous ces comptes ont en commun un certain nombre de caractéristiques communes que vous retrouvez sur votre relevé : un numéro et un solde, au minimum (même pas forcément une identité pour certains comptes). Le banquier va donc créer un modèle de relevé avec les cases Numéro et Solde. L'imprimeur va en tirer des centaines d'exemplaires pour que le banquier puisse les remplir avec les informations de ses clients. Le banquier gère aussi des comptes qui comportent d'autres informations dont il veut garder la trace. Il n'a pas besoin de créer un modèle entièrement nouveau : à partir de son premier modèle, il crée d'autres modèles de relevés : un pour les comptes de dépôts où il ajoute n cases Opération, un autre pour les comptes d'épargne où il ajoute une case Taux d'intérêts :

où il ajoute une case Taux d'intérêts : Figure 2. Des objets "relevés de compte" Notre

Figure 2. Des objets "relevés de compte"

Notre banquier décide de s'informatiser, et engage un informaticien expert dans la technologie magique dont il entend parler dans tous les journaux : "les technologies objets". Celui-ci lui explique sa démarche : "Pour un informaticien, chaque relevé que vous imprimez est un objet , chaque modèle que vous avez créé est une classe , et le premier modèle que vous avez créé est

une classe dont les modèles suivant ont hérité . Les cases Numéro, Solde, Opération, Taux d'Intérêt sont

des variables

méthode ". Mais le banquier, pas dupe, lui répond : "Je ne veux pas vous acheter un dictionnaire !

que de nouveaux mots. Quelle est la vraie différence avec d'autres technologies classiques et éprouvées

?". Aïe, aïe, expliquer la différence sans terme trop technique et fumeux ?!? "Une classe est une entité qui

forme un tout : chaque objet qui est une instance

qui permettent de mémoriser l'état courant d'un compte et le solde se calcule grâce à une

Tout ça ne sont

(désolé encore un nouveau mot !) d'une classe

vendredi 11 février 2000

Du C/C++ à Java : Les notions de base

Page: 2

comporte un ensemble de variables qui décrivent son état ET un ensemble de méthodes qui permettent

de le modifier : on appelle ceci l'encapsulation . L'héritage vous permet de créer de nouvelles classes

dérivées

anciennes classes. Convaincu ?" (Espérons-le

d'anciennes dont elle garde ou modifie les caractéristiques, sans que vous ayez à retoucher vos

)

Les liens d'héritage définis entre les différentes classes d'un modèle définissent un graphe d'héritage ou une hiérarchie de classes :

un graphe d'héritage ou une hiérarchie de classes : Figure 3. Graphe d'héritage CompteDepot est une

Figure 3. Graphe d'héritage

CompteDepot est une classe dérivée de Compte. Compte est la "super classe" de CompteEpargne et CompteDepot, et CompteEpargne est la super classe de PEL. L'application Banque décrite au chapitre suivant s'inspire du modèle décrit ici.

La différence principale entre une structure C et une classe est évidente : on ne peut pas déclarer des méthodes (ou des fonctions) à l'intérieur du corps d'une structure C. A l'opposé, Java ne permet pas de déclarer de méthodes en dehors du corps d'une classe. Une classe peut comporter uniquement des variables sans méthodes ; elle peut aussi n'avoir que des méthodes sans déclarer de variable.

n'avoir que des méthodes sans déclarer de variable. L'héritage est différent de la composition : en

L'héritage est différent de la composition : en C, vous pouvez créer une structure Compte et une structure CompteEpargne, utilisant la première :

typedef struct

{

 

int

numero;

float solde;

}

Compte;

typedef struct

{

 

Compte compte; float tauxInterets;

}

CompteEpargne;

CompteEpargne unCompte; unCompte.compte.numero = 1;

/* Pour accéder au numero vous passez par le champ */

*/

/* compte de CompteEpargne

En Java, vous pouvez utilisez la composition comme en C. Par contre, grâce à l'héritage, toutes les variables (champs) et méthodes héritées sont accessibles directement comme si elles avaient été déclarées par la classe dérivée elle-même. De toute façon, ne confondez pas l'héritage et la composition : Bien que l'héritage soit une caractéristique d'un langage objet, il ne faut pas se précipiter pour l'utiliser. Vous utiliserez sûrement bien plus souvent la composition (en créant des classes qui sont l'assemblage de différents composants) et à part pour les classes d'applets, la plupart de vos premières classes n'hériteront pas d'autres classes. Pour vous en convaincre, vous n'avez qu'à étudier la hiérarchie des classes de la bibliothèque Java, et vous verrez que la plupart des classes n'héritent pas les unes des autres. L'héritage sert le plus souvent quand on veut modifier le comportement par défaut de classes existantes (par exemple, modifier le comportement de la classe Applet), ou quand vous avez besoin d'ajouter des fonctionnalités à une classe existante et que vous ne voulez pas modifier celle-ci parce qu'elle est déjà

vendredi 11 février 2000

Du C/C++ à Java : Les notions de base

Page: 3

utilisée (par exemple, le compteur de temps dérive d'un afficheur digital statique).

Référencesde temps dérive d'un afficheur digital statique). La notion de référence est fondamentale en Java. La

La notion de référence est fondamentale en Java. La différence avec la notion de pointeur en C est faible, mais essentielle :

Les variables en Java sont soit d'un type de base (byte, short, int, long, float, double, char ou boolean), soit des références désignant des objets. Comme les pointeurs en C, ces références sont comparables à des adresses mémoires permettant de désigner un objet alloué dynamiquement. Un même objet peut être référencé par plusieurs variables à un moment donné. Par contre, la comparaison s'arrête ici : en effet, en C un pointeur peut désigner un type de base (int* par exemple), ou un autre pointeur (char** par exemple). Java lui, ne permet pas de déclarer une variable qui serait une référence sur un type de base ou une référence sur une autre référence. Tout objet ne peut être créé que dynamiquement grâce à l'opérateur new : ClasseObjet unObjet; ne crée aucun objet en Java mais une référence sur un objet de classe ClasseObjet.

La notion de pointeur du C est remplacée par la notion de référence en Java, différente de celle du C++. Les variables qui sont des références ne peuvent désigner que des objets alloués dynamiquement.mais une référence sur un objet de classe ClasseObjet . En C/C++, on utilise souvent une

En C/C++, on utilise souvent une convention d'écriture pour les noms de variables permettant dene peuvent désigner que des objets alloués dynamiquement. distinguer les variables qui sont des pointeurs et

distinguer les variables qui sont des pointeurs et celles qui n'en sont pas,

struct Point

{

int x, y;

};

struct Point point1,

// point1 n'est pas un pointeur

comme par exemple :

*ptrPoint2; // ptrPoint2 est un pointeur sur Point

int entier,

*ptrEntier;

// entier est d'un type de base // ptrEntier est un pointeur sur int

Comme en Java il n'est possible de déclarer que des références comparables à ptrPoint2 ou des variables d'un type de base comparables à entier, il n'est pas utile d'utiliser un qualificatif dans le nom des variables qui permet de rappeler qu'une variable est une référence. En général, on écrit directement

point2.

Il ne faut pas voir la notion de référence comme une limitation de Java par rapport au C, mais plutôt comme une simplification de la programmation : La seule chose réellement perdue est l'arithmétique de pointeurs du C, par contre le gain en sécurité d'accès à la mémoire est important, car une référence ne peut avoir pour valeur que null ou l'adresse valide d'un objet.

Les opérateurs * et & n'existent pas en Java. Le seul opérateur d'accès aux variables et aux * et & n'existent pas en Java. Le seul opérateur d'accès aux variables et aux méthodes d'un objet est le point (.), et les opérateurs -> et :: du C++ sont absents. Tout ceci simplifie grandement la manipulation des adresses.

La création d'objet et leur manipulation sont décrites au chapitre traitant de la création des classes.

Les mots-clés de Javaadresses. La création d'objet et leur manipulation sont décrites au chapitre traitant de la création des

vendredi 11 février 2000

Du C/C++ à Java : Les notions de base

Page: 4

abstract default if private throw boolean do implements protected throws break double import public
abstract
default
if
private
throw
boolean
do
implements
protected
throws
break
double
import
public
transient
byte
else
instanceof
return
try
case
extends
int
short
void
catch
final
interface
static
volatile
char
finally
long
super
while
class
float
native
switch
const
for
new
synchronized
continue
goto
package
this

goto et const sont des mots-clés qui sont réservés mais non utilisés par Java ; ils et const sont des mots-clés qui sont réservés mais non utilisés par Java ; ils permettent notamment au compilateur de vérifier qu'en cas de portage d'un programme écrit en C vers Java, des mots-clés du C n'ont pas été oubliés

null est une valeur utilisée pour les références inconnues et qui ne désignent aucun objet. Il est une valeur utilisée pour les références inconnues et qui ne désignent aucun objet. Il ne s'écrit pas en majuscules comme en C.

Les mots-clés du C/C++ absent en Java auto extern register typedef #define friend sizeof union
Les mots-clés du C/C++ absent en Java
auto
extern
register
typedef
#define
friend
sizeof
union
delete
inline
struct
unsigned
enum
operator
template
virtual
typedef #define friend sizeof union delete inline struct unsigned enum operator template virtual Types de base

Types de base

typedef #define friend sizeof union delete inline struct unsigned enum operator template virtual Types de base

vendredi 11 février 2000

Du C/C++ à Java : Les notions de base

Page: 5

VALEUR PAR TYPE DESCRIPTION DEFAUT byte Entier signé occupant 8 bits (valeurs de -128 à
VALEUR PAR
TYPE
DESCRIPTION
DEFAUT
byte
Entier signé occupant 8 bits (valeurs de -128 à 127)
0
short
Entier signé occupant 16 bits (valeurs de -32768 à 32767)
0
int
Entier signé occupant 32 bits (valeurs de -2147483648 à
0
21474836487).
Le type int occupe toujours la même taille en Java : 32 bits.
long
Entier signé occupant 64 bits (valeurs de -9223372036854775808 à
0L
9223372036854775807)
Le type long occupe 64 bits en Java contrairement à 32 bits
en C.
float
Nombre à virgule flottante occupant 32 bits (IEEE 754)
0.0f
double
Nombre à virgule flottante occupant 64 bits (IEEE 754)
0.0d
char
Caractère Unicode occupant 16 bits (valeurs littérales de '\u0000' à
'\uffff' avec 4 chiffres hexadécimaux obligatoires après \u).
Les 128 premiers caractères sont les codes ASCII et se notent
'\u0000'
comme en C, entre '' ('a', '1',
).
Voici la liste des caractères
compris entre '\u0080' et '\u00ff', qui contient notamment les
caractères accentués français :
Méfiez-vous car la plupart des éditeurs de texte ne génèrent pas à
la compilation la bonne valeur Unicode pour ces caractères.
Utilisez alors les valeurs hexadécimales ('\u00e9' au lieu de 'é'
par exemple).
Le type char occupe 16 bits en Java contrairement à 8 bits
en C. Utilisez byte pour un 8 bits. Les valeurs littérales des
caractères spéciaux sont les mêmes : '\n' pour un saut de
ligne, '\t' pour une tabulation, '\'' pour le caractère ',
'\"' pour le caractère ", '\\' pour le caractère \,
boolean
Booléen dont la valeur est true ou false
false
Le type boolean n'existe pas en C. En Java, il est obligatoire
dans certaines expressions (if (
)
par exemple).

Les variables de type float et double peuvent prendre aussi des valeurs correspondant à l'infini positif ou négatif, ou représentant une valeur non significative. Voir les classes Float et Double. Les valeurs littérales entières (byte, short, int et long) peuvent se noter de trois façons :

Comme une suite de chiffres décimaux : 3443 , -123 , 3443, -123,

Comme une suite de chiffres hexadécimaux (base 16) précédée de 0x : 0xFF , 0X12ab , 0x : 0xFF, 0X12ab,

Comme une suite de chiffres octaux (base 8) précédée de 0 : 0123 , 056 , 0 : 0123, 056,

chiffres octaux (base 8) précédée de 0 : 0123 , 056 , Le modifieur unsigned du

Le modifieur unsigned du C n'existe pas en Java, où tous les types entiers sont signés. Comme en C, les entiers peuvent prendre pour valeur des littéraux notés sous forme décimale (i=10) , hexadécimale (i=0x0A) ou octale (i=012).

Chacun des types de base Java occupe toujours la même place mémoire quelque soit la plate-forme d'exécution. La taille d'un entier de type int est toujours de 32 bits (ou 4 octets).

vendredi 11 février 2000

Du C/C++ à Java : Les notions de base

Page: 6

Les opérateurs qui s'appliquent à chacun des types de bases sont étudiés au chapitre sur les instructions et les opérateurs.

au chapitre sur les instructions et les opérateurs. Une valeur littérale d'un nombre à virgule flottante
au chapitre sur les instructions et les opérateurs. Une valeur littérale d'un nombre à virgule flottante

Une valeur littérale d'un nombre à virgule flottante sans l'extension f ou d, comme par exemple 10.2 est considérée de type double.

Structure d'un programme

La structure d'un programme Java est plus simple qu'en C. Chaque fichier qui le compose, se divise en trois parties (optionnelles) :

/* Début du fichier NouvelleClasse.java */

/* 1. Une éventuelle déclaration de package */ package nomDuPackage;

/* 2. Zéro ou plusieurs import */ import nomDeClasse;

import nomDuPackage.nomDeClasse; // Importer une classe d'un package

import nomDuPackage.*;

// Importer une classe sans package

// Importer toutes les classes d'un package

/* 3. Déclarations des classes et des interfaces du fichier */

public class NouvelleClasse

{

// Une seule classe ou interface déclarée public,

// et par convention qui porte le même nom que le fichier

// Corps de NouvelleClasse

}

class NouvelleClasse2

{

// Corps de NouvelleClasse2

}

interface NouvelleInterface

{

// Corps de NouvelleInterface

}

//

/* Fin du fichier NouvelleClasse.java */

Les packages sont comparables à des sous-répertoires et sont traités au paragraphe suivant.

Les classes d'un même package peuvent s'utiliser mutuellement sans avoir à utiliser une clause import :

Si, par exemple, vous créez deux fichiers Classe1.java et Classe2.java déclarant respectivement les classes Classe1 et Classe2, vous pouvez utiliser directement Classe2 dans le fichier Classe1.java.

vendredi 11 février 2000

Du C/C++ à Java : Les notions de base

Page: 7

Les commentaires s'écrivent de la même manière en Java qu'en C++ :février 2000 Du C/C++ à Java : Les notions de base Page: 7 Tout ce qui

Tout ce qui suit // est ignoré jusqu'à la fin de la ligne. // est ignoré jusqu'à la fin de la ligne.

Tout ce qui est compris entre /* et */ est ignoré. Ces commentaires peuvent incorporer des commentaires écrits avec la syntaxe /* et */ est ignoré. Ces commentaires peuvent incorporer des commentaires écrits avec la syntaxe précédente //, mais pas d'autres commentaires avec la syntaxe /* */. Il est conseillé d'utiliser d'abord les commentaires avec // pour permettre d'imbriquer ce type de commentaire, dans ceux utilisant /* */ au cas où vous ayez de besoin de commenter tout un bloc. Par exemple :

class Classe1

{

/* Bloc inutilisé int x = 1; // x sert à */

}

//

Il existe un troisième type de commentaire utilisant la syntaxe précédente : Les commentaires{ /* Bloc inutilisé int x = 1; // x sert à */ } // javadoc

javadoc . javadoc

est une commande qui utilise tous les commentaires compris entre /** et */ et

respectant une syntaxe spéciale pour générer automatiquement une documentation des classes.

Toute la documentation des classes fournie par Javasoft est créée grâce à cet outil.

L'équivalent de #include est import . #include est import.

Java ne requiert pas de déclaration externe via un fichier header .h

suffisants au compilateur pour résoudre les références aux types externes. Le mot-clé extern est inutile en Java.

; les fichiers .java

ou .class

sont

Java est un langage "pur" objet et ne permet de définir au niveau global qu'UNIQUEMENT des classes ou des interfaces : Pas de constantes, ni de macros (#define du C), pas de variables globales qu'elles soient statiques ou non, pas de types #define du C), pas de variables globales qu'elles soient statiques ou non, pas de types autres que des classes (typedef est inutile), et toutes les fonctions ne peuvent être déclarées que comme méthodes appartenant à une classe. C'est la raison pour laquelle vous verrez que tous les exemples donnés déclarent des classes qui sont souvent inutiles pour expliciter tel ou tel problème, mais obligatoires pour que l'exemple puisse être compilé.

obligatoires pour que l'exemple puisse être compilé. Les packages import Aussitôt que vous utilisez une classe

Les packages

importpour que l'exemple puisse être compilé. Les packages Aussitôt que vous utilisez une classe fournie avec

Aussitôt que vous utilisez une classe fournie avec le Java Development Kit

devez indiquer à votre programme où la trouver. Pour cela, il faut utiliser la clause import pour chacune (ou chaque groupe) des classes dont vous voulez vous servir dans un fichier .java . Ces clauses se placent en début de fichier avant la déclaration de la première classe ou interface du fichier :

ou par d'autres sources, vous

// importer une classe sans package

import nomDuPackage.nomDeClasse; // importer une classe d'un package

import nomDuPackage.*;

import nomDeClasse;

// importer toutes les classes d'un package

import est suivi soit directement d'un nom de classe, soit d'un nom de package, suivi lui-même d'un nom de classe ou d'un astérisque (*). L'astérisque permet d'importer les classes d'un package à la demande, c'est-à-dire que quand le compilateur recherchera une classe Classe1 qu'il ne connait pas encore, il cherchera notamment dans les packages suivis d'un astérisque si Classe1 existe. La classe nomDeClasse peut correspondre soit à un fichier source nomDeClasse.java, soit à un fichier compilé nomDeClasse.class, dans lequel est définie la classe public à importer. Un package représente une arborescence indiquant au compilateur quel chemin il faut emprunter pour retrouver la classe. Par exemple, si le package est java.util, il va effectuer sa recherche dans le répertoire java/util (ou java\util sous Windows). Mais où est ce répertoire java/util ? Vous ne

trouverez sûrement pas sur votre disque dur de répertoire java à la racine, et non plus dans le répertoire

courant où vous écrivez vos programmes

une variable système d'environnement indiquant l'ensemble des chemins prédéfinis à utiliser avec un package pour construire le chemin complet d'accès aux classes : Sous UNIX et Windows, cette variable

Comme la plupart des langages, le compilateur Java utilise

vendredi 11 février 2000

Du C/C++ à Java : Les notions de base

Page: 8

s'appelle CLASSPATH. Vous pouvez aussi utiliser l'option -classpath avec les commandes javac

pour spécifier ce chemin. Vous pouvez modifier cette variable pour y ajouter le chemin d'accès à d'autres bibliothèques Java ou à vos propres packages, que vous créerez (les environnements de développement plus complets permettent d'ajouter ces chemins plus simplement). Le chemin correspondant à un package est donc un chemin relatif construit à partir du répertoire courant de compilation ou aux chemins cités dans la variable d'environnement CLASSPATH.

et java ,

import est optionnel dans deux cas :

Quand vous voulez utiliser dans un fichier UneClasse.java des classes définies dans des fichiers situés dans le même répertoire que celui où UneClasse.java des classes définies dans des fichiers situés dans le même répertoire que celui où se trouve UneClasse.java (toutes les classes public ou non d'un même package / répertoire peuvent s'invoquer entre elles).

Quand vous utilisez une classe du package java.lang : Toutes les classes de ce package de base, sont importées automatiquement à chaque java.lang : Toutes les classes de ce package de base, sont importées automatiquement à chaque compilation.

Si un package nomDuPackage comporte des sous-packages (par exemple nomDuPackage.sousPackage ), la clause import nomDuPackage.* nomDuPackage comporte des sous-packages (par exemple nomDuPackage.sousPackage), la clause import nomDuPackage.* n'importe pas ces sous packages. Il faut explicitement importer chacun

d'eux (avec par exemple import nomDuPackage.sousPackage.*).

Les packages peuvent servir aussi à donner un nom complet d'accès à une classe quand il y a risque de

conflit pour retrouver une classe : Par exemple, à chaque fois que vous avez besoin de la classe String,

vous pouvez utiliser String seul, mais, si dans un de vos fichiers .java

String (ce qui n'est pas très conseillé !), vous pourrez accéder dans le même fichier à votre nouvelle classe String et à la classe String du package java.lang en écrivant pour cette dernière java.lang.String, à chaque fois qu'il y a risque de confusion. Cette caractéristique est particulièrement appréciable le jour vous serez amené à utiliser des packages de sources différentes qui ont défini certaines classes avec le même nom.

vous définissez une autre classe

import permet d'importer les classes définies dans d'autres répertoires, mais n'est pas obligatoire pour importer permet d'importer les classes définies dans d'autres répertoires, mais n'est pas obligatoire pour importer entre elles les classes définies dans un même répertoire, et notamment le répertoire courant de développement.

Toutes les classes que vous importez explicitement ou implicitement (parce qu'elles sont du même package ou qu'elles sont du package java.lang ), sont chargées dynamiquement une à une à l'exécution d'un programme Java, la première java.lang), sont chargées dynamiquement une à une à l'exécution d'un programme Java, la première fois qu'elles sont utilisées. Comme il est décrit au premier chapitre, les liens ne sont donc pas statiques comme en C, où le link rassemble dans un fichier exécutable tous les composants dont un programme a besoin pour

fonctionner. Chaque classe est mémorisée dans un fichier .class librairie dynamique (ou DLL Dynamic Link Library ).

Définir un packagelibrairie dynamique (ou DLL Dynamic Link Library ). qui peut être comparé à une (petite) import

qui peut être comparé à une (petite)

import permet d'importer n'importe quelle classe d'une bibliothèque, mais rien ne vous empêche de créer votre propre bibliothèque, pour y rassembler par exemple un ensemble de classes utilisées comme outils dans un ou plusieurs projets. Ceci se fait très simplement grâce à la clause package. Si cette clause est utilisée, elle doit être définie en tête d'un fichier .java , comme suit :

package nomDuPackage;

Comme expliqué précédemment, le nom de package doit correspondre au chemin d'accès à la classe qui utilise la clause package.

En général, une société qui s'appelle nomSociete

utilise com.nomsociete comme base pour le nom des

packages des produits Java qu'elle livre, par exemple com.nomsociete.produitxxx pour le produit produitxxx . Les classes de ce package devront être enregistrées dans le sous-répertoire

com/nomsociete/produitxxx.

Si dans ce sous-répertoire, vous créez une classe public Outil1 dans le fichier Outil1.java, chacune des classes désirant utiliser la classe Outil1, devra inclure la clause import

com.nomsociete.produitXXX.Outil1; et le fichier Outil1.java devra définir la clause package com.nomsociete.produitxxx;.

vendredi 11 février 2000

Du C/C++ à Java : Les notions de base

Page: 9

La figure symbolisant les contrôles d'accès à des classes représente aussi un exemple simple d'utilisation des packages.

vendredi 11 février 2000

Du C/C++ à Java : Création et utilisation des classes

Page: 1

Création et utilisation des classes

des classes Page: 1 Création et utilisation des classes Déclaration des classes et des interfaces Déclaration

Déclaration des classes et des interfaces Déclaration des variables Déclaration des méthodes Création d'objets : opérateur new Outrepasser une méthode Destruction des objets

new Outrepasser une méthode Destruction des objets Déclaration des classes et des interfaces Les seuls types

Déclaration des classes et des interfaces

Les seuls types que le programmeur peut définir en Java sont des classes ou des interfaces. Donc, les mots-clé struct , union et enum n'existent pas en Java. De plus, les template n'existent mots-clé struct, union et enum n'existent pas en Java. De plus, les template n'existent pas.

Identifiantspas en Java. De plus, les template n'existent pas. Les identifiants que vous créez en Java

Les identifiants que vous créez en Java (classes, interfaces, variables, méthodes,

n'importe quelle suite illimitée de lettres ou de chiffres Unicode, de caractères _ ou $. Seul le premier caractère ne doit pas être un chiffre. Il doit bien sûr être différent des mots-clés Java. Par conséquent, il est possible d'utiliser des caractères accentuées pour une meilleure lisibilité de vos programmes.

) peuvent être

Les identifiants sont codés comme en C/C++, mais en Java vous pouvez utilisez en plus toutes les lettres et tous les chiffres Unicode et le caractère $ . Comme en C, le compilateur fait la nuance entre les minuscules et les $. Comme en C, le compilateur fait la nuance entre les minuscules et les majuscules.

Vous pouvez créer des identifiants avec des lettres accentuées, ce qui n'est pas conseillé car la plupart des éditeurs de texte et des systèmes fonctionnant en ligne de commande (comme MS/DOS ou UNIX) n'utilisent pas Unicode pour les lettres accentuées (qui ne sont pas ASCII).fait la nuance entre les minuscules et les majuscules. Les classes La déclaration d'une classe peut

Les classespour les lettres accentuées (qui ne sont pas ASCII). La déclaration d'une classe peut prendre une

La déclaration d'une classe peut prendre une des formes suivantes :

// Déclararation d'une classe simple ModifieurDeClasse class NomDeClasse

{

 

// Corps de NomDeClasse :

// Déclaration des variables, des méthodes, des constructeurs // et/ou initialisations static

}

// Déclaration d'une classe dérivant d'une super classe

ModifieurDeClasse class NomDeClasseDerivee extends NomDeSuperClasse

{

 

// Corps de NomDeClasseDerivee :

// Déclaration des variables, des méthodes, des constructeurs // et/ou initialisations static

}

// Déclaration d'une classe implémentant une interface

ModifieurDeClasse class NomDeClasse2 implements NomInterface //, NomInterface2,

{

 

// Corps de NomDeClasse2 :

// Déclaration des variables, des méthodes, des constructeurs // et/ou initialisations static // et implémentation des méthodes de nomInterface

}

vendredi 11 février 2000

Du C/C++ à Java : Création et utilisation des classes

Page: 2

// Déclaration d'une classe dérivant d'une super classe et implémentant une interface ModifieurDeClasse class NomDeClasse3 extends NomDeSuperClasse implements NomInterface //, NomInterface2,

{

 

// Corps de NomDeClasse3 :

// Déclaration des variables, des méthodes, des constructeurs // et/ou initialisations static // et implémentation des méthodes de nomInterface

}

Une classe simple dérive implicitement de la classe Object (class nomDeClasse est équivalent à class nomDeClasse extends Object). Java ne permet pas l'héritage multiple (une seule classe peut suivre la clause extends), mais une classe peut implémenter plusieurs interfaces. Le corps d'une classe est une suite quelconque de déclaration de variables, de méthodes, de constructeurs et/ou d'initialisations static.

A

partir de Java 1.1, le corps d'une classe peut aussi déclarer des classes internes, des interfaces internes

et

des initialisations d'instance.

ModifieurDeClasse

est optionnel et peut prendre une ou plusieurs des valeurs suivantes :

public : Une seule classe ou interface peut être déclarée public par fichier source .java . : Une seule classe ou interface peut être déclarée public par fichier source .java . Par convention, le fichier porte le nom de la classe déclarée public. Si d'autres classes (non public) sont déclarées dans un fichier Classe1.java, elles ne peuvent être utilisés que dans les fichiers qui appartiennent au même package que Classe1.java.

final : Une classe déclarée final ne peut être dérivée et ne peut donc jamais suivre : Une classe déclarée final ne peut être dérivée et ne peut donc jamais suivre la clause extends. Cette clause peut être utile quand vous considérez qu'une classe ne doit pas ou n'a pas besoin d'être dérivée.

abstract : Il est impossible de créer une instance d'une classe déclarée abstract . Cette catégorie : Il est impossible de créer une instance d'une classe déclarée abstract. Cette catégorie de classe peut comporter une ou plusieurs méthodes déclarées abstract. Par contre, si une classe comporte une méthode abstract, elle doit être être déclarée abstract. A quoi sert une classe abstract si on ne peut créer aucun objet de cette classe ? Ce type de classe est utilisé pour fournir des méthodes et des variables communes à toutes les classes qui en dérivent. L'intérêt des classes abstract est démontrée plus loin dans ce chapitre. Une classe ne peut être déclarée abstract et final (elle ne servirait à rien puisqu'il serait impossible de créer des classes dérivées de celle-ci).

impossible de créer des classes dérivées de celle-ci). figure 4. Symbolisation des contrôles d'accès aux

figure 4. Symbolisation des contrôles d'accès aux classes

Contrairement au C++, le point-virgule en fin de déclaration d'une classe est optionnel.4. Symbolisation des contrôles d'accès aux classes En Java, on utilise la clause extends pour préciser

En Java, on utilise la clause extends pour préciser la super classe d'une classe dérivée, à la place des deux points extends pour préciser la super classe d'une classe dérivée, à la place des deux points qui suivent la déclaration d'une classe en C++.

L'héritage se fait systématiquement de manière public en Java. Il n'existe pas d'équivalence à la public en Java. Il n'existe pas d'équivalence à la

déclaration C++ : class Classe2 : private Classe1 { /*

*/ }.

Une classe abstraite doit être déclarée abstract en Java et peut contenir aucune ou plusieurs méthodes abstract (équivalent des méthodes virtuelles abstract en Java et peut contenir aucune ou plusieurs méthodes abstract (équivalent des méthodes virtuelles pures du C++). Les modifieurs de classe public et final n'ont pas d'équivalent en C++.

En Java une classe et tout ce qu'elle contient devant être déclarée entièrement dans un seul fichier, il n'est pas possible comme en C++ de répartir les méthodes d'une même classe sur plusieurs fichiers.méthodes virtuelles pures du C++). Les modifieurs de classe public et final n'ont pas d'équivalent en

vendredi 11 février 2000

Du C/C++ à Java : Création et utilisation des classes

Page: 3

à Java : Création et utilisation des classes Page: 3 Les interfaces Une interface est une

Les interfaces

Une interface est une catégorie un peu spéciale de classe abstract, dont le corps ne contient que la déclaration de constantes et de méthodes abstract :

// Déclararation d'une interface simple

ModifieurInterface interface NomInterface

{

 

// Corps de NomInterface :

// Déclaration des constantes et des méthodes non implémentées

}

// Déclaration d'une interface dérivant d'une super interface ModifieurInterface interface NomInterfaceDerivee extends NomSuperInterface

{

 

// Corps de NomInterfaceDerivee :

// Déclaration des constantes et des méthodes non implémentées

}

A partir de Java 1.1, le corps d'une interface peut aussi déclarer des classes internes et des interfaces

internes.

II est impossible de créer une instance d'une interface. Une ou plusieurs interfaces peuvent suivre la

clause extends. Une classe non abstract, qui implémente une interface Interface1 doit implémenter le code de chacune des méthodes de Interface1. L'implémentation d'une méthode est l'ensemble des instructions

que doit exécuter une méthode.

ModifieurInterface

est optionnel et peut prendre une ou plusieurs des valeurs suivantes :

public : Une seule interface ou classe peut être déclarée public par fichier source. Par convention, : Une seule interface ou classe peut être déclarée public par fichier source. Par convention, le fichier porte le nom de l'interface déclarée public. Si d'autres interfaces (non public) sont déclarées dans un fichier Interface1.java, elles ne peuvent être utilisés que dans les fichiers qui appartiennent au même package que Interface1.java. Une interface ne peut porter le même nom qu'une classe.

abstract : Toute interface est implicitement abstract . Ce modifieur est permis mais pas obligatoire. : Toute interface est implicitement abstract. Ce modifieur est permis mais pas obligatoire.

A quoi sert une interface et quelle est la différence avec une classe abstract ?

Tout d'abord, vous noterez qu'une classe ne peut hériter que d'une super classe, mais par contre peut implémenter plusieurs interfaces. Ensuite, une classe abstract peut déclarer des variables et le code de certaines méthodes.

Soit une classe Classe1 qui implémente toutes les méthodes d'une interface Interface1 . Cette classe peut déclarer d'autres Classe1 qui implémente toutes les méthodes d'une interface Interface1. Cette classe peut déclarer d'autres méthodes, ce qui compte c'est que chaque instance de cette classe garantit qu'au moins toutes les méthodes d'Interface1 existent et peuvent être appelées, comme dans l'exemple suivant :

interface CouleurDominante

{

// Déclaration d'une méthode QuelleCouleurDominante ()

}

class Classe1 extends SuperClasse1 implements CouleurDominante

{

 

// Corps de la méthode QuelleCouleurDominante ()

// Autres méthodes éventuelles

}

class Classe2 extends SuperClasse2 implements CouleurDominante

{

 

// Corps de la méthode QuelleCouleurDominante ()

// Autres méthodes éventuelles

}

class ClasseAyantBesoinDeLaCouleurDominante

vendredi 11 février 2000

Du C/C++ à Java : Création et utilisation des classes

Page: 4

{

CouleurDominante objetColore; // On peut affecter à objetColore une référence // à un objet de classe Classe1 ou Classe2 // et ainsi obtenir la couleur dominante d'un objet coloré en invoquant // la méthode QuelleCouleurDominante () sur la variable objetColore

}

Une interface peut être utilisée pour masquer l'implémentation d'une classe. Ce concept est utilisé dans plusieurs packages Java dont java.awt.peer : Ce package déclare un ensemble d'interfaces qui offrent les mêmes méthodes sur chaque java.awt.peer : Ce package déclare un ensemble d'interfaces qui offrent les mêmes méthodes sur chaque Machine Virtuelle Java mais qui sont implémentées

différemment pour que l'interface utilisateur du système (bouton, fenêtre,

) soit utilisée.

Une interface vide (comme l'interface Cloneable ) permet de créer une catégorie de classes : chaque classe implémentant ce type Cloneable) permet de créer une catégorie de classes : chaque classe implémentant ce type d'interface appartient à telle ou telle catégorie. Pour tester si la classe d'un objet appartient à une catégorie, il suffit d'utiliser l'opérateur instanceof avec le nom de l'interface.

Une interface peut servir aussi pour déclarer un ensemble de constantes, qui seront utilisées dans des classes sans lien d'héritage entre elles, comme dans l'exemple suivant :instanceof avec le nom de l'interface. interface ConstantesCommunes { // Déclaration des

interface ConstantesCommunes

{

// Déclaration des constantes A, B et C

}

class Classe1 extends SuperClasse1 implements ConstantesCommunes

{

// Les constantes A, B et C sont utilisables dans la classe Classe1

}

class Classe2 extends SuperClasse2 implements ConstantesCommunes

{

// Les constantes A, B et C sont utilisables dans la classe Classe2

}

Une classe qui implémente une interface InterfaceDerivee dérivée d'une autre interface Interface1 doit implémenter les méthodes des deux interfaces InterfaceDerivee dérivée d'une autre interface Interface1 doit implémenter les méthodes des deux interfaces InterfaceDerivee et Interface1.

Java ne permet pas l'héritage multiple. Mais l'utilisation des interfaces peut compenser cet absence, car une classe peut implémenter plusieurs interfaces. Voir aussi le chapitre sur le portage.des deux interfaces InterfaceDerivee et Interface1 . Si vous avez quelque mal au départ à comprendre

Si vous avez quelque mal au départ à comprendre le concept d'interface et leur utilité, considérez les simplement comme des classes abstract, déclarant des constantes et des méthodes abstract. Vous en percevrez leur intérêt au fur et à mesure que vous serez amené à vous en servir.

au fur et à mesure que vous serez amené à vous en servir. Déclaration des variables

Déclaration des variables

Le corps d'une classe est un ensemble de déclarations de variables et de méthodes implémentées ou non, déclarées dans n'importe quel ordre.

Syntaxeou non, déclarées dans n'importe quel ordre. Les déclarations de variables se font comme en C/C++

Les déclarations de variables se font comme en C/C++ :

class Classe1

{

// Déclaration de variables TypeVariable variable1;

 

TypeVariable

variable2, variable3;

ModifieurDeVariable TypeVariable variable4; TypeVariable variable5 = valeurOuExpression ; // Initialisation d'une variable

TypeVariable

tableau1 [ ]; // Création d'une référence sur un tableau

// Allocation d'un tableau de taille n initialisé avec les n valeu

TypeVariable

tableau2 [ ] = {valeur1, valeur2, /*

,

*/ valeurn};

//

}

vendredi 11 février 2000

Du C/C++ à Java : Création et utilisation des classes

Page: 5

TypeVariable

est soit un type de base, soit le nom d'une classe, soit le nom d'une interface. Dans ce

dernier cas, la variable est une référence sur un objet. Les tableaux sont cités ici en exemple de variable et sont traités dans la partie sur les tableaux.

ModifieurDeVariable est optionnel et peut être un ou plusieurs des mots-clés suivants :

public, protected ou private : , protected ou private :

Une variable public est accessible partout où est accessible la classe Classe1 dans laquelle elle

Une variable public est accessible partout où est accessible la classe Classe1 dans laquelle elle est déclarée.

Une variable protected est accessible par les autres classes du même package que Classe1 ,

Une variable protected est accessible par les autres classes du même package que Classe1,

et par les classes dérivées de Classe1 . Une variable private n'est accessible qu'à l'intérieur

et par les classes dérivées de Classe1. Une variable private n'est accessible qu'à l'intérieur du corps de Classe1.

static : Si une variable est static , elle est créée en un unique exemplaire quelque : Si une variable est static, elle est créée en un unique exemplaire quelque soit le nombre d'instance de Classe1 : c'est une variable de classe. L'accès à cette variable se fait grâce à l'opérateur point (.) en indiquant le nom de la classe ou une référence à un objet

(Classe1.variable ou objetClasse1.variable).

A l'opposé, si une variable n'est pas static, chaque nouvelle instance objetClasse1 de Classe1 créera une variable pour objetClasse1 : c'est une variable d'instance. L'accès à cette variable se fait grâce à l'opérateur point (.) , de la manière objetClasse1.variable.

final : Une variable final n'est pas modifiable une fois initialisée : en fait, c'est une : Une variable final n'est pas modifiable une fois initialisée : en fait, c'est une constante qui peut prendre une valeur initiale différente d'un objet à l'autre d'une même classe. Si cette variable prend toujours la même valeur d'initialisation, il vaut mieux optimiser votre code en y ajoutant static pour en faire une constante de classe. Les variables déclarées dans le corps d'une interface sont des constantes implicitement public, final et static, et doivent être initialisées avec une expression constante.

transient : Une variable transient sert à indiquer aux méthodes gérant la persistance qu'elle ne fait : Une variable transient sert à indiquer aux méthodes gérant la persistance qu'elle ne fait pas partie de la persistance de l'objet. Cette fonctionnalité n'a été mise en œuvre qu'à partir de Java 1.1, et sert à éviter de sauvegarder des variables ne servant qu'à des calculs intermédiaires (indices par exemple).

volatile : Une variable volatile permet d'être sûr que deux threads (tâches) auront accès de manière : Une variable volatile permet d'être sûr que deux threads (tâches) auront accès de manière ordonnée à cette variable (modifieur implémenté uniquement à partir de Java 1.1). Voir aussi le chapitre sur les threads. Une variable volatile ne peut être aussi final.

Une variable volatile ne peut être aussi final . figure 5. Symbolisation des contrôles d'accès aux

figure 5. Symbolisation des contrôles d'accès aux variables

Le contrôle d'accès à une variable est soit public, soit protected, soit private, soit par défaut, si aucun de ces modifieurs n'est précisé, amical (friendly en anglais) : la variable est alors accessible uniquement par les autres classes du même package. Les liens de la figure précédente indique les endroits où il est possible d'utiliser une variable. Comme vous pouvez le voir, l'utilisation d'une variable se fait directement par son nom à l'intérieur d'une classe et de ses classes dérivées, sans besoin d'utiliser l'opérateur point (.).

vendredi 11 février 2000

Du C/C++ à Java : Création et utilisation des classes

Page: 6

L'initialisation d'une variable se comporte exactement comme l'affectation. Si la variable est static, alors l'initialisation est effectuée au chargement de la classe. Les variables non initialisées prennent obligatoirement une valeur par défaut (voir le tableau sur les types de base). Si cette variable est une référence à un objet, la valeur par défaut est null.

Une classe Classe1 peut déclarer une variable qui est une référence à une classe Classe2 déclarée après Classe1 peut déclarer une variable qui est une référence à une classe Classe2 déclarée après Classe1 (pas besoin de déclarer les types avant de les utiliser comme en C).

En Java, le modifieur final est utilisé pour déclarer une constante (pas de #define , ni de const ). final est utilisé pour déclarer une constante (pas de #define, ni de const).

Contrairement au C/C++, Java permet d'initialiser à la déclaration les variables de classe ainsi que les variables d'instance.déclarer une constante (pas de #define , ni de const ). Les variables d'instance et de

Les variables d'instance et de classe sont toutes initialisées à une valeur par défaut. En C++, il est obligatoire d'initialiser les variables de classe à part ; en Java, soit ces variables prennent une valeur par défaut, soit elles sont initialisées à leur déclaration, soit elles sont initialisées dans un bloc d'initialisation static. static.

L'accès aux variables static se fait grâce à l'opérateur point ( . ) et pas l'opérateur :: , static se fait grâce à l'opérateur point (.) et pas l'opérateur ::, comme en C++. De plus, si vous voulez donner une valeur par défaut aux variables static, vous le faites directement à la déclaration de la variable, comme par exemple static int var = 2;.

Le contrôle d'accès aux variables (et aux méthodes) se fait pour chacune d'elles individuellement, et pas en bloc comme en C++ (avec par exemple public : ). public :).

Les variables (et les méthodes) d'une classe Classe1 dont le contrôle d'accès est protected sont accessibles par les classes dérivées de Classe1 Classe1 dont le contrôle d'accès est protected sont accessibles par les classes dérivées de Classe1 comme en C++, mais aussi par les classes du même package que Classe1.

En Java, les variables (et les méthodes) d'une classe Classe1 ont un contrôle d'accès par défaut qui est amical ( friendly ), c'est à Classe1 ont un contrôle d'accès par défaut qui est amical (friendly ), c'est à dire qu'elles sont accessibles uniquement par les autres classes du même package que Classe1. En C++, cette notion n'existe pas et par défaut le contrôle d'accès est private.

Le contrôle d'accès par défaut de Java est très pratique car il donne accès à toutes les variables et toutes les méthodes des classes d'un même package. Mais attention, si après avoir développé certaines classes, vous pensez qu'elles peuvent vous être utiles pour d'autres programmes et qu'ainsi vous les mettez dans un nouveau package outils , il vous faudra ajouter les contrôles d'accès public pour accéder en dehors du outils, il vous faudra ajouter les contrôles d'accès public pour accéder en dehors du package outils aux méthodes et variables dont vous avez besoin. Donc, prenez l'habitude de préciser dès le départ les contrôles d'accès des variables et des méthodes.

Initialisations static static

Le corps d'une classe peut comporter un ou plusieurs blocs d'initialisation static. Ces blocs sont exécutés au chargement d'une classe, et permettent d'exécuter des opérations sur les variables static. Ils sont exécutés dans l'ordre de déclaration et peuvent ne manipuler que les variables static déclarées avant le bloc.

class Classe1

{

 

// Déclaration de variables static static int variable1 = 10; static int variable2;

static

{

// Bloc static variable2 = variable1 * 2;

}

//

}

vendredi 11 février 2000

Du C/C++ à Java : Création et utilisation des classes

Page: 7

Sur une même Machine Virtuelle Java, vous pouvez très bien exécuter différentes applets ou applications l'une après l'autre ou en même temps grâce au multi-threading. Par contre, chaque classe ClasseX n'existe qu'en un seul exemplaire pour une Machine Virtuelle, même si ClasseX est utilisée ClasseX n'existe qu'en un seul exemplaire pour une Machine Virtuelle, même si ClasseX est utilisée par différentes applets. Ceci implique que les variables static de ces classes sont uniques pour une Machine Virtuelle, et partagées entre les différentes applets. Donc, attention aux effets de bord ! Si vous modifiez la valeur d'une variable static dans une applet, elle sera modifiée pour toutes les applets amenées à utiliser cette variable. Ceci est à opposer au C, où les variables static sont uniques pour chaque contexte d'exécution d'un programme.

Initialisations d'instancepour chaque contexte d'exécution d'un programme. A partir de Java 1.1, le corps d'une classe peut

A partir de Java 1.1, le corps d'une classe peut comporter un ou plusieurs blocs d'initialisation d'instance. Comme pour les constructeurs, ces blocs sont exécutés à la création d'un nouvel objet dans l'ordre de déclaration.

class Classe1

{

 

// Déclaration d'une variable comptant le nombre d'instances créées static int nombreInstances = 0; // Déclaration d'une variable d'instance int variable1;

{

// Bloc d'instance variable1 = 10; nombreInstances++;

}

//

}

variable1 = 10; nombreInstances++; } // } Déclaration des méthodes Syntaxe Les déclarations des

Déclaration des méthodes

Syntaxe} // } Déclaration des méthodes Les déclarations des méthodes en Java ont une syntaxe

Les déclarations des méthodes en Java ont une syntaxe très proche de celles du C/C++ :

class Classe1

 

{

 

// Déclarations de méthodes

TypeRetour methode1 (TypeParam1 param1Name /*,

, TypeParamN paramNName*/)

{

// Corps de methode1 ()

}

ModifieurDeMethode TypeRetour methode2 (TypeParam1 param1Name /*

*/)

{

// Corps de methode2 ()

}

ModifieurDeMethode TypeRetour methode3 (/*

*/) throws TypeThrowable /*, TypeThrowable2 */

{

// Corps de methode3 ()

}

// Déclaration d'une méthode abstract // Dans ce cas, Classe1 doit être aussi abstract abstract ModifieurDeMethode TypeRetour metho

// Déclaration d'une méthode native native ModifieurDeMethode TypeRetour methode4 (/*

*/);

//

}

TypeRetour peut être :

methode4 (/* */); // } TypeRetour peut être : soit un type (de base, une classe

soit un type (de base, une classe ou une interface) : dans ce cas, la méthode doit utiliser

vendredi 11 février 2000

Du C/C++ à Java : Création et utilisation des classes

Page: 8

l'instruction return suivie d'une valeur du type TypeRetour , pour renvoyer une valeur. Le type peut être une référence à un tableau en utilisant [ ] (par exemple, int [ ] methode ()).

soit void quand la méthode ne renvoie pas de valeur . void quand la méthode ne renvoie pas de valeur.

TypeThrowable doit être une classe dérivée de la classe Throwable. Les exceptions qui sont déclenchées via l'instruction throw doivent avoir leur classe déclarée après la clause throws. Voir le chapitre traitant des exceptions.

ModifieurDeMethode est optionnel et peut être un ou plusieurs des mots-clés suivants :

public, protected ou private : , protected ou private :

Une méthode public est accessible partout où est accessible la classe Classe1 dans laquelle elle

Une méthode public est accessible partout où est accessible la classe Classe1 dans laquelle elle est déclarée. Ce sont les méthodes public que l'utilisateur d'une classe peut appeler.

Une méthode protected est accessible par les autres classes du même package que Classe1 ,

Une méthode protected est accessible par les autres classes du même package que Classe1,

et par les classes dérivées de Classe1 . Une méthode private n'est accessible qu'à l'intérieur

et par les classes dérivées de Classe1. Une méthode private n'est accessible qu'à l'intérieur du corps de Classe1. Les méthodes private sont typiquement des routines internes de calcul pour lesquels il n'y a pas de raison de donner un accès à l'utilisateur d'une classe.

static : Si une méthode est static , c'est une méthode de classe qui ne peut : Si une méthode est static, c'est une méthode de classe qui ne peut utiliser que les variables et les méthodes de Classe1, qui sont déclarées static. L'appel à cette méthode se fait grâce à l'opérateur point (.) en indiquant le nom de la classe ou une référence à un objet

(Classe1.methode () ou objetClasse1.methode ()).

A l'opposé, si une méthode n'est pas static, c'est une méthode d'instance, accessible pour chaque instance objetClasse1 de Classe1 grâce à l'opérateur point (.) , de la manière

objetClasse1.methode ().

Les méthodes déclarées dans le corps d'une interface ne peuvent être static.

final : Une méthode final ne peut pas être outrepassée par les classes dérivant de Classe1 : Une méthode final ne peut pas être outrepassée par les classes dérivant de Classe1.

abstract : Une méthode abstract permet de déclarer une méthode d'instance sans en donner l'implémentation, et : Une méthode abstract permet de déclarer une méthode d'instance sans en donner l'implémentation, et ne peut apparaître qu'au sein d'une classe abstract. Toute classe non abstract dérivée de cette classe, doit implémenter cette méthode, en l'outrepassant. Les méthodes déclarées dans le corps d'une interface sont implicitement abstract et public.

native : Une méthode native est implémentée dans une bibliothèque annexe propre à la plateforme de : Une méthode native est implémentée dans une bibliothèque annexe propre à la plateforme de développement qui peut être développée en C ou en C++ par exemple. Ceci permet de faire appel à certaines fonctionnalités propres à la plateforme ciblée, qui ne seraient pas disponibles en Java. Mais une méthode native n'est pas portable

synchronized : Une méthode synchronized permet d'obtenir un verrou sur l'objet sur lequel elle est appelée : Une méthode synchronized permet d'obtenir un verrou sur l'objet sur lequel elle est appelée (ou sur la classe si la méthode est aussi static). Ce verrou empêche qu'en cas de programmation multi-threads (multitâches), différents threads aient accès de manière simultanée à un même objet. Voir aussi la synchronisation des threads.

Le contrôle d'accès à une méthode est soit public, soit protected, soit private. Leur utilisation est la même que pour les variables. Dans la plupart des cas, il est conseillé de ne rendre public que les méthodes et les constantes (variables final static), dont a besoin l'utilisateur d'une classe. Les autres variables sont déclarées private voir friendly ou protected et sont rendues accessibles si besoin est, par des méthodes public permettant de les interroger et de les modifier (get () et set ()). Ceci permet de cacher aux utilisateurs d'une classe ses variables et de vérifier éventuellement les conditions pour modifier une variable. Ce style de programmation est largement utilisé dans la bibliothèque Java.

Pour les méthodes non abstract et non native, le corps de la méthode est un bloc, comportant une suite d'instructions. A l'intérieur de la déclaration d'une classe Classe1, l'appel à toute méthode methode () de Classe1