Développeur Référence v2.12

17
Architectures Technologies Algorithmie Langages Outils Opinions Méthodes v2.12 | 23 avril 2002 www.devreference.net LA LETTRE BIMENSUELLE DU DÉVELOPPEMENT E D I T O Pierre Tran Rédacteur en chef Sommaire Evénemen vénemen vénemen vénemen vénements ts ts ts ts, t t t t tendanc endanc endanc endanc endances es es es es, nouv nouv nouv nouv nouveaux pr eaux pr eaux pr eaux pr eaux produits oduits oduits oduits oduits ................... ................... ................... ................... ................... 2 [suite page 9] Actualité Architecture Méthode Dans la lignée des compara- tifs J2EE vs .NET, notre ami Sami Jaber de DotNetGuru.org nous offre une étude de la per- sistance dans les architectures n-tiers, en comparant cette fois- ci Java Data Object de Sun et ObjectSpaces, le futur framework de persistance pour .NET de Microsoft. Eh oui, .NET ne gère pas (encore) la persistance. Dans ce domaine, Java a pris une certaine avance, mais Microsoft persiste... Pour Bjarne Stroustrup, le C++ reste encore un langage sous-estimé et mal exploité. Découvrez le futur de C++ avec le concepteur de ce langage dans une interview qu'il nous a ac- cordée lors de la conférence OCM 2002 à Nantes, conférence sur laquelle nous faisons un pe- tit retour. CA-world, IBM Developer Works, Microsoft TechEd... les mois à venir seront riches en événements que nous ne man- queront pas de suivre. OCM 2002 OCM 2002 OCM 2002 OCM 2002 OCM 2002 .................................. .................................. .................................. .................................. .................................. 3 Compte-rendu l'édition 2002 de la conférence OCM (Objet, Compo- sants, Modèles). Méthodes A Méthodes A Méthodes A Méthodes A Méthodes Agiles (7) giles (7) giles (7) giles (7) giles (7) Unified P Unified P Unified P Unified P Unified Proc oc oc oc ocess ess ess ess ess ......................... ......................... ......................... ......................... ......................... 6 Dernier volet de notre panorama des méthodes agiles avec Unified Process. Persistanc ersistanc ersistanc ersistanc ersistance sous J2EE et .NET e sous J2EE et .NET e sous J2EE et .NET e sous J2EE et .NET e sous J2EE et .NET .. .. .. .. .. 9 Après avoir présenté ObjectSpaces, le futur framework de persistance pour .NET, nous comparerons l'approche Sun avec JDO et Microsoft avec ObjectSpaces Ressources Annuair Annuair Annuair Annuair Annuaire e e e e Web 2002 eb 2002 eb 2002 eb 2002 eb 2002 du dév du dév du dév du dév du développeur (4) eloppeur (4) eloppeur (4) eloppeur (4) eloppeur (4) Ressour Ressour Ressour Ressour Ressources es es es es Web (1) eb (1) eb (1) eb (1) eb (1) .................. .................. .................. .................. .................. 15 15 15 15 15 Notre sélection de sites pour développeurs sur HTML, CGI/Perl, JavaScript. LA COUCHE DE PERSISTANCE EST LA PARTIE STRATÉGIQUE D'UNE ARCHITECTURE N-TIERS. SI JAVA PROPOSE JDO (JAVA DATA OBJECTS), MICROSOFT S'APPRÊTE À LANCER SON FRAMEWORK DE PERSISTANCE POUR .NET, OBJECTSPACES. APRÈS AVOIR PRÉSENTÉ CE FRAMEWORK, NOUS COMPARERONS LES APPROCHES SUN ET MICROSOFT. L a couche de persistance ou de données est sûre ment la partie la plus stratégique et la plus complexe d'un projet. C'est à cet endroit qu'est confiné l'en- semble des entités de l'application au cœur du métier de l'entreprise (Fac- ture, Comptes…). Mais c'est aussi et surtout dans cette couche que sur- viennent la plupart des problèmes liés aux performances : goulets d'étranglement, requêtes longues, transactions… A travers les années et avec l'ap- parition des architecture n-tiers, cette couche a considérablement évolué pour aujourd'hui laisser place à une approche véritablement objet. Il est bien connu que le monde relationnel et le monde objet ne font pas très bon ménage, et ce pour diverses raisons. Non seulement la granularité des ta- bles n'est pas nécessairement équi- valente à celle des objets, mais l'ap- proche et la conception orientée données d'un côté ne trouve pas d'analogie formelle de l'autre. Bref, tout cela se passe comme si SGBDR et Objets devaient coexister malgré leur différences. In In In In Inter er er er erview : view : view : view : view : Bjarne Str Bjarne Str Bjarne Str Bjarne Str Bjarne Stroustrup oustrup oustrup oustrup oustrup .. .. .. .. .. 4 Rencontre avec l'inventeur du C++ qui nous parle de l'avenir de ce langage.

Transcript of Développeur Référence v2.12

Page 1: Développeur Référence v2.12

Architectures Technologies Algorithmie Langages Outils OpinionsMéthodes

v2.12 | 23 avril 2002www.devreference.net

LA LETTRE

BIMENSUELLE

DU DÉVELOPPEMENT

E D I T O

Pierre Tran

Rédacteur en chef

Sommaire

EEEEEvénemenvénemenvénemenvénemenvénementststststs,,,,, t t t t tendancendancendancendancendanceseseseses,,,,,nouvnouvnouvnouvnouveaux preaux preaux preaux preaux produitsoduitsoduitsoduitsoduits ............................................................................................... 22222

[suite page 9]

A c t u a l i t é

A r c h i t e c t u r e

M é t h o d e

Dans la lignée des compara-tifs J2EE vs .NET, notre amiSami Jaber de DotNetGuru.orgnous offre une étude de la per-sistance dans les architecturesn-tiers, en comparant cette fois-ci Java Data Object de Sun etObjectSpaces, le futurframework de persistance pour.NET de Microsoft. Eh oui,.NET ne gère pas (encore) lapersistance. Dans ce domaine,Java a pris une certaine avance,mais Microsoft persiste...

Pour Bjarne Stroustrup, leC++ reste encore un langagesous-estimé et mal exploité.Découvrez le futur de C++ avecle concepteur de ce langage dansune interview qu'il nous a ac-cordée lors de la conférenceOCM 2002 à Nantes, conférencesur laquelle nous faisons un pe-tit retour.

CA-world, IBM DeveloperWorks, Microsoft TechEd... lesmois à venir seront riches enévénements que nous ne man-queront pas de suivre.

OCM 2002OCM 2002OCM 2002OCM 2002OCM 2002 .......................................................................................................................................................................... 33333Compte-rendu l'édition 2002 de laconférence OCM (Objet, Compo-sants, Modèles).

Méthodes AMéthodes AMéthodes AMéthodes AMéthodes Agiles (7)giles (7)giles (7)giles (7)giles (7)Unified PUnified PUnified PUnified PUnified Prrrrrocococococessessessessess ............................................................................................................................. 66666Dernier volet de notre panorama desméthodes agiles avec Unified Process.

PPPPPersistancersistancersistancersistancersistance sous J2EE et .NETe sous J2EE et .NETe sous J2EE et .NETe sous J2EE et .NETe sous J2EE et .NET .......... 99999Après avoir présenté ObjectSpaces, lefutur framework de persistance pour.NET, nous comparerons l'approche Sunavec JDO et Microsoft avec ObjectSpaces

R e s s o u r c e s

AnnuairAnnuairAnnuairAnnuairAnnuaire e e e e WWWWWeb 2002eb 2002eb 2002eb 2002eb 2002du dévdu dévdu dévdu dévdu développeur (4)eloppeur (4)eloppeur (4)eloppeur (4)eloppeur (4)RessourRessourRessourRessourRessourccccces es es es es WWWWWeb (1)eb (1)eb (1)eb (1)eb (1) .......................................................................................... 1515151515Notre sélection de sites pourdéveloppeurs sur HTML, CGI/Perl,JavaScript.

LA COUCHE DE PERSISTANCE EST LA PARTIE STRATÉGIQUE D'UNE ARCHITECTURE N-TIERS.SI JAVA PROPOSE JDO (JAVA DATA OBJECTS), MICROSOFT S'APPRÊTE À LANCER SON

FRAMEWORK DE PERSISTANCE POUR .NET, OBJECTSPACES. APRÈS AVOIR PRÉSENTÉ

CE FRAMEWORK, NOUS COMPARERONS LES APPROCHES SUN ET MICROSOFT.

La couche de persistanceou de données est sûrement la partie la plusstratégique et la pluscomplexe d'un projet.

C'est à cet endroit qu'est confiné l'en-semble des entités de l'application aucœur du métier de l'entreprise (Fac-ture, Comptes…). Mais c'est aussi etsurtout dans cette couche que sur-viennent la plupart des problèmes

liés aux performances : gouletsd'étranglement, requêtes longues,transactions…

A travers les années et avec l'ap-parition des architecture n-tiers, cettecouche a considérablement évoluépour aujourd'hui laisser place à uneapproche véritablement objet. Il estbien connu que le monde relationnelet le monde objet ne font pas très bonménage, et ce pour diverses raisons.

Non seulement la granularité des ta-bles n'est pas nécessairement équi-valente à celle des objets, mais l'ap-proche et la conception orientéedonnées d'un côté ne trouve pasd'analogie formelle de l'autre. Bref,tout cela se passe comme si SGBDRet Objets devaient coexister malgréleur différences.

InInInInInttttterererererview :view :view :view :view : Bjarne Str Bjarne Str Bjarne Str Bjarne Str Bjarne Stroustrupoustrupoustrupoustrupoustrup .......... 44444Rencontre avec l'inventeur du C++qui nous parle de l'avenir de celangage.

Page 2: Développeur Référence v2.12

2DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

Les newsE v é n e m e n t s | Te n d a n c e s | N o u v e a u x p r o d u i t s

Retrouvez chaque jour les news sur www.devreference.net

5, rue Chantecoq92808 Puteaux Cedex

Tél. : 01 41 97 61 61

Adresse électronique :[email protected]

LETTRE BIMENSUELLE ÉDITÉE PAR

Directeur de la publication : Ted BloomCommission paritaire : en cours

Dépôt légal : 4e trimestre 2001

Service AbonnementsDéveloppeur Référence

BP 90006 – 59718 Lille Cedex 9Tél. 03 20 12 11 17Fax 03 20 12 86 09

Tarif :1 an 22 numéros : 200 euros

Prix de lancement : 150 euros

Renseignements :Lucienne Bosser • [email protected] • 6128

A n a l y s e A c t u a l i t é

EditeurMichel Crestin

Rédacteur en chefPierre Tran • [email protected] • 6257

Assistantes de rédactionKateline Renaudin

Ont collaboré à ce numéroJean-Louis Bénard, David Castaneira,

Sami Jaber, Frédéric Milliot

Rédaction

CCCCCopopopopopyrighyrighyrighyrighyright IDG Ct IDG Ct IDG Ct IDG Ct IDG Communicaommunicaommunicaommunicaommunica tions Ftions Ftions Ftions Ftions Frrrrrancancancancanceeeee.....Toute reproduction ou représentation, intégraleou partielle, par quelque procédé que ce soit, despages publiées dans la présente publication faitesans l’autorisation écrite de l’éditeur est illicite etconstitue une contrefaçon. Seules sont autorisées,d’une part, les reproductions strictement réser-vées à l’usage privé du copiste et non destinées àune utilisation collective, d’autre part, les analy-ses et courtes citations justifiées par le caractèrescientifique ou d’information de l’œuvre dans la-quelle elles sont incorporées (loi du 11 mars 1957- art. 40 et 41 et Code pénal art. 425). Toutefois,des photocopies peuvent être réalisées avecl’autorisation de l’éditeur. Celle-ci pourra être ob-tenue auprès du Centre français du copyright, 6bis, rue Gabriel-Laumain, 75010 Paris, auquel IDGCommunications France a donné mandat pour lereprésenter auprès des utilisateurs.

Directeur artistique groupePatrice Servage

Mise en pagePierre Tran

PhotographiesMarc Guillaumot

IconographieNouara Aftis

InfographiesCarole Guirrado, Pierre Tran

Fabrication

Pasquale Meyer • [email protected] • 6216Caroline Mayer • [email protected] • 6217

Publicité

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

IBM, VeriSign et Microsofts'allient pour sécuriser XML

Microsoft, IBM et VeriSign s'associentpour sécuriser les services Web endéveloppant WS-Security, normefondée sur XML. La spécification doitêtre présentée au W3C et pourrait êtreintégrée à l'ensemble de recommanda-tions XML sur le cryptage et lasignature électronique.

Les trois associés prévoient lapublication d'autres spécificationsXML liées à la sécurité d'ici 12 à 18mois :- WS-Privacy pour la sécurisation desdonnées personnelles- WS-Secure Conversation pour lagestion d'échanges authentifiés- WS-Policy pour les procédures etpolitiques de sécurisation- WS-Trust pour les donnéesrelationnelles- WS-Federation pourl'interopérabilité d'environnementssécurisés hétérogènes- WS-Authorization pour la gestiondes droits dans les services Web.D.C.

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

IBM sécurise sa boîte àoutils

IBM lance la version 3.1 de WebServices Toolkit (WSTK), sa boîte àoutils de constitution de services Web.

Les améliorations concernentessentiellement la sécurité. Après avoirdéveloppé un module d'authentifica-tion en janvier, Big Blue s'attaque à lasignature électronique en intégrant lejeu de spécifications WS-Security.Proposé conjointement avec VeriSignet Microsoft, ce dernier est en coursd'homologation par le W3C, chargé denormaliser le Web.

Par ailleurs, WSTK 3.1 supporte lemodule d'authentification SoapSecurity Token. Il permet l'authentifi-cation de l'émetteur du message parl'enregistrement de son identité, safonction et de ses droits. Selon IBM,Soap Security Token permet, de plus,l'interopérabilité de systèmesd'authentification différenciés.

Enfin, WSTK 3.1 intègre un moduled'exploration de l'annuaire UDDI, lesupport de WSDL et un outil degestion d'interfaces Java.

Une version d'essai est téléchargeablesur le site d'IBM.D.C.

http://www.alphaworks.ibm.com/

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

Sun fédère ses applicationssous la marque Sun ONE

Sun Microsystems unifie et rebaptisel'ensemble de sa gamme d'applica-tions. Objectif : rassembler toutes leslignes de produits autour de Sun ONE(Open Net Environment), sonprogramme en matière de servicesWeb, concurrente de .Net deMicrosoft. Du coup, les suites iPlanet(serveur d'applications et outils deconstitution de portail), Forté(middleware d'intégration et outils dedéveloppement) et Chili!Soft (outild'utilisation de modules dynamiquesASP) disparaissent tandis que StarOffice (bureautique) connaît un répitet se voit simplement adjoindre lamention Sun ONE.D.C.

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

HP renoncerait à Netactionpour adopter WebLogic

HP pourrait abandonner Netaction, sastratégie logicielle fondée sur leserveur d'applications Bluestone, pours'orienter vers un accord avec BEA,numéro un du marché avec WebLogic. Alfred Chuang, PDG et fondateur deBEA, a affirmé au cabinet d'étudeMerrill Lynch que HP avait "sabordéBluestone" et avait "adopté WebLogic".Depuis deux ans, HP a pourtantredoublé d'effort pour combler sonretard commercial sur IBM et BEAqui s'accaparent le marché desserveurs d'applications avec 34% depart chacun. Du coup, Total-e-Server -nom donné à Bluestone dans le cadrede Netaction - a gagné trois points en2001 pour atteindre prés de 7% depart de marché, à égalité avec iPlanetde Sun. En vain. Selon Mike Gillipin,analyste au Giga Group, la logique de

réduction des dépenses dans le cadrede la fusion HP/Compaq conduit HPà se séparer d'une ligne de produitsqui lui coûterait près de 20 M$ par an.D.C.○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

Les services Web interentre-prises peu fiables sansebXML selon Sun

Marty Robins, gardien du temple Javachez Sun Microsystems, affirmequ'aucun service Web interentreprisesn'est fiable tant qu'il n'intègre pas lesspécifications d'ebXML. Selon lui, lesfondements des corpus XML, del'annuaire UDDI , de WSDL et deSoap sont insuffisants. Ils negarantissent pas sécurité et qualité deservice.

Marty Robins s'en prend indirecte-ment à Microsoft, soupçonné devouloir reléguer ebXML aux oubliettesen imposant la plate-forme de normespour les services Web dont le WS-I,consortium créé récemment encompagnie d'IBM et de BEA, assure lapromotion.

Programme de normalisation deséchanges de données interentreprises,ebXML reprend les fondementsdéveloppés par le consortiumRosettaNet, qui se consacre auxéchanges dans le secteur électronique.Il ambitionne cependant de gérerl'ensemble des procédures d'échangesélectroniques entreprises.D.C.

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

Improve C# plugin forEclipse

[Vu sur application-servers] Ce plug-in, développé par Improve, permet defaire de l'édition et de la compilationde code C#, ainsi que de spécifier pourchaque fichier source les arguments àpasser au compilateur C#. Son but estd'offrir un outil simple, pourdécouvrir et programmer en C#, maisassez évolué pour créer des assembla-ges (composants dans .NET).

http://www.application-servers.com/links.do?reqCode=showLink&lid=1013

Page 3: Développeur Référence v2.12

3DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

Cette année, OCM s'estfocalisée sur l'évolu-tion des architectureslogicielles et des mé-thodes de développe-

ment. Organisée conjointement parl'Ecole des Mines de Nantes, l'IRISA,la MEITO et Sodifrance, cette manifes-tation est l'occasion d'inviter des per-sonnalités prestigieuses du mondedu développement, telles que Ber-trand Meyer en 2001 ou Patrick Alberten 1999. L'édition OCM 2002 pour sapart voit la participation de BjarneStroustrup, inventeur du langageC++ et de Steve Cook, expert de l'in-génierie des modèles.

Redorer C++

La journée a débuté par la présen-tation de Bjarne Stroustrup, "Des clefspour une utilisation efficace du lan-gage C++ par son inventeur". L'ob-jectif était de montrer que C++ est unlangage multi paradigme, c'est-à-direqu'il permet différents styles de pro-grammation tels que la programma-tion orientée objet ou la programma-tion générique. C++ reste le langagegénéraliste le plus utilisé au monde,mais il est souvent sous-exploité.Bjarne a donc montré des exemplesconcrets des différents styles de pro-grammation avec le C++ standardISO, et comment les combiner pourproduire du code plus propre et plusmaintenable que s'il avait été écritdans un seul style. Face à la popula-rité croissante de Java et à l'émer-gence de C#, le C++ avait bien besoinde redorer un peu son blason. Débu-ter la journée par cette présentationultra technique était, il faut l'avouer,un peu sévère, mais les spécialistes dece langage ont pu apprécier les con-cepts présentés. Nous avons rencon-tré Bjarne et vous trouverez plus loinle compte-rendu de l'interview qu'ilnous a accordée.

Deuxième temps fort de la jour-née, Steve Cook est venu nous pré-senter l'approche MDA (Model DrivenArchitecture), l'architecture dirigéepar les modèles. Steve a rejoint IBMen 1994. Il est co-inventeur du lan-gage de contrainte OCL (ObjectConstraint Language), a contribué àla définition d'UML et du standard deprocessus associé SPEM (SoftwareProcess Engineering Model). Stevenous a d'abord présenté l'historiquede l'abstraction dans le développe-ment logiciel, depuis la programma-tion orientée objet début des années80, jusqu'aux composants J2EE et.NET et les services Webd'aujourd'hui. Face à la complexitécroissante des développements etdes architectures, l'utilisation de mo-dèles permet de définir une hiérar-chie des abstractions, c'est l'objet deMDA. Steve a ensuite présenté lastructure et les relations entre lesmodèles et les langages de program-mation, et leur utilisation dans le dé-veloppement logiciel, avec un focusparticulier sur UML et les technolo-gies associées : MOF (Meta-ObjectFacility), XMI (XML MetadataInterchange), CWM (CommonWarehouse Metamodel)… A l'inversede la précédente, cette présentationfut très conceptuelle et a permis don-ner un aperçu du futur dans le do-maine de l'ingénierie logicielle.

L'après-midi fut consacrée à diffé-rentes sessions en parallèle portantsur les architectures et les technolo-gies de développement : plate-formeJava, plate-forme .NET, MDA et plate-forme XML/services Web. Chaquesession comprenait une présentationtechnologique et une présentationplus pratique (retour d'expérience,mise en œuvre). La session Java pré-sentait le projet Eclipse, la plate-forme universelle pour outils intégréset un retour d'expérience sur J2EE

avec la plate-forme e-CommerceSmart-EC. La session .NET faisait toutd'abord le point sur cette plate-formeet offrait un retour d'expérience surle développement d'un site Web en.Net avec une approche génie logi-ciel. La session MDA débutait par uneprésentation générale de l'approcheMDA et se poursuivait par une migra-tion vers Java avec une approche ba-sée sur MDA. Enfin la session XML/services Web présentait la technolo-gie XML appliquée à la télévision nu-mérique et une mise en œuvre deservices Web avec .NET.

Le nouveau paradigmedu génie logiciel

Pour ma part, j'ai suivi la sessionMDA et je n'ai pas été déçu. JeanBézivin, de l'Université de Nantes, aprésenté avec clarté et enthousiasmel'approche MDA, ses concepts, seschallenges et ses opportunités. Uneprésentation qui vient compléter àmerveille celle de Steve Cook, carbeaucoup plus pragmatique. Elles'appuie sur le récent changement deparadigme en génie logiciel : de latechnologie des objets vers la tech-nologie des modèles. Jean n'hésitepas à piétiner au passage quelquesidées reçues sur le tout-objet (abs-traction, portabilité, réutilisabilité,extensibilité…) et quelques techno-logies passées ou émergentes : lescomposants, la programmationorientée aspect, la guéguerre des lan-gages et des plates-formes… Pointimportant, l'approche modèles n'est

pas qu'une vision conceptuelleélaborée par un comité, mais un ap-proche que réclament les entreprisesqui en ont assez de payer des migra-tions de leur système d'informationvers des plates-formes à obsoles-cence rapide (COM, Java, Corba,HTML, XML, .NET…). Elles veulentpouvoir construire une bonne foispour toutes des modèles abstraits deleur processus métier et exiger detout nouveau fournisseur de plate-forme qu'il livre les outils de transfor-mation pour ses modèles métier. Bref,la technologie des modèles sembleêtre en mesure de répondre à tousces défis (gestion séparée des as-pects, prise en compte du fonction-nel et du non-fonctionnel, intégrationdes règles, services, processus, archi-tecture…) et offrir une voie d'évolu-tion progressive aux objets et com-posants actuels. Nous aurons l'occa-sion de revenir en détail sur l'appro-che MDA dans les prochains numé-ros de Développeur Référence.

La journée s'est terminée sur unetable ronde autour du thème "Desmodèles objets vers des modèles deservices", l'occasion de faire le pointnotamment sur la technologie émer-gente des services Web.

Une journée au final fortenrichissante. Et le cadre excentré deNantes ne semble pas avoir posé unobstacle à la centaine de participants.Rendez-vous est pris pour la pro-chaine édition qui sera nous l'espé-rons toute aussi captivante.

Site de l'OCM :http://www.ocm-ouest.org

COMME CHAQUE ANNÉE DEPUIS 1995, S'EST DÉROULÉE LA CONFÉRENCE

OCM (OBJET, COMPOSANTS, MODÈLES) À NANTES, LE 21 MARS

DERNIER. CETTE JOURNÉE DE RENCONTRES EST L'OCCASION DE FAIRE LE

POINT SUR LES INNOVATIONS EN MATIÈRE DE DÉVELOPPEMENT LOGICIEL.

○ ○ ○ ○ ○ ○ ○ ○ ○ ○

Evénement

OCM 2002Objet, Composants et Modèles

Reportage de Pierre Tran

A n a l y s e A c t u a l i t é

Page 4: Développeur Référence v2.12

4DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

Auteur de plusieursouvrages sur le lan-gage C++ ("The C++P r o g r a m m i n gLanguage", "The De-

sign and Evolution of C++"), BjarneStroustrup dirige actuellement le dé-partement de programmationgrande-échelle au laboratoire d'AT&TBell. C'est à l'occasion de OCM 2002(voir page précédente) que nousavons rencontré l'inventeur du lan-gage le plus utilisé.

Développeur Référence : La stan-dardisation ANSI/ISO de C++ a étéun long processus qui ne s'estachevé qu'en 1998. Ne regrettez-vous pas que tout cela ne se soit pasfait plus rapidement ?

Bjarne Stroustrup : Bien sûr, celaaurait été super si le standardisationC++ s'était achevée plus tôt, mais lesprocessus de standardisation de C++ne prennent pas vraiment plus detemps que pour les autres standards.Les formalités de la standardisationprennent plus de temps que ce l'onpense, parce qu'il y a des tas de genset d'organisations à rencontrer.

Pensez-vous que cela ait nuit àl'image et à la pénétration de C++ ?Dans l'enseignement par exemple,nombreux sont ceux qui continuentà enseigner C en martelant que C++n'est toujours pas standardisé…[c'est du vécu !] ?

Beaucoup de personnes ont en-seigné - et certains continuent à en-seigner - le C++ soit comme un lan-gage de bas niveau en se focalisantsur les fonctionnalités partagées avecle C, soit comme un langage pourexprimer les hiérarchies de classe.Aucune de ces deux approches neréussit à mettre en valeur les grandesforces de C++. Pire : de telles appro-

ches perdent souvent tellement detemps sur des aspects de C++ peugratifiants pour les programmeursqu'elles échouent sur l'utilisation ef-ficace de C++. Les conteneurs et lesalgorithmes de la bibliothèque stan-dard, l'utilisation des exceptions dansla gestion des ressources sont desexemples des sujets clefs qui sontsouvent négligés, ou considérés à tortcomme difficiles.

Je pense que de tels échecs dansl'enseignement ont fait plus de tort àC++ que la lenteur du processus destandardisation ISO. Clairement, celaaurait été beaucoup mieux si nousavions rendu disponible la bibliothè-que standard en 1985, mais nous nel'avons pas fait. Et ensuite nousn'avons simplement pas su commentconcevoir et mettre en œuvre quel-que chose de généraliste, élégant etefficace.

Il est en effet très triste d'enten-dre les gens proclamer que C ++ n'estpas standardisé. La norme ISO a étératifiée en 1998 et aucune nouvellefonctionnalité significative n'a été

ajoutée au langage ni à la bibliothè-que standard depuis 1996. En infor-matique, c'est une longue périodede temps.

Pensez-vous que cela ait ralentil'évolution de C++ : une meilleureévolution des bibliothèques stan-dard, la prise en compte de l'infor-matique distribuée… ?

Concernant la vitesse de l'évolu-tion, c'est limité par notre compréhen-sion des problèmes et - je dirai mêmeplus - par notre capacité à enseignerla bonne utilisation du langage. Je nepense pas que le langage puisse oudoive se développer plus rapidementqu'il ne le fait. Des langages expéri-mentaux peuvent se développer rapi-dement parce qu'ils ont peu d'utilisa-teurs. Un langage courant comme leC++ ne peut pas bouger plus vite quesa communauté d'utilisateurs et doits'attacher à la stabilité.

Pour ce qui est des prochaines ver-sions de C++, vous semblez privilé-

gier une évolution des bibliothèquesstandard plutôt qu'une évolution dela syntaxe du langage. Pouvez vousnous expliquer cette position ? Quel-les sont les bibliothèques que vousvoudriez voir standardisées :multithreading, processus distri-bués ? Faut-il aller aussi loin queJava et proposer une bibliothèquestandard de GUI ?

Ma proposition est que le travailsur la prochaine version du standardC++ ISO se concentre sur la bibliothè-que standard. Le langage est déjà as-sez puissant pour exprimer la majo-rité de ce que nous avons à exprimeret la stabilité est le point le plus im-portant. Par conséquent, je proposeque nous soyons conservateurs etprudents avec les extensions du lan-gage, pour nous concentrer sur lagénéralisation et des choses qui peu-vent aider l'enseignement plutôt quesur des nouvelles fonctionnalitésmajeures. D'un autre côté, nous de-vons être agressifs et opportunistesquand il s'agit des extensions de labibliothèque standard.

Je pense que des bibliothèquespour rendre C++ meilleur en tantqu'outil pour le développement desystèmes est la clé : la gestion des res-sources, le threading, la distributionphysique, TCP/IP, etc. sont des candi-dats évidents. Nous verrons aussipresque certainement des améliora-tions utiles telles que le matching dehash_maps et de pattern. Je crainsque le GUI ne soit un sujet trop com-plexe et trop controversé pour le co-mité de standardisation. Le comitéest constitué de volontaires et nousn'avons pas les ressources pour cons-truire une bibliothèque GUI. Parailleurs, un comité de standardisationne peut rivaliser avec des sociétéscommerciales (et non commerciales).Il doit essayer de servir toute la com-munauté.

○ ○ ○ ○ ○ ○ ○ ○

Interview

Bjarne StroustrupL'INVENTEUR DU C++ ÉVOQUE LA STANDARDISATION DU LANGAGE,

LE MUlTI PARADIGME, C# ET L'ÉVOLUTION DE LA FUTURE VERSION

DU LANGAGE.

Propos recueillis par Pierre Tranavec la collaboration de Guillaume Louel

A n a l y s e A c t u a l i t é

Page 5: Développeur Référence v2.12

5DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

Le monde Unix/Linux, et la commu-nauté Open Source n'ont pas réelle-ment accueilli à bras ouverts C++. Laplupart des développements se fontencore en C. Certains mettent enavant l'aspect performances(comme pour le kernel linux) ouréinventent la roue en ré-implémen-tant une couche objet dans C. Qu'enpensez vous ? Considérez-vous lesuccès de KDE (développé en C++),et la rapidité de son développement(face à un Gnome développé en Cqui stagne) comme une démonstra-tion de la supériorité de C++ sur detels développements ?

Je pense que réinventer la roueest stupide et que l'utilisation de Cmontre trop souvent l'ignorance dece que C++ peut faire pour construiredes systèmes. C'est un signe de l'im-maturité de notre domaine que lesgens résistent à adopter des outilsplus avancés et préférer dépenserleurs énergies à réinventer des cho-ses en utilisant des outils primitifs plu-tôt que de prendre le temps d'ap-prendre à maîtriser des outils pluspuissants.

Dans l'esprit de beaucoup de pro-grammeurs (particulièrement lesprogrammeurs Java), C++ reste uneversion orienté objet de C. Que diriezvous pour les convaincre que C++est plus que ça ?

C'est dur de convaincre des gensqui ne veulent pas être convaincus.

#include<string>#include<vector>#include<iostream>#include<algorithm>using namespace std;

int main(){

vector<string> v;string s;

// read a file of wordswhile (cin>>s) v.push_back(s);

// sort the wordssort(v.begin(),v.end());ostream_iterator<string> os(cout,"\n");

// output unique wordsunique_copy(v.begin(),v.end(),os);

}

Tentez d'écrire cela en C et com-parez. Et faites attention à ne pas in-troduire de débordements de tam-pons ou des fuites mémoire.

En réponse à une question au sujetde C#, vous avez dit que c'était unlangage propriétaire sur une plate-forme propriétaire. Mais C# a étéstandardisé par l'ECMA et s'apprêteà faire de même avec l'ISO. Et vouspouvez trouver des implémenta-tions sur d'autres plates-formes(Mono sur Linux). Si demain C# réus-sit la standardisation ISO, change-rez-vous d'avis ?

Probablement non, et je consi-dère cela peu probable. Je regarde-rais soigneusement le processus destandardisation pour vérifier qu'il y aitune réelle participation de plusieursparties intéressées et que l'évolutiondu langage ne soit pas dans les mainsd'une seule société. Une vraie stan-dardisation est plus que la productiond'un morceau de papier.

C# tout comme Java a pris la voie del'héritage simple, contrairement aC++ qui implémente l'héritage mul-tiple. Pensez vous que l'héritagemultiple est toujours la meilleure so-lution ?

L'héritage multiple n'est pas *tou-jours* la meilleure solution, mais par-fois la meilleure solution d'un pro-blème implique l'héritage multiple.Notez que même Java inclut uneforme limitée d'héritage multiple :l'héritage d'interfaces. Je suis très àl'aise avec l'héritage multiple et jeconnais de nombreux exemples qui -à mon avis - ne peuvent pas être faitsélégamment sans héritage multiple.Mon livre "The C++ ProgrammingLanguage (3ème édition)" contientplus d'une douzaine de tels exemples.Une technique clé est d'hériter sépa-rément une interface (typiquementune classe d'abstraction) et une im-plémentation partielle.

Vous pouvez toujours réécrire unexemple utilisant l'héritage multipleen utilisant seulement l'héritage sim-ple (avec des fonctions deforwarding). Cependant, le résultatest souvent un programme plus long,qui reflète moins fidèlement la con-ception et qui est plus dur à mainte-nir. Notez que vous pouvez aussi réé-crire tout exemple utilisant l'héritagesimple en un exemple n'utilisantaucun héritage en employant lamême technique et avec le mêmeimpact négatif sur la clarté de code.Un langage qui ne supporte pas l'hé-ritage multiple est simplement moinsexpressif qu'un langage supportantl'héritage multiple et force parfois leprogrammeur à compliquer encoreun peu plus son code.

Ces derniers temps on parle beau-coup plus de framework que de lan-gages, que ce soit J2EE pour Java, oùl'on lie fortement un langage à unframework, ou .NET, où Microsoftmet en avant le framework au détri-ment des langages. Que pensez vousde cette approche ? Pensez vousqu'un framework complet soit laprochaine étape nécessaire à l'évo-lution de C++ ?

Les gens parlent beaucoup deframeworks, mais l'histoire est jon-chée de frameworks qui n'ont passurvécu à leurs ambitions. J'ai vu desframeworks qui ont été des succès,mais ils étaient généralement limitésà un domaine. Je suis sceptique quant

à un framework universel, et encoreplus quand de tels frameworks sontdes produits issus d'un éditeur deplate-forme entrant en compétitionavec des frameworks similairesd'autres éditeurs. En tant qu'utilisa-teur, je préfère garder mon indépen-dance vis-à-vis des éditeurs autantque possible.

J'aimerais voir les bibliothèquesfournir un accès plus propre et plusgénéralisé aux frameworks, plutôtque de voir les langages intimementliés à un framework unique.

Lors d'une interview que vous avezaccordée au C/C++ Users Journal,vous disiez que l'un de vos objectifsavec C++ était d'augmenter le ni-veau d'abstraction. Est-ce toujoursvotre objectif pour les prochainesversions ? Peut-on réellement implé-menter un fort niveau d'abstractionsans impacter les performances(Java fait pas mal de concessionspar exemple) ? Quels sont les méca-nismes que vous voudriez voir inté-grés à C++ ? (garbage collector…)Quels mécanismes voudriez-vousvoir améliorés ?

Mon objectif a toujours été depermettre d'exprimer l'intention duprogrammeur plus clairement et di-rectement dans le code. Donc oui,augmenter le niveau d'abstraction atoujours été un de mes objectifspour C++.

Oui, vous pouvez augmenter demanière significative le niveau d'abs-traction sans sacrifier sur l'efficacité.La clef est un système de typage sta-tique (à la compilation) qui soit flexi-ble et extensible. La partie STL de labibliothèque standard est un bonexemple. Par exemple, un vecteur estdéfini de telle sorte qu'il puisse pren-dre les éléments de n'importe queltype (les prédéfinis comme ceux dé-finis par l'utilisateur) sans surcharge.

Pour comparer avec Java, notezqu'un vecteur C++ prend les valeursd'un type défini par l'utilisateur, plu-tôt que les références aux objets detypes définis par l'utilisateur. Celaéconomise à la fois la mémoire (vousn'avez pas besoin de stocker les réfé-rences ou des informations de ges-tion de la mémoire pour des élémentsindividuels sur le tas) et les coûts d'ac-cès (pas de coût d'indirection à tra-vers une référence ni aucune vérifica-tion de type des éléments extraitsd'un vecteur). L'absence d'un besoinde vérification de type à l'exécution(casting) amène aussi de manière si-gnificative un code plus propre etplus concis.

Autre exemple, les algorithmesstandard (comme sort), qui peuventêtre appliqués à n'importe quel con-teneur approprié et paramétré avecdes critères de comparaison, sont demanière significative encore plus ra-pides que leurs équivalents en C(comme qsort).

J'aimerais que le comité de stan-dardisation C++ reconnaisse explici-tement que la ramasse-miettes estune technique d'implémentation va-lable pour C++, mais je ne veux pasfaire que la sémantique de C++ dé-pende d'un ramasse-miettes. Il y a desdomaines d'application (comme lesdrivers et autre code du noyau) pourlesquels le ramasse-miettes n'est pasapproprié. Et si vous voulez du ramas-sage de miettes dans C++, vous pou-vez utiliser un des ramasse-miettesexistants. Cela marche très bien pourcertains types d'applications pour les-quelles le ramasse-miettes est unetechnique prudente.

Vous décrivez C++ comme un lan-gage multi paradigmes, principale-ment l'orienté objet et la généricité.Quels sont les paradigmes quipourraient peut être trouver leurplace dans une prochaine versionde C++ ?

Je pense que le terme de para-digme est largement galvaudé, et jepréfère le terme " style de program-mation ". Aussi, il ne faut pas oublierl'utilisation de simples classes auto-nomes (c'est-à-dire qui ne font paspartie d'une hiérarchie). Elles sontessentielles pour la flexibilité et l'effi-cacité de nombreuses techniques deC++ modernes et sont des exemplesd'abstraction de données.

Je ne pense pas que C++ suppor-tera un nouveau paradigme dans unproche avenir, mais peut-être suis-jetrop conservateur dans ce que j'ap-pelle un paradigme. J'espère que leprochain standard C++ supportera laprogrammation distribuée, mais qu'ille fera principalement à travers la bi-bliothèque standard.

Avez-vous l'intention d'intégrer laProgrammation Orientée Aspect ?

Non. Je ne suis pas encore certainque la "Programmation Orientée As-pect" puisse s'accorder avec mes prin-cipes qui consistent à représenter indé-pendamment les concepts et le codeet à les combiner librement (et seule-ment) quand nécessaire. Je ne suis cer-tain non plus que la notion de program-mation orientée aspect soit générale etgénéralement utile. Rappelez-vousqu'on n'ajoute de nouvelles particula-rités à un langage de programmationlargement utilisé qu'après avoir consi-dérer les alternatives.

Merci, Bjarne, de votre contribution.

Notez que les questions fréquem-ment posées sur C++ et leurs répon-ses peuvent être consultées sur mahomepage. Vous y trouverez égale-ment de nombreux articles et desliens utiles sur C++.

http://www.research.att.com/~bs

A n a l y s e A c t u a l i t é

Page 6: Développeur Référence v2.12

6DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

Jean-Louis Bénardest directeur techniquede Business Interactif,qui met en placedes solutions e-business(front, middle et back-office)sur des architecturesmultitiers à based’objets mé[email protected]

VOICI LE DERNIER VOLET

DE NOTRE DOSSIER CONSACRÉ

AUX MÉTHODES AGILES.

NOUS ALLONS VOIR

COMMENT UNIFIED PROCESS

(UP) SE POSITIONNE PAR

RAPPORT AUX AUTRES

MÉTHODES AGILES.

A n a l y s e M é t h o d e

Rappelons pour com-mencer, de manièresynthétique, les prin-cipales caractéristi-ques d'Unified Process.

UP est pilotée par les casd'utilisation

Les cas d'utilisation (Use Cases)sont les véritables pilotes du projet,quelle que soit l'activité et quelle quesoit la phase. En effet, le système esttout d'abord analysé, conçu et déve-loppé pour des utilisateurs. Tout doitdonc être fait en adoptant le point devue utilisateur. Les cas d'utilisationsont l'outil de modélisation des be-soins en termes de fonctionnalités :c'est sous cette forme que sont expri-mées les exigences. Les cas d'utilisa-tion servent aussi de base pour l'ana-

lyse, le modèle logique, ainsi que debase pour les tests fonctionnels.

UP est centrée surl'architecture

UP intègre très tôt l'architecturedans le cycle de vie d'une application.L'architecture du système est décriteà l'aide de différentes vues. Alors queles modèles cas d'utilisation, analyse,conception, implémentation, dé-ploiement, sont complets et exhaus-tifs, les vues définies par l'architectene reprennent que les éléments signi-ficatifs. L'architecte procède de ma-nière incrémentale : il commence pardéfinir une architecture simplifiée quirépond aux besoins classés commeprioritaires avant de définir à partir delà les sous-systèmes de manièrebeaucoup plus précise.

UP est itérative etincrémentale

UP procède par itérations par op-position aux méthodes en cascadequi sont plus coûteuses et ne permet-tent pas une bonne gestion du risque.En procédant de manière itérative, ilest possible de découvrir les erreurset les incompréhensions plus tôt. Lefeedback de l'utilisateur est aussi en-couragé et les tests effectués à cha-que utilisation permettent d'avoirune vision plus objective de l'avance-ment du projet. Enfin, le travail itéra-tif permet à l'équipe de capitaliser àchaque cycle les enseignements ducycle précédent (figure 1).

UP gère les besoinset les exigences

Les exigences du client changentau cours du projet. UP recommandede découvrir les besoins, de les orga-niser et de les documenter de ma-nière à avoir une approche discipli-née de l'étude des exigences et depouvoir les filtrer, les trier par pro-priété et réaliser leur suivi pour pou-voir estimer de manière objective lesfonctionnalités et les performancesdu système à développer.

UP est fondéesur la productionde composants

UP recommande de structurerl'architecture à base de composants(COM, CORBA, EJB, etc.). Les architec-tures ainsi construites sont de faitplus robustes et modulaires. De plus,cette approche permet la réutilisationde composants existants si ceux-ciont été développés de manière assezgénérique et dans une approche deFramework.

Figure 1 - UP est une méthode itérative et incrémentale (source : Rational).

Page 7: Développeur Référence v2.12

7DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

UP pratiquela modélisation visuelle

UP préconise la modélisation vi-suelle du système. Un modèle est unesimplification de la réalité qui décritle système selon un certain point devue. La modélisation sous différentspoints de vue permet une meilleurecompréhension globale du systèmeà concevoir. L'utilisation d'outils vi-suels augmente encore les capacitésde l'équipe à gérer la complexité dessystèmes (figure 2).

UP se soucie en perma-nence de la qualité

Partant du constat que le coût dela correction des erreurs augmenteexponentiellement au fur et à mesurede l'avancement du projet, il est ab-solument nécessaire d'avoir un con-trôle permanent et rigoureux desfonctionnalités, de la fiabilité, desperformances de l'application et desperformances du système. Pour cela,une automatisation des tests tout aulong du cycle de vie s'impose. Ainsi,les défauts sont détectés très rapide-ment et le coût de leur correction estminimisé, l'estimation de l'étatd'avancement du projet est plus ob-jective et la qualité et les performancesdes parties "à risque" est améliorée.

UP gère les risques defaçon systématique etpermanente

La phase de pré-étude a pourbut d'identifier les risques qui pour-raient mettre le projet en péril. Toutau long du projet, il est recom-mandé de maintenir une liste de ris-ques, issus de la phase de pré-étude, classés selon leur dangerpour l'équipe afin d'avoir une vueplus explicite des choses.

Les activitésdans la méthode UP

UP définit les activités essentielleset propose, pour chacune d'entre el-les, une liste d'intervenants (architecte,analyste...) et des travaux associés.

Expression des besoins

UP distingue deux types de mo-dèles : "Domain Model" et "BusinessModel". Le modèle de domaine nedépend pas de l'application : il a pourbut d'apprendre un domaine, unmétier jusque là méconnu. Le modèle"business" est plutôt une modélisa-tion des procédures en vigueur dansl'entreprise et s'intéresse directementaux collaborateur et à leurs divers tra-vaux. C'est à partir de ce modèle quepeut alors démarrer l'analyse des casd'utilisation du système. Il s'agit demieux connaître le domaine et sesactivités avant de s'intéresser auxfonctionnalités du système par uneétude par les cas d'utilisation.

AnalyseComprendre et structurer le logi-

ciel à développer sont les objectifs del'analyse. On construit dans cette ac-tivité une représentation internequasi-idéale du système, sans troptenir comte des exigences et con-traintes de conception. L'analyse uti-lise le langage du développeur alorsque l'expression des besoins se fait dupoint de vue utilisateur.

ConceptionLa conception consiste à définir

l'architecture du système. La concep-tion n'est non pas une phase duprocess UP mais une activité quitrouve sa place dans toutes les pha-ses. La conception est ainsi réaliséede manière incrémentale. Dans unephase de pré-étude elle consiste par

exemple à maquetter l'architecture,tandis qu'en phase de construction laconception de grossière devientbeaucoup plus détaillée. Si l'analyseest une vue purement logique, la con-ception est plus physique et se sou-cie des contraintes que l'analyse avaitlaissées de côté.

Implémentation et TestCette activité consiste à créer à

proprement parler les divers compo-sants : sources, scripts, puis exécuta-bles... Les tests se basent sur les casd'utilisation.

Les phasesdu cycle de vie

Les différentes activités sont mi-ses en œuvre lors des différentes pha-ses du cycle de vie ; l'importance desdifférentes activités dans les phasesdu cycle est illustrée dans la figure 4.

Etude d'opportunité

C'est durant cette phase qu'il fautse poser la question de la faisabilitédu projet, des frontières du système,des risques majeurs qui pourraientmettre en péril le projet. A la fin decette phase, est établi un documentdonnant une vision globale des prin-cipales exigences, des fonctionnalitésclés et des contraintes majeures. En-viron 10 % des cas d'utilisation sontconnus à l'issue de cette phase. Il con-vient aussi d'établir une estimationinitiale des risques, un "Project Plan",un "Business Model".

ElaborationCette phase a pour but de préci-

ser l'architecture. A ce stade, 80 % descas d'utilisation sont obtenus. Cettephase permet aussi de connaître desexigences supplémentaires, en parti-culier des exigences non fonctionnel-

Figure 2. Modélisation visuelle selon différentes vues (source : Rational)

les, de décrire l'architecture du sys-tème, de le prototyper, de réviser laliste des risques et de mettre en placeun plan de développement. En théo-rie, c'est à ce stade qu'on est à mêmede faire une offre de réalisation dusystème.

ConstructionL'objectif est de fournir une ver-

sion beta de la release en cours dedéveloppement ainsi qu'une versiondu manuel utilisateur.

Transition

Cette phase a pour objectif depeaufiner le système et de corriger lesderniers bugs pour pouvoir passer dela version beta au déploiement.Comme le nom de la phase l'indique,il s'agit aussi de préparer la releasesuivante et de boucler le cycle soit surune nouvelle étude d'opportunitésoit une élaboration ou construction.

UP est elle uneméthode agile ?Pour la plupart des défenseurs des

méthodes agiles, UP n'est pas à pro-prement parler " agile ". Le cycle devie UP est souvent considéré commetrop lourd, et le nombre de livrables(souvent appelés Artefacts) associésest considéré comme trop important.Les détracteurs ajoutent que la miseen œuvre d'UP est d'ailleurs impossi-ble sans l'utilisation de la suite d'outilsRational.

Pourtant, par certains côtés, UPn'est pas totalement dénué d'agilité :le caractère très itératif du cycle, l'im-portance donnée à la gestion des ris-ques, la proximité avec les besoins uti-lisateurs (par le biais des cas d'utilisa-tion) en sont l'exemple. Il n'en restepas moins que l'image d'UP ne s'ins-crit pas aujourd'hui dans la mouvance

Figure 3.

A n a l y s e M é t h o d e

Page 8: Développeur Référence v2.12

8DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

des méthodes de type Extreme Pro-gramming. La sortie d'outils commeRational XDE constitue de ce fait uneavancée très importante de la part del'éditeur, au même titre que ses outilsde tests automatisés : en positionnantla modélisation au cœur du code parle biais d'un environnement totale-ment intégré à celui d'IBM ou deMicrosoft, assurant une bi-directionnalité entre les modèles et lecode source, Rational brise l'image deRose, AGL souvent considéré commetrop éloigné du développement.

Car le compromis entre les mé-thodes agiles, très centrées sur lecode, et l'exigence de la part desgrands comptes de livrables complé-mentaires (documentation notam-ment) passe nécessairement par lamise en œuvre d'outils de ce type.

Prendre en comptel'agilité

Cette mise en perspectived'Unified Process conclut notre séried'articles sur les méthodes agiles. Lessignes de Rational en faveur de l'agi-lité sont assez symptomatiques de cequi est en train de se produire : lesméthodes traditionnelles ne sont pasabandonnées, mais peu à peu trans-formées pour prendre en compte lesignal fort envoyé par le taux d'échecimportant des projets informatiqueset par des méthodes telles queExtreme Programming.

Figure 4. Importance des activités au cours des différentes phases (source : Rational)

Il est probable que, pour la plupartdes grandes entreprises françaises, iln'y aura pas de "grande rupture" surles méthodes mises en œuvre, mêmesi un certain nombre de comptes lan-cent des projets pilotes autour

d'Extreme Programming. Beaucoupadoptent — ou ont déjà adopté —des pratiques agiles sans remettre encause l'existant global. Pour les défen-seurs des méthodes agiles, cette ap-proche reste trop réductrice et n'of-

frira pas des résultants probants. Iln'en reste pas moins que la mise enœuvre progressive de l'agilité semblebien être un passage obligé.

A n a l y s e M é t h o d e

<LAB Visual Studio .NET/>du 13 mai au 28 juin

Le Lab Visual Studio .NET est un atelier de prise en main de Visual Studio .NET et d'approfondisse-ment de certaines technologies liés au développement sur la plate-forme .NET. Ce laboratoire pro-pose des demi-journées guidées par des formateurs. Chaque participant dispose d'un PC. L'inscrip-tion au Lab est libre et gratuite.

Cette initiative, unique en son genre, s'inscrit dans un contexte particulier. En effet, la communautédes développeurs manifeste depuis plus de 12 mois un intérêt particulier pour les technologies .NET.La dernière manifestation de cet intérêt date du 31 janvier 2002, avec les Developer Days, qui ontréuni plus de 2300 personnes au palais des congrès de Paris et plus de 1000 sur l'ensemble desquatre autre villes visitées.

Pour pousser plus loin les possibilités d'étude de la plate-forme, Microsoft vous propose cette fois devous faire votre propre idée sur le développement avec Visual Studio .NET. Quelle que soit votrespécialité dans le développement, vous trouverez des sessions répondant à vos questions sur VisualStudio .NET.

Pour plus d'information, ou pour vous inscrire : http://www.microsoft.com/france/msdn/lab

Publicité

Page 9: Développeur Référence v2.12

9DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

Avec l'expérience, nous savons aujourd'hui qu'ilest possible de masquer à travers des objets toutela structure d'une base relationnelle. Cette appro-che a pour nom le mapping Objet/Relationnel. Pource faire, il existe trois types d'approche :

• Réaliser cette opération manuellement de ma-nière spécifique en utilisant des modèles de con-ception éprouvés (Design Patterns)

• Utiliser des outils du marché tels que les EJB(Enterprise JavaBean) ou les outils de mapping ob-jet/relationnel (JDO, ObjectSpaces, TopLink,CocoBase…)

• Faire un mélange des deux premières appro-ches en optimisant manuellement les parties sen-sibles (gros volumes...)

Nous ciblerons dans cet article la deuxième etla troisième approche à travers deux frameworkspromis à un bel avenir : Java Data Objects (JDO) etMicrosoft ObjectSpaces. Leurs modèles de dévelop-pement sont très proches, mais aussi et surtoutparce qu'ils représentent chacun à leur manière lesdeux architectures prédominantes du moment :Java et .NET. Dans un premier temps, nous présen-terons ObjectSpaces, le framework de persistanceencore en préparation chez Microsoft. Puis nouscomparerons les deux approches, JDO etObjectSpaces, de manière technique.

La problématique de lapersistance sous .NET

Microsoft reste très discret sur le sujet, mais laplate-forme .NET actuellement ne gère pas la per-sistance des objets. Tout d'abord, .NET n'intègre pasla notion de synchronisation en mode objet/rela-tionnel. Le framework .NET ne fournit pas de mé-canisme en standard permettant de gérer automa-tiquement la synchronisation d'un cache d'objetssur le principe des EJB Entités. Plus précisément,ObjectSpaces est le seul framework de mapping

Objet/Relationnel de Microsoft à proposer ce typede fonctionnalité. La différence essentielle entreObjectSpaces et les EJB se situe au niveau de l'in-tervention de l'utilisateur. Celui-ci doit spécifier ex-plicitement dans ObjectSpaces qu'il désire synchro-niser une instance, alors que les EJB s'en chargentautomatiquement en cas d'appel à un modificateurd'accès, et ce, dans le cadre d'une transaction. C'estdonc une démarche active et non passive. Voilàpourquoi ObjectSpaces s'inscrit plus dans la logi-que des JDO que dans celle des EJB.

Ensuite, il n' y a pas d'entités persistantes gé-rées par conteneur. Dans ObjectSpaces, il n'existepas à proprement parler de conteneur dans le sens"service" ou "serveur". Il y a bien un cache, mais quin'est pas distribué comme c'est le cas dans les EJB.

Pour autant, la persistance ne constitue pas unepriorité pour Microsoft. L'éditeur a toujours argu-menté sur le fait que les EJB persistants ne sont pasefficaces en terme de charge. D'ailleurs, le JavaPetStore qu'ils ont réécrit fait la part belle aux pro-cédures stockées.

L'avenir sera riche en enseignements, carObjectSpaces sera disponible d'ici quelques mois.La position de Microsoft au sujet de la persistancesera surtout radicalement différente. Si l'on jette uncoup d'œil aux présentations d'ObjectSpaces, lesconcepteurs de ce framework critiquent vivementl'utilisation des DataSet, des procédures stockéeset prônent la mise en place d'une couche d'objetspersistants.

L'architectureObjectSpaces

L'architecture Objectspaces a pour objectif prin-cipal de permettre d'exposer des données sous laforme d'objets et de liste d'objets indépendam-ment de leur représentation physique (tables, co-lonnes, lignes ou éléments XML). Ces objets sontappelés "objets persistants" et sont définis en

Sami Jaber,consultant et formateur chezValtech sur J2EE et .NET depuistrois ans, spécialisé dansl'architecture des systèmesfortement distribués (EJB, MTS/DCom, Corba, RMI...) orientésmulti-niveaux et internet/intranet.Anime des séminaires autourd'XML, EJB, .NET. Webmaster dusite DotNetGuru.org

[suite de la page 1]

A n a l y s e A r c h i t e c t u r e

Page 10: Développeur Référence v2.12

10DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

utilisant les conventions du framework .NET. L'ob-jet le plus important dans le framework est l'usinede classe ObjectSpace (pattern Factory) dont le rôleest le chargement, la création et la suppressiond'instances d'objets persistants dans la base dedonnées. Le terme base de données doit être prisau sens large, il comprend l'ensemble des basesrelationnelles mais aussi les fichiers XML à plat.

ObjectSpaces se sert des classes ADO.NET pourimplémenter son mécanisme de persistance. Uncache local est utilisé autour de l'objet DataSet per-mettant de charger des données à partir d'unesource quelconque (XML, SGBD...) afin de répercu-ter en base toute modification du DataSet. Il estimportant de comprendre que le frameworkObjectSpaces fonctionne dans un mode totale-ment déconnecté lui permettant de se re-synchro-niser avec la source de données en cas de modifi-cation. Plusieurs alternatives sont offertes pour lagestion des objets :

• Implicitement laissez ObjetSpaces gérer lechargement et la persistance de ses données

• Gérer soi-même explicitement les interactionsavec la base

La gestion implicite se fait par l'intermédiairedes objets XMLObjectSpace et SQLObjectSpace, lagestion explicite se fait par l'intermédiaire de laclasse DataSpace en fournissant un objet DataSet.

La figure 1 illustre les classes principales duframework. IObjectSpace est utilisé lorsqu'il estnécessaire d'être indépendant du type de donnéesmanipulé (XML ou SQL). Le mapping entre modèleobjet et modèle physique se fait via un fichier XML.Le but affiché par les équipes d'ObjectSpaces con-siste à permettre toute modification du fichier XMLde mapping sans avoir à recompiler le code client.

Voyons de plus près les différentes étapes né-cessaires pour créer un objet persistant.

Implémenter l'objet

Un objet persistant est défini de la manière sui-vante : tous ses accesseurs sont abstraits. LeFramework se charge de générer le code nécessaire

à leur implémentation en fonction du type de don-nées manipulé. De plus, tout objet ObjectSpacesest caractérisé par un identificateur unique repré-senté par l'attribut de Runtime UniqueId. Cet attri-but est en lecture/écriture lorsque le développeurchoisi de l'initialiser ou en lecture seule lorsqu'illaisse le framework s'en charger. Enfin, certainesméthodes sont liées à l'API : OnCreate(..) représentele constructeur de la classe (rappelez-vous, c'est leframework qui a la responsabilité de gérer la créa-tion et la destruction de votre objet).

[C#]public abstract class Consultant{

// This property contains a unique value.[UniqueId] protected abstract string Id { get; set; }

public abstract string Name { get; set; }public abstract string CompanyName {get;set;}public abstract string Phone { get; set; }public abstract string Fax { get; set; }

// OnCreate is the ObjectSpaces "constructor"public void OnCreate(string newId){

Id = newId;}

}

Il existe d'autres méthodes de ce type décritesdans la matrice suivante :

MéthodeMéthodeMéthodeMéthodeMéthode DDDDDescriptionescriptionescriptionescriptionescription

OnCreate() Appelée à la création de l'objet

OnMaterialize() Appelée la 1ère fois après l'appel deOnCreate

OnDelete() Appelée à la destruction de l'objet

Définir les relationsL'étape suivante consiste à créer les relations

entre les classes. Rajoutons dans la classe précé-dente Consultant une relation une relation bidirec-tionnelle 1-1 avec la classe Course : un consultant

donne un cours et un cours ne peut être donné quepar ce consultant (il n'a pas intérêt à tombermalade celui-là). La classe modifiée nous donne :

[C#]public abstract class Consultant{

// This property contains a unique value.[UniqueId] protected abstract string Id { get; set; }

public abstract string Name { get; set; }public abstract string CompanyName {get;set;}public abstract string Phone { get; set; }public abstract string Fax { get; set; }

public abstract Course MyCourse { get; set; }

public void OnCreate(string newId) {...}}

Voici la classe Course associée. Remarquez la re-lation bidirectionnelle :

public abstract class Course{

[UniqueId] public abstract int CourseId { get; set; }public abstract Consultant MyConsultant { get; set; }

public void OnCreate(int Id){

CourseId = Id;}

}

Le fichier XML de mapping sera le suivant :

<map xmlns="http://www.microsoft.com/ObjectSpaces-v1">

<type name="Consultant"><property name="Id" /><property name="myCourse" relationship= "TeachThisCourse" side="Parent" />

</type><type name="Course">

<property name="CourseId" /><property name="myConsultant" relationship= "ImTaughtByThisConsultant" side="Child" />

</type><relationship name"TeachThisCourse" type="OneToOne" parenType="Consultant" childType="Course">

<key parent="Id" child="CourseId"/></relationship>

</map>

Il existe à l'heure actuelle deux types de rela-tions différentes prises en charge par le framework :1,1 (OneToOne) et 1,n (OneToMany), avec un con-cept de lien d'association LinkedBy ou de compo-sition ComposedBy. Ainsi, lors d'une relation decomposition, toute suppression d'un objet parententraînera la suppression des objets fils.

AAAAAttribut XMLttribut XMLttribut XMLttribut XMLttribut XML ObligObligObligObligOblig DDDDDescriptionescriptionescriptionescriptionescription

type oui OneToOne ou OneToMany

parentType oui Se réfère au parent de la relation

childType oui Se réfère au fils de la relation

Utilisation de l'objet etsynchronisation du cache

Pour utiliser un objet ObjectSpace, commencezpar récupérer une référence sur la Factory avec laméthode CreateObjectSpace. Ensuite, la méthodeCreateObject() renvoie des références d'objets per-sistants en assurant leur création en base. La miseà jour et la synchronisation se fait manuellementpar l'appel aux méthodes os.Update() ou

Figure 1. Les classes principales du framework ObjectSpaces.

A n a l y s e A r c h i t e c t u r e

Page 11: Développeur Référence v2.12

11DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

os.ReSync() pour assurer la synchronisation entièredu cache.// Fichier de configuration de la base de données// et du mappingIObjectSpace os =

ObjectSpaceFactory.CreateObjectSpace("source.xml");Consultant theConsultant =

(Consultant)os.CreateObject(typeof(Consultant), 1);theConsultant.CompanyName = "Valtech" ;theConsultant.Phone = "123456" ;

// Or os.UpdateAll() for updating all objectsos.Update(theConsultant) ;

// Synchronise all the cache with the underlying storageos.ReSyncAll() ;

Course theCourse =(Course)os.CreateObject(typeof(Course), 1);

// Establish the one-to-one relationship.theConsultant.MyCourse = theCourse;

Console.WriteLine("theConsultant.MyCourse.Id: {0}",theConsultant.MyCourse.Id);

Liste d'objetsà partir de critères

OPath est un langage de requête créé spéciale-ment pour ObjectSpaces. Il permet de récupérer ungraphe d'objets persistants selon des critères spé-cifiés en OPath. Le code suivant nous illustre quel-ques exemples de requêtes :

// Renvoie la liste des consultants chez Valtechos.GetObjects(GetType(Consultant), "CompanyName ='Valtech'") ;

// Renvoie un consultantos.GetObjects(GetType(Consultant), "") ;

// etc ...os.GetObjects(GetType(Customer), "Orders.OrderDate >='5/1/1998' and Orders.OrderDate <= '5/31/1998'");os.GetObjects(GetType(Customer), "Orders[Freight >10].Details.Quantity > 50");

// Utilisation dans le cadre d'une relation 1,n :// Consultant donne n Courses// Recherche et Parcours tous les consultants dont le nom// commence par F travaillant chez Valtechforeach( Consultant theConsultant in

os.GetObjects(typeof(Consultant),"CompanyName ='Valtech' and Name < 'F*'") )

{Console.WriteLine("\nConsultant Name: "+

theConsultant.Name );foreach(Course theCourse in theConsultant.Courses){

Console.WriteLine("Consultant: Id: " + theConsultant.Id +", Company Name : " + theConsultant.Company +", Phone : " + theConsultant.Phone +", Fax : " + theConsultant.Fax +", Email: " + theConsultant.Email);

}}

Pourquoi un n-ième langage après OQL (ObjectQuery Langage), SQL (Simple Query Langage),XPath... ? C'est une question que nous sommes endroit de nous poser. Mais il faut bien l'avouer, dansce domaine, Microsoft n'est pas le seul éditeur às'être confronté au problème. Sans aller très loin, lemonde Java contient une multitude d'exemples oùla standardisation du langage de requête objet estun vain mot. Ce sujet a toujours été source de moultdiscussions interminables, que ce soit dans la spé-cification EJB (EJBQL) ou dans des API plus spécifi-ques telles que JDO (http://www.castor.org). Cer-tains utilisent EJBQL (WebLogic), d'autres préfèrentOQL et finalement on en revient toujours à SQL...

MappingObjet/Relationnel

Nous avons gardé le meilleur pour la fin : lemapping Objet/Relationnel. Comment configurernotre base existante (SQLServer, Oracle, ...) pourcontinuer à utiliser les objets précédents ?

Rappelez-vous ce qui a été dit en début d'arti-cle, le but d'ObjectSpaces est de masquer au clientle modèle de stockage physique. Le fait de passerd'une gestion sous forme de fichiers XML à unegestion sous la forme d'une base doit-il changer lavision que le client a de cet objet ? Bien sûr quenon ! C'est pourquoi, au niveau des API, vous neverrez rien qui fasse intervenir une éventuelle re-quête SQL, ni même une table. Tout se passe à l'in-térieur des fichiers de configurations : Map.xml,Connect.xml et DbSource.xml. Vous spécifiez lessources de données vers vos bases, les tables etcolonnes à mapper sur les objets et le tour est joué !

La figure 2 illustre le principe du stockage dansune base SQL Server de nos deux objets Consul-tant et Course avec deux tables.Pour accomplircette tâche il suffit de créer le fichier de mappingXML suivant :

<map xmlns="http://www.microsoft.com/ObjectSpaces-v1">

<type name="Consultant" dataSource="Consultant" source="ConsultantDS">

<property name="Id" dataSource="Id" /><property name="Company" dataSource="CompanyName" /><property name="Consultant" dataSource="ConsultantName" /><property name="Courses" relationship="Teach" side="Parent" />

</type><type name="Course" dataSource="Course" source="ConsultantDS">

<uniquekey name="Id" mappedBy= "autoIncrement" dataSource="CourseId"/><property name="CourseId" dataSource="Name"/><property name="Consultant" relationship= "Teach" side="Child" />

</type><relationship name"Teach" type="OneToMany" parenType="Consultant" childType="Course">

<key parent="Id" child="Courses"/></relationship>

</map>

Ce fichier contient l'association table(colonne)=> champs de l'objet ainsi que les relations entreces objets. A l'avenir, nous pouvons imaginer queMicrosoft fournira des IHM permettant de sélec-tionner des graphes d'objets et de réaliser lemapping graphiquement. Biztalk Mapper ne pro-pose-t-il pas déjà quelque chose de semblable ?

Ensuite, il ne faut pas oublier d'associer le fichierXML (config.xml) contenant les DataSourceADO.NET (lien vers les bases).

<sources xmlns="http://www.microsoft.com/ObjectSpaces-v1">

<source name="Example" adapter="sql" connection="Data Source=LocalHost; Integrated Security=SSPI; Database=Consultant"/>

</sources>

Enfin, le code source du client une fois modifiédoit juste se contenter de charger les fichiers deconfiguration de la manière suivante :

IObjectSpace os =ObjectSpaceFactory.CreateObjectSpace("config.xml");

Vous l'aurez compris, ObjectSpaces est unénorme bond en avant vers l'objet de Microsoft. Lacouche de persistance est la seule brique qui man-quait à .NET pour devenir une véritable architec-ture 3-tiers. Les lecteurs ayant des connaissancesJ2EE et EJB ont dû sourire discrètement à la lecturede cet article. Et oui, ces concepts existent déjà dansles EJB à travers les composants Entity. Oui, ces no-tions existent aussi dans la multitude d'outils depersistance Java tels que JDO, TopLink, CocoBase,Oracle9i et bien d'autres ! Microsoft ré-écrit un n-ième Framework de persistance et a un retard im-portant à combler dans ce domaine, il faut bienl'avouer. D'un autre coté, est-ce vraiment le butd'ObjectSpaces de vouloir contrer Sun ? A suivreles discussions émanant du forummicrosoft.public.dotnet.objectspaces, cela restemoins sûr...

Au delà des discussions d'ordre stratégique, ilse pose la question fondamentale : qu'est-ce queJDO ou les EJB Entity font-ils de plusqu'ObjectSpaces et inversement ?

Java Data Objectsvs ObjectSpaces

Toute comparaison n'a de pertinence que lors-qu'elle basée sur un ensemble de critères com-muns. Nous avons choisi pour ce comparatif les cri-tères qui avaient le plus d'intérêt pour les applica-tions d'entreprise et qui impactent directement laqualité d'un produit :

• Le modèle de développement• Le mapping objet/relationnel• La gestion des transactions• Le langage d'interrogation• Le cache d'objets

Figure 2. Mapping objet/relationnel : principe du stockage en base d'objets.

A n a l y s e A r c h i t e c t u r e

Page 12: Développeur Référence v2.12

12DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

Pour chaque critère nous analyserons de partet d'autre l'implémentation tout en focalisant no-tre attention sur les différences respectives. Toute-fois, il est important de prendre en compte le faitqu'ObjectSpaces est un produit en cours de déve-loppement. Il sera mené probablement à évoluer,il convient donc de prendre avec précaution lesconclusions qui suivront. Enfin, JDO est une spéci-fication émise par Sun et destinée à être implémen-tée. C'est pourquoi, dans cet article, nous avons réa-lisé nos tests avec une de ces implémentations : SunJDO-Ri qui est loin de représenter la qualité d'outilstels que Castor (ExoLab), Kodo ou LiDO (Libelis).

Le modèlede développement

Le modèle de développement consiste à pro-poser un socle technique pour l'implémentationdes objets persistants. Cela comprend la manièred'écrire un objet persistant mais aussi les éventuel-les contraintes liées aux interfaces du framework.

Sur cet aspect, JDO et ObjectSpaces adoptentla même démarche générale. Prenons un exempleconcret avec le célèbre exemple de la Facture cons-tituée de ses lignes :

JDO :public class Facture {

private String _ClientName = null;private List _detail = new LinkedList ();private java.util.Date _date = null;

public Facture (String clientName, java.util.Date date){

_ClientName = clientName;_date = date;

}public void addLigneFacture (Ligne 1){

_detail.add(1);}public void getClientName (){

retrun _ClientName;}public LinkedList detail(){

return _detail;}

…}

ObjectSpaces (C#) :

public abstract class Facture{

public abstract int Id {get;}public abstract DateTime DateFacture {get; set;}public abstract float Total {get; set;}public abstract string ClienName {get; set;}[Composite(typeof(Ligne), "facture")]public abstract IList Detail {get;}

}

Première remarque : ObjectSpaces impose uneabstraction de la classe métier (mot clé abstract)alors que JDO, lui, autorise le client à fournir une

implémentation des méthodes. En d'autres termes,le framework ObjectSpaces génère l'implémenta-tion et JDO réalise une introspection du code clientafin d'extraire les informations dont il a besoin.Nous pourrions à priori penser que JDO ne génèreaucun code, mais détrompez-vous. Il faut bien com-prendre que le rôle d'un framework de persistanceest avant tout de stocker des objets suivant un typeprédéfinit et contraint. Or, le type Facture précé-dent est inutilisable tel quel car il n'est pas disso-ciable techniquement des autres objets. C'est pour-quoi JDO, mais aussi ObjectSpaces, auront pourtâche de générer à l'exécution toute l'implémenta-tion de ces objets afin de les insérer dans le socletechnique du framework. Cette opération est ap-pelée enhancement ou extension. L'intérêt de cettetechnique consiste à masquer totalement au clientle fait qu'il manipule une base de données ou unfichier XML et à générer de manière transparentetoute la tuyauterie nécessaire à l'invocation des re-quêtes liées au type de stockage (SQL, XML... ).

Voyons de plus près le type d'objet manipulépar JDO :

public class Facture implements PersistenceCapable {private String _ClientName = null;private List _detail = new LinkedList ();private java.util.Date _date = null;

// Champs générés par l'ex// Champs générés par l'ex// Champs générés par l'ex// Champs générés par l'ex// Champs générés par l'extttttenseurenseurenseurenseurenseurprprprprprotototototecececececttttted tred tred tred tred transienansienansienansienansient jat jat jat jat javvvvvax.jdoax.jdoax.jdoax.jdoax.jdo.Sta.Sta.Sta.Sta.StattttteManagereManagereManagereManagereManager

jdoStajdoStajdoStajdoStajdoStattttteManager;eManager;eManager;eManager;eManager;prprprprprotototototecececececttttted tred tred tred tred transienansienansienansienansient bt bt bt bt bytytytytyte jdoFe jdoFe jdoFe jdoFe jdoFlags;lags;lags;lags;lags;privprivprivprivprivaaaaattttte stae stae stae stae static String[] jdoFtic String[] jdoFtic String[] jdoFtic String[] jdoFtic String[] jdoFieldNames;ieldNames;ieldNames;ieldNames;ieldNames;privprivprivprivprivaaaaattttte stae stae stae stae static Class[] jdoFtic Class[] jdoFtic Class[] jdoFtic Class[] jdoFtic Class[] jdoFieldTieldTieldTieldTieldTypes;ypes;ypes;ypes;ypes;privprivprivprivprivaaaaattttte stae stae stae stae static Class jdoPtic Class jdoPtic Class jdoPtic Class jdoPtic Class jdoPersistersistersistersistersistencencencencenceCeCeCeCeCapableSuperClass ;apableSuperClass ;apableSuperClass ;apableSuperClass ;apableSuperClass ;

(…)

public Facture (String clientName, java.util.Date date){

_ClientName = clientName;_date = date;

}public void addLigneFacture (Ligne 1){

_detail.add(1);}public LinkedList detail(){

return _detail;

}

// Méthodes générées par l'ex// Méthodes générées par l'ex// Méthodes générées par l'ex// Méthodes générées par l'ex// Méthodes générées par l'extttttenseurenseurenseurenseurenseurpublic boolean jdoIsPpublic boolean jdoIsPpublic boolean jdoIsPpublic boolean jdoIsPpublic boolean jdoIsPersistersistersistersistersistenenenenent() { // implement() { // implement() { // implement() { // implement() { // implementatatatatationtiontiontiontion

générée}générée}générée}générée}générée}public boolean jdoIsTpublic boolean jdoIsTpublic boolean jdoIsTpublic boolean jdoIsTpublic boolean jdoIsTrrrrransacansacansacansacansactional() { //tional() { //tional() { //tional() { //tional() { //

implemenimplemenimplemenimplemenimplementatatatatationtiontiontiontiongénérée}générée}générée}générée}générée}

public boolean jdoIsNewt() { // implemenpublic boolean jdoIsNewt() { // implemenpublic boolean jdoIsNewt() { // implemenpublic boolean jdoIsNewt() { // implemenpublic boolean jdoIsNewt() { // implementatatatatationtiontiontiontiongénérée}générée}générée}générée}générée}

public boolean jdoIsDirpublic boolean jdoIsDirpublic boolean jdoIsDirpublic boolean jdoIsDirpublic boolean jdoIsDirttttty() { // implemeny() { // implemeny() { // implemeny() { // implemeny() { // implementatatatatationtiontiontiontiongénérée}générée}générée}générée}générée}

public boolean jdoIsDpublic boolean jdoIsDpublic boolean jdoIsDpublic boolean jdoIsDpublic boolean jdoIsDeleteleteleteleteleted() {ed() {ed() {ed() {ed() {rrrrreturn jdoStaeturn jdoStaeturn jdoStaeturn jdoStaeturn jdoStattttteManagereManagereManagereManagereManager.isD.isD.isD.isD.isDeleteleteleteleteleted();ed();ed();ed();ed(); } } } } }

public vpublic vpublic vpublic vpublic void jdoMakoid jdoMakoid jdoMakoid jdoMakoid jdoMakeDireDireDireDireDirttttty(){y(){y(){y(){y(){jdoStajdoStajdoStajdoStajdoStattttteManagereManagereManagereManagereManager.Mak.Mak.Mak.Mak.MakeDireDireDireDireDirttttty();y();y();y();y(); } (…) } (…) } (…) } (…) } (…)

}

Vous remarquerez que l'objet généré n'a plusrien à voir avec l'objet initial. Vous comprendrezaisément qu'il est peu souhaitable d'imposer à undéveloppeur d'implémententer une telle classepour chaque objet métier. L'intérêt de l'approchepar génération de code est de faire prendre encharge cette lourde tâche par le framework .

Mais attardons-nous sur les API JDO une fois lesobjets étendus. La figure 3 illustre la philosophiegénérale de l'API. Tous les objets persistants sontdu type PersistenceCapable. Chaque entité est gé-rée à l'aide d'un StateManager chargé de mettre àjour l'objet en cas de modification mais aussi desynchroniser son état avec la base sous-jacente. LeStateManager est de toute évidence l'un des ob-jets les plus importants du framework. Il possèdetoute l'intelligence liée au chargement et à la sau-vegarde des données en mémoire. L'ensemble deces classes est orchestré par le PersistenceManagerdont le rôle est d'intéropérer avec le type de stoc-kage (SQL, XML, …).

Après extension, toutes les méthodes nécessai-res au cycle de vie de l'objet sont créées. Lors d'uneopération quelconque de l'utilisateur visant à ma-nipuler l'état d'une entité, le conteneur JDO ouObjectSpaces prendra soin d'invoquer au préala-ble les différentes méthodes de notification présen-tes dans l'objet (onCreate()…).

Pour changer le type de stockage, il suffit d'ap-pliquer une extension destinée à un autre

Figure 3. L'API JDO.

A n a l y s e A r c h i t e c t u r e

Page 13: Développeur Référence v2.12

13DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

Persistence Manager (XML), et le tour est joué !. Pourrésumer, le JDO Persistence Manager joue le rôlede Factory d'objets du type PersistenceCapable quele client manipule directement de manière trans-parente.

PersistenceManager pm = pmf.getPersistenceManager();Facture p = new Facture("Dupont", new java.util.Date());pm.makePersistent(p);

Concernant ObjectSpaces, la démarche est lé-gèrement différente même si la philosophie géné-rale reste très proche. Contrairement à JDO quimentionne dans la spécification officielle ce quedoit contenir l'objet généré, ObjectSpaces est uneimplémentation et, à ce titre, l'investigation s'avèreplus délicate. N'en déplaise à Microsoft et pour labonne cause (;-)), nous avons décompilé les sour-ces du framework ObjectSpaces à l'aide de l'outilSalamander (www.remotesoft.com). Les résultatsont confirmé le contenu de la documentation duproduit et nous a permis d'en savoir beaucoup plussur le contenu du framework.

Tout d'abord, l'extension d'un objet métier estréalisée à l'aide du compilateur C# suivant le prin-cipe de la génération dynamique de code (cf arti-cle "génération dynamique de code" surwww.dotnetguru.org). Une fois la classe étendue,elle devient du type IObjectSpace qui peut êtrecomparée à l'interface PersistenceCapable de JDO.Le Design Pattern utilisé ici ne fait aucun doute, c'estla Factory (Fabrique de classes), autre point de rac-cordement. La figure 4 résume le principe.

La première étape consiste à récupérer une ins-tance de la Factory d'objets métier étendus de typeIObjectSpace :

IObjectSpace os =ObjectSpaceFactory.CreateObjectSpace("source.xml");

Notez que le fichier source.xml sert à spécifierle type de Factory utilisée : XML, SQL, OleDb, Spéci-fique, etc … Ensuite, il nous suffit de demander lacréation d'un objet métier étendu à l'aide de laméthode CreateObject() prenant en paramètre laclé primaire définie comme suit :

Facture theFacture =(Facture)os.CreateObject(typeof(Facture), "1");

Contrairement à JDO, ObjectSpaces utilise desclasses abstraites. L'utilisateur doit donc aussitôtaprès la création de l'objet initialiser les différentschamps :

theFacture.ClientName = "DotNetGuru" ;theFacture.Date = System.DateTime.Now ;

A ce stade, l'objet possède une identité et uneinstance en mémoire mais n'est toujours pas syn-chronisé avec la base. Il convient donc d'invoquerla méthode UpdateAll() du cache de la manière sui-vante :

os.UpdateAll() ;

Ce scénario, trivial en apparence, fait appel àl'ensemble de la chaîne d'exécution du Frameworktechnique, de la création des instances à la mise àjour des données.

En résumé, vous remarquerez que ObjectSpaceset JDO adoptent une démarche relativement simi-laire à travers une conception centrée sur le DesignPattern Factory et une approche par générationdynamique de code.

Le MappingObjet/Relationnel

Le mapping est la brique essentielle assurant lareprésentation objet du modèle physique.ObjectSpaces et JDO sont encore une fois très pro-che dans leur manière d'aborder les choses.

Concernant le mapping des types, JDO, de partsa nature, utilise les types et collections Java alorsqu'ObjectSpaces se base sur le CTS (Common TypeSystem) de .NET. Si en règle générale, cesframeworks proposent un mapping "un objet re-présente une table", dans la pratique cela tend àdégrader les performances et impose pour réfé-rence le modèle physique (granularité différente…).C'est pourquoi, JDO et ObjectSpaces à travers l'in-terface DataSpace proposent un mécanisme d'ex-tension de la persistance afin d'enrichir le compor-tement de base du framework. Attardons-nous surles mécanismes et les outils proposés de part etd'autre pour concevoir ce mapping.

JDO et ObjectSpaces utilisent tous les deux XMLcomme format du fichier destiné à décrire lemapping Objet/Relationnel. Chacun, à sa manière,formalise ce mapping sous la forme de DTD pourJDO et de Schemas pour ObjectSpaces.

Concernant les outils, la différence fondamen-tale provient du fait que ObjectSpaces propose àtravers Visual Studio .NET un mapper graphiquepermettant de générer le fichier XML précédent. Cemapper est en fait un plug-in tirant partie de l'in-terface de conception XML déjà existante afin degénérer un schéma au format ObjectSpaces.

La gestiondes transactions

La gestion des transactions prend une part im-portante dans chaque framework. Ainsi, les objetspeuvent être modifiés ou supprimés dans le cadred'une seule et même transaction globale avec ousans intervention de l'utilisateur. JDO dissocie deuxtypes de gestion :

• Transactions manuelles : le client spécifie ex-plicitement la démarcation via les ordrespm.begin(), pm.commit() et pm.rollback()

• Transactions gérées automatiquement : lors-qu'une méthode d'un objet métier est appelée, leconteneur JDO effectue les appels commit() ourollback().

De plus, JDO utilise deux modes de verrouillageà travers les transactions :

• Verrouillage optimiste (optimistic transactionmanagement) : aucun verrouillage d'enregistre-ments n'est opéré. Au moment du commit() unecomparaison des instances actives en mémoire etde la base de données est réalisée et en cas d'inco-hérence, une exception est levée. Le client décideensuite de la marche à suivre.

• Verrouillage pessimiste (pessimistic transac-tion management) : utilise le verrouillage classiqued'enregistrement lors des accès concurrents.

ObjectSpaces adopte une démarche similaireconcernant le mode de verrouillage du fait de l'uti-lisation d'un objet DataSet sous-jacent. L'utilisateura aussi la possibilité de gérer explicitement la dé-marcation via les ordres ObjectSpace.BeginTransaction(), ObjectSpace.CommitTransaction() etObjectSpace.RollbackTransaction().

En résumé, JDO et ObjectSpaces proposent lesmêmes fonctionnalités avec un léger avantage pourJDO qui met l'accent sur une gestion plus pousséedes transactions avec le support du protocole XAdans le cas de conteneurs distribués.

Les langagesd'interrogation

JDO adopte à travers l'interface Query le lan-gage JDOQL (JDO Object Query Language) suivantplusieurs objectifs :

• La neutralité par rapport au langage de la base :le langage sous-jacent peut être du SQL, du OQLou n'importe quel système spécifique(mainframe…)

Figure 4. L'API ObjectSpaces.

A n a l y s e A r c h i t e c t u r e

Page 14: Développeur Référence v2.12

14DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

• L'optimisation : il doit être possible de profiterde la puissance des langages sous-jacents tels queSQL pour étendre l'interface Query (requêtes com-plexes, jointures…).

• L'adéquation avec les environnements n-tiers :il doit être possible d'effectuer des requêtes entiè-rement en mémoire ou déléguer leur exécution àun système tiers.

• Le support des gros volumes de données : L'in-terface Query doit gérer le fait qu'un résultat ren-voie de gros volumes d'enregistrements de manièreoptimale, c'est à dire sans instancier au préalabled'objets.

• Les requêtes pré-compilées : il doit être possi-ble de pré-compiler une requête afin d'optimiserles appels ultérieurs.

Quant à ObjectSpaces, le langage OPath est àl'honneur. Ce langage propriétaire, tout commeJDOQL d'ailleurs, permet d'effectuer des recherchesen utilisant un formalisme proche d'OQL. Nous vousinvitons à parcourir l'article de DotNetGuru à ce sujet.

Le cache d'objetsLe cache d'objets constitue la plus value d'un

framework de persistance. L'avantage du cache estde proposer à un utilisateur la manipulation desinstances en mémoire afin d'éviter le surcoût lié àl'exécution d'une requête. Cependant, le cached'objets s'avère pertinent dans un cas bien précis :

lorsque les données sont en lecture seule où lors-que la majorité des instances ne sont pas amenéesà être modifiées.

ObjectSpaces et JDO proposent tous les deuxun cache transparent avec, pour JDO, la possibilitéde spécifier explicitement l'éviction de certainesinstances non utilisées dans le cache à l'aide de laméthode pm.evict(Object persistenceCapable). Al'heure où nous écrivons ces lignes, ObjectSpacesne fournit pas ce type de méthode, l'interfaceIObjectCache comprend uniquement les méthodesUpdate() et Resync().

La spécification de JDO ne mentionne pas ex-plicitement si le cache doit être distribué ou local,cette opération est laissée à l'appréciation duprovider JDO. Toutefois, le développeur a la possi-bilité de bénéficier des services du framework EJB(Distribution, Sécurité, Synchronisation...) en asso-ciation avec le cache d'instances JDO. D'ailleurs, laspécification décrit de manière bien précise la dé-marche à suivre.

Quant à ObjectSpaces, le produit actuel ne pro-pose pas de cache distribué. Les équipes deMicrosoft ont déjà fort à faire pour stabiliser le pro-duit et décliner des versions compatibles avecd'autres bases de données (Oracle, Sybase,MySQL...).

JDO et ObjectSpaces sont des produits très si-milaires à plusieurs égards. L'approche utilisée depart et d'autre consiste à masquer l'ensemble des

opérations de création, modification et suppressiondes instances à l'aide du Design Pattern Factory. Deplus, l'impact du framework concernant les entitésmanipulées est très faible du fait de la transparenceinduite par l'extension de code (génération dyna-mique). L'objet Facture initial se transforme en ob-jet technique PersistenceCapable sous JDO et enIObjectSpace sous ObjectSpaces. Aussi, cet articlenous prouve bien qu'il existe de multiples façonsde concevoir un framework de persistance, encorefaut-il s'entendre sur un langage de requête com-mun. Enfin, ObjectSpaces et JDO nous démontrentune chose, l'avenir appartient aux frameworks quiferont la part belle au couplage faible entre objetsmétier et API de persistance. Finalement, tout l'in-verse de ce que propose aujourd'hui les EJB entités…

ALLER PLUS LOIN

Spécifications officielles de JDO par Sun : JSR 000012 (release)http://access1.sun.com/jdo

Génération dynamique de code (DotNetGuru)http://www.dotnetguru.org/

Mapping objet relationnel avec Castor par Didier Girard :http://w ww.devreference.net/ar ticle.php3?id=41

A n a l y s e A r c h i t e c t u r e

Page 15: Développeur Référence v2.12

15DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

A n a l y s e R e s s o u r c e s

matiser l'utilisation de la loupe d'IE 5.5+, ou déclen-cher toutes les opérations possibles en matière decontenu dynamique. En résumé, si vous avez aiméun effet ou une fonction DHTML sur un site, c'estici que vous les trouverez.

Présentation : ***Contenu : ***Niveau : **http://www.dynamicdrive.com/

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

DHTML Shock

Tout de même, on peut en faire des choses sur-naturelles avec (D)HTML. Sur ce site, très bien tenutant du point de vue graphique que de celui du con-tenu, un grand nombre d'effets spéciaux vous at-tendent, notamment des tracé de déplacement àla souris, des tooltips pour les mouseovers, unehorloge dynamique qui fonctionne sans image,juste avec des couches (layers), des tickers d'actua-lité, des effaceurs de texte fonctionnant sansaucune surcharge pondérale à la Flash, ou encoredes scripts de traitement d'images généralementliés à la taille de la zone active du navigateur. Bref,de tout un peu, avec en plus le plaisir de la décou-

verte. Soit dit en passant, les scripts ici rassemblésson " crossbrowsers ", c'est à dire qu'ils fonctionnentavec tous les navigateurs un tant soit peu actuels.Terminons sur une critique : une fonction deprévisualisation en direct serait la bienvenue…

Présentation : ****Contenu : ****Niveau : **http://www.cgi-resources.com/

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

WebFX

On ne trouvera que peu de scripts sur cette URL,mais la qualité de ce qui y est proposé est maxi-male. C'est bien simple : les résultats obtenus sontà la fois innovants et dépassent ce qu'on aurait crûpossible en HTML. Ainsi, par exemple, vous pour-rez agrémenter vos pages d'une horloge multiple(comme dans les salles de Bourse avec l'heure deTokyo, New-York, Londres, etc.). Autre exemple, unbureau actif (active desktop) sur lequel on peuts'ajouter des Post-It électroniques. Les technologiesmises en œuvre ici sont étendues, puisqu'elles tou-chent à la gestion de fichiers, à l'interface utilisa-teur (dialogues et paramétrages), ainsi qu'au skins

Frédéric Milliotest architecte logicielet consultant encommunication.Il collabore à la pressefrançaise et américainedepuis 1989.

QUATRIÈME PARTIE DE NOTRE DOSSIER CONSACRÉ AUX MEILLEURS SITES WEB POUR LE DÉVELOPPEUR.

RessourcesHTML/XHTML

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

Dynamic Drive

C'est sur ces pages qu'est rassemblée la pluscomplète des collection de scripts (D)HTML dispo-nible sur le Web. Un exemple : dans la section Jeux,une des douze catégories de scripts disponibles,pas moins de dix applications ludiques complètessont proposées. Avec bien sûr les incontournables,comme Tetris (deux versions avec et sans images)ou un casse-briques toutes options, mais égale-ment Phong, un ping-pong contre l'ordinateur avecintelligence artificielle, un testeur de réflexes ouun simulateur de tremblements de Terre. Bien sûr,il y a aussi du sérieux. Vous pourrez ainsi appliquerdes effets de frame à tout document affiché, auto-

Page 16: Développeur Référence v2.12

16DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

(quatre étant distribuées dans le packagetéléchargeable gratuitement). Dernier exemplepour la route : un Démineur pour IE5 et Mozilla quiconstitue en soi un site de moins de 5 Ko (ce code aparticipé au concours annuel des sites Web demoins de 5 Ko http:// www.the5k.org). Bref, un peude futile, mais il y a là beaucoup à apprendre entermes d'élégance de codage.

Présentation : ***Contenu : ****Niveau : ****http://webfx.eae.net/

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

Cross-Browser.comCross-Browser vous offre CBE, une API DHTML

conçue pour étendre les fonctionnalités DHTML àtous les navigateurs et, surtout, à en uniformiserles résultats. Après l'avoir téléchargée en local, onutilise CBE (aujourd'hui en version 4b10) pour dé-velopper les applications. Il suffit ensuite de copierles fichiers résultant et certaines librairies CBE surson serveur pour que tout fonctionne à merveille.Comme son nom l'indique, Cross-Browser fonc-tionne sur à peu près tous les navigateurs du mar-ché : IE, Netscape, Gecko, Opera, Mozilla et AOL -dès lors qu'il se fondent sur un modèle objet. Il fautégalement signaler que le site Cross-Browser peutservir d'IDE en ligne, avec sa propre fenêtreapplicative et ses fenêtres de référence et de débo-gage. Pour vous convaincre de la pertinence de cedéveloppement, n'hésitez pas à visiter les sites in-diqués comme utilisant CBE, notamment la modé-lisation du système solaire avec informations astro-nomiques en popup par simple clic.

Présentation : ***Contenu : ***Niveau : ***http://www.cross-browser.com

RessourcesCGI / PERL

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

Scripts.fr

Ce site se présente légitimement comme "L'an-nuaire francophone des scripts CGI". S'il est moinsexhaustif que ses homologues américains (voir plusbas), il n'en compte pas moins les mêmes fonction-nalités : date de MAJ, cotation par les internautes,indication de l'origine, du langage, de la plate-forme. Mieux, une description sommaire accompa-gne les listings catégoriels, et se double d'explica-tions très complètes, dans des pages à part, surl'auteur, sur la structure du script, sur les pré-requistechniques, sur son implémentation et sur les éven-tuelles précautions à prendre. Cela ressemble à untravail de fourmi, mais le résultat est remarquable.Nous avons également apprécié la simplicité d'ac-cès aux ressources. Les catégories (une petite qua-rantaine) sont précises et listées dès la page d'ac-cueil, si bien qu'on accède aux scripts plus facile-ment qu'ailleurs. Ajoutons pour finir que les auteurssont en train de préparer un cours de CGI en ligne,qui viendra s'ajouter au 10+ tutoriels déjà disponi-bles en français. Souhaitons-leur que les leçons sontd'aussi bonne qualité que le site.

Présentation : *****Contenu : ****Niveau : **http://www.scripts-fr.com/

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

Perl-Gratuit

Le nom du site annonce la couleur, qui n'estdonc pas celle de l'argent. Sur Perl-gratuit, voustrouverez bien sûr des scripts peu onéreux, notam-ment ceux de l'auteur. Ils sont accompagnés decommentaires et d'instructions d'implémentation,et des exemples sont fournis pour que vous puis-siez évaluer avant de télécharger. Mais c'est surtoutpar son annuaire des scripts gratuits en français(plus de 330 au total) que ce site mérité un signet.Tous ont en effet été testés avant que d'être listés,si bien qu'on est certain d'un minimum de qualité.Les tests en question ne se résument d'ailleurs pasà un simple compte-rendu. Pour chaque script, unefiche technique est livrée, qui comporte des indi-

cations sur le temps d'installation, la facilité d'utili-sation, les fichiers à configurer, les points forts etles points faibles et surtout, surtout, des copiesd'écran (une ou plusieurs selon la nature du code).Comme sur Scripts.fr, le travail d'édition est impres-sionnant. Si vous passez par ce site, n'oubliez pasde féliciter l'auteur !

Présentation : ***Contenu : ****Niveau : **http://www.perl-gratuit.com

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

CGI Extremes

A cette URL, c'est l'exhaustivité qui prévaut ! Sivous cherchez un CGI spécial, extraordinaire, aty-pique, exotique ou complexe, il y a des chances quevous le trouviez parmi les 2000+ qui vous sont pro-posés ici. Sept grandes catégories (Statistics, FileManagement, Site Management, Commerce…),elles-mêmes divisées en une quarantaine de sous-catégories (pour Commerce : enchères, petites an-nonces, paniers d'achat, transactions et finance-ment…), orientent le développeur vers le sacréGraal avec une vraie logique. Un système de vote aété mis en place, mais son utilité dépend évidem-ment du nombre de votants (lui aussi indiqué). Lesscripts proposés sont en grande majorité gratuits ;ceux qui ne le sont pas ont au moins le mérite d'êtrementionnés, sachant qu'ils sont parfois les seuls àfaire ce qu'ils font. Signalons enfin que le téléchar-gement ou l'affichage s'effectuent depuis les sitesdes auteurs, avec évidemment un risque de brokenlink - que vous pourrez signaler aux auteurs du sitepour qu'ils mettent la page consultée à jour.

Présentation : ****Contenu : ****Niveau : **http://www.cgiextremes.com/

A n a l y s e R e s s o u r c e s

Page 17: Développeur Référence v2.12

17DÉVELOPPEUR RÉFÉRENCE | v2.12 | 23 avril 2002

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

CGI Resources

Dans la guerre des chiffres, ce site pourrait êtrevainqueur avec, le jour de notre dernière consulta-tion, 4287 " ressources " CGI disponibles. C'est plusque sur CGI Extremes, mais toutes ces ressourcesne sont pas nécessairement des scripts et, s'ils ensont, pas nécessairement en Perl. Car l'intérêt de cesite réside dans son approche " transverse " duscripting en CGI, comme on dit dans les grandscomptes. Pour (continuer à) apprendre, il met àvotre disposition près de 200 articles, tutoriels ouleçons sur tous les sujets désirables : variables d'en-vironnement, cookies, headers HTTP, sécurité oupré-requis du côté serveur… Si vous vous senteznoyé par la masse d'information offerte, un moteurde recherche est là pour parcourir toutes les sec-tions à votre place. Vous pourrez même ajoutervotre propre catégorie dans les différentes arbores-cences, au cas assez improbable où ce que vouscherchez ou développez n'y serait pas déjà.

Présentation : ****Contenu : ****Niveau : **http://www.cgi-resources.com/

RessourcesJavaScript/JScript

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

The JavaScript Source

Près de 1000 scripts Java à copier et coller di-rectement depuis le site, voilà ce que vous trouve-rez chez JavaScript Source, hébergé par

Internet.com. Classés en 23 sections (dont les ajoutsles plus récents), les scripts sont accessibles à par-tir d'une liste à la Yahoo, présente également dansles pages constituant les rubriques, ce qui est onne peut plus pratique. Pour chaque rubrique, la listedes contenus est assez détaillée, et inclut l'histori-que des mises à jour. Enfin, chaque script bénéficied'une " page perso ", avec un descriptif parfois as-sez détaillé de l'objet du script, un mode d'emploiet d'implémentation, ainsi qu'une zone de copiage.Si vous préférez, le code pourra vous être e-mailédirectement. Si vous laissez votre adresse électro-nique, vous pourrez également en profiter pourvous abonner à la newsletter JavaScript Source -en version texte ou HTML, ou en version résuméemensuelle.

Présentation : ***Contenu : ***Niveau : **http://javascript.internet.com

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

JavaScripts.com

Abondance de biens ne saurait nuire. C'est pour-quoi nous vous présentons également ce site, encomplément de The JavaScript Source. Les deux ontdes vocations équivalentes : vous offrir autant descripts gratuits et prêts à l'emploi que possible, pourque vous n'ayez plus rien à faire ou presque. Ici, unmoteur de recherche en page d'accueil complètel'accès direct par rubriques (16 au total, y comprisMathematics, Business et Security). Dans chaquesection, un descriptif sommaire donne accès à lapage du script, laquelle est succincte au possible :le nom de l'auteur, la date de mise à jour, le prix(gratuit sauf exceptions) et la plate-forme requise(versions de Netscape ou de IE), ainsi que deux liens: l'un pour tester le script, l'autre pour en voir oucopier le code. Plusieurs contributeurs célèbresdans la communauté collaborent parfois au site enlui offrant des articles techniques dont certains sontexcellents (même s'ils débordent le script cadre duJavascript). On pourra donc aussi apprendre à cetteadresse, et avec les experts, s'il vous plaît !

Présentation : ***Contenu : ***Niveau : **http://www.javascripts.com

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

Tout JavaScriptPremier site français de cette catégorie, Tout

JavaScript n'est pas le plus exhaustif de la Toile enmatière de Javascripts. Cela étant dit, ceux qui y

sont ont été choisi pour leur utilité. Ainsi, entreautres, citons un redirecteur vers d'autres pagesWeb en fonction de la résolution d'écran del'internaute, un détecteur de vitesse de connexion,un extracteur d'URL ou encore un moteur de chat(celui du site, en l'occurrence). Particularité de cetteURL, tous les scripts sont testables en direct, si bienque l'on sait tout de suite à quoi on a affaire. ToutJavascript vaut également pour les tutoriels qu'ilpropose, plus de 25 traitant chacun d'un sujet pré-cis (les cookies, les tableaux Javascript, Javascriptet PHP) et agrémentés de codes et d'exemples com-plets.

Présentation : ***Contenu : ***Niveau : **http://www.toutjavascript.com

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

JavaScriptFRVoilà un site à l'esthétique particulière, mais que

nous trouvons réussie. C'est toutefois pour son fran-çais qu'il prend place lui aussi dans ces colonnes.Moins riche que ses équivalents américains, il per-met néanmoins un accès multi-critérisé à ses con-tenus, par ailleurs classés par niveau (1 = débutant,2 = intermédiaire, 3 = expert). Quelques exemplesde scripts : un jeu de 421, un menu arborescent 100% JavaScript, des barres de défilement en couleurou la détection automatique d'une adresse IP. Com-munautaire, JavaScriptFR héberge également unforum, destiné à offrir à chacun un coup de mainplus ou moins immédiat, mais dont les questionset contributions sont pour la plupart de niveaudébutant, ainsi qu'un newsgroup où, cette fois, lalecture est un peu plus enrichissante. Si vous par-lez peu l'anglais et que JavaScript est votre lot quo-tidien, vous y trouverez peut-être votre bonheur.

Présentation : ****Contenu : ***Niveau : **http://www.javascriptfr.com

A n a l y s e R e s s o u r c e s