Professional Documents
Culture Documents
Krmolls email: {andrey,molli}@loria.fr web: http://www.loria.fr/molli,andrey ESIAL, Universit de Nancy I, e IUT de Dijon, Universit de Bourgogne e August 26, 1998
N I I AO VN AA J H
1
ESIAL Nancy
CONTENTS
CONTENTS
Contents
1 Introduction 2 The 2.1 2.2 2.3 Java Programming Language Overview . . . . . . . . . . . . . . . . . . . . . . . . . Compilation and Execution . . . . . . . . . . . . . . . Classes and Objects . . . . . . . . . . . . . . . . . . . 2.3.1 Classes and Objects . . . . . . . . . . . . . . . 2.3.2 Instantiation and Constructors . . . . . . . . . 2.3.3 Classes and Encapsulation . . . . . . . . . . . . 2.3.4 Arrays . . . . . . . . . . . . . . . . . . . . . . . 2.3.5 Garbage Collectors vs Destructors . . . . . . . 2.3.6 Class Fields, Class Methods . . . . . . . . . . . Inheritance . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 Overview and Simple Example . . . . . . . . . 2.4.2 Inheritance and Constructors . . . . . . . . . . 2.4.3 Hiding, Overriding, Overloading... . . . . . . . Polymorphism . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Overview . . . . . . . . . . . . . . . . . . . . . 2.5.2 Polymorphism, inheritance and abstract classes 2.5.3 Abstract and Final Classes . . . . . . . . . . . 2.5.4 Polymorphism and Interfaces . . . . . . . . . . 2.5.5 Interfaces vs Multiple Inheritance . . . . . . . . Inheritance and Encapsulation . . . . . . . . . . . . . 2.6.1 Inheritance and Private . . . . . . . . . . . . . 2.6.2 Encapsulation and Overriding . . . . . . . . . . 2.6.3 Protected Modier . . . . . . . . . . . . . . . . Exceptions . . . . . . . . . . . . . . . . . . . . . . . . 2.7.1 Anatomy and Life Cycle . . . . . . . . . . . . . 2.7.2 Throwing . . . . . . . . . . . . . . . . . . . . . 2.7.3 Propagation . . . . . . . . . . . . . . . . . . . . 2.7.4 Catching . . . . . . . . . . . . . . . . . . . . . 2.7.5 Execution . . . . . . . . . . . . . . . . . . . . . 2.7.6 Obfuscated Examples . . . . . . . . . . . . . . Conversions . . . . . . . . . . . . . . . . . . . . . . . . 2.8.1 Primitives types and conversion/promotions . . 2.8.2 Explicit Conversions and Wrappers . . . . . . . 2.8.3 Implicit Conversion and Overloading . . . . . . 2.8.4 Conversion of references and inheritance . . . . 2.8.5 Generic classes and Conversions . . . . . . . . Packages . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9.1 Package and Naming . . . . . . . . . . . . . . . 2.9.2 Public classes, Package classes . . . . . . . . . 2.9.3 Public, Private, Protected and Package . . . . 2.9.4 Package, Encapsulation and Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 19 19 21 27 27 32 34 36 38 45 51 52 54 59 64 64 65 68 73 76 80 80 81 84 86 86 88 89 90 92 92 97 97 101 102 103 105 107 108 111 116 118 122 122 123 125 125 126 135 136 138
2.4
2.5
2.6
2.7
2.8
2.9
3 Threads 3.1 Overview . . . . . . . . . . . . . 3.2 Example . . . . . . . . . . . . . . 3.3 Threads Attributes . . . . . . . . 3.3.1 The States of the Threads 3.3.2 Priorities . . . . . . . . . 3.3.3 Thread daemons . . . . . 3.3.4 Groups of Threads . . . . 3.4 Multi-Threaded Programs . . . .
IUT de Dijon
CONTENTS
CONTENTS
Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 CIS 307: Implementing Hoares Monitors . . . . . . . . . . . . . . . . 141 Deadlock, famines ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 152 155 161 163 175 179 180 192 203 215 217 219 219 222 224 226 228 228 229 233 238 240 244 246 246 247 248 251
4 Advanced Window Toolkit 4.1 General Architecture . . . . . . . . . . . 4.2 Graphical Components . . . . . . . . . . 4.2.1 Basic Components . . . . . . . . 4.2.2 Compound the Components . . . 4.2.3 Managing Menus . . . . . . . . . 4.3 Events Management . . . . . . . . . . . 4.3.1 Events Management in 1.0 . . . . 4.3.2 The Method by Delegation (1.1) 4.4 2D Graphics . . . . . . . . . . . . . . . . 4.5 Conclusion . . . . . . . . . . . . . . . .
5 Applet 5.1 Applet et AWT . . . . . . . . . . . . . . . . . 5.2 Life cycle of an applet within a browser . . . 5.3 Applets and HTML . . . . . . . . . . . . . . 5.4 Applets and Communications . . . . . . . . . 5.4.1 Conclusions . . . . . . . . . . . . . . . 5.5 Code distribution and digital signature . . . . 5.5.1 Applet and security . . . . . . . . . . 5.5.2 Digital Signature and public keys . . . 5.5.3 Large scale deployment of public keys: 5.5.4 jdk 1.1 implementation . . . . . . . . 5.5.5 The jar le: Java ARchives . . . . . . 5.5.6 Brief Bibliography . . . . . . . . . . . 6 Conclusion 6.1 Two words on JDBC . . . 6.2 Two words on RMI . . . . 6.3 Three words on JavaBeans 6.4 Overall Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . certication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ESIAL Nancy
CONTENTS
CONTENTS
... Hello
Slide 1
Contents
Introduction Language: classes, inheritance, polymorphism, Packages... Threads Advanced Window Toolkit (AWT) Applets Perspective-Conclusions
Slide 2
IUT de Dijon
Introduction
Section 1.
Introduction
Books (IMHO)
Good books :
for programmers : Java in Nutshell [Fla96]. for details about language the Java Language Specication [JG96] the paper version (800 pages) of tutorial
Bad books :
The Java Programming Language [Arn96]. The Java Application Programming Interface (Same publishers).
Slide 3
ESIAL Nancy
Section 1.
Introduction
Overview
From the java overview... Java is a language: Simple, Object Oriented, Distributed, Interpreted, Robust, Safe, Neutral, Portable, High Performance, Multi-Thread, Dynamic. ouch ! ...
Slide 4
Ceci est repris de de [Mic95, Jam95]. Les dirents points avancs par les auteurs sont e e discutables et vont tre dailleurs discuts dans les transparents qui suivent. e e
IUT de Dijon
Introduction
Section 1.
A simple language
No new concepts !! A simplication vs C++ (No multiple inheritance, No operator overriding, No pointers arithmetics only
references, arrays and strings are objects ...)
The memory is managed by a garbage collector (at last...). Small: The basic interpreter take 40k.
Slide 5
En fait la jvm de base + code des biblioth`ques de bases = 175 Ko (jdk 1.01). e
ESIAL Nancy
Section 1.
Introduction
Objects paradigms
Inheritance (simple) Data Hiding (` la C++) a Polymorphism (but virtual free ;-). No Genericity (using cast operator...)
Slide 6
A Distributed Language
A socket package Very simple access to HTTP and FTP protocols Opening an URL is nearly as difcult as opening a local le Really Distributed ? Remote Method Invocation (RMI) is allowed in JDK1.1. CORBA interface.
Slide 7
IUT de Dijon
Introduction
Section 1.
On peut quand mme attendre un peu plus dun syst`me distribu ... e e e En fait on pourait aussi parler de syst`me distribuable (eet du P-code, de la jvm). e Cest vrai : le succ`s (?) de java grandemment li ` la facilit de : e ea e distribuer le support : charger le jdk, portage jdk distribuer des applications : chargements par rseau, pas dinstallations, pas de e probl`me darchitecture. e En fait tout ceci nest quune liste de proprits. Il faudrait introduire une dnition ee e dun syst`me/langage distribu... Mais une telle discution est hors des objectifs de e e cette prsentation. e
A Robust Language
Strong type control (Stronger than C++) Type control at linkage time No more pointer arithmetics ! No more pointers at all! Strong control of Casting (P-code operator) Execution rules clearly (?) dened.
Slide 8
On dispose de r`gles semantiques rendant plus strictes la gnration dapplications e e e e (nombre important derreurs ltres par le compilateur). e La machine virtuelle garantit de propritts ` lexcution (run time checks) (acc`s ee a e e dans les tableaux, cohrence des modules,...) e On vite ainsi de nombreuses situations pathologiques et dangereuses : initialisations, e indexes de tableau, ... Cest ici une notion de suret de fonctionnement (safety). Il faut se protger contre e e les disfonctionnements syst`me, logiciel, rseau... e e
10
ESIAL Nancy
Section 1.
Introduction
A Safe Language
Some code can be downloaded through the net, code and data can migrate from one JVM to another ... Problems of security :virus, Trojan horse. Authentication based on public/private key. The applet concept (applications are under control of a security manager that prevents almost all system
calls)
Pointer manipulation is impossible (Big hole for virus). Class loader and Security Manager...
Slide 9
11
IUT de Dijon
Introduction
Section 1.
A Neutral Language
The generated code is independent for a particular system. A java run-time allows P-code execution on different systems (Windows, UNIX, MacOs ...). Thats JVM: Java
Virtual Machine.
Slide 10
On peut remarquer que ceci facilite la conception dapplication distribue. e On peut aussi noter que quelque part SUN a russi (?) un petit exploit : il a propos e e un langage et un syst`me neutre qui devient petit a petit un standard de fait. e `
12
ESIAL Nancy
Section 1.
Introduction
A Portable Language
Neutrality does not implies Portability (Even if it helps ...) Size of primitives types is dened in the Java Specication Language Behavior of numeric operators is also specied. The JVM itself contain a big part of portable code (in C) and the Java Compiler (javac) is written in JAVA.
Slide 11
La dnition des types primitifs (entier, virgule ottante) est beaucoup plus prcise quen e e C. Les dirents rels (oat, double) et leurs rapports avec les autres types (entiers) sont e e toujours dnis dabs le cadre de la norme IEEE 754. e
13
IUT de Dijon
Introduction
Section 1.
An Interpreted Language ?
IMHO: From the point of view of the programmer, thats compiled (Byte code is generated, Type Control is
checked...)
But of course, the JVM interprets the Java Byte Code... Native java compiler exists ! JVM can load at run-time byte-compiled class denition and continue execution...
Slide 12
Parallelism with threads ... The P-Code can be translated in native code on the y by the JVM itself... Thats JIT : Just in Time Compiler However, even with JIT extension, the JVM is slower than native application, waiting for the sun hotspot
technology..., native compiler ...
Slide 13
14
ESIAL Nancy
Section 1.
Introduction
Attention : le terme langage haute performance a une connotation calcul haute performance o` eurissent des Cray, des sgi, des machines multiprocesseurs irtant avec le u terraops. Or manisfestement java ne se positionne pas dans ce domaine, le terme haute performance est donc tr`s discutable. Cette discution est hors du sujet de cet expos. e e
A multi-threaded language
A program can be composed by several light process executing concurrently sharing the same memory. Synchronization primitives are part of the language (Hoare monitors)
Slide 14
Sur ce point java a entre autre comme prcurseur ADA qui int`gre dans le langage e e (syntaxe et smantique) les concepts de tches et de rendez-vous. e a Smalltalk g`re aussi la concurrence ... e
15
IUT de Dijon
Introduction
Section 1.
A dynamic language
Classes exists as objects at run-time (unlike with c++). There are no meta-classes like in smalltalk, you cannot create new classes at run-time... But you can ask to your class object what elds and methods are dened and compose dynamically a
message call.
thats a dynamic language, not reexive. But you can generate code at run-time, call the compiler and load the resulting byte-code in JVM (as in
C/C++)...
Slide 15
Conclusion
Java is a language:
Simple, Object Oriented, Distributed, Interpreted, Robust, Safe, Neutral, Portable, High Performance,
Multi-Thread, Dynamic.
Slide 16
16
ESIAL Nancy
Section 1.
Introduction
Personnellement, je ne connais aucune toolkit permettant a elle seule de dvelopper une ` e telle panoplie dapplication, et en plus cest portable, quelque part cela force mon admiration ....
17
IUT de Dijon
Introduction
Section 1.
Contents
Introduction Language: classes, inheritance, polymorphism, Packages... Threads Advanced Window Toolkit (AWT) Applets Perspective-Conclusions
Slide 17
18
ESIAL Nancy
Section 2.
2
2.1
Bon, nous navons pas la prtention dexpliquer ce quest une classe ou un langage, de classes, e a ` objet... Voir : [?]. Mais, on en parlera un peu quand mme pour que la prsentation soit e e autre chose quune litanie de mots clefs et de dnitions oprationelles. e e
General Points
Java is an object oriented language. We nd the terms used in OO language. We shall see:
The notion of packages, The notion of interfaces, The intensive use of exceptions.
Slide 18
19
IUT de Dijon
2.1 Overview
Section 2.
General Points
No more pointers, just references No more destructors (like C++), a garbage collector Primitives types are still not objects (like C++, unlike Smalltalk). Arrays are objects with index bound checking at run-time String are objects (not an array of char) ! The beginning of reexivity (class Class): a dynamic language.. Syntax like C/C++.
Slide 19
General Points
Slide 20
20
ESIAL Nancy
Section 2.
Language: Contents
General Points Compilation and Execution Classes and Objects Inheritance Polymorphism Exceptions Conversions Packages
Slide 21
2.2
21
IUT de Dijon
Section 2.
We write java programs in les with .java as extension. Call javac to compile .java les. You obtain a .class le for each class dened in the .java le. The names .class les corresponds to CLASSES names!
Slide 22
Donc il ny a plus de pr-processeur. Il na plus de .hh et de .cc. Tout (interface e implmentation) est conditionn dans un seul chier .java. Ceci est d a la nature des e e u` chiers .class gnrs lors de la compilation (voir plus loin). e ee Une r`gle brutale de programmation java (avec le jdk) peut tre : une classe ou e e interface par chier .java. Ceci peut tre utile entre autre pour les classes dexception e (le compilateur javac du jdk gnre parfois des erreurs un peu obscur1 e e Nous ne sommes pas concern par la longueur du suxe .java puisque le jdk nest pas e support pour MSDOS. Il est dailleurs ironique de voir, malgr les beaux discours de e e prsentation, comment les probl`mes de portage apparaissent vite d`s que lon passe e e e a ` limplantation du support.
1 Tout
22
ESIAL Nancy
Section 2.
File
.class
In some words, this is equivalent to the aggregation of a le .hh and a le .o (well written) in C++. The public interface of classes is contained in the le .class. We can thus apply separate compilation approach in java : you can distribute a library as a set of .class
les (and with the documentation ;-D).
Slide 23
Bon, ca a lair de rien, mais cest important cette histoire de compilation spare. Typ e e iquement, un vendeur de librairie peut dicilement diuser une librairie si il doit en donner les sources. En java, bon nombre de librairies sont diuses comme un packet de chier e .class. Alors o` est le probl`me ? eh bien, il existe dautres approches de compilation comme en u e SmallEiel, o` le compilateur suit le ot de controle pour compiler. Il est alors capable de u gnrer un code trs ecace et compact (le code gnr ne contient que le code vivant). Le e e e e ee revers de la mdaille est quil est obligatoire davoir les sources... ce qui nest pas toujours e compatible avec des contraintes industrielles.
23
IUT de Dijon
Section 2.
Virtual Machine
When you call the Java Virtual Machine (JVM), You have to give as a parameter, the NAME OF A CLASS
(and not the name of a le).
The corresponding .class must be found in the list of directories contained in the CLASSPATH environment
variable.
When this .class is found, its loaded in the JVM and the execution starts be calling the following method:
public static void main(String[] args)
Slide 24
Example
examples/hello.java
world");
} }
Slide 25
24
ESIAL Nancy
Section 2.
Example
1. 2. 3.
setenv CLASSPATH .:/usr/local/java/lib/classes.zip. javac hello.java generates helloworld.class (and not hello.class). java helloworld looks for helloworld.class in the CLASSPATH. I hope that
./helloworld.class is found
Slide 26
La variable denvironnement (OS support de la jvm) $CLASSPATH est utilis par le e chargeur de classe de la machine virtuelle java pour retrouver les .class ` charger. On a peut dj` savancer et noter que le class loader est aussi une classe qui peut tre spcilise ea e e e par sous classement. Quand la machine virtuelle est intgre dans un browser, la recherche e e des .class se fait ` travers le rseau. De mani`re gnrale, ldition de lien se fait qclasse par a e e e e e classe (chargement de la classe) et de mani`re tardive. On est a loppos de la gnration e ` e e e dexcutable qui contient tout le code ventuellement ncessaire, o` tous les appels sont e e e u lis ` du code (compilation statique). e a
25
IUT de Dijon
Section 2.
NET
Hello World
class Mot { ... class Phrase {... ... class HelloWorld{... public static main{
OS NATIF
IO GUI ... ...
Slide 27
Attention, un chier .java peut contenir plusieurs dnition de classes. Pour un .java on e peut donc avoir plusieurs .class gnrs (pas de paniques) ! e ee
26
ESIAL Nancy
Section 2.
Language: Contents
General Points Compilation and Execution Classes and Objects Inheritance Polymorphism Exceptions Conversions Packages
Slide 28
2.3
2.3.1
27
IUT de Dijon
Section 2.
Classes&Objects
The primitives types: byte, short, int, long, oat, double, char, boolean are not objects. Thus, the operations +,-,*,/ ... are just language terminals. It is not possible to override these operations as in C++.
Slide 29
Classes&Objects
The classes exist as objects at run-time. Calling the method getClass() on any instance return an object of class Class More precisely, the JVM creates an object of the class Class for each loaded class. By this way, the description of the classes is available at run-time, and its possible to generates method
invocation.
But its not possible to create new classes (as in smalltalk language) : Java is dynamic but not reexive. Applications : debuggers, interpretor, inspectors, classes browser
Slide 30
28
ESIAL Nancy
Section 2.
A priori, les applications peuvent dcouvrir les classes qui existent dans la JVM a e ` lexcution. Par exemple la mthode de classee (statique) Class.forName("A") va rene e voyer linstance de la classe Class qui reprsente la classe A ` lexcution, si elle existe. e a e
Class Anatomy
examples/classandobjects/Point2.java
class Point { private int x; private int y; public Point( int xp, int yp ){ x=xp; y=yp;
}
public void move( int xp, int yp ){ x+=xp; y+=yp;
}
public void print(){ System.out.println("("+x+","+y+")");
} }
Slide 31
De loin tout ceci ressemble ` du C++. a Il y a tout de mme pas mal de dirences : e e 1. Contrairement a C++ il ny a pas possibilit de sparer linterface dune classe de son ` e e implmentation. (e.g : .hh et .C). Ceci nest pas rellement ncessaire puisque cest e e e la version compile dune classe (.class) qui fournit les informations dinterface e ncessaire ` lutilisation dune classe lors de la compilation. (en C++ : il faut les e a modules objets compils, . o ET les interfaces .hh. En Eiel : on ne peut pas. En e Ada : module objet compil ET package avec uniquement linterface). e 2. Les constructeurs ont la mme tte. On verra que la construction dune instance elle e e est un peu dirente. Ils portent donc le mme nom que la classe. Java dnit dans e e e tous les cas un constructeur par dfaut. e 3. PAS de destructeur : usage dun garbage collector et uniquement de variables rfrences ee a ` une instance les rendent inutiles. Seule une la mthode finalize subsiste. Elle ne e doit pas tre confondue avec un destructeur. Cest une mthode optionelle qui peut e e tre dclenche par le GC quand il se dbarrasse pour de bon dune instance. e e e e 4. ;- Il ny a pas besoin de mettre un ; apr`s laccolade nale de la dnition dune e e classe. Cest quand mme permis pour supporter les programmeurs C++ indcrottables. e e
29
IUT de Dijon
Section 2.
Class Anatomy
To resume,
a look&feel similar to C++, The constructor name is always the same as the class name (and return nothing !!!)
But :
Interface and implementation are in the same le (thanks for us!). NO Destructors (delete, free), the garbage collector is here ! item Modiers private, public, protected are directly attached to the declaration of elds or
methods.
Slide 32
Le fait davoir une ramasse-miette a un impact norme sur la qualit des programmes e e produits (mme si cest dicile ` mesure). Avec cette mani`re de grer la mmoire, il est e a e e e impossible davoir des corruptions de mmoire ou des fuites de mmoire ! Cela coupe court e e a ` tous nombres de probl`mes qui pourrissent la vie des programmeurs C++. e
30
ESIAL Nancy
Section 2.
Instanciation
examples/SimplePointDemo.java
class SimplePoint { private int x,int y; public SimplePoint( int pX, int pY ){x=pX;y=pY;} public void move( int pDx, int pDy ){x+=pDx; y+=pDy;} public int getX(){return x;} public int getY(){return y;} public void print(){System.out.println("("+getX()+","+getY()+")");}
}
public class SimplePointDemo { public static void main(String[] args) { SimplePoint p = new SimplePoint(2,3); p.print(); SimplePoint q; q.print(); q=new SimplePoint(); q = new SimplePoint(3,4); q.print();
// error // error
} }
Slide 33
First error: Not initialized Second error: Constructor does not exist.
31
IUT de Dijon
Section 2.
Creating Objects
P IS NOT A POINTER, its a reference on the object of the class Point (no more *p++=*q++ ...) It must be initialized before it can be used. A default constructor is generated by the compiler if no constructor is declared (and only in this case).
Slide 34
Un pointeur cest un entier reprsentant une addresse en mmoire. On donc faire des e e oprations arithmtiques dessus (*i++ ...). Une rfrence cest un lien sur UN OBJET e e ee TYPE. Ce lien nest pas altrable. Une rfrence na que deux tat : non initialise ou e ee e e initialise sur un objet typ. La dirence a lair subtile mais elle est norme dans les faits ! e e e e Le constructeur par dfaut, sans param`tre est une simple facilit oerte au programe e e meur. Il nest pas impratif pour Java de disposer dun constructeur sans param`tre. Il e e est ncessaire (entre autre) en C++ pour initialiser les tableaux dobjets. En java il ny e que des tableaux de rfrences (voir 2.3.4), o` le programmeur initialise explicitement ces ee u rfrences (new, autres rfrences). ee ee 2.3.2 Instantiation and Constructors
32
ESIAL Nancy
Section 2.
A class may have several constructors Using of overloading ... A method is identied by its name, the number and the type of its parameters (the return type makes no
differences)
If no constructors are dened, the compiler generates a default constructors (as in C++). Otherwise, if a constructor is dened, the default constructor is not generated (unlike with C++).
Slide 35
class Point { private int x; private int y; public Point( int xp, int yp ){ x=xp; y=yp;
}
public Point(Point p) { x=p.x;y=p.y;
}
// ...
}
class Main { public static void main(String arg[]) { Point p=new Point(5,6); Point q=new Point(q); Point r=new Point();
// error
} }
Slide 36
33
IUT de Dijon
Section 2.
Current Reference
The this reference allows an instance method to reference the instance itself.
examples/classandobjects/this.java
class Point
// main constructor
public Point( int x, int y ){ this.x=x; this.y=y;
}
// other constructors redirecting construction to main constructor // using this syntax
public Point() {this(0,0);} public Point(Point p) { this(p.x(),p.y());}
Slide 37
Cest plus important que ca en a lair. Par exemple, bien noter comment Point() appelle Point(int xp, int yp). Ca devient encore plus important lorsque lhritage et la liaison e dynamique sont de la partie. On y reviendra. 2.3.3 Classes and Encapsulation
34
ESIAL Nancy
Section 2.
In Java, encapsulation is based on classes (like c++) and not on objects (like Smalltalk or eiffel) Two objects of the same class can access their private elds ... A private eld or method of an object is visible by all others objects of the same class A public eld or method of an object is visible by all others objects. a priori: The state of an object should be dened as private and only method composing the public interface
should be declared as public.
Slide 38
class Point { private int x; private int y; public Point( int xp, int yp ){ x=xp; y=yp;
}
public int x() { return x;} public int y() { return y;} public Point(Point p) { x=p.x; y=p.y; x=p.x(); y=p.y();
}
// ...
Slide 39
35
IUT de Dijon
Section 2.
2.3.4
Arrays
Arrays Overview
Arrays are object Objects... (java.lang.Object) The array classes are generated by the compiler and are visible using reection interface. Once the size of an array is xed, it cannot be changed later, but the size is still visible as an instance eld of
array class (length)
Array bounds are checked at run-time (IndexOutOfBoundsExecption) Beware: Arrays can only contain primitives types or references (no structure ...) char[] is not String look an feel C/C++
Slide 40
Dans ce cas une classe tableau [Point est gnre par le compilateur (et est sous-classe e ee de object)
36
ESIAL Nancy
Section 2.
Arrays instanciations
examples/classandobjects/array.java
class TestArray2 { public static void main(String[] args) { Point[] tab=new Point[3]; tab[0]=new Point(1,2); tab[1]=new Point(10, 20); tab[2]=tab[1]; for (int i=0;i<tab.length;i++) { tab[i].print();
}
tab[4]=new Point(-1,-2);
// BOOM !
} }
Slide 41
Dans lordre : 1. On dclare une rfrence (non initialise) sur un objet de type tableau de points, e ee e 2. On initialise unTab : on cre trois rfrences sur des objets de type points. Ces e ee rfrences sont non-initialises. ee e 3. On initialise les rfrences ... ee
37
IUT de Dijon
Section 2.
Multi-dimensionals arrays
Declaration like C/C++ length eld is declared for each dimension Initialisation expression like C/C++...
examples/classandobjects/tableaumult.java
class tableaumult { public static void main(String args[]) { Point p=new Point(); Point q=new Point(5,6); Point[][] tab={{p,q},{q,p}}; for (int i=0;i<tab.length;i++) for (int j=0;j<tab[i].length;j++) { System.out.println("tab["+i+"]["+j+"]="+tab[i][j].x()+tab[i][j].y());
} } }
Slide 42
La remarque a propos des tableaux de caract`res et des cha ` e nes ne sera pas rpte ! e ee Et puis il ny a plus dhistoire de null terminated ou tout autre infection du genre. Il faut prciser que des probl`mes de conversions subtils peuvent se produire ` cause e e a des tableaux. La classe eectivement associe ` un objet tableau est celle donne au e a e new du tableau. Une fois cr un tableau peut contenir au mieux des instances de la ee classe eective ou de sous classe de celle-ci. Par contre il est lgal aecter une variable e tableau (une rfrence dobjet...) par une autre du moment o` le deuxi`me utilise ee u e une sous classe du premier. Ceci peut engendrer des probl`mes non vriables par e e le compilateur (voir slides ??, ??) Ces probl`mes sont traits ` lexcution comme e e a e lindique [JG96][200] : laectation dun lment dun tableau dont le type est : A[], o` A est ee u une rfrence de type est vrie ` lexcution pour sassurer que la valeur ee e e a e aecte peut bien ltre vers le type rel dun lment du tableau. e e e ee 2.3.5 Garbage Collectors vs Destructors
38
ESIAL Nancy
Section 2.
No destructors in JAVA. A garbage collector takes care to nd allocated objects which are no longer referred and deallocates the
memory.
Slide 43
Start with the root and mark all the reachables objects. When all the graphs are visited, unmarked objects are destroyed.
Slide 44
39
IUT de Dijon
Section 2.
person a main()
Slide 45
Supposons quaprs trois appel de mthodes, on ait dvelopp le graphe dinstance cie e e e dessus.
40
ESIAL Nancy
Section 2.
GC activation !!
person a main()
Slide 46
Fin du deuxi`me et troisi`me appel, ` ce moment le GC se dclanche (pour plein de e e a e mauvaises raisons). Le GC peut tre un thread asynchrone dvlanch soit ` intervalle e e e a rgulier (mais cest nul) soit quand la mmoire dpasse un certain pourcentage de saturation e e e (cest mieux) soit directement appele par le programme (faut avoir de bonnes raisons pour e faire ca ...)
41
IUT de Dijon
Section 2.
GC activated !!
Objects deallocated !
person a main()
Slide 47
Le mark&sweep se dclanche. La seule racine cest Person a dans main. Les objets e atteignables sont marqu dune croix (mark). Les objets non-atteignale sont libr ` la e ee a deuxi`me passe (sweep). e
42
ESIAL Nancy
Section 2.
GC Mark&Sweep: Compacting
Several strategies:
1. An allocation table and we try to ll up the gaps after the deallocation.. 2. All the living objects during the mark phase are copied in a new memory space (2x bigger in memory but very speed). The original memory space is available for the next execution of the garbage collector.
Slide 48
class Person { String name, address; public Person(String namep, String addressp) { name=namep; address=addressp;
}
public void print() { System.out.println(name+","+address);
} }
class PersonDemo { public static void main(String[] args) { String s1=new String("momo"); String s2=new String("yo"); Person p=new Person(s1,s2); Person q=new Person(s1,s2); p.print(); q.print();
} }
Slide 49
43
IUT de Dijon
Section 2.
Ce programme produit un core-dump en C++ !! Pour les gens qui font du C++
Ramasse-miettes vs Destructors
p name address
momo
q name address
yo
Slide 50
Le dessin prcdent est un cas typique o` il faut faire attention en C++. Si le copy e e u constructor par dfaut est appel (recopie bit ` bit de ltat dun objet) on peut facilement e e a e aboutir a une situation similaire a celle du dessin. Or il y a toutes les chance que le ` ` destructeur ait t cod pour dtruire les chaines implantant nam et adresse. Si par exemple ee e e q est un objet transitoire cr par C++, le destructeur va tre appel pour q de mani`re ee e e e transparente. Apr`s cela les acc`s au nom et adresse de p seront incorrects. e e En java il ny a pas a se proccuper de cela. Les chaines seront ventuellement ramasses ` e e e par le GC quand plus aucun objet ne les rfrencera. ee Il est possible de se poser la question pour une classe donne de ce que veut dire faire une e copie dune instance. La classe Object dnissant lobjet de base Java poss`de dailleurs e e une mthode clone. e
44
ESIAL Nancy
Section 2.
The garbage collector avoids the core-dump during the destruction. No instances creation during the expression evaluation.. The returned values are necessarily references or primitives types.. No need of copy-constructor like in C++... In brief, YOU DO NOT NEED DESTRUCTORS : Java programs more robust !!
Slide 51
2.3.6
45
IUT de Dijon
Section 2.
Class Field
static class eld : A eld attached to the class, this eld is shared by all instances of this class !! a static eld exists in the scope of the class even if no instance exists ! Its like a global variable but declared in the scope of a class. (Normally attached to class object at run-time.)
Slide 52
Cest donc nalement un variable globale mais dnie dans le contexte dune classe. e
46
ESIAL Nancy
Section 2.
examples/classandobjects/static.java
class Point { public static int nbpoint=0; private int x,y; public Point(int xp, int yp) { nbpoint++; x=xp; y=yp;
// thats a counter
}
public int nbpoint() { return nbpoint;
} }
class SimpleStaticDemo { public static void main(String[] args) {
} }
Slide 53
Class Methods
static method can be called without a reference to an object. The receiver is the name of the class Thats nearly a function but declared in the scope of a class (and data hiding rules are checked!) Beware: A class method cannot access an instance eld, this makes no sense in the body of a class
method !
Slide 54
47
IUT de Dijon
Section 2.
examples/classandobjects/staticmethod.java
class Point
{
// thats a counter (private now)
private static int nbpoint=0; private int x,y; public Point(int xp, int yp) { nbpoint++; x=xp; y=yp;
}
public static int nbpoint() { System.out.println(x); return nbpoint;
} }
class StaticMethod { public static void main(String[] args) { System.out.println(Point.nbpoint()); Point p=new Point(5,6); System.out.println(p.nbpoint());
// ok but dangerous
} }
Slide 55
main(): inevitably a class method System.out: a class eld for STDOUT (PrintStream) initialized when loading the System class. The System is automatically loaded when the JVM start.
examples/hello.java
world");
} }
Slide 56
48
ESIAL Nancy
Section 2.
Le plus bel exemples sur les variables de classes et mthode de classes ! e H oui ! forcment pour commence un programme, il ny a pas dinstances, on appelle e e donc une mthode de classe ... e System.out oh la belle variable de classe que voila ! public static final PrintStream out dans java.lang.system
Class Methods
examples/staticpb.java
world");
} }
staticpb.java:4: Cant make a static reference to nonstatic variable hello in class staticpb. System.out.println(hello); 1 error
Slide 57
Bon, cest pas la peine de rfrencer des variables dinstances qui ne sont pas instancies. ee e Et cest pas la peine non plus de mettre des static partout pour faire en sorte que ca compile !! Le mieux : la classe contenant main nest pas une classe de lapplication, elle est juste la pour contruire les instances des classes applicatives. La bonne mthode : e 1. Ecrire ses classe applicatives, 2. Ecrire une nouvelle classe contenant le main apr`s ! e
49
IUT de Dijon
Section 2.
Constants
The final modier species that a eld is constant. This eld have to be initialized at declaration-time and cannot be changed later ...
Slide 58
examples/classandobjects/nal.java
class Point
// main constructor
public Point( int x, int y ){ this.x=x; this.y=y;
}
// nal elds : have to be initialized // cannot be changed later.
nal static Point origin = new Point(0,0);
Slide 59
50
ESIAL Nancy
Section 2.
2.4 Inheritance
attention sur cet exemple : le contenu de lobjet origin peut tre chang mais la rfrence e e ee sur lobjet ne peut plus ltre (encore une histoire ` la const ;-D). e a
Language: Contents
General Points Compilation and Execution Classes and Objects Inheritance Polymorphism Exceptions Conversions Packages
Slide 60
2.4
Inheritance
51
IUT de Dijon
2.4 Inheritance
Section 2.
Inheritance
Overview and simple example Constructors Hiding, Overriding, Overloading Polymorphism Inheritance and data hiding
Slide 61
2.4.1
52
ESIAL Nancy
Section 2.
2.4 Inheritance
Inheritance Overview
A is a sort of B
class A {...
Slide 62
PAS de trucs globaux et obscurs a la C++ sur les hritages : protected qui modient ` e globalement les acc`s aux members; virtual pour rsoudre les probl`mes dhritages e e e e multiples et de NON liaison dynamique.
53
IUT de Dijon
2.4 Inheritance
Section 2.
Example
examples/heritage/Client.java
class Person { String name, address; public Person(String namep, String addressp) { name=namep; address=addressp; } public void print() { System.out.println(name+","+address); }
}
class Client extends Person { int amount=0; public Client(String namep, String addressp,int amountp) { super(namep,addressp); amount=amountp;
}
public void print() { System.out.println(name+","+address+","+amount); }
}
class ClientDemo { public static void main(String[] args) { Client c=new Client("momo","yo",100); c.print();
} }
Slide 63
Beaucoup de choses ` dire sur cet exemple, daboirt sur la structure : a 1. Un petit coup doeil sur la syntaxe extends. 2. un gros coup doeil sur le constructeur de client et sur la syntaxe super ! (on y vient juste apr`s) e 3. Enn bien remarquer loverriding sur print. Prendre son temps et bien drouler lexcution de ce programme en partant de main(). e e 2.4.2 Inheritance and Constructors
54
ESIAL Nancy
Section 2.
2.4 Inheritance
Reference super
Using the super reference on an instance allows to access the superclass part of the instance. this returns the object itself, super returns the superclass part of this. super is used in the cascading calls of constructors. super is used to access to the variables or methods of its super class.
Slide 64
55
IUT de Dijon
2.4 Inheritance
Section 2.
examples/TestChpFinal.java
class A { nal int c=10; } class TestChpFinal extends A { int c= super.c+10; void print(){ System.out.println(c); System.out.println(super.c); } public static void main( String[] args ){ TestChpFinal b=new TestChpFinal(); b.print(); }
Slide 65
Rsultat de lexemple : e
20 10
56
ESIAL Nancy
Section 2.
2.4 Inheritance
The initial state of an object is dened by calling the constructor. In the case of a construction by inheritance,
its necessary to have discipline of calls
TOP-DOWN Construction : The super-constructor have to called before executing the body of the current
constructor.
Slide 66
In a constructor of a class
A:
The call of super(...) is used in the rst line and invokes a constructor of the super class. The initialisation of the instance variables introduced by A; And the execution of the rest of the code of the considered constructor. By default, if a call of this(..) or super(...) (is in the rst line of a constructor), the compiler introduces implicitly a call to a super()
Slide 67
57
IUT de Dijon
2.4 Inheritance
Section 2.
Constructors
examples/heritage/Client2.java
class Person { String name, address; public Person(String namep, String addressp) { name=namep; address=addressp; } public void print() { System.out.println(name+","+address); }
}
class Client extends Person { int amount=0; public Client(String namep, String addressp,int amountp) { amount=amountp;
}
public void print() { System.out.println(name+","+address+","+amount); }
}
class ClientDemo { public static void main(String[] args) { Client c=new Client("momo","yo",100); c.print();
} }
Slide 68
Constructors
Client.java:14: No constructor matching Person() found in class Person. public Client(String namep, String addressp,int amountp) { 1 error
Slide 69
58
ESIAL Nancy
Section 2.
2.4 Inheritance
Bien entendu la class object ne dispose pas de lappel super(...). Ne pas confondre lappel super(...) avec la rfrence super. ee
Appel de B(100) :
this() => >B() super() => >>A1() super() => >>>Object()
>>>>CODE 1
exec init => >>>a=10;
>>>CODE 2
exec init => >>b=5;
Slide 70
2.4.3
59
IUT de Dijon
2.4 Inheritance
Section 2.
Hiding : If a class denes a class method, this method hides all methods with the same signature in super-classes. Overriding : If a class denes an instance method, this method overrides all methods of same signature in super-classes Overloading : If two methods of the same class have the same name but with different signatures, there is overloading
Slide 71
examples/heritage/Client3.java
class Person { static int nbpers=0; String name, address; public Person(String namep, String addressp) { name=namep; address=addressp; nbpers++; } public void print() { System.out.println(name+","+address+","+this.getCard()); } static int getCard() { return nbpers; }} class Client extends Person { static int nbclient=0; int amount=0; public Client(String namep, String addressp) { this(namep,addressp,0); } public Client(String namep, String addressp,int amountp) { super(namep,addressp); amount=amountp; nbclient++; } public void print() { System.out.println(name+","+address+","+amount+","+this.getCard()); } static int getCard() { return nbclient; }} class Client3Demo { public static void main(String[] args) { Person p=new Person("toto","titi"); p.print(); Person c=new Client("momo","yo",100); System.out.println(c.getCard()); c.print(); Client d=new Client("placid","muzo"); d.print(); System.out.println(Person.getCard());} }
Slide 72
60
ESIAL Nancy
Section 2.
2.4 Inheritance
Il y a dans cet exemple : Hiding sur getCard() overriding sur print() overloading sur les constructeurs de Client. Quest ce quimprime le programme ?
Slide 73
Beware ! there is no dynamic binding for class methods Note the dierence between c.getCard() static binding, and c.print(), dynamic binding ... Note that ((Person)d).print() changes nothing, the dynamic type is ad vitam eternam of class Client.
61
IUT de Dijon
2.4 Inheritance
Section 2.
Dynamic type is used for an instance method call Static type is used for class method call Beware :
Person c=new Client("momo","yo",100); c.getCard();
Person::getCard if getCard is static, Client::getCard() otherwise !!
Slide 74
Dynamic binding is always used, even during construction (unlike C++) cascading calls of constructors does not reduce dynamic bindings... The dynamic type of this in a constructor is the type requested in the new syntax and not the class of the
constructor.
possible observation of instance elds not yet initialized thats not true in C++ (well known trap !)
Slide 75
62
ESIAL Nancy
Section 2.
2.4 Inheritance
examples/TestLDetCons.java
class A { private String yo="yo"; String getString(){ return yo;} A(){ System.out.println(yo); System.out.println(getString());
// init
}}
class B extends A { private String momo="momo"; String getString(){ return momo;} B(){ super(); System.out.println(momo); System.out.println(getString());
// init
}}
class TestLDetCons { public static void main( String[] args ){ B b = new B();
}}
Execution ? ...
Slide 76
We build an instance of B the dynamic type ofthis in constructors is B. The call to super is done before initialization (="momo") Dynamic binding for getString
Slide 77
63
IUT de Dijon
2.5 Polymorphism
Section 2.
Lexemple construit une instance de B. Donc lors de lexcution des constructeurs (de e A, de B) la classe eective de linstance courante, this sera B. Si on se reporte au transparent 70 page 70, on sait que les expressions dinitialisations (commentaires //int) des variables dinstances ajoutes par une classe sont excutes e e e par un constructeur de cette classe apr`s lappel a super() et avant le reste du code e ` du constructeur. On rappelle aussi que par dfaut le compilateur fait un appel a super() tout au debut e ` dun constructeur. Dans lexemple cest le cas pour le constructeur A(). On voit quil est possible par liaison dynamique (ici pour la mthode getString (come mentaire LD) sur une instance de classe eective ` lexcution : B) pour un constructeur a e dune super classe dacc`der ` des variables dinstance introduites par une sous classe e a avant lvaluation de leur expression dinitialisation. e
Language: Contents
General Points Compilation and Execution Classes and Objects Inheritance Polymorphism Exceptions Conversions Packages
Slide 78
2.5
2.5.1
Polymorphism
Overview
64
ESIAL Nancy
Section 2.
2.5 Polymorphism
Polymorphism Overview
POLY MORPHO
= =
Several forms
An object can be observed from the point of view of its class or its super-classes A reference of static type A can reference an object of class A or of a subclass of A. Dynamic Binding: An instance method call depends from the dynamic type of the receiver
Slide 79
Une rfrence dobjet peut bien entendu aussi tre un lment de tableau. ee e ee 2.5.2 Polymorphism, inheritance and abstract classes
65
IUT de Dijon
2.5 Polymorphism
Section 2.
Scene draw() move(int,int) Centre : Point add( ObjetGraphique ) Rayon : int Elt : ObjetGraphique[] Last : int
draw() move(int,int)
Cercle
Slide 80
Prsentons directement cette notion de polymorphisme dhritage par un exemple plus e e que classique. On dnit des ObjetGraphiques que lon peut tracer et dplacer. Scene groupe des e e ObjetGraphiques et les manipule en temps que tels. Par contre pour une instance donne e cest bien les draw, le move de Cercle ou Rect ou Scene que lon veut atteindre selon la nature eective de linstance (mthodes en gras). e La gure est OMT-like, mais lanalyse serait errone : certains attributs (Elts, Centre, e ... sont en fait limplantation de relations.
66
ESIAL Nancy
Section 2.
2.5 Polymorphism
examples/polymorphisme/ObjetGraphique.java
public abstract class ObjetGraphique { public abstract void draw(); public abstract void move( int dx, int dy );
}
examples/polymorphisme/Scene.java
class Scene extends ObjetGraphique { private int Last; private ObjetGraphique[] Elts; public Scene( int MaxOG ) { Elts= new ObjetGraphique[MaxOG]; Last= -1; public void draw(){ for( int i=0; i Last; i++){ Elts[i].draw();
// Dynamic binding
} }
public void move ( int dx, int dy ){ for( int i=0; iLast; i++) { Elts[i].move(dx,dy);} // Dynamic binding
}
public void add( ObjetGraphique unOG ){ if (Last==Elts.length) { } // Exception else{ Last++; Elts[Last]=unOG; } }}
Slide 81
examples/polymorphisme/TestOG.java
class TestOG { public static void main( String[] args ){ Scene s1 = new Scene(10); Scene s2 = new Scene(10); s1.add( new Cercle( new Point(10, 10), 30 )); s1.add( new Rect( new Point(30, 30), new Point(100, 100))); s1.draw(); s1.move(1, 1); s1.draw(); s2.add(s1); s2.add( new Rect( new Point(-10, -10), new Point(-5, -5))); s2.draw(); s1.move(1,1); s2.draw();
// sub-class of ObjetGraphique
} }
Slide 82
67
IUT de Dijon
2.5 Polymorphism
Section 2.
] ]
] ]
On voit donc bien que bien quun objet Scene manipule des objets quil consid`re tre e e des ObjetGraphique ; mais que les Cercle restent des cercles, les Rect des rectangles... On pourrait mettre ici un joli dessin des objets en reprsentation hxagonale. Ca serait e e dailleurs un bon moyen de monter que polymorphisme et encapsulation sont tr`s complmentaires. e e
2.5.3
68
ESIAL Nancy
Section 2.
2.5 Polymorphism
Abstract Classes
A class must be a sub class of another class in order to be useful.. incomplete class. Non instantiable. Syntax abstract class A ....
Default : NON abstract
Slide 83
Si on tente un new sur une classe abstract le compilateur doit gnrer une erreur. e e Une classe abstract est proche des pure virtual classes de C++ : celles qui comportent une mthode virtual ... =0;. e Si une classe comporte une mthode abstract elle doit comporter le modier abstract. e Bref on dclare une classe comme abstract lorsque quelle nest quune bauche de e e classe, elle devra en tout tat de cause tre complte par sous classement pour que e e ee des variables de rfrence dinstance de cette classe puisse tre aectes (en crant des ee e e e instances de sous classes non abstract).
69
IUT de Dijon
2.5 Polymorphism
Section 2.
Abstract method
Declare a method without implementation. Syntax :abstract void print(..); Meaning : Dene a category of objects
All the felines are shouting, but : a cat says miaou and a tiger says Roaaar....
Denes the abstract class Feline with the abstract method Shout. Subclasses cat or tiger have to
implement shout or be abstract.
Slide 84
Pour expliciter autrement leet dune dclaration de mthode abstract on peut e e reprendre [JG96][page 158] : si une mthode m est dclare comme abstract dans une e e e classe abstract A il faut que toute sous classe non C abstract de A puisse trouver une classe B telle : B est une super classe de C (possiblement C elle mme), e B est une sous classe de A, B fournit une dclaration de m qui nest pas abstract, donc avec un corps e qui limplmente. Cette dclaration doit pouvoir tre accessible par C (voir les e e e modiers daccs des mthodes). e e Il est donc stupide de dclarer une mthode comme abstract et : e e private : si il y a pas dhritage elle ne peut pas tre vue par une sous classe ! e e Ceci devrait tre assur par le compilateur. Ce nest pas le cas dans le jdk e e 1.1b2. static : un appel static nutilise pas de liaison dynamique, une classe doit donc obligatoirement fournir un corps pour une telle mthode. Ceci devrait tre e e assur par le compilateur. e final : une mthode final. Dans lexplication prcdente la classe B ne peut e e e donc pas tre trouve. Ceci devrait tre assur par le compilateur. Ce nest pas e e e e le cas dans le jdk 1.1b2 Cest le virtual ... =0; de C++. Il ny a pas lquivalent en java de virtual m() { code...} e puisque quune mthode java dinstance sacc`de forcement par liaison dynamique. En e e java tout est virtual. abstract indique rellement que la dclaration nest quune e e simple spcication abstraite. e
70
ESIAL Nancy
Section 2.
2.5 Polymorphism
Cest une erreur de compilation de mettre une mthode abstract dans une classe qui e ny est pas. Linverse ne lest pas : le concept de classe abstraite est indpendant de e celui de mthode abstraite. e Les restrictions final/static sont de la mme veine quen C++ (rappel : C++ : e liaison dynamique = virtual et virtual + static est incorrect).
Final Classes
Cannot be super-classes of another classes Syntax : final class A ...{...} Thats the opposite of C++ with the virtual declaration
Slide 85
Une classe final ne peut pas tre lanctre de nouvelle classe. On assure dont par e e cette dclaration quune classe restera une feuille de larbre dhritage. e e
71
IUT de Dijon
2.5 Polymorphism
Section 2.
Final Methods
A nal method cannot be overridden ! Syntax: final void print() Incompatible with abstract
Slide 86
final : On peut noter dune mthode private est implicitement final (il nest e donc pas recommend de dclarer une mthode private final. Tout ceci na rien a e e e ` voir avec les mthodes const de C++, qui nont pas dquivalent en Java). e e ` A ne pas confondre avec le final appliqu sur les champs (support des constantes, e acc`s en lecture seulement). e
72
ESIAL Nancy
Section 2.
2.5 Polymorphism
examples/heritage/AbstractClient.java
abstract class Person { private String name, address; public Person(String namep, String addressp) { name=namep; address=addressp; } abstract void print();} class Client extends Person { private int amount=0; public Client(String namep, String addressp,int amountp) { super(namep,addressp); amount=amountp;
}
public void print() { System.out.println(name+","+address+","+amount); }} nal class Employee extends Person { private int salary; public Employee(String namep,String addressp,int salaryp) { super(namep,addressp); salary=salaryp; }} class chief extends Employee {} class AbstractClientDemo { public static void main(String[] args) { Person p=new Person("Dicentime","bougredane"); Client c=new Client("momo","yo",100); }}
Slide 87
La liste des erreurs dans lexemples ci-dessus : 1. AbstractClient.java:21: class Employee must be declared abstract and not final. It does not define void print() from class Person. 2. //AbstractClient.java:29: Cant subclass final classes: class Employee 3. AbstractClient.java:35: class Person is an abstract class. It cant be instantiated. Bien noter toutes les erreurs sur lexemple ci-dessus. Surtout le conit sur employee (nal vs abstract). 2.5.4 Polymorphism and Interfaces
73
IUT de Dijon
2.5 Polymorphism
Section 2.
Interfaces
interface Drawable { int draw area top = 10; int draw area left = 10; int draw area bottom = 100; int draw area right = 200; void drawme(int x, int y);
abstract class Drawable { public static nal int draw area top = 10; public static nal int draw area left = 10;
public static nal int draw area bottom = 100; public static nal int draw area right = 200; public abstract void drawme(int x, int y);
It cannot be instantiated All methods are public and abstract All elds are nal and static A class can inherit from only one class, however... it can implements several interfaces.
Slide 88
Une interface est une restriction dune classe abstraite : Pas de constructeurs ! Pas de variables membres ! Pas de mthodes non abstraites ! e Consquences (pour ceux qui connaissent C++) : e Pas de probl`mes de virtual base classes e Pas de probl`mes de convention dappel des constructeurs e
74
ESIAL Nancy
Section 2.
2.5 Polymorphism
Slide 89
examples/interface/GeometricObject.java
}
return total; }}
examples/interface/Main.java
}
examples/interface/GeometricObjectManager.java
class GeometricObjectManager implements GeometricObject { private GeometricObject[] tab; private int last; GeometricObjectManager(int nbp) { tab=new GeometricObject[nbp]; last=0;
class Main { public static void main(String args[]) { Square s=new Square(new Point(1,1),new ColoredPoint(5,0,"green")); System.out.println("Square Area:"+s.computeArea()); Circle c=new Circle(new Point(2,6),5); System.out.println("Circle Area:"+c.computeArea()); GeometricObjectManager g=new GeometricObjectManager(2); g.add(s); g.add(c); System.out.println("Area:"+g.computeArea()); System.out.println("Circ:"+g.computeCirc()); }}
} //...
public double computeArea() { double total=0; for (int i=0;i<last;i++) { total=total+tab[i].computeArea();
}
return total;
}
public double computeCirc() {
Slide 90
75
IUT de Dijon
2.5 Polymorphism
Section 2.
2.5.5
Interface inheritance
An interface can inherit (yes ! extends !)from one or several other interfaces ! Multiple inheritance for interfaces !
examples/interface/Multidraw.java
interface Draw constants { int draw area top = 10; int draw area left = 10; int draw area bottom = 100; int draw area right = 200;
}
interface Draw methods { void drawme(int x, int y);
}
interface Drawable extends Draw constants,Draw Methods {
Slide 91
76
ESIAL Nancy
Section 2.
2.5 Polymorphism
is it multiple inheritance??
A lot of questions:
What is the difference between an abstract class and an interface ? What is the difference between Multiple inheritance and simple inheritance + interfaces ? What is the meaning of implements vs extends ?
Slide 92
Cest encore un quizz ! Entre une classe abstraite et une interface ? de mani`re oprationnelle, la dirence e e e est minime, tous les champs dune interface sont public/static et les mthodes abe stract/nal. Ces restrictions ne sapplique pas aux classe abstraite. Je pense que les interfaces sont plus l` pour caractriser une capacit spciale dune classe (Drawable, a e e e Serializable, remote ...) alors quune classe abtraite reprsente les caractristiques ine e trinsque dune famille de classes. La dirence est donc plus conceptuelle quoprationnelle. e e e (MOAAAA) Je pense que lhritage multiple permet de reprsenter plus de choses. e e Par exemple, les hotels, les restaurants et les hotels-restaurants se mod`lisent trs e e bien avec de lhritage multiple et tr`s mal si on doit avoir recours ` des interfaces. e e a Maintenant lhritage multiple apporte pas mal de complexit avec lui (voir les pb e e de virtual base class en C++) qui ne peuvent exister avec ce syst`mes dinterfaces + e hritage simple (pas de constructeurs, pas de variables membres dans les interfaces). e Implements vs extends ? Extends signie est une sorte de alors qu` mon avis a implements signie est capable de rpondre a. Linterface est alors une sorte e ` de spcication de protocole (entre moulte guillemets ...) dans le sens o` il ase u sure ` lutilisateur de linterface que les implmentations pourront bien rpondre aux a e e mthodes dclare dans linterface. e e e ` ` A quoi ca sert ? A pouvoir crire du code juste en connaissant une interface et non e limplmentation. Du code gnrique en quelque sorte. Les exemples sont nombreux e e e dans la lib java. Je pense que le plus beau, cest les interfaces de srialisation. Toutes e les classes implmentant Serializable sont capable de devenir persistantes si elles sont e atteignable a partir dune instance que lon veut persistante (voir doc Serialization ` !!! dans la doc du JDK).
77
IUT de Dijon
2.5 Polymorphism
Section 2.
Slide 93
78
ESIAL Nancy
Section 2.
2.5 Polymorphism
examples/interface/noel.java
class A1 extends A {} class A extends B implements IB, IA {} class B extends C {} class C extends D {} class D { public int x=2; public void print() { System.out.println(x);};} class E extends A{} interface IA {} interface IB extends IC, ID{} interface IC extends IE { int x=5;} interface ID extends IE {} interface IE{ int x=3; void print();
}
class Main { public static void main(String args[]) { E e=new E(); e.print();
//
System.out.println(e.x); // error
System.out.println(IE.x); System.out.println(((B)e).x); }}
Slide 94
En rsum : e e Hritage simple lors de la dnition dune hirarchie de classes e e e Hritage multiple lors de la dnition dune hirarchie dinterfaces e e e Une classe peut implmenter plus dune interface : explicitement en mettant plusieurs e noms dinterface dans une clause implements, ou par hritage des interfaces que e dclarent implmenter ses super classes. e e
79
IUT de Dijon
Section 2.
Interface conclusion
A new notion vs C++... An more simple form of multiple inheritance...but less powerful for modelling (hotel/restaurant...) Heavily used in the AWT library.
Slide 95
Diminuer le couplage entre classes favorise la rutilisation : si on modie lune, les e modications dans les classes utilisatrices doivent tre minimes. e
2.6
2.6.1
80
ESIAL Nancy
Section 2.
class Person { private String name, address; public Person(String namep, String addressp) { name=namep; address=addressp;
}
public void print() { System.out.println(name+","+address); }
}
class Client extends Person { private int amount=0; public Client(String namep, String addressp,int amountp) { super(namep,addressp); amount=amountp; } public void print() { System.out.println(name+","+address+","+amount); }
}
class ClientDemo { public static void main(String[] args) { Client c=new Client("momo","yo",100); c.print();
} }
Slide 96
Les champs dclars en private ne reste accessible que de la classe. i.e. ils ne sont pas e e visible pour les sous-classes. Client4.java:19: Variable name in class Person not accessible from class Client. System.out.println(name+","+address+","+amount); ^ Client4.java:19: Variable address in class Person not accessible from class Client. System.out.println(name+","+address+","+amount); ^ 2 errors 2.6.2 Encapsulation and Overriding
81
IUT de Dijon
Section 2.
Overriding of a method
Method Access have not to be reduced... however It can be enlarged : A private method can be overridden as a public method
General rule : you have to ensure the contract you have passed with your superclass.
Slide 97
examples/heritage/Client5.java
class Person { private String name, address; public Person(String namep, String addressp) { name=namep; address=addressp; } public void print() { System.out.println(name+","+address); }
}
class Client extends Person { private int amount=0; public Client(String namep, String addressp,int amountp) { super(namep,addressp); amount=amountp; } private void print()
{ System.out.println(name+","+address+","+amount); }
}
class ClientDemo { public static void main(String[] args) { Client c=new Client("momo","yo",100); c.print(); }
Slide 98
82
ESIAL Nancy
Section 2.
Client5.java:18: Methods cant be overridden to be more private. Method void print() is public in class Person. private void print() { 1 error
Slide 99
class Person { private String name, address; public Person(String namep, String addressp) { name=namep; address=addressp; } private void print() { System.out.println(name+","+address); }
}
class Client extends Person { private int amount=0; public Client(String namep, String addressp,int amountp) { super(namep,addressp); amount=amountp; } public void print() { System.out.println(amount); }
}
class Client6Demo { public static void main(String[] args) { Client c=new Client("momo","yo",100); c.print();
} }
Slide 100
83
IUT de Dijon
Section 2.
Bien noter sur cet exemple le passage des variables membre de Person en protected et surtout private void print() rednit en public void print() dans Client. Bien sur, ce code e compile. 2.6.3 Protected Modier
protected Modier
Allow eld or method access to the class and all subclasses Code that reference a protected eld or method of class C have to be dened within the class C or
subclasses of C.
Slide 101
84
ESIAL Nancy
Section 2.
Protected
examples/heritage/protected.java
class Person { private String name protected String address; public Person(String namep, String addressp) { name=namep; address=addressp; } private void print() { System.out.println(name+","+address); }
}
class Client extends Person { private int amount=0; public Client(String namep, String addressp,int amountp) { super(namep,addressp); amount=amountp; } public void print() { System.out.println(name); System.out.println(address); system.out.println(amount);
}}
class ProtectedDemo { public static void main(String[] args) { Client c=new Client("momo","yo",100); c.print(); } }
Slide 102
Language: Contents
General Points Compilation and Execution Classes and Objects Inheritance Polymorphism Exceptions Conversions Packages
Slide 103
85
IUT de Dijon
2.7 Exceptions
Section 2.
2.7
Exceptions
Exception Overview
Goal : Having a portable and robust way to react to errors. An exception is a transfer of control from the
point where the exception occurs to a point specied by the programmer.
Exceptions are objects Exception classes. A program that does not handle exceptions that can be raised does not compile (unlike C++ ...) Thats the only way to exit abnormally from a java program (no core dump, normally).
Slide 104
2.7.1
86
ESIAL Nancy
Section 2.
2.7 Exceptions
Exceptions Objects
} }
The class Exception is the root of checked exceptions i.e. exceptions that are checked at compile-time. The exception class has a sister Error for unrecoverable errors (out of memory, no class found ...)
Slide 105
Throwed : A method throws an exception : it creates an exception object, stop the method execution and return the control to calling method Propagated : When calling a method, an exception occurs, control come back with an exception object, I dont manage this kind of exception, I stop my execution and return control to the calling method Catched : A method return an exception : that was an expected scenario, I manage it and stop the execution propagation.
Slide 106
87
IUT de Dijon
2.7 Exceptions
Section 2.
General Example
Banque 1 0,n Compte int no; int montant; void Debit(int nb) 0,n Client int nocourant void RetraitCB(int nb) Debit(int no, int nb) 1
Slide 107
Bon lexemple est le suivant : Le client fait un retrai CB appel de retraitCB appel de Branque.debit() appel de compte.debit() pas assez dargent sur le compte emission dune exception dans compte, propagation dans Banque, interception dans Client. 2.7.2 Throwing
88
ESIAL Nancy
Section 2.
2.7 Exceptions
Throwing Exceptions
examples/exception/Compte.java
}
class Compte { private int no; private int montant; public Compte(int nop,int nbp) { no=nop; montant=nbp;
}
void debit(int nbp) throws NotEnoughMoney if (nbp>montant) { throw new NotEnoughMoney("Il manque "+(nbp-montant)); } else { montant=montant-nbp; }
}
int getNo() { return no; }
Slide 108
Bien remarquer la syntaxe throws dans la signature de Debit, et lappel throw new NotEnoughMoney dans le corps de Debit. La clause throws dclare avec quelles exceptions on peut sortir de la mthode. Si e e une exception se produit et quelle nest pas dclare dans la clause throws, alors une e e ERROR est leve ! La clause throws peut dclarer une liste dexception. e e Bien noter que throw lance lobjet exception dans la remonte de la chaine dappel. e Il faut bien entendu crer cet objet exception de mani`re tout a fait classique avant e e ` de lancer la propagation de lexception. La clause throw expression, [JG96][287], o` expression doit se rsoudre ` une rfrence u e a ee dinstance dobjet aectable a Throwable, l`ve lexception indique, prend le contrle (abrupt ` e e o completion de ce qui sexcutait), parcourt la pile et : e 2.7.3 Propagation
89
IUT de Dijon
2.7 Exceptions
Section 2.
examples/exception/Banque.java
class Banque
private Compte[] cpts=new Compte[20]; private static int nbcompte=0; void register(Compte cp) { cpts[cp.getNo()]=cp;
}
void Debit(int nop, int amountp) throws NotEnoughMoney cpts[nop].debit(amountp);
}
int getLast() { nbcompte++; return nbcompte;
} }
Slide 109
Lopration Banque.Debit appelle Compte.Debit. Or Compte.Debit peut se terminer e avec une exception NotEnoughMonney. Si cest le cas, alors Banque.Debit peut aussi se terminer avec NotEnoughMoney et la remonte de la chaine dappel des mthodes e e continue. Bien noter que si NotEnoughMoney ne gure pas dans la clause throws de Banque.Debit, alors il y a une erreur de compilation !! 2.7.4 Catching
90
ESIAL Nancy
Section 2.
2.7 Exceptions
Catching Exception
examples/exception/Client.java
class Client { private int no; private Banque banque; Client(Banque bp,int amountp) { banque=bp; no=banque.getLast(); banque.register(new Compte(no,amountp));
}
void RetraitCB(int amountp) { try { banque.Debit(no,amountp);
}
catch (NotEnoughMoney e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } nally { System.out.println("Au
revoir !"); }
} }
Slide 110
try, No exception Execution of the try/catch and the finally block. try, An exception e of dynamic type E is raised :
e is an instance of a class dened in a catch clause : The corresponding block is executed and then
the nally block.
Beware : An exception throwed in a catch block can be hidden by another exception throwed in the nally
block.
Slide 111
91
IUT de Dijon
2.7 Exceptions
Section 2.
[JG96][291]. Le probl`me est de savoir pour une clause try/catch/nally quelles peuvent e tre les compltions possibles et pourquoi... En bref, cest plutt logique. Le finally e e o gagne en tout tat de cause. e 2.7.5 Execution
Execution
examples/exception/main.java
class main { public static void main(String argv[]) { Banque banque=new Banque(); Client c=new Client(banque,100); c.RetraitCB(200); for (int i=0;i<40;i++) { new Client(banque,100);
} } }
NotEnoughMoney: Il manque 100 at Compte.debit(banque.java:16) at Banque.Debit(banque.java:34) at Client.RetraitCB(banque.java:52) at main.main(banque.java:68) Au revoir ! java.lang.ArrayIndexOutOfBoundsException: 20 at Banque.register(banque.java:31) at Client.<init>(banque.java:48) at main.main(banque.java:70)
Slide 112
Bien remarquer la dirence entre les deux exceptions ! e La premi`re est notre exception ! Tout sest pass comme nous lavions prvu. e e e la seconde est une run-time exception. Le compilateur ne nous a pas prvenu de e cette eventualit et ne nous pas forc ` en tenir compte. e ea Cest la dirence entre les checked exception, gnralement celles que nous dclarons e e e e et les run-time exception. Le compilateur nexige pas que les run-time exception soit propage ou intercepte (voir java.lang.RuntimeException dans la doc du JDK). e e 2.7.6 Obfuscated Examples
92
ESIAL Nancy
Section 2.
2.7 Exceptions
examples/ExceptionFumet.java
class Exception1 extends Exception { Exception1() { super(); } Exception1( String s) { super(s); }} class Exception2 extends Exception {
//...
}
class ExceptionFumet { public static void main(String[] args) throws Exception2 { try {
!!");
// PARCOUR dans lORDRE //OK:speciee dans prol //... // OPTIONEL
} catch (Exception1 e) {
throw new Exception2();
}}}
Slide 113
examples/TestException.java
class Exception1 extends Exception {} class Exception2 extends Exception {Exception2(String s){super(s);}} class TestException { public static void main(String[] args) throws Exception2 { try { Class c=Class.forName("Exception2"); throw new Exception1();
// ClassNotFound possible
} catch (Exception1 e) { System.out.println("Exception 1 catche"); e throw new Exception("UN"); } catch (Exception reste) { System.out.println("Autre exception : " + reste); } nally { System.out.println("Cio!"); throw new Exception2("DEUX"); }}}
Slide 114
93
IUT de Dijon
2.7 Exceptions
Section 2.
two rst lines on stdout : System.out.println two last lines on sdtderr : Default, JVM
Slide 115
Slide 116
94
ESIAL Nancy
Section 2.
2.7 Exceptions
La restriction nimplique pas que la mthode de la sous classe spcie moins dexceptions. e e Au contraire elles peuvent tre plus nombreuses car plus spciques. La mthode e e e prcise ainsi exactement les cas critiques. La restriction assure quun code utilisae teur de la super classe pourra globalement les rcuprer. e e Met-on un exemple sur les pbs de compatibilit clause throws en cas de surcharge ou overe riding ? Un pourrait simplement mettre un schema : une classe at une sous classe avec une methode m override qui specie des exceptions situee dans 2 arbres dheritage separes.
examples/exception/override.java
class E1 extends Exception {} class E2 extends E1 {} class E3 extends Exception {} class A { void print() throws E1 {};
}
class B extends A { void print() throws E2, E3 {}
Slide 117
Result : override.java:11: Invalid exception class E3 in throws clause. The exception must be a subclass of void print() throws E2, E3 {} ^ 1 error
95
IUT de Dijon
2.7 Exceptions
Section 2.
Exception : Conclusion
splitting normal code and error management code Reduction of the code size vs ==-1 UNIX style error management... it has a price :
All checked exception have to be catched ! bad using of the mechanism....
Slide 118
Language: Contents
General Points Compilation and Execution Classes and Objects Inheritance Polymorphism Exceptions Conversions Packages
Slide 119
96
ESIAL Nancy
Section 2.
2.8 Conversions
2.8
Conversions
Le lecteur est invit ` consulter [JG96][chapitre 5] si il dsire connaitre la description de ea e toutes les possibilits de conversions de Java. On va donner ici seulement les cas importants e et les principes gnraux rgissant les conversions. e e e
Conversions
Implicit numeric conversions and promotion : expressions, parameters passing, affectation Explicit conversions of primitives types Implicit conversion and overloading References conversion : casting
Slide 120
2.8.1
97
IUT de Dijon
2.8 Conversions
Section 2.
Affectation (implicit conversion) Method call Expression evaluations String conversion : Special meaning of + for string System.out.println(toto+1), method toString(); Cast (like C/C++)
Slide 121
98
ESIAL Nancy
Section 2.
2.8 Conversions
Numeric Conversions
widening narrowing General Rule: widening allowed by the compiler,, narrowing generated warning Forbidden:
Reference primitive type Conversion to boolean
Slide 122
Linterdiction des casts sauvages entre types primitifs et rfrences est un point ee important pour assurer une suret de fonctionnement du code, et une certaine scurit e e e contre les virus.
99
IUT de Dijon
2.8 Conversions
Section 2.
Numeric Conversions
Java have a table of prices to convert a primitive type to another. < 10 : Widening otherwise narrowing
Slide 123
Numeric Conversions
from:
to:
short
1 0 10 11 11 14 15
char
2 10 0 11 11 13 14
int
3 1 1 0 10 12 13
long
4 2 2 1 0 11 12
float
6 4 4 4 6 0 10
double
7 5 5 5 5 1 0
Slide 124
100
ESIAL Nancy
Section 2.
2.8 Conversions
Le tableau prcdent vient de : [Anu96]. e e Plus une valeur du tableau est petite moins la conversion est coteuse, do` la diagonale u u a ` 0 ; la premi`re ligne croisante ; ou la derni`re ligne tr`s ch`re et dcroissante : double e e e e e est un des type les plus grand et complexe a manipuler. ` Au dessus dun cot de 10 (inclus), il y a perte de prcision. On ne perd rien pour un u e byte, mais on perd toujours quelque chose pour un double. Les modes opratoires pour les arrondis, sont indiqus dans la spcication du langage. e e e 2.8.2 Explicit Conversions and Wrappers
Wrapper : artical classes to encapsulate primitives types... java.lang.Integer is the wrapper for int Wrapper classes give all methods explicit conversion and formatting
public final class Integer extends Number { /** * The minimum value an Integer can have. The lowest minimum value an * Integer can have is 0x80000000. */ public static final int MIN_VALUE = 0x80000000; .......
Slide 125
101
IUT de Dijon
2.8 Conversions
Section 2.
Scanf ?
examples/Scanf.java
lit :"+ i); } }catch(IOException e){ } catch(NumberFormatException e){ System.err.println("On veut un entier"); } } }
System.out.println("On
Slide 126
2.8.3
102
ESIAL Nancy
Section 2.
2.8 Conversions
examples/conversion/narrow.java
class A { int add( int i, short s ) {return i+s;} int add( short s, int i ) {return -(i+s);}
}
class B extends A { private int fI=100; int add( short s, int i ) {return i+s+fI;} void print(){ System.out.println( add(10, (short)10) + ";
}
class TestSurcharge { public static void main( String[] args){ B b = new B(); b.print(); b.add(10, 10);
}}
Slide 127
Pas vident : n.add(10,10) gn`re une erreur e e e No method matching add(int,int) found in class B. En eet, aucun narrowing nest permis pour rsoudre le polymorphisme paramtrique. e e 2.8.4 Conversion of references and inheritance
103
IUT de Dijon
2.8 Conversions
Section 2.
Widening of references
Sub classes super class Class S to interface I if S implements I Sub Interface to super interface
Slide 128
Examples
examples/conversion/conversion.java
}
public void print() { System.out.println(name+","+address+","+amount);
class Person { protected String name, address; public Person(String namep, String addressp) { name=namep; address=addressp;
} }
class Client6Demo {
}
private void print()
public static void main(String[] args) { Client c=new Client("Jacques","celere",100); Person p= new Person("jean","braye"); Person p1=c; p1=(Person)p1;
System.out.println(name+","+address);
} }
class Client extends Person { private int amount=0; public Client(String namep, String addressp,int amountp)
// 1 // 2 // 3 // 4
{
super(namep,addressp); amount=amountp;
} }
Slide 129
104
ESIAL Nancy
Section 2.
2.8 Conversions
1. p1 est une rfrence sur une Person. Autoris ee e 2. lobjet point est bien un Client. Autoris. Au passage bien remarquer quune fois e e quun objet est cr comme tant dune certaine classe, il reste ad vitam eternam de ee e cette classe !! (type safe) 3. error Compil !! conversion.java:28: Incompatible type for declaration. Explicit cast needed to convert Person to Client. 4. Erreur run-time: java.lang.ClassCastException: Person at Client6Demo.main(conversion.java:33) 2.8.5 Generic classes and Conversions
No Genericity in JAVA ! The only way : Making collections of Object User must use the cast operator ...
Slide 130
105
IUT de Dijon
2.8 Conversions
Section 2.
examples/polymorphisme/stack.java
class Point
private int x, y; public Point( int x, int y ){ this.x=x; this.y=y;} public void move( int xp, int yp ){x+=xp; y+=yp;} public void print(){System.out.println("("+x+","+y+")");}} class stack { private Object[] tab; private int top; public stack(int size) { tab=new Object[size]; top=0;} public void push(Object elt) { tab[top]=elt; top++; } public Object pop() { top--; return tab[top]; }} class Main { public static void main(String args[]) { stack s=new stack(5); s.push(new Point(1,2)); Object elt=s.pop(); elt.print(); Class classname=elt.getClass(); System.out.println(classname); ((classname.toString())elt).print(); ((Point)elt).print();
// error
//error
}}
Slide 131
Language: Contents
General Points Compilation and Execution Classes and Objects Inheritance Polymorphism Exceptions Conversions Packages
Slide 132
106
ESIAL Nancy
Section 2.
2.9 Packages
2.9
Packages
Package: Overview
The package provides naming spaces : a class A dened within a package P is called P.A et non A. It allows to hide some classes : A class can be declared public or not. It denes a new modier for elds and methods to give a greater access between classes of the same
package.
Slide 133
107
IUT de Dijon
2.9 Packages
Section 2.
examples/packages/Main.java
package MyPackage; public class Main { public static void main(String args[]) { System.out.println("hello
world");
} }
if I work in molli... This class must be dened inside a le molli/MyPackage/Main.java The CLASSPATH must be set to : .:molli/:/usr/jdk/lib/classes.zip java MyPackage.Main start execution... looking for MyPackage/Main.class ./MyPackage/Main.class does not exist ... molli/MyPackage/Main.class exists loading of Main.class and execution of main()...
Slide 134
2.9.1
108
ESIAL Nancy
Section 2.
2.9 Packages
Encapsulation :
package : naming
A class A dened in a class Q is not named A but Q.A ! the class A does not exists ! A package can have sub-packages, in the same way that a directory can have sub-directories. Avoids name conict (Symbol multiply dened ;-D) A package naming convention can use URL like : COM.Apple.quicktime.v3
Slide 135
Lexemple bateau vient du C++ ! nombre de librairies dclarent une classe String pour e plein de mauvaises raisons. Si vous prenez deux librairies de ce type vous ne pourrez compiler sans avoir le String : multiply dened. Il faut absolument disposer du source des librairies pour pouvoir solutionner ce probl`me. Evidemment, le probl`me survit, puisqu` chaque e e a nouvelle version de la librairie il faudra propager vos changements du au conit de nom. Bien sur, les package vite ce probl`me, ` condition de gnrer des noms de package unique. e e a e e
109
IUT de Dijon
2.9 Packages
Section 2.
Import
examples/packages/vector.java
import java.util.Vector;
class Point
} }
class Main { public static void main(String args[]) { java.util.Vector v2=new java.util.Vector(); v2.addElement(new Point(3,4)); Vector v1=new Vector(); v1.addElement(new Point(1,2));
// ok with import
} }
Slide 136
Reference public classes with its entire name : COM.Apple.quicktime.v3.Main import Package-name.Class-name : Allows to use Class-name in the code without using
Package-name.Class-name. Its a writing convenience .
import Package-name.* allows to use all classes dened as public in Package-name without
specifying the entire name in the current java le.
Beware ! No similarities with #include ! if java or javac looks for a class A.B.C.D.ECLASSE, it has to nd a le ECLASSE.class in a directory
A/B/C/D. The CLASSPATH has to contain a path to the A directory.
Slide 137
110
ESIAL Nancy
Section 2.
2.9 Packages
import correspond un peu au WITH ADA. Plusieurs clauses import peuvent tre utilises en dbut de chier : le compilateur doit e e e sassurer alors quil ny aura pas dambiguit entre les noms de classes directement e utilisables Si vous avez des erreurs du type class not found a la compilation ou a lexcution ` ` e pensez bien ` cet algorithme et regardez votre CLASSPATH !!! a
Packages : Remarks
A future support for the compilation on the net: a name of a package can be read as a URL : unique package name. Ex : COM.Apple.quicktime.v2 The class loader can be overridden to provide this feature...
Slide 138
Pour les r`gles et usages sur les noms de packages se reporter ` [JG96][pages 113-126]. e a Il faut surtout noter quun nom de package doit commencer par une minuscule. En rsum une compilation unit que lon fournit au compilateur javac est forme un e e e chier .java contenant le source dun certain nombre de classes dun mme package e (une seule clause package, en en utilisant dautres (zro ou plusieurs clause import). e Des imports automatiques sont faits pour les packages prdnis dans java ( e e import java.*). En cas dabscence de clause package, la compilation unit se rapporte au package par dfaut, de nom vide. e Il faut donc noter que la notion de package nest pas uniquement un mcanisme e dencapsulation, cest aussi une facilit de base pour organiser un tant soit peu le e code. 2.9.2 Public classes, Package classes
111
IUT de Dijon
2.9 Packages
Section 2.
Slide 139
Attention, cette pseudo encapsulation de classe reste purement syntaxique. Les packages ne sont pas des objets.
112
ESIAL Nancy
Section 2.
2.9 Packages
Slide 140
Finallement, le mcanisme correspondant en c++, cest les friends. Mais en Java a me e c parait plus simple mme si cest pas aussi souple. e
113
IUT de Dijon
2.9 Packages
Section 2.
Example
getTop
programmeur (de la classe) : * donnes concrtes * manipulation prive de ces donnes * classe auxilliaire : Elt
package : lifoInt
Slide 141
Bon et bien voil` cest pas compliqu ! On implante une pile a laide dune liste chaine a e ` e dont on acc`de qu` la tte. e a e Ltat dune instance de LifoInt utilise des instances de Elt une classe dont lutilisateur e de LifoInt ne doit en aucun cas avoir acc`s. On conditionne donc la classe LifoInt e et la classe Elt dans un mme package lifoInt. LifoInt y est public, Elt reste e uniquement avec lacc`s package. e Le source java suit...
114
ESIAL Nancy
Section 2.
2.9 Packages
File :
examples/lifoInt/LifoInt.java
examples/lifoInt/LifoInt.java
package lifoInt; public class LifoInt { private Elt Top=null; private boolean isEmpty(){ return Top==null; } public void pop(){ if (isEmpty()){ } //exception else{ Top=Top.getNext();}
}
public void push( int pValeur ){ Top = new Elt(Top, pValeur);
}
public int getTop(){ return (isEmpty() ? 0 : Top.getValue());
} }
Slide 142
115
IUT de Dijon
2.9 Packages
Section 2.
File :
examples/lifoInt/Elt.java
examples/lifoInt/Elt.java
private int Value; private Elt Next; Elt( Elt pNext, int pValue ){ Next=pNext; Value=pValue;} Elt getNext(){ return Next; }; int getValue(){ return Value;
}}
Slide 143
Elt est la classe package du package lifoInt. Dans cet exemple, seul LifoInt peut voir Elt. Il faut noter beaucoup de chose sur ces exemples : Un package peut etre multi-chiers (dclaration package en tete de chaque chier. e Une classe peut tre publique cela signie que seule cette classe est visible pour du e code utilisant ce package. Dans cet exemple seul LifoInt peut voir Elt. 2.9.3 Public, Private, Protected and Package
116
ESIAL Nancy
Section 2.
2.9 Packages
2 protections :
1. The class: Methods or Fields public/private/protected, public/private, protected. 2. the package: a group of classes friends.
Slide 144
Slide 145
117
IUT de Dijon
2.9 Packages
Section 2.
Encapsulation : in brief
Package Q
C1
A1
A2
B1
B2
Slide 146
Quizz: Si dans une mthode de A1, jai une rfrence sur A2. Vois-je A2.a ? A2.b ? A2.c ? e ee Si dans une mthode de A1, jai une rfrence sur B1. Je vois B1.a ? B2.a ? B2.c ? e ee Si dans une mthode de A1, jai une rfrence sur sur C1. Je vois C1.a ? C1.b ? C1.c e ee ? Si dans une mthode de C1, jai une rfrence sur B1, je vois B1.a ? B1.b ? B1.c ? e ee (gnark, gnark ...) 2.9.4 Package, Encapsulation and Inheritance
118
ESIAL Nancy
Section 2.
2.9 Packages
examples/TestProtected.java
}
class B { void p(A ap) { System.out.println(ap.i);
} }
class TestProtected { public static void main(String[] args) { A a=new A(); B b=new B(); b.p(a);
} }
Slide 147
Ben oui, protected ne signie rien pour une classe amie ! (du mme package). Pour voir e un eet quelconque a protected, il faut faire des packages. `
119
IUT de Dijon
2.9 Packages
Section 2.
examples/prot/TA/A.java
package TB;
return 0;
package TA;
}
import TA.A;
}
examples/prot/main.java
public class A { private int i=2; static protected int j=3; protected A() { i=3;
}
protected int geti() { return i;
}
public int getToto() { toto.geti(); toto=new A(); this.geti(); super.geti();
examples/prot/TB/B.java
// 1 // 2 // 3 // 4 // 5
// 6
} }
} }
int t=TA.A.j;
Slide 148
Remember the law: A protected member or constructor of an object may be accessed from outside the package in which it is declared only by code that is responsible for the implementation of that object. 1. TB/B.java:13: Cant access protected method geti in class TA.A. TA.A is not a subclass of the current class. toto.geti(); 2. ok ?? but A protected constructor can be accessed by a class instance creation expression only from within the package in wich it is defined. 3. ok 4. ok 5. ok 6. main.java:7: No constructor matching A() found in class TA.A. A a=new A();
120
ESIAL Nancy
Section 2.
2.9 Packages
Contents
Introduction Language: classes, inheritance, polymorphism, Packages... Threads Advanced Window Toolkit (AWT) Applets Conclusion
Slide 149
121
IUT de Dijon
Threads
Section 3.
3
3.1
Threads
Overview
Overview
Thread = A lightweight process: a single sequential ow of control within a program. Multi-tasking independent of a plate-forme. Ex: java machine on windows3.1. Integrated part of the language : the synchronization primitives are key words of the language : Synchronized. Beware : All the threads executing on a virtual machine shared the same memory space :
Advantage : communication inter-process is easy and very efcient (no overhead). Inconvenient ?
Slide 150
Quand mme !! Avoir un syst`me multi-tche de mani`re indpendante dune architece e a e e ture est un point assez important. Bien sr, ca existait dj` en ADA ou en Smalltalk mais u ea pas en C ou en C++ ... Les threads java sont en fait des lightweight threads dans le mesure o` tous les threads u partagent le mme espace mmoire. Cest une philosophie tr`s loigne dun syst`me comme e e e e e e UNIX o` tous les processus ont un espace mmoire priv et protg des autres espaces des u e e e e autres processus. Pour avoir un espace partag il faut crer explicitement des mmoires e e e partages. En java, nalement tout fonctionne comme si la mmoire de la machine virtuelle e e est une grosse mmoire partage entre tous les threads. e e Inconvnient : Il faut bien se rendre compte qua priori en java il ny a pas de manipulae tion de mmoire (pas de memcopy ou de manip de pointeurs) ! Il nest donc pas possible de e corrompre la mmoire soit de mani`re intentionnelle soit par des dbordements de tableaux e e e intempestifs ou des manipulation de pointeurs. Si un thread est plant seul les threads e communiquant avec lui seront gns (comme ce serait le cas sous unix). Sinon il nest pas e e possible quun thread mme mal crit viennent corrompre la reprsentation mmoire dun e e e e autre thread ! Alors quelle est lavantage fondamental entre la gestion de processus a la UNIX est la ` gestion de threads a la JAVA ? ` En Unix les processus sont beaucoup plus lourd, mais la gestion du contrle dacc`s o e entre processus semble plus riche en UNIX : notion de propritaire dun processus, groupe e de processus... ` A revoir ...
122
ESIAL Nancy
Section 3.
3.2 Example
Overview
Thus nally :
How the threads are created ? How they are scheduled ? How they are structured ? How they are synchronized ?
Slide 151
Cette prsentation est une extraction/concentration du tutorial (pour le plan), avec un e peu du java source book [Anu96] et toujours la spcication du langage. e
3.2
Example
123
IUT de Dijon
3.2 Example
Section 3.
Threads
Threads are objects ! Thus, there is a class Thread To create a thread, we have to :
1. Subclass the class Thread. 2. Override the method Run() with its own code. 3. Instantiate this class.
Slide 152
Example
examples/TwoThreadsTest.java
class TwoThreadsTest { public static void main (String[] args) { new SimpleThread("Jamaica").start(); new SimpleThread("Fiji").start();
} }
class SimpleThread extends Thread { public SimpleThread(String str) { super(str);
}
public void run()
{
" + getName());
for (int i = 0; i < 10; i++) { System.out.println(i + " try { sleep((int)(Math.random() 1000)); } catch (InterruptedException e) {}
}
System.out.println("DONE!
" + getName());
} }
Slide 153
124
ESIAL Nancy
Section 3.
Il faut bien noter que la mthode start retourne immdiatement. Le thread concern e e e est lanc, le code qui a fait le start continue et sera ventuellement prempt par la e e e e suite.
0 Jamaica 0 Fiji 1 Fiji 1 Jamaica 2 Fiji 2 Jamaica 3 Jamaica 4 Jamaica 3 Fiji 4 Fiji 5 Jamaica 5 Fiji 6 Jamaica 7 Jamaica 6 Fiji 8 Jamaica 9 Jamaica 7 Fiji DONE! Jamaica 8 Fiji 9 Fiji DONE! Fiji
Slide 154
3.3
3.3.1
Threads Attributes
The States of the Threads
125
IUT de Dijon
Section 3.
new Thread()
Sus Sle pend Wai ep() () t()
Blocked stop()
stop() Newborn
Res Not ume( ify ) ()
Dead
start()
Runnable yield()
Slide 155
3.3.2
Priorities
126
ESIAL Nancy
Section 3.
Priorities
To ensure the sharing of a CPU among several threads Scheduling based on xed priorities (and not oating !). At a given instant, if several threads are in the state runnable, the thread of higher priority pass in the state
running.
If several threads have the same priority, then the Scheduler behaves differently according to the host
system : For system supporting time-slicing: time slicing For other: Just a sequence
Slide 156
En Unix, aux derni`res nouvelles, les processus ont des priorits ottantes. Moins un e e processus est execut, plus sa priorit monte, une fois quil est pass dans le processeur, sa e e e priorit diminue. Ce nest pas le cas en JAVA. Les threads ont une priorit xe dtermine e e e e par la priorit du thread qui leur a donn naissance. Bien sur, cette priorit peut tre e e e e change par le corps du thread (ou de lextrieur : setPriority est public) lui-mme e e e mais en aucun pas par lordonnanceur. Cest tout de mme assez primitif... La encore, e on peut ressentir le compromis constant avec les dirents syst`mes pouvant acceuillir le e e syst`me JAVA. Comme toutes les machines htes ne savent pas faire du temps partag, on e o e se replie sur des solutions plus primitives mais plus gnrales. e e On peut aussi voir la priorit des threads comme une sorte de nice UNIX. La priorit e e UNIX tant alors vue que comme une technique pour assurer un temps partag ` peu pr`s e ea e quitable. e Remarque : La priorit la plus leve est un entier le plus grand possible dans la limite e e e de java.lang.Thread.MAX_PRIORITY. Cest linverse de la numrotation UNIX. e
127
IUT de Dijon
Section 3.
Priorities
A thread of a higher priority becomes in the state runnable It returns the control : yield(), sleep() . . . On the systems which support time slicing, its time quota is expired.
At its creation a thread has the same priority as its parent.
Slide 157
Priorities
The system is preemptive, in the context that : If at a given instant, a thread t0 becomes in the state runnable with higher priority than the thread t1 which
executes ...
Then t1 becomes in the state runnable and t0 passes in the state running. Simply, there is no pre-emption among threads with the same priority. However, an implementation on a
machine could allow time slicing...
According to the JVM, we have time slicing or not ... Thus you dont have to make hypothesis when you
code!
Slide 158
128
ESIAL Nancy
Section 3.
Attention : si il ny a pas de temps partag pour les threads, leur intret dans ce cas e e pour grer des entres-sorties bloquantes semble limit. Or ceci est un des usages de e e e base des threads : le monitoring dun stream sur un serveur, et viter des fork, ou de e grer explicitement une top level loop. e Quand mme bizarre... e
Priorities : Example
examples/RaceTest.java
class RaceTest { nal static int NUMRUNNERS = 2; public static void main(String[] args) { SelshRunner[] runners = new SelshRunner[NUMRUNNERS]; for (int i = 0; i < NUMRUNNERS; i++) { runners[i] = new SelshRunner(i); runners[i].setPriority(2); } for (int i = 0; i < NUMRUNNERS; i++) { runners[i].start(); }
} }
class SelshRunner extends Thread { public int tick = 1; public int num; SelshRunner(int num) { this.num = num; } public void run() + tick); }}
{
#" + num + ", tick = "
} }
Slide 159
129
IUT de Dijon
Section 3.
Priorities : on Solaris
Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread
#0, #0, #0, #0, #0, #0, #0, #0, #1, #1, #1, #1, #1, #1, #1, #1,
tick tick tick tick tick tick tick tick tick tick tick tick tick tick tick tick
= = = = = = = = = = = = = = = =
50000 100000 150000 200000 250000 300000 350000 400000 50000 100000 150000 200000 250000 300000 350000 400000
Slide 160
OUARRGGG !! pas de temps partag sur Solaris !!!!! e Remarque : Les threads (mme POSIX !) sont disponibles sur Solaris. On vit une poque e e formidable. man thr create.
130
ESIAL Nancy
Section 3.
Priorities : On Windows95
Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread
#0, #0, #1, #0, #1, #0, #1, #0, #1, #0, #1, #0, #1, #0, #1, #1,
tick tick tick tick tick tick tick tick tick tick tick tick tick tick tick tick
= = = = = = = = = = = = = = = =
50000 100000 50000 150000 100000 200000 150000 250000 200000 300000 250000 350000 300000 400000 350000 400000
Slide 161
Sighh, ca marche mieux sur windows95 (Nous suis du ... 8-<). ec Petite Annonce : Vends Sun Ultra Sparc 1 140 sous solaris 2.51. Pas cher.
131
IUT de Dijon
Section 3.
Priorities : yield()
examples/RaceTestSun.java
class RaceTestSun { nal static int NUMRUNNERS = 2; public static void main(String[] args) { SelshRunner[] runners = new SelshRunner[NUMRUNNERS]; for (int i = 0; i < NUMRUNNERS; i++) { runners[i] = new SelshRunner(i); runners[i].setPriority(2); } for (int i = 0; i < NUMRUNNERS; i++) { runners[i].start(); }
} }
class SelshRunner extends Thread { public int tick = 1; public int num; SelshRunner(int num) { this.num = num; } public void run() { while (tick < 400000)
{ tick++;
#" + num + ", tick = " + tick);
}}}
Slide 162
Priorities: yield()
Give the control explicitely with yield() Beware! A thread which call yield() can give the control only to a thread which has the SAME PRIORITY !!
Slide 163
132
ESIAL Nancy
Section 3.
Priorities: solaris
Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread
#0, #1, #0, #1, #0, #1, #0, #1, #0, #1, #0, #1, #0, #1, #0, #1,
tick tick tick tick tick tick tick tick tick tick tick tick tick tick tick tick
= = = = = = = = = = = = = = = =
50000 50000 100000 100000 150000 150000 200000 200000 250000 250000 300000 300000 350000 350000 400000 400000
Slide 164
133
IUT de Dijon
Section 3.
Priorities
examples/RaceTest2.java
}}
class SelshRunner2 extends Thread { public int tick = 1; public int num; SelshRunner2(int num) { this.num = num;
class RaceTest2 { public static void main(String[] args) { SelshRunner runner1 = new SelshRunner(1); SelshRunner2 runner2 = new SelshRunner2(2); runner1.setPriority(2); runner2.setPriority(2); runner1.start(); runner2.start();
}
public void run()
}}
class SelshRunner extends Thread { public int tick = 1; public int num; SelshRunner(int num) { this.num = num; } public void run() { while (tick < 400000) tick++; if ((tick % 50000) == 0) { System.out.println("Thread
" + tick); } }
Slide 165
Le mme quavant, on change les priorits en cours de route. Jai plutt essay sous e e o e windows95 ... Puisquon nutilise pas le yield dans lexemple. c a donne ca :
134
ESIAL Nancy
Section 3.
Priorities
Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread
#1, #2, #1, #2, #1, #2, #1, #2, #2, #2, #2, #2, #1, #2, #1, #1, #1,
tick = 50000 tick = 50000 tick = 100000 tick = 100000 tick = 150000 tick = 150000 tick = 200000 tick = 200000 priority boosted ! tick = 250000 tick = 300000 tick = 350000 tick = 250000 // ?? tick = 400000 tick = 300000 tick = 350000 tick = 400000
Slide 166
Les ?? marquent une excution qui semble incorrecte puisque le thread numro 2 e e possde ` ce moment une plus grande priorit que le thread numro 1. Mais il est e a e e bien dit (et nous lavons dj` dit) dans [JG96][page 589] quun schedule exact nest ea pas garanti. 3.3.3 Thread daemons
135
IUT de Dijon
Section 3.
Daemons
A thread can be declared as Daemon. It is a service thread for another thread ! A thread daemon exists only if there is another thread non-daemons Thus if only the daemons threads are active, the java machine stops. Example : The threads image fetcher for HotJava.
Slide 167
3.3.4
Groups of Threads
136
ESIAL Nancy
Section 3.
Group of Threads
A java thread is necessarily a member of a group ! A group of threads has 0-n threads or group of threads There is thus a hierarchical organisation of the group of threads ...
Slide 168
Main
Group1
Group2
t3
t4
t11
Group3
t21
t22
t131
t132
t133
Slide 169
137
IUT de Dijon
Section 3.
Why ?
Security :
A thread of a group can not create a thread in another group without the permission of the security manager. Each group has a priority maximal limited which can not exceeded produces scales of priorities. The groups are named space names for the thread (to facilitate the debugging ...). Handling a set of threads (stop, suspend, notifyall ...)
Slide 170
3.4
3.4.1
Multi-Threaded Programs
Synchronization
138
ESIAL Nancy
Section 3.
Synchronizations
No semaphores ! The synchronizations are based on the monitors of HOARE [Hoa78] A critical section is dened by a method in java which is declared as synchronized
Slide 171
Visiblement, il est possible de dclarer des sections de code comme synchronized mais e cest fortement dconseill par les concepteurs du langages. e e
139
IUT de Dijon
Section 3.
Monitors
A monitor is generally associated to a data and functions like a lock on this data. When a thread has the monitor of a data, the others threads are locked. They cant neither read nor modify
this data.
In java, an unique monitor is associated to each object which has at least a Synchronized method. If a Class method is declared as Synchronized then a monitor is associated to the instance of the class Class which represents the class of the static method considered in the JVM.
Slide 172
Vu la description de wait dans [JG96][589], il semble que les moniteurs de java ne sont pas tout a fait des moniteurs de HOARE, comme prsents dans les transparents qui suivent. ` e e
140
ESIAL Nancy
Section 3.
Monitors
2 (atomics) methods are associated to monitors (they can be used only in the body of synchronized methods) : wait To sleep in the monitor another thread can enter.. notify wakes up a sleeped thread in the monitor ... Objective : only one active thread in the monitor
Slide 173
Il faut noter quen fait limplantation des moniteurs ncessite deux autres primitives : e entrer, et sortir car la protection dune zone de code ncessite lexcution dun prologue e e et dun pilogue atomique. En java il semble que cest lappel et le retour dune mthode e e synchronized qui implante ce prologue et cet pilogue pour le code du corps de la mthode. e e Pour ceux qui aurait des trous de mmoire (comme nous) voil` un peu de culture sur les e a moniteurs : 3.4.2 CIS 307: Implementing Hoares Monitors
From : http://www.cis.temple.edu /~ngargio /cis307 /readings /monitor.html i Monitors are treated very nicely in Tanenbaum section 2.2.7 and section 2.2.9. Here I show the implementation of monitors using semaphores in the case that the Signal command can be applied anytime within the monitor, not just, as in Tanenbaum, when exiting monitor calls. That is, while Tanenbaum shows the Brinch Hansen implementation for monitors, here we examine the Hoare implementation. This latter implementation is less restrictive and less ecient. It is interesting as an example of complex concurrent program and it is useful if you want to use monitors in your programs. In fact, though monitors were intended for use as language constructs when programming in languages such as Concurrent Pascal, or Concurrent Euclid, monitors, as an idea, can be used very conveniently in our concurrent programs writteng in C and using Unix system services. Most of the code we present appears in Silberschatz et al: Operating Systems Concepts. We want to show how to implement a monitor using semaphores. Global variables mutex : Semaphore initialized to 1; It is used to control the number of processes allowed in the monitor. next : Semaphore initialized to 0; it is used as a waiting queue by processes that are in the monitor and wants to allow other processes to run in the monitor. Laurent Andrey (andrey@loria.fr) 141 IUT de Dijon
Section 3.
next count : integer variable initialized to 0; It counts the number of processes sleeping in the next semaphore. It is always equal to the number of processes executing monitor operations, minus 1. [This is a complex way of saying that only one process at one time can be executing within a monitor operation, this process is called the active process.] Implementation of Condition variables as instances of the abstract data type, or class, Condition 1 : type condition is record count : integer initialized to 0; queue : semaphore initialized to 0; end; procedure wait(x : in out condition) is begin x.count := x.count + 1; if next_count > 0 then V(x.queue) else V(mutex); P(x.queue); x.count := x.count - 1; end; procedure signal(x : in out condition) is begin if x.count > 0 then begin next_count := next_count + 1; V(x.queue); P(next); next_count := next_count - 1; end; end; Prologue Code executed when starting execution of a monitors operation: P(mutex); Epilogue Code executed when ending execution of a monitors operation: if next_count > 0 then V(next) else V(mutex); Notes A Monitor is not a process, not an active entity. It is just an abstract data type, or class, whose code can be executed by only one process at a time. Lets notice that next count is only modied within Condition operations. Thus if we do not use condition variables, the prologue code and epilogue code just make sure that only one process is executing within the monitor. When condition variables are used within monitor procedures, they are used only to allow processes that do not want to continue at this point, to get out of the way to allow other processes to run. These processes will sleep in the semaphore turn and next count keeps track of their number. The wait operation on conditions always puts to sleep the process that executes it. But before going to sleep, the current process either wakes up a process waiting in the next semaphore or, if next was empty, opens the mutex semaphore to allow some
1 Il
y a une erreur dans une des primitives, ` vous de voir o` elle est ... a u
142
ESIAL Nancy
Section 3.
other process to enter from the outside. Notice that the wait operation puts to sleep the active process and gives precedence to the processes that are sleeping withing the monitor over the processes that are trying to enter the monitor. The signal operation on condition variables is null if there is no process currently waiting on that condition. The code for the Wait and Signal operations of Conditions, and for the Epilogue code, need not be protected as critical regions because only one process is executing in the monitor at a time. If a process A executes the signal operation on a condition variable, and if a process B is the highest priority process waiting on this condition, then A moves to Ready state and B to Running state. That is, B has priority over A. We could have implemented the signal operation so that A has priority on B until A exits the monitor. Within the monitor (intermediate) scheduling takes place. We are with three (semaphore) queues: The mutex queue, where processes waiting to enter the monitor wait The next queue, where processes that are within the monitor and ready, wait to become the active process, and The condition queue(s), where a blocked process waits to be signaled. In the implementation we have shown processes that are coming out of the condition queue take precedence over the active process and over the next queue; in turn processes in the next queue take precedence over processes on the mutex queue. These decisions are based on some FIFO ideas, but alternative decisions could be made. ingargiola.cis.temple.edu
Monitors
type condition is record count : integer initialized to 0; queue : semaphore initialized to 0; end; procedure wait (x : in out condition) is begin x.count := x.count + 1; if next_count > 0 then V(x.queue) else V(mutex); P(x.queue); x.count := x.count - 1; end; procedure signal (x : in out condition) is begin if x.count > 0 then begin next_count := next_count + 1; V(x.queue); P(next); next_count := next_count - 1; end; end;
Slide 174
143
IUT de Dijon
Section 3.
Et o` elle est lerreur ici ?? cest pas V(x.queue) dans Wait mais V(next) bien sur ... u
Monitors
queue mutex
count
wait()
next next_count
signal()
exit
Slide 175
144
ESIAL Nancy
Section 3.
class Producer extends Thread { private CubbyHole cubbyhole; private int number; public Producer(CubbyHole c, int number) { cubbyhole = c; this.number = number;
}
public void run()
for (int i = 0; i < 10; i++) { cubbyhole.put(i); System.out.println("Producer try { sleep((int)(Math.random() 100)); } catch (InterruptedException e) { }}}}
" + i);
Slide 176
The Consumer
class Consumer extends Thread { private CubbyHole cubbyhole; private int number; public Consumer(CubbyHole c, int number) { cubbyhole = c; this.number = number;
}
public void run() { int value = 0; for (int i = 0; i < 10; i++) { value = cubbyhole.get(); System.out.println("Consumer
" + value);
}}}
Slide 177
145
IUT de Dijon
Section 3.
class CubbyHole { private int contents; private boolean available = false; public synchronized int get() { while (available == false) { try { wait();} catch (InterruptedException e) {}} available = false; notify(); return contents;} public synchronized void put(int value) { while (available == true) { try { wait();} catch (InterruptedException e) {}} contents = value;available = true; notify();
}}
Slide 178
Le programme principal
class ProdConsTest
{ {
public static void main(String[] args) CubbyHole c = new CubbyHole(); Producer p1 = new Producer(c, 1); Consumer c1 = new Consumer(c, 1);
p1.start(); c1.start();
} }
Slide 179
146
ESIAL Nancy
Section 3.
Monitors
Producer Consumer Producer Consumer Producer Consumer Producer Consumer Producer Consumer Producer Consumer Producer Consumer Producer Consumer Producer Consumer Producer Consumer #1 #1 #1 #1 #1 #1 #1 #1 #1 #1 #1 #1 #1 #1 #1 #1 #1 #1 #1 #1 put: got: put: got: put: got: put: got: put: got: put: got: put: got: put: got: put: got: put: got: 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
Slide 180
1 Issu
du tutorial de java
147
IUT de Dijon
Section 3.
Monitors
examples/Reentrant.java
// reentering monitors
I am, in a()");
}
public synchronized void b() { System.out.println("here
I am, in b()");
} }
The monitors of java are reentrant.. no deadlock problems with itself ...
Slide 181
Exception of Thread
Asynchronous:
Invocation of stop from another thread, Internal error JVM (ex : pb GC)
Slide 182
148
ESIAL Nancy
Section 3.
Quand une exception est prise en compte (remonte de la pile) il faut tre sr de relcher e e u a les verrous lies aux mthodes synchronized qui pendent dans la pile (pour le thread e e actif). 3.4.3 Deadlock, famines ...
Multi-Threads Programs
Neither the deadlocks Nor the famine It is the programmer responsibility to use programming models (producer/consumer etc...) to avoid these
problems.
Slide 183
149
IUT de Dijon
Section 3.
Contents
Introduction Language: classes, inheritance, polymorphism, Packages... Threads Advanced Window Toolkit (AWT) Applets Conclusion
Slide 184
150
ESIAL Nancy
Section 4.
The AWT is a package of classes. It allows the construction of sophisticated graphical interfaces. The initial objectives are:
Having independent graphical system of a particular plate-forme. Having an API which can be simply programmed (no new concepts!). No new look and feel ! the same buttons as Motifs under Unix, as Windows95 under NT, as Mac under
MacOS
Slide 185
151
IUT de Dijon
Section 4.
AWT Contents
Slide 186
Le dernier JDK propose un mod`le dvnements par dlgation mais comme tout ce e e e ee qui existe jusqu` maintenant utilise lancien mod`le par dvnements par hritage, nous a e e e e laborderons aussi (et puis en plus cest intressant alors ...). e Pour faire ces slides jai longuement parcouru, le java tutorial qui utilise malheureusement encore le mod`le dvnements par hritage, la java API (indispensable), jai t voir les e e e e ee sources (dans linstallation, il faut penser a dcompacter src.zip), javais la java source ` e book [Anu96] a cot de moi et les releases note du JDK-1.1 (en html). ` e
4.1
General Architecture
152
ESIAL Nancy
Section 4.
Architecture
A layered architecture :
The graphical classes in java : Component, container, label, list, button ... The connection interfaces to the host system: The peer-interfaces for example, Java button Motif
buttons.
Slide 187
Donc un choix de dpart tr`s particulier. En smalltalk, le syst`me graphique est construit e e e compltement en smalltalk. Quelles sont les motivations dun tel choix ? e respecter ` la lettre les dirent look&feel sur chaque plateforme ? a e Essayer de rutiliser au maximum lexsitant pour construire une interface graphique e rapidement ? Pourquoi nont-ils pas pris loption de tout reconstruire comme en smalltalk et de rimplanter les look&feel ? trop long ? e Javoue ne pas avoir de rponses ... la vrit est-elle ailleurs ? e e e
153
IUT de Dijon
Section 4.
Architecture
JAVA
C/Motif
Object
Component
ComponentPeer
Button
ButtonPeer
XmPushButton
java.awt:Indpendant de larchitecture
Java.awt.peer
Host System
Slide 188
Le programmeur java ne voit que les classes de java.awt. Son code est donc indpendant e dune architecture donne. Les peer ne sont en fait que des interfaces qui se comportent e donc comme une spcication des services minimum qui doivent exister dans la toolkit du e syst`me hte. e o Ces interfaces doivent bien tre implmente quelque part (mais je ne sais pas o` exe e e u actement) et sont dlivres par le fournisseur du JDK. e e
154
ESIAL Nancy
Section 4.
Architecture
Concretely, for each java button, there is a corresponding Motif button (under Unix) instantiated in the JVM. In the JVM, at the reception of an event, the callback of the Motif button generates the creation of a Java
event which is considered by the AWT.
Beware, there is no graphical primitive in the JVM ! The mechanism of native methods is used to implement
the peer-interfaces.
Slide 189
Rien nest tr`s clairement expliqu ` ce niveau. On ne trouve rien dans les docs de sun. e ea Toujours est-il que jai pu lire des choses non-ocielles sur ces aspects sur le web.
4.2
Graphical Components
155
IUT de Dijon
Section 4.
Object
Component
MenuComponent
Layout
Event
Peer
Container
Window
Panel
Frame
Dialog
Applet
FileDialog
Slide 190
Les classes graphiques sont bien entendu sous-classes de object. On voit dj` bien des ea choses sur cette arborescence de classes. Il y a des : des composants graphiques : avec une direnciation niveau Component/menuComponent. e des layout : des algorithmes de placements. des vnements. e e des peer (voir architecture).
156
ESIAL Nancy
Section 4.
AWT Organisation
Component : is an abstract object which has a position, a size, able to receive events and that can be drawed.
Primitive graphical objects: label, button ... Container: in some way, directories of graphical components.
MenuComponent : The menus are managed in a very special way. Layout : Algorithms for placing (not attached to container) Event : The delicate point of the AWT ... Peer : connexion classes with the graphical toolkit of the host system.
Slide 191
Au premier niveau de la hirarchie, on trouve les concepts de bases de lAWT: e Component : Un objet abstrait ayant une position, ue taille, pouvant tre dessin ` lcran e ea e et pouvant recevoir des vnements. Cest lquivalent des widgets en Motif. e e e On peut direncier les objet graphiques primitifs (bouton, label), des container qui e permettent de composer des objets primitifs ou dautres container. On peut faire lanalogie avec des chiers qui sont des lments de stockage primitifs et les repertoires ee qui peuvent contenir soit des chiers soit dautres rpertoires. Les containers sont e donc bien des rpertoires dobjets grahiques. e MenuComponent : Toute lartillerie pour faire des menus (menubar, menuitem, menu, Checkboxmenu). Cette direnciation est due ` lhtrognit des syst`mes htes o` e a ee e e e e o u les menus sont traits de mani`re tellement disparates quil ntait pas possible davoir e e e une seule hirarchie de composants (comme en Motif). e Layout : Dans une toolkit graphique, les placements des objets grahiques sont calculs et e non prciss par des coordonnes absolues. Les layout prcisent les contraintes de e e e e ` placement des objets graphiques contenu dans un container. A la dirence de Motif, e LAWT fait la distinction entre container et layout qui sont dnis sparment. e e e De ce fait, il est possible daecter dynamiquement un layout a un container a ` ` lexcution. e Event : Cette classe reprsente les vnements. Le mod`le dv`nement de lAWT est assez e e e e e e dirent de Motif et change ` chaque release du JDK (ouarg !). Nous reviendrons e a ultrieurement sur ces mod`les qui constitue le point le plus dlicat de lAWT. e e e Peer Les classes de connexions aux toolkits graphiques des syst`mes htes. Pour chaque e o classe de component ou menucomponent il existe, une classe componentpeer ou menucomponentpeer.
157
IUT de Dijon
Section 4.
Component
The components are instantiated in a tree of objects. The container constitute the nodes. The primitive objects are leafs. each node can instantiate a layout to organise the placing of its contained objects. Each component dispose of the following methods :
State enable(), disable(), hide(), show(), setBackground(), setFont() ... Information isEnabled(), isShowing(), getBackground(), getFont() ... Behaviour (later).
Slide 192
Il faut bien noter quun nud ou une feuille de larbre ne peut en aucun cas tre eece tivement un Component. Cest une classe abstraite ! Il ne faut pas confondre larbre des objets graphiques a lexcution et la hirarchie des classes dobjets de lawt. Cest comme ` e e en Motif (Xt) : classes de widgets et relations entre children a lexcution. ` e Attention : pour le jdk 1.1 on dispose de setEnabled(boolean), setVisible(boolean). Le nomage des mthodes a t homogn e. Voirhttp://www.javasoft.com/ products/JDK/ e ee e es 1.1/docs/guide/ awt/index.html pour plus de prcision. Il y a mme un script de cone e version.
158
ESIAL Nancy
Section 4.
Hierarchy of Components
examples/treeex.java
import java.awt.;
public class treeex
static public void main(String args[]) { Frame f = new Frame(); f.setLayout(new FlowLayout()); Button b; f.add(b = new Button("Search")); List l; f.add(l = new List()); l.add("Alphabetical"); l.add("Chronological"); f.pack(); f.show();
// 1.1 : setVisible(true);
} }
Slide 193
Bon ben, un Fraaammme et une bouton et une Liste dessus. Juste remarquer que ca reste assez simple voir presque agrable ` lire (surtout quand on fait du motif de base). e a
159
IUT de Dijon
Section 4.
Hierarchy of Components
Slide 194
Hierarchy of Components
Slide 195
160
ESIAL Nancy
Section 4.
4.2.1
Basic Components
Button, canvas, check-box, choice, label, list, scrollbar, text-component Basic : They cant contain other graphical components In contrast to Motif, the Components have not their own resources . It is possible to declare properties. These properties are managed by the user.
Slide 196
Les properties (java.util) sont en fait bass sur des dictionnaires associant une valeur a e ` une clef. Ces dictionnaires peuvent tre sauvegards dans un chier. Cest au programmeur e e de grer ces dictionnaires. Les properties peuvent tre utilises pour grer des attributs e e e e spciques ` un programme java. Elles peuvent tre utilises pour grer des ressources e a e e e comme en Motif mais sans les facilits de gestion des ressources de Motif. e Il semble que le jdk1.1 fournissent un syst`me de ressources, utilisant les properties. Ya e meme des utilitaires a la resedit mac sous windows.
161
IUT de Dijon
Section 4.
Primitives Components
Slide 197
Pour ceux qui veulent jeter un il sur le source, tout cela reste tr`s simple : e
examples/Demo.java
import java.awt.; public class Demo { static public void main(String args[]) { Frame f = new Frame(); f.setLayout(new FlowLayout(FlowLayout.LEFT)); Button b; f.add(b = new Button("Button")); Checkbox cbox; f.add(cbox= new Checkbox("Checkbox")); Scrollbar sb; f.add(sb= new Scrollbar()); Label lab; f.add(lab= new Label("Label")); TextField tf; f.add(tf=new TextField("TextField",20)); TextArea ta; f.add(ta= new TextArea("TextArea",5,20)); Choice co; f.add(co=new Choice()); co.addItem("Choice"); List l; f.add(l = new List()); l.add("item1"); l.add("item2"); f.pack(); f.setSize(300,300); f.show();
162
ESIAL Nancy
Section 4.
Canvas
The canvas is a primitive graphical component which can be subclassed. It is used to make 2D graphics. In brief : a container for lines, circles and so on ... We come back later on the 2D graphical classes.
Slide 198
Le jkd1.1 fournit des possibilits de tracs 3D. e e 4.2.2 Compound the Components
163
IUT de Dijon
Section 4.
Slide 199
Bien sur, un Container peut contenir dautres Container. Cette dissociation Container/Layout est tout de mme bien agrable par rapport a Motif. e e `
164
ESIAL Nancy
Section 4.
Container
Applet (java.applet)
Dialog
FileDialog
Frame
Slide 200
Container
2 categories :
Those which dont open new windows: Panel, Applet Those which open new windows : Dialog, FileDialog, Frame.
Slide 201
165
IUT de Dijon
Section 4.
Container(2)
Each graphical application instantiates at least one frame. A dialog window is designed to be a temporary window. A dialog container has always a frame container as a parent container. A dialog window is not visible at its creation, it must be made visible explicitly by calling the method show().
Slide 202
Pourquoi cette direnciation frame versus dialog ? On a dj` vu un frame. On e ea peut jeter un oeil sur la faon de faire un dialogue. c
examples/SimpleDialogDemo.java
import java.awt.; public class SimpleDialogDemo { static public void main(String args[]) { Frame f = new Frame(); Dialog d = new FileDialog(f,"Yo!"); f.resize(300,300); f.show(); d.show(); } }
166
ESIAL Nancy
Section 4.
Layout
For each container, it is possible to choose a layout to organise the placement of the contained graphical objects:
BorderLayout LayoutManager CardLayout FlowLayout GridBagConstraints Object GridBagLayout GridLayout Cloneable (java.lang) A A B : "A est une interface implante par B B : A est une super classe de B
Slide 203
Pour les applet, le frame p`re est la fentre du browser. Il semble que par dfaut un e e e dialogue ait un comportement modal. Passons maintenant en revue les dirents layouts (vu quil ny en a pas 36 ...). e
167
IUT de Dijon
Section 4.
Border
Slide 204
A BorderLayout divides a container into 5 zones as shown in the previous slide. It is possible to instantiate a component (which can be a container) in each zone. Hereafter the code of the example:
168
ESIAL Nancy
Section 4.
examples/Border.java
import java.awt.;
public class Border
static public void main(String args[]) { Frame f = new Frame(); f.setLayout(new BorderLayout()); f.add("North", new Button("North")); f.add("South", new Button("South")); f.add("East", new Button("East")); f.add("West", new Button("West")); f.add("Center", new Button("Center")); f.pack(); f.setSize(300,300); f.show();
} }
Slide 205
Flow
Slide 206
169
IUT de Dijon
Section 4.
Un ow layout remplit place les composants dun conteneur les uns a cot des autres ` e en partant de la gauche. Si la place vient a manquer, il passe ` la ligne. Le nombre de ` a lignes dpends du nombre dlments, leur taille, la taille du container pour lequel le layout e ee travaille. Voila le code :
examples/Flow.java
import java.awt.;
public class Flow { static public void main(String args[]) { Frame f = new Frame(); f.setLayout(new FlowLayout()); f.add(new Button("Button f.add(new Button("2")); f.add(new Button("Button f.add(new Button("Button
f.add(new Button("Long-Named
} }
Slide 207
170
ESIAL Nancy
Section 4.
Grid
Slide 208
Un GridLayout place les composants dun conteneur selon un matrice de cellules de tailles gales. Le nombre de lignes et de colonnes est x lors de lappel au constructeur e e de cet algorithme de placement. Voulez-vous le code ? ` A la cration un nombre de lignes, resp. colonnes a zro indique que le GridLayout doit e ` e dterminer ce nombre de lignes, resp. colonnes en fonction du nombre dlments grs et e ee ee du nombre de colonnes, resp. lignes demand. e Le source de lexemple suit :
171
IUT de Dijon
Section 4.
examples/Grid.java
f.add(new Button("Long-Named
} }
Slide 209
GridBag
Slide 210
172
ESIAL Nancy
Section 4.
Le GridBagLayout est lalgorithme de placement le plus sophistiqu de lAWT. Il permet e de placer les composants sur une matrice selon des contraintes qui leurs sont associes. Il e est proche des Forms Motif. Bien utilis, il fournit un moyen ecace pour composer des e fentres ayant un comportement lgant devant les changements de tailles (delle mme, de e ee e ses lments). ee Les constraintes de placement relatives ` un composant (voir plusieurs) sont spcies a e e dans un objet de classe GridBagConstraints. Un objet GridBagConstraints doit donc tre instanci et ses variables dinstances dtermines avant dtre associ ` un composant e e e e e ea dun conteneur contrl par un GridBagLayout. Cette association se fait via la mthode oe e setConstraints(Component, GridBagConstraints) de la classe GridBagLayout. Il faut noter quun GridBagLayout conserve une copie de ces contraintes. Lutilisateur peut tr`s e rutiliser et modier un GridBagConstraints pour une autre association. Les variables e dinstance dune contrainte permettent de spcier : e gridwidth, gridheight Le nombre de cellules horizontales et verticales que le composant utilise. GridBagConstraint.REMAINDER est une constante permettant de spcier e que le composant est le dernier de sa ligne ou de sa colonne. Cest une mani`re e de dterminer le nombre de ligne ou de colonnes. GridBagConstraints.RELATIVE e spcie que le composant prc`de le dernier de sa ligne ou de sa colonne. e e e ll Spcie comment le composant remplit sa cellule. (HORIZONTAL, VERTIVAL, BOTH) e weightx weighty distribue lespace disponible du container entre les cellules (important pour le resize). 0 tout reste coll au centre du conteneur. 1 les composants prennent e tout lespace disponible. Il y en a encore qqune mais bon, a vous daller voir lAPI ... ` Par dfaut, les composants saligne de la gauche vers la droite sur une ligne. la contrainte e REMAINDER dtermine le retour ` la ligne et donc le nombre de colonne. e a
examples/GridBag.java
import java.awt.;
public class GridBag extends Frame { protected void makebutton(String name, GridBagConstraints c) { Button button = new Button(name); ((GridBagLayout)this.getLayout()).setConstraints(button, c); this.add(button);
}
public GridBag()
setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.ll = GridBagConstraints.BOTH; c.weightx = 1.0; makebutton("Button1", c); makebutton("Button2", c); makebutton("Button3", c); c.gridwidth = GridBagConstraints.REMAINDER; makebutton("Button4", c); c.weightx = 0.0; makebutton("Button5", c); c.gridwidth = 1;
//end of row //reset to the default //another row //reset to the default
//
makebutton("Button6", c);
Slide 211
173
IUT de Dijon
Section 4.
c.gridwidth = GridBagConstraints.REMAINDER; makebutton("Button7", c); c.gridwidth = 1; c.gridheight = 2; c.weighty = 1.0; makebutton("Button8", c); c.weighty = 0.0; c.gridwidth = GridBagConstraints.REMAINDER; c.gridheight = 1; makebutton("Button9", c); makebutton("Button10", c);
}
static public void main(String args[]) { GridBag f = new GridBag(); f.pack(); f.show();
} }
Slide 212
Card
Slide 213
174
ESIAL Nancy
Section 4.
Le Card Layout est assez particulier. Il permet davoir plusieurs feuilles de composants (des panels dans notre cas) et de les intervertir dans la fentre principale. Il vaudrait mieux e parler de remplacement que de placement mais bon ... Cest largement utilis pour faire des crans de choix doption avec des onglets. Allez e e pouf du code pour les sceptiques :
examples/Card.java
import java.awt.;
public class Card extends Frame { static public void main(String args[]) { Card f = new Card(); f.setLayout(new CardLayout()); Panel p1 =new Panel(); p1.add(new Button("panel Panel p2 =new Panel(); p2.add(new TextField("panel f.add("panel1",p1); f.add("panel2",p2); f.setSize(100,100); f.pack(); f.show();
p1")); p2"));
}
public boolean keyDown(Event evt, int key) { ((CardLayout)this.getLayout()).show(this,"panel"+(char)key); return true;
} }
Slide 214
Dans cet exemple lappui de la touche 1 met en place dans la fentre principale le e panel p1 (donc physiquement on voit un bouton). Appuyer sur la touche 2, ache le champ de saisie. La mthode show rendant visible un lment dun conteneur gr par un CardLayout e ee ee est propre a ce layout, do` le cast dans la mthode keyDown. ` u e 4.2.3 Managing Menus
175
IUT de Dijon
Section 4.
Menu Components
MenuContainer
Frame
Object
MenuComponent
MenuBar
MenuItem
Menu
PopupMenu(1.1)
CheckBoxMenuItem
Slide 215
Menu Components
The graphical classes attached to menus are completely separated of other components ( because of the
toolkits of the AWT).
A menu can exist only in the menu-bar. A menu-bar can exist only in a frame. A menu can have sub menus.
Slide 216
176
ESIAL Nancy
Section 4.
Dans la gure les `ches en pointill sont des liens dimplmentation dinterface, celles e e e en trait plein des liens dhritage. e Quand mme, il faut remarquer que le design de lAWT est fonction des capacits des e e toolkits des syst`mes htes. On peut (encore) noter lapproche tr`s pragmatique des cone o e cepteurs. On retrouve une dmarche de factorisation des lments que lon peut trouver sur e ee toutes les architectures. Ceci explique un peu cela : dans la version 1.0, vraiment un noyau dlements graphiques e avec un mod`le dvnements tr`s primitif, a chaque release, intgration de nouveaux e e e e ` e lments ... ee Bon sinon, tr`ve de plaisanteries, pourquoi Frame implmente linterface MenuCone e tainer ?? Et les Choices alors ... PM: RAF.
Menus
examples/SimpleMenuDemo.java
..."));
..."));
Slide 217
Bon, pour ceux qui se sont essays ` dnir des menus en Motif de base, cest quand e a e mme un vrai bonheur. Ca devient presque agrable de mettre en place une barre de menus. e e Menn cette simplicit de mise en place peut tre rapproche des choix assez restrictifs e e e qui ont t fait au dpart. ee e Et comment je fais un popup menu avec ca ? Est-ce paramtrable via des ressources ? e Comment je mets des bitmaps dans ces menus ?
177
IUT de Dijon
Section 4.
A Menu
Slide 218
Menus
Until the version 1.1 only the pull-down menus are supported ... Since the jdk 1.1
Keyboard Shortcuts + popup-menu. The popup-menus are new class ...
Slide 219
178
ESIAL Nancy
Section 4.
Il peut y avoir quelques contreverses sur la notion de pop up menu... Un popup est un menu qui apparait l` o` est le pointeur de la souris quand un bouton de celle-ci est a u press. Il ne faut pas les confondre avec des pull-down menus disperss de ci, de l` dans une e e a fentre : les Choices en java qui sont des Component utilisable partout (dans un Container e gr par un Layout). ee Oui, mais bon, nous (PM+LA) navons pas russi ` faire fonctionner les raccourcis e a claviers. Par contre, pour les popup-menus voila un exemple QUI MARCHE avec le JDK1.1 (pas comme dans la doc) :
examples/PopupDemo.java
import java.awt.; import java.awt.Menu; import java.awt.event.; class Mypopup extends MouseAdapter { PopupDemo f; PopupMenu m1; public Mypopup(PopupDemo PopupDemop) { f=PopupDemop; m1 = new PopupMenu("File"); m1.add(new MenuItem("Open ...")); m1.addSeparator(); m1.add(new CheckboxMenuItem("Yo")); m1.add(new MenuItem("Quit")); f.add(m1); } public void mousePressed(MouseEvent e) { m1.show(f,e.getX(),e.getY()); } } public class PopupDemo extends Frame { public PopupDemo() { Mypopup p=new Mypopup(this); this.addMouseListener(p); setSize(200,200); show(); } static public void main(String args[]) { PopupDemo f = new PopupDemo(); } }
4.3
Events Management
179
IUT de Dijon
Section 4.
Events Management
The description of 1.0 AWT model be able to read the existing programs (for instant the tutorial is built
with this model)
Slide 220
Nous avons dcider de prsenter les deux mod`les : le premier pour pouvoir comprendre e e e ce qui sest fait, le deuxi`me pour utiliser la version actuelle du jdk. e 4.3.1 Events Management in 1.0
180
ESIAL Nancy
Section 4.
The events are detected by the host system and then are translated into java events (independently of the
architecture).
There is thus an unique class event instantiated at the arriving of the events from the host system. A eld of the object event (id) is used to identify the type of the event : MOUSE DRAG, WINDOW MOVED, KEY PRESS ... Other elds store annexes informations, for example, (x,y) for a mouse event, key (code touch) for the event KEY PRESS... A eld is reserved to store an arbitrary object but lled by the event transmitter.
Slide 221
Sur ce dernier point, un bouton va mettre dans cet objet arbitraire le texte quil contient, de mme pour un champ de saisie. Un bouton dtat va quand a lui remplir cet objet avec e e ` un boolen indiquant son tat courant ... e e
181
IUT de Dijon
Section 4.
(Mouse_click,x=20,y30)
Slide 222
Nous sommes bien daccord. Si le component en question est reprsent par un e e XmPushButton sur la toolkit Motif hte, alors le callback associ au XmPushButton va apo e peler (depuis C), la mthode de cration dun v`nement java et mettre ` jour lobjet ainsi e e e e a cr avec les renseignements associs (x,y). Tout ceci est la tche des perr objects. ee e a
182
ESIAL Nancy
Section 4.
After the event creation, it is necessary to nd to which java component the event belongs Example: the event (MOUSE DOWN, x=3,y=4) must be taken in consideration by the right bottom button. Cascading calls of deliverEvent() from the root of the graphical components tree.
Slide 223
deliverEvent() est une mthode dnie dans Component et dans Container (celle de e e Container override celle de Component). La dirence entre ces deux mthodes est que e e celle de de Container eectue les translations ncessaires sur (x,y) avant de transmettre e aux sous-composant.
183
IUT de Dijon
Section 4.
Component
Component
Component
Container deliverEvent()
Component
Component
Slide 224
Events Management
When the responsible component is found, it is necessary to know what to do with it? deliverEvent() calls Component.postEvent() when the responsible is found. postEvent callshandleEvent on the current component to know if this component is interested
itself by the received event. If the component is unable to manage this event then handleEvent() return false and
Slide 225
184
ESIAL Nancy
Section 4.
Le champ event.target est mis ` jour avec une rfrence sur lobjet qui prend en charge a ee lvnement. Attention! MenuComponent dnie sa propre mthode postEvent(). e e e e
Events Management
Container
Component
Component
Container
handleEvent()=true
Component
Component
Component
Component
deliverEvent()
Slide 226
185
IUT de Dijon
Section 4.
HandleEvent()
handleEvent(Event evt)
evt.id == Event.MOUSE_EXIT mouseExit(evt,evt.x,evt.y) <Read API for the entire list> ... evt.id==Event.KEY_PRESS keyDown(evt,evt.key)
evt.id=Event.ACTION_EVENT action(evt,evt.arg)
Slide 227
HandleEvent()
The logic of handleEvent() is very simple : makes the corresponding between a type of an event and
the call of a method and it envois the result of the called method.
By default, all the methods called by handleEvent() are dened in Component and contain only return(false).
Slide 228
186
ESIAL Nancy
Section 4.
Dans les bouquins, ils disent que handleEvent() dispatche lv`nement au sein de lobjet. e e Et je le prouve voila un fragment de la classe Component (JDK-1.0.2) : public boolean mouseEnter(Event evt, int x, int y) { return false; } public boolean handleEvent(Event evt) { switch (evt.id) { case Event.MOUSE ENTER: return mouseEnter(evt, evt.x, evt.y); case Event.MOUSE EXIT: return mouseExit(evt, evt.x, evt.y); case Event.MOUSE MOVE: return mouseMove(evt, evt.x, evt.y); case Event.MOUSE DOWN: return mouseDown(evt, evt.x, evt.y); case Event.MOUSE DRAG: return mouseDrag(evt, evt.x, evt.y); case Event.MOUSE UP: return mouseUp(evt, evt.x, evt.y); case Event.KEY PRESS: case Event.KEY ACTION: return keyDown(evt, evt.key); case Event.KEY RELEASE: case Event.KEY ACTION RELEASE: return keyUp(evt, evt.key); case Event.ACTION EVENT: return action(evt, evt.arg); case Event.GOT FOCUS: return gotFocus(evt, evt.arg); case Event.LOST FOCUS: return lostFocus(evt, evt.arg); } return false; }
187
IUT de Dijon
Section 4.
Action Events
The events attached to the activation of a graphical component of high level (button ,check-box) generate a
particulate type of events : The Action Event.
Slide 229
Action Methods
Component Checkbox Choice List TextField Class of arg ! Boolean String String String Contain of (or)arg ! Stateof the checkbox String choosed in the Choice String choosed in the list String type in the texteld
Slide 230
188
ESIAL Nancy
Section 4.
But how we do ??
The rst method: subclass the graphical components and override a or several of the following methods :
mouseEnter(Event evt,int x,int y); mouseExit(Event evt,int x,int y); mouseMove(Event evt,int x,int y); mouseDown(Event evt,int x,int y); mouseDrag(Event evt,int x,int y); mouseUp(Event evt,int x,int y); keyDown(Event evt,int key); keyUp(Event evt,int evt.key); action(Event evt,Object arg); gotFocus(Event evt, Object arg); lostFocus(Event evt,Object arg);
Slide 231
189
IUT de Dijon
Section 4.
examples/EvDemo.java
super(size);
import java.awt.;
class MyButton extends Button { String Yo; public MyButton(String stringp) { super(stringp); Yo=stringp;
}
public boolean action(Event e,Object argp) { System.out.println(argp); return(true);
// to handleEvent();
} }
public class EvDemo { static public void main(String args[]) { Frame f = new Frame(); f.setLayout(new FlowLayout(FlowLayout.LEFT)); f.add(new MyButton("Yo!")); f.add(new MyField(20)); f.resize(200,200); f.show();
}
public boolean action(Event e, Object argp) { System.out.println(Yo); return(true);
// to handleEvent() !!
}
public boolean gotFocus(Event e,Object argp) { System.out.println("Mouse return(true);
trapped !");
} }
class MyField extends TextField { public MyField(int size) {
} }
Slide 232
The events which are not consumed by the basic components are passed into the containers
they are intercepted to the level of the container Do the treatment for all the sub-components..
Slide 233
190
ESIAL Nancy
Section 4.
Central Treatment
examples/EvDemo2.java
import java.awt.;
public boolean action(Event e,Object argp) { if (e.target instanceof Button) { System.out.println("Yo!"); return true;
class MyFrame extends Frame { public MyFrame() { super(); setLayout(new FlowLayout(FlowLayout.LEFT)); add(new Button("Yo!")); add(new TextField(20)); resize(200,200); show();
}
if (e.target instanceof TextField) { System.out.println(argp); return true;
}
System.out.println("ohoh return true;
?");
} }
public class EvDemo2 { static public void main(String args[]) { MyFrame f = new MyFrame();
}
public boolean gotFocus(Event e,Object argp) { if (e.target instanceof Button) { System.out.println("Mouse
Trapped");
}
return(true);
} }
Slide 234
Problems
Sub-Classing generated so many classes for a complex graphical interface. No separation between application code et UI code Events management is very error prone ( hendleEvent return true or false ..) Not very efcient PostEvent/HandleEvent Data passed with events are very poor: String
Slide 235
191
IUT de Dijon
Section 4.
4.3.2
Objectives :
Simpler and easier to understand (thank for us !) A clear separation between application and UI code (yes more..) More robust events management (compile-time checking) (*parental agreement*) Support for interface builders (run time discovery) (*censured*)
Slide 236
192
ESIAL Nancy
Section 4.
Model by Delegation
ActionEvent java.awt.event AdjustementEvent java.awt.event AWTEvent java.awt ItemEvent java.awt.event ComponentEvent java.awt.event vnements Smantiques
FocusEvent
InputEvent
KeyEvent
MouseEvent
Slide 237
Delegation Model
ComponentEvent : resized, moved ... ContainerEvent : added, removed FocusEvent : focus gained, focus lost KeyEvent : key-pressed, key-released MouseEvent : mouse-down, mouse-move ... WindowEvent : activated, closed ...
Slide 238
193
IUT de Dijon
Section 4.
Model by Delegation
ActionEvent : do a command AdjustementEvent : a value has been adjusted ItemEvent : the state of an item is modied TextEvent : the state of the text catch zone (TextComponent, TextArea) is modied..
Slide 239
Les ContainerEvent re`tent lentre ou la sortie dun lment graphique dans un e e ee Container donn. e Pour les ItemEvent la notion ditem est tr`s large : elle correspond ` tout lment e a ee slectionable au sein dun lment graphique groupant des items. Citons les groupes e ee de CheckBox, les listes... En fait ActionEvent correspond donc a un vnement de haut niveau demande daction. ` e e Plusieurs composant graphiques peuvent en gnrer : les Button, mais aussi les listes e e (return, double click), le choix dun item dans un pull-down menu, ou un pop-up (Une action dans un Choice est vue comme une slection dun item) ... e Les direntes possibilits seront dtailles sur le transparent 244, composant graphique e e e e par composant graphique. LA : Bon il y aussi le InputEvent. Un peu sp celui-la ... e
194
ESIAL Nancy
Section 4.
The user can eventually adds his owns events type in this model. an events queue managed by a thread ensures the distribution of the events among the objects
(asynchronous delivery of events...).
Slide 240
Pas de panique on naura pas a grer la le dvnements. Il sut juste de savoir quelle ` e e e existe. Cette le dvnements est donc bien un objet prdni et gr par lAWT. e e e e ee
195
IUT de Dijon
Section 4.
An event is propagated from a SOURCE (Event Source) into one or many destinations (Event Listeners). A destination (listener) is an object which implements one or many interfaces of the hierarchy of the interface EventListener. A priori, this is an object of the application. A source is an object capable to do postEvent(). Thus normally, this is an object of the graphical
interface.
The graphical objects design explicitely the objects to which the events are propagated which are generated via new methods of the class Component and sub-classes...
Slide 241
Listeners
ComponentListener ContainerListener FocusListener EventListener java.util(!) MouseListener MouseMotionListener
WindowListener KeyListener
Slide 242
196
ESIAL Nancy
Section 4.
Tout cela nest quinterfaces ! Les `ches du schma prcdent vont de la super interface e e e e vers une sous interface. Les interfaces relatives ` des vnements de bas niveau sont en a e e gras. Il faut remarquer que EventListener lui mme ne fait pas partie de java.awt mais e de java.util !! Toutes ces interfaces relatives ` des vnements AWT sont dans le package a e e : java.awt.event. Donc en fait les lments de lapplication qui sont a lcoute dvnements se produisant ee ` e e e dans linterface graphique doivent implmenter une ou plusieurs de ces interfaces. e
Listeners
A Listener does not consume events (read-only for the listener).. A class can decide to implement one or many of these listeners. it is necessary to implement all the
methods dened in these interfaces. Example : public interface KeyListener extends EventListener { public void keyTyped(KeyEvent e); public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e);
Slide 243
Attention : les vnements passs en param`tres des mthodes dune interface listener e e e e e sont des sous classes de java.awt.AWTEvent (elle mme sous classe de java.util.EventObject) e et non pas de java.awt.Event comme ltaient les param`tres des mthodes utilises dans e e e e le premier mod`le dvnement (deliverEvent, posEvent...). e e e Dans le mod`le par dlgation on dispose de la mthode getSource() de java.awt.AWTEvent e ee e pour conna llment graphique qui a gnr lvnement. Dans lancien on utilisait le tre e e e ee e e champ target de java.awt.Event. Le nom tait dailleurs plutt ambigu, mais logique e o puisse que lobjet graphique en question tait bien la cible atteinte lors de la phase de e deliverEvent(). Vrier toutes ces histoires de classes dvnements et de target avec Pascal. e e e
197
IUT de Dijon
Section 4.
Sources
Component
Slide 244
Add destinations for semantic events : Button Choice Checkbox CheckboxMenuItem List addActionListener(ActionListener l) addItemListener(ItemListener l) addItemListener(ItemListener l) addItemListener(ItemListener l) addActionListener(ActionListener tener(ItemListener l) MenuItem Scrollbar TextComponent TextField addActionListener(ActionListener l) addAdjustmentListener(AdjustmentListener l) addTextListener(TextListener l) addActionListener(ActionListener l) l) addItemLis-
Slide 245
198
ESIAL Nancy
Section 4.
Dans les deux tableaux prcdents, les composants graphiques de la premi`re colonne e e e disposent des mthodes de la deuxi`me colonne pour indiquer quils vont propager e e leurs vnements vers llment de lapplication pass en param`tre. e e ee e e Bien entendu une sous classe dune classe de la colonne de gauche dispose des mme e ajouts de listener que sa super classe. Par exemple TextArea, et TextField disposent chacune de addTextListener. Les lments succeptibles de gnrer des ItemEvent semblent devoir implmenter ee e e e linterface ItemSelectable. Par exemple Choice, CheckboxMenuItem, List MenuItem implmentent cette interface. e
Model by Delegation
examples/DelDemo.java
static public void main(String args[]) { Frame f= new Frame(); f.setLayout(new FlowLayout(FlowLayout.LEFT)); SaySomething ss=new SaySomething(); Button yo=new Button("Yo!"); yo.addActionListener(ss); TextField tf= new TextField(20); tf.addActionListener(ss); tf.addFocusListener(ss); f.add(yo); f.add(tf); f.resize(200,200); f.show();
Button !");
}
public void focusGained(FocusEvent e) { System.out.println("Hu
?");
}
public void focusLost(FocusEvent e) { System.out.println("ciao
!");
} }
class DelDemo {
} }
Slide 246
Sur cet exemple, on voit bien la sparation entre UI et application. La classe SaySomee thing reprsente lapplication alors que la classe DelDemo reprsente la partie UI. e e Le bouton et le champ de saisie dclare lobjet ss comme destination des vnements e e e quils gn`rent. Ceci est cohrent (compile-check) dans la mesure o` SaySomething implmente e e e u e bien les interfaces ActionListener, FocusListener.
199
IUT de Dijon
Section 4.
A class implements an interface listener must a priori implement all the methods dened in the interface
a little painful l sometime ...
The classes adapter proposes an implantation by default of all the dened methods of the low level listeners. The user denes thus its application class as a sub-class of the class adapter and surcharges only the
method which is interested for him.
Slide 247
Attention les classes adapters nexistent que pour les vnements de bas niveau (voir le e e transparent 238).
200
ESIAL Nancy
Section 4.
examples/adapter.java
}
public class adapter { static public void main(String args[]) { Frame f= new Frame(); f.setLayout(new FlowLayout(FlowLayout.LEFT)); JugeDeTouche jdt=new JugeDeTouche(); f.addKeyListener(jdt); f.resize(200,200); f.show();
} }
Slide 248
Slide 249
201
IUT de Dijon
Section 4.
New Components
examples/PeventDemo.java
super.processFocusEvent(e);
} }
public class PeventDemo { static public void main(String args[]) { Frame f= new Frame(); f.setLayout(new FlowLayout(FlowLayout.LEFT)); SpeechButton yo=new SpeechButton("Yo!"); f.add(yo); f.resize(200,200); f.show();
}
protected void processFocusEvent(FocusEvent e) { switch (e.getId()) { case FocusEvent.FOCUS GAINED: System.out.println(speech); break; case FocusEvent.FOCUS LOST: System.out.println("ciao");
} }
Slide 250
Separation between Application/UI No use to subclass components Only listened event are propagated (no more postEvent/HandleEvent cascading calls) ... (Filtering)
Slide 251
202
ESIAL Nancy
Section 4.
4.4 2D Graphics
LA : Pascal tu pourrais donner un exemple justiant le dernier point. PM: Oui, je pourrai, tu as raison LA... ;-D
4.4
2D Graphics
2D Graphics
In brief: A graphical component is an abstract object with a position, a size, able to receive events and THAT
CAN BE DRAWED !
Any component have a paint() method and an update() method There is a screen updater thread for each JVM. This thread travels across components tree, detects what
components have to be repainted and call the paint() method of the corresponding component.
Slide 252
203
IUT de Dijon
4.4 2D Graphics
Section 4.
2D Graphics
Extends a Graphical Component (For example Canvas which is dedicated to this job) Overrides the paint(Graphics g) method Every graphical component is associated with an object of class Graphics. The graphics class have
methods for drawing images, texts, rectangle, lines ...
Slide 253
2D Graphics
examples/SimpleGraphicDemo.java
import java.awt.;
class MyCanvas extends Canvas public void paint(Graphics g) { Dimension d = size(); g.drawLine(0, 10, d.width, d.height); g.drawString("drawLine()", 0, 10);
} }
public class SimpleGraphicDemo { static public void main(String args[]) { Frame f= new Frame(); f.add(new MyCanvas()); f.resize(200,200); f.show();
} }
Slide 254
204
ESIAL Nancy
Section 4.
4.4 2D Graphics
2D Graphics
Slide 255
Ceci est Juste une petite dmo. Il faut noter que dans lexemple nous avons surcharg e e Canvas mais ceci aurait pu parfaitement marcher avec juste un Frame ou un Panel. Tous les component ont une mthode paint() avec une Graphics associ ! e e Avez -vous bien compris ? Si oui rpondez ` la question : Que se passe-til lorsquon e a redimensionne la fentre ??. Justiez votre rponse ;->. e e Attention : de subtiles intractions avec les Layout (entre autre le GridBagLayout) e font que parfois la mthode paint() dun Container nest pas appele lors dun e e rafraichissement de lensemble des composants graphiques. Un exemple suit.
examples/BugPaint.java
/ Exemple montrant les interferences entre layout, container, et paint ! appeller lappli avec un parametre pour avoir le cas bugge. Ce nest pour etre pas un bug, mais simplement que cest ainsi et pas autrement... / import java.awt.; class BugPaint extends Frame { static public void main(String[] args){ // calling the appli with any parameter is entering buggy case BugPaint f=new BugPaint(args.length=0); f.setSize(100, 200); f.setVisible(true); } BugPaint(boolean pShowBug){ setLayout(new FlowLayout()); add(new Button("Pouet")); BPanel p1= new BPanel();
205
IUT de Dijon
4.4 2D Graphics
Section 4.
} } class BPanel extends Panel { BPanel() {} public void paint(Graphics g){ Color lColor = g.getColor(); Dimension d=size(); g.setColor(Color.black); // g.drawRect(0,0, d.width-1, d.height-1); g.draw3DRect(0,0, d.width-1, d.height-1,false); g.setColor(lColor); System.out.println("painting "+this); } }
add(p1); BPanel p2 = (pShowBug) ? p1 :new BPanel(); p2.setLayout(new GridBagLayout()); if (p2=p1){ p1.add(p2); } GridBagConstraints c=new GridBagConstraints(); c.gridwidth=GridBagConstraints.REMAINDER; c.ll=GridBagConstraints.HORIZONTAL; c.ipadx=10; for (int i=0; i<3; i++){ Button b = new Button("Bouton "+i); p2.add(b); ((GridBagLayout)p2.getLayout()).setConstraints(b, c); }
// Bordered Panel
LA : ya pas de pen size a la quickdraw ? Il faudrait aussi reprendre les expli de graphics : Coordinates are innitely thin and lie between the pixels of the output device. Operations which draw the outline of a gure operate by traversing along the innitely thin path with a pixel-sized pen that hangs down and to the right of the anchor point on the path. Operations which ll a gure operate by lling the interior of the innitely thin path. Operations which render horizontal text render the ascending portion of the characters entirely above the baseline coordinate. Ceci explique dailleurs les - 1 dans le paint de lexemple prcdent. e e
206
ESIAL Nancy
Section 4.
4.4 2D Graphics
Fonts
Of course, we can change fonts within a graphics... You have to instanciate a Font object and associate it to your graphics object.
Slide 256
Fonts
examples/SimpleFontDemo.java
import java.awt.;
class MyCanvas extends Canvas Font myfont; public MyCanvas() { myfont=new Font("TimesRoman",Font.PLAIN,24); } public void paint(Graphics g) { Dimension d = size(); g.setFont(myfont); g.drawString("Jacob
de la Font", 0, d.height);
} }
public class SimpleFontDemo { static public void main(String args[]) { Frame f= new Frame(); f.add(new MyCanvas()); f.resize(200,200); f.show();
} }
Slide 257
207
IUT de Dijon
4.4 2D Graphics
Section 4.
Colours
Similar to fonts : Create a Colour object and set the Graphics object with the Colour object public Color(int r,int g,int b) The fundamentals colours are dened as constants of the class Color ex: Color.yellow.
Slide 258
Rappel : les constantes sont des variables final static dune classe (ou dune interface). Dans le cas dune rfrence dobjet cela assure que cette rfrence donnera toujours ee ee lacc`s au mme objet. Mais en aucun cas cela assure que lobjet en question est constant : e e il sut de changer son tat via la rfrence final ou une autre (appel de mthode, acc`s ` e ee e e a une variable dinstance). Pour les Color il ny a pas de probl`me : les mthodes ne peuvent e e pas changer ltat dune instance (sauf les constructeurs videmment). e e
208
ESIAL Nancy
Section 4.
4.4 2D Graphics
Colours
examples/SimpleColorDemo.java
import java.awt.;
class MyCanvas extends Canvas Color mycolor; public MyCanvas() { mycolor=new Color(12,100, 200); public void paint(Graphics g) { Dimension d = size(); g.setColor(mycolor); g.drawString("Jacob
{ }
de la Font", 0, d.height);
} }
public class SimpleColorDemo { static public void main(String args[]) { Frame f= new Frame(); f.add(new MyCanvas()); f.resize(200,200); f.show();
} }
Slide 259
209
IUT de Dijon
4.4 2D Graphics
Section 4.
We cant see all : Lot of functionalities in the Graphics class: clipping, translation, scaling, ipping ... Take a look to the API Graphics... Focus on pictures now ...
Slide 260
Pictures
It seems quite simple : Just create a picture image, and obtain an object of class Image Just call Graphic.drawImage() to draw it.
Slide 261
210
ESIAL Nancy
Section 4.
4.4 2D Graphics
Picture
examples/SimpleImageDemo.java
} }
public class SimpleImageDemo { static public void main(String args[]) { Frame f= new Frame(); try { f.add(new MyCanvas());
}
public void paint(Graphics g) { Dimension d = size(); g.drawImage(myimage2,0,0,this); g.drawImage(myimage,0,0,this);
}
f.resize(200,200); f.show();
} }
Slide 262
Images
Slide 263
211
IUT de Dijon
4.4 2D Graphics
Section 4.
Images
The Image constructor just builds an empty image... To load a gif picture and creates the corresponding Image object, you have to use the toolkit.... The toolkit is an encapsulation of the host toolkit which provides
peer-object instantiation fonts colours and colour model Screens characteristics Image le loader...
Slide 264
Images
Hypothesis : Loding a picture may be slow If loading is synchronous, programs is blocked... Idea : Separates the Image Objects from the pixels that composes the Image. Goal ? Asynchronous loading
of images...
An Image Object is not a pixel array but a pipe between a pixel source and a pixel consumer.
Slide 265
212
ESIAL Nancy
Section 4.
4.4 2D Graphics
cest b ce que je viens de dire l` ? cest pas de moi :-( voir [Anu96][page 315, Working o a with Images]. Bon certain ram`ne des belles phrase, et moi bien je ram`ne ma science : lide de e e e pouvoir commencer a travailler avant que (tous) les pixels arrivent est tr`s pertinente. En ` e eet certaines techniques de compressions (transformes en cosinus discrtes) permettent de e e considrer (envoyer) en premier les informations les plus pertinentes et ceci sur lensemble e dune limage. Une image peut alors tre compltement (au sens de sa surface) ache en e e e plusieurs fois, avec a chaque fois une qualit accrue. Ceci est dailleurs appliquable a la ` e ` vido : on pourra slectionner une qualit pour un ux vido donn. e e e e e
Images
The getImage() call returns immediately an object of the class Image : a pixel pipe. On one side there is the pixel consumer : just a class that implements the ImageObserver Class On the other side, the pixel producer : just a class that implements the ImageProducer interface.
Slide 266
213
IUT de Dijon
4.4 2D Graphics
Section 4.
ImageObserver
This method is called asynchronously when pixels are avaliable in the pipe (Image object). Fortunately, Component implements ImageObserver, so you dont have to write the code of this method,
its inherited.
Slide 267
}
public void paint(Graphics g) { g.drawImage(myimage2,0,0,this);
} }
Slide 268
214
ESIAL Nancy
Section 4.
4.5 Conclusion
Quand limage est cre avec un getImage() : il y a juste instanciation dun objet ee Image. Quand drawImage() est appele, alors lobjet Image cherche ` donner des pixels a e a ` drawImage, comme il nen dispose pas, il cre un nouveau thread pour aller chercher e les pixels quon lui demande. Pendant ce temps l`, drawImage rend la main. a Au fur et a mesure que le thread va apporter des pixels, imageUpdate() est appel. Les ` e pixels sont placs dans lobjet Graphics mais pas encore visualiss. ImageUpdate() e e termine son excution par un appel a repaint(), ce qui a pour eet de marquer le e ` composant graphique comme tant a repeindre. e ` Lorsque le thread dachage vient a soccuper de ce composant, il voit quil est ` a ` repeindre et appelle la mthode update() du composant qui nit par appeler la e mthode paint(). Le drawImage() sexcute ` nouveau avec les nouvelles donnes e e a e disponibles. Cette valse infernale dure tant que tous les pixels en latence ne sont pas arrivs. e Lorsque tous les pixels sont l`, drawImage renvoie vrai. Limage est alors compltement a e visualis. e Abracadabra fouchtra !
4.5
Conclusion
Conclusion
AWT allows to build complex graphical interfaces (Especially with the 1.1 version of the JDK). Its design is quite original due to pragmatical choices... It receives continuously updates (quite frustrating), (the swing evolution arrives ...) However, Building a graphical interface is quite simple (Especially vs Motif in C) and works on most
platforms (Browsers included).
Slide 269
215
IUT de Dijon
4.5 Conclusion
Section 4.
Contents
Introduction Language: classes, inheritance, polymorphism, Packages... Threads Advanced Window Toolkit (AWT) Applets Conclusion
Slide 270
216
ESIAL Nancy
Section 5.
Applet
Applet
Applet
Slide 271
HTML : Hyper Text Markup Language. Le langage utilis pour dcrire les pages hye e pertextes diuses via des serveurs web (protocole http). Voir http://www.w3.org/ le e serveur du consortium w3, on y trouve la spcication de HTML 3.2 (en autre). e
217
IUT de Dijon
Applet
Section 5.
Plan
Slide 272
Applet
always a graphical application... No system calls available to ensure security Life cycle of an applet within a browser is different from a traditional life cycle of a real application.
Slide 273
218
ESIAL Nancy
Section 5.
Que se passe-t-il quand on arrive sur une page WEB qui contient une applet ? Que se passe-t-il quand on quite cette page ?
5.1
Applet et AWT
Applet
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Panel
java.applet.Applet
Slide 274
5.2
219
IUT de Dijon
Section 5.
start()
Unloaded Initialized
init() start()
stop()
Running
Slide 275
init() est appele par le browser la premi`re fois que la page WEB hbergant lapplet est e e e charge. e start() est appele apr`s init() et chaque que la page WEB hbergeant lapplet est charge. e e e e stop() est appele quand on quitte la page hbergeant lapplet avec le browser ou si on e e iconie le browser. destroy() est appele quand on quitte le browser, ou quand on recharge la page (shift + e refresh sous netscape !!). Si lapplet est active, elle est dabord stoppe. e On voit donc que les points dentre ncessaires ` lexcution dune applet sont un peu e e a e plus sophistiqus que le bte public static main(...) des applications java. e e
220
ESIAL Nancy
Section 5.
Example
examples/Simple.java
for unloading...");
}
void addItem(String newWord) { System.out.println(newWord); buffer.append(newWord); repaint();
}
");
public void paint(Graphics g) {
}
public void start() { addItem("starting...
");
}
public void stop() { addItem("stopping...
");
} }
Slide 276
Appletviewer
Slide 277
221
IUT de Dijon
Section 5.
5.3
<title>Comment java ?</title> <hr> <applet code="Simple.class" width=320 height=320> Your browser can not run Java 1.0 applets, so you are not able to see all those little messages. </applet> <h>
Slide 278
Pour appeler une applet dans une page HTML, il sut dutiliser le TAG <APPLET>. Le param`tre code permet de dire quelle classe il faut charger en premier, puis initialiser, puis e dmarer... Bien entendu la classe ainsi rfrence doit tre une sous classe de java.applet.Applet. e ee e e Les param`tres width et height de ce TAG permettent de prciser la taille du panel e e support de lapplet dans le browser. Pour lutilisation en gnral dun TAG dans une page HTML veuillez vous reporter au e e standard HTML (voir le site indiqu prcdemment). e e e
222
ESIAL Nancy
Section 5.
Parameters passing
<APPLET CODE=AppletButton.class CODEBASE=example WIDTH=350 HEIGHT=60> <PARAM NAME=windowClass VALUE=BorderWindow> <PARAM NAME=windowTitle VALUE="BorderLayout"> <PARAM NAME=buttonText VALUE="Click here"> </APPLET>
Slide 279
223
IUT de Dijon
Section 5.
Parameters passing
examples/AppletButton.java
}
windowTitle = getParameter("WINDOWTITLE"); if (windowTitle == null) { windowTitle = windowClass;
import java.applet.Applet;
public class AppletButton extends Applet String windowClass; String buttonText; String windowTitle; public void init() { windowClass = getParameter("WINDOWCLASS"); if (windowClass == null) { windowClass = "TestWindow";
}
String windowWidthString = getParameter("WINDOWWIDTH"); if (windowWidthString = null) { try { int requestedWidth = Integer.parseInt(windowWidthString);
}
buttonText = getParameter("BUTTONTEXT"); if (buttonText == null) { buttonText = "Click
} catch (NumberFormatException e) {
//Use default width.
here to bring up
a " + windowClass;
}}}}
Slide 280
A noter quen rednissant la mthode getParameterInfo(), il est possible de rene e seigner le browser sur les param`tres utiliss par une applet. e e
5.4
224
ESIAL Nancy
Section 5.
An applet can communicate wih other applets of the same HTML page. An applet can communicate with the browser (call for loading a page, things like that ...) An applet can communicate with the server where the applet has been loaded.
Slide 281
Aller voir le java tutorial o` tout cela est tr`s bien expliqu. u e e
225
IUT de Dijon
Section 5.
Restrictions
No Native methods No access to local le system No network connections except with the original server No process No access to system properties Applet winfows are different from others windows ...
Slide 282
5.4.1
Conclusions
226
ESIAL Nancy
Section 5.
Conclusions
An applet is restricted form of applications providing its execution within a browser. Provides a large scale diffusion... but its APPLET, its not APPLICATIONS ! Others new mechanisms allows large scale diffusion of programs and data (Castanet, Channels ...)
Slide 283
227
IUT de Dijon
Section 5.
5.5
5.5.1
Problem
Slide 284
On conseille aux enfants de ne pas accepter de bonbons des inconnus, on peut lui dire c a car on lestime capable de reconnaitre les amis des pervers ppres. Il faut donc arriver e e a e ` dployer des techniques permettant de reconnaitre ses amis.
228
ESIAL Nancy
Section 5.
Basic needs
Slide 285
En fait on dsire lusage simultan dune signature (on identie qui nous envoie quelque e e chose) et dun dispositif assurant lintgrit (le contenu ne peut pas tre modi). e e e e On est proche dun syst`me de sceau (seal) fermant un document (type parchemin e moyennageux). Le rpertoire est ncessaire : il faut tre capable de mettre un nom, un niveau de e e e conance sur une signature... Les anciens avaient des grimoires o` taient reproduits ue armoiries, sceaux des seigneurs connus. Il va se poser des probl`mes de gestion et de conance en ce rpertoire. e e 5.5.2 Digital Signature and public keys
229
IUT de Dijon
Section 5.
Any of those keys can cypher a data, and the other can decipher it (asymmetric crypto-system):
1. 2.
user user KP riv [KP ub [D]] = D user user KP ub [KP riv [D]] = D
A user does not need to communicate its private key to anybody. No share secret The receiver just needs the senders public key Ex: RSA, DSA, PGP CPU consuming
Slide 286
DSA Digital Signature Algorithm, dni dans NISTs Digital Signature Standard document, e p-186. RSA Rivest, Shamir and Adleman public key system. RSA Encryption dni dans RSA e Laboratory Technical Note PKCS#1. PGP Pretty Good Privacy DES Data Encryption System. Le syst`me de cryptographie a clef secrte le plus commun. e ` e Ici les clefs de codage et de dcodage sont les mme. Il y a partage du secret entre e e metteur et rcepteur (en gnral entre groupe dutilisateurs communicant ensemble). e e e e Il est impossible de prouver a une tierce persone qui a gnr quoi. Ce syst`me permet ` e ee e aux membre du groupe de se protger de lextrieure. Ce genre de crypto-syst`me est e e e dit symtrique. e Lide des algorithmes ` clef publique est dutiliser des fonctions de codage dont lalgorithme e a inverse est connu, mais aussi connu pour tre lourd a mettre en uvre (complexit leve). e ` ee e Seuls les possesseurs de certains lments (une moiti de paire) peuvent en pratique faire ee e linverse. La pluspart des syst`mes ` clef publique sont btis sur le fait que la dcomposition e a a e en facteurs premiers dun nombre est suppose tre un probl`me non polynmial (expoe e e o ` nantiel). A partir dun grand nombre (512 bits) cela devient rellement impossible ` e a lheure actuelle (mais bon vu a la vitesse o` les cadences de processeurs sont multiplies par ` u e deux ...). Public keys bits length is a current hot topic. Mettre des refs sur PGP. Situer tout ca face ` kerberos. OTP and other bullshit. a
230
ESIAL Nancy
Section 5.
Goal : Get an about ten byte length digest from any input data (message digest, data footprint) Expected properties:
1. Surjection all possible data all possible digests. 2. Correlate a change on the data to a change on a digest is impossible It is impossible to compensate (counterbalance) a modication on the data to keep a known value for the digest
Slide 287
Un contre exemple typique dun algorithme de rsum de scurit sont les check sum. e e e e Ce sont souvent une addition en ligne en complment ` 1, modulo 8 ou 16. Rien de plus e a facile ` compenser ! a Les proprits des algorithmes de rsum (leur scurit) correspondent ` des tudes ee e e e e a e mathmatiques/statistiques pousses. e e
231
IUT de Dijon
Section 5.
Digital Signature
tutu toto d (1) blabla D=Digest(d) patati (2) S=Kpriv,toto[D] Unsafe network (3) <d,S> dr (4) blabla D=Digest(d) patati D=Kpu,toto[Sr] D = D ? (5)
Slide 288
Digital Signature
Sender : builds - D digest of the data d to be sent, then - S ciphered version of D using its private key. it sends d and S . Receiver : builds again the digest D from the data it received: dr . It also deciphers the received signature Sr using the senders public key and thus get a second digest D . D = D masquerade or falsication. S is the digital signature of d
Slide 289
232
ESIAL Nancy
Section 5.
Le transparent prcdent montre comment on peut transmettre une donne visible par e e e tous, mais telle que : Tout lecteur peut sassurer que cest bien lmetteur prtendu qui a crit le mese e e sage (pas de mascarade), Que personne na falsi le message. e Le syst`me prsent nempche pas en temps que tel les possibilits de replay. En eet e e e e e rien nempche une tierce personne de de rmettre le couple < D, S >. Ceci peut e ee tre une facilit utile : distribution de code a partir de mirroir. Pour viter cela il faut e e ` e ajouter les time stamps ou des numros de srie dans le corps du message (numro e e e dordre dune transaction bancaire...). Un point critique est : lendroit o` est stock la clef prive dun utilisateur. De u e e nombreux syst`mes les mettent sur les cartes ` puce ou autres security tokens. Certains e a vont mme jusqu` y implanter les algorithmes de tirage de clefs et de cryptographie e a par la clef prive de faon ` qui ny ait pas besoin de devoir rendre celle-ci visible a e c a ` lextrieur de la carte. e Un deuxi`me point critique, mais moins immdiat est lacc`s et la distribution des e e e clefs publiques. Le rcepteur a besoin dun rpertoire maintenant des associations e e < nom d un signataire, clef publique >. Or une clef publique est forcment cre en e ee mme temps que la clef prive associ : tirage dune paire de clefs. Ceci est fait en e e e gnral par le signataire. Le probl`me est : il faut pouvoir diuser les enregistrements e e e < nom d un signataire, clef publique > dune faon ` ce quune personne les recevant c a ait conance. En eet si aucune mesure nest prise rien nempche quune personne e malveillante, disons X, ne gnre une paire de clefs K , puis ne diuse un faux e e enregistrement < toto, Kpub >. X pourra alors gnrer des messages signs via Kpriv , e e e et les personnes contamines par les enregistrements croiront que cest toto qui les e contacte. On a donc tout perdu : X peut tr`s bien mettre un ordre de virement e e du compte de toto vers une banque suisse, o` il dispose dun compte anonyme... u La diusion des enregistrements sans tre condentielle, doit tre sre. Elle peut e e u tre fait de gr`s ` gr`s entre chaque utilisteur sans passer par le rseau non sr e e a e e u (out of band way). Cela peut tre tr`s lourd si on veut dployer un syst`me avec de e e e e nombreux utilisateurs : dicult de la diusion initiale, lenteur des mises a jour ou des e ` invalidations en cas dincidents. Une technique existente : la mise en place dautorits e de certication et la diusion de certicats. 5.5.3 Large scale deployment of public keys: certication
233
IUT de Dijon
Section 5.
Certication
Goal : Distribute in a trusted way records like: < name, public key >. How ? - make certicate
Creation of a special signer: a certication authority C , featured with a key pair: When a new user
C C Kpriv and Kpub .
Slide 290
Indeed the signed record to build a certicat features more information that a simple name: compagny, creation date, validity...
234
ESIAL Nancy
Section 5.
Certication (2)
It already got the sender public key (trusted database/cache, smart card, security toke..) if not: gets the sender certicate and checks the certicate signature sealed by its certication
authority. Its can then extract the wanted public key and checks the signature.
Slide 291
Typically: Verign is an certication authority. its public key is distributed out of band together with your netscape/ie (question: how can you trust the binary code of your browser 8-). Lots of commercial web servers pay to get a certicat signed by Verign and so can immediatly world wide sprend it. This certicat is use to open SSL connection to the server (https): the browser window with a lock in it.
235
IUT de Dijon
Section 5.
Certif=<<toto,(Kpu,toto)>, Sc>
Dc=Digest(<toto,(Kpu,toto)>) Sc=Kpriv,c[Dc] Dc=Digest(Certifr) Dc=Kpu,c[Scr] Dc = Dc ? yes Certification Key
Certification authority: C Safe and Secret Area: SmartCard Safe and Controled Area
Slide 292
Certication (3)
For a user : a key pair + a certication key are enough to start For a group of users, a company: dening (or applying to) a certication authority starts the system Remark: the private key of certication authority is a crucial information.
Slide 293
236
ESIAL Nancy
Section 5.
Cross Certication
Hierarchical structure are possible : X509 standard: OSI directory of service to distribute certicates
Slide 294
Les autorits de certication grent les certicats : date de premptions, invalidations e e e si un utilisateur na plus conance en sa clef prive... e Il est donc clair quun certicat contient plus quun nom et une clef publique. De plus, vu quils sont prvus pour tre changs une standardisation de leur format est critique e e e e (X509, RFCs de la srie PEM (Privacy Ehanced Mail)). e
237
IUT de Dijon
Section 5.
Certicate Example
% javakey -dc toto.x509 [ X.509v1 certificate, Subject is CN=Arthur Toto, OU=derriere Leglise, O=couillonade Inc., C=France Key: Sun DSA Public Key parameters: p: fca682ce8e12caba26efccf7110e526db078b05edecbcd1eb4a208f3ae1617ae 01f35b91a47e6df63413c5e12ed0899bcd132acd50d99151bdc43ee737592e17 q: 962eddcc369cba8ebb260ee6b6a126d9346e38c5 g: 678471b27a9cf44ee91a49c5147db1a9aaf244f05a434d6486931d2d1427 1b9e35030b71fd73da179069b32e2935630e1c2062354d0da20a6c416e50be794ca4 y: 486fa6ec689096bc130acf9d7d01b2b800409e3d42d4d3c41494705955c7 dd7a4f7bbd0f4bd0118a1a8ab59b7db52f0293adab4f13f380b2278407fd72cf51c0 Validity <Fri Jan 31 16:00:00 PST 1997> until <Sat Jan 31 16:00:00 PST 1998> Issuer is CN=Test autorite certification, OU=kra, O=Kramolls Inc., C=France Issuer signature used [SHA1withDSA] Serial number = 03e9 ]
Slide 295
Ceci est la version lisible dun certicat ache par javakey (voir ci apr`s). Le format e e dchange est une structure ASN1. e Le champs y doit tre la signature. e 5.5.4 jdk 1.1 implementation
238
ESIAL Nancy
Section 5.
JCA
Key manipulation Structure to integrate cryptographic engines from various vendors Structure to integrate basic algorithms (digest, encryption, signature) Structure to manager signers (java.security.Entity) Avaliable: DSA (SHA-1/DSA), MD5 It works...
Slide 296
Il existe un package : JCE (Java Cryptography Extension) fournissant le DES et autres facilits, mais il nest pas actuellement exportable ` lextrieur des tats unis, vu la e a e e lgislation locale. De mani`re gnrale lusage de telles techniques est rglement dans e e e e e e la pluspart des pays. Aux tats unis, cest linnarable NSA (National Secret Agency e e a ` cot de laquelle la CIA et le FBI sont des rigolos) qui impose ses vues. e Il y a encore quelque probl`me de design de la JCA dans le jdk1.1b3, mais le jdk1.1 e les xe. Tout ceci nexiste pas pour le jdk1.02.
239
IUT de Dijon
Section 5.
javakey
basic tool for local certicates database
Signer creation, and key pair generation Certicate checking and importation (x509 format) Certicate generation for local database users Signature of archive les: the jar les (jar format) User friendly certicate display
Slide 297
Une telle base peut servir ` un utilisateur nal : il sy cre, gnre ses clefs, exporte a e e e sa clefs publique vers lautorit de certication (via un self signed certicat), importe e des clefs de certication (via un self signed certicat), importe des certicats. Dans ce cas lexportation ou limportation doit tre relis ` un change sr. e e a e u Elle peut aussi servir a la certication : cration de lautorit et de ses clefs ; im` e e portation des clefs publics des membres (via des self signed certicats, out of band) et gnratioin de nouveaux certicats signs cette fois-ci par la clef prive de certication. e e e e Un reproche ? Un chier Unix, ou Window nest pas forcment un bon endroit e pour une clef prive... Des lments de rponses ` ce genre de questions est disponible e ee e a dans http: //www.javasoft.com:80/ security/policy.html, les java key policy recommendations. 5.5.5 The jar le: Java ARchives
240
ESIAL Nancy
Section 5.
jar les
Goals Pack all the elements of an applet:
Download in one transaction http/tcp of one applet components: (.class, .au, Compression of the whole stuff Authentication of the pack (providers signature)
.gif,...)
Slide 298
Lide est daugmenter un peu les performances lors du chargement dune applet. Lide e e de paquer lensemble ` la tar/compress semble antinomique avec ldition de lien tardive a e mise en uvre dans java. Mais dans lavenir il y aura certainement possibilit de charger e des chiers jar supplmentaires en cours dexcution... e e On peut imaginer mettre uniquement dans un chier jar sign tout le code demandant e des privilges ` lexcution, et les ressources (images, sons) absolument ncessaires au e a e e dmarage dune applet. e Tout ceci est au dbut dun dploiment complet... e e
241
IUT de Dijon
Section 5.
Commands
jar:
Creates an archive le (ZLIB format)
` Options a la tar
Adds a directory:
javakey :
Generates a signature for a jar le (option -gs) Adds a .SG le META-INF directory
Slide 299
Un jar chier est donc : un chier darchive zipp, e contenant un rpertoire spcial META-INF o` on trouve des chiers : e e u MANIFEST.MF indiquant quels lments de larchive ont t signs, et comment ils lont ee ee e t. ee Le mta rpertoire contient aussi les signatures proprement dites : chiers .SG. e e La spcication du contenu des chiers MANIFEST et de signature est disponible a : http: e ` //www.javasoft.com:80/ products/jdk/1.1/docs /guide/jar/ manifest.html. Il faut noter que nalement le syst`me de mta le et chier signature propos peut sappliquer a e e e ` tout type darchive du moment o` il fournit un syst`me de nomage hirarchique (un bon u e e vieux syst`me de chiers UNIX, ou NT doit pouvoir faire laaire). e
242
ESIAL Nancy
Section 5.
Applet Loading
parameterarchives du tag <APPLET> The class indicated in the CODE tag is then looked for in the jar le. The ClassLoader checks the jar signature (signer must exist and be accepted by the local base created using javakey) If everything goes well: the applet will have the same execution rights than a local java application.
Slide 300
Bien entendu actuellement aucun browser html du commerce ne supporte ces extentions du tag <APPLET>. Le dernier hotjava / jdk1.1 est sens limplanter... e Extrait de : http://www.javasoft.com/ products/jdk/1.1/docs/ guide/jar/jarGuide.html The APPLET tag Changing the APPLET tag in your HTML page to accomodate a JAR le is simple. The JAR le on the server is identied by the ARCHIVES parameter, where the directory location of the jar le should be relative to the location of the html page: <applet code=Animator.class archives="jars/animator.jar" width=460 height=160> <param name=foo value="bar"> </applet> Note that the familiar CODE=myApplet.class parameter must still be present. The CODE parameter, as always, identies the name of the applet where execution begins. However, the class le for the applet and all of its helper classes are loaded from the JAR le. Once the archive le is identied, it is downloaded and separated into its components. During the execution of the applet, when a new class, image or audio clip is requested by the applet, it is searched for rst in the archives associated with the applet. If the le is not found amongst the archives that were downloaded, it is searched for on the applets server, relative to the CODEBASE (i.e., it is searched for as in JDK1.0.2). The archives tag may specify multiple JAR les. Each JAR le must be separated by + (addition signs). Each le is downloaded in turn: <applet code=Animator.class archives="classes.jar + images.jar + width=460 height=160> <param name=foo value="bar"> Laurent Andrey (andrey@loria.fr) 243 sounds.jar"
IUT de Dijon
Section 5.
</applet> There can be any amount of white space between entries within the archives parameter. In addition, the archives tag itself is case-insensitive; it can be lower-case, upper-case, or any combination of lower- and upper-case letters, such as ArCHiVes. A traduire .... Tag Applet et jar Biblio securit e Dtail de javakey ?? e
5.5.6
Brief Bibliography
FIPS 186, Digital Signature Standard (DSS), species a Digital Signature Algorithm appropriate for applications requiring a digital rather than a written signature. FIPS 185, Escrowed Encryption Standard (EES), species a voluntary technology available for protecting telephone communications (e.g., voice, fax, modem). FIPS 180, Secure Hash Standard (SHS), species a Secure Hash Algorithm (SHA) for use with the Digital Signature Standard. Additionally, for applications not requiring a digital signature, the SHA is to be used whenever a secure hash algorithm is required for federal applications. FIPS 46-2, Data Encryption Standard (DES), provides the technical specications for the DES. FIPS 113, Computer Data Authentication, species a Data Authentication Algorithm, based upon the DES, which may be used to detect unauthorized modications to data, both intentional and accidental. The Message Authentication Code as specied in ANSI X9.9 is computed in the same manner as the Data Authentication Code as specied in this standard. FIPS 140-1, Security Requirements for Cryptographic Modules, establishes the physical and logical security requirements for the design and manufacture of modules implementing NIST-approved cryptographic algorithms. NIST Special Publication 800-2, Public Key Cryptography, by James Nechvatal, presents a survey of the state-of-the-art of public key cryptography circa 1988-1990. FIPS 171, Key Management Using ANSI X9.17, adopts ANSI X9.17 and species a particular selection of options for the automated distribution of keying material by the federal government using the protocols of ANSI X9.17. JavaTM Cryptography Architecture API Specication & Reference. Benjamin Renaud JavaSoft Security Group, Mary Dageforde. http://www.javasoft.com/ products/jdk/1.1/docs/ guide/security/ CryptoSpec.html Information on FIPS 186 is available from: Computer Systems Laboratory Room B64, Technology Building National Institute of Standards and Technology Gaithersburg, MD 20899-0001 Telephone: (301) 975-2816 Fax: (301) 948-1784 E-mail: dward@enh.nist.gov Other FIPS and NIST Special Publications are for sale by: National Technical Information Service U.S. Department of Commerce 5285 Port Royal Road Springeld, VA 22161 Telephone: (703) 487-4650 Copies of American National Standard for Financial Institution Key Management (Wholesale), ANSI X9.17, can be purchased from: Washington Publishing Company, P.O. Box 203, Chardon, OH 44024-0203, telephone (800) 334-4912.
244
ESIAL Nancy
Section 5.
Contents
Introduction Language: classes, inheritance, polymorphism, Packages... Threads Advanced Window Toolkit (AWT) Applets Conclusion
Slide 301
245
IUT de Dijon
Conclusion
Section 6.
Conclusion
Extensions
Slide 302
6.1
246
ESIAL Nancy
Section 6.
JDBC
Writing database applications in Java An generic API to send SQL requests at any Relational databases..
Slide 303
6.2
247
IUT de Dijon
Section 6.
RMI
The Java version of RPC... Built as a language extension A program running on a JVM can obtain a reference to another object on another JVM. Once you have a reference to an object you can call methods as if the remote object is local. A distributed garbage collector extends the traditional garbage collector for working with RMI.
Slide 304
6.3
248
ESIAL Nancy
Section 6.
JavaBeans
A model of software components Goals : composition of software components (nearly micro-application) to build real applications Similarities with the construction of UI with container/component trees.
Slide 305
Je conseille fortement la lecture de JavaBeans white paper qui dcrit assez ce quest un e beans ...
249
IUT de Dijon
Section 6.
JavaBeans
A bean is a class that have to implement the Bean Interface. The Bean Interface provides :
Interface declaration and run-time discovery of the interfaces of the others components on the same
container
Slide 306
Slide 307
250
ESIAL Nancy
Section 6.
Slide 308
6.4
Overall Conclusion
251
IUT de Dijon
Section 6.
Overall Conclusion
The application eld is very big. A priori, we can nd a JVM in almost anything:
A mobile phone A network equipment A network computer A database Server A Smart Card A washing machine ? A coffee machine ?
Slide 309
Overall Conclusion
Strong points :
Write once, run everywhere Huge libraries to build complex applications (AWT, RMI, JDBC, Beans ...) Possibilities of deployment on a wide area network with security ...
Slide 310
252
ESIAL Nancy
Section 6.
Overall Conclusion
Weak Points :
Unstable JDK ... Bugs ... War for portability Performance problems
Slide 311
la guerre des gants ny est pas trang`re ` ces probl`mes ... Dicult pour les dveloppeurs e e e a e e e de sunsoft et javasoft de rpondre a la pression des utilisateurs et des concurrents. e `
253
IUT de Dijon
REFERENCES
REFERENCES
References
[Anu96] Ed Anu. JAVA Source Book. Wiley Computer Publishing, 1996. [Arn96] Ken Arnold et James Gosling. The Java Programming Language. Addison Wesley, 1996. [Fla96] David Flanagan. Java in Nutshell. OReilly, 1996. [Hoa78] C.A.R. Hoare. Communicating sequential processes. Communications of the ACM, 21(8):666677, august 1978. [Jam95] Gosling James et McGilton Henry. The java language environnement. a white paper. ftp://www.javasoft.com/docs/whietepaper.ps, 1995. [JG96] Bill Joy James Gosling et Guy Steele. The Java Language Specication. Addison Wesley, 1996. [Mic95] Sun Microsystem. The java(tm) language: ftp://ftp.javasoft.com/docs/java-overview.ps, 1994-1995. an overview.
254
ESIAL Nancy