Paquetage Standards Package java net Application Réseau



Yüklə 445 b.
tarix01.11.2017
ölçüsü445 b.
#26480



Paquetage Standards



Package java.net

  • Application Réseau :

    • URL : représente un objet de type URL
    • URLConnection/HttpURLConnection : représente la gestion d'une connexion
    • Socket et ServerSocket représente les points de connexion TCP
    • DatagramPacket et DatagramServer représente les points de connexion UDP
    • InetAdress représente une adresse TCP/IP


Package java.io

  • Gestion des flux

    • Octets : InputStream et OutputStream
    • Char (2octets) : Dérivent de Reader et Writer
    • Tubes : PipeInputStream, PipeOutputStream
  • Accès aux fichiers

    • File, FilenameFilter, RandomAccesFile
  • Classe de sérialisation d'objets

    • ObjectInputStream, ObjectOutputStream
  • Classes de service

    • Buffered, Zipped, StreamTokenizer
      • exemple : BufferedInputStream(InputStream in, int size)
  • Serialisation

    • interface Serializable, writeObject et readObject


Package java.lang

  • La classe Objet

  • Types de base : Boolean, Character, Byte, Short, Interger, Long, Float, Void

  • Math : fonctions mathématiques avancées

  • String et StringBuffer

  • Runtime et System: Machine Virtuelle

  • Thread, ThreadGroup et Process (Runnable)

  • Throwable



Package java.lang.reflect

  • Nécessaire d'Introspection

    • Interface member : décrit les membres d'une classe
      • Classes : Constructor, Field, Method
      • Classe : Modifier
        • public, private, protected, static, final, synchronized, interface, abstract, native
        • transient : non persistant
        • volatile : variable à jour dans un thread
      • Classe : Array
  • ==> très utile pour les composants logiciels

    • JavaBean


Package java.math

  • abstract class Number implements Serializable

  • BigInteger : Entiers de longueur variable

  • => cryptographie

  • BigDecimal : Nombre réels avec une bonne précision => calcul financier



Packetage java.security

  • Provider : fournisseur d'algorithmes de cryptage et de gestion de clés.

  • Identity : entité identifiée par le système de sécurité

  • KeyPair : clé privée, clé publique pour la gestion des certificats et des signatures

  • Certificate : atteste qu'une clé publique est celle du propriétaire. Notion d'attestion par une entité tierce dite de confiance

  • Signature : mécanisme d'authentification d'un message et intégrité

  • Signer : générer des signatures



Package java.sql

  • Principes de connexion sur une base de données

  • Connection : connexion sur un moteur de bases de données

  • Driver : Sous couche permettant de dialoguer avec le moteur SQL

  • DataBaseMetaData : Meta données du moteur

  • CallableStatement : Procédures stockées

  • Statement, ResultSet : Execution

    • ==> Wrapper d'ODBC : JDBC


Package java.text

  • Internationalisation

    • Traduction de texte
    • Encodage de caractères
    • Format de nombres
    • Date et Heures
    • Techniques de tri
  • Classes

    • NumberFormat, DateFormat
    • Collator : tri de chaînes de caractères
    • BreakIterator : cesures de mots et de phrases


Package java.util

  • Hashtable, Vector, Enumeration

  • --------------------------------

  • Calendar, Date, TimeZone

  • --------------------------------

  • Locale, ResourceBundle

  • ----------------------------

  • EventObject, EventListener

  • ---------------------------

  • StringTokenizer, BitSet, Observer et Observable

  • java.util.zip

    • Sommes de contrôles CRC32 et Alder32
    • GZIPInputStream, ZIPInputStream ...


Package java.applet

  • getAppletInfo, getParameterInfo, init, start, stop, destroy

  • --------------------------

  • URL getDocumentBase( );

  • URL getCodeBase( );

  • String getParameter(String name);

  • boolean isActive( );

  • void appletResize (int width, int heigt);

  • -------------------------

  • AppletContext getAppletContext( );

  • void showDocument(URL url, String target);

  • void showStatus(String status);

  • Applet getApplet(String name);

  • Enumeration getApplets();

  • -------------------------

  • AudioClip getAudioClip(URL url);

  • Image getImage(URL url);



Package java.rmi

  • java.rmi : classe pour les proxy clients.

    • Exception et interface Remote
  • java.rmi.server : classe pour les objets serveurs

    • RemoteObject, Serialisation...
  • java.rmi.dgc : Distributed Garbage Collector

  • java.rmi.registry : Dénomination des objets



Divers



Environnement JDK

  • JDK1.0 ==> JDK 1.1.5 ==> JDK 1.2beta

  • /bin/javac, java, appletviewer, javadoc ...

  • /demo/

  • /include/

  • /lib/classes.zip

  • /src/



Ressources Java : Livres

  • JavaSeries O'Reilly

    • Français et Anglais
    • Couvre tous les aspects : tutorial, thread, jdbc, Beans
    • Ecris par les concepteurs du langage : Exploring Java (valise)
  • Bibles de référence

  • Java client-server

    • Cédric Nicolas, Christophe Avare, Frédéric Najman, Eyrolle
  • Sun (http://www.sun.com/)

    • Spécifications : Java, VM, JavaBeans...
  • Conception Objets

    • Design Patterns Erich Gamma ITP


Ressources Java : Web

  • http://www.sun.com

  • jdk, documents, pointeurs, projets

  • http://www.gamelan.com

  • Applet, Scripts, JavaScripts

  • http://www.stars.com

  • Codes, Exemples, Tutoriels (pas que java)

  • JavaDevelopperConnexion

  • http://java.sun.com/jdc

  • http://java.sun.com/jdc/techDocs/newsletter/index.html



Règles d'écriture de code Java

  • Un fichier .java par classe

  • Entête classique : description...

  • Commentaires : JavaDoc

    • Début de bloc : /** .... **/
    • Balises : @author, @version, @see, @param, @return, @exception
  • Exemple

    • /**
    • * Affiche un bouton rond
    • *
    • * BoutonRond b = new BoutonRond(titre);
    • * monPanel.add(b);
    • *
    • *@see awt.button
    • *@author C. Nicolas
    • **/


Convention de nommage

  • paquetages minuscule

  • classes MajusulePourLaPremiereLettreDeChaqueMot

  • méthodes minusculePourLaPremiereCommeLaClasseAprès

  • constantes MAJUSCULE_AVEC_SOULIGNE

  • variables/méthodes priv/protected termineParSouligne_

  • variables/méthodes statiques termineParDeuxSoulignes__

  • variables locales à une méthode minuscules_avec_soulignes

  • méthodes fabriquant des objets de classe X newX

  • méthodes de conversion retournant des objets de type X toX

  • accesseur d'un attribut y de type X X getY()

  • accesseur de modification void setY(X valeur)

  • classe de définition d'une exception FinDeLaClasseAvecLeMotException

  • interface se distinguant d'une classe similaire InterfaceSeTermineParIfc

  • classe qui se distingue de son interface ClasseSeTermineParImp



Recommandations 1/2

  • Pas de variables d'instance publiques

  • Pas d'accesseurs inutiles

  • Identifier les variables immuables (pas de synchro)

  • Peu de variables/méthodes statiques (classe)

  • Long plutôt que int et double / float

    • moins d'erreur de dépassement
  • Protected mieux que Private

  • Minimiser les accès aux variables d'instance dans les méthodes

    • utiliser des accesseurs protected
  • Pas de surcharge sans nouveau paramètre (sinon utiliser instanceof())

  • Méthodes simples

  • Préferer void : x.methode1().methode2()

  • méthodes publiques = synchronized

  • Si surcharge de Object.equals() alors surcharge de Object.hashcode( )

  • Pas de clonage intempestif

  • Utiliser notifyAll plutot que notify ou resume



Recommandations 2/2

  • Si possible créer un constructeur sans paramètre

    • Class.newInstance()
  • Pas de final sinon pour de l'optimisation de performances

  • Interfaces mieux que classes abstraites (héritage simple)

  • Préférer abstract void maMethodeVide(); à void maMethodeVide(){ }

  • Import java.awt.Button mieux que java.awt.*

  • Nommer les thread pour le débogage en distant

  • Utiliser plutôt implements Runnable que extends Thread

  • Ne pas abuser du Garbage Collector (-verbosegc et -prof)

  • BufferedInputStream : optimisation des performances

  • Surcharger toString des classes définies (debogage)

  • Ne pas croire tout ce qu'on dit !



Serveurs Java

  • http://jeeves.javasoft.com/

  • http://www.acme.com/java/software/Acme.Serve.Serve.html (Jef Poskanzer) 1500lignes + sources

  • http://www.w3.org/pub/WWW/Jigsaw/

  • ==> Dynamiques

  • ==> Multithreads



  • Serveur





Java Par l'Exemple : Le serveur

  • public void run() {

  • try {

  • bufferedReader in=new BufferedReader(

  • new InputStreamReader(client.getInputStream(), "8859_1"););

  • OutputStream out=client.getOutputStream();

  • PrintWriter pout=new PrintWriter(

  • new OutputStreamWriter(out, ""8859_1"), true);

  • String larequete=in.readLine();

  • StringTokenizer st=new StringTokenizer(larequete);

  • if ((st.countTokens()>=2) && st.nextToken().equals("GET")){

  • if ((request=st.nextToken()).startsWith("/"))

  • request=request.substring(1);

  • if ((request.endsWith("/") ||request.equals(""))

  • request=request+"index.html";

  • try {

  • FileInputStream fis=new FileInputStream(request);

  • byte[] data=new byte[fis.available()];

  • fis.read(data);

  • out.write(data);

  • out.flush();

  • catch(FileNotFoundException e){

  • pout.println("404 Object not found");

  • } else pout.println("400 Bad Request");

  • client.close();

  • catch (IOException e) {

  • System.out.println("I/O error" + e);}

  • } //fin run()

  • }//fin class



  • Relocalisation



Relocalisation de page + traces

  • Shell :

    • trace=/tmp/logrealocations.log
    • echo $REMOTE_ADDR >> $trace
    • echo "Location: http://www.insa-lyon.fr:8000"
    • echo
  • Servlet

  • import java.io.*;

  • import java.servlet.*;

  • import java.servlet.http.*;

  • public class gotoUrl extends HttpServlet {

  • public void service(HttpServletRequest req, HttpServletResponse res)

  • throws ServletException, IOException {

  • DataOutputStream log = new DataOutputStream(new FileOutputStream("goto.log", true));

  • log.writeChars(req.getRemoteAddr()+"\n");

  • log.close();

  • res.sendRedirect(req.getQueryString());}}



  • Les Layouts



LayoutManager : exemples

  • import java.awt.*;

  • public class Grid extends java.applet.Applet {

  • public void init() {

  • setLayout(new GridLayout(3,2)); //ligne, colonne (2,0)

  • add(new Button("Un");

  • ...

  • add(new Button("cinq");}}

  • import java.awt.*;

  • public class Flow extends java.applet.Applet{

  • public void init() {

  • add (new Button("Un"));

  • add (new Button("Deux"));

  • add (new Button("Trois"));

  • add (new Button("Quatre"));

  • add (new Button("Cinq"));}}



LayoutManager : BorderLayout

  • import java.awt.*;

  • public class uneBordure extends java.applet.Applet {

  • public void init() {

  • setLayout (new java.awt.BorderLayout());

  • Panel p new Panel();

  • p.add(new Button("Est"));

  • add(p, "East");

  • p = new Panel();

  • p.add(new Button("Ouest"));

  • add (p, "West");

  • p=new Panel();

  • p.add(new Button("Nord"));

  • add (p, "North");

  • }

  • }



LayoutManager : CardLayout

  • import java.awt.*;

  • public class main extends java.applet.Applet {

  • CardLayout cards = new CardLayout();

  • public void init() {

  • setLayout(cards);

  • add(new Button("Un"), "NomCarteUn");

  • add(new Button("Deux"), "NomCarteDeux");

  • }

  • public void agir() {

  • cards.next(this);

  • return true;}

  • }



Calculatrice 1/3

  • import java.awt.*;

  • import java.awt.event.*;

  • public class Calculator extends java.applet.Applet implements ContainerListener, ActionListener {

  • GridBagConstraints gbc = new GridBagConstraints(); {

  • gbc.weightx=1.0; gbc.weihty=0; gbc.fill=GridBagConstraints.BOTH";}

  • TextField lAffichage = new TextField();

  • private void addGB(Container cont, Component comp, int x, int y) {

  • if (!(cont.getLayout() instanceof GridBagLayout))

  • cont.setLayout(new GridBagLayout());

  • gbc.gridx=x; gbc.gridy=y;

  • cont.add(comp, gbc);

  • }



Calculatrice 2/3

  • public void init() {

  • setFont(new Font("Monospaced"), Font.BOLD, 24);

  • addContainerListener(this);

  • gbc.gridwidth=4;

  • addGB(this, lAffichage, 0, 0);

  • // haut de la calculatrice

  • Panel topRow=new Panel( );

  • topRow.addContainerListener(this);

  • gbc.gridwidth=1;

  • gbc.weightx=1.0;

  • addGB(toprow, new Button("C"),0,0);

  • gbc.weightx=0.33;

  • addGB(toprow, new Button("%"),0,0);

  • gbc.weightx=1.0;

  • addGB(toprow, new Button("+"),0,0);

  • gbc.gridwidth=4;

  • addGB(this, topRow, 0, 1);

  • gbc.weightx=1; gbc.gridwidth=1;



Calculatrice 3/3

  • public void componentAdded(Container e) {

  • Component comp e.getChild( );

  • if (comp instanceof Button)

  • ((Button)comp).addActionListener(this);

  • }

  • public void componentRemoved(ContainerEvent e) { }

  • public void actionPerformed(ActionEvent e) {

  • if (e.getActionCommand( ).equals("C"))

  • theDisplay.setText("");

  • else

  • theDisplay.setText(theDisplay.getText( ) + e.getActionCommand( ) );

  • }

  • }



Application 1/3 (traitement)

  • import java.awt.*;

  • import java.awt.event.*;

  • public class ApplicationSimple{ // La classe principale sert de délégué

  • public void quitterAppli() {

  • System.exit(0);

  • }

  • public void maximiser(Frame f){

  • f.setSize(f.getToolkit().getScreenSize());

  • }

  • public static void main(String args[]){

  • ApplicationSimple monAppli=new ApplicatioSimple();

  • IHMSimple monIHM = new IHMSimple(monApli);

  • }



Application 2/3 (IHM)

  • class IHMSimple {

  • public IHMSimple(ApplicationSimple uneAppli) {

  • Frame maFrame; = new Frame();

  • maFrame.setLayout(new FlowLayout());

  • //Premier bouton

  • Button monBoutonQuitter=new Button("ATCHAW!");

  • //On lui donnne un adapatateur

  • monBoutonQuitter.addActionListener(new

  • MonAdaptateur(MonAdaptateur.QUITTER, uneAppli));

  • //2nd bouton

  • Button monBoutonAgrandir=new Button("Maximise");

  • //On lui donnne un adapatateur

  • monBoutonAgrandir.addActionListener(new

  • MonAdaptateur(MonAdaptateur.MAXIMISER, uneAppli));

  • maFrame.add(monBoutonQuitter);

  • maFrame.add(monBoutonAgrandir);

  • maFrame.pack);

  • maFrame.setVisible(true);}}



Application 3/3 : Adaptateur

  • class MonAdaptateur implements ActionListener {

  • static final int QUITTER = 1;

  • static final int MAXIMISER = 2;

  • protected int typeAction;

  • protected ApplicationSimple lAppli;

  • public MonAdaptateur(int unTypeAction, ApplicationSimple uneAppli) {

  • typeAction=unTypeAction;

  • lAppli=uneAppli;

  • }

  • public actionPerformed(ActionEvent e){

  • Object unComposant=e.getSource();

  • do {

  • unComposant=((Component)unComposant).getParent;

  • } while (!(unComposant instanceof Window));

  • Window fenetremere=(Window) unComposant;



Objets : Exemples de codes d'appels


  • classid="AudioItem"

  • witdh="15" height="15">


  • classid ="clsid:663C8FEF-1EF9--11CF-A3DB-080036F12502"

  • data="data:application/x-oleobject;base64, .donn base64.">

  • A clock

  • !
  • Des bulles



Applet / Standalone

  • public class HelloWeb extends Applet {

  • publc void paint (java.awt.Graphics gc) {

  • gc.drawStrings ("Hello Web!", 125, 95);

  • }

  • public static void main (String[] args) {

  • Frame laFrame=new Frame();

  • Applet helloWeb = new HelloWeb();

  • laFrame.add("Center",helloWeb());

  • laFrame.setSize(200,200);

  • helloWeb.init();

  • helloWeb.start();

  • theFrame.show();

  • }

  • }



Yüklə 445 b.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin