Académique Documents
Professionnel Documents
Culture Documents
programmation (Java)
IFT6800 E 2008
Pierre Poulin
But
Connatre le principe de la programmation
Savoir crire des programmes simples en
Java
Programme
Une suite dinstructions
Exemple:
1.
2.
3.
4.
IA (intelligence artificielle):
Prolog, Lisp
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) excutable
Excution
Charger le programme en mmoire (typiquement en
tapant le nom du programme excutable)
Excution
Termes
Programme source, code source
Programme crit dans un langage
Compilation (compilateur)
Traduire un code source en code excutable
Interprteur
Certains langages nont pas besoin dtre traduit en code
machine
La machine effectue la traduction sur la vole (on the fly),
instruction par instruction, et lexcute
E.g. Prolog, JavaScript
Programmation
Syntaxe dun langage
Comment formuler une instruction correcte
(grammaire)
Smantique
Ce que linstruction ralise
Erreur
de compilation: typiquement relie la syntaxe
dexcution: smantique (souvent plus difficile
dtecter et corriger)
Java
Langage orient objet
Notions de classes, hritage,
Historique
Sun Microsystems
1991: conception d'un langage indpendant du
hardware
1994: browser de HotJava, applets
1996: Microsoft et Netscape commencent soutenir
1998: ldition Java 2: plus stable, norme librairie
Java
Compiler un programme en Byte Code
Byte code: indpendant de la machine
Interprt par la machine
javac programme.java
Gnre programme.class
java programme
Lance le programme
crire un programme
public class Hello
{
public static void main(String[] args)
{
// afficher une salutation
System.out.println("Hello, World!");
}
}
Nom de la classe
Une mthode
commentaire
Une instruction
Lancer un programme
Compilation
javac Hello.java
Ceci gnre Hello.class
Lancer lexcution
java Hello
Rsultat de lexcution
Hello, World!
Classe
Un programme en Java est dfini comme une classe
Dans une classe:
attributs, mthodes
L'en-tte de la classe
public class NomDeClasse
public = tout le monde peut utiliser cette classe
class = unit de base des programmes OO
Classe
Le corps
{
}
Contient les attributs et les mthodes
Attributs: pour stocker les informations de la classe
Mthodes: pour dfinir ses comportement, ses traitements,
Conventions et habitudes
Mthode: en-tte
L'en-tte:
public static void main(String[] args)
main: nom de mthode
void: aucune sortie (ne retourne rien)
String[] args: le paramtre (entre)
String[]: le type du paramtre
args: le nom du paramtre
Conventions
nomDeParametre
nomDeMethode
nomDAttributs
nomDObjet
Mthode: corps
Le corps:
{
// afficher une salutation
System.out.println("Hello, World!");
}
contient une squence d'instructions, dlimite
par { }
// afficher une salutation : commentaire
System.out.println("Hello, World!"): appel de mthode
Mthode: corps
En gnral:
nomDObjet.nomDeMethode(<liste des paramtres>)
System.out: l'objet qui reprsente le terminal (lcran)
println: la mthode qui imprime son paramtre (+ une fin
de ligne) sur un stream (cran)
System.out.println("Hello, World!");
"Hello, World!": le paramtre de println
La mthode main
java Hello excute la mthode main dans la classe
Hello
main est la mthode excute automatiquement
linvocation 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
Dfinition gnrale
Type nomDeVariable;
Exemple: int age;
Type: int
Nom: age
Modifier la valeur
Affecter une valeur une variable
E.g. age = 25;
Type: int
25
Nom: age
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)
System.out.println("jeune");
else
System.out.println("vieux");
Tests
Pour les valeurs primitives (int, double, )
x == y : x et y ont la mme valeur?
x > y, x >= y, x != y,
Attention: (== != =)
Un exemple de test
public class Salutation
{
public static void main(String[] args)
{
int age;
age = Integer.parseInt(args[0]);
// afficher une salutation selon lage
System.out.print(Salut, le ");
if (age < 65)
System.out.println(jeune!");
else
System.out.println(vieux!");
}
}
Utilisation:
java Salutation 20
Salut le jeune!
java Salutation 70
Salut le vieux!
Attention:
un ; aprs le for( ), itre sur
la condition, et somme ne sera
incrmente quune seule fois
Attention:
i nest dclare ici qu
lintrieur de la boucle for
Boucle
Schma dexcution
somme=0;
i=0;
i<10?
oui
non
somme: 0
0,
1,
2,
3,
4,
5,
6,
7,
8,
0,
1,
3,
somme=somme+i;
i++;
9, 10
45, sortie
Boucle
Schma dexcution
somme=0;
do A while (condition)
Faire A au moins une fois
Tester la condition pour savoir sil faut refaire A
int somme = 0;
int i = 15;
non
while (i<10) { somme = somme + i;
i++;
}
somme = 0
i=15;
i<10?
oui
somme=somme+i;
i++;
Schma dexcution
somme=0;
int somme = 0;
int i = 15;
do { somme = somme + i;
i++;
}
while (i<10)
i=15;
somme=somme+i;
i++;
somme = 15
non
i<10?
oui
Exemple
Calcul des intrts
tant donn le solde initial, le solde souhait et
le taux d'intrt, combien d'annes seront
ncessaires pour atteindre le solde souhait
au lieu d'utiliser une formule, on simule le calcul
Algorithme (pseudocode):
1.
2.
3.
4.
ans = 0;
WHILE solde n'atteint pas le solde souhait
incrmenter ans
ajouter l'intrt au solde
Programme
public void nombreAnnees (double balance, double targetBalance,
double rate ) {
int years = 0;
while (balance < targetBalance) {
years = years + 1;
years++;
double interest = balance * rate;
balance = balance + interest;
balance += interest;
}
System.out.println(years + " years are needed");
}
Appel de la mthode:
nombreAnnees(1000, 1500, 0.05)
Rsultat:
56 years are needed
Factorielle
public class Factorielle
{
public static double factorielle(int x) {
if (x < 0) return 0.0;
double fact = 1.0;
while (x > 1) {
fact = fact * x;
x = x - 1;
}
return fact;
}
public static void main(String[] args) {
int entree = Integer.parseInt(args[0]);
double resultat = factorielle(entree);
System.out.println(resultat);
}
}
Tableau
Attention:
Array
Array list
String
a.length
a.size()
a.length()
Cration
nombre = new int[10]; // cre les cases nombre[0] nombre[9]
etiquette = new String[3][5]; // cre etiquette[0][0] etiquette[2][4]
int[] primes = {1, 2, 3, 5, 7, 7+4}; // dclare, cre de la bonne taille et initialise
Utilisation
nombre[0] = 4;
for (int i=1; i<nombre.length; i++) nombre[i]=nombre[i]+1;
etiquette[2][3] = "un texte";
String texte = etiquette[2][3];
String
Structure deux parties:
En-tte: nom, longueur,
Corps: les caractres
etiquette[2][3]
texte
u n
t e x t e
etiquette[2][3]
texte
a u t r e
u n
t e x t e
t e x t e
Classe et Objet
Classe: moule pour fabriquer des objets
Objet: lment concret produit par le moule
Dfinition de classe:
class NomClasse {
Attributs;
Mthodes;
}
class Personne {
String nom;
int AnneeNaissance;
public int age() {}
}
Objet
Structure deux parties:
Rfrence
Corps
Les tapes
Dclaration de la classe (e.g. Personne)
lendroit o on utilise:
Dclarer une rfrence du type de la classe
Crer une instance dobjet (new)
Manipuler lobjet
Exemple
public class Personne {
public String nom;
public int anneeNaissance;
public int age() {return 2008 - anneeNaissance; }
}
class Utilisation {
public static void main(String[] args) {
Personne qui;
qui = new Personne();
qui.nom = "Pierre";
qui.anneeNaissance = 1980;
System.out.println(qui.age());
}
}
nom: "Pierre"
Dclaration de rfrence
Cration dune instance
Manipulation de linstance
rfre par la rfrence
qui
anneeNaissance: 1980
Personne:
age()
Un autre exemple
class Circle {
public double x, y; // coordonnes du centre
private double r; // rayon du cercle
public Circle(double r) {
this.r = r;
}
public double area() {
return 3.14159 * r * r;
}
}
r est inaccessible de
lextrieur de la classe
constructeur
Math.PI
Illustration
c1
null
c2
c2
c2
null
4. c2.r = c2.r 1;
c1
c2
5. c1 = new Cercle(2.0);
c1
6. c1.x = 2.0;
null
x: 2.0
y: 3.0
r: 4.0
c1
x: 2.0
y: 3.0
r: 4.0
c1
c2
x: 2.0
y: 3.0
r: 3.0
x: 2.0
y: 0.0
r: 2.0
x: 2.0
y: 3.0
r: 3.0
null
5
x: 2.0
y: 3.0
r: 3.0
c1
c2
7. c2 = c1;
x: 0.0
y: 0.0
r: 2.0
c1
c2
x: 2.0
y: 3.0
r: 3.0
x: 2.0
y: 0.0
r: 2.0
Classes et Hritage
Hritage
Les enfants hritent les proprits du parent
Classe enfant (sous-classe) possde systmatiquement les attributs et
les mthodes de la classe parent (super-classe)
Hritage simple (une seule super-classe au plus)
E.g.
class Personne {
String nom;
int anneeNaissance;
public int age() { return 2008 - anneeNaissance; }
}
class Etudiant extends Personne {
String [] cours;
String niveau;
String ecole;
Gradue
}
Ce qui est disponible dans Etudiant:
nom, anneeNaissance, age(),
cours, niveau, ecole,
Personne
Etudiant
Professeur
Principe
Dfinir les proprits communes dans la classe
suprieure
Dfinir les proprits spcifiques dans la sousclasse
Regrouper les objets le plus possible
Les objets dune sous-classe sont aussi des
objets de la super-classe
La classe dont tous les objets appartiennent:
Object
Tester lappartenance dun 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
}
super-classe
final class Circle extends Ellipse {
public Circle(double r) {super(r, r);}
public double getRadius() {return r1;}
}
final assure quaucune autre
// Dans une mthode
classe nhritera de Circle
Ellipse e = new Ellipse(2.0, 4.0);
Circle c = new Circle(2.0);
System.out.println("Aire de e: " + e.area() + ", Aire de c: " + c.area());
System.out.println((e instanceof Circle)); // false
System.out.println((e instanceof Ellipse)); // true
System.out.println((c instanceof Circle)); // true
System.out.println((c instanceof Ellipse)); // true (car Circle drive de Ellipse)
e = c;
System.out.println((e instanceof Circle)); // true
System.out.println((e instanceof Ellipse)); // true
int r = e.getRadius(); // erreur: mthode getRadius nest pas trouve dans la classe Ellipse
c = e; // erreur: type incompatible pour = Doit utiliser un cast explicite
Casting
Surcharge de mthode
class A {
public void meth() {System.out.println("Salut"); }
}
class B extends A {
public void meth(String nom) {
System.out.println("Salut" +nom);
}
}
Dans la sous-classe: une version additionnelle
Signature de mthode: nom+type de paramtres
Surcharge: crer une mthode ayant une autre signature
Overriding: crasement
Classe abstraite
Certains lments peuvent tre manquants dans une
classe, ou la classe peut tre trop abstraite pour
correspondre un objet concret
Classe abstraite
Une classe non complte ou une classe
conceptuellement trop abstraite
Classe Shape
on ne connat pas la forme exacte, donc impossible de crer un
objet
cependant, on peut savoir que chaque Shape peut tre
dessine
Interface
Interface
Un ensemble de mthodes (comportements) exiges
Une classe peut se dclarer conforme (implanter) une
interface: dans ce cas, elle doit implanter toutes les mthodes
exiges
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() {System.out.println("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 * Math.PI * 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<drawables.length; i++)
drawables[i].draw();
Utilit de linterface
Permet de savoir quune classe contient
les implantations de certaines mthodes
On peut utiliser ces mthodes sans
connatre les dtails de leur implantation
Souvent utilise pour des types abstraits
de donnes (e.g. pile, queue, )
Package
On organise les classes et les outils selon leurs
fonctionnalits et les objets quelles manipulent
Les classes qui traitent les mmes objets: package
Exemple:
Les classes pour traiter linterface graphique sont dans le
package awt
Hirarchie
java.awt
java.awt.event
javax.swing
awt
event
classes
javax
swing
classes
import java.awt.event.*;
Importer toutes les classes du package
java.awt.event (relies au traitement dvnements)
Exception
Quand un cas non prvu survient, il est possible de le
capter et le traiter par le mcanisme dException
Si on capte et traite une exception, le programme peut continuer
se drouler
Sinon, le programme sort de lexcution avec un message
derreur
Exemple dexception: division par 0, ouvrir un fichier qui nexiste
pas,
Bloc o une
exception peut se
gnrer
Exemple
public static void ouvrir_fichier(String nom) {
try {
ouverture
input = new BufferedReader(new FileReader(nom));
dun fichier
}
catch (IOException e) {
System.err.println("Impossible d'ouvrir le fichier d'entree.\n" +
e.toString());
System.exit(1);
}
}
finally
Fichier
Unit de stockage des donnes, sur
disque dur
Stockage permanent (vs. en mmoire
vive)
Un fichier contient un ensemble
CPU
denregistrements
Traitement
fichier
Mmoire
vive
tampon
Fichier en Java
Stream: une suite de donnes (octets ou
caractres)
Oprations typiques
Lecture:
tablir un canal de
communication
Ouvrir un stream
Lire tant quil y a des donnes
Fermer le stream
Relcher les
criture
ressources alloues
Exemple
public static void main(String[] args) {
ouvrir_fichier("liste_mots");
traiter_fichier();
fermer_fichier();
}
public static void ouvrir_fichier(String nom) {
try {
input = new BufferedReader(
new FileReader(nom));
}
catch (IOException e) {
System.err.println("Impossible d'ouvrir
le fichier d'entree.\n" + e.toString());
System.exit(1);
}
}
Hirarchies
En haut des hirarchies pour stream de
caractres: 2 classes abstraites
Reader
java.lang.Object
java.io.Reader
Writer
java.lang.Object
java.io.Writer
Implantent une partie des mthodes pour lire et
crire des caractres de 16 bits (2 octets)
simple
pr-traitement
System.in
System.out
System.err
Exemple
Mthodes limites
Fin de fichier: -1
Avantage:
Obtenir plus de mthodes
Dans File: les mthodes pour grer les fichiers (delete(),
getPath(), ) mais pas de mthode pour la lecture
Dans FileReader: les mthodes de base pour la lecture
Un autre exemple:
DataOutputStream out = new DataOutputStream(
new FileOutputStream("invoice1.txt"));
FileOutputStream: crire des bytes
DataOutputStream: mthodes pour les types de donnes de base:
write(int), writeBoolean(boolean), writeChar(int), writeDouble(double),
writeFloat(float),
Srialiser
Convertir un objet (avec une structure) en une
suite de donnes dans un fichier
Reconvertir du fichier en un objet
Utilisation: avec ObjectOutputStream
Employee[] staff = new Employee[3];
ObjectOutputStream out = new ObjectOutputStream(new
FileOutputStream("test2.dat"));
out.writeObject(staff);
out.close();
Srialiser
Utilit de srialisation
Stocker un objet dans un fichier
Crer une copie dobjet en mmoire
Transmettre un objet distance
Devient une transmission de String
Interface graphique
Comment crer des fentres?
Comment grer les interactions avec
lutilisateur?
Traiter des vnements
Gnralit
Programme
Interface utilisateur
Exemple simple
Importer le package
import javax.swing.*;
public class DisplayFrame {
Crer un
public static void main (String[] args) {
objet
JFrame f = new JFrame("FrameDemo");
// components are added to its content frame.
f.setSize(300,200);
Dfinir la taille
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
afficher
Haut niveau
Composante
de base
Niveau
intermdiaire
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Composants de base
pour obtenir des donnes
JButton
JCheckBox atoggledon/offbuttondisplayingstatetouser.
JRadioButtonatoggledon/offbuttondisplayingitsstatetouser.
JComboBox a dropdown list with optional editable text field. The
Jlist allowsausertoselectoneormoreitemsfromalist.
Jmenu popuplistofitemsfromwhichtheusercanselect.
Jsliderletsuserselectavaluebyslidingaknob.
JTextFieldareaforenteringasinglelineofinput.
usercankeyinavalueorselectavaluefromdropdownlist.
Composants de base
pour afficher linformation
Jlabel containstextstring,animage,orboth.
JProgressBar communicatesprogressofsomework.
JToolTipdescribespurposeofanothercomponent.
Jtree acomponentthatdisplayshierarchicaldatainoutlineform.
Jtable
acomponentusertoeditanddisplaydatainatwodimensional
grid.
JTextArea,JTextPane,JEditorPane
definemultilineareasfordisplaying,entering,andeditingtext.
Au lancement, paint()
est automatiquement
excute
Pour r-excuter: repaint()
Lancer un Applet
partir dune page Web:
<html>
<head>
<title>Two rectangles</title>
</head>
<body>
<p>Here is my <i>first applet</i>:</p>
<applet code="RectangleApplet.class" width="300" height="400">
</applet>
</body>
</html>
Diffrence
vnement
bouger la souris
cliquer sur un bouton
fermer une fentre
publicclassCapteurimplementsActionListener
{
publicvoidactionPerformed(ActionEvente){}
}
Action dclenche
// Liens d'ecoute
rouge.addActionListener(this);
bleu.addActionListener(this);
}
// affichage
public void paint(Graphics g)
{
super.paint(g);
g.setColor(couleur);
g.drawString("Choisir une couleur.", 100,
100);
}
AdjustmentEvent, AdjustmentListener
Scrollbar, ScrollPane,
public void
adjustmentValueChanged(AdjustmentEvent)
ItemEvent, ItemListener
Checkbox, CheckboxMenuItem, Choice, List
public void itemStateChanged(ItemEvent)
MouseMotionListener
TextEvent, TextListener
TextComponent et ses sous-classes
public void textValueChanged(TextEvent)
Tlcommunication en Java
Communication sur lInternet
Connexion dans Java
Internet
Stockage de donnes (informations)
Serveur
Client
Connexion
Connexion entre un client et un serveur
Un canal de communication
Transmission
Protocole:
dfinit les commandes
le format de donnes transmises
Client
Demande tablir une connexion avec le serveur
Transmet une commande au serveur
Serveur
Reoit la commande
Traite la commande
Renvoie la rponse
Client
Reoit la rponse
Continue traiter, transmet une autre commande,
Serveur
Prt recevoir des requtes des types prtablis
E.g. GET
Protocole
Un serveur est tabli pour communiquer selon un
protocole
Canal de communication (numro de port)
0 and 65,535
HTTP: par dfaut: 80
Commande
GET /index.html HTTP/1.0 (suivie dune ligne blanche)
http://java.sun.com/index.html
Protocole HTTP
Commande
GET
HEAD
OPTIONS
POST
PUT
DELETE
TRACE
Signification
Return the requested item
Request only the header
information of an item
Request communications
options of an item
Supply input to a server-side
command and return the result
Store an item on the server
Delete an item on the server
Trace server communication
En Java
tablir une connexion avec un serveur Web
Crer un socket entre Client et Serveur
Socket s = new Socket(hostname, portnumber);
Socket s = new Socket("java.sun.com", 80);
En Java
Obtenir les streams du socket
InputStream instream = s.getInputStream();
OutputStream outstream = s.getOutputStream();
Fermer le socket
s.close();
Exemple
Un programme pour obtenir une page web dun
site
37:
38:
39:
42:
43:
44:
47:
48:
49:
52:
retenir
Programme = ?
Comment un programme est traduit en code
excutable? (compilation ou interprtation)
Environnement de programmation
Quels sont les oprations quon peut mettre dans
un programme?
Concept de base: variable, type, classe, objet,
hritage (OO),
Utilisation des packages existants
Principe de gestion dinterface graphique
Principe de tlcommunication en Java