Java ?
• Printemps 90 : Naughton, Gosling et Sheridan :
– "Le consommateur est le centre du projet, il faut construire un environnement de petite taille avec une petite équipe et intégrer cet environnement dans une nouvelle génération de machines : des ordinateurs simples pour des gens normaux."
• Printemps 91 : Microprocesseur grand public.
– La "Green Team" prototype une machine de pilotage de l'électroménager
• Août 91 : Gosling développe Oak
• Août 92 : ---duke--->
Java ?
• Eté 1993 : Sté. "First Person" est en train de couler
– Eric Schmidt ( Sun) demande une adaptation au Net
• Gosling : travaille sur le code
• Naughton : cherche une application stratégique
• Janvier 1995
– Oak ==> Java – HotJava
• Août 1995
– Première licence sur Netscape
Java : Principes
• Simple : C++ sans les couteaux ni les révolvers
• Orienté Objet
• Orienté réseau : Classes de gestion des protocoles
• Robuste : Typage fort compilation et exécution
• Sûr et sécurisé
• Indépendant du matériel : byte-code
• Portable : spécification précise (int=int)
• Haute performances
• Multithread
• Dynamique
Plateforme Java : architecture
JDK 1.1
JAVA Beans
Serveurs
API de
Sécurité RMI JDBC JNI Internationa
lisation
Java Core Reflection JNDI
Server API Java IDL
Machine Viruelle Java OS + Embedded API +
Personal API
PCs NC PDA Puces Java
Horizontale
Couche système
Plate-formes cibles Media
API
Commerce
API Management API Transaction
Services Autres API Verticale
JDK 1.0
Java Client/Serveur : Nicolas, Avare, Najman - Eyrolles
Machine Virtuelle : Emulateur
• Byte-Code/P-Code/J-Code
– opcode : 1 octet pour l'instruction – 0,n opérandes
• MicroProcesseur logiciel
– Jeu d'instructions
– Registres (pc, optop, frame, vars) – Pile, Heap
– Ramasse-miettes
– Espace de stockage des méthodes – Tas de constantes
• ==> Compilé ou Interprété
Compilateur javac Byte-Code .class MV Interpréteur
SE Matériel
Source .java
Un langage de programmation
Bases du langage
• Types
– byte : 1 octet – short : 2 octets – int : 4 octets – long : 8 octets – float : 4 octets – double : 8 octets – boolean : true false
– char : 2 octets (Unicode)
• Instructions
– if– while, do while, for – selection (switch)
• Opérateurs
– Arithmétique : =+-*/%
– Relationnels : <><= >= == !=
– Logiques : ! && ||
– Incréments : ++ --
– Bit Wise : & | ^ ~ >> << >>>
– Affectation : = += -= *= /= %=
Abstraction
• Héritage
– extends
– héritage simple
• super : Accède à la méthode parente
• this : Accède à l'objet lui-même
• Classes abstraites
Interface
– Toutes les méthodes sont abstraites et publiques – Tous les attributs sont final public static
• Spécification formelle de classe
– Indique les services rendus par la classe qui implante l'interface
• Une classe peut implanter plusieurs interfaces
• public interface Translatable { ...
• abstract public void translater(); ...}
• public class Cercle extends FigureGeometrique
• implements Modifiable, Translatable {
• public void translater(){ ... }
• public void modifier(){...} }
Encapsulation
• Portée des données
– private, (vide), protected, public
• Paquetage
– Ensemble de classes – Permet de :
• regrouper les classes d'un point de vue conceptuel
• Définir une protection sur les attributs partagés
– Répertoire physique
Une librairie standard
API du JDK (Paquetages)
java.lang : classes de bases (+reflect) java.io : entrées/sorties
java.util : utilitaires (structures, dates, events) (+zip) java.net : réseau
java.applet : gestion des applets
java.awt : interface graphique (image, +datatransfert, +event) java.beans : définition de composants réutilisables
java.math : entier de taille variable
java.rmi : invocation distante (+dgc, +registry, +server) java.security : (+acl, +interfaces)
java.sql : jdbc ...
java.text : traduction, chaine=f(langue)
Des concepts de programmation
Mécanisme d'exception
class PileSale { ...
assiette depiler() throws Exception {
if (pileVide()) throw new Exception("trop tard ! f(depiler)");
return (elementsuivant()); } class MachineALaver{
void laver() throws Exception { ...
assiettessales.depiler();
}
class Bonnes_Resolutions { void bonneresolution1 () {
try {mamachinealaver.laver();} catch {Exception e) { e.printStackTrace(); }
Threads
• Execution de tâches en //
• Mémoire, Code et Ressources partagés
• Economie de ressources
• Un thread ~= méthode qui rend immédiatement la main
• Exemple événements (IHM, Réseau)
• + priorités
• + synchronisation
– (moniteur, synchronized)
Nouveau- Né
Blockée
Runnable
Morte
Running new()
stop()
resume()
yield()
stop() stop()
start() notify()
suspend() sleep()
wait()
Gestion de l'interface utilisateur
Paquetage Awt
• Abstract Window Toolkit
• Composants
– simple et conteneur
• A chaque conteneur est associé une mise en page assurée par l'interface LayoutManager
– flowlayout – borderlayout – cardlayout – gridlayout
– gridbaglayout
Java Awt : Container
• Conteneurs de composants, héritent de la classe abstraite Container
– Panel, // Container dans un autre container : exApplet – ScrolPane, //Ajoute les barres de défilement
– Window //Fenêtre sans bordure ni menu, borderLayout par default
• Frame // windows + Titre
• Dialog //Saisie de données (setModal, isModal)
– FileDialog //Fonction du SE
• instanciate, setLayout, add, remove, getComponents
class HelloWeb {
public static void main( String[] args) { Frame uneFrame=new Frame("Le Titre");
uneFrame.add("Center", new Label("Bonjour", Label.CENTER));
uneFrame.pack();
uneFrame.show();
} }
Layout Managers
• FlowLayout
:
standard, gauche à droite, mais centré• setLayout(new GridLayout(3,2)); //ligne, colonne (2,0)
• BorderLayout :
North, South, East, West, Center
– p.add(new Button("Ouest"));
• CardLayout
: Pile de cartes :
– first( ), last( ), next( ) et previous()
• GridBagLayout
:
– Position relative entre les composants en utilisant des contraintes – Composants sont organisés sur une grille logique
– Complexe
La gestion des événements
Evénements = objets dérivés de EventObject Source dérive d'un composant graphique
Le délégué implante des interfaces spécifiques dérivant de EventListener
public <TypeEvt>Listener add<TypeEvt>Listener(<TypeEvt>Listener leDelegue) Source de
l'événement
Evénement
Délégué java.util.EventObject
java.util.EventListener
Adaptation au Web
Deux formes de Java
• Exemple d'application
public class MonApplication {
public static void main (String args[]) { System.out.println("Salut !");
} }
• Application=classe
• main()
• Nom classe = nom de fichier
• Exemple d'applet
import java.awt.*;
import java.applet.Applet;
public class MonApplet extends Applet { public void paint (Graphics g) {
g.drawString("Mon Applet",5,15);
} }
• applet=classe
• hérite d'Applet
• executé par une page html
• nom classe = nom fichier
Cycle de vie
• Une applet hérite de la classe Applet elle est pilotée par le browser Web
constructeur appelé en premier
init() Une seule fois à la création de l'applet start() Appelée après init() et chaque
fois qu'elle a été stoppée
stop() Appelée chaque fois que l'applet doit être interrompue
destroy() Appelée lorsque le client quitte la page HTML
paint() Appelée chaque fois que l'Applet doit se redessiner
Objet Composant
Container Panel Applet
Composants logiciels : Beans
Java Beans
• Composant logiciel
– Commercialisable – Communiquant
– Indépendant (Environnement d'intégration) – Intégrable
– != application
– interface parfaitement définie
• méthodes, événements, propriétés
Modèle d'écriture du code
• Modèles d'écriture du code
– propriétés (normales, indexées, liées et contraintes)
• public integer getAge( );
• public void setAge(integer a);
• public boolean isHomme();
• void setNom(int index, String nom);
• String getNom(int index);
– void setNom(String values[]);
– String[ ] getNom();
– événements
• public void add<TypeEventListener>(<TypeEventListener> a)
• public void remove<TypeEventListener>(<TypeEventListener> a)
– Méthodes
• publiques
– PropertyChangeListener / PropertyChangeSupport
JavaBeans : Marché du composant
• Développement de Bean
• Infrastructure d'intégration
• Infrastructure de fonctionnement
• Applications spécialisées
Composants distribués...
Java : Conclusion
• Augmente la productivité
– moins coûteux pour les décideurs
– plus intéressant pour les développeurs (comparer)
• Langage d'avenir pour :
– les applications distribuées (portable, sécurisé) – le développement OO
• simple, puissant, outillé, bibliothèques
– les applications embarquées