0% ont trouvé ce document utile (0 vote)
7 vues102 pages

Introduction à la programmation Java

Ce document présente un cours sur la programmation en Java, couvrant des concepts clés tels que l'héritage, les interfaces, le polymorphisme, et la programmation client/serveur. Il explique également les étapes de compilation et d'exécution d'un programme Java, ainsi que des exemples pratiques de code. Enfin, il aborde des notions fondamentales comme les variables, les conditions, les boucles et la manipulation d'objets.

Transféré par

herbert andersone Ki
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues102 pages

Introduction à la programmation Java

Ce document présente un cours sur la programmation en Java, couvrant des concepts clés tels que l'héritage, les interfaces, le polymorphisme, et la programmation client/serveur. Il explique également les étapes de compilation et d'exécution d'un programme Java, ainsi que des exemples pratiques de code. Enfin, il aborde des notions fondamentales comme les variables, les conditions, les boucles et la manipulation d'objets.

Transféré par

herbert andersone Ki
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université Aube Nouvelle

Rappel sur la programmation


(Java)

ELN4/ Laciné KABRE


Année Scolaire 2021-2022
PLAN(cours 24 H)
• Rappel sur les principes de la programmation en java
• Héritage, interface et polymorphisme +TP
• Architecture client/serveur
• La classe [Link]
• Les sockets en java
• Les flux entrée/sortie (flot de données)
• Les protocoles de communication et Java(TCP,UDP)
• Les services Dns et java
• Les threads en java
• Travaux pratique: mise en ouevre d’un programme
client/serveur
• Évaluation
Les étapes
• Écrire un programme dans un langage (e.g.
Java)
• Compiler le programme
– Traduire le programme dans un langage de bas
niveau (machine)
– [éventuellement optimisation]
– Produire un programme (code) exécutable
• Exécution
– Charger le programme en mémoire (typiquement en
tapant le nom du programme exécutable)
– Exécution
Termes
• Programme source, code source
– Programme écrit dans un langage
• Code machine, code exécutable
– Programme dans un langage de machine, directement
exécutable par la machine
• Compilation (compilateur)
– Traduire un code source en code exécutable
• Interpréteur
– Certains langages n’ont pas besoin d’être traduit en code
machine
– La machine effectue la traduction sur la volée (on the fly),
instruction par instruction, et l’exécute
– E.g. Prolog, JavaScript
Programmation
• Syntaxe d’un langage
– Comment formuler une instruction correcte
(grammaire)
• Sémantique
– Ce que l’instruction réalise
• Erreur
– de compilation: typiquement reliée à la syntaxe
– d’exécution: sémantique (souvent plus difficile à
détecter et corriger)
Java
• Langage orienté objet
– Notions de classes, héritage, …
• Beaucoup d’outils disponibles (packages)
– JDK (Java Development Kit)
• Historique
– Sun Microsystems
– 1991: conception d'un langage indépendant du
hardware
– 1994: browser de HotJava, applets
– 1996: Microsoft et Netscape commencent à soutenir
– 1998: l‘édition Java 2: plus stable, énorme librairie
Java
• Compiler un programme en Byte Code
– Byte code: indépendant de la machine
– Interprété par la machine

• javac [Link]
– Génère [Link]
• java programme
– Lance le programme
Écrire un programme
public class Hello Nom de la classe
{
public static void main(String[] args) Une méthode
{
// afficher une salutation commentaire
[Link]("Hello, World!"); Une instruction
}
}

• Stocker ce programme dans le fichier [Link]


Lancer un programme
• Compilation
– javac [Link]
– Ceci génère [Link]
• Lancer l’exécution
– java Hello
• Résultat de l’exécution
Hello, World!
Éléments de base dans un
programme
• mots réservés: public class static void
• identificateurs: args Hello main String System out println
– main String System out println: ont une fonction prédéfinie
• littéral: "Hello World!"
• ponctuation: { accolade } [ crochet ] ( parenthèse )
• Commentaires
– // note importante pour comprendre cette partie du code
– /* … commentaires sur plusieurs lignes
*/
Classe
• Un programme en Java est défini comme une classe
• Dans une classe:
– attributs, méthodes
• L'en-tête de la classe
public class NomDeClasse
– public = tout le monde peut utiliser cette classe
– class = unité de base des programmes OO
• Une classe par fichier
• La classe NomDeClasse doit être dans le fichier
[Link]
• Si plus d’une classe dans un fichier .java, javac génère
des fichiers .class séparés pour chaque classe
Classe
• Le corps
{

}
• Contient les attributs et les méthodes
– Attributs: pour stocker les informations de la classe
– Méthodes: pour définir ses comportement, ses traitements, …
• Conventions et habitudes
– nom de classe: NomDeClasse
– indentation de { }
– indentation de ...
– Les indentations correctes ne seront pas toujours suivies dans ces
notes pour des raisons de contraintes d’espace par PowerPoint…
Méthode: en-tête
• L'en-tête:
public static void main(String[] args)
– main: nom de méthode
– void: aucune sortie (ne retourne rien)
– String[] args: le paramètre (entrée)
• String[]: le type du paramètre
• args: le nom du paramètre
• Conventions
– nomDeParametre
– nomDeMethode
– nomDAttributs
– nomDObjet
Méthode: corps
• Le corps:
{
// afficher une salutation
[Link]("Hello, World!");
}
• contient une séquence d'instructions, délimitée
par { }
– // afficher une salutation : commentaire
– [Link]("Hello, World!"): appel de méthode
• les instructions sont terminées par le caractère ;
Méthode: corps
• En général:
[Link](<liste des paramètres>)
– [Link]: l'objet qui représente le terminal (l’écran)
– println: la méthode qui imprime son paramètre (+ une fin
de ligne) sur un stream (écran)
[Link]("Hello, World!");
– "Hello, World!": le paramètre de println
• La méthode main
– “java Hello” exécute la méthode main dans la classe
Hello
– main est la méthode exécutée automatiquement à
l’invocation du programme (avec le nom de la classe) qui
la contient
Variable
• Variable: contient une valeur
– Nom de variable
– Valeur contenue dans la variable
– Type de valeur contenue
• int: entier, long: entier avec plus de capacité
• Integer: classe entier, avec des méthodes
• float: nombre réel avec point flottant, double: double précision
• String: chaîne de caractères ("Hello, World!")
• char: un caractère en Unicode (‘a’, ‘$’, ‘é’, …)
• booleen: true/false
• Définition générale
Type nomDeVariable;

Exemple: int age;


Type: int 0
Nom: age
Modifier la valeur
• Affecter une valeur à une variable
• E.g. age = 25;
Type: int 25

Nom: age

• Erreur si: age = "vingt cinq";


– Type de valeur incompatible avec la variable
Condition et test
• Une condition correspond à vrai ou faux
• E.g. (age < 50)
• Tester une condition:
if condition A; else B;
– si condition est satisfaite, alors on fait A;
– sinon, on fait B
– E.g. if (age < 65)
[Link]("jeune");
else
[Link]("vieux");
Tests
• Pour les valeurs primitives (int, double, …)
– x == y : x et y ont la même valeur?
– x > y, x >= y, x != y, …
– Attention: (== != =)
• Pour les références à un objet
– x == y : x et y pointent vers le même objet?
– [Link](y): retourne -1, 0 ou 1 selon
l’ordre entre le contenu des objets référés par
x et y
Un exemple de test
public class Salutation
{ args[0]: premier argument
public static void main(String[] args) après le nom
{
int age; [Link](args[0]):
age = [Link](args[0]); reconnaître et transmettre
// afficher une salutation selon l’age la valeur entière qu’il
[Link](“Salut, le "); représente
if (age < 65)
[Link](“jeune!");
print: sans retour à la ligne
else
println: avec retour à la ligne
[Link](“vieux!");
}
}
• Utilisation:
– java Salutation 20 // ici, args[0] = "20"
Salut le jeune!
– java Salutation 70
Salut le vieux!
Attention: Attention:
un ; après le for( ), itère sur ‘i’ n’est déclarée ici qu’à
la condition, et ‘somme’ ne sera
incrémentée qu’une seule fois Boucle l’intérieur de la boucle for

• Pour traiter beaucoup de données en série


• Schémas Schéma d’exécution
– Boucle for
somme=0;
int somme = 0;
for (int i = 0; i<10; i++) somme = somme + i;
– Boucle while i=0;
int somme = 0;
int i = 0; i<10?
while (i<10) { somme = somme + i; oui
i++; non somme=somme+i;
} i++;
• Que font ces deux boucles?

i: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

somme: 0 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, sortie


Schéma d’exécution
Boucle somme=0;

• do A while (condition) i=15;


– Faire A au moins une fois
– Tester la condition pour savoir s’il faut refaire A
i<10?
int somme = 0;
oui
int i = 15;
while (i<10) { somme = somme + i; non somme=somme+i;
i++; i++;
}
somme = 0
Schéma d’exécution
somme=0;
int somme = 0;
int i = 15;
do { somme = somme + i; i=15;
i++;
} somme=somme+i;
while (i<10) i++;

somme = 15 i<10? oui


non
Exemple
• Calcul des intérêts
• Étant donné le solde initial, le solde souhaité et
le taux d'intérêt, combien d'années seront
nécessaires pour atteindre le solde souhaité
– au lieu d'utiliser une formule, on simule le calcul
• Algorithme (pseudocode):
1. ans = 0;
2. WHILE solde n'atteint pas le solde souhaité
3. incrémenter ans
4. ajouter l'intérêt au solde
Programme
public void nombreAnnees (double balance, double targetBalance,
double rate ) {
int years = 0;
while (balance < targetBalance) {
years++; years = years + 1;
double interest = balance * rate;
balance += interest; balance = balance + interest;
}
[Link](years + " years are needed");
}

Appel de la méthode:
nombreAnnees(1000, 1500, 0.05)
Résultat:
56 years are needed
Factorielle
public class Factorielle
{ Si une méthode (ou un
public static double factorielle(int x) {
attribut, une variable) de la
if (x < 0) return 0.0;
double fact = 1.0; classe est utilisée par la
while (x > 1) { méthode main (static), il
fact = fact * x; faut qu’il soit aussi static.
x = x - 1;
}
return fact;
}

public static void main(String[] args) {


int entree = [Link](args[0]);
double resultat = factorielle(entree);
[Link](resultat);
}
}
Attention:
Array [Link]
Tableau Array list
String
[Link]()
[Link]()

• Pour stocker une série de données de même nature


• Déclaration
int [] nombre; // une série de valeurs int dans le tableau nommé nombre
String [][] etiquette; // un tableau à deux dimensions de valeurs String
• Création
nombre = new int[10]; // crée les cases nombre[0] à nombre[9]
etiquette = new String[3][5]; // crée etiquette[0][0] à etiquette[2][4]
int[] primes = {1, 2, 3, 5, 7, 7+4}; // déclare, crée de la bonne taille et initialise
• Utilisation
nombre[0] = 4;
for (int i=1; i<[Link]; i++) nombre[i]=nombre[i]+1;
etiquette[2][3] = "un texte";
String texte = etiquette[2][3];
String
• Structure à deux parties:
– En-tête: nom, longueur, …
– Corps: les caractères
etiquette[2][3]
u n t e x t e
texte
– String texte = etiquette[2][3];
– Le contenu du corps ne peut pas être changé, une fois qu’il
est créé (String est immutable)
– Par contre, on peut pointer/référer etiquette[2][3] à un autre
corps: etiquette[2][3] = "autre texte";

etiquette[2][3] a u t r e t e x t e

texte u n t e x t e
Classe et Objet
• Classe: moule pour fabriquer des objets
• Objet: élément concret produit par le moule
• Définition de classe:
class NomClasse { class Personne {
Attributs; String nom;
Méthodes; int AnneeNaissance;
} public int age() {…}
}

• Une classe regroupe un ensemble d’objets


(instances)
Objet
• Structure à deux parties:
– Référence
– Corps
• Les étapes
– Déclaration de la classe (e.g. Personne)
– À l’endroit où on utilise:
• Déclarer une référence du type de la classe
• Créer une instance d’objet (new)
• Manipuler l’objet
Exemple
public class Personne {
public String nom;
public int anneeNaissance;
public int age() {return 2008 - anneeNaissance; }
}
class Utilisation {
public static void main(String[] args) {
Déclaration de référence
Personne qui;
qui = new Personne(); Création d’une instance
[Link] = "Pierre";
[Link] = 1980; Manipulation de l’instance
[Link]([Link]()); référée par la référence
}
}
qui nom: "Pierre"
anneeNaissance: 1980
Personne:
age()
Un autre exemple
class Circle {
public double x, y; // coordonnées du centre ‘r’ est inaccessible de
private double r; // rayon du cercle l’extérieur de la classe
public Circle(double r) {
this.r = r;
} constructeur
public double area() {
return 3.14159 * r * r;
}
} [Link]
public class MonPremierProgramme {
public static void main(String[] args) {
Circle c; // c est une référence sur un objet de type Circle, pas encore un objet
c = new Circle(5.0); // c référence maintenant un objet alloué en mémoire
c.x = c.y = 10; // ces valeurs sont stockées dans le corps de l’objet
[Link]("Aire de c :" + [Link]());
}
}
Constructeurs d’une classe
• Un constructeur est une façon de fabriquer une instance
• Une classe peut posséder plusieurs constructeurs
• Si aucun constructeur n’est déclaré par le programmeur, alors on a la version
par défaut: NomClasse()
• Plusieurs versions d’une méthode: surcharge (overloading)

class Circle {
public double x, y; // coordonnées du centre
private double r; // rayon du cercle
public Circle(double r) { this: réfère à l’objet courant
this.r = r;
}
public Circle(double a, double b, double c) {
x = a; y = b; r = c;
}
} Le constructeur
public class Personne { Personne() est
public String nom; déclaré par défaut
public int anneeNaissance;
public int age() { return 2008 - anneeNaissance; }
}
Manipulation des références
class Circle {
public double x, y; // coordonnées du centre
private double r; // rayon du cercle
public Circle(double r) {
this.r = r;
}
public Circle(double a, double b, double c) {
x = a; y = b; r = c;
}
}
// Dans une méthode, par exemple, main:
Circle c1, c2;
c1 = new Circle(2.0, 3.0, 4.0);
c2 = c1; // c2 et c1 pointent vers le même objet
c2.r = c2.r – 1; // l’objet a le rayon réduit
c1 = new Circle(2.0); // c1 point vers un autre objet, mais c2 ne change pas
c1.x = 2.0; // on modifie le deuxième objet
c2 = c1; // maintenant, c2 pointe vers le 2ième objet aussi

• Que faire du premier objet?


– Aucune référence ne pointe vers lui
– L’objet est perdu et inutilisable
– Ramasse miette (garbage collector) va récupérer l’espace occupé par l’objet
• Comparaison des références
– (c1 == c2): est-ce que c1 et c2 pointent vers le même objet?
Illustration
c1
null
1. Cercle c1, c2; 1 c2
x: 2.0
c1 y: 3.0
2. c1 = new Cercle(2.0, 3.0, 4.0); 2 r: 4.0
c2
x: 2.0
null
c1 y: 3.0
3. c2 = c1; 3 r: 4.0
c2
null x: 2.0
c1 y: 3.0
4. c2.r = c2.r – 1; 4 r: 3.0
c2
null
x: 2.0
c1 y: 3.0
5. c1 = new Cercle(2.0); 5 r: 3.0

x: 2.0 c2
x: 0.0
c1 y: 3.0 y: 0.0
r: 3.0
6. c1.x = 2.0; 6 c2
r: 2.0

x: 2.0 x: 2.0
y: 0.0 c1 y: 3.0
r: 2.0 7. c2 = c1; 7 r: 3.0
c2
x: 2.0
y: 0.0
r: 2.0
Manipulation des objets
• Forme générale
réfé[Link]: réfère à un attribut de l’objet
référence.méthode( ): réfère à une méthode de l’objet
• static: associé à une classe
– Attribut (variable) statique: si on le change, ça change la
valeur pour tous les objets de la classe
– Méthode statique: on la réfère à partir de la classe
• Classe.méthode
• E.g. [Link](2.6): Appel à la méthode sqrt de la classe Math
• Constante: [Link]
– Dans une classe: static final float PI = 3.14159265358979;
– Une constante n’est pas modifiable
Classes et Héritage
• Héritage
– Les enfants héritent les propriétés du parent
– Classe enfant (sous-classe) possède systématiquement les attributs et
les méthodes de la classe parent (super-classe)
– Héritage simple (une seule super-classe au plus)
• E.g.
class Personne {
String nom;
int anneeNaissance;
public int age() { return 2008 - anneeNaissance; }
} Personne
class Etudiant extends Personne {
String [] cours;
String niveau; Etudiant Professeur
String ecole;

} Gradue
• Ce qui est disponible dans Etudiant:
– nom, anneeNaissance, age(),
– cours, niveau, ecole, …
Principe
• Définir les propriétés communes dans la classe
supérieure
• Définir les propriétés spécifiques dans la sous-
classe
• Regrouper les objets le plus possible
• Les objets d’une sous-classe sont aussi des
objets de la super-classe
• La classe dont tous les objets appartiennent:
Object
• Tester l’appartenance d’un objet dans une
classe: instanceof (e.g. qui instanceof Etudiant)
Exemple
public class Ellipse {
public double r1, r2;
public Ellipse(double r1, double r2) { this.r1 = r1; this.r2 = r2; }
public double area() {...}
}
super(r,r): constructeur de la
final class Circle extends Ellipse { super-classe
public Circle(double r) {super(r, r);}
public double getRadius() {return r1;}
}
// Dans une méthode final assure qu’aucune autre
Ellipse e = new Ellipse(2.0, 4.0); classe n’héritera de Circle
Circle c = new Circle(2.0);
[Link]("Aire de e: " + [Link]() + ", Aire de c: " + [Link]());
[Link]((e instanceof Circle)); // false
[Link]((e instanceof Ellipse)); // true
[Link]((c instanceof Circle)); // true
[Link]((c instanceof Ellipse)); // true (car Circle dérive de Ellipse)
e = c;
[Link]((e instanceof Circle)); // true
[Link]((e instanceof Ellipse)); // true
int r = [Link](); // erreur: méthode getRadius n’est pas trouvée dans la classe Ellipse
c = e; // erreur: type incompatible pour = Doit utiliser un cast explicite
Casting
• La classe de la référence détermine ce qui est disponible (a priori)
• E.g.
class A {
public void meth() { [Link]("Salut"); }
}
class B extends A {
int var;
}

A a = new A();
B b = new B();
[Link](); // OK
[Link](); // OK, héritée
[Link] = 1; // OK
[Link] = 2; // erreur
a = b;
[Link] = 2; // erreur: var n’est a priori pas disponible pour une classe A
((B) a).var = 2; // OK, casting

• Casting: transforme une référence d’une super-classe à celle d’une sous-classe


• Condition: l’objet référé est bien de la sous-classe
Surcharge de méthode
class A {
public void meth() {[Link]("Salut"); }
}
class B extends A {
public void meth(String nom) {
[Link]("Salut" +nom);
}
}
• Dans la sous-classe: une version additionnelle
– Signature de méthode: nom+type de paramètres
– Surcharge: créer une méthode ayant une autre signature
Overriding: écrasement
• Par défaut, une méthode est héritée par une sous-classe
• Mais on peut redéfinir la méthode dans la sous-classe (avec la même
signature)
• Les objets de la sous-classe ne possèdent que la nouvelle version de la
méthode
• E.g.
class A {
public void meth() {[Link]("Salut");}
}
class B extends A {
public void meth() {[Link]("Hello");}
}

A a = new A();
B b = new B();
[Link](); // Salut
[Link](); // Hello
a = b; // a réfère à un objet de classe B
[Link](); // Hello. Même si la référence est de classe A, l’objet est de classe B
Classe abstraite
• Certains éléments peuvent être manquants dans une
classe, ou la classe peut être trop abstraite pour
correspondre à un objet concret
• Classe abstraite
– Une classe non complétée ou une classe
conceptuellement trop abstraite
• Classe Shape
– on ne connaît pas la forme exacte, donc impossible de créer un
objet
– cependant, on peut savoir que chaque Shape peut être
dessinée
abstract class Shape {
abstract void draw();
}
Interface
• Interface
– Un ensemble de méthodes (comportements) exigées
– Une classe peut se déclarer conforme à (implanter) une
interface: dans ce cas, elle doit implanter toutes les méthodes
exigées
• E.g.
public abstract interface Inter {
public abstract int carre(int a);
public abstract void imprimer();
}
class X implements Inter {
public int carre(int a) { return a*a; }
public void imprimer() {[Link]("des informations"); }
}
Exemple
abstract class Shape { public abstract double perimeter(); }
interface Drawable { public void draw(); }
class Circle extends Shape implements Drawable, Serializable {
public double perimeter() { return 2 * [Link] * r ; }
public void draw() {...}
}
class Rectangle extends Shape implements Drawable, Serializable {
public double perimeter() { return 2 * (height + width); }
public void draw() {...}
}
...
Drawable[] drawables = {new Circle(2), new Rectangle(2,3),
new Circle(5)};
for(int i=0; i<[Link]; i++)
drawables[i].draw();
Utilité de l’interface
• Permet de savoir qu’une classe contient
les implantations de certaines méthodes
• On peut utiliser ces méthodes sans
connaître les détails de leur implantation
• Souvent utilisée pour des types abstraits
de données (e.g. pile, queue, …)
Package
• On organise les classes et les outils selon leurs
fonctionnalités et les objets qu’elles manipulent
• Les classes qui traitent les mêmes objets: package
• Exemple:
– Les classes pour traiter l’interface graphique sont dans le
package awt
• Organisation des packages
– Hiérarchie java javax
• [Link]
• [Link] awt swing
• [Link]
• … event
classes

classes
Utiliser les packages existants
• Au début d’un fichier, importer les classes d’un
package
• import [Link].*;
– Importer toutes les classes du package [Link]
(reliées aux fenêtres)
• import [Link].*;
– Importer toutes les classes du package
[Link] (reliées au traitement d’événements)
Exception
• Quand un cas non prévu survient, il est possible de le
capter et le traiter par le mécanisme d’Exception
– Si on capte et traite une exception, le programme peut continuer
à se dérouler
– Sinon, le programme sort de l’exécution avec un message
d’erreur
– Exemple d’exception: division par 0, ouvrir un fichier qui n’existe
pas, …
• Mécanisme de traitement d’exception
– Définir des classes d’exception
• Exception
– IOException
» EOFException, …
– Utiliser try-catch pour capter et traiter des exceptions
Hiérarchie des classes d’exceptions
Attraper (catch) une exception
• Attraper une exception pour la traiter
try { Bloc où une exception
statements
: peut se générer
:
} catch (ExceptionClass1 object) {
statements
:
:
} catch (ExceptionClass2 object) {
statements Blocs pour attraper
: les exceptions
:
}…
Exemple
public static void ouvrir_fichier(String nom) {
try {
ouverture
input = new BufferedReader(new FileReader(nom));
d’un fichier
}
catch (IOException e) {
[Link]("Impossible d'ouvrir le fichier d'entree.\n" +
[Link]());
[Link](1);
}
}

try: on tente d’effectuer des opérations


catch: si une exception de tel type survient au cours, on la traite de cette façon
finally
• Souvent combiné avec catch
try
{
statements
...
}
catch (ExceptionClass exceptionObject)
{
statements
...
} Même si une exception est
finally attrapée, finally sera toujours
{ exécuté
statements
... Utile pour s’assurer de certaine
} sécurité (cleanup)
Fichier
• Unité de stockage des données, sur
disque dur
• Stockage permanent (vs. en mémoire
vive)
• Un fichier contient un ensemble
d’enregistrements CPU

• Traitement
Mémoire
vive
fichier

tampon
Fichier en Java
• Stream: une suite de données (octets ou
caractères)
Opérations typiques
• Lecture: Établir un canal de
communication
– Ouvrir un stream
– Lire tant qu’il y a des données
– Fermer le stream Relâcher les
• Écriture ressources allouées

– Ouvrir un stream (ou créer un fichier)


– Écrire des données tant qu’il y en a
– Fermer le stream
Écrire ce qu’il est dans le
tampon, et relâcher les
ressources allouées
Exemple
public static void main(String[] args) { public static void traiter_fichier() {
ouvrir_fichier("liste_mots"); String ligne;
traiter_fichier(); try { // catch EOFException
fermer_fichier();
ligne = [Link]();
}
while (ligne != null) {
public static void ouvrir_fichier(String nom) { [Link](ligne);
try { ligne = [Link]();
input = new BufferedReader( }
new FileReader(nom)); }
}
public static void fermer_fichier() {
catch (IOException e) {
try {
[Link]("Impossible
d'ouvrir le fichier d'entree.\n" + [Link]();
[Link]()); [Link](0);
[Link](1); }
} catch (IOException e) {
} [Link]("Impossible de
fermer les fichiers.\n" + [Link]());
}
}
Deux unités de base
• Caractère (2 octets=16 bits) ou octet (8
bits)
• Deux hiérarchies de classes similaires
(mais en parallèle)
Hiérarchies
• En haut des hiérarchies pour stream de
caractères: 2 classes abstraites
• Reader
[Link]
[Link]
• Writer
[Link]
[Link]
• Implantent une partie des méthodes pour lire et
écrire des caractères de 16 bits (2 octets)
Hiérarchie de stream de caractères
• Les sous-classes de Reader

simple pré-traitement
• Chaque sous-classe ajoute des méthodes
Hiérarchie de stream de caractères
• Les sous-classes de Writer
Hiérarchies byte stream

[Link]
Hiérarchie de byte stream

[Link]

[Link]
Exemple
• Utiliser FileReader et FileWriter
• Méthodes simples disponibles:
– int read(), int read(CharBuffer []), write(int), ..
– Exemple: copier un fichier caractère par caractère (comme un int)

import [Link].*;
public class Copy {
public static void main(String[] args) throws IOException {
File inputFile = new File("[Link]");
File outputFile = new File("[Link]");

FileReader in = new FileReader(inputFile);


FileWriter out = new FileWriter(outputFile);
int c;
while ((c = [Link]()) != -1) [Link](c); Fin de fichier: -1
[Link]();
[Link]();
}
}
– Méthodes limitées
Augmenter les possibilités: wrap
• Créer un stream en se basant sur un autre:
FileReader in = new FileReader(new File("[Link]"));
• Avantage:
– Obtenir plus de méthodes
• Dans File: les méthodes pour gérer les fichiers (delete(),
getPath(), …) mais pas de méthode pour la lecture
• Dans FileReader: les méthodes de base pour la lecture
– Un autre exemple:
DataOutputStream out = new DataOutputStream(
new FileOutputStream("[Link]"));
• FileOutputStream: écrire des bytes
• DataOutputStream: méthodes pour les types de données de base:
write(int), writeBoolean(boolean), writeChar(int), writeDouble(double),
writeFloat(float), …
Sérialiser
• Convertir un objet (avec une structure) en une
suite de données dans un fichier
• Reconvertir du fichier en un objet
• Utilisation: avec ObjectOutputStream

Employee[] staff = new Employee[3];


ObjectOutputStream out = new ObjectOutputStream(new
FileOutputStream("[Link]"));
[Link](staff);
[Link]();
Sérialiser
• Utilité de sérialisation
– Stocker un objet dans un fichier
– Créer une copie d’objet en mémoire
– Transmettre un objet à distance
• Devient une transmission de String
Interface graphique
• Comment créer des fenêtres?
• Comment gérer les interactions avec
l’utilisateur?
– Traiter des événements
Généralité
Programme

Interface utilisateur

Rôles d’une interface utilisateur:


• montrer le résultat de l’exécution
• permettre à l’utilisateur d’interagir
Exemple simple
import [Link].*; Importer le package
public class DisplayFrame {
Créer un
public static void main (String[] args) {
objet
JFrame f = new JFrame("FrameDemo");
//… components are added to its content frame.
[Link](300,200); Définir la taille
[Link](JFrame.EXIT_ON_CLOSE);
[Link](true);
}
} afficher
Afficher une interface
• Importer le package (les classes)
– Les classes sont regroupées en package
– Importer un package = importer toutes les classes du
package
– import [Link].*;
• Créer une fenêtre graphique (JFrame, …)
• Mettre les paramètres (taille, …)
• Afficher
• Différence:
– import [Link].*; les classes dans awt
– import [Link].*; les classes dans event
Insérer des éléments dans la
fenêtre
• Composition d’une fenêtre JFrame

Structure interne de Jframe


Typiquement, on insère des éléments graphiques dans ContentPane
Ajouter des composants dans une
fenêtre
import [Link].*;
public class DisplayFrame {
public static void main (String[] args) { Haut niveau

JFrame f = new JFrame("FrameDemo"); Composante


JLabel label = new JLabel("Hello World"); de base
JPanel p = (JPanel)[Link](); Niveau
[Link](label); intermédiaire
[Link](300,200); //alternative: [Link]();
[Link](JFrame.EXIT_ON_CLOSE);
[Link](true);
}
}
Composer une fenêtre
• Créer une fenêtre (1)
• Créer un ou des composants intermédiaires (2)
– Pour JFrame, un JPanel est associé implicitement
(ContentPane)
• Créer des composants de base (3)

• Insérer (3) dans (2)


• Insérer (2) dans (1)

• Afficher
Composants de base
pour obtenir des données
• JButton
• JCheckBox a toggled on/off button displaying state to user.
• JRadioButton a toggled on/off button displaying its state to user.
• JComboBox a drop-down list with optional editable text field. The
user can key in a value or select a value from drop-down list.
• Jlist allows a user to select one or more items from a list.
• Jmenu popup list of items from which the user can select.
• Jslider lets user select a value by sliding a knob.
• JTextField area for entering a single line of input.
Composants de base
pour afficher l’information
• Jlabel contains text string, an image, or both.

• JProgressBar communicates progress of some work.

• JToolTip describes purpose of another component.


• Jtree a component that displays hierarchical data in outline form.

• Jtable a component user to edit and display data in a two-dimensional


grid.

• JTextArea, JTextPane, JEditorPane


– define multi-line areas for displaying, entering, and editing text.
Swing components: Illustration
Définir ses propres classes
01: import [Link];
02: import [Link].Graphics2D;
03: import [Link];
04: import [Link];
05: import [Link];
06:
07: /**
08: A component that draws two rectangles.
09: */
10: public class RectangleComponent extends JComponent
11: {
12: public void paintComponent (Graphics g)
13: {
14: // Recover Graphics2D
15: Graphics2D g2 = (Graphics2D) g;
16:
17: // Construct a rectangle and draw it
18: Rectangle box = new Rectangle(5, 10, 20, 30);
19: [Link](box);
20:
21: // Move rectangle 15 units to the right and 25 units down
22: [Link](15, 25);
23:
24: // Draw moved rectangle
25: [Link](box);
26: }
27: }
Créer et voir l’objet
01: import [Link];
02:
03: public class RectangleViewer
04: {
05: public static void main(String[] args)
06: {
07: JFrame frame = new JFrame();
08:
09: final int FRAME_WIDTH = 300;
10: final int FRAME_HEIGHT = 400;
11:
12: [Link](FRAME_WIDTH, FRAME_HEIGHT);
13: [Link]("Two rectangles");
14: [Link](JFrame.EXIT_ON_CLOSE);
15:
16: RectangleComponent component = new RectangleComponent();
17: [Link](component);
18:
19: [Link](true);
20: }
21: }
Alternative de JFrame: JApplet
• Applet = une fenêtre dans un navigateur
• Permet à n’importe quel utilisateur de
lancer une application
• Plus de contrainte de sécurité (pas
d’écriture)
• Programme englobé dans une page Web
Afficher deux Rectangles
01: import [Link];
02: import [Link].Graphics2D;
03: import [Link];
04: import [Link];
05:
06: /**
07: An applet that draws two rectangles.
08: */
09: public class RectangleApplet extends JApplet
10: {
Au lancement, paint(…)
11: public void paint (Graphics g) est automatiquement
12: {
13: // Prepare for extended graphics
exécutée
14: Graphics2D g2 = (Graphics2D) g;
15: Pour ré-exécuter: repaint()
16: // Construct a rectangle and draw it
17: Rectangle box = new Rectangle(5, 10, 20, 30);
18: [Link](box);
19:
20: // Move rectangle 15 units to the right and 25 units down
21: [Link](15, 25);
22:
23: // Draw moved rectangle
24: [Link](box);
25: }
26: }
27:
Lancer un Applet
À partir d’une page Web:
<html>
<head>
<title>Two rectangles</title>
</head>
<body>
<p>Here is my <i>first applet</i>:</p>
<applet code="[Link]" width="300" height="400">
</applet>
</body>
</html>
Différence
Événement
• Les événements sont des objets
• Sous-classes de la class abstraite [Link]
• Les composants génèrent des événements
• Événements: chaque interaction de l’utilisateur sur un
composant génère un événement
– bouger la souris
– cliquer sur un bouton
– fermer une fenêtre
– …
• Un événement contient des informations: source, type
d’événement, …
public Object getSource();
– Utile pour détecter d’où provient l’événement
Propagation et traitement des
événements
Composant a: Objet b qui capte
Génère un e l’événement de
événement e l’objet a, du type T:
du type T Traitement de e

• Les événements sont générés et propagés


• Certains autres objets sont capables de capter des événements des types
spécifiés, provenant de ces composants
– b écoute les événements du type T venant de a
– b est un listener de a
• On peut activer le traitement suite à la capture d’un événement
– Le traitement lancé par l’objet b

• Programmation par événement


– Le programme réagit aux événements
Listener et Event handler: donner la
capacité d’entendre un événement
• Listener: Un objet est intéressé à écouter l’événement
produit (être signalé quand il y a un événement)
• Listener doit implanter l’interface event listener
interface associée à chaque type d’événement
• Event Handler: le programme qui lance un traitement
suite à un événement
• Exemple classe
Type d’événement écouté
public class Capteur implements ActionListener
{
public void actionPerformed(ActionEvent e) { … }
} Action déclenchée
// Liens d'ecoute
Exemple: changer la couleur [Link](this);
import [Link].*;
[Link](this);
import [Link].*;
}
import [Link].*;
// affichage
public class JAppletExample public void paint(Graphics g)
extends JApplet {
implements ActionListener [Link](g);
{ [Link](couleur);
private JButton rouge, bleu; [Link]("Choisir une couleur.",
private Color couleur = [Link]; 100, 100);
}
public void init()
{ // methode qui reagit aux evenements
rouge = new JButton("Rouge"); public void actionPerformed
bleu = new JButton("Bleu"); (ActionEvent e)
{
Container content = if ([Link]() == rouge)
getContentPane(); couleur=[Link];
[Link](new else if ([Link]() == bleu) couleur =
FlowLayout()); [Link];
[Link](rouge); repaint(); //appeler paint(...) pour
repaindre
[Link](bleu);
}
Types d’événements et écouteur
• ActionEvent, ActionListener:
– Button, List, TextField, MenuItem, JButton, …
– public void actionPerformed(ActionEvent)
• AdjustmentEvent, AdjustmentListener
– Scrollbar, ScrollPane, …
– public void
adjustmentValueChanged(AdjustmentEvent)
• ItemEvent, ItemListener
– Checkbox, CheckboxMenuItem, Choice, List
– public void itemStateChanged(ItemEvent)
Types d’événements et écouteur
• MouseEvent
– Souris
– MouseListener
• public void mouseDragged(MouseEvent)
• public void mouseMoved(MouseEvent)
– MouseMotionListener
• public void mousePressed(MouseEvent)
• public void mouseReleased(MouseEvent)
• public void mouseEntered(MouseEvent)
• public void mouseExited(MouseEvent)
• public void mouseClicked(MouseEvent)
• TextEvent, TextListener
– TextComponent et ses sous-classes
– public void textValueChanged(TextEvent)
Télécommunication en Java
• Communication sur l’Internet
• Connexion dans Java
Internet
• Stockage de données (informations)
– Serveur
– Client
• Connexion
– Connexion entre un client et un serveur
– Un canal de communication
• Transmission
– Protocole:
• définit les commandes
• le format de données transmises
Schéma de communication typique
• Serveur:
– Il est lancé, en attente de recevoir un message (commande)
• Client
– Demande à établir une connexion avec le serveur
– Transmet une commande au serveur
• Serveur
– Reçoit la commande
– Traite la commande
– Renvoie la réponse
• Client
– Reçoit la réponse
– Continue à traiter, transmet une autre commande, …
Établir une connexion
• Identifier l’adresse du serveur à laquelle envoyer une
requête de connexion
• Adresse:
– Adresse IP (Internet Protocol): 4 octets (4 entiers 0-255)
– [Link]
• Domain Naming Service (DNS): le nom correspondant à
une adresse IP
– Ss_domaine. sous_domaine . domaine
– [Link], [Link]
– Traduction de DNS en adresse IP: par un serveur DNS
• Serveur
– Prêt à recevoir des requêtes des types préétablis
– E.g. GET
Protocole
• Un serveur est établi pour communiquer selon un
protocole
• Canal de communication (numéro de port)
– 0 and 65,535
– HTTP: par défaut: 80
• Serveur Web: prêt à recevoir les requêtes HTTP:
– Adresse d’un document:
• Uniform Resource Locator (URL)
• [Link]/[Link]
– Commande
– GET /[Link] HTTP/1.0 (suivie d’une ligne blanche)
– [Link]
Protocole HTTP
Commande Signification
• GET Return the requested item
• HEAD Request only the header
information of an item
• OPTIONS Request communications
options of an item
• POST Supply input to a server-side
command and return the result
• PUT Store an item on the server
• DELETE Delete an item on the server
• TRACE Trace server communication
En Java
• Établir une connexion avec un serveur Web
– Créer un socket entre Client et Serveur
– Socket s = new Socket(hostname, portnumber);
– Socket s = new Socket("[Link]", 80);
En Java
• Obtenir les streams du socket
InputStream instream = [Link]();
OutputStream outstream = [Link]();
• Cast les streams
Scanner in = new Scanner(instream);
PrintWriter out = new PrintWriter(outstream);
• Fermer le socket
[Link]();
Exemple
• Un programme pour obtenir une page web d’un
site
– établir une connexion avec un serveur
– envoyer une requête
– recevoir la réponse
– fermer

java WebGet [Link] /


– Lancer WebGet avec 2 paramètres:
• [Link]: DNS
• /: page racine
• Port par défaut: 80
01: import [Link]; 37: final int HTTP_PORT = 80;
02: import [Link]; 38: Socket s = new Socket(host, HTTP_PORT);
03: import [Link]; 39:
04: import [Link]; 42: InputStream instream = [Link]();
05: import [Link]; 43: OutputStream outstream =
06: import [Link]; [Link]();
07: 44:
47: Scanner in = new Scanner(instream);
14: public class WebGet 48: PrintWriter out = new
15: { PrintWriter(outstream);
16: public static void main(String[] args) throws 49:
IOException 52: String command = "GET " + resource + "
17: { HTTP/1.0\n\n";
19: 53: [Link](command);
20: String host; 54: [Link]();
21: String resource; 55:
22: 58: while ([Link]())
23: if ([Link] == 2) 59: {
24: { 60: String input = [Link]();
25: host = args[0]; 61: [Link](input);
26: resource = args[1]; 62: }
27: } 63:
28: else 66: [Link]();
29: { 67: }
30: [Link]("Getting / from 68: }
[Link]");
31: host = "[Link]";
32: resource = "/";
33: }
34:
Résultat: java WebGet
HTTP/1.1 200 OK
Server: Sun-Java-System-Web-Server/6.1
Date: Tue, 28 Mar 2006 20:07:26 GMT
Content-type: text/html;charset=ISO-8859-1
Set-Cookie: SUN_ID=[Link]:218361143576446; EXPIRES=Wednesday, 31-Dec-2025
23:59:59 GMT; DOMAIN=.[Link]; PATH=/
Set-cookie: JSESSIONID=519A024C45B4C300DA868D076CA33448;Path=/
Connection: close

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "[Link]


g/TR/html4/[Link]">
<html>
<head>
<title>Java Technology</title>
<meta name="keywords" content="Java, platform" />
<meta name="collection" content="reference">
<meta name="description" content="Java technology is a portfolio of products tha
t are based on the power of networks and the idea that the same software should
run on many different kinds of systems and devices." />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<meta name="date" content="2006-03-23" />

Résumé sur Java
• Programmation classique: traiter des données
des types primitifs
• Programmation OO: regrouper les données
(attributs) et leurs traitements (méthodes)
• Outils disponibles
– Classes regroupées dans des packages
• Interface graphique
• Communication à travers l’Internet
• Package pour interagir avec un SGBD (Système de gestion
de base de données)
• …
À retenir
• Programme = ?
• Comment un programme est traduit en code
exécutable? (compilation ou interprétation)
• Environnement de programmation
• Quels sont les opérations qu’on peut mettre
dans un programme?
• Concept de base: variable, type, classe, objet,
héritage (OO), …
• Utilisation des packages existants
• Principe de gestion d’interface graphique
• Principe de télécommunication en Java
Mise en œuvre de la classe Livre,
les propriétés sont :
Titre
Auteur;
Nombre de page;
Éditeur.

Vous aimerez peut-être aussi