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 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é
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)
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 Listener add Listener( Listener leDelegue)
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
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 ( a) public void remove ( 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 Introduit tous les mécanismes des langages de programmation modernes Langage universel