
Ntic.
Introduction aux nouvelles technologies
| 
Table des matières:
Concepts Objet
Le concept objet est né il y a environ 20 ans, et mis en oeuvre par le langage de programmation SIMULA(Langage de simulation) en Norvège .
La technologie Objet est basée sur trois éléments majeurs :
Introduction aux Objets :
Le concept objet logiciel est né du besoin de modéliser des objets du monde réel.
Un objet est un "paquet" logiciel qui contient une série de procédures et de données reliées. Dans l'approche orientée objet les procédures sont des méthodes et les données des variables ou attributs.
Représentation commune d'un
objet :
|
| 
Tout objet du mode réel peut être représenter par un objet, qu'il s'agisse d'un objet vivant, ou d'un objet construit.
Par exemple, prenons un véhicule industriel à automatiser. - Un véhicule possède plusieurs comportements : avancer, reculer, charger des éléments, ... - Un véhicule possède des caractéristiques propres : Vitesse, poids, taille, résistance, ...
Pour représenter ce véhicule dans l'approche
objet :
- Les comportements seront représentés par des méthodes.
- Les caractéristiques seront représentées
par des variables.
Exemple

En Conclusion :
L'on peut dire que chaque objet est un module
indépendant, et qu'il est donc possible de définir autant
de module que l'on souhaite, ce qui les rends indépendants les
uns des autres.
Post Scriptum :
Pourquoi un programme ou un utilisateur sur AS/400
est appelé Objet ?
Sur un objet, le fait que les méthodes soient placées
AUTOURS des données, indiquent qu"elles sont là pour
protéger les données rendant leur manipulation impossible
de l'extérieur, elles sont les seules (les méthodes)
habilitées à cette manipulation. On appelle cela l'encapsulation.
(regardez une liste de compilation RPG .....).
L'OS/400 est un des seul système d'exploitation
à protéger aussi fortement les données qu'il
stocke.
Sur la plupart des OS, la notion de type ou d'extension existe,
impliquant un comportement de ce dernier, mais avec des OS comme Unix
ou Windows, il est possible :
- d'éditer un exécutable ou un profil
utilisateur (sur unix)
sur OS/400, la méthode "open" n'existe pas, sauf sur l'objet
fichier (base de données)
- de changer l'extension d'un fichier (introduction de virus)
pas sur OS/400, un fichier ne peut pas devenir un programme, etc..
- de créer ses propres extensions (sans traitement
particulier associé)
|
| 
Introduction aux Messages :
Les objets du monde réel interagissent
entre eux pour effectuer une multitude de tâche. Les messages ont
été inventés pour matérialiser ce besoin.
Un message est
le support de communication entre les objets. Un message est
composé d'un nom objet suivi d'un nom de
méthode, et il peut être porteur d'informations
supplémentaires qui sont les paramètres.
Exemple de message entre deux objets:
Faire déplacer un véhicule automatique vers un
emplacement :
 |
Emetteur
|
|
Véhicule A |
DéplacerVers |
Emplacement 12 |
Objet |
Méthode |
Paramètre |
|

Message
|
|
 |
Récepteur |
|
Dans l'exemple ci-dessus, le récepteur est l'objet
véhicule automatique, l'émetteur peut être un objet
d'une application X.
Conclusion :
L'approche orientée objet
consiste donc en un certain nombre d'objets interagissant entre eux par
le biais de messages.
|
| 
Introduction aux Classes :
Un objet peut avoir plusieurs représentations dans une action particulière. Par exemple, il est possible d'avoir plusieurs véhicules automatiques dans une usine. Pour gérer ce genre de situation, il n'est pas pensable de dupliquer en terme de code autant de fois le même objet que l'on doit avoir de représentations.
Une classe est un modèle qui définit les méthodes et les variables à inclure dans un type d'objet particulier. On ne décrit ces méthodes et ces variables qu'une seule fois. Les objets appartenant à cette classes, que l'on appelle instance de la classes, ne contiennent que des valeurs propres à leurs variables
Dans cette représentation, trois véhicules automatiques représentent des instances de la classe Véhicule Automatique. Chaque véhicule possède ces propres valeurs. Exemple Le premier a une vitesse maxi de 20 Km/h le second de 12Km/h ...
Un objet est donc une instance d'une classes donnée. L'ensemble du code est contenu dans la classe. Dans l'approche objet, l'on crée des classes, et ce sont les instances de classes qui sont exécutées.
|
|
Introduction à l'Héritage :
L'objectif est de pouvoir définir des classes en fonction de la définition d'autres classes. L'héritage est un mécanisme par lequel on définit une classe d'objet comme étant un cas particulier d'une classe plus générale. On appelle sous-classes les cas particuliers d'une classe, et super-classe la classe générale de ces cas particuliers.
Exemple

Les classes peuvent être imbriquées à l'infini, et l'héritage s'accumule automatiquement. Cette structure est arborescente et s'appelle une hiérarchie de classe. C'est grâce à l'héritage que l'on obtient une réelle "réutilisabilité" du code, une maintenance facilité et surtout une grande évolutivité. Toutes les sous-classes héritent d'une nouvelle fonctionnalité écrite dans la super-classe.
|
|
Introduction à la Surcharge:
La surcharge est le mécanisme qui permet d'utiliser le même nom de méthode dans la même classe ou dans desclasses différentes mais liées, pour effectuer des actions différentes.
Un langage de programmation classique exigerait de donner des noms uniques à toutes les commandes logicielles permettant de dessiner les formes de l'exemple précédent (dessinerCercle, dessinerCarre, ...). Dans une approche objet, chaque forme est représentée par une classe différente. Grâce à la surcharge, on pourra utiliser le même nom pour les méthodes permettant de dessiner, à l'intérieur de chacune des classes.
Il devient donc possible d'avoir un programme générique qui appelle la méthode dessiner quelque soit la forme. Ce mécanisme permet donc de mettre au point le programme générique sans connaître la totalité des formes disponibles.
Introduction au Polymorphisme :
On appelle polymorphisme le fait de dissimuler des procédures différentes derrière la même interface. Le polymorphisme caractérise la possibilité de définir plusieurs fonctions de même nom mais possédant des paramètres différents (en nombre et/ou en type), si bien que la bonne fonction sera choisie en fonction de ses paramètres lors de l'appel.
Le polymorphisme rend possible le choix automatique de la bonne méthode à adopter en fonction du type de donnée passée en paramètre.
Exemple : un jeu d'échec comportant des objets fou, roi, tour,...
La méthode mouvement() pourra, grâce au polymorphisme, effectuer le mouvement approprié le mouvement approprié d'une pièce grâce au type de pièce qui lui sera fourni en paramètre.
|
|
Concept avancé : De façon à assurer l'intégrité du fonctionnement d'une classe, d'une méthode ou de la valeur d'une variable,le concept objet permet de spécifier le niveau d'isolement. C'est à dire que l'on peut interdire de modifier une méthode ou une variable , d'appeler une méthode...
- Les classes :
- public : Classe accessible par tout les objets
- protected : Classe visible par les objets de son paquetage
- abstract : Classe abstraite ne pouvant être
instancié
- final : Classe ne pouvant être super-classe
- Les méthodes :
- Public : Méthode visible par tous les objets
- Private : Méthode non visible par les objets
- Protected : Méthode visible pour une sous-classe
mais non modifiable
- Static : Méthode ne pouvant être
surchargé
- final : Méthode ne pouvant être
surchargée
- Les variables :
- Public : Accessible et modifiable
- Private : non accessible
- Protected : non modifiable
- Static : Constante
- final : Constante
|
lien : introduction à la POO
|
SGBDR OO
SQL3, dernière norme SQL, introduit de nouveaux
concepts :
- les types de données LARGES ou
BLOB: images, video, ...(jusqu'à 2GO sur AS/400)
- les DATALINK (ou URL) [extension
DB2 ]
- les fonctions définies par l'utilisateur (UDF)
- les types définis par l'utilisateur (UDT)
ils sont créés par : CREATE DISTINCT TYPE IMAGE AS BLOB(512K) CREATE DISTINCT TYPE EUROS AS DECIMAL(9, 2) CREATE DISTINCT TYPE FRANCS AS DECIMAL(9, 2)
* Oracle admet les types composés (structure)
vous pouvez maintenant créer une table par CREATE TABLE VOITURES (CODE CHAR(10) NOT NULL PRIMARY KEY, PRIXf FRANCS NOT NULL, PRIXe EUROS, PHOTO IMAGE) la particularité de ces types est qu'ils sont fortement typés (considérés comme des objets) c'est à dire que l'on ne PEUT PAS COMPARER DES FRANCS et DES EUROS. WHERE PRIXF > PRIXE est syntaxiquement invalide !!! WHERE PRIXF > 10000 aussi ! seules des FONCTIONS supportant ces types sont habilitées à les manipuler. on parle alors de SGBDR-OO (ou orientés objet) Avec DB2/400 le système assure une convertion avec le type d'origine (CAST ou le-type) : WHERE PRIXF > FRANCS(10000)
pour la comparaison prixe / prixf le plus simple est d'écrire des fonctions une fonction de convertion francs/euros une fonction de convertion euros/francs create function af4test/franc_euros (VALEUR FRANCS) returns EUROS LANGUAGE SQL RETURNS NULL ON NULL INPUT STATIC DISPATCH BEGIN DECLARE VALEUROS DECIMAL ( 9 , 2 ) ; SET VALEUROS = CAST(VALEUR as decimal(9,2) ) / 6.55957; RETURN CAST(VALEUROS as euros); END;
|
|
Java
Déclaration d'une classe :
Représentation d'une classe
Voiture |
classe |
... poids vitesseMaxi puissanceFisc puissanceDin ...
|
Etats
(attributs) |
... passerVitesse accelérer freiner ouvrir ...
|
Comportements
(méthodes) |
Syntaxe de la déclaration d'une classe : [<modificateurs d'accès>] class <nom de la classe> [<extends ou implements>] [<nom super-classe ou de l'interface>]
<modificateurs d'accès>
|
Option facultative mots clés java qui affectent l'accessibilité de la classe public : classe visible et modifiable protected : classe visible non modifiable private : classe non visible
|
class
|
Mot clé identifiant la
création d'une classe |
<extends> <nom de la super-classe>
|
Option facultative
Permet d'indiquer que la classe hérite d'une autre classe |
<implements> <nom de l'interface |
Option facultative
Permet d'indiquer le nom de l'interface à utiliser. |
Exemple : Déclaration de la classe voiture class Voiture(){}
Toutes les classes héritent automatiquement d'une classe maître : la classe Object.
|
| 
Création d'un objet : Opérateur new
Représentation des instances de classes
Instance 1
Voiture
|
... poids=1200 puissanceFisc=6 puissanceDin=110 vitesseMaxi=190 vitesseCourante=5 marque="Peugeot" ...
|
...
|
|
Instance 2
Voiture
|
... poids=800 puissanceFisc=4 puissanceDin=60 vitesseMaxi=140 vitesseCourante=4 marque="Renault" ...
|
...
|
|
|
Pour créer une instance, il faut utiliser l'opérateur new et un des constructeurs de la classe. Exemple : Voiture monAuto = new Voiture();
Destruction d'un objet :
La création d'un objet provoque une allocation mémoire. Les langages objets
existant avant java (C++,...), obligent le développeur à gérer la mémoire :
Allocation, libération.
La machine virtuelle java gère la mémoire de façon automatique et dynamique.
L'utilisation de l'opérateur new provoque une allocation mémoire.
Un processus appelé ramasse-miettes (Garbage Collector), s'occupe de
libérer la mémoire.
Tous les objets qui ne sont plus utilisés dans les programmes sont détruits.
|
| 
Accès aux variables et méthodes
d'un objet
Cette opération s'effectue à l'aide de l'opérateur ".". Pour accéder à une variable ou une méthode d'un objet, il suffit de placer un point (.) entre l'identificateur de l'objet et la variable ou la méthode. Syntaxe : <nom de l'objet>.<nom de la variable>; <nom de l'objet>.<nom de la méthode>([<paramètres>]); Exemple : Voiture monAuto = new Voiture(); monAuto.passerVitesse(2); System.out.println(monAuto.vitesseCourante);
Attributs et Méthodes d'une classe
Une classe contient deux types d'éléments :
- Des Attributs ( = variables )
- Des Méthodes ( = procédures ou fonctions)
Les attributs
Un attribut est une valeur de donnée d'un objet ou d'une classe, qui représente
un état de cet objet ou de cette classe.
On distingue deux types de variables
- Variables d'instance
- Variable de classe
Variable d'instance : La valeur d'une variable d'instance n'est connue que de l'instance dans laquelle elle se trouve. Syntaxe : <modificateur d'accès> <type> <nom de la variable> [= <valeur>]; Exemple : public int vitesseCourante = 0 ; public double vitesseMaxi ; public String marque ;
Variable de classe : La valeur d'une variable de classe est la même pour toutes les instances de cette classe. En clair il s'agit d'une constante. Syntaxe : static <modificateur d'accès> <type> <nom de la variable> = <valeur> ; Exemple : static public int nombreDeRoues = 4 ; static public String avertissement = "RESTEZ CONCENTRÉ";
Les méthodes
Une méthode représente un comportement de l'objet.
Les méthodes de notre classe voiture pourraient être
- passer une vitesse
- accélérer
- ralentir
- freiner
- démarrer
Il y a deux types de méthodes :
- Les procédures : Bloc d'instructions qui ne retourne pas de valeur - Les fonctions : Bloc d'instructions qui retourne une valeur La déclaration de la méthode va définir son rôle : procédure ou fonction Syntaxe d'une procédure: [<modificateur d'accès>] void <nom de la méthode>([<paramètres>]){ <Séquence d'instructions> } Exemple : public void demarrer(){ <séquence instructions> } public void passerVitesse(){ int vitesse = vitesseCourante; vitesse++; vitesseCourante = vitesse; }
Syntaxe d'une fonction: <modificateur d'accès> <type de retour> <nom de la méthode>([<paramètres>]){ <Séquence d'instructions> return <valeur> } Exemple : public int prochaineVidange(){ int nbVidange = nbKmCourant/nbKmMax; if(nbVidange==0)nbVidange = 1; return (nbKmMax*nbVidange)-nbKmCourant; }
|
| 
Méthode Constructeurs :
Une classe java peut contenir une ou plusieurs méthodes appelées constructeurs. Un constructeur est une méthode appelé par la JVM au moment de l'instanciation de la classe, c'est à dire à l'utilisation de l'opérateur new. Cette méthode va permettre notamment d'initialiser les variables. La déclaration d'une méthode constructeur ne différe pas d'une méthode classique, mais impose quelques règles. - Le nom du constructeur doit être identique au nom de la classe. (Respecter la casse) - Un constructeur ne retourne pas de valeur. - Il ne faut pas utiliser le mot clé void qui est implicite.
Syntaxe d'une fonction: <nom de la classe>([<paramètres>]){ Exemple : public class Voiture(){ public int vitesseCourante = 0; public String marque; Voiture(){} Voiture(String nouvelleMarque){ marque = nouvelleMarque; } }
Dans l'exemple, on trouve deux constructeurs. Ces deux constructeurs vont
permettre différentes façons d'instancier la classe voiture.
public Voiture auto1 = new Voiture(); public Voiture auto2 = new Voiture("Peugeot");
Méthode Destructeur ou de finalisation :
De la même façon qu'il existe un type de méthode appelée par la JVM lors de l'instanciation de la classe,il existe une méthode particulière qui est appelée par la JVM lors de la destruction de l'objet, c'est à dire au moment ou le ramasse-miettes détruit l'objet.. Cette méthode va permettre notamment de libérer toutes les références à d'autres objets .... La méthode s'appelle finalize. Cette méthode est déclarée dans la classe object. Comme toutes les classe héritent de la classe object, il faut redéfinir de façon exact cette méthode : protected finalize()throws Throwable{ }
|
|
Les méthodes d'accès ("getteur"
et "setteur") :
Par convention (et non par obligation!!), les développeurs java s'interdisent d'acccéder directement à un attribut. Pour chaque attribut, il est conseillé de définir deux méthodes - La méthode get retourne la valeur de l'attribut. - La méthode set permet d'attribuer une valeur à l'attribut. L'intérêt de ces accesseurs résident dans la sécurité. Il devient facile de contrôler la mise à jour des attributs de votre classe de façon à interdire certaine valeur (par l'intermédiare de la méthode set). De plus si pour des raisons fonctionnelles, un attribut doit obéir à une règle de gestion avant d' être mise à disposition des autres objets, il vous suffit de modifier la méthode get. Il est conseillé de définir les attributs avec le mot clé private et de créer les accesseurs. Exemple : public Class Voiture(){ private int vitesseCourante = 0; private String marque; public int getVitesseCourante(){ return vitessCourante; }
public void setVitesseCourante(int nouvelleVitesse){ vitessCourante = nouvelleVitesse; } }
|
|
Surcharge des méthodes:
La surcharge de méthode consiste à déclarer dans une même classe plusieurs méthodes qui portent le même nom, mais avec des paramètres différents. Le meilleur exemple de surcharge des méthodes, est la déclaration de plusieurs constructeurs. Cela permet, lors de la création de l'instance de pouvoir disposer de méthodes qui vont construire l'objet de manières différentes.
Héritage :
L'héritage permet à une classe d'hériter de l'ensemble des méthodes et
attributs d'une autre classe sans avoir à réécrire le code de cette classe.
Une classe héritée est une super-classe, alors qu'une classe qui hérite est appelée sous-classe
Exemple :
- La classe A est la super classe de la classe B et de la classe C
- La classe B et C sont des sous-classes de la classe A
- La classe D et E sont des sous-classes de la classe B,
qui est elle même une sous-classes de la classe A
- La classe A est une sous-classe de la classe Object
Syntaxe :
<modificateurs d'accès> class <nom de la classe>() extends <nom super-classe> {} Exemple: public class Voiture() extends Vehicule{}
|
|
Polymorphisme :
Le polymorphisme est la possibilité pour deux objets, ayant un lien d'héritage,
de posséder la même méthode avec des implémentations différentes.
Le mécanisme d'héritage impose à la JVM de remonter la hiérarchie de classe pour trouver les méthodes qui ne sont pas présentes dans la classe en cours.
|
|
Les packages :
Pour faciliter la réutilisation du code existant, Java propose de regrouper
les classes dans des packages.
Les classes sont des fichiers, et les packages des répertoires.
L'objectif des packages est d'ordonner les classes de façon logique.
Exemple par les classe du JDK :
java.io.* : Classes gérant les entrées-sorties
java.net.* : Classes gérant les accès réseaux
java.util.* : Classes utilitaires
Quand vous voulez utiliser les fonctionnalités d'une classe dans vos programmes,
il faut indiquer au compilateur java dans quel package se trouve cette classe.
Cette opération se fait par le mot clé import. Exemple :
import java.util.*; public class Voiture() extends Véhicule{}
Création de ces propres package :
Pour déclarer un package, il suffit d'indiquer le mot clé package avant de déclarer la classe. Exemple :
package volubis; import java.util.*; public class Voiture() extends Véhicule{}
|
UML
|
La modélisation objet consiste à créer
une représentation informatique des éléments du
monde réel auxquels on s'intéresse, sans se
préoccuper de l'implémentation, ce qui signifie
indépendamment d'un langage de programmation. Il s'agit donc de
déterminer les objets présents et d'isoler leurs
données et les fonctions qui les utilisent. Pour cela des
méthodes ont été mises au point. Entre 1970 et
1990, de nombreux analystes ont mis au point des approches
orientées objets, si bien qu'en 1994 il existait plus de 50
méthodes objet. Toutefois seules 3 méthodes ont
véritablement émergées:
- La méthode OMT de Rumbaugh
La méthode BOOCH'93 de Booch
La méthode OOSE de Jacobson (Object Oriented Software
Engineering)
A partir de 1994, Rumbaugh et Booch (rejoints en 1995 par Jacobson) ont
unis leurs efforts pour mettre au point la méthode
unifiée (unified method 0.8), incorporant les avantages de
chacunes des méthodes précédentes.
La méthode unifiée à partir de la version 1.0
devient UML (Unified Modeling Language), une notation universelle pour
la modélisation objet. (ainsi que celles d'autres analystes).
UML 1.0 est soumise à l'OMG (Object Management Group)
en janvier 1997, mais elle ne sera acceptée qu'en novembre 1997
dans sa version 1.1, date à partir de laquelle UML devient un
standard international.
|
|
Modélisation des données : Diagramme de classe
Dans cette partie nous allons présenter les notations
de base de la méthode UML :
Note
Une note est un commentaire placé sur un diagramme.
Elle est attachée au diagramme plutôt qu'à un
élément du modèle (à moins qu'elle ne soit
stéréotypée pour être une contrainte - la
notion de stéréotype sera présentée plus
tard).
Exemple : 
Classe
Une classe est le descripteur d'un ensemble d'objets qui ont
une structure, un comportement et des relations similaires.
Voici les différentes notations graphiques d'un classe,
en fonction du niveau de détail exigé :
Exemple :
Visibilité
Un attribut (ou une opération) est
représenté par une chaîne de caractères, qui
peut être qualifiée par les différentes
propriétés d'un attribut d'élément du
modèle.
Voici les différents visibilité d'un
élément :
- + Public
- # Protégé
- - Privé
Associations
Les associations binaires sont représentées par
des lignes connectant les symboles des classes. Les associations
ternaires (et plus) sont représentées par un diamant
connecté par des lignes aux symboles des classes.
La terminaison d'une association où elle se connecte
à une classe est appelée "rôle d'association".
La plupart de l'information intéressante à propos d'une
association, est attachée à ses rôles (entre
autres, la cardinalité).
Exemple 1
Exemple 2 
Éléments du schéma :
- Nom d'association : "Travaille pour"
- Classe d'association : "Travail"
- Nom des rôles d'association : "Employeur et
Employé"
Cardinalités
Exemple de cardinalité
- 1
- 0..*
- 1..*
- 0..1
- 2..5
- 1..3,7..10,15,19..*
Quelques commentaires :
- Les intervalles doivent être notés en ordre
croissant : "1..3,7,10" est préférable à
"7,10,1..3".
- Deux intervalles continus doivent être
combinés en un seul intervalle : "0..1" est
préférable à "0,1".
- Les notations suivantes sont équivalentes : "*" ,
"0..* ", "*..*"
Contraintes
Une contrainte est une relation sémantique entre des
éléments du modèle qui spécifie les
conditions et les propositions qui doivent être respectées
(sinon le système décrit par le modèle est
invalide, avec des conséquences qui sont en-dehors des
attributions d'UML). Certains types de contrainte (comme une contrainte
d'association "ou") sont prédéfinis dans UML, les autres
doivent être définis par les utilisateurs.
Une contrainte est représentée par un texte
entre crochets ( {} ). UML ne prescrit pas le langage dans lequel la
contrainte doit être écrite.
Exemple 1 :
Exemple 2 :
Les éléments dérivés
Un élément dérivé est un
élément qui peut être calculé à
partir d'un autre, mais qui est montré pour la clarté, ou
qui est inclus pour des raisons de conception même si il
n'apporte aucune information sémantique.
Notation
Un élément dérivé est
représenter en plaçant un `slash` (/) devant le nom de
l'élément dérivé, comme un attribut ou un
nom de rôle.
Exemple 
Généralisation et Héritage
La généralisation ou héritage est une relation
de classification, ordonnée, entre un élément plus
général, et un élément plus spécifique
qui est pleinement consistante avec le premier élément
et qui ajoute des informations supplémentaires, complémentaires.

Comparaison des méthodes de modélisation de donnée
Points communs entre les différentes méthodes

|
|
liens uml.free.fr
| Link
on Objetcs & Components/oo_uml.html | Rational Software
XML
Soit une liste des cours AF400( en HTML)
<h3>Liste des cours AF400 (© Volubis)</h3> <ul> <li>£C01.120 <em>(module £cursuspgm)</em> ESPACE ADRESSABLE UNIQUE</li> <li>£C01.130 <em>(module £cursuspgm)</em> INIT OS/400 (notion d'objet, bibliothèque)</li> <li>etc...</li> </ul>
|
ce qui s'affiche :
Liste des cours AF400 (© Volubis)
- £C01.120 (module £cursuspgm) ESPACE
ADRESSABLE UNIQUE
- £C01.130 (module £cursuspgm) INIT OS/400
(notion d'objet, bibliothèque)
- etc...
imaginons maintenant la même liste XML

(voir le fichier
complet, le source du pgm
ayant réalisé cela)
Voici la manière dont WDS client, montre ce
fichier :

Les règles du jeu XML
Elles sont extrêmement simples. Les informations doivent
être :
- soit encadrées par des balises ouvrantes(ex. <LIVRE>) et fermantes
(ex. </LIVRE>) (contrairement à HTML où
ses ces dernières n'étaient pas toujours obligatoires).
On parle alors d'éléments. Les éléments
doivent s'imbriquer proprement les uns dans les autres : aucun chevauchement
n'est autorisé. Les éléments vides sont permis,
selon le format <ELEMENTVIDE/>.
- soit incluses à l'intérieur même des balises : on parle
alors d'attributs. Exemple : <LIVRE SUJET="XML">. Ici
l'attribut SUJET de l'élément LIVRE a la valeur "XML" . En XML,
contrairemet à HTML, les valeurs des entités doivent toujours
être encadrées par des guillemets (simples ou doubles).
- Soit encore définies sous forme d'entités. Les entités
sont des abréviations. Par ex; si "Extensible Markup Language" est
déclaré comme une entité associée à la
notation "xml"; cette chaîne de caractères pourra être
abrégée en "&xml;" dans tout le fichier XML.
Une entité peut aussi représenter un fichier XML externe tout
entier. (inclusion de fichier XML)
- La DTD (Définition de Type de Document). La structure arborescente
du document XML (intitulé des balises, imbrications des balises, caractère
obligatoire ou facultatif des balises et de leur ordre de succession) peut
être déclarée formellement dans le corps du document XML
ou dans un fichier séparé.
Cette déclaration s'appelle une Définition de Type de Document
(DTD). Elle s'effectue selon un formalisme particulier défini lui-aussi
dans la spécification XML. En XML cette déclaration est facultative,
ce qui donne une grande souplesse aux développeurs. On n'écrira
donc une DTD que lorsqu'il y aura vraiment intérêt à le
faire (par exemple pour contraindre la saisie/mise à jour du document
XML)
Lorsqu'un document XML possède une DTD associée et la respecte,
on dit qu'il est valide. Lorsqu'il respecte seulement les règles de
la grammaire XML (balises fermées, correctement imbriquées)
on dit qu'il est bien formé.
Ce que XML va rendre possible. XML va permettre :
aux humains :
de saisir (ou mettre à jour) et d'échanger en
une une seule fois un contenu (par ex. notre bibliographie) et un
contenu pur. Autrement dit :
sans se soucier de la présentation ou des traitements futurs ;
sans avoir à saisir des libellés tels que'"auteur",
"année de parution", sans avoir à mettre les titres en
italique — exactement, donc, à la manière dont on
alimenterait une base de données.
Et d'en générer ensuite automatiquement :
de multiples présentations (en tableau, en texte suivi…)
avec éventuellement tris, sélections,
réorganisations, génération automatique de
libellés, tables des matières, index, etc.
et ce sur de multiples médias (écran, papier, terminal
Braille, etc.)
Tout ceci rendu possible par l'indépendance du balisage par
rapport à la présentation.
aux logiciels de comprendre/exploiter au mieux le contenu de ces
pages, rendu désormais explicite par un balisage
spécifique, indépendant de toute application.
La spécification XML ( traduction française) se
trouve à babel.alis.com/web_ml/xml/REC-xml.fr.html
Structure d'une DTD :
- ELEMENT : définition d'un
élément
- le premier argument doit être le nom
de l'élément
- vient ensuite une règle:
- (liste des eléments contenus)
- chaque élément peut être noté
? -> présent 0 ou 1 fois
+ -> présent au moins une fois
* -> présent de 0 à n
fois
- ou bien élément unitaire
- (#CDATA) : donnée élémentaire, mais
pouvant contenir des balises
- (#PCDATA) : donnée élémentaire non
traitées par le parser
- ANY : cet élément peut contenir n'importe
quel donnée
- ATTLIST : défintion des
caractèristiques d'un attribut
- nom de l'élément
- nom de l'attribut
- type d'attrbut
- CDATA : donnée caractères (toute forme de
valeurs admises)
- (val1| val2 |val3 | ....) : la valeur doit être une
des valeurs
- ID : identificateur unique (la valeur doit être
unique dans le document XML)
- valeur par défaut
- une valeur particulière
- #REQUIRED : une valeur est obligatoire
- #IMPLIED : la valeur peut rester non
spécifiée
- #FIXED valeur-imposée : la valeur ne
peut être que valeur-imposée
<! DOCTYPE AF400 [
<!ELEMENT COURS (TEXTE,TYPE,SRCFIL?,SRCLIB?,SRCMBR?,CHEMIN?,SUJET,MOT_DIRECTEUR,DATE) > <!ELEMENT TEXTE (#PCDATA) <!ELEMENT TYPE (#PCDATA) > <!ELEMENT SRCFIL (#PCDATA) > <!ELEMENT SRCLIB (#PCDATA) > <!ELEMENT SRCMBR (#PCDATA) > <!ELEMENT CHEMIN (#PCDATA) > <!ELEMENT SUJET (#PCDATA) > <!ELEMENT MODIRECTEUR (MOTCLE1,MOTCLE2?,MOTCLE3?,MOTCLE4?,MOTCLE5?) > <!ELEMENT DATE (#PCDATA) > <!ELEMENT MOTCLE1 (#PCDATA) > <!ELEMENT MOTCLE2 (#PCDATA) > <!ELEMENT MOTCLE3 (#PCDATA) > <!ELEMENT MOTCLE4 (#PCDATA) > <!ELEMENT MOTCLE5 (#PCDATA) >
<!ATTLIST COURS NOM CDATA #REQUIRED> <!ATTLIST COURS MODULE CDATA #REQUIRED> ]>
|
cette partie de code pouvant être placée dans le
fichier XML, entre :
<?xml version="1.0" encoding="ISO-8859-1"?>
et
< AF400 COPYRIGHT="Volubis">
ou bien référencée par :
<!DOCTYPE COURS SYSTEM "http://www.volubis.fr/cours.dtd">
Une alternative à la notion de DTD, plus puissante est la
notion de schéma.
un schéma est lui même un fichier XML (ayant lui même sa
propre DTD) et qui en décrit un autre.
commencons par une partie d'entète
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:annotation> <xsd:documentation xlm:lang="fr"> XML Schema pour la lsite des cours AF400. </xsd:documentation> </xsd:annotation>
|
puis la partie descriptive en elle même:
<xsd:element name="AF400" type="AF400Type"/>
<xsd:complexType name="AF400Type"> <xsd:sequence> <xsd:element name="COURS" type="CoursType" minOccurs="1"/> </xsd:sequence> </xsd:complexType>
<xsd:complexType name="CoursType"> <xsd:sequence> <xsd:element name="TEXTE" type="xsd:string"/> <xsd:element name="TYPE" type="xsd:string"/> <xsd:element name="SRCFIL" type="xsd:string"/> <xsd:element name="SRCLIB" type="xsd:string"/> <xsd:element name="SRCMBR" type="xsd:string"/> <xsd:element name="CHEMIN" type="xsd:string"/> <xsd:element name="SUJET" type="xsd:string"/> <xsd:element name="MOT-DIRECTEUR type="MotType"/> <xsd:element name="DATE" type="xsd:string"/> </xsd:sequence> < /xsd:complexType>
<xsd:complexType name="MotType"> <xsd:sequence> <xsd:element name="MOTCLE1 type="xsd:string" minOccurs="1"/> <xsd:element name="MOTCLE2 type="xsd:string"/> <xsd:element name="MOTCLE3 type="xsd:string"/> <xsd:element name="MOTCLE4 type="xsd:string"/> <xsd:element name="MOTCLE5 type="xsd:string"/> </xsd:sequence> < /xsd:complexType>
|
On peut définir un élément (xsd:element) ou un
attribut (xsd:attribut), chacun pouvant faire référence
à un type (voyez ici la liste des types admis
dans un schéma XML) comme xsd:nonNegativeNumber
ou bien faire référence à un type définit dans le
scéma.
Les types définis peuvent être :
- xsd:complexType (structure)
- xsd:simpleType (donnée élémentaire, mais subissant,
par exemple, des contrôles particuliers)
Les langages de présentation (style) : CSS et XSL
Comme il a été dit, la philosophie d'XML consiste
à bien séparer les données/documents (le fichier
XML proprement dit) des traitements/présentations. Un document
donné sera, lors de sa création, balisé uniquement
en fonction de son contenu (sa sémantique) intrinsèque et
indépendamment de sa restitution future (papier, écran,
terminal Braille, synthèse vocale ou autre) — comme
d'ailleurs de tout autre traitement automatique qui pourra lui
être appliqué.
Cette indépendance par rapport aux applications qui vont le
traiter en général, et par rapport à celles
chargées de sa restitution en particulier, va lui
conférer :
- une très grande interopérabilité (le
même document XML va pouvoir être affiché sur le Web
et/ou produit en version papier, alimenter un SGBD, etc.)
- une très grande
durabilité/réutilisabilité (le document ne
deviendra pas obsolète avec l'évolution des techniques
informatiques ; il pourra sans difficulté être
incorporé, en tout ou partie, dans des documents de nature
très différente, être traité par des
applications non prévues, voire non-existantes au
départ...).
En ce qui concerne sa restitution, un deuxième degré
d'indépendance par rapport aux applications pourra être
apporté par l'utilisation du langage de transformation
normalisé XSLT (XSL Transformation) qui va
permettre, si nécessaire, de transformer une DTD (un arbre XML)
"orientée contenu" en une autre DTD (un autre arbre XML)
"orientée restitution" (c'est-à-dire constituée
d"objets formateurs" (formatting objects).
C'est à ce niveau que l'ordre de restitution final sera
établi (par exemple, que la bibliographie sera classée
par ordre alphabétique d'auteurs), que les légendes
seront ajoutées, que seront fabriqués automatiquement les
tables des matières, index alphabétiques, liens
(logiques) de navigation, etc.).
On peut même envisager avec XSLT des transformations en PDF,
à destination des Palms, etc...
Voir la spécification à www.w3.org/TR/WD-xslt
Le langage normalisé de feuille de style XSL
(Extensible Style Language) va permettre ensuite de spécifier
comment un type de document (= une DTD "orientée restitution")
donné va être restitué sur un support donné.
C'est à ce niveau que seront réglés les
problèmes du type "saut de page", notes présentées
en bas de page ou en fin de chapitre, etc., que les liens de navigation
seront fabriqués (hyperliens pour les versions
électroniques, renvoi à un n° de page ou de
paragraphe ou de note pour les versions papier...)
Voir la spécification à www.w3.org/TR/WD-xsl
Une feuille de style XSL est appelée à partir d'un
document XML par une "processing instruction" (PI) comme suit :
<?xml-stylesheet
href="biblio.xsl" type="text/xsl" ?> |
Le langage normalisé de feuille de style CSS (Cascading Style
Sheets) déjà utilisé avec HTML, pourra
également être utilisé concurremment où
à la place de XSL.
Une feuille de style CSS est appelée à partir d'un
document XML par :
<?xml-stylesheet
href="biblio.css" type="text/css" ?> |
Exemple :
Fichier XSL destiné au fichier "liste des cours AF400" :

La partie template représente un
modèle de mise en forme HTML et s'applique à l'ensemble
du document (/)
For-each, s'applique à chaque COURS (dans AF400)
l'attribut NOM sera placé entre <H2>
et </H2>, suivi de l'attribut MODULE.
Toujours sous WDS client, réalisons cette transformation :

Résultat :

| 
N-tiers
L'origine de l'informatique est basée sur une
Architecture 1 tiers
 |
 |
Le terminal
|
L'ordinateur central
|
 |
A l'arrivée de la micro-informatique ce
shéma a pu être reproduit en créant des
applications autonomes.
(problèmes de duplication des données) |
Pour conserver la convivialité de l'interface
graphique tout en centralisant les données, on utilise
l'architecture 2 tiers (ou client/serveur) |
 |
revoyons la fameux schéma du gartner's group
lié à cette architecture :
Données
|
Données
|
Données |
Données
|
Données
|
Traitement
|
Traitement
|
|
Traitement
|
|
présentation
|
|
|
|
Données
|
|
|
Traitement |
Traitement
|
Traitement
|
Présentation
|
Présentation
|
Présentation |
Présentation
|
Présentation
|
présentation distribuée
(rewamping) |
présentation distante (X11) |
Gestion distante des données
(client/serveur) |
traitement distribué
(proc. cataloguées) |
bases de données distribuées |
puis vint le réseau
et particulièrement
l'Internet
Le but est de fournir au clients (Internet Explorer, Netscape, Opera
etc...) des pages HTML à afficher.
|
Le standard HTML est un langage SGML (comme UIM sur l'AS/400)
qui est interprété complétement par la navigateur
sur le poste client:
par exemple
voici un texte en <b>GRAS</b> dont une partie est
<font color="#FF0000">
rouge</font><br>(suivi d'un passage à la ligne)
s'affiche :
voici un texte en GRAS dont une partie est rouge
(suivi d'un passage à la ligne)
|
Très vite il a fallut insérer dans ces pages HTML des
données entreprise (commandes en attente, stock disponible
etc...).
Pour cela la norme initiale fut CGI, qui permet l'appel d'un programme
sur le serveur, chargé de générer du HTML en
réponse. La technique est assez rugueuse mais cela fonction (sur
l'AS/400 avec des programmes C ou RPG).
Pour Utiliser CGI en RPG, vous disposez des API suivantes
(GAP4 Uniquement)
- QtmhGetEnv lire le contenu d'une variable
d'environnement
- QtmhRdStin lire STDIN (le flot en
entré)
- QtmhCvtDb découper STDIN suivant le
format d'un fichier BD
- QtmhWrStout écrire dans STDOUT (le
flot en sortie)
vous devez gnérer un flot commencant par :
- "content-type : text/html", suivi par du flot HTMLà afficher.
- "location : http://uuuuuuu", uuuuu étant l'adresse du fichier
à afficher (l'url)
|
Pour alléger l'écriture de pgm CGI, la plupart des
plates-formes proposent des langages de script ou l'on mélange
dans un fichier texte, du HTML, du code (propriétaire) et des
ordres d'accès à la base.
Le fournisseur proposant un pgm CGI déjà écrit
traitant ces fichiers en fournissant au navigateur la page HTML
après avoir remplacé les ordres d'accès aux
données par les données elle même.
Cela s'appelle PHP dans le monde linux (souvent associé
à la base MYSQL), ASP pour Microsoft (avec IIS) et Net.Data avec
les bases DB2 chez IBM.
Net.Data est basé sur la notion de section, une section
représenatnt soit un page HTML
(un fichier Net;Data contenant donc plusieurs pages) ou une fonction
à exécuter (SQL principalement)
Exemple :
%{================================================================%} %{= MACRO NET.DATA =%} %{= =%} %{= affichage d'une liste sans sélection (sans page d'appel) =%} %{= =%} %{= But général : afficher la liste des appellations (BDVIN1) =%} %{================================================================%}
%{****************************************************************%} %{* SQL1: génère la liste des appellations dans un tableau HTML *%} %{****************************************************************%}
%function (DTW_SQL) Fsql1() {
%{* Requête SQL *%} %{*--------------*%} select Appellation, Region_code from BDVIN1.Appellations order by Appellation fetch first 50 rows only
%{* traitement du résultat *%} %{*------------------------*%} %report{ <table border ="1"> <tr> <th><b>Appellation</th> <th>Region_code</th> </tr> {* pour chaque ligne retournée *%} %{*-----------------------------*%} %row{ <tr> <td>$(V1)</td> <td>$(V2)</td> </tr> %} </table> %} %}
%{****************************************************************%} %{* PAGE1: page HTML liste des appellations (utilise SQL1) *%} %{****************************************************************%} %html (page1) { <html> <body> <p align="center"> <font size="5" face = "Arial"><b>LISTE des APPELLATIONS<br></b></font> </p> @Fsql1()
<BR>
</body>
</html>
%}
|
Affiche la liste des 50 premieres appellations vinicoles,
trièes par nom.
- page1 est la page HTML à afficher, (@Fsql1 sera
remplacé par le résultat produit, c'est à dire la
liste elle même.
- Fsql1 est la fonction SQL, lancant l'ordre Select et
mettant en page le résultat.
|
Pour terminer, l'état de l'art est aujourd'hui de travailler
dans une architecture dite 3 tiers, c'est
à dire en découplant le serveur de traitement (les
programmes souvent placés avec le serveur WEB) des
données (pouvant être situées sur un serveur
éloigné).
Cette technique est implémentée avec les serveurs
d'application ou serveurs de servlet.
(Websphere Application Server ou TOMCAT par exemple)
Il s'agit d'écrire des programmes JAVA s'exécutant sur
le serveur et non sur le poste client , le serveur d'application
assurant le lien entre le serveur WEB et la JVM (machine virtuelle
java).Ces programmes java pouvant être des classes autonomes
(servlet) générant du HTML :

ou contenus dans des pages JSP : pages HTML faisant
références à des objets externes [des beans].
Les pages JSP permettant d'intégrer du HTML (conçu par
un graphiste) et du code JAVA (écrit par un développeur)
dans un même fichier.
Aujourd'hui, pour une application WEB, l'architecture logique doit
être :
- 3 tiers
- la couche présentation (html, wap, pda, ...)
- la logique applicative
- un serveur Web (Apache par ex.)
- un serveur d'application rendant possible
l'exécution de
servlets et de pages JSP.
- une base de données (avec eventuellement du
traitement : procédures cataloguées)
un ensemble de normes autour de Java (origine SUN) , représente
l'illustration parfaite de ce modèle : J2EE
- N tiers
- la couche présentation (html, wap, pda, ...)
- la logique applicative
- un serveur Web (Apache par ex.)
- un serveur d'application rendant possible
l'exécution de
servlets et de pages JSP (programmes JAVA tournant
derrière le serveur Web)
- les servlets allant consommer un(des)
service(s) sur n serveurs.
ce service pouvant être :
- un calcul effectué par un serveur
spécialisé.
- un information retournée :
- carte sous forme d'image pour aller d'un point
à un autre (voir MapPoint
de Microsoft)
- un prix retourné par chaque agence de
voyage pour une recherche de billet d'avion
- etc...
- un appel à un programme (utilisant ou non une
base de données), sur un serveur central.
- cette philosophie offrant le grand avantage de :
- réutiliser au maximum (particulièrement les
applications lourdes et historiques),
- d'utiliser chaque système pour ce qu'il sait faire
au mieux (calcul intensif, stockage BD, gestion d'images)
- s'intégrer parfaitement à la notion de portail
> un service rendu, sur les
protocoles standards de l'internet (plus quelques petits nouveau)
est appelé Web Service (au pluriel, Web Services
ou servicizzze avec l'accent).
Les web services sont des briques
logicielles "en ligne" et permettent de créer des applications
distribuées et accessibles depuis n'importe quel navigateur xml.
Ces briques sont référencés dans l'annuaire UDDI,
décrite selon la norme WSDL (dérivée de XML) et
opérent avec d'autres briques selon le protocole SOAP.
|
Quelques définitions dans le monde de l'objet
distribué :
- RMI
Remote Method Invocation. Invocation de méthode distante,
mécanisme permettant d'utiliser sous Java des objets
distribués.
- CORBA
Common Object Request Broker Achitecture. Standard de
gestion d'objets distribués, mis au point par l'OMG, et
rivalisant avec COM de Microsoft. L'objectif est de permettre à
des applications développées dans des langages
différents de communiquer même si elles ne sont pas sur la
même machine. On utilise pour cela essentiellement un IDL et
l'ORB.
- IDL
Interface Definition Language. Langage d'interfaçage des objets
sous Corba
- ORB ou Broker
Dans un environnement à objets, programme
régulant les échanges de messages entre les objets
(broker en anglais). Dans le modèle client-serveur, programme
intermédiaire entre le client et le serveur.
- JINI
Annuaire des objets distribués pour une utilisation de CORBA
dynamique (l'emplacement de l'objet n'étant pas figé).
Norme d'origine SUN , destinée à Java.
- SOAP
Simple Object Access Protocol. Protocole XML d'écriture
des messages à envoyer au serveur. technique conçue (par
Microsoft) pour faire passer du DOM sous forme de XML dans de l'HTTP.
Cela permet de contourner les firewalls. .
- DOM
Document Object Model. Modèle objet de description de documents
spécifié par le W3C et permettant d'accéder au
contenu de documents HTML et XML.
- WSDL
langage normalisé (basé sur XML) décrivant
un service WEB, nous y trouverons :
- le nombre et le type d'argument
- le retour du service (la réponse)
- l'emplacement URL de celui-ci
- UDDI
Universal Description Recovery and Integration.
Annuaire des services Web disponibles.Tous les services, décrits
en WDSL peuvent y être affichés et consultés.
liens : http://www.linux-france.org/prj/jargonf
|
.NET
Il s'agit de la nouvelle architecture proposée
par Microsoft.
Elle est centrée sur les réseaux et les
services WEB (et non plus sur le client) en type n-tiers, et est
basée sur ce schéma :

- les applications sont écrites dans un des langages
supportés par la plateforme et transformées en byte-code
ou langage intermédiaire (comme java).
la langage C# (prononcez "si charpe"),
trés, trés proche de Java, est le langage de
prédilection proposé par Microsoft, mais il existe un
VB.NET, un COBOL.NET, etc...
- les applications utilisent un ensemble de classes livrées
en standard avec le runtime constituant ainsi une plateforme de
développement.
- parmis les classes proposées remarquons :
- ADO.NET, la suite d'ADO lui même successeur d'ODBC pour
les applications client/serveur .
- ASP.NET, notion de serveur d'application lié
directement à IIS (le serveur WEB du même fournisseur)
- A l'exécution, vos applications sont transformées
en code machine par le CLR ou Common Language Runtime (identique
sur le fond à la JVM de Java)
- la plateforme implémente nativement la notion de service
Web (SOAP est une norme proposée par Microsoft)
liens http://www.microsoft.net/france/net/decouvrez/dotnet.asp
Copyright © 1995,2003 VOLUBIS