Hugues Bersini
Code/IRIDIA Universit Libre de Bruxelles
Objectifs du cours (1/2)
I. Introduction et historique
Survol du chapitre
MyProgram.c
MyProgram.o
010110
MyProgram.java
MyProgram.class
010110
public static void main (String[]args) Tout programme doit contenir une mthode
{ main qui porte la signature ci-contre
System.out.println("Hello the World");
crire lcran Hello the World
}
} Fermer les accolades
<HTML>
<HEAD>
<TITLE> A Simple Program </TITLE>
</HEAD>
<BODY> Here is the output of my program:
<APPLET CODE="HelloWorldApplet.class" WIDTH=150 HEIGHT=75>
</APPLET>
</BODY>
</HTML>
javac
Compilateur, traduit fichier source .java en fichier bytecode .class
java
Interprteur java, lance des programmes
javadoc
Gnrateur de documentation dAPI
jar
Utilitaire darchivage et de compression
public static void main (String[]args) Tout programme doit contenir une mthode
{ main qui porte la signature ci-contre
System.out.println("Hello the World");
crire lcran Hello the World
}
} Fermer les accolades
2
Nom de votre projet (indiqu automatiquement)
3
Nom de la classe principale
(normalement indiqu automatiquement)
4
Cliquez sur Run pour lancer le programme
Integral Floating
Textual Logical
Dclaration et initialisation :
int int x=12;
short short x= 32; (short x=33000; // Hors limite)
long long x= 200L; // Nombre accol un L
byte byte x=012; // Nombre commenant avec un 0
double double x=23.2323;
float float x= 23.233F; // Nombre accol un F
char char c=a; char c=\u0061; char c=(char)97;
boolean boolean b=true;
int a = 5;
Dclaration et initialisation de 2 entiers: a et b
int b = 8;
Oprateurs logiques:
Oprateur Usage Renvoie TRUE si
&& expr1 && expr2 expr1 et expr2 sont vraies
& expr1 & expr2 Idem mais value toujours les 2 expressions
|| expr1 || expr2 Expr1 ou expr2, ou les deux sont vraies
| expr1 | expr2 idem mais value toujours les 2 expressions
! ! expr1 expr1 est fausse
!= expr1 != expr2 si expr1 est diffrent de expr2
switch(UNE_VARIABLE_NUMERIQUE_ENTIERE)
{
case 1 : instructions; // A raliser si elle vaut 1
case 2 : instructions; break; // Si elle vaut 2
default : instructions; // Dans tous les autres cas
}
Exemple:
for (int i=0 ; i<10 ; i++) {
System.out.println("The value of i is : " + i);
}
while (CONDITION_A_RENCONTRER_POUR_CONTINUER) {
// Instructions raliser tant que la condition est
// rencontre. A la fin de chaque itration, on
// rvalue la condition et on dcide soit de rester
// dans la boucle avec une nouvelle itration, soit de sortir
}
Exemple:
int i = 0;
while(i<10) {
System.out.println("The value of i is : " + i);
i++;
}
if (i==7) break outer; // if i=7, you jump outside the loop and continue
System.out.println("The value of i,j is :"+i+","+j);
}
}
try{
// Une ou plusieurs instructions potentiellement risque
} catch(ExceptionXYZ unProblemeDeTypeXYZ){
// Ce quil faut faire si un problme de type XYZ de produit
}
Classes Packages
class BankAccount package coursSolvay2006;
class RacingBike Variables
Interfaces int accountNumber
interface Account Constantes
Mthodes MAXIMUM_SIZE
deposit()
getName()
Exemple:
Crer et initialiser une matrice contenant deux tableaux de 2 et 3 entiers respectivement
Remplir les 5 cases du tableau avec des valeurs entires
68
Les arrays ont pour dfaut davoir une taille fixe priori. Java fourni
des collections plus souples et simples dutilisation. La gestion de la
taille est automatis et allge la tche du programmeur.
Pour dclarer une variable de type tableau dentiers :
ArrayList<Integer> monTableau = nes ArrayList<Integer>();
On peut remplacer Integer par nimporte quelle class
Pour ajouter une donne au tableau :
monTableau.add(3);
Pour rcuprer un lment en position k :
Int elem = monTableau.get(k);
package technofutur3.mediatheque
import technofutur3.bank.NormalAccount
package mediatheque
class NormalAccount
How are
you?
Im
fine!
Comptes en banque
Quelles sont les variables dtats caractristiques dun compte en banque?
Devraient-elles accessibles ou non de lextrieur?
Quels sont les comportements possibles dun compte en banque?
Devraient-elles tre accessibles ou non de lextrieur?
Message
Cours Java 2013 Bersini
La classe
Un objet sans classe na pas de classe
Comment les objets sont-ils dfinis?
Par leur classe, qui dtermine toutes leurs caractristiques
Nature des attributs et comportements possibles
La classe dtermine tout ce que peut contenir un objet et tout ce quon
peut faire de cet objet
Classe = Moule, Dfinition, ou Structure dun objet
Objet = Instance dune classe
Une classe peut-tre composite peut contenir elle-mme des objets
dautres classes
Ex: Une voiture contient un moteur qui contient des cylindres
Ex: Un chien possde des pattes
Classe Objets
Chien Mon chien: Bill, Teckel, Brun, 1 an
Le chien de mon voisin: Hector, Labrador, Noir, 3 ans
Compte Mon compte vue: N 210-1234567-89, Courant, 1.734 , 1250
Mon compte pargne: N 083-9876543-21, Epargne, 27.000 , 0
Voiture Ma voiture: ABC-123, VW Polo, grise, 0 km/h
La voiture que je viens de croiser: ZYX-987, Porsche, noire, 170 km/h
private Y
package nomdepackage;
variable dinstance
solde solde
class BankAccount {
soldePrim
int solde;
static int soldePrim;
variable de classe void deposit(int amount){
solde+=amount; Account1 Account2
soldePrim+=amount;
}
}
class AnIntegerNamedX {
x est une variable
int x;
dinstance, donc
static public int x() { return x; } inaccessible pour la
static public void setX(int newX) { this.x = newX; }mthode static setX
}
Comptes en banque
Crer deux constructeurs diffrents dans la classe CompteEnBanque
v2 = new Voiture("Ferrari");
x 7
2. Assignation dune valeur p ????
y 10
x 2
3. Excution du constructeur p ????
y 3
x 2
4. Cration du pointeur p 0123abcd
y 3
Comptes en banque
Cration dune classe Principale
Crer une classe Principale reprsentant un scnario possible
dutilisation de vos classes.
Mettez cette classe en dehors du package.
Y dfinir une mthode main , dans laquelle dclarer quelques
objets de type CompteEnBanque
Instancier arbitrairement ces quelques comptes
Raliser quelques oprations sur les comptes (retraits, dpts,
virements, calcul dintrts, etc.)
Afficher tous les comptes lcran
Jouez avec les accesseurs et constatez les consquences au
niveau de la mthode main.
Comptes en banque
Dclarer et implmenter les mthodes (comportements) de la classe compte
en banque
Dfinissez en particulier une mthode afficheToi qui affiche les
caractristiques du comptes lcran
Utilisez pour cela la mthode System.out.println( );
Fuit
Proie Chasse
Prdateur
Personne Socit
Employ 0..1
0..* Employeur
1
1
n 1
Cylindre Carburateur
Subordonn
Salari *
Chef 1
diriger
Consulte
Thermostat tempr.
Thermomtre
Joueur
-nom: int
-numero: int
-position: int
+tapeLaBalle: void
+seDeplace: void
int unNombre 10
Point p=end;
p.x=12;
x 4
start=p; start 02caf4
45fe67
y 3
x 23 12
end 45fe67
y 32
p 45fe67
Comptes en banque
Crer une Classe banque
Transformer la classe banque en classe OO
Lui associer un tableau de comptes et un tableau de clients
Instancier quelques comptes et clients dans son constructeur et les
associer les uns aux autres
Noubliez pas Faites dabord un diagramme de classes!
Toutes les oprations sur les comptes devront se faire obligatoirement au
travers de la classe publique Banque (faade) Les compteEnBanque et
les Personne sont invisible en dehors du package!
Implmentez les mthodes : enregsitrerUnClient, ouvririComptePourClient,
depotSurCompte, retraireDeCompte, virement
Bonus
Que se passe-t-il dans le cas de plusieurs banques?
Quelle consquence cela-a-t-il sur les identifiants des comptes?
Comment assurer de manire transparente un virement interbancaire ?
Quelles solutions proposez-vous?
class Employee {
String name,firstname;
Address a;
int age;
Employee(String name,String firstname,Address a,int age){
super(); // Comme le constructeur parent nattend pas
// dargument, cet appel nest pas obligatoire
this.firstname=firstname;
this.name=name;
this.a=a;
this.age=age;
}
Employee(String name,String firstname){
this(name,firstname,null,-1);
}
}
super.aNumber
class BankAccount{
int aNumber;
}
class NormalAccount extends BankAccount{
float aNumber;
}
Animal
int age Si cette mthode appelle des mthodes
move():void abstraites, alors on parle
eat():void dune classe abstraite template
runAway():void
Cat
Dog move():void
eat():void
runAway():void
move():void
eat():void
double d = 3.1416;
int i = (int) d;
for(int i=0;i<ba.length();i++)
{
ba[i].computeInterest();
}
Comptes en banque
Redfinir la mthode afficheToi() dans les classes CompteCourant et
CompteEpargne pour quelle prcise le type rel de lobjet
Redfinir galement la mthode calculInteret() pour quelle crdite le solde
dune prime de fidlit arbitraire sur les comptes pargne mais pas sur les
comptes courants.
Modifier la mthode main de la classe Banque pour quelle cre des
comptes courants et des comptes pargne et non plus de simples
CompteEnBanque
Ordonner dans la mthode main tous les comptes de calculer leurs
intrts et de safficher
Que constatez-vous?
Exemple:
Rectangle Oval
int width,height,x,y int width,height,x,y
Rectangle(int x,int y,int width,int height) Oval(int x,int y,int width,int height)
draw(Graphics g):void draw(Graphics g):void
intersects(Object o):boolean intersects(Object o):boolean
Square
Square(int x,int y,int size)
Introduction
Organisation gnrale des API
Packages
JAVA
JAVAX
ORG
Package Description
org.ietf Framework pour le dveloppement dapplications avec
services de scurit provenant de mcanismes comme le
Kerberos
org.omg Contient tous les packages lis aux spcifications de lObject
Management Group tels que CORBA, IDL et IOP
org.w3c Contient un parseur DOM pour XML
org.xml Contient des parseurs SAX pour XML
Introduction
Quest-ce quune Collection?
Le Java Collections Framework
Interfaces
Collections Set et List
Maps Map et SortedMap
Itrateurs Iterator
Comparateurs Comparable et Comparator
Implmentations
HashSet et TreeSet
ArrayList et LinkedList
Algorithmes
Tri
Autres: Recherche, Mlange, etc.
SortedSet
Duplicats interdits
Contient un ordre spcifique intrinsque
Comparator
Permet de dfinir une classe servant de comparateur une autre
Impose de redfinir une seule mthode
public int compare(Object o1, Object o2) qui renvoie un entier:
1 si o1 > o2
0 si o1 = o2
-1 si o1 < o2
LinkedList
A utiliser pour
Ajouter rgulirement des lments au dbut de la liste
Supprimer des lments au milieu de la liste en cours ditration
Mais plus lent en termes daccs positionnel
Si les lments de la collection ne sont pas comparables, il faut alors indiquer quelle
classe servira de comparateur
Collections.sort(List, Comparator)
Spectacles
Remplacez tous les Array par des ArrayList
Implmentez linterface Comparable au sein de la classe Ticket et afin de
permettre le tri des objets sur base de la rprsentation et du numro de la
place et redfinissez cette fin la mthode compareTo(Object o)
Ordonnez le tri de la collection de tickets dans la mthode main et vrifiez que
lordre des tickets a bien t adapt en les affichant
Introduction
Hirarchie des exceptions
Traitement des exceptions
Interception dexceptions: bloc try catch finally
Lancement (gnration) par une mthode: throws et throw
Throwable
Exception Error
ArithmeticException EOFException
Exception Animal
int age
move():void
eat() throws RuntimeException:void
runAway():void
RuntimeException
Cat Dog
Spectacles
Gnrer une exception quelconque et lintercepter dans une mthode
au choix au moyen dun bloc try - catch
Crer une nouvelle exception PlaceDejaPriseException , qui devra
tre lance chaque fois que lutilisateur tente crer un ticket alors que
la place nest plus disponible pour la reprsentation choisie
Grer lexception par renvoi (throws) ou interception (try-catch)
import java.io.*;
public class Predateur extends Faune implements Serializable {
private Proie[] lesProies;
public void sauveDonnees(ObjectOutputStream oos) {
try{
oos.writeObject(this); /* on sauve l'objet */
} catch (IOException e) { System.out.println(e); }
}
import java.io.*;
import java.sql.*;
public class Predateur extends Faune {
public void litLesDonnees(Connection connexion, int i) {
try {
Statement ordre = connexion.createStatement(); /* tablit la connexion */
String requete = "SELECT * FROM Predateur WHERE IdPredateur =" + i;
/* la requte SQL */
ResultSet resultats= ordre.executeQuery(requete);
/* envoie la requte sur la connexion */
resultats.next(); /* itre le rsultat */
setVitX(resultats.getInt("vitx"));
setVitY(resultats.getInt("vity"));
setEnergie(resultats.getDouble("energie"));
ordre.close();
} catch (Exception e) { System.out.println(e.getMessage()); }
}
Requtes action
INSERT Pour ajouter des enregistrements dans une table
UPDATE Pour modifier des enregistrements dans une table
DELETE Pour supprimer des enregistrements dans une table
Options:
WHERE [critres de slection]
ORDER BY [champs sur lesquels trier les enregistrements]
Exemples:
SELECT * FROM livres
SELECT nom, prenom, adresse FROM clients WHERE ville=Paris
Exemples:
INSERT INTO clients(nom, prenom, adresse, ville)
VALUES(Bersini, Hugues, Avenue Roosevelt 50, Bruxelles)
INSERT INTO livres(titre, auteur, anneeDeParution)
VALUES ("Lorient objet", "Bersini", 2004)
INSERT INTO livres(auteur, titre)
VALUES ("Bersini", "Lorient objet")
Options:
WHERE [critres de slection]
Exemples:
UPDATE clients SET ville = Brussels WHERE ville = Bruxelles
UPDATE livres SET bestSeller = Oui WHERE auteur = Bersini
Options:
WHERE [critres de slection]
Exemples:
DELETE FROM clients
Efface tous les enregistrements de la table!!!
DELETE FROM livres WHERE auteur = Bersini
Le dfi
La solution: JDBC
Mise en uvre
Requtes
Base de
Donnes Rsultats
Requtes
Rsultats
XI. Multithreading
Survol du chapitre
Introduction
Dfinition
Raison dtre
Cration de Thread
Par implmentation
Par hritage
Gestion de Thread
Mthodes de gestion
Diagrammes dtat
Sans multithreading
Les composantes ne pourraient agir que lorsque linterface est suspendue
Application
J
Serveur de LOGIQUE G
Bases de
D
APPLICATIVE U
Donnes B
(Modle OO) I
C
Serveur de
Bases de
Serveur
Donnes
dapplication
Clients
Cours Java 2013 Bersini
Interfaces graphiques Java: SWING et AWT
Model-View-Control
Fondement: Sparer
Les responsabilits relatives la saisie des vnements
Celles relatives lexcution des commandes en rponse aux vnements
Sparer au mieux
La gestion de laffichage
Le contrle du composant
Les informations intgres dans le composant
Avantages:
Un mme vnement peut tre envoy plusieurs objets couteurs
Utile si un vnement est potentiellement intressant pour plusieurs couteurs
Facilite la rutilisation des composants
Permet le dveloppement de lapplication et de linterface sparment
Permet dhriter de super-classes diffrentes suivant les fonctionnalits
Rgle essentielle en OO: modulariser au plus ce qui est modularisable
add
1
Container
JButton JLabel 1
1
LayoutManager
JFrame JPanel
BorderLayout FlowLayout
JMenuBar
JPanel
Canvas
JPanel
JLabel
JButton (bouton)
Contient un intitul
Au Centre: un Canvas
Servira daire de jeu qui soccupera de tous les objets du jeu (balle, monstre, avion, princesse,)
Au Sud: un JPanel
Contenant lui-mme deux JLabel
Titre (JLabel)
Component
XXXAdapter
1
addXXXListener
contrle
* MyXXXListener
J VM
Exemples :
Il faut donc :
Rendre la classe FenetrePrincipale capable de se grer elle-mme
Crer 2 classes dcouteurs spcifiques : GereMenus, GereTables (code fourni)
Instancier ces 2 classes
Associer les couteurs la source dvnements quils doivent grer
UML 1.3
OMG Acceptance, Nov 1997
Final submission to OMG, Sep 97 UML 1.1
public First submission to OMG, Jan 97
feedback
UML partners UML 1.0
30
Classes, interfaces,
collaborations Components
Use cases
Effectuer
La Banque
un virement
Grer le
distributeur
Le client
Retirer
de l argent
Effectuer la
Un employ
Consulter maintenance
un compte
Insrer carte
Vrifier carte
Demander code
Vrifier code
Message d erreur
Demander code
...
Cours Java 2013 Bersini
Les concepts de lOO
La modlisation devient la rfrence
Diagramme de classes
Le but du diagramme de classes est de reprsenter les classes au sein dun
modle
Dans une application OO, les classes possdent:
Des attributs (variables membres)
Des mthodes (fonctions membres)
Des relations avec dautres classes
Cest tout cela que le diagramme de classes reprsente
Lencapsulation est reprsente par:
- (private), + (public), # (protected) Nom Classe
Les attributs scrivent: Attributs
deposit(int):int 1
withdraw(int):int Bank
addALoan(Loan l):void
payYourLoans():void
calculInterest():int
isReimbursed(int):void Loan
- amount : int
- mensuality : int
Loan(int,int,BankAccount)
reimbourse():void
NormalAccount SparingAccount
calculInterest():int calculInterest():int
retirer(500)
lireNCompte()
retirerDeLArgent(500,88219)
dbiter(500)
sortirDesBillets(5)
sortirBillets ()