Université Laval Formation Java Novembre 2001 Jour 1 Jour 1 2 Jour 1 3 Plan • Pourquoi Java? • Types de données • Structures de contrôle • Passage de paramètres • Héritage • Visibilité 1 Histoire de Java • Projet de connexion des machines: 1991 • Le nom Java a été introduit dans un café • Développé par Sun • Déclaration officielle en Mai 1995 Jour 1 4 Origines de Java • Développé à partir de C et C++ • Pallier aux problèmes de C++ Pointeurs (sécurité) Gestion de la mémoire Affectations ... Jour 1 5 JDK • JDK: Java Development Kit • Environnement de développement Java • Version 1.3 • http://www.sun.com Jour 1 6 2 Pourquoi Java? • Indépendant de la plate-forme • Langage objet • Programmation concurrente • Programmation Internet Jour 1 7 Indépendant de la plate-forme • Code compilé vs. code exécutable Jour 1 8 Compiler (Pentium) Binary File (Pentium) Compiler (PowerPC) Binary File (PowerPC) Compiler (SPARC) Binary File (SPARC) Your Code Jour 1 9 3 Java Compiler (Pentium) Your Code Java Compiler (PowerPC) Java Interpreter (Pentium) Java Bytecode (PlatformIndependent) Java Interpreter (PowerPC) Java Interpreter (SPARC) Java Compiler (SPARC) Jour 1 Java source code 10 Across the Internet using HTML Java bytecode Java compiler Java interpreter Local computer Web browser Bytecode interpreter Java interpreter Machine code Remote computer Jour 1 11 Types • La taille des types est fixe dans Java • Tous les types sont signed Jour 1 12 4 Types boolean Java C++ 1 bit 8 bits char 16 bits 8 bits byte 8 bits short 16 bits 16 bits Jour 1 13 Types Java C++ int 32 bits 16 bits* long 64 bits 32 bits float 32 bits 32 bits double 64 bits 64 bits Long Double 80 bits Jour 1 14 Jour 1 15 Types • Java est fortement typé • en C++: int i; short j; i = j; • en Java, il faut caster: int i; Short j; i = (int) j; 5 Déclarations • Variables (similaires): int entier; • Constantes: java: final int entier = 0; C++: const intentier = 0; Jour 1 16 Structures de contrôle • Conditionnelles: If switch • Boucles: Pas d’instruction goto en Java For while do while Jour 1 17 Structure if • if (condition) {bloc1} else {bloc2} • condition: expression logique • Exemple: If (vosVentes >= 2*cible { performance = “excellent”; bonus = 1000; } Jour 1 18 6 Structure switch • switch (choix) { case variable1 : instructions break; case variable2 : instructions break; ………………………. } Jour 1 19 Boucle for • for (expression1; expression2; expression3) { instructions } • for (int i = 10; i > 0; i --) { n = n + i; } Jour 1 20 Boucle while • while (condition) { instructions } • while (I > 0) { n=n+i i --; } Jour 1 21 7 Boucle do while • do { instructions } while (condition); • do { n=n+i i --; } while (i > 0); Jour 1 22 Classes • Mot clé: class • Constructeur mais pas de destructeur Figure int périmètre; int surface; float calculPer( ); float calculSur( ); Jour 1 23 Héritage • Java: l’héritage est public class Exemple extends Exercise • C++: class Exemple: public Exercise • Classe final: final class Exemple on ne peut instancier la classe Jour 1 24 8 Héritage • Pas d ’héritage avec des classes final • C++: public, protected ou private • Java: public Jour 1 25 Classe Object • Classe racine • class Exemple = class Exemple extends Object • Référence un objet de n’importe quel type Jour 1 26 Classe Object Monster FlyingMonster WalkingMonster Jour 1 27 9 Paramètres • C++ : pointeurs • Java: valeurs références références valeurs Jour 1 28 Paramètres • Valeur: void calculerSomme (int x, int y) • Référence: void parseFile (File f) • Pointeurs: void remplirChaine(element *q) Jour 1 29 Surcharge • Surcharge de n’importe quelle méthode • Pas de surcharge des opérateurs • En C++ et Java: fonctions homonymes: respecter la valeur de retour Jour 1 30 10 Visibilité Modifier Classes et interfaces Default Visible dans un package Methodes et variables • • Public Visible Partout • N/A • Protected • Private N/A • • Héritées dans le même package Accessibles dans le même package Accessibles partout Héritées par les sous classes Accessibles dans le même package Non héritées Non accessibles Jour 1 31 Visibilité package One class p public a() protected b() c () private d() P x = new P(); C2 y = new C1(); C2 z = new C2(); package Two class Another1 class C1 class C2 class Another2 Jour 1 32 Classes abstraites • Fonctions non toutes implantées • Mot clé: abstract • C++ : pure virtual methods Jour 1 33 11 Classe Abstraite Tree Class (Abstract) Tree Tree Tree Tree Jour 1 34 Polymorphisme • C++ : méthodes virtuelles pures • Par défaut en Java • liaison dynamique (late binding) Jour 1 35 Plan XML • XML vs HTML • Objectifs de XML • Applications de XML • Structure d’un document XML • Les éléments d’une DTD Jour 1 36 12 XML vs HTML • XML : décrit des langages de balisage • XML est un méta-langage • XML : moyen pour définir des tags et leurs relations • XML : documents structurés sur le Web Jour 1 37 XML vs HTML <table> <tr><td>EMPNO</td><td>ENAME</td><td>JOB</td></tr> <tr><td>7654</td><td>MARTIN</td><td>SALESMAN</td></tr> <tr><td>7788</td><td>SCOTT</td><td>ANALYST</td></tr> </table> Jour 1 38 XML vs HTML <?xml version="1.0"?> <EMPLIST> <EMP> <EMPNO>7654</EMPNO> <ENAME>MARTIN</ENAME> <JOB>SALESMAN</JOB> </EMP> <EMP> <EMPNO>7788</EMPNO> <ENAME>SCOTT</ENAME> <JOB>ANALYST</JOB> </EMP> </EMPLIST> Jour 1 39 13 XML vs HTML XML HTML Contenue de l’information Présentation du contenu Tags définis par le user Tags fixes Balises de début et de fin <P> et <B> non pas de balises de fin Navigateurs n’ont pas cette contrainte Noms d’éléments et d’attributs ne sont pas case sensitive Attributs avec quote ou double quote Noms d’éléments et d’attributs sont case sensitive Jour 1 40 Objectifs de XML • XML : utilisation sans difficulté sur le net • XML : soutenir une grande variété d’applications • XML : compatible avec SGML Jour 1 41 Objectifs de XML • Documents facile à traiter (des programmes) • Le nombre d’options doit être réduit au minimum • Les documents devraient être lisibles par l ’homme • Les documents raisonnablement clairs Jour 1 42 14 Objectifs de XML • Un document XML devrait être conçu rapidement • La conception doit être formelle et concise • Création facile de documents XML Jour 1 43 Applications de XML • Navigation et applications hétérogènes • Distribution des traitements • Différentes vues pour différents utilisateurs • Communication entre agents Jour 1 44 Jour 1 45 Applications de XML • Intégration d’applications • Définition d’ontologies • Commerce électronique 15 Applications de XML • CML (Chemical Markup Langage) • MathML (Mathematical Markup Langage) • Traitement automatique de données Jour 1 46 Structure d’un document XML <?xml version="1.0"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> Jour 1 47 Structure d’un document XML • <?xml version="1.0"?> : la version de XML utilisée • <note> : la racine du document • Les autres éléments sont les enfants de la racine Jour 1 48 16 Structure d’un document XML • HTML : <p>C’est un paragraphe <p>Voici un autre paragraphe • XML: <p>This is a paragraph</p> <p>This is another Jour 1 49 paragraph</p> Structure d’un document XML • Les tags sont case sensitive: <Message>This is incorrect</message> : non correcte <message>This is correct</message>: correcte • Les tags doivent être correctement imbriqués: HTML: <b><i>Ce texte est en gras et italique</b></i> XML: <b><i> Ce texte est en gras et italique </i></b> Jour 1 50 Structure d’un document XML • Tout document XML doit avoir une racine: <racine> <fils> <sousfils> </sousfils> </fils> </racine> Jour 1 51 17 Structure d’un document XML • Les attributs d’un tag doivent être entre quôtes: <?xml version="1.0"?> <note date="12/11/99"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> Jour 1 52 Structure d’un document XML • Eléments vs Attributs: Avec attributs: Sans attributs: <person sex="female "> <person> <firstname >Anna</firstname> <sex>female </sex> <lastname>Smith</lastname> <firstname >Anna</firstname> </person> <lastname>Smith</lastname> </person> Jour 1 53 Structure d’un document XML • Les attributs ne peuvent pas avoir plusieurs valeurs • Les attributs ne décrivent pas une structure • Les attributs sont plus difficiles à manipuler par les programmes Jour 1 54 18 Structure d’un document XML • Pour valider un document XML, il faut une DTD • DTD: Definition Type Document • Elle doit être référencée dans le document XML: <?xml version="1.0"?> <!DOCTYPE note SYSTEM "InternalNote.dtd"> Jour 1 55 Constituants d’une DTD • Définir la structure d’un document XML • DTD interne • DTD externe Jour 1 56 DTD interne <?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> … </note> Jour 1 57 19 Interprétation de la DTD • <!DOCTYPE note : Défini la racine du document • <!ELEMENT note (to,from,heading,body)> : défini une balise note • Les fils de note sont: to, from, heading, body • <!ELEMENT to (#PCDATA)> : déclarer l’élément to et informe qu’il renferme du texte (#PCDATA) Jour 1 58 DTD externe • Déclaration : <?xml version="1.0"?> <!DOCTYPE note SYSTEM "InternalNote.dtd"> <note> ….. <note> • <!DOCTYPE note SYSTEM "InternalNote.dtd"> : note: est la racine du document InternalNote.dtd: le fichier qui contient la DTD externe Jour 1 59 DTD externe • Structure : <?xml version="1.0"?> <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> Jour 1 60 20 Les constituants d’u document XML • Eléments • Tags • Attributs • Entités • PCDATA • CDATA Jour 1 61 Eléments • Block principal d’un document XML • Exemple: note, body • Il peut contenir d’autres éléments, texte ou être vide (br) Jour 1 62 Tags • Délimiteurs d’éléments • Tag de début et Tag de fin pour délimiter le contenu d’un éléme • <body> corps de texte </body> Jour 1 63 21 Attributs • Des informations extra concernant l’élément • Ils sont placés dans le Tag de début d’un élément • <img src="computer.gif"> Élément: img Attribut: src, valeur: computer.gif Jour 1 64 PCDATA • PCDATA: Parsed Character Data • le texte sera parsé • Les tags à l’intérieur du texte seront parsés Jour 1 65 CDATA • CDATA: Character Data • Le texte ne sera pas parsé • Les tags à l’intérieur du texte ne seront pas parsés Jour 1 66 22 Déclaration d’éléments • <!ELEMENT element-name (element-content)> • Un élément déclaré vide: <!ELEMENT element-name (EMPTY)> exemple: <!ELEMENT img (EMPTY)> Jour 1 67 Déclaration d’éléments • Élément avec des données: <!ELEMENT element-name (#CDATA)> ou <!ELEMENT element-name (#PCDATA)> ou <!ELEMENT element-name (ANY)> exemple:<!ELEMENT note (#PCDATA)> Jour 1 68 Déclaration d’éléments • Élément avec des sous éléments: <!ELEMENT element-name (child -element-name ,.....)> exemple: <!ELEMENT note (to,from,heading,body)> • Les sous éléments doivent apparaître dans le même ordre Jour 1 69 23 Déclaration d’éléments <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#CDATA)> <!ELEMENT from (#CDATA)> <!ELEMENT heading (#CDATA)> <!ELEMENT body (#CDATA)> Jour 1 70 Déclaration d’éléments • Une seule occurrence d’un sous élément: <!ELEMENT element-name (child -name)> Exemple: <!ELEMENT note (body)> • Au minimum une occurrence: <!ELEMENT element-name (child -name+)> exemple<!ELEMENT note (body+)> Jour 1 71 Déclaration d’éléments • Zéro ou plusieurs occurrences d’un sous élément: <!ELEMENT element-name (child -name*)> Exemple: <!ELEMENT note (body*)> • Zéro ou une occurrence: <!ELEMENT element-name (child -name?)> exemple<!ELEMENT note (body?)> Jour 1 72 24 Déclaration d’éléments • <!ELEMENT note (to+,from,header,body*,#PCDATA)> • Au moins un to • Un seul header • Zéro ou plusieurs body • et du texte qu’on peut parser Jour 1 73 Déclaration d’attributs • Un attribut est déclaré avec la déclaration ATTLIST • <!ATTLIST element-name attribute-name attribute-type default-value> • Type: CDATA, ID, énumération, etc… • Valeur par défaut: #REQUIRED, #FIXED value, etc… Jour 1 74 Déclaration d’attributs • DTD exemple: <!ELEMENT square EMPTY> <!ATTLIST square width CDATA "0"> • XML exemple: <square width="100"></square> Jour 1 75 25 Déclaration d’attributs • Valeur par défaut: Syntaxe: <!ATTLIST element-name attribute-name CDATA "default-value"> DTD exemple : <!ATTLIST payment type CDATA "check"> XML exemple : <payment type="check"> Jour 1 76 Déclaration d’attributs • Attribut obligatoire: Syntaxe: <!ATTLIST element-name attribute_name attribute-type #REQUIRED> DTD exemple : <!ATTLIST person number CDATA #REQUIRED> XML exemple : <person number="5677"> Jour 1 77 Déclaration d’attributs • Attribut énumératif: Syntaxe: <!ATTLIST element-name attribute-name (eval|eval|..) default-value> DTD exemple : <!ATTLIST payment type (check|cash) "cash"> XML exemple : <payment type="check"> or <payment type="cash"> Jour 1 78 26 Les entités • Remplacer un texte qui se répète • Entités internes • Entités externes Jour 1 79 Les entités internes Syntaxe: <!ENTITY entity-name "entity-value"> DTD Exemple : <!ENTITY writer "Jan Egil Refsnes."> <!ENTITY copyright "Copyright XML101."> XML exemple: <author>&writer;&copyright;</author> Jour 1 80 Les entités externes Syntaxe: <!ENTITY entity-name SYSTEM "URI/URL"> DTD Example : <!ENTITY writer SYSTEM "http://www.xml101.com/entities/entities.xml "> <!ENTITY copyright SYSTEM "http://www.xml101.com/entities/entities.dtd"> XML exemple: <author>&writer;&copyright;</author> Jour 1 81 27