Documente Academic
Documente Profesional
Documente Cultură
Bertrand Estellon
D epartement dInformatique de Luminy Aix-Marseille Universit e
29 mai 2012
29 mai 2012
1 / 379
Java
Cours 1
Les objectifs : Faciliter le d eveloppement et l evolution des applications ; Permettre le travail en equipe ; Augmenter la qualit e des logiciels (moins de bugs). Solutions propos ees : D ecoupler (s eparer) les parties des projets ; Limiter (et localiser) les modications lors des evolutions ; R eutiliser facilement du code.
29 mai 2012
2 / 379
Java
Cours 1
29 mai 2012
3 / 379
Java
Cours 1
Java
Cours 1
Java
Cours 1
Commentaires
29 mai 2012
6 / 379
Java
Cours 1
29 mai 2012
7 / 379
Java
Cours 1
Syntaxe
Tr` es proche de celle du C : c l a s s PetitProgramme { p u b l i c s t a t i c v o i d main ( S t r i n g a r g [ ] ) { f o r ( i n t i = 0 ; i < 1 0 0 ; i ++) System . o u t . p r i n t l n ( i ) ; boolean b = t r u e ; int k = 1; while ( b ) { i f ( k%100==0) b = f a l s e ; k++; } } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 8 / 379
Java
Cours 1
Les structures du C
En C, la d eclaration dune structure permet de d enir ses champs : s t r uc t DeuxEntiers { int x ; int y ; } typedef s t r u c t DeuxEntiers DeuxEntiers ; Lallocation de di erentes zones m emoires utilisant cette structure : D e u x E n t i e r s p1 = m a l l o c ( s i z e o f p1 ) ; D e u x E n t i e r s p2 = m a l l o c ( s i z e o f p2 ) ; Acc` es aux donn ees des structures : p r i n t f ( %d %d , p1>x , p1>y ) ; Il ny a aucun comportement ou service associ e aux structures
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 9 / 379
Java
Cours 1
Les structures du C
70 20 50 30
1 20 2
10
20 20
90 20
20 40 50
Programme
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 10 / 379
Java
Cours 1
70 20 50 30 1 20 2
10
20 20 90 20 20 40 50
29 mai 2012
11 / 379
Java
Cours 1
10 20
CalculerSomme
Une classe est un moule pour fabriquer des objets. Elle : d enit les m ethodes (cest-` a-dire les services) d ecrit la structure des donn ees Un objet cr e e` a partir dune classe A est une instance de la classe A.
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 12 / 379
Java
Cours 1
29 mai 2012
13 / 379
Java
Cours 1
29 mai 2012
14 / 379
Java
Cours 1
29 mai 2012
15 / 379
Java
Cours 1
R ef erence null
Les variables de type r ef erence contienne la valeur null par d efaut. La valeur null signie quelle ne pointe vers aucune instance. Aectation de la valeur null ` a une variable : A d d i t i o n n e u r add = n u l l ; Lutilisation dune m ethode (ou dune donn ee) ` a partir dune variable de type r ef erence ` a null provoque une erreur ` a lex ecution : A d d i t i o n n e u r add = n u l l ; add . a f f e c t e r V a l e u r s ( 1 0 , 3 0 ) ; Exception in thread "main" java.lang.NullPointerException at ProgrammePrincipal.main(ProgrammePrincipal.java:4)
29 mai 2012
16 / 379
Java
Cours 1
Comparaison de r ef erences
Il est possible de comparer deux r ef erences : class ProgrammePrincipal { p u b l i c s t a t i c v o i d main ( S t r i n g a r g [ ] ) { A d d i t i o n n e u r add = new A d d i t i o n n e u r ( ) ; A d d i t i o n n e u r add2 = add ; i f ( add==add2 ) System . o u t . p r i n t l n ( add==add2 ) ; e l s e System . o u t . p r i n t l n ( add != add2 ) ; A d d i t i o n n e u r add3 = new A d d i t i o n n e u r ( ) ; i f ( add==add3 ) System . o u t . p r i n t l n ( add==add3 ) ; e l s e System . o u t . p r i n t l n ( add != add3 ) ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 17 / 379
Java
Cours 1
Java
Cours 1
Java
Cours 1
Constructeur (D eclaration)
class Additionneur { i n t v1 , v2 ; Additionneur ( int valeur1 , int valeur2 ) { v1 = v a l e u r 1 ; v2 = v a l e u r 2 ; } Additionneur ( int valeur ) { v1 = v a l e u r ; v2 = v a l e u r ; } in t calculerSomme () { r e t u r n v1+v2 ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 20 / 379
Java
Cours 1
est equivalent ` a
public class A { int a ; int b ; p u b l i c A( ) { a = 1; a = 2; } }
Java
Cours 1
Constructeur (Utilisation)
class ProgrammePrincipal { p u b l i c s t a t i c v o i d main ( S t r i n g a r g [ ] ) { A d d i t i o n n e u r add1 = new A d d i t i o n n e u r ( 1 0 , 2 0 ) ; A d d i t i o n n e u r add2 = new A d d i t i o n n e u r ( 2 0 ) ; i n t r 1 = add1 . c a l c u l e r S o m m e ( ) ; i n t r 2 = add2 . c a l c u l e r S o m m e ( ) ; System . o u t . p r i n t l n ( r 1 ) ; // a f f i c h e 30 System . o u t . p r i n t l n ( r 2 ) ; // a f f i c h e 40 } }
29 mai 2012
22 / 379
Java
Cours 1
Mot-cl e this
class Additionneur { int valeur1 , valeur2 ; Additionneur ( int valeur1 , int valeur2 ) { this . valeur1 = valeur1 ; this . valeur2 = valeur2 ; } Additionneur ( int valeur ) { valeur1 = valeur ; valeur2 = valeur ; } in t calculerSomme () { r e t u r n v a l e u r 1+v a l e u r 2 ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 23 / 379
Java
Cours 1
Mot-cl e this
class Additionneur { int valeur1 , valeur2 ; Additionneur ( int valeur1 , int valeur2 ) { this . valeur1 = valeur1 ; this . valeur2 = valeur2 ; } Additionneur ( int valeur ) { this ( valeur , valeur ) ; } in t calculerSomme () { r e t u r n v a l e u r 1+v a l e u r 2 ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 24 / 379
Java
Cours 1
Java
Cours 1
29 mai 2012
26 / 379
Java
Cours 1
29 mai 2012
27 / 379
Java
Cours 1
Les tableaux
D eclaration dune variable de type r ef erence vers un tableau de : int [ ] tableauDEntiers ; A d d i t i o n n e u r [ ] tableauDAdds ; Cr eation dun tableau : t a b l e a u D E n t i e r s = new i n t [ 1 0 ] ; t a b l e a u D A d d s = new A d d i t i o n n e u r [ 1 0 ] ; Utilisation dun tableau :
f o r ( i n t i = 0 ; i < t a b l e a u D A d d s . l e n g t h ; i ++) t a b l e a u D A d d s [ i ] = new A d d i t i o n n e u r ( i ,10 i ) ; int r = 1; f o r ( i n t i = t a b l e a u D A d d s . l e n g t h 1; i >= 0 ; i ) r = r tableauDAdds [ i ] . calculerSomme ( ) ;
29 mai 2012
28 / 379
Java
Cours 1
Java
Cours 1
i n t [ ] tab = n u l l ; System . o u t . p r i n t l n ( t a b [ 1 2 ] ) ;
Exception in thread "main" java.lang.NullPointerException at ProgrammePrincipal.main(ProgrammePrincipal.java:4)
29 mai 2012
30 / 379
Java
Cours 1
Java
Cours 1
29 mai 2012
32 / 379
Java
Cours 1
29 mai 2012
33 / 379
Java
Cours 1
Java
Cours 1
b o olea n d e t e c t e r C l i c ( i n t x , i n t y ) { r e t u r n x>=x1 && x<=x2 && y>=y1 && y <= y2 ; } void a f f i c h e r T e x t e () { System . o u t . p r i n t l n ( t e x t e ) ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 35 / 379
Java
Cours 1
Packages
Un package est un ensemble de classes. Deux classes peuvent avoir le m eme nom si elles appartiennent ` a deux paquets di erents. Une ligne package nomPaquet ; (plac ee au d ebut du chier source) permet de placer les classes d ecrites dans le chier dans le paquet nomPaquet. Par d efaut, les classes sont plac ees dans le paquet sans nom. Un nom de paquet est une suite didenticateurs s epar es de points. Ex : monPaquet, mon.Paquet, java.awt Les noms de paquet qui commencent par java. sont r eserv es ` a Java.
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 36 / 379
Java
Cours 1
Une classe peut etre d esign ee en pr exant le nom de la classe par celui du paquet (java.awt.List = classe List du paquet java.awt). Une classe C du paquet nomPaquet peut etre d esign ee par son nom :
depuis les classes du paquet nomPaquet depuis les chiers qui contiennent import nomPaquet.C depuis les chiers qui contiennent import nomPaquet.*
Les classes du paquet java.lang sont toujours import ees : ce paquet contient les classes fondamentales de Java (Object, String...).
29 mai 2012
37 / 379
Java
Cours 1
Java
Cours 1
29 mai 2012
39 / 379
Java
Cours 1
Java
Cours 1
Java
Cours 1
R esum e du cours
Les points abord es pendant ce cours : Objets, classes et instances Variables de type r ef erence D enir une classe Instancier une classe D enir et utiliser des constructeurs Destruction des instances (Garbage collector) Mot-cl e this Membres statiques Les tableaux Les cha nes de caract` eres Organisation en packages Convention de nommage
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 42 / 379
Java
Cours 2
Java
Cours 2
70 20 50 30 1 20 2
10
20 20 90 20 20 40 50
29 mai 2012
44 / 379
Java
Cours 2
10 20
CalculerSomme
Une classe est un moule pour fabriquer des objets. Elle : d enit les m ethodes (cest-` a-dire les services) d ecrit la structure des donn ees Un objet cr e e` a partir dune classe A est une instance de la classe A.
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 45 / 379
Java
Cours 2
Abstraction
Des objets impl ementant des services identiques de fa cons di erentes :
acher(String s)
Telephone
alerter()
sonner()
acher(String s)
alerter()
acher(String s) Ordinateur
alerter()
Java
Cours 2
Abstraction
Objectifs : Traiter des objets en utilisant les services quils partagent :
f o r ( i n t i = 0 ; i < a f f i c h e u r s . l e n g t h ; i ++) afficheurs [ i ]. afficher (s) ; }
Ecrire un programme en supposant que les objets manipul es impl ementent certains services :
boolean e s t O r d o n n e ( Comparable t a b [ ] ) { f o r ( i n t i = 0 ; i < t a b . l e n g t h 1 ; i ++) i f ( t a b [ i ] . compareTo ( t a b [ i +1]) > 0 ) r e t u r n f a l s e ; return true ; } Si le tableau contient des objets comparables alors cette m ethode d etermine si le tableau est ordonn e
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 47 / 379
Java
Cours 2
Java
Cours 2
Java
Cours 2
29 mai 2012
50 / 379
Java
Cours 2
R ef erences et interfaces
D eclaration dune variable de type r ef erence vers une instance dune classe qui impl emente linterface Acheur : Afficheur aff ; Il nest pas possible dinstancier une interface : A f f i c h e u r a f f = new A f f i c h e u r ( ) ; // interdit ! a f f . a f f i c h e r ( t o t o ) ; // que faire ? Il est possible dinstancier une classe qui impl emente une interface : T e l e p h o n e t = new T e l e p h o n e ( ) ; et de mettre la r ef erence dans une variable de type Acheur : Afficheur aff1 = t ; A f f i c h e u r a f f 2 = new O r d i n a t e u r ( t r u c ) ; A f f i c h e u r a f f 3 = new I n t e g e r ( 2 ) // impossible ! ! Transtypage vers le haut (upcasting)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 51 / 379
Java
Cours 2
R ef erences et interfaces
Utilisation dobjets qui impl ementent linterface :
class ProgrammePrincipal { void a f f i c h e r C h a i n e ( A f f i c h e u r [ ] a f f i c h e u r s , S t r i n g s ) { f o r ( u n s i g n e d i n t i = 0 ; i < a f f i c h e u r s . l e n g t h ; i ++) afficheurs [ i ]. afficher (s) ; } v o i d a f f i c h e r T a b l e a u ( S t r i n g [ ] tab , A f f i c h e u r a ) { f o r ( u n s i g n e d i n t i = 0 ; i < t a b . l e n g t h ; i ++) a . a f f i c h e r ( tab [ i ] ) ; } }
Java
Cours 2
Polymorphisme
Le choix de la m ethode ` a ex ecuter ne peut etre fait qu` a lex ecution :
A f f i c h e u r [ ] a f f i c h e u r s = new A f f i c h e u r [ 2 ] ; a f f i c h e u r s [ 0 ] = new T e l e p h o n e ( ) ; a f f i c h e u r s [ 1 ] = new O r d i n a t e u r ( pc ) ; Random r = new Random ( ) ; // instanciation dun g en erateur al eatoire. i n t i = r . n e x t I n t ( 2 ) ; // tirage dun nombre en 0 et 1. a f f i c h e u r s [ i ] . a f f i c h e r ( mon message ) ;
Si i=0, le programme ache mon message. Si i=1, le programme ache pc : mon message. (En C, l editeur de liens d etermine ` a la compilation les appels ` a eectuer)
29 mai 2012
53 / 379
Java
Cours 2
R esum e
Une interface est un ensemble de signatures de m ethodes. Une classe peut impl ementer une interface : elle doit pr eciser le comportement de chacune des m ethodes de linterface. Il est possible de d eclarer une variable pouvant contenir des r ef erences vers des instances de classes qui impl ementent linterface. Java v erie ` a la compilation que toutes les aectations et les appels de m ethodes sont corrects. Le choix du code qui va etre ex ecut e est d ecid e` a lex ecution (en fonction de linstance point ee par la r ef erence).
29 mai 2012
54 / 379
Java
Cours 2
Java
Cours 2
Java
Cours 2
29 mai 2012
57 / 379
Java
Cours 2
Java
Cours 2
29 mai 2012
59 / 379
Java
Cours 2
G3 R4 R5 R6
Les formes sont regroup ees de fa con hi erarchique. Seuls les formes grises captent les clics. Lorsque lutilisateur clique sur une forme grise, le programme doit acher les noms des formes travers es par le clic. Exemple : si on clique dans le rectangle R5, on traverse R5 G3 G1.
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 60 / 379
Java
Cours 2
29 mai 2012
61 / 379
Java
Cours 2
Java
Cours 2
size = 0;
v o i d a j o u t e r E l e m e n t ( C l i q u a b l e c ) { e l e m e n t s [ s i z e ]= c ; s i z e ++;} p u b l i c bo o le a n t r a i t e r C l i c ( i n t x , i n t y ) { b oolea n r e s = f a l s e ; f o r ( i n t i = 0 ; i < s i z e ; i ++) i f ( elements [ i ] . t r a i t e r C l i c (x , y )) r e s = true ; i f ( r e s ) System . o u t . p r i n t l n ( G +numero ) ; return res ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 63 / 379
Java
Cours 2
Java
Cours 2
G1 G2 D1 R2 R3
G3 D3 R5 D2
29 mai 2012
65 / 379
Java
Cours 2
Java
Cours 2
Java
Cours 2
G3 D3
onClick()
R5
D2
Observeur1
Observeur2
Observeur3
29 mai 2012
68 / 379
Java
Cours 2
Interface pour les echanges entre les formes et les observateurs : public interface C l i c k L i s t e n e r { / Invoqu ee quand lobjet est cliqu e. / public void o n C l i c k ( C l i q u a b l e c ) ; }
29 mai 2012
69 / 379
Java
Cours 2
Java
Cours 2
Java
Cours 2
29 mai 2012
72 / 379
Java
Cours 2
Quache ce programme ?
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 73 / 379
Java
Cours 2
Java
Cours 2
Exemple :
R e c t a n g l e r = new R e c t a n g l e ( 1 0 , 1 0 , 4 0 , 4 0 , 6 ) ; r . a d d C l i c k L i s t e n e r ( new R e c t a n g l e C l i c k L i s t e n e r ( ) ) ; r . t r a i t e r C l i c (20 , 20);
Quache ce programme ?
29 mai 2012
75 / 379
Java
Cours 2
Java
Cours 2
R esum e
Description dune interface Impl ementation dune interface R ef erence vers une classe impl ementant une interface Impl ementation de plusieurs interfaces Polymorphisme dobjet Classe anonyme Transtypage (vers le haut et vers le bas)
29 mai 2012
77 / 379
Java
Cours 3
29 mai 2012
78 / 379
Java
Cours 3
G3 D3
onClick()
R5
D2
Observeur1
Observeur2
Observeur3
29 mai 2012
79 / 379
Java
Cours 3
Interface pour les echanges entre les formes et les observateurs : public interface C l i c k L i s t e n e r { / Invoqu ee quand lobjet est cliqu e. / public void o n C l i c k ( C l i q u a b l e c ) ; }
29 mai 2012
80 / 379
Java
Cours 3
Java
Cours 3
Java
Cours 3
Abstraction et extension
Le service associ e aux listeners est identique. On aimerait : d enir une classe FormeCliquable qui impl emente ce service ; sans perdre les sp ecicit es dun disque ou dun rectangle.
Interface Cliquable
traiterClic()
Observateur
addClickListener()
traiterClic()
traiterClic()
29 mai 2012
83 / 379
Java
Cours 3
Extension
Lextension permet de cr eer une classe qui : conserve les services (propri et es et m ethodes) dune autre classe ; ajouter ses propres services (propri et es et m ethodes). En Java : On utilise le mot-cl e extends pour etendre une classe ; Une classe ne peut etendre quune seule classe.
29 mai 2012
84 / 379
Java
Cours 3
La classe FormeCliquable
p u b l i c c l a s s F o r m e C l i q u a b l e implements C l i q u a b l e { private ClickListener [ ] l i s t e n e r s ; private int nbListeners ; public FormeCliquable () { l i s t e n e r s = new C l i c k L i s t e n e r [ 1 0 0 ] ; nbListeners = 0; } public void a d d C l i c k L i s t e n e r ( C l i c k L i s t e n e r l ) { l i s t e n e r s [ n b L i s t e n e r s ] = l ; n b L i s t e n e r s ++; } p u b l i c b o o le a n t r a i t e r C l i c ( i n t x , i n t y ) { f o r ( i n t i = 0 ; i < n b L i s t e n e r s ; i ++) l i s t e n e r s [ i ] . onClick ( this ); return true ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 85 / 379
Java
Cours 3
p u b l i c b o o le a n t r a i t e r C l i c ( i n t x , i n t y ) { i f ( x >= x1 && x <= x2 && y >= y1 && y <= y2 ) { super . t r a i t e r C l i c (x , y ) ; return true ; } return f a l s e ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 86 / 379
Java
Cours 3
Java
Cours 3
Exemple :
public class A { p u b l i c v o i d method1 ( ) { System . o u t . p r i n t l n ( m1 ) ; } } p u b l i c c l a s s B extends A { p u b l i c v o i d method2 ( ) { System . o u t . p r i n t l n ( m2 ) ; } } B b = new B ( ) ; A a = b ; // upcasting a . method1 ( ) ; // la m ethode est impl ement e a . method2 ( ) ; // erreur ` a la compilation : la classe A ne d enit pas cette m ethode
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 88 / 379
Java
Cours 3
Java
Cours 3
29 mai 2012
90 / 379
Java
Cours 3
Mot-cl e super
Le mot-cl e super permet dutiliser une m ethode d enie au dessus :
public class A { p u b l i c S t r i n g getName ( ) { r e t u r n A ; } }
p u b l i c c l a s s B1 e x t e n d s A { p u b l i c S t r i n g t e s t ( ) { r e t u r n getName ( ) ; }
/A/ }
29 mai 2012
91 / 379
Java
Cours 3
Mot-cl e super
Le mot-cl e super permet dutiliser une propri et e d enie au dessus :
public class A { p u b l i c S t r i n g name = A ; }
p u b l i c c l a s s B1 e x t e n d s A { p u b l i c S t r i n g t e s t ( ) { r e t u r n name ; }
/A/ }
29 mai 2012
92 / 379
Java
Cours 3
est equivalent ` a
public class A { int a ; int b ; p u b l i c A( ) { a = 1; a = 2; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 93 / 379
Java
Cours 3
Java
Cours 3
Remarque : la classe ClasseAvecNom na pas de constructeur vide car un constructeur avec un param` etre est d eni.
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 95 / 379
Java
Cours 3
Modicateur nal
Le modicateur nal permet de bloquer lextension dune classe ou la red enition dune m ethode. Exemple 1 :
f i n a l public class A { }
Exemple 2 :
public class A { f i n a l p u b l i c v o i d method ( ) { } }
29 mai 2012
96 / 379
Java
Cours 3
Classes abstraites
Une classe dont limpl ementation est incompl` ete est dite abstraite. Les m ethodes non-impl ement ees sont dites abstaites. Une classe abstraite nest pas instanciable. Exemple :
p u b l i c a b s t r a c t c l a s s SansNom { v o i d a f f i c h e r N o m ( ) { System . o u t . p r i n t l n ( obt eni r Nom ( ) ) ; } a b s t r a c t S t r i n g o b t e ni r Nom ( ) ; } p u b l i c c l a s s A e x t e n d s SansNom { S t r i n g o b t e n i r N o m ( ) { r e t u r n A ; } } A a = new A ( ) ; a . a f f i c h e r N o m ( ) ; // ache A
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 97 / 379
Java
Cours 3
Java
Cours 3
Java
Cours 3
Java
Cours 3
29 mai 2012
101 / 379
Java
Cours 3
Modicateur protected
Un membre prot eg e est accessible depuis :
les m ethodes de la classe qui le contient ; des m ethodes des classes qui etendent la classe qui le contient.
Pour rendre un membre prot eg e, on utilise le modicateur protected : public class ClassePublique { protected i n t p r o p r i e t e P r o t e g e e ; protected void methodeProtegee ( ) { } } Utilisation possible : Commencer limpl ementation dun service dans une classe et la terminer dans les classes qui l etendent . Possible repr esentation : Les membres prot eg es forment une interface entre une classe et les classes qui l etendent.
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 102 / 379
Java
Cours 3
Java
Cours 3
La classe Object
Par d efaut, les classes etendent la classe Object Consequence : le upcasting vers Object est toujours possible
MaCla sse Object o Object [ ] for ( int c = new MaClasse ( ) ; = c; t = new O b j e c t [ 1 0 ] ; i = 0 ; i < t ; i ++) { i f ( i %2==0) t [ i ] = new U n e C l a s s e ( ) ; e l s e t [ i ] = new U n e D e u x i e m e C l a s s e ( ) ;
29 mai 2012
104 / 379
Java
Cours 3
Java
Cours 3
La m ethode toString()
Une impl ementation possible des String.valueOf(...)
class String { ... public s t a t i c S t r i n g valueOf ( Object obj ) { i f ( o b j== n u l l ) r e t u r n n u l l ; else return obj . toString () ; } p u b l i c s t a t i c S t r i n g v a l u e O f ( boolean b ) { i f ( b ) return t r u e ; e l s e return f a l s e ; } ... }
Java
Cours 3
Exemple dutilisation :
M a Classe c1 = new M a Classe ( 1 ) ; M a Classe c2 = new M a Classe ( 2 ) ; System . o u t . p r i n t l n ( c1 . t o S t r i n g ( ) + + c2 . t o S t r i n g ( ) ) ; System . o u t . p r i n t l n ( c1 + + c2 ) ;
29 mai 2012
107 / 379
Java
Cours 3
Extension dinterfaces
Il est egalement possible d etendre une interface :
29 mai 2012
108 / 379
Java
Cours 3
Extension dinterfaces
c l a s s V e c t o r I t e r a t o r implements L i s t I t e r a t o r { f i n a l private Vector v ; private int p ; public V e c t o r I t e r a t o r ( Vector v ) { this . v = v ; p = 0; } p u b l i c b o o le a n h a s P r e v i o u s ( ) { r e t u r n ( p > 0 ) ; } p u b l i c O b j e c t p r e v i o u s ( ) { p ; r e t u r n v . g e t ( p ) ; } p u b l i c b o o le a n h a s N e x t ( ) { r e t u r n p < v . s i z e ( ) ; } public Object next () { Object o = v . get (p ) ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 109 / 379
p++; r e t u r n o ;
Java
Cours 3
Extension dinterfaces
Exemples dutilisation : V e c t o r v = new V e c t o r ( ) ; ... L i s t I t e r a t o r i t e r a t o r = new V e c t o r I t e r a t o r ( v ) ; while ( i t e r a t o r . hasNext ( ) ) System . o u t . p r i n t l n ( i t e r a t o r . n e x t ( ) ) ; while ( i t e r a t o r . hasPrevious ( ) ) System . o u t . p r i n t l n ( i t e r a t o r . p r e v i o u s ( ) ) ; ... I t e r a t o r i t e r a t o r = new V e c t o r I t e r a t o r ( v ) ; while ( i t e r a t o r . hasNext ( ) ) System . o u t . p r i n t l n ( i t e r a t o r . n e x t ( ) ) ;
29 mai 2012
110 / 379
Java
Cours 3
R esum e
Abstraction Etendre une classe Transtypage (vers le haut et vers le bas) Red enition de m ethodes et polymorphisme mot-cl e super Construction des instances Modicateurs nal et protected Classes et m ethodes abstraites La classe Object La m ethode toString()
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 111 / 379
Java
Cours 4
Java
Cours 4
Classes internes
Il est possible de d enir une classe ` a lint erieur dune autre classe. Une telle classe est dite interne.
public class ListeChainee { private Maillon tete ; public ListeChainee () { tete = null ; } p u b l i c v o i d add ( i n t v ) { t e t e = new M a i l l o n ( v , t e t e ) ; } private s t a t i c class Maillon { final int valeur ; f i n a l Maillon suivant ; public Maillon ( int valeur , Maillon suivant ) { this . valeur = valeur ; this . suivant = suivant ; } } }
29 mai 2012
113 / 379
Java
Cours 4
Classes internes
public c l a s s Vector { p r i v a t e Object [ ] array ; private int size ; ... p u b l i c I t e r a t o r i t e r a t o r ( ) { r e t u r n new V e c t o r I t e r a t o r ( t h i s ) ; } } p u b l i c c l a s s V e c t o r I t e r a t o r implements I t e r a t o r { private int position = 0; p r i v a t e Vector v ; public V e c t o r I t e r a t o r ( Vector v ) { t h i s . v = v ; } p u b l i c boolean hasNext ( ) { r e t u r n p o s i t i o n < v . s i z e ; } p u b l ic Object next () { Object o = v . array [ p o s i t i o n ] ; return o ; } p u b l i c v o i d remove ( ) { } } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 114 / 379
p o s i t i o n ++;
Java
Cours 4
Classes internes
Une classe interne peut utiliser les membres de la classe qui la contient :
public c l a s s Vector { p r i v a t e Object [ ] array ; private int size ; ... p u b l i c I t e r a t o r i t e r a t o r ( ) { r e t u r n new V e c t o r I t e r a t o r ( ) ; } p r i v a t e c l a s s V e c t o r I t e r a t o r implements I t e r a t o r { int position = 0; p u b l i c boolean hasNext ( ) { r e t u r n p o s i t i o n < s i z e ; } p u b l ic Object next () { Object o = array [ p o s i t i o n ] ; return o ; } p u b l i c v o i d remove ( ) { } } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 115 / 379
p o s i t i o n ++;
Java
Cours 4
Classes anonymes
public c l a s s Vector { ... public I t e r a t o r i t e r a t o r () { r e t u r n new I t e r a t o r ( ) { int position = 0; p u b l i c boolean hasNext ( ) { r e t u r n p o s i t i o n < s i z e ; } p u b l i c Object next () { Object o = array [ p o s i t i o n ] ; return o ; } p u b l i c v o i d remove ( ) { } }; } }
p o s i t i o n ++;
Java
Cours 4
Introduction ` a AWT
Abstract Window Toolkit (AWT) = biblioth` eque graphique Java ; AWT a et e introduite d` es les premi` eres versions de Java ; AWT sert de fondement ` a Swing Swing = biblioth` eque de gestion de fen etre de JAVA.
29 mai 2012
117 / 379
Java
Cours 4
Composants
Une interface graphique est construite ` a partir de composants ; Un Composant est un el ement visible ; Un Composant etend la classe abstraite Component. Les composants de AWT : Button Canvas Checkbox Choice Label List Scrollbar Container TextComponent
TextArea TextField
29 mai 2012
118 / 379
Java
Cours 4
Conteneurs
Un conteneur est un composant ; Un conteneur peut contenir plusieurs composants ; Un conteneur etend la classe Container. Les principaux conteneurs de AWT : Panel
Applet
Window
Dialog
FileDialog JDialog (Swing)
Frame
JFrame (Swing)
JWindow (Swing)
JComponent (Swing)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 119 / 379
Java
Cours 4
Exemple
Frame f r a m e = new Frame ( Ma f r a m e ) ; f r a m e . s e t P r e f e r r e d S i z e ( new D i m e n s i o n ( 2 0 0 , 2 0 0 ) ) ; P a n e l p a n e l = new P a n e l ( ) ; p a n e l . add ( new But ton ( Un b ou t o n ) ) ; p a n e l . add ( new Checkbox ( Truc , f a l s e ) ) ; C h o i c e c h o i c e = new C h o i c e ( ) ; c h o i c e . add ( c h o i x 1 ) ; c h o i c e . add ( c h o i x 2 ) ; p a n e l . add ( c h o i c e ) ; p a n e l . add ( new L a b e l ( l a b e l ) ) ; L i s t l i s t = new L i s t ( ) ; l i s t . add ( c h o i x 1 ) ; l i s t . add ( c h o i x 2 ) ; p a n e l . add ( l i s t ) ; p a n e l . add ( new T e x t F i e l d ( Truc ) ) ; T e x t A r e a t e x t A r e a = new T e x t A r e a ( Truc \ nTruc ) ; t e x t A r e a . setColumns ( 1 0 ) ; t e x t A r e a . setRows ( 3 ) ; p a n e l . add ( t e x t A r e a ) ; f r a m e . add ( p a n e l ) ; f r a m e . pack ( ) ; frame . s e t V i s i b l e ( true ) ;
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 120 / 379
Java
Cours 4
Exemple
29 mai 2012
121 / 379
Java
Cours 4
Gestionnaires de pr esentation
Un gestionnaire de pr esentation impl emente LayoutManager ; Chaque conteneur a un gestionnaire de pr esentation ; G` ere la position et la taille des composants pr esents dans le conteneur. Les principaux gestionnaires de pr esentation de AWT : BorderLayout BoxLayout CardLayout FlowLayout GridBagLayout GridLayout ...
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 122 / 379
Java
Cours 4
Gestionnaires de pr esentation
Chaque conteneur a un gestionnaire de pr esentation par d efaut :
Panel FlowLayout Window BorderLayout
Il est possible de changer le gestionnaire de pr esentation dun conteneur en utilisant la m ethode setLayout de la classe Container.
Frame f r a m e = new Frame ( Ma f r a m e ) ; P a n e l p a n e l = new P a n e l ( ) ; p a n e l . s e t L a y o u t ( new G r i d L a y o u t ( 2 , 2 ) ) ; p a n e l . add ( new But ton ( b1 ) ) ; p a n e l . add ( new But ton ( b2 ) ) ; p a n e l . add ( new But ton ( b3 ) ) ; p a n e l . add ( new But ton ( b4 ) ) ; f r a m e . add ( p a n e l ) ; f r a m e . pack ( ) ; frame . s e t V i s i b l e ( true ) ;
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 123 / 379
Java
Cours 4
29 mai 2012
124 / 379
Java
Cours 4
29 mai 2012
125 / 379
Java
Cours 4
29 mai 2012
126 / 379
Java
Cours 4
29 mai 2012
127 / 379
Java
Cours 4
enements Ev`
Un ev` enement a lieu quand lutilisateur agit sur linterface graphique (clic de souris, bouton press e, s election dans une liste, ...) ; Un ev` enement est une instance dune classe qui etend AWTEvent ; Les ev` enements sont emis par les composants ; Les composants transmettent les ev` enements ` a des observateurs ; Un observateur impl emente une extension de EventListener ; Les m ethodes de linterface permettent de recevoir les ev` enements ; Les m ethodes add*Listener dun composant permettent dabonner un observateur aux ev` enements emis par ce composant.
29 mai 2012
128 / 379
Java
Cours 4
enements Ev`
Exemple :
p u b l i c c l a s s M y A c t i o n L i s t e n e r implements A c t i o n L i s t e n e r { p u b l i c void a c t i o n P e r f o r m e d ( Action Event e ) { System . o u t . p r i n t l n ( C l i c ! ! ) ; } } But ton b = new But ton ( B ) ; b . add A c t i o n L i s t e n e r ( new M y A c t i o n L i s t e n e r ( ) ) ; p a n e l . add ( b ) ;
Remarque : ActionListener est une extension de linterface EventListener ActionEvent est une extension de linterface AWTEvent
29 mai 2012
129 / 379
Java
Cours 4
Java
Cours 4
Les ev` enements souris sont observables sur tous les composants
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 131 / 379
Java
Cours 4
Java
Cours 4
29 mai 2012
133 / 379
Java
Cours 4
Java
Cours 4
est equivalent ` a
p u b l i c c l a s s S i m p l e W i n d o w L i s t e n e r e x t e n d s WindowAdapter { p u b l i c v o i d w i n d o w C l o s i n g ( WindowEvent e ) { System . e x i t ( 0 ) ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 135 / 379
Java
Cours 4
29 mai 2012
136 / 379
Java
Cours 4
Exemple Calculette
p u b l i c c l a s s C a l c u l e t t e e x t e n d s Frame { p r i v a t e T e x t F i e l d number1 , number2 ; private Label r e s u l t ; public Calculette () { s e t P r e f e r r e d S i z e ( new D i m e n s i o n ( 2 0 0 , 8 0 ) ) ; P a n e l p = new P a n e l ( ) ; number1 = new T e x t F i e l d ( 5 ) ; number2 = new T e x t F i e l d ( 5 ) ; r e s u l t = new L a b e l ( 0 ) ; But ton b = new Button ( Add ) ; b . a d d A c t i o n L i s t e n e r ( new B o u t o n L i s t e n e r ( ) ) ; p . add ( number1 ) ; p . add ( number2 ) ; p . add ( r e s u l t ) ; p . add ( b ) ; add ( p ) ; pack ( ) ; }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 137 / 379
Java
Cours 4
Exemple Calculette
Suite de la classe Calculette :
p u b l i c c l a s s C a l c u l e t t e e x t e n d s Frame { p r i v a t e T e x t F i e l d number1 , number2 ; private Label r e s u l t ; .... p r i v a t e c l a s s B o u t o n L i s t e n e r implements A c t i o n L i s t e n e r { public void actionPerformed ( ActionEvent e ) { i n t v1 = I n t e g e r . p a r s e I n t ( number1 . g e t T e x t ( ) ) ; i n t v2 = I n t e g e r . p a r s e I n t ( number2 . g e t T e x t ( ) ) ; r e s u l t . s e t T e x t ( +(v1+v2 ) ) ; } } }
29 mai 2012
138 / 379
Java
Cours 4
Exemple Calculette
La m ethode main :
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { C a l c u l e t t e c a l c u l e t t e = new C a l c u l e t t e ( ) ; c a l c u l e t t e . s e t V i s i b l e ( true ) ; c a l c u l e t t e . a d d W i n d o w L i s t e n e r ( new WindowAdapter ( ) { p u b l i c v o i d w i n d o w C l o s i n g ( WindowEvent e ) { System . e x i t ( 0 ) ; } }); }
29 mai 2012
139 / 379
Java
Cours 4
Java
Cours 4
29 mai 2012
141 / 379
Java
Cours 4
Java
Cours 4
Java
Cours 4
Swing
Swing est plus riche en composants que AWT Swing propose des composants plus jolis (look and feel) Swing respecte larchitecture Mod` ele-Vue-Contr oleur (MVC). Exemple dutilisation de Swing :
public c l a s s HelloWorld { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { JFrame f r a m e = new JFrame ( H e l l o World ! ) ; f r a m e . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . DISPOSE ON CLOSE ) ; J L a b e l l a b e l = new J L a b e l ( H e l l o , World ! ) ; f r a m e . g e t C o n t e n t P a n e ( ) . add ( l a b e l ) ; f r a m e . pack ( ) ; frame . s e t L o c a t i o n R e l a t i v e T o ( n u l l ) ; frame . s e t V i s i b l e ( true ) ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 144 / 379
Java
Cours 4
29 mai 2012
145 / 379
Java
Cours 4
29 mai 2012
146 / 379
Java
Cours 4
GTKLookAndFeel
MotifLookAndFeel
WindowsLookAndFeel
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 147 / 379
Java
Cours 4
29 mai 2012
148 / 379
Java
Cours 4
Java
Cours 4
paint appelle paintComponent, paintBorder, paintChildren Red enir paintComponent pour changer lachage dun composant Pour redessiner le composant, appeler repaint (pas paint) Dans paintComponent, commencer par super.paintComponent(g) Ne pas m elanger des composants de Swing et de AWT
29 mai 2012
150 / 379
Java
Cours 5
Java
Cours 5
Surcharge de m ethodes
Dans une classe, plusieurs m ethodes peuvent avoir le m eme nom. La m ethode est choisie par le compilateur de la fa con suivante :
Le nombre de param` etres doit correspondre ; Les aectations des param` etres doivent etre valides ; Parmi ces m ethodes, le compilateur choisit la plus sp ecialis ee.
class Additionneur { public static int additionner ( int a , int b) { System . o u t . p r i n t l n ( e n t i e r ) ; r e t u r n a+b ; } p u b l i c s t a t i c double a d d i t i o n n e r ( double a , double b ) { System . o u t . p r i n t l n ( f l o t t a n t ) ; r e t u r n a+b ; } } i n t i = 1; double d = 2 . 2 ; d o u b l e r 1 = A d d i t i o n n e u r . a d d i t i o n n e r ( d , d ) ; // ottant d o u b l e r 2 = A d d i t i o n n e u r . a d d i t i o n n e r ( i , d ) ; // ottant i n t r 3 = A d d i t i o n n e u r . a d d i t i o n n e r ( i , i ) ; // entier
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 152 / 379
Java
Cours 5
Surcharge de m ethodes
Dans une classe, plusieurs m ethodes peuvent avoir le m eme nom. La m ethode est choisie par le compilateur de la fa con suivante :
Le nombre de param` etres doit correspondre ; Les aectations des param` etres doivent etre valides ; Parmi ces m ethodes, le compilateur choisit la plus sp ecialis ee.
class Afficheur { s t a t i c void A f f i c h e r ( Object o ) System . o u t . p r i n t l n ( O b j e c t } s t a t i c void A f f i c h e r ( String s ) System . o u t . p r i n t l n ( S t r i n g } } { : +o ) ; { : +s ) ;
Java
Cours 5
En Java, il ny a pas de contravariance lors de lextension (la m ethode de B ne red enit pas la m ethode de A m eme si ses arguments sont moins sp ecialis es)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 154 / 379
Java
Cours 5
Covariance
class A { p u b l i c O b j e c t g e t ( ) { r e t u r n O b j e c t ; } } c l a s s B extends A { p u b l i c S t r i n g get ( ) { return S t r i n g ; } } B b = new B ( ) ; A a = b ; String s = b . get ( ) ; System . o u t . p r i n t l n ( s ) ; // Object o = a . get ( ) ; // System . o u t . p r i n t l n ( o ) ; // a = new A ( ) ; o = a . get ( ) ; System . o u t . p r i n t l n ( o ) ; //
Ache String Le type de retour est Object (et pas String) Ache String
Ache Object
Covariance : on peut modier le type de la valeur retourn ee par une m ethode que lon red enit si le nouveau type etend lancien
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 155 / 379
Java
Cours 5
p i l e [ t a i l l e ]= n u l l ;
29 mai 2012
156 / 379
Java
Cours 5
Java
Cours 5
t a i l l e = 0; }
p i l e [ t a i l l e ]= n u l l ;
En Java, les types param etr es ajoutent des v erications de type et des transtypages automatiques lors de la compilation mais ne modient pas le bytecode g en er e.
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 158 / 379
Java
Cours 5
Boxing et unboxing
Comment obtenir une pile dentiers ?
P i l e < i n t > p = new P i l e < i n t > ( ) ; Impossible : int nest pas le nom dune classe
(Attention : des allocations sont eectu ees sans new dans le code)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 159 / 379
Java
Cours 5
29 mai 2012
160 / 379
Java
Cours 5
Classes demballage
La classe Number : public abstract int intValue () public abstract long longValue () public abstract oat oatValue () public abstract double doubleValue () public byte byteValue() public short shortValue() Les classes demballage qui etendent Number : Byte : public Byte(byte b) Short : public Short(short s) Integer : public Integer(int i) Long : public Long(long l) Float : public Float(oat f) Double : public Double(double d)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 161 / 379
Java
Cours 5
Classes demballage
La classe Boolean : public Boolean(bool b) public boolean booleanValue() La classe Character : public Character(char c) public char charValue() public static boolean isLowerCase (char ch) public static boolean isUpperCase (char ch) public static boolean isTitleCase (char ch) public static boolean isDened (char ch) public static boolean isDigit (char ch) public static boolean isLetter (char ch) public static boolean isLetterOrDigit (char ch) public static char toLowerCase (char ch) public static char toUpperCase (char ch) public static char toTitleCase (char ch)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 162 / 379
Java
Cours 5
Java
Cours 5
p u b l i c S o r t e d A r r a y ( ) { t a b = new O b j e c t [ 1 0 0 ] ; p u b l i c T g e t ( i n t p ) { r e t u r n (T) t a b [ p ] ; }
p u b l i c v o i d add (T e ) { int p = 0; w h i l e ( p < t a i l l e && e . compareTo ( g e t ( p ) ) >0) p++; f o r ( i n t i = t a i l l e ; i > p ; i ) t a b [ i ] = t a b [ i 1 ] ; tab [ p ] = e ; t a i l l e ++; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 164 / 379
Java
Cours 5
Exemple 1 :
C a r t e [ ] t a b = new C a r t e [ 3 ] ; t a b [ 0 ] = new C a r t e ( 1 , 2 ) ; t a b [ 1 ] = new C a r t e ( 2 , 3 ) ; t a b [ 2 ] = new C a r t e ( 2 , 4 ) ; System . o u t . p r i n t l n ( T o o l s . i s S o r t e d ( t a b ) ) ;
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 165 / 379
Java
Cours 5
Exemple 2 :
S t r i n g [ ] t a b = new S t r i n g [ 3 ] ; t a b [ 0 ] = t o t o ; t a b [ 1 ] = t r u c ; t a b [ 2 ] = abc ; System . o u t . p r i n t l n ( T o o l s . i s S o r t e d ( t a b ) ) ;
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 166 / 379
Java
Cours 5
Exemple 3 :
O b j e c t [ ] t a b = new S t r i n g [ 3 ] ; t a b [ 0 ] = t o t o ; t a b [ 1 ] = t r u c ; t a b [ 2 ] = abc ; System . o u t . p r i n t l n ( T o o l s . i s S o r t e d ( t a b ) ) ; Erreur de compilation
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 167 / 379
Java
Cours 5
Les it erateurs
p u b l i c i n t e r f a c e I t e r a b l e <T> { (Interface Java) p u b l i c I t e r a t o r <T> i t e r a t o r ( ) ; } p u b l i c i n t e r f a c e I t e r a t o r <T> { (Interface Java) p u b l i c b o o le a n h a s N e x t ( ) ; public T next ( ) ; p u b l i c v o i d remove ( ) ; }
Exemple dutilisation :
s t a t i c <T> v o i d p r i n t C o l l e c t i o n ( I t e r a b l e <T> t ) { I t e r a t o r <T> i t = t . i t e r a t o r ( ) ; while ( i t . hasNext ( ) ) { T e = i t . next ( ) ; System . o u t . p r i n t l n ( e ) ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 168 / 379
Java
Cours 5
Java
Cours 5
29 mai 2012
170 / 379
Java
Cours 5
Exemple dutilisation :
S o r t e d A r r a y <C a r t e > a = new S o r t e d A r r a y <C a r t e > ( ) ; a . add ( new C a r t e ( 1 , 2 ) ) ; a . add ( new C a r t e ( 2 , 1 ) ) ; a . add ( new C a r t e ( 1 , 4 ) ) ; Tools . p r i n t C o l l e c t i o n ( a ) ;
Java
Cours 5
Java
Cours 5
Solution :
c l a s s S o r t e d A r r a y <T e x t e n d s Comparable <? s u p e r T> > { ... } S o r t e d A r r a y < J o l i e C a r t e > s = new S o r t e d A r r a y < J o l i e C a r t e > ( ) ; // Ok : JolieCarte impl emente Comparable<Carte>
29 mai 2012
173 / 379
Java
Cours 5
p u b l i c v o i d add (T e ) { int p = 0; w h i l e ( p < t a i l l e && e . compareTo ( g e t ( p ) ) >0) p++; f o r ( i n t i = t a i l l e ; i > p ; i ) t a b [ i ] = t a b [ i 1 ] ; tab [ p ] = e ; t a i l l e ++; } ... }
Le type du param` etre de e.compareTo est ? super T La m ethode get(p) retourne un param` etre de type T T est compatible avec ? super T => Les types sont corrects.
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 174 / 379
Java
Cours 5
Java
Cours 5
29 mai 2012
176 / 379
Java
Cours 5
Le retour de it.next() est de type ? extends T Il peut donc etre transtyp e (vers le haut) en T ? extends T est compatible avec T => Les types sont corrects.
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 177 / 379
Java
Cours 5
R esum e
Surcharge de m ethodes Covariance Boxing, unboxing et classes demballage Classes param etr ees Condition sur les param` etres M ethodes param etr ees It erateurs ? super et ? extends
29 mai 2012
178 / 379
Java
Cours 6
Java
Cours 6
Map<K,V> : Ensemble de couples cl e-valeur. Il est pr ef erable dutiliser les interfaces pour typer les variables : L i s t < I n t e g e r > l = new A r r a y L i s t < I n t e g e r > ( ) ; (code qui utilise l) car on peut changer la structure de donn ees facilement : L i s t < I n t e g e r > l = new L i n k e d L i s t < I n t e g e r > ( ) ; (code qui utilise l et qui na pas ` a etre modi e)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 180 / 379
Java
Cours 6
Les collections
Les m ethodes de linterface Collection<V> : boolean add(V e) boolean addAll(Collection<? extends V> c) void clear() boolean contains(Object o) boolean containsAll(Collection<?> c) boolean isEmpty() boolean remove(Object o) boolean removeAll(Collection<?> c) boolean retainAll(Collection<?> c) int size() Object[] toArray() <T> T[] toArray(T[] a)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 181 / 379
Java
Cours 6
Les listes
Les m ethodes de linterface List<V> : void add(int index, V element) boolean addAll(int index, Collection<? extends V> c) V get(int index) int indexOf(Object o) int lastIndexOf(Object o) V remove(int index) int indexOf(Object o) V set(int index, V element) List<V> subList(int fromIndex, int toIndex) + les m ethodes de Collection<V>
29 mai 2012
182 / 379
Java
Cours 6
Les listes
Quelques impl ementations de linterface List<V> : ArrayList<V> : Tableau dont la taille varie dynamiquement. LinkedList<V> : Liste cha n ee. Vector<V> : Comme ArrayList mais synchronis e. Stack<V> : Pile (mais une impl ementation de Deque est pr ef erable).
29 mai 2012
183 / 379
Java
Cours 6
Les maps
Les m ethodes de linterface Map<K,V> : clear() boolean containsKey(Object key) boolean containsValue(Object value) Set<Map.Entry<K,V>> entrySet() V get(Object key) boolean isEmpty() Set<K> keySet() V put(K key, V value) void putAll(Map<? extends K,? extends V> m) V remove(Object key) int size() Collection<V> values()
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 184 / 379
Java
Cours 6
Les maps
Quelques impl ementations de linterface Map<K,V> : HashMap : table de hachage LinkedHashMap : table de hachage + listes chain ees TreeMap : arbre rouge-noir (Les el ements doivent etre comparables) Table de hachage :
John Smith 0 1 Lisa Smith +1-555-8976
Lisa Smith
872 873
John Smith
+1-555-1234
Sam Doe
998 999
Sam Doe
+1-555-5030
Calcul de lindice : int indice = key.hashcode() & (taille - 1) ; Calcul du hashcode : int hashcode() (m ethode de la classe Object)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 185 / 379
Java
Cours 6
Les maps
Quelques impl ementations de linterface Map<K,V> : HashMap : table de hachage LinkedHashMap : table de hachage + listes chain ees TreeMap : arbre rouge-noir (Les el ements doivent etre comparables) Arbre rouge-noir :
29 mai 2012
185 / 379
Java
Cours 6
Les maps
Quelques impl ementations de linterface Map<K,V> : HashMap : table de hachage LinkedHashMap : table de hachage + listes chain ees TreeMap : arbre rouge-noir (Les el ements doivent etre comparables) Arbre rouge-noir et interface Comparator : Map<Carte, Integer> m = new TreeMap<Carte, Integer>( new Comparator<Carte>() { public int compare(Carte o1, Carte o2) { ... }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 185 / 379
Java
Cours 6
Les ensembles
Set<V> ne contient que les m ethodes de Collection<V> Quelques impl ementations de linterface Set<V> : HashSet<V> : avec une HashMap. LinkedHashSet<V> : avec une LinkedHashMap. TreeSet<V> : avec une TreeMap.
29 mai 2012
186 / 379
Java
Cours 6
Les les
Les m ethodes de linterface Queue<V> : V element() boolean offer(V e) V peek() V poll() V remove() + les m ethodes de Collection<V>
29 mai 2012
187 / 379
Java
Cours 6
Java
Cours 6
Quelques impl ementations de linterface Deque<V> : ArrayDeque<V> : avec un tableau dynamique. LinkedList<V> : avec une liste cha n ee.
29 mai 2012
189 / 379
Java
Cours 6
Les iterateurs
Linterface Collection<V> etend Iterable<V> :
C o l l e c t i o n < I n t e g e r > l = new A r r a y L i s t < I n t e g e r > ( ) ; l . add ( 1 ) ; l . add ( 2 ) ; l . add ( 1 ) ; for ( Integer i : l ) System . o u t . p r i n t ( i+ ) ; System . o u t . p r i n t l n ( ) ;
Sortie : 1 2 1
C o l l e c t i o n < I n t e g e r > l = new HashSet < I n t e g e r > ( ) ; l . add ( 1 ) ; l . add ( 2 ) ; l . add ( 1 ) ; for ( Integer i : l ) System . o u t . p r i n t ( i+ ) ; System . o u t . p r i n t l n ( ) ;
Sortie : 1 2
29 mai 2012
190 / 379
Java
Cours 6
Les iterateurs
Exemple avec une HashMap :
Map< S t r i n g , I n t e g e r > m = new HashMap< S t r i n g , I n t e g e r > ( ) ; m. p u t ( t o t o , 4 ) ; m. p u t ( aaa , 3 ) ; m. p u t ( bb , 2 ) ; f o r ( I n t e g e r i : m. v a l u e s ( ) ) System . o u t . p r i n t ( i+ ) ; System . o u t . p r i n t l n ( ) ; f o r ( S t r i n g k : m. k e y S e t ( ) ) System . o u t . p r i n t ( k+ ) ; System . o u t . p r i n t l n ( ) ;
29 mai 2012
191 / 379
Java
Cours 6
Exceptions
Tout programme peut etre confront e` a une condition exceptionnelle (ou exception) durant son ex ecution. Une exception est une situation qui emp eche lex ecution normale du programme (elle nest pas un bug ). Exemple : Un chier n ecessaire ` a lex ecution du programme nexiste pas. Division par z ero D ebordement dans un tableau etc.
29 mai 2012
192 / 379
Java
Cours 6
29 mai 2012
193 / 379
Java
Cours 6
Java
Cours 6
La syntaxe try/catch
public s t a t i c void t e s t ( i n t i ) { System . o u t . p r i n t ( A ) ; try { System . o u t . p r i n t l n ( B ) ; i f ( i > 1 2 ) throw new MyException ( i ) ; System . o u t . p r i n t ( C ) ; } catch ( MyException e ) { System . o u t . p r i n t l n ( e ) ; } System . o u t . p r i n t l n ( D ) ; }
test(11) : A B C D
Bertrand Estellon (DIL Aix-Marseille)
Java
Cours 6
Une m ethode doit indiquer toutes les exceptions quelle peut g en erer et quelle na pas trait ees avec un bloc try/catch
(Partiellement vrai => voir plus loin)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 196 / 379
Java
Cours 6
Java
Cours 6
La classe RuntimeException
Une m ethode doit indiquer toutes les exceptions quelle peut g en erer sauf si lexception etend la classe RuntimeException Bien evidemment, la classe RuntimeException etend Exception Quelques classes Java qui etendent RuntimeException : ArithmeticException ClassCastException IllegalArgumentException IndexOutOfBoundsException NegativeArraySizeException NullPointerException
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 198 / 379
Java
Cours 6
Java
Cours 6
Le mot-cl e nally
public s t a t i c void r e a d F i l e ( S t r i n g f i l e ) { try { F i l e R e a d e r f = new F i l e R e a d e r ( f i l e ) ; (le constructeur de FileReader peut d eclencher une FileNotFoundException) try { i n t ch = f . r e a d ( ) ; (peut d eclencher une IOException) w h i l e ( ch != 1) { System . o u t . p r i n t l n ( ch ) ; ch = f . r e a d ( ) ; (peut d eclencher une IOException) } } f i n a l l y { (` a faire dans tous les cas) f . close (); } } catch ( IOException e ) { e . p r i n t S t a c k T r a c e ( ) ; } }
Java
Cours 6
Le mot-cl e nally
public s t a t i c void r e a d F i l e ( S t r i n g f i l e ) { try { F i l e R e a d e r f = new F i l e R e a d e r ( f i l e ) ; (le constructeur de FileReader peut d eclencher une FileNotFoundException) try { i n t ch = f . r e a d ( ) ; (peut d eclencher une IOException) w h i l e ( ch != 1) { System . o u t . p r i n t l n ( ch ) ; ch = f . r e a d ( ) ; (peut d eclencher une IOException) } } f i n a l l y { (` a faire dans tous les cas) f . close (); } } catch ( FileNotFoundE xcept ion e ) { System . o u t . p r i n t l n ( F i c h i e r + f i l e + i n t r o u v a b l e ) ; } catch ( IOException e ) { e . p r i n t S t a c k T r a c e ( ) ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 201 / 379
Java
Cours 6
Exemple La pile
p u b l i c c l a s s P i l e <T> { private Object [ ] p i l e ; private int t a i l l e ; public Pile ( int capacity ) { p i l e = new O b j e c t [ c a p a c i t y ] ; }
t a i l l e = 0;
Java
Cours 6
Exemple La pile
D enition des exceptions :
p u b l i c c l a s s P i l e E x c e p t i o n extends Exception { p u b l i c P i l e E x c e p t i o n ( S t r i n g msg ) { s u p e r ( msg ) ; } }
p u b l i c c l a s s P i l e P l e i n e E x c e p t i o n extends P i l e E x c e p t i o n { p u b l i c P i l e P l e i n e E x c e p t i o n ( ) { super ( P i l e p l e i n e ) ; } }
p u b l i c c l a s s P i l e V i d e E x c e p t i o n extends P i l e E x c e p t i o n { p u b l i c P i l e V i d e E x c e p t i o n ( ) { super ( P i l e v i d e ) ; } }
29 mai 2012
203 / 379
Java
Cours 6
Exemple La pile
Exemples dutilisation :
P i l e < I n t e g e r > p = new P i l e < I n t e g e r > ( 2 ) ; try { p . empiler (1); p . empiler (2); p . empiler (3); } catch ( P i l e E x c e p t i o n e ) { e . printStackTrace (); }
PilePleineException: Pile pleine at Pile.empiler(Pile.java:14) at Test.main(Test.java:58)
try { p . empiler (1); p. depiler (); p. depiler (); } catch ( P i l e E x c e p t i o n e ) { e . printStackTrace (); }
PileVideException: Pile vide at Pile.depiler(Pile.java:19) at Test.main(Test.java:67)
29 mai 2012
204 / 379
Java
Cours 6
La classe Throwable
En Java, toutes les instances des classes qui etendent Throwable peuvent etre jet ees et captur ees
Throwable
Error
Exception
RuntimeException
29 mai 2012
205 / 379
Java
Cours 6
La classe Throwable
La classe Throwable fournit les m ethodes suivantes :
Throwable Throwable() Throwable(message:String) Throwable(message:String, cause:Throwable) Throwable(cause:Throwable) fillInStackTrace():Throwable getCause():Throwable getLocalizedMessage():String getMessage():String getStackTrace():StackTraceElement[] initCause(cause:Throwable):Throwable printStackTrace():void printStackTrace(s:PrintStream):void printStackTrace(s:PrintWriter):void setStackTrace(stackTrace:StackTraceElement[]):void toString():String
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 206 / 379
Java
Cours 6
ThreadDeath
Exception :
IOException
FileNotFoundException SocketException
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 207 / 379
Java
Cours 6
R esum e
Structures de donn ees M ecanisme de gestion des exceptions La classe Exception D enir un type dexception Mot-cl e throw Utilisations de try, catch et nally Mot-cl e throws Les classes RuntimeException, Throwable et Error Les exceptions de Java
29 mai 2012
208 / 379
Java
Cours 7
UML
UML = Unied Modeling Language. UML est un langage de mod elisation graphique. UML est apparu dans le cadre de la conception orient ee objet . UML propose 13 types de diagrammes qui permettent la mod elisation dun projet durant tout son cycle de vie. Nous allons nous int eresser aux diagrammes de classes.
29 mai 2012
209 / 379
Java
Cours 7
Diagramme de classes
Sch ema utilis e pour repr esenter les classes et les interfaces. On repr esente egalement les int eractions entre les classes. Il est statique : on fait abstraction des aspects temporels. On peut ecrire notre programme ` a partir du diagramme de classes. Il permet de r e echir ` a la structure du programme. Il permet de d ecrire la structure du programme.
29 mai 2012
210 / 379
Java
Cours 7
Champ nom : type M ethode nom ( arguments ) : type Arguments argument ( , argument ) * Argument nom : type
29 mai 2012
211 / 379
Java
Cours 7
A droite, la m ethode method2 est abstraite. Donc, ` a droite, la classe est abstraite.
29 mai 2012
212 / 379
Java
Cours 7
Visibilit e
# +
: : : :
29 mai 2012
213 / 379
Java
Cours 7
29 mai 2012
214 / 379
Java
Cours 7
29 mai 2012
215 / 379
Java
Cours 7
D ependances
29 mai 2012
216 / 379
Java
Cours 7
Associations
29 mai 2012
217 / 379
Java
Cours 7
Navigation
Entreprise utilise des m ethodes de Fournisseur Fournisseur ne connait pas (et nutilise pas) Entreprise Sans ` eche, une association est navigable dans les deux sens
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 218 / 379
Java
Cours 7
Multiplicit e
29 mai 2012
219 / 379
Java
Cours 7
Multiplicit e
29 mai 2012
220 / 379
Java
Cours 7
Agr egations
29 mai 2012
221 / 379
Java
Cours 7
Compositions
Les pi` eces composent la maison. Les pi` eces nexistent que si la maison existe.
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 222 / 379
Java
Cours 7
29 mai 2012
223 / 379
Java
Cours 7
OperateurNAire Variable - name : String - value : double + afficher() : String + evaluer() : double + set(v : double) + f : Formule[] + OperateurNAire(f : Formule[]) + OperateurNAire(f1 : Formule, f2 : Formule) + afficher() : String + evaluer() : double # symbole() : char # evaluerBinaire(a : double, b : double) : double # evaluerVide() : double
Produit + Produit(f : Formule[]) + Produit(f1 : Formule, f2 : Formule) # symbole() : char # evaluerBinaire(a : double, b : double) : double # evaluerVide() : double
Somme + Somme(f : Formule[]) + Somme(f1 : Formule, f2 : Formule) # symbole() : char # evaluerBinaire(a : double, b : double) : double # evaluerVide() : double
29 mai 2012
224 / 379
Java
Cours 7
AbstractShape - points : List<Point> + AbstractShape() # addPoint(p : Point) + getPoint(i : int) : Point + getNumberOfPoints() : int + paint(g : Graphics)
Decorator # decoratedShape : Shape + Decorator(decoratedShape : Shape) + paint(g : Graphics) + getNumberOfPoints() : int + getPoint(i : int) : Point # paintDecoration(g : Graphics)
Polygon - color : Color + Polygon(color : Color, points : Point[]) + paint(g : Graphics) - color : Color
* Point
BorderDecorator - radius : int - color : Color + BorderDecorator(s : Shape, radius : int, color : Color) # paintDecoration(g : Graphics)
29 mai 2012
225 / 379
Java
Cours 7
Les objectifs : Faciliter le d eveloppement et l evolution des applications ; Permettre le travail en equipe ; Augmenter la qualit e des logiciels (moins de bugs). Solutions propos ees : D ecoupler (s eparer) les parties des projets ; Limiter (et localiser) les modications lors des evolutions ; R eutiliser facilement du code.
29 mai 2012
226 / 379
Java
Cours 7
29 mai 2012
227 / 379
Java
Cours 7
Les evolutions
Prise en compte dune evolution : Modication du cahier des charges Adaptation de larchitecture Impl ementation des nouvelles fonctionnalit es Tests unitaires Int egration Qualication (v erication de la conformit e aux sp ecications) Mise en production
29 mai 2012
228 / 379
Java
Cours 7
Gagner du temps Remarque : Le d eveloppement dune application est une suite d evolutions
29 mai 2012
229 / 379
Java
Cours 7
29 mai 2012
230 / 379
Java
Cours 7
Java
Cours 7
Java
Cours 7
Rectangle
Violation de SRP :
GraphicalInterface GraphicalApplication
29 mai 2012
232 / 379
Java
Cours 7
29 mai 2012
233 / 379
Java
Cours 7
Java
Cours 7
Java
Cours 7
Java
Cours 7
29 mai 2012
237 / 379
Java
Cours 7
29 mai 2012
238 / 379
Java
Cours 7
La mauvaise question : Un carr e est-il un rectangle ? La bonne question : Pour les utilisateurs, votre carr e a-t-il le m eme comportement que votre rectangle ? La r eponse : Dans ce cas, NON
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 239 / 379
Java
Cours 7
29 mai 2012
240 / 379
Java
Cours 7
Utilisation :
public void t e s t R e c t a n g l e ( Rectangle r ) { r . setWidth ( 2 ) ; r . setHeight ( 3 ) ; i f ( r . g e t A r e a ( ) ! = 3 2 ) System . o u t . p r i n t l n ( j a m a i s ! ) ; } p u b l i c void t e s t S q u a r e ( Square s ) { s . setSideLength (2); i f ( s . g e t A r e a ( ) ! = 2 2 ) System . o u t . p r i n t l n ( j a m a i s ! ) ; }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 241 / 379
Java
Cours 8
Plan du cours
Patrons de conception
29 mai 2012
242 / 379
Java
Cours 8
29 mai 2012
243 / 379
Java
Cours 8
Java
Cours 8
Homme
Femme
+ + + +
+ + + +
29 mai 2012
245 / 379
Java
Cours 8
p u b l i c c l a s s Femme implements E m p l o y e r { public void t r a v a i l l e r () { System . o u t . p r i n t l n ( Je s u i s une femme e t j e t r a v a i l l e ) ; } p u b l i c v o i d manger ( ) { System . o u t . p r i n t l n ( Je s u i s une femme e t j e mange ) ; } public void dormir () { System . o u t . p r i n t l n ( Je s u i s une femme e t j e d o r s ) ; } }
29 mai 2012
246 / 379
Java
Cours 8
Java
Cours 8
Robot
Homme
Femme
+ + + +
+ + + +
+ + + +
29 mai 2012
248 / 379
Java
Cours 8
29 mai 2012
249 / 379
Java
Cours 8
+ t ravailler()
+ manger() + dormir()
Homme
+ Robot () + t ravailler()
29 mai 2012
250 / 379
Java
Cours 8
Java
Cours 8
+ draw(g : Graphics)
Rect angle - p1 : Point - p2 : Point + Rect angle(p1 : Point , p2 : Point ) + draw(g : Graphics)
Circle ~ c : Point ~ radius : int + Circle(c : Point , radius : int ) + draw(g : Graphics)
29 mai 2012
252 / 379
Java
Cours 8
+ draw(g : Graphics)
+ FileLoader()
inst ancie
inst ancie
Rect angle - p1 : Point - p2 : Point + Rect angle(p1 : Point , p2 : Point ) + draw(g : Graphics)
Circle ~ c : Point ~ radius : int + Circle(c : Point , radius : int ) + draw(g : Graphics)
29 mai 2012
253 / 379
Java
Cours 8
Java
Cours 8
p u b l i c v o i d l o a d F i l e ( S h a p e P a n e l p , S t r i n g name ) { S c a n n e r s = new S c a n n e r ( name ) ; while ( s . hasNext ( ) ) { switch ( s . n e x t I n t ( ) ) { case 0 : l oa dC i r cl e (p , s ) ; case 1 : loadRectangle (p , s ) ; } } s . nextInt (); } }
29 mai 2012
255 / 379
Java
Cours 8
+ draw(g : Graphics)
Rect angle - p1 : Point - p2 : Point + Rect angle(p1 : Point , p2 : Point ) + draw(g : Graphics)
Circle ~ c : Point ~ radius : int + Circle(c : Point , radius : int ) + draw(g : Graphics)
NewCircle
29 mai 2012
256 / 379
Java
Cours 8
+ draw(g : Graphics)
+ FileLoader()
inst ancie
Circle ~ c : Point ~ radius : int + Circle(c : Point , radius : int ) + draw(g : Graphics) - p1 : Point - p2 : Point
NewCircle
29 mai 2012
257 / 379
Java
Cours 8
Java
Cours 8
+ draw(g : Graphics)
+ ShapeFact ory() + creat eCircle(p : Point , radius : int ) : Shape + creat eRect angle(p1 : Point , p2 : Point ) : Shape
inst ancie
Circle ~ c : Point ~ radius : int + Circle(c : Point , radius : int ) + draw(g : Graphics) - p1 : Point - p2 : Point
NewCircle
29 mai 2012
259 / 379
Java
Cours 8
29 mai 2012
260 / 379
Java
Cours 8
Java
Cours 8
Java
Cours 8
FileLoader - f act ory : Abst ract ShapeFact ory + + + + FileLoader(f act ory : Abst ract ShapeFact ory) loadCircle(p : ShapePanel, s : Scanner) loadRect angle(p : ShapePanel, s : Scanner) loadFile(p : ShapePanel, name : St ring)
use
+ creat eCircle(p : Point , radius : int ) : Circle + creat eRect angle(p1 : Point , p2 : Point ) : Rect angle
ShapeFact oryVersion2
ShapeFact oryVersion1
+ ShapeFact oryVersion2() + creat eCircle(p : Point , radius : int ) : Circle + creat eRect angle(p1 : Point , p2 : Point ) : Rect angle
+ ShapeFact oryVersion1() + creat eCircle(p : Point , radius : int ) : Circle + creat eRect angle(p1 : Point , p2 : Point ) : Rect angle
29 mai 2012
263 / 379
Java
Cours 8
ShapeFactoryVersion2 + ShapeFactoryVersion2() + createCircle(p : Point, radius : int) : Circle + createRectangle(p1 : Point, p2 : Point) : Rectangle
ShapeFactoryVersion1 + ShapeFactoryVersion1() + createCircle(p : Point, radius : int) : Circle + createRectangle(p1 : Point, p2 : Point) : Rectangle
instancie
instancie
instancie
Rectangle instancie - p1 : Point - p2 : Point + Rectangle(p1 : Point, p2 : Point) + draw(g : Graphics) - c : Point - radius : int
Circle
29 mai 2012
264 / 379
Java
Cours 8
add shape
use
interface AbstractShapeFactory + createCircle(p : Point, radius : int) : Circle + createRectangle(p1 : Point, p2 : Point) : Rectangle
* interface Shape + draw(g : Graphics) ShapeFactoryVersion1 + ShapeFactoryVersion1() + createCircle(p : Point, radius : int) : Circle + createRectangle(p1 : Point, p2 : Point) : Rectangle ShapeFactoryVersion2 + ShapeFactoryVersion2() + createCircle(p : Point, radius : int) : Circle + createRectangle(p1 : Point, p2 : Point) : Rectangle
instancie
instancie
instancie
Circle - c : Point - radius : int + Circle(c : Point, radius : int) + draw(g : Graphics) - p1 : Point - p2 : Point
Rectangle instancie
29 mai 2012
265 / 379
Java
Cours 8
FileLoader - f act ory : Abst ract ShapeFact ory + + + + FileLoader(f act ory : Abst ract ShapeFact ory) loadCircle(p : ShapePanel, s : Scanner) loadRect angle(p : ShapePanel, s : Scanner) loadFile(p : ShapePanel, name : St ring)
add shape
29 mai 2012
266 / 379
Java
Cours 8
Java
Cours 8
Java
Cours 8
add shape
use
ShapePanel
inst ancie
Circle
Rect angle
inst ancie
NewCircle
29 mai 2012
269 / 379
Java
Cours 8
Les patrons de conception d ecrivent des solutions standards pour r epondre aux probl` emes rencontr es lors de la conception orient ee objet Ils tendent ` a respecter les 5 principes SOLID Ils sont le plus souvent ind ependants du langage de programmation Ils ont et e formalis es dans le livre du Gang of Four ( Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides 1995) Les patrons orent la possibilit e de capitaliser un savoir pr ecieux n e du savoir-faire dexperts (Buschmann 1996) Les anti-patrons (ou antipatterns) sont des erreurs courantes de conception.
29 mai 2012
270 / 379
Java
Cours 8
Fabrique abstraite (Abstract Factory) Monteur (Builder) Fabrique (Factory Method) Prototype (Prototype) Singleton (Singleton)
29 mai 2012
271 / 379
Java
Cours 8
Adaptateur (Adapter) Pont (Bridge) Objet composite (Composite) D ecorateur (Decorator) Fa cade (Facade) Poids-mouche ou poids-plume (Flyweight) Proxy (Proxy)
29 mai 2012
272 / 379
Java
Cours 8
Java
Cours 8
Fabrique abstraite
Utilisateur
utilise
utilise
interface ProduitAbstraitB
utilise
ProduitB2
ProduitB1
ProduitA2
ProduitA1
Java
Cours 8
Adapteur
Utilisateur + Utilisateur()
utilise
29 mai 2012
275 / 379
Java
Cours 8
Adapteur
Utilisateur + Utilisateur()
ClasseExistante classeExistante; public Adapteur() { classeExistante = new ClasseExistante(); } public void methodA(String a, int b) { classeExistante.method1(b, a); } public void methodB(int b, String a) { classeExistante.method2(b, a); } }
Adapteur ~ classeExistante : ClasseExistante + Adapteur() + methodA(a : String, b : int) + methodB(b : int, a : String) dlgue
29 mai 2012
276 / 379
Java
Cours 8
Proxy
Client + Client()
utilise
public class Conteneur implements IConteneur { private int v; public void set(int v) { this.v = v; } public int get() { return v; }
29 mai 2012
277 / 379
Java
Cours 8
Proxy
Client + Client()
utilise
public class ConteneurNonModifiable implements IConteneur { private Conteneur classeExistante; public ConteneurNonModifiable(Conteneur c) { classeExistante = c; } public void set(int v) { throw new UnsupportedOperationException(); } public int get() { return classeExistante.get(); } }
Programmation Orient ee Objet 29 mai 2012 278 / 379
ConteneurNonModifiable (Proxy) - classeExistante : Conteneur + ConteneurNonModifiable(c : Conteneur) + set(v : int) + get() : int dlgue
Java
Cours 8
Patron de m ethode
Exemple dutilisation du patron de m ethode :
OperateurNAire evaluer() : double evaluerBinaire(a : int, b : int) : int evaluerVide() : int
La classe OperateurNAire est abstraite ; La m ethode evaluer est une m ethode socle qui utilise evaluerBinaire et evaluerVide pour d enir son comportement ; Les m ethodes evaluerBinaire et evaluerVide sont abstraites dans OperateurNAire et d enies dans les classes qui etendent OperateurNAire ;
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 279 / 379
Java
Cours 8
Java
Cours 8
public class CallbackImpl2 implements Callback { public void method(int c) { System.out.println("* "+c+" *"); } public class MaClasse { public static void function(int d, Callback callback) { /* ... */ callback.method(d); /* ... */ } public static void main(String[] args) { Callback c1 = new CallbackImpl1(); function(2, c1); Callback c2 = new CallbackImpl2(); function(4, c2); } }
Programmation Orient ee Objet
29 mai 2012
281 / 379
Java
Cours 8
public static void callbackImpl1(int c) {Console.WriteLine("{0}",c);} public static void callbackImpl2(int c) {Console.WriteLine("* {0} *",c);} public static void function(int d, Callback callback) { /* ... */ callback(d); /* ... */ } static void Main(string[] args) { Callback c1 = new Callback(callbackImpl1); function(2,c1); Callback c2 = new Callback(callbackImpl2); function(4,c2); } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 282 / 379
Java
Cours 9
Les classes qui g` erent les ux sont dans le package java.io Certaines classes permettent de lire ou d ecrire dans ou vers di erents supports (chier, cha ne de caract` eres, tubes, socket, etc.) Dautres permettent de faire des traitements sur les donn ees (ltres) InputStream, OutputStream, Reader, Writer = classes abstraites
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 283 / 379
Java
Cours 9
29 mai 2012
284 / 379
Java
Cours 9
...
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 285 / 379
Java
Cours 9
Exemple :
byte [ ] b y t e s = { 1 0 , 1 1 , 1 2 } ; I n p u t S t r e a m i s = new B y t e A r r a y I n p u t S t r e a m ( b y t e s ) ; while ( i s . a v a i l a b l e ( ) > 0) System . o u t . p r i n t l n ( i s . r e a d ( ) ) ;
Sortie :
10 11 12
29 mai 2012
286 / 379
Java
Cours 9
29 mai 2012
287 / 379
Java
Cours 9
Sortie : 97 98 99 10
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 288 / 379
Java
Cours 9
Java
Cours 9
29 mai 2012
290 / 379
Java
Cours 9
PipedReader : Lecture dans un tube StringReader : Lecture dans une cha ne de caract` eres FilterReader : Ajoute un traitement sur le ux dentr ee
PushbackReader : Permet de remettre des caract` eres dans le ux
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 291 / 379
Java
Cours 9
Exemple :
Reader r = new S t r i n g R e a d e r ( t o t o ) ;
Sortie :
t o t o
29 mai 2012
292 / 379
Java
Cours 9
29 mai 2012
293 / 379
Java
Cours 9
Sortie :
L1 L2 L3
29 mai 2012
294 / 379
Java
Cours 9
Sortie :
1 : L1 2 : L2 3 : L3
29 mai 2012
295 / 379
Java
Cours 9
Flux doctets de sortie ( etendant OutputStream) : ByteArrayOutputStream : Ecriture dans un tableau doctets FileOutputStream : Ecriture dans un chier ObjectOutputStream : Ecriture dobjets dans un OutputStream PipedOutputStream : Ecriture dans un tube
29 mai 2012
296 / 379
Java
Cours 9
...
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 297 / 379
Java
Cours 9
Sortie :
97 98 99 abc
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 298 / 379
Java
Cours 9
Les m ethodes de la classe OutputStream : void close() : ferme le ux int write(byte[] b) : ecrit une sequence doctets int write(byte[] b, int o, int len) : ecrit une sequence doctets abstract void write(int b) : ecrit un octet sur le ux void ush() : force les buers ` a etre ecrit
29 mai 2012
299 / 379
Java
Cours 9
Java
Cours 9
PipedWriter : Ecriture dans un tube StringWriter : Ecriture dans une cha ne de caract` eres PrintWriter : Ecriture avec des m ethodes de formatage FilterWriter : Ajoute un traitement sur le ux de sortie
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 301 / 379
Java
Cours 9
Java
Cours 9
29 mai 2012
303 / 379
Java
Cours 9
System.{out,in,err}
Dans la classe System : public public public public Exemple :
System . o u t . p r i n t l n ( e c r i t u r e s u r l a s o r t i e s t a n d a r d ) ; System . e r r . p r i n t l n ( e c r i t u r e s u r l a s o r t i e d e r r e u r ) ; B u f f e r e d R e a d e r i n p u t = new B u f f e r e d R e a d e r ( new I n p u t S t r e a m R e a d e r ( System . i n ) ) ; String s = input . readLine ( ) ; w h i l e ( s != n u l l ) { System . o u t . p r i n t l n ( s ) ; s = input . readLine ( ) ; }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 304 / 379
nal InputStream in : entr ee standard nal PrintStream out : sortie standard nal PrintStream err : sortie derreur Console console() : retourne la console
Java
Cours 9
System.console()
Dans la classe Console : void ush() : vide le buer Console format(String fmt, Object... args) : ecriture format ee Console printf(String format, Object... args) : ecriture format ee Reader reader() : retourne le Reader de la console String readLine() : lit une ligne String readLine(String fmt, Object... args) : idem avec format char[] readPassword() : lit un mot de passe char[] readPassword(String fmt, Object... args) : idem avec format PrintWriter writer() : retourne le Writer de la console Attention : System.console() retourne une r ef erence null si le syst` eme ne supporte pas cette fonctionnalit e
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 305 / 379
Java
Cours 9
...
IllegalFormatException Exemple :
try { F i l e R e a d e r r e a d e r = new F i l e R e a d e r ( t r u c . t x t ) ; } c a t c h ( F i l e N o t F o u n d E x c e p t i o n ex ) { System . o u t . p r i n t l n ( t r u c . t x t n e x i s t e p a s ! ) ; }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 306 / 379
Java
Cours 9
Java
Cours 9
Un programme peut lancer plusieurs threads Les threads lanc es par un programme s executent en parall` ele Si lordinateur na pas assez de processeur pour ex ecuter tous les threads en parall` ele, le syst` eme dexploitation va simuler le multit ache en changeant r eguli` erement le thread en cours dex ecution Tous les threads partagent le m eme espace m emoire En Java, linterface Runnable et la classe Thread permettent de cr eer des threads
29 mai 2012
308 / 379
Java
Cours 9
Linterface Runnable
Linterface Runnable contient la m ethode void run() p u b l i c c l a s s Compteur implements R u n n a b l e { public void run ( ) { int cpt = 0; while ( cpt < 100) { System . o u t . p r i n t ( c p t+ ) ; c p t ++; } } }
29 mai 2012
309 / 379
Java
Cours 9
La classe Thread
Chaque instance de cette classe correspond ` a un thread Elle impl emente linterface Runnable Quelques m ethodes non-statiques de la classe Thread : Thread() : constructeur par d efaut Thread(Runnable target) : constructeur avec un Runnable void start() : d emarre le thread void join() : attend que le thread meure void interrupt() : interrompt le thread boolean isAlive() : est-ce que le thread est en vie ? boolean isInterrupted() : est-ce que le thread est interrompu ? boolean isDaemon() : est-ce que le thread est un d emon ?
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 310 / 379
Java
Cours 9
Sortie : 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 311 / 379
Java
Cours 9
Sortie : 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 312 / 379
Java
Cours 9
La classe Thread
Quelques m ethodes statiques de la classe Thread : Thread currentThread() : retourne le thread courant boolean interrupted() : est-ce que le thread courant est interrompu ? void sleep(long millis) : endort le thread courant void yield() : interrompt le thread courant int activeCount() : nombre de threads actifs
29 mai 2012
313 / 379
Java
Cours 9
L etat dinterruption
Interrompre un thread signie vouloir quil arr ete son ex ecution Un thread peut etre interrompu avec la m ethode interrupt() Si le thread dort, il faut le r eveiller pour quil puisse sinterrompre Solution : L etat dinterruption et lexception InterruptedException La m ethode interrupted() permet de consulter l etat dinterruption Compteur qui sarr ete quand le thread est interrompu :
p u b l i c c l a s s Compteur e x t e n d s Thread { p u b l i c void run ( ) { int cpt = 0; w h i l e ( ! i n t e r r u p t e d ( ) ) c p t ++; System . o u t . p r i n t l n ( c p t ) ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 314 / 379
Java
Cours 9
L etat dinterruption
Utilisation du compteur :
p u b l i c c l a s s Main { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Thread t h 1 = new Compteur ( ) ; th1 . s t a r t ( ) ; . . . ; th1 . i n t e r r u p t ( ) ; } }
Java
Cours 9
L etat dinterruption
Utilisation du compteur :
p u b l i c c l a s s Main { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Thread t h 1 = new Compteur ( ) ; th1 . s t a r t ( ) ; . . . ; th1 . i n t e r r u p t ( ) ; } }
Java
Cours 9
L etat dinterruption
Thread qui interrompt un autre thread apr` es un certain temps :
p u b l i c c l a s s S t o p p e r e x t e n d s Thread { Thread t h r e a d ; int timeLimit ; p u b l i c S t o p p e r ( Thread t h r e a d , i n t t i m e L i m i t ) { this . thread = thread ; this . timeLimit = timeLimit ; } void run ( ) { try { sleep ( timeLimit ); } c a t c h ( I n t e r r u p t e d E x c e p t i o n ex ) { return ; } thread . i n t e r r u p t ( ) ; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 317 / 379
Java
Cours 9
L etat dinterruption
Exemple dutilisation des classes pr ec edentes :
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Thread t h 1 = new Compteur ( ) ; th1 . s t a r t ( ) ; Thread t h 2 = new S t o p p e r ( th1 , 3 5 0 ) ; th2 . s t a r t ( ) ; }
Ex ecution :
4 1 Compteur 0 1 Stopper 0
Programmation Orient ee Objet
2 100
3 200
4 300
temps interrupt() temps
350
29 mai 2012
318 / 379
Java
Cours 9
Java
Cours 9
Synchronisation
Un thread qui empile 10 entiers :
p u b l i c c l a s s E m p i l e u r e x t e n d s Thread { private PileLente p i l e ; public Empileur ( PileLente p i l e ) { this . pile = pile ; } p u b l i c void run ( ) { f o r ( i n t i = 0 ; i < 1 0 ; i ++) try { p i l e . push ( i ) ; } c a t c h ( I n t e r r u p t e d E x c e p t i o n ex ) { return ; } } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 320 / 379
Java
Cours 9
Synchronisation
Ex ecution en parall` ele de deux empileurs sur une m eme pile :
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) throws I n t e r r u p t e d E x c e p t i o n { P i l e L e n t e p i l e = new P i l e L e n t e ( ) ; Thread t h 1 = new E m p i l e u r ( p i l e ) ; Thread t h 2 = new E m p i l e u r ( p i l e ) ; th1 . s t a r t ( ) ; th2 . s t a r t ( ) ; t h 1 . j o i n ( ) ; // On attend la n du thread 1 t h 2 . j o i n ( ) ; // On attend la n du thread 2 w h i l e ( p i l e . s i z e () > 0) { System . o u t . p r i n t ( p i l e . pop ()+ ) ; }
Java
Cours 9
Synchronisation
Ex ecution (en parall` ele) de la m ethode push dans deux threads : Thread 1 int s = size ; (s = x ) tab[s] = p ; sleep(100) ; size = s + 1 ; (size = x + 1) Thread 2
Probl` eme : Deux entiers ont et e empil es et la pile et la taille de la pile est pass ee de x ` a x +1
29 mai 2012
322 / 379
Java
Cours 9
Le mot-cl e Synchronized
Interdire que deux invocations sur une m eme instance sentrem elent :
public class PileLente { ... s y n c h r o n i z e d v o i d push ( i n t p ) throws I n t e r r u p t e d E x c e p t i o n { i n t s = s i z e ; tab [ s ] = p ; Thread . s l e e p ( 1 0 0 ) ; size = s + 1; } s y n c h r o n i z e d i n t pop ( ) { s i z e ; r e t u r n t a b [ s i z e ] ; } ... }
Signication : Si un thread T invoque la m ethode push alors quune autre m ethode synchronis ee est en cours dex ecution dans un autre thread alors le thread T est suspendu et doit attendre que la m ethode push soit disponible (cest-` a-dire, quaucun thread ne soit en train dex ecuter une m ethode synchronis ee sur linstance)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 323 / 379
Java
Cours 9
Question : Comment obtenir la m eme fonctionnalit e sur une structure de donn ees que vous avez ecrite ?
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 324 / 379
Java
Cours 9
Java
Cours 10
JavaDoc
Outil pour g en erer automatiquement une documentation du code Il g en` ere une documentation au format HTML Cette documentation est lisible dans Eclipse ou NetBeans Le document contient :
Une description des membres (publics et prot eg es) des classes Des liens permettant de naviguer entre les classes Des informations sur lh eritage
La documentation est g en er ee ` a partir des commentaires Les commentaires doivent respecter un certain format
29 mai 2012
326 / 379
Java
Cours 10
Exemple de JavaDoc
29 mai 2012
327 / 379
Java
Cours 10
Exemple de JavaDoc
29 mai 2012
328 / 379
Java
Cours 10
Exemple de JavaDoc
29 mai 2012
329 / 379
Java
Cours 10
Java
Cours 10
29 mai 2012
331 / 379
Java
Cours 10
29 mai 2012
332 / 379
Java
Cours 10
Java
Cours 10
Java
Cours 10
29 mai 2012
335 / 379
Java
Cours 10
Java
Cours 10
29 mai 2012
337 / 379
Java
Cours 10
Java
Cours 10
29 mai 2012
339 / 379
Java
Cours 10
29 mai 2012
340 / 379
Java
Cours 10
G en eration de la documentation
Avec Eclipse ou NetBeans :
Java
Cours 10
29 mai 2012
342 / 379
Java
Cours 10
Java
Cours 10
R evision Classes
class UneClasse { int field1; String field2; UneClasse(int p1) { /* Constructeur de Truc */ field1 = p1; } int method(int p1, int p2) { return p1 + p2 + field1; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 344 / 379
Java
Cours 10
Champ nom : type M ethode nom ( arguments ) : type Arguments argument ( , argument ) * Argument nom : type
29 mai 2012
345 / 379
Java
Cours 10
R evision Interfaces
interface UneInterface { /** Description du comportement de la m ethode. * * @param p1 ... */ void method1(int p1); /** Description du comportement de la m ethode. * * @param p1 ... * @param p2 ... * @return .... */ int method2(int p2, int p3); }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 346 / 379
Java
Cours 10
Java
Cours 10
Java
Cours 10
29 mai 2012
349 / 379
Java
Cours 10
29 mai 2012
350 / 379
Java
Cours 10
R evision Polymorphisme
Une interface et deux classes qui limpl ementent : interface I { void method(); } class A implements I { void method() { System.out.println("A"); } } class B implements I { void method() { System.out.println("B"); } } Laquelle des deux m ethodes est appel ee ? int test(boolean choix) I i; if (choix) i = new A(); else i = new B(); i.method(); }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 351 / 379
Java
Cours 10
R evision Polymorphisme
Une classe qui etend une classe : class A { void method() { System.out.println("A"); } } class B extends A { void method() { System.out.println("B"); } } Laquelle des deux m ethodes est appel ee ? int test(boolean choix) A a; if (choix) a = new A(); else i = new B(); a.method(); }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 352 / 379
Java
Cours 10
29 mai 2012
353 / 379
Java
Cours 10
Java
Cours 10
Utilisation : public static void main(String[] args) { for (Bidule b : Bidule.values()) System.out.printf("Le prix de %s est %d", b.nom(), b.prix()); }
29 mai 2012
355 / 379
Java
Cours 10
29 mai 2012
356 / 379
Java
Cours 10
Java
Cours 10
29 mai 2012
358 / 379
Java
Cours 10
Pour rendre un membre prot eg e, on utilise le modicateur protected : public class ClassePublique { protected i n t p r o p r i e t e P r o t e g e e ; protected void methodeProtegee ( ) { } } Utilisation possible : Commencer limpl ementation dun service dans une classe et la terminer dans les classes qui l etendent . Interpr etation : Les membres prot eg es forment une interface entre une classe et les classes qui l etendent.
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 359 / 379
Java
Cours 10
# +
: : : :
29 mai 2012
360 / 379
Java
Cours 10
Java
Cours 10
abstract class A { abstract int prix(); void afficherPrix() { System.out.println(prix()); }; } class B extends A { int prix() { return 5; } } class C extends A { int prix() { return 10; } }
29 mai 2012
362 / 379
Java
Cours 10
29 mai 2012
363 / 379
Java
Cours 10
Java
Cours 10
R evision this
class Machin { private String nom; private int prix; public Machin(String nom, int prix) { this.nom = nom; this.prix = prix; } int ajouterPrix(int prix) { return prix + this.prix; } }
29 mai 2012
365 / 379
Java
Cours 10
R evision super
class Truc { private String nom; public Truc(String nom) { this.nom = nom; } public String toString() { return nom; } } class Machin extends Truc { private int prix; public Machin(String nom, int prix) { super(nom); this.prix = prix; } public String toString() { return super.toString() + " "+prix; } }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 366 / 379
Java
Cours 10
R evision Exceptions
Elles etendent Exception et on les jette avec le mot-cl e throw : throw new MyException("truc"); On les captures avec try/catch : try { ... } catch(MyException e) { ... } On les fait remonter avec throws : void method() throws MyException { ... }
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 367 / 379
Java
Cours 10
Les types simples : boolean byte char short int long double float void
29 mai 2012
368 / 379
Java
Cours 10
29 mai 2012
369 / 379
Java
Cours 10
Map<K,V> : Ensemble de couples cl e-valeur. Il est pr ef erable dutiliser les interfaces pour typer les variables : L i s t < I n t e g e r > l = new A r r a y L i s t < I n t e g e r > ( ) ; (code qui utilise l) car on peut changer la structure de donn ees facilement : L i s t < I n t e g e r > l = new L i n k e d L i s t < I n t e g e r > ( ) ; (code qui utilise l et qui na pas ` a etre modi e)
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 370 / 379
Java
Cours 10
Java
Cours 10
Java
Cours 10
Boolean : public Boolean(boolean b) Character : public Character(char c) Cr eation et utilisation dune liste de bool eens : List<Boolean> liste = new ArrayList<Boolean>(); liste.add(true);
Bertrand Estellon (DIL Aix-Marseille) Programmation Orient ee Objet 29 mai 2012 373 / 379
Java
Cours 10
Java
Cours 10
Les autres mots r eserv es de Java : assert goto native assert strictfp volatile instanceof transient
29 mai 2012
375 / 379
Java
Cours 10
29 mai 2012
376 / 379
Java
Cours 10
29 mai 2012
377 / 379
Java
Cours 10
Interfaces graphiques (Swing, AWT, SWT...) Applications r eseaux (Int eraction avec le r eseau, RMI, s ecurit e, ...) Site Web (JFace, JSP, DOM, Servlets, GWT...) Gestion des formats de donn ees (XML, Excels...) Bases de donn ees (JDBC, JDO, Hibernate...) Gestion des tests unitaires (JUnit) Application sur t el ephones mobiles (J2ME, Android...) ... Pour utiliser ces technologies, les concepts de POO sont indispensables
29 mai 2012
378 / 379
Java
Cours 10
C++ : tr` es utilis e Objective C : langage utilis e par Apple (IPhone, IPad...) ActionScript : langage dAdobe (Flash) C# : langage de Microsoft (.NET, SilverLight) PHP : langage tr` es utilis e sur le Web Python Ruby Pour utiliser ces langages, les concepts de POO sont indispensables La syntaxe change mais les concepts de POO sont les m emes
29 mai 2012
379 / 379