Etude exploratoire de Linq

Dimension: px
Commencer à balayer dès la page:

Download "Etude exploratoire de Linq"

Transcription

1 Année académique Faculté des Sciences appliquées Etude exploratoire de Linq Directeur de mémoire : Dr. Ir. Hugues Bersini Mémoire présenté par Charles Schoonenbergh En vue de l obtention du diplôme de Master en ingénieur civil informaticien, spécialité ingénierie informatique

2 Abstract Linq est une technologie apparue avec C# 3 et VB 2008 et a été présenté comme un gigantesque bon en avant dans le domaine de la gestion des données. La présente étude se propose d explorer Linq depuis ses fondements jusqu à l analyse de plusieurs mises en situation. L étude débutera par l analyse des enrichissements syntaxiques apportés avec C# 3 pour ensuite définir le formalisme de requêtes utilisé par Linq. Linq se décline en une série d implémentations, celles-ci seront examinées en détails en commençant par Linq to Object. Ensuite viendra le tour de Linq to Sql. Cette implémentation étant source de beaucoup de controverse, une attention toute particulière y sera apportée. Plusieurs tests de mise en œuvre seront appliqués, notamment en ce qui concerne les performances relatives à un code équivalent rédigé avec la couche ADO.NET classique. D autres implémentations relationnelles seront étudiées comme Linq to DataSet, Linq to Entities exploitant la toute nouvelle technologie Entity Framework et une brève analyse de l implémentation Db Linq sera faite. L implémentation Linq to Xml sera ensuite étudiée, présentant les nouveautés liées à la gestion du contenu Xml. Un bilan des nouveautés proposées par Linq sera ensuite établi et l étude se terminera par l analyse des alternatives à Linq, que ce soit pour la plateforme.net ou pour d autres langages orientés objet, ainsi que Java, PHP ou Python.

3 Table des matières Conventions d écriture 1 Introduction 2 1. Vue d ensemble 3 2. Mécanismes sous-jacents Quelques rappels Généricité Délégués Méthodes anonymes Enrichissements syntaxiques Inférence sur le typage Expressions lambda Expressions arborescentes Extensions de méthode Formalisme d une requête Implémentation Objets Champ d application Quelques opérateurs à la loupe Projection groupée Inversion et indexes Groupement Quantificateurs Conversion en énumérable Exemple illustratif Implémentations relationnelles Entités en mémoire Linq to SQL Mapping Syntaxe au niveau du code Principe et fonctionnement Gestion par le DataContext 21

4 4.2.2 Opérations fondamentales Cas pratiques Erreurs et difficultés Performances Test d insertion Test en situation concurrentielle Conclusion Linq to DataSet Linq to Entities Concept fondateur Fonctionnement Mapping Rôlede Linq Db Linq Implémentation XML En pratique Ressenti général Points forts, points faibles Quelles alternatives? Java JDO Hibernate NET NHibernate Entity Framework Autres langages Persistance personnalisée Bases de données objets Evolutions de Linq Version Ce qui reste à améliorer Linq et Mono 49 Conclusion 50

5 Bibliographie 51 Annexe 1 : Code de l exemple Linq to object 52 Annexe 2 : Code de test de performance Linq to Sql 55 Annexe 3 : Utilisation d une base de données MySql avec Linq to DataSet 65

6 Conventions d écriture Afin de rendre plus aisée la lecture de ce document, des conventions d écriture ont été adoptées. Les termes faisant référence à une classe, un assemblage ou une méthode seront écrits en italique et dans le respect de la casse originale, comme ceci : Methode définie pour telle Classe. Les termes faisant références à des procédures ou à des techniques bien connues seront écrit avec une majuscule pour mieux ressortir, comme ceci : La clause Select du langage Sql. Les extraits de code seront présentés dans une police spéciale pour bien ressortir du texte principal. En outre, un alinéa supplémentaire sera observé, comme ceci : Ceci est un extrait de code; Les références à des sites internet se feront comme des références classiques lorsque le site contient de l information dont le présent écrit est inspiré. Lorsque du contenu est cité explicitement, une note de bas de page présentera l adresse web exacte.

7 Introduction Depuis l apparition des langages orientés objet, le problème de la persistance des données a toujours été crucial. Un programme incapable de retenir ce qui s est passé lors de sa précédente exécution ne présente qu un intérêt limité. Malheureusement aucun langage orienté objet n a de prise directe sur cette capacité de persistance. Des systèmes de stockage se sont développés, certains très antérieurs aux langages orientés objet eux-mêmes. C est le cas des bases de données relationnelles qui stockent l information sous forme de tables ayant des relations entre elles. Ce mode de stockage c est petit à petit imposé comme acteur principal lorsqu il s agit d enregistrer des informations depuis un programme. L ennui est que les langages de programmation actuels ne s interfacent pas parfaitement avec ce type de persistance. Depuis longtemps déjà, des solutions sont mises en œuvre pour palier à ce problème. Réaliser un interfaçage n est pas tout, il reste le problème de la dépendance au niveau du code. Si changer le système d enregistrement des données implique de réécrire la moitié de l application qui les utilise, la situation est gênante. L abstraction envers le stockage a ses limites, lui aussi. Les bases de données orientées objet et plus tard leurs homologues basées sur Xml sont venues s ajouter dans le paysage moderne de la persistance. Ces gestionnaires de données n utilisent cependant pas le même langage et passer de l un à l autre sans rien changer est tout simplement irréalisable. Nous avons donc actuellement affaire à des applications mêlant plusieurs langages de programmation, généralement de l orienté objet couplé à un langage de requêtes propre à la source de données. C est là que la tâche du développeur se complique. Il faut non seulement maîtriser plusieurs langages mais en plus pouvoir interfacer les deux de la façon la plus abstraite possible car un changement de politique de stockage est toujours possible. Linq a été introduit avec C# 3 et VB Derrière cet acronyme, Language INtegrated Query, se cache presque tout un paradigme. Une nouvelle manière d appréhender les données, spécialement celles qui sont persistantes. La présente étude se propose d explorer les différentes possibilités qui caractérisent Linq tout en gardant un œil critique sur ce que Microsoft annonce comme étant LA révolution dans le monde de la programmation. Nous tenterons dans un premier temps de mettre en lumière les solutions techniques qui ont été mises en œuvre avec Linq. La question du champ d application sera ensuite abordée, passant en revue les différentes implémentations de Linq : ce qu il peut faire ou ne pas faire et quels types de données il peut cibler. Nous nous intéresserons tout particulièrement au cas des données relationnelles qui restent, comme déjà précisé, un acteur incontournable dans le domaine de la gestion des données non volatiles. Après ces différentes études de cas, nous tenterons de faire le point sur les forces et faiblesses de Linq avant d envisager les alternatives à son utilisation. Viendra enfin un examen de son devenir et de ses éventuelles évolutions avant de conclure notre étude.

8 Chapitre 1 : Vue d ensemble Dans cette section nous allons donner un avant-goût de Linq et préciser la méthode générale qui sera suivie durant cette étude. Tout au long de ce rapport nous utiliserons le terme de Linq pour désigner l ensemble des fonctionnalités accessibles grâce à ses implémentations. Linq n est pas réellement un tout unifié mais davantage un regroupement de plusieurs API partageant une syntaxe commune. Il est bon de garder cela en tête pour éviter toute confusion. Ce chapitre est inspiré de [1]. Comme son acronyme l indique, Linq offre la possibilité de faire des requêtes intégrées au langage, mais que devons-nous comprendre par là? En réalité, le terme requête sera expliqué dans le prochain chapitre et lorsque nous parlons de langage il s agira de C# et VB Ces deux langages de programmation font partie de la plateforme.net (prononcé dotnet, à l Anglaise), parfois aussi appelé framework.net. Comme abordé dans l introduction, un problème majeur actuellement est de devoir mélanger des langages appartenant à des paradigmes différents : en général un pour la programmation orientée objet et l autre pour la gestion des données stockées. L ensemble des difficultés engendrées par la mixité des langages est souvent appelé «impedance mismatch» dans la littérature internationale. Ce problème d impédance entre langages résulte souvent en une baisse de productivité pour le développeur et une panoplie d erreurs difficiles à débusquer car n apparaissant potentiellement que très tard, à l exécution. Linq est présenté comme le remède à tous ces soucis, offrant un seul langage où tout est vérifié à la compilation. Reste à voir quel fossé existe entre ce genre d annonces publicitaires et la réalité de la conception d applications. Cette étude a pour but d explorer Linq et ses fonctionnalités, c'est-à-dire d examiner de quelle façon Linq se propose de faire la jonction entre le monde des objets et celui de leur persistance. Nous ne prétendons pas porter de jugement sur le choix de telle ou telle manière de réaliser le stockage des données. Il n est pas non plus de notre ressort d établir que tel langage de programmation est mieux qu un tel autre. Nous tâcherons également de rester aussi objectifs que possible dans nos considérations, il ne s agit pas de vanter Microsoft ou même Linq mais d étudier ce dernier. Nous essayerons de partir de sources documentées aussi officielles que possible pour ensuite mettre en œuvre des cas concrets. Diverses autres sources seront cependant mentionnées mais leur caractère non officiel sera précisé.

9 Chapitre 2 : Mécanismes sous-jacents 2.1 Quelques rappels Avant de se lancer dans l analyse des nouveautés syntaxiques, rappelons certains aspects intéressants déjà présents dans le deuxième framework de.net. Ces fonctionnalités sont à la base de Linq et constituaient déjà des avancées majeures dans le domaine de l abstraction en général. Il s agit des classes génériques, des méthodes anonymes ainsi que des délégués. Nous allons les passer rapidement en revue en montrant leur intérêt du point de vue de Linq ainsi que leur rôle. Les améliorations venues se greffer par-dessus ces mécanismes seront détaillées dans la prochaine section. L ensemble de cette section est principalement inspiré de *2+ pour le contenu et de *1+ pour sa structure Généricité La généricité, en tant que telle, a été introduite dans le langage C++ par le biais des classes templates. Le principe, rappelons-le brièvement, est de pouvoir considérer l exécution d un code sans avoir à spécifier quel type d objets il manipulera. C#, dans sa version 2, permettait l usage et la définition de classes, de structures, d interfaces et de fonctions génériques. En plus d apporter une plus grande sûreté dans la programmation 1, la généricité rend également un code plus réutilisable lorsqu elle est utilisée. De ce fait, l usage des génériques offre un niveau d abstraction facile d emploi. Une liste peut être définie de manière générique, car les principes d insertion, de recherche et de suppression ne sont aucunement liés au type de contenu. A l utilisation, la liste sera précisée comme étant une liste d entiers, de strings ou de n importe quel type d objets dont il sera question à ce moment-là. La définition de la liste représente bien une abstraction par rapport à son contenu et néanmoins, le compilateur remarquera les opérations illicites au niveau typage (impossible d ajouter un string à une liste d entiers par exemple). La généricité est importante pour envisager Linq, les manipulations de données (telles qu une insertion, une suppression ou une recherche, tout comme pour la liste) n étant pas liées directement au contenu. Comme nous le verrons plus loin, Linq utilise une interface générique pour manipuler des données Délégués Les délégués sont des objets (de classe Delegate ou d une de ses sous-classes) qui peuvent appeler une ou plusieurs fonctions, à la manière des pointeurs de fonctions en C++. Le principe n est pas nouveau, son origine remonte au C++ comme nous venons de le préciser. Ce qui est nouveau, en revanche, ce sont les facilités de syntaxes ainsi que la possibilité d ajouter un nombre variable de fonctions à un délégué. Un exemple illustratif inspiré de [2] mettra en lumière ces aspects à la page suivante. 1 La généricité dans les collections permet d encore accroître le typage et donc la vérification à la compilation.

10 class Exemple static void f1() Console.WriteLine("fct1"); static void f2() Console.WriteLine("fct2"); delegate void T(); //declaration du delegue static void Main(string[] args) T del = new T(f1); del += new T(f2); del(); //execute les deux fonctions pointees En lisant l exemple ci-dessus, la première chose qui va nous intéresser est la déclaration du délégué. Ceci correspond bien à une déclaration de type (ici un type nommé T) dont nous avons le choix de son nom (T) et le mot clé delegate précise qu il s agit d un type délégué. Il est possible d ajouter au délégué une ou plusieurs références à des fonctions à la condition que celles-ci respectent la signature du délégué (ici aucun paramètre et void comme retour). C est ce dont il s agit dans les deux premières lignes de la méthode Main. Lorsqu un délégué fait référence à plusieurs fonctions, il les exécute toutes dans l ordre avec lequel elles ont été assignées au délégué. Ainsi, le code de l exemple plus haut produirait en sortie le résultat suivant : Figure 1 : appels de délégués Le principe des délégués est à la base des expressions lambda fortement utilisées par Linq. Comme nous le verrons ces expressions sont spécialement utilisées dans la résolution des clauses de requêtes (select, where ) Méthodes anonymes Les méthodes anonymes ont été introduites avec la deuxième version de.net. Il s agit de suites d instructions jouant le rôle d une méthode, sans pour autant définir explicitement de fonction. Cela s utilise en conjonction avec les délégués, de la manière suivante : del += delegate string text = "Il est " + DateTime.Now.ToString(); Console.WriteLine(text); ; En effet aucun nom de méthode n a été spécifié. La seule contrainte d utilisation est qu il est impossible de faire marche arrière, puisque retirer la référence à cette méthode dans le délégué implique de pouvoir nommer cette référence. En poussant le raisonnement plus loin, pourquoi ne pas utiliser une méthode anonyme en paramètre d une autre méthode? La lisibilité et la compréhensibilité du code s en trouvent améliorées. Linq utilise les méthodes anonymes dans ce but, améliorer la lisibilité des requêtes. Vouloir obtenir «tous les étudiants tels que leur moyenne est supérieure ou égale à 10 et les grouper par section» s écrirait en pseudo code : etudiants.where(moyenne >= 10).OrderBy(section).Select(etudiant);

11 Etudiants désignant une collection de données, l appel à la méthode Where devrait prendre en paramètre une ou plusieurs conditions à tester. Comment effectuer ces tests sans savoir au préalable leur nombre et leur nature? Le recours à une méthode anonyme va permettre de manipuler une ou plusieurs conditions complexes 2 et d extraire ainsi les objets répondant à la condition pour passer cette nouvelle collection en paramètre de l appel suivant et ainsi de suite. Linq fait un usage extensif des méthodes anonymes en conjonction avec une syntaxe simplifiée (ce point sera développé lors de la présentation des expressions lambda) pour exprimer les clauses d une requête, comme le dernier exemple l a suggéré. 2.2 Enrichissements syntaxiques Comme nous venons de le voir, certains aspects du langage C# dans sa version 2 introduisent des fonctionnalités qui nous seront utiles pour mieux cerner les fondements de requêtes sur des données abstraites. Nous allons maintenant aborder de nouveaux éléments syntaxiques, pour la plupart basés sur les mécanismes que nous venons de passer en revue. Ces nouvelles fonctionnalités vont un cran plus loin et mettent en place les bases d un langage de requêtes. Nous allons y voir comment le compilateur peut désormais inférer le typage d un objet lorsque celui-ci n est pas spécifié, comment mettre en place les méthodes d interrogations proprement dites et enfin nous allons découvrir une nouvelle façon d écrire les méthodes anonymes au moyen des expressions lambda. Avec tous ces pré requis en place, nous allons pouvoir examiner la syntaxe globale d une requête au sens de Linq en y montrant le rôle de chacun des mécanismes vus jusque là. Cette section repose essentiellement sur des informations tirées de [4] et arrangées selon une structure inspirée de [1] Inférence sur le typage L inférence sur le typage permet au compilateur de déduire le type de variables sans que le développeur ait besoin de le lui signaler explicitement. Comme cette étape se passe à la compilation, les risques d erreur restent limités tout en autorisant une syntaxe plus libre. Le mot-clé var peut être utilisé en lieu et place du type d une variable et indique au compilateur que son type devra être inféré à la compilation. A noter toutefois que l inférence sur le typage est une opération locale et ne peut donc être appliquée au champ d une classe ni dans le cas d un paramètre. Il est important de parler, à ce stade, d une autre nouveauté introduite par la troisième version du framework.net, le typage anonyme. Le typage anonyme permet de créer une variable sans en spécifier le type ni l appel explicite au constructeur (cette dernière particularité constitue elle aussi une nouveauté et est disponible pour tous les types). Ainsi il est parfaitement licite d écrire le code suivant pour une classe Personne ayant comme attributs publics les champs Nom (de type string) et Age (de type int) : Personne p = new Personne Nom = "Tartempion", Age = 40 ; var montypeanonyme = new p.nom, p.age ; Linq étant présenté comme une couche d abstraction dans l accès aux données, l intérêt d intégrer une telle syntaxe est évident. Un changement dans le type du champ Age (passage de integer en short par exemple) laissera intacte la présentation des résultats de requêtes ou les modifications de valeurs impliquant ce champ. 2 Complexe est utilisé ici pour signifier qu on dépasse le cadre d un simple opérateur conditionnel tel que ==.

12 2.2.2 Expressions lambda Cette sous-section rassemble également des informations provenant de [1] et de [6]. Le type delegate introduit avec la version 2 du framework.net représente un moyen de faire pointer du code vers une fonction définie ailleurs. L expression lambda simplifie cette pratique et permet plus de souplesse à l utilisation. Ceci s avère particulièrement utile pour l écriture de méthodes anonymes, comme le montre l exemple suivant (trouvé sur [6]) : //methode anonyme recuperant les entiers positifs, ecrite avec la //syntaxe 2.0 List<int> list = new List<int>(new int[] -1, 2, -5, 45, 5 ); List<int> positivenumbers = list.findall(delegate(int i) return i > 0; ); //meme code ecrit avec une expression lambda List<int> list = new List<int>(new int[] -1, 2, -5, 45, 5 ); var positivenumbers = list.findall((int i) => i > 0); La syntaxe d une expression lambda est toute simple. Elle se compose d une liste de paramètres (un seul, dans l exemple ci-dessus, l entier i), du symbole «=>» intuitivement traduit par «tel que» et d une expression qui constitue en fait la valeur retournée par l expression lambda. Cette formulation est bien plus lisible et se prononce «tous les entiers i tels que la valeur de i est strictement supérieure à 0». Un autre avantage est que la valeur retournée par l expression lambda est typée implicitement, comme l indique le mot-clé var dans l exemple précédent. En plus d une simplicité d écriture pour les méthodes anonymes, les expressions lambda permettent de traiter des expressions proches des clauses Sql. Ainsi une clause Where dans une requête Sql peut se voir comme une condition de filtrage du résultat. Pour exprimer ceci en termes d expressions lambda, nous appelons notre condition de filtrage définie par une expression lambda sur le résultat, de cette manière résultat.filtrage(conditions). Le résultat de ce filtrage peut être lui-même soumis à d autres opérations de ce type, présentant l avantage de pouvoir lire les opérations séquentiellement de gauche à droite : résultat.filtre1( condition1.1, condition1.2).filtre2( condition2.1, condition2.n) et ainsi de suite. C est ainsi que Linq en fait usage, pour passer à chaque opérateur de clause le résultat créé par l appel des clauses précédentes : EnsembleFrom.Where(clause where).select(clause select).orderby(critère de tri). Nous ne parlons ici que des clauses au sens relationnel du terme, le Sql étant devenu en quelque sorte le standard pour interroger des données, nous nous contentons d utiliser ici l analogie. Nous verrons plus loin que Linq a adopté une syntaxe qui en est très proche Expressions arborescentes Agir sur une source de données implique de pouvoir naviguer, disons, parmi les nœuds de sa structure. La notion de relation entre des données stockées caractérise ceci au niveau conceptuel, mais en pratique, qu en est-il? Pour des collections d objets en mémoire, des itérateurs ou des méthodes de saut à un autre élément sont généralement fournis par la collection elle-même. Pour une structure relationnelle, les relations sont réalisées par des jointures entre plusieurs tables. Aucun mécanisme orienté objet ne permet d appeler une fonction qui sautera directement vers l élément désiré. Le problème est le même lorsqu on manipule des données en Xml bien que, dans ce cas, la syntaxe des requêtes soit plus proche du paradigme objet. Pour résoudre ce problème, les expressions arborescentes (expression tree, en Anglais) ont vu le jour. L intérêt n est pas tant de manipuler en soi la source de données mais plutôt de pouvoir naviguer dans un résultat et surtout dans une requête. Comprendre la notion de jointure est indispensable pour écrire une requête qui y

13 fait appel et l idée est ici que nous dotons notre programme orient objet d un outil capable de comprendre comment réaliser la navigation. Nous allons tenter de brièvement résumer son fonctionnement. Le concept des expressions arborescentes est dérivé de celui des expressions lambda. Premièrement, une expression arborescente est une expression lambda dont le code va être maintenu en mémoire. Deuxièmement, cette expression peut être parcourue lors de l exécution. Troisièmement, elle devra être compilée pour pouvoir être exécutée dans le langage propre à la source de données. Tentons maintenant de faire le lien entre ces trois propriétés. Le code sera maintenu en mémoire pour pouvoir être analysé pas à pas et modifié le cas échéant. L expression devra être compilée, donc son impact sur la source de données sera construit au moment de l exécution. Il faut comprendre ici le terme «compilé» comme signifiant «transformé dans le langage propre à la source de données et optimisé pour plusieurs exécutions successives» 3. La compilation classique, avec validation syntaxique, a bien entendu toujours lieu. Par exemple, si la requête implique une lecture dans une base de données relationnelle, la création de la requête Sql se fera à la volée. Une requête peut être jugée comme étant syntaxiquement correcte sans avoir besoin de connaître la nature de la source de données. Pour pouvoir être compilée, la requête doit disposer de son code en mémoire. Ce code sera parcouru de manière à créer des instructions pour la source de données. Ces instructions se composent de blocs logiques à la manière d une équation mathématique. La longueur de ces instructions n est pas fixée et l expression qui en représente une possède une structure en arbre, d où le terme d expressions arborescentes. En résumé, cela revient à dire qu une expression arborescente représente un traitement générique (les paramètres sont fournis à l exécution) et que le code de cette expression est compilé à la volée, durant l exécution du programme. L intérêt est de pouvoir construire des requêtes dont les paramètres seront fournis à l exécution et de choisir quand exécuter cette requête dans une optique d optimisation. Cet aspect générique va permettre au développeur d écrire une requête Linq paramétrique et de choisir à quel moment et vers quelle cible il décidera de l exécuter. Cette requête pourra ainsi être traduite en une expression Sql si la source de données est relationnelle ou au contraire en une requête XQuery à destination d un fichier Xml. Jusqu ici rien n a été cité pour justifier l utilisation d autre chose qu une expression lambda adaptée. En réalité, les possibilités offertes par les expressions lambda sont limitées lorsqu un certain nombre d appels, récursifs ou non, sont nécessaires en leur sein. Considérons le code suivant (le code et l explication y afférante sont tirés de *1+): fac => x => == 0? 1 : x * fac(x-1) Ce code ne compilera pas tel quel, il est impossible d appeler une expression lambda depuis sa définition, ce que tente pourtant de faire l appel «fac(x-1)». Bien qu il existe des techniques pour palier à ce problème, nous n allons pas les traiter ici. Le but était seulement de montrer avec un exemple simple que les expressions lambda ne permettent pas de tout faire. Rappelons que les expressions lambda sont utilisées par Linq pour représenter les clauses d une requête. Mais certaines clauses peuvent être arbitrairement complexes. Pensons par exemple à la possibilité de réaliser une requête imbriquée dans une clause Where en Sql. Une simple expression lambda ne peut en ellemême représenter une clause réalisant une requête imbriquée, cela l obligerait à s appeler elle- 3 Le terme compilé est traduit de l Anglais «compiled» tel que mentionné dans *1+. L explication fournie est en revanche personnelle.

14 même durant sa définition. Les expressions arborescentes permettent de résoudre ce problème en constituant une super expression composée de nœuds selon une structure en arbre. La construction finale de l expression se fait en commençant par les feuilles de l arbre, en remontant ensuite. L ouvrage *1+ propose l explication la plus claire qui a pu être trouvée sur la cuisine interne des expressions arborescentes. Cette explication se base sur un exemple qui confronte une expression lambda avec une expression arborescente, le code présenté ci-dessous est tiré de cet exemple. Nous allons tenter de résumer cette explication afin de bien percevoir ce qu est une expression arborescente. Commençons donc par un code qui devrait permettre d afficher le type d une expression lambda et celui d une expression arborescente (certains extraits ont été traduits en dehors de quoi le code est identique à celui proposé dans l ouvrage) : static void exemple() Func<int, int> lambdainc = (x) => x + 1; Expression<Func<int, int>> exprinc; exprinc = (x) => x + 1; Console.WriteLine("avec expression lambda : 0", lambdainc.tostring()); Console.WriteLine("avec expression arborescente : 0", exprinc.tostring()); Bien que la déclaration soit écrite de manière différente, le résultat est préssenti comme devant être le même. Parlons maintenant du résultat non pas de ces deux expressions mais de l affichage dans la console. Le résultat produit par ce code prend cette forme : Figure 2 : types d'expressions Notre expression lambda est en fait une référence vers un type créé par le compilateur, le type «`2» prenant deux paramètres entiers. Notre expression arborescente quant à elle semble contenir la structure de l expression sous forme plus lisible. Rappelons-nous qu une expression lambda est en réalité une abréviation pour l écriture d un délégué. Le compilateur crée donc un objet délégué d un nouveau type, puisqu une expression lambda fait usage du typage anonyme. Le type créé pour notre expression arborescente n est pas un délégué, comme nous pouvons le voir. Pour découvrir comment est interprétée cette expression, [1] nous fournit le schéma page suivante ainsi que le code correspondant à ce schéma.

15 Figure 3 : schéma d'une expression arborescente Pour réaliser une structure similaire, voici le code proposé : static void equivalent() Expression<Func<int, int>> exprinc; ConstantExpression constante = Expression.Constant(1, typeof(int)); ParameterExpression parametre = Expression.Parameter(typeof(int), "x"); BinaryExpression addition = Expression.Add(parametre, constante); exprinc = Expression.Lambda<Func<int, int>>(addition, new ParameterExpression[] parametre ); Console.WriteLine("ex. arb. avec syntaxe equivalente :"); Console.WriteLine("0", exprinc.tostring()); Et ce code produit le résultat que voici : Figure 4 : type d'une expression arborescente Notons que les quelques lignes qui apparaissent entre la déclaration de l expression et l affichage en console, tout ce groupe représente l équivalent de ce qui avait écrit la première fois comme «exprinc = (x) => x + 1». Nous avons bien généré l arbre en partant des feuilles, nœud par nœud. Sans compliquer trop l explication, signalons juste que chaque nœud est matérialisé par un objet nœud de type générique, permettant d assurer la navigation au sein de l expression.

16 2.2.4 Extensions de méthode «Extension de méthode» est le terme utilisé pour ajouter une méthode à une classe donnée sans manipuler le code de cette classe. Cela reviendrait à créer une classe héritant de la classe de base en spécifiant la ou les méthodes que l on souhaite y ajouter. Plus qu une facilité syntaxique, l extension de méthode permet d éviter les pièges tendus par l héritage et n introduit pas de biais conceptuel dans la programmation. Une extension de méthode ne peut utiliser que les champs publics de la classe dont elle est l extension. Elle doit elle-même être déclarée comme publique et statique. Son premier paramètre doit être précédé du mot-clé this et le type de ce paramètre définit le type dont la méthode est une extension. Le code suivant (tiré de [11]) montre une extension de méthode ayant pour effet de représenter un nombre décimal sous forme de chaîne de caractères au format standard US : //Exemple fourni par Linq in Action public static string FormattedUS( this decimal d) return String.Format( formatus, "0:#;0.00", d); L utilisation des extensions de méthodes donnera peut-être l impression de faire double emploi avec les méthodes virtuelles mais il faut garder à l esprit qu une méthode virtuelle est résolue à l exécution alors qu une extension de méthode doit être résolue dès la compilation. Précisons enfin que le type étendu peut être générique, ce qui offre la possibilité d étendre un ensemble de types simultanément. Typiquement, les extensions de méthodes sont utilisées lors de l appel de clauses dans les requêtes comme les clauses Where ou Select. Le framework.net dans sa version 3 propose une interface générique IEnumerable<T> pour représenter toute donnée susceptible de faire l objet d une requête ou d une manipulation propre aux données. Des extensions de méthodes sont définies pour chaque clause avec cette interface (ou l un de ses descendants) comme type étendu Formalisme de requêtes Cette sous-section s inspire très fortement de *1+ et *11+. Les expressions de types requêtes ont été introduites avec la troisième version du framework.net et définissent la forme générale d une requête lorsqu elle est écrite en C# ou en Visual Basic Une requête apparaît ici au sens large puisque la syntaxe sera la même que ce soit une requête vers une base de données relationnelle, vers une liste d objets en mémoire ou encore vers un fichier XML. Une requête correctement formulée doit commencer par une clause From et se terminer par une clause Select ou une clause group. La clause From indique quels types d objets vont être interrogés et ceux-ci doivent implémenter l interface IEnumerable<T> représentant une collection de données générique susceptible de faire l objet d une requête. Chaque clause de l expression correspond à un ou plusieurs appels d extensions de méthodes pour l interface citée précédemment. Voici un exemple de requête typique : var query = from e in etudiants where e.moyenne >= 10 select e; Le compilateur interprétera l expression ci-dessus de la manière suivante : var query = etudiants.where(e => e.moyenne >= 10).Select(e => e);

17 A noter que etudiants n a pas été particularisé et pourrait être aussi bien une classe représentant une table de données relationnelle qu une liste ordonnée d objets en mémoire. Dans les deux cas, le code écrit reste correct. Les expressions de type requête sont traduites par le compilateur. La validité d une requête et la vérification des types sont établis lors de la phase de compilation du code. Les fautes de frappe et les erreurs syntaxiques seront donc détectées par le compilateur, ce qui représente un avantage certain par rapport aux accès Sql ou Xml qui ne révèleront leurs erreurs qu à l exécution. Ceci permet déjà d avoir une vue d ensemble de Linq au travers des enrichissements syntaxiques apportés par le framework version 3. Les expressions de type requête sont des interrogations génériques qui appellent une succession de méthodes, chacune utilisant la réponse de la précédente comme paramètre. Les méthodes d extensions simplifient l écriture de ces appels, les rendant plus lisibles et plus faciles à implémenter. Les méthodes anonymes permettent la transmission des paramètres d un appel à l autre. Les expressions lambda permettent de définir la logique de la plupart des opérations effectuées par ces méthodes. Les types anonymes permettent de gérer en mémoire les résultats de requêtes et l inférence sur le typage est ce qui permet au compilateur de faire le lien entre toutes ces fonctionnalités et de les valider à la compilation. Avant de rentrer dans les détails de comment Linq est implémenté, deux remarques sont encore à souligner. Premièrement, au vu des nouveautés syntaxiques du langage, Linq apparaît d ores et déjà comme une partie intégrante du langage et non comme un outil ORM 4 à greffer sur une architecture existante. Cela implique qu utiliser Linq ne nécessite que le fait de programmer avec une version trois (ou supérieure) du framework.net. L autre point à soulever est que Linq n est défini jusqu ici qu en termes d interface générique (IEnumerable<T> pour rappel) et de mécanismes de langage. Ceci implique deux choses : Linq est défini en plusieurs implémentations de base et il est possible d ajouter une implémentation de Linq pour s adapter à un besoin précis. Ceci termine notre tour d horizon des changements généraux d ordre purement syntaxique proposés avec la troisième version du framework.net. Nous avons introduit les principaux mécanismes qui constituent Linq ainsi que leurs interactions, ayant souligné également que Linq se compose de plusieurs implémentations. Nous allons de ce pas examiner ces différentes implémentations en détails. 4 ORM signifie Object Relational Mapper. Il s agit le plus souvent d une désignation pour un utilitaire assurant une certaine automatisation dans la réalisation du mapping objet relationnel.

18 Chapitre 3 : Implémentation Objets Nous avons vu jusqu ici quelle est la manière de formuler une requête syntaxiquement valide, requête au sens de Linq. Rien n a été spécifié en ce qui concerne la nature de la source de données, ce qui implique que tout ce qui a été vu jusqu ici sera toujours valable tant que nous parlons de Linq. Mais Linq en lui-même n est qu un tas de concepts mis bout à bout. Si nous faisons le point de ce qui a déjà été vu, nous avons un formalisme pour écrire des requêtes avec l explication générale de comment cette requête pourra être traduite vers une source de données, quelle qu elle soit. C est précisément cette opération de traduction qui va nécessiter de connaître cette source plus en détails. Pour répondre à cette attente, Linq est présenté avec une syntaxe unifiée, faisant abstraction (répétons-le une fois encore) de la nature du stockage des données. Et pourtant, ce que nous appelons Linq depuis le début est en réalité un ensemble d implémentations partageant une même syntaxe extérieure. Chaque implémentation est définie par un nom qui correspond au type de données qu elle cible. Ainsi nous parlerons de Linq to Sql, Linq to DataSet et ainsi de suite. Nous commencerons notre étude par l implémentation objet, Linq to Objects. Cette implémentation sera rapidement parcourue, examinant quelques aspects intéressants. Parmi ces aspects, nous nous intéresserons à certains opérateurs généraux (donc valables pour toutes les implémentations) et à l interface IEnumerable<T> que doit implémenter toute donnée désirant interagir avec Linq. Ce chapitre dans son ensemble est inspiré de [11] et de [1] pour la description des opérateurs. 3.1 Champ d application Linq to Objects permet d interagir avec toute collection qui implémente IEnumerable<T>. Les collections standards intégrées au framework implémentent toutes cette interface, ce qui permet de ne pas se poser la question dès lors qu on utilise une structure de base. Pour ce qui est des collections définies par l utilisateur (le programmeur), le plus simple est de créer une collection par héritage d une structure standard. Cela peut s avérer être une erreur conceptuelle dans certains cas, et l utilisateur devra réaliser lui-même l implémentation de cette interface. Ceci s applique à toutes les implémentations Linq. Regardons d un peu plus près cette fameuse interface. Elle est définie dans l espace de noms System.Collections.Generic et la documentation 5 [4] montre que la seule méthode qui est renseignée est GetEnumerator qui doit retourner un objet capable de parcourir les éléments de la collection un à un. La documentation officielle fait également état d un ensemble d extensions de méthode qui représentent en fait l ensemble des opérateurs disponibles. Implémenter IEnumerable<T> signifie posséder les extensions de méthode nécessaires à Linq pour assurer le bon déroulement de requêtes écrites avec la syntaxe vue précédemment. Nous allons maintenant nous intéresser à certains opérateurs, ne pouvant tous les détailler par manque de place (il y en a plus d une centaine en comptant toutes les surcharges!). 5 La référence exacte est :

19 3.2 Quelques opérateurs à la loupe Les opérateurs représentent ce qu il est possible de faire en utilisant Linq sur un ensemble de données. Nous pouvons aisément nous imaginer qu il est possible de réaliser une projection à la manière d un Select en Sql ou même un filtrage avec une clause Where puisque ces opérations sont définies explicitement dans la syntaxe. Certaines fonctionnalités légèrement plus subtiles se sont néanmoins glissées dans Linq et nous allons tâcher d en rassembler quelques unes. Nous parlerons ainsi de l opérateur de projection groupée, de l opérateur d inversion, de l opérateur de groupement, des quantificateurs et de l opérateur de conversion en énumérable Projection groupée L opérateur de projection groupée est appelé officiellement SelectMany. Son comportement est globalement similaire à celui de l opérateur Select, mais il a pour effet d aplatir le résultat obtenu. Ainsi, une requête demandant l ensemble des cours suivis par les étudiants de dernière année recevrait une réponse sous la forme d une collection de cours et non comme une collection de collections de cours. Lorsque seules les valeurs distinctes doivent être reprises, il suffit d appliquer au résultat l opérateur Distinct. Il est intéressant de noter que l aplatissement du résultat est disponible mais non imposé au programmeur. S il désire travailler sur les collections, un Select suffira. S il désire travailler sur les éléments eux-mêmes, un SelectMany constituera un raccourci appréciable Inversion et indexes Les opérateurs de tri classiques que sont OrderBy et ThenBy permettent de trier les éléments d un résultat pour peu que ceux-ci implémentent l interface IComparable<T>. Mais en certaines circonstances, il peut être intéressant d avoir les derniers éléments de la liste. Pour ce faire, Linq propose un opérateur d inversion appelé Reverse qui retourne l ordre des éléments au sein d une collection. Rien d extraordinaire jusqu ici mais il est nécessaire d introduire un autre petit concept, celui des opérateurs à index. Il faut savoir que plusieurs opérateurs acceptent un argument supplémentaire de type entier et qui permet de ne considérer le résultat qu après en avoir exclu un nombre d éléments correspondant à la valeur passée en argument. Avec cette information, l opérateur d inversion permet d inverser un résultat dont les x premières entrées ont été retirées ou d ignorer les x dernières entrées d un résultat. Bien que cela puisse faire l effet d un simple gadget, il est intéressant de noter cette combinaison d opérateurs qui permet de réaliser une sélection plus fine du résultat Groupement L opérateur de groupement, appelé GroupBy, réalise le groupement des résultats selon une clé spécifiée. Une clause de groupement rend facultative la clause de projection (de sélection) car le groupement renvoie le résultat sous forme d une collection de collections, chaque collection étant accessible par la valeur de sa clé associée. Le critère de groupement est défini par une expression lambda ce qui rend le groupement très lisible. Notons que le critère de groupement n est pas tenu de faire partie de la clause de projection, comme c est le cas en Sql. L opérateur de groupement possède plusieurs surcharges, permettant des réglages supplémentaires. Parmi ces surcharges, citons la possibilité de préciser un sélecteur d éléments ainsi qu un sélecteur de résultat. Un exemple d utilisation se trouve à la page suivante.

20 var r = etudiants.groupby( e => e.facultes, e => new e.nom, e.matricule, (key, elements) => new Cle = key, Nbr = elements.count() ); Le premier paramètre est le critère de groupement, le second est le sélecteur d éléments qui va jouer le rôle d opérateur de projection embarqué. C est ce paramètre qui va définir quelles valeurs seront gardées lors de l affichage du résultat. Le troisième paramètre est le sélecteur de résultat qui permet de réaliser une projection non plus sur les éléments mais sur les groupes, ce qui est particulièrement intéressant lorsqu on souhaite obtenir des informations d agrégation sur les résultats sans le détail de ceux-ci. Le résultat produit par le code ci-dessus fournira des informations sur nombre d étudiants inscrits dans chaque faculté. Un groupement similaire mais sans le sélecteur de résultat donnerait le nom et le matricule de chaque étudiant, ceux-ci étant groupés par faculté Quantificateurs Les quantificateurs sont bien pratiques lorsqu il s agit de faire des manipulations complexes sur les données. Les fameux «Pour tout» et «Il existe» sont d ailleurs une légère entrave en Sql puisque les quantificateurs universels n y sont pas définis [12]. Linq fournit trois opérateurs de quantifications Any, All et Contains. Le quantificateur Any retourne la valeur true si au moins un élément de la collection sur laquelle il est appelé répond favorablement à l expression lambda qui lui est passée en paramètre. Si aucune expression ne lui est passée, il répond simplement à la question «Y a-t-il un élément dans la collection?». Le quantificateur All permet de vérifier que l ensemble des éléments d une collection vérifient un prédicat ayant la forme d une expression lambda. En réalité cet opérateur tente de vérifier qu aucun élément de la collection ne vérifie pas le prédicat, ce qui signifie qu il retournera toujours true sur une collection vide. Le quantificateur Contains tente de vérifier si une collection contient un élément spécifique. En termes objets, n oublions pas que deux éléments seront jugés identiques si et seulement si leurs références pointent toutes deux vers le même objet. Il est néanmoins possible de fournir un comparateur personnalisé pour déterminer l égalité de deux objets sur base d autres critères que leurs simples références Conversion en énumérable Il s agit ici d un opérateur prenant en paramètre une séquence d objets et cet opérateur retournera des valeurs identiques mais sous forme d objets énumérables, c est-à-dire implémentant l interface IEnumerable<T>. Comment s y prend-il? Très simplement, en utilisant un énumérable générique dans lequel il encapsule les données de chaque élément. Cet énumérable générique est en fait une collection assez pauvre puisque son seul but va être de fournir accès aux extensions de méthodes qui caractérisent les énumérables. Toute autre information sera superflue puisque supposée déjà être présente dans la collection à convertir. Notons qu il existe d autres opérateurs de conversion tels que ToList, ToArray et ToDictionnary qui peuvent être utiles pour convertir un résultat dans un format plus classique. L opération de conversion en énumérable est fortement utilisé avec l implémentation Linq to DataSet, ceci sera développé dans la section consacrée à cette implémentation.

21 3.3 Exemple illustratif Considérons un graphe d objets représenté par une liste de listes. A titre d exemple, imaginons que les nœuds de ce graphe soient des villes et que chaque ville soit reliée par une route à une ou plusieurs autres villes. Pour corser un peu la situation, nous allons doter nos villes d informations supplémentaires, un nombre d habitants, un nom et une liste de toutes les communes qui dépendent de celle-ci. Il faut bien sûr que chaque ville ait à sa disposition la liste des villes auxquelles elle est connectée, cela constituera les branches de notre réseau. Le code comprenant les définitions nécessaires à cet exemple se trouve en annexe (Annexe 1 : Code de l exemple Linq to object). Commençons par écrire une requête adressée au réseau et permettant de retrouver toutes les villes comptant au plus habitants. Ceci s écrit comme suit : var petitesvilles = from v in reseauroutier where v.hab <= orderby v.hab select new Ville = v.nom ; foreach (var ville in petitesvilles.reverse()) Console.WriteLine(ville); Ce code, en plus d être intuitif, permet de réaliser aisément la récupération du résultat. Ceci n est cependant pas très dur à récupérer en utilisant une syntaxe classique. Imaginons maintenant vouloir connaître l ensemble des villes qui comprennent au moins deux communes et qui sont connectées à une ville de moins de habitants. Avec une écriture classique, cela implique de parcourir la liste des villes du réseau. Pour chacune de ces villes, il faudra récupérer l ensemble des communes et les dénombrer. Pour celles qui possèdent au moins deux communes, il faudra parcourir la liste des villes avec lesquelles une connexion existe. Si les villes à l autre bout de cette connexion ont un nombre d habitant inférieur ou égal à la borne souhaitée, nous devons ajouter la ville initiale à l ensemble qui sera le résultat. C est déjà relativement complexe à écrire en syntaxe classique, mais si nous désirons maintenant montrer le nom des villes à faible population qui figurent dans les connexions, c est encore pire. Il faudra créer des associations voire même recréer un graphe d objets et le retourner comme résultat. Ecrivons cela avec Linq : var requete = from v in reseauroutier from c in v.liaisons where v.communes.count() >= 2 && c.hab <= select new Ville = v.nom, Connexion = c.nom, Habitants=c.Hab; foreach (var v in requete) Console.WriteLine(v);

22 Ceci produit le résultat suivant qui correspond bien à ce que nous attendions : Figure 5 : exemple Linq to object Les deux clauses From représentent en réalité l équivalent d une jointure. Les relations sont accessibles de manière simple, il suffit d avoir un accès à la propriété correspondante. Ceci permet de justifier l emploi de Linq même dans un contexte déjà «tout objet». Linq représente un moyen à la fois simple et puissant d exprimer des requêtes. Nous avons vu en détails plusieurs opérateurs ainsi qu un exemple pratique mettant en scène l implémentation objet de Linq. Nous allons maintenant nous pencher sur les sources de données relationnelles.

23 Chapitre 4 : Implémentations relationnelles La problématique de la persistance des objets remonte probablement à la popularisation des premiers langages orientés objets [3]. Les applications utilisent des objets en mémoire pour décrire le monde et ceux-ci disparaissent dès la fin de l application. Pour les enregistrer, le recours à des bases de données relationnelles reste une option plus que répandue [3]. Or le monde objet et celui du relationnel ne s interfacent pas parfaitement. Tout ceci n est pas nouveau, bien sûr, mais pourtant de nouvelles solutions à ce problème continuent de voir le jour à un rythme régulier. Linq se présente comme l une de ces solutions, voulant offrir une transition plus souple entre ces deux mondes. Nous allons voir comment Linq a été pensé pour interagir avec les données relationnelles. Nous commencerons par présenter quelques concepts à la base de la correspondance objetrelationnel telle que réalisée par Linq. Nous détaillerons ensuite les différentes implémentations relationnelles de Linq, en précisant leur moyen d arriver à une correspondance entre objets et tables relationnelles. Nous tâcherons également de soulever les avantages et limitations de chaque implémentation. Après ces analyses, nous terminerons par un bilan global des possibilités offertes par Linq pour manipuler des bases de données. Ce chapitre est inspiré de *3+ pour l introduction. Chaque section ayant été le fruit de recherches particulières, les références y seront détaillées au cas par cas. 4.1 Entités en mémoire Cette section est tiré de [1] et [11]. Interroger une base de données suppose d avoir préalablement établi un canal de communication ainsi qu un langage commun. Linq ne permet pas d écrire des requêtes pour une base de données mais plutôt d écrire des requêtes qui seront soumises aux objets réalisant le mapping de la base de données. Il s agit d un mécanisme de cache où des objets représentent l état des données dans la base. Nous appellerons ces objets des entités et les définitions de leur classe seront appelées des classes entités (ceci correspond à la nomenclature utilisée dans l ouvrage *1+). Cette notion est centrale et doit toujours être gardée à l esprit : nous ne pourrons jamais parler directement à la base de données. Chaque implémentation proposée par Linq repose sur le concept des entités, bien que les solutions varient de l une à l autre, comme nous allons le voir. 4.2 Linq to Sql La première implémentation que nous allons étudier porte le nom officiel de «Linq to Sql» et nous pourrions intuitivement penser qu il s agit de l implémentation avec un grand «i» au regard des bases de données relationnelles. Nous verrons que ce n est pas le cas. Cette section contient énormément d informations tirées de *11+ pour les concepts théoriques, de *1+ et de *4+ pour combler les vides laissés par [11]. Nous allons voir comment cette implémentation réalise le mapping objet relationnel au niveau du code et quels sont les outils qui permettront de nous aider dans cette tâche. Nous verrons quelles classes sont impliquées dans le mapping et quel est leur rôle, avec un cas concret. Nous aborderons ensuite les possibilités de manipulation des données et les contraintes associées. Nous terminerons l étude de cette implémentation par un bref passage en revue des pièges à éviter lors de l usage de Linq to Sql.

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles Types d applications pour la persistance Université de Nice Sophia-Antipolis Version 0.9 28/8/07 Richard Grin Toutes les applications n ont pas une complexité qui nécessite une architecture n- tiers Ce

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object) Quelques patterns pour la persistance des objets avec DAO Ce cours présente des modèles de conception utilisés pour effectuer la persistance des objets Université de Nice Sophia-Antipolis Version 1.4 30/8/07

Plus en détail

Évaluation et implémentation des langages

Évaluation et implémentation des langages Évaluation et implémentation des langages Les langages de programmation et le processus de programmation Critères de conception et d évaluation des langages de programmation Les fondations de l implémentation

Plus en détail

SQL Server Installation Center et SQL Server Management Studio

SQL Server Installation Center et SQL Server Management Studio SQL Server Installation Center et SQL Server Management Studio Version 1.0 Grégory CASANOVA 2 SQL Server Installation Center et SQL Server Management Studio [03/07/09] Sommaire 1 Installation de SQL Server

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

Créer et partager des fichiers

Créer et partager des fichiers Créer et partager des fichiers Le rôle Services de fichiers... 246 Les autorisations de fichiers NTFS... 255 Recherche de comptes d utilisateurs et d ordinateurs dans Active Directory... 262 Délégation

Plus en détail

Chapitre I Notions de base et outils de travail

Chapitre I Notions de base et outils de travail Chapitre I Notions de base et outils de travail Objectifs Connaître les principes fondateurs et l historique du langage Java S informer des principales caractéristiques du langage Java Connaître l environnement

Plus en détail

Introduction aux concepts d ez Publish

Introduction aux concepts d ez Publish Introduction aux concepts d ez Publish Tutoriel rédigé par Bergfrid Skaara. Traduit de l Anglais par Benjamin Lemoine Mercredi 30 Janvier 2008 Sommaire Concepts d ez Publish... 3 Système de Gestion de

Plus en détail

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Chapitre VIII. Les bases de données. Orientées Objet. Motivation Chapitre VIII Motivation Le modèle relationnel connaît un très grand succès et s avère très adéquat pour les applications traditionnelles des bases de données (gestion) Les bases de données Orientées Objet

Plus en détail

De quoi avez-vous besoin pour ce manuel?

De quoi avez-vous besoin pour ce manuel? Introduction Le commerce électronique est devenu l un des grands sujets de préoccupation des chefs d entreprise du monde entier. Ces derniers répètent à l envie que leur priorité absolue est de relever

Plus en détail

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS Depuis SAS 9.2 TS2M3, SAS propose un nouveau langage de programmation permettant de créer et gérer des tables SAS : le DS2 («Data Step 2»). Ces nouveautés

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Compte Rendu d intégration d application

Compte Rendu d intégration d application ISMA 3EME ANNEE Compte Rendu d intégration d application Compte Rendu Final Maxime ESCOURBIAC Jean-Christophe SEPTIER 19/12/2011 Table des matières Table des matières... 1 Introduction... 3 1. Le SGBD:...

Plus en détail

Devenez un véritable développeur web en 3 mois!

Devenez un véritable développeur web en 3 mois! Devenez un véritable développeur web en 3 mois! L objectif de la 3W Academy est de former des petits groupes d élèves au développement de sites web dynamiques ainsi qu à la création d applications web

Plus en détail

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot Chapitre 5 Arithmétique binaire L es codes sont manipulés au quotidien sans qu on s en rende compte, et leur compréhension est quasi instinctive. Le seul fait de lire fait appel au codage alphabétique,

Plus en détail

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation Base de données S. Lèbre slebre@unistra.fr Université de Strasbourg, département d informatique. Présentation du module Contenu général Notion de bases de données Fondements / Conception Utilisation :

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

Sélection d un moteur de recherche pour intranet : Les sept points à prendre en compte

Sélection d un moteur de recherche pour intranet : Les sept points à prendre en compte Sélection d un moteur de recherche pour intranet : Les sept points à prendre en compte 1Les bases : vos objectifs 2 Sélection d un moteur de recherche pour intranet : Les sept points à prendre en compte

Plus en détail

Créer le schéma relationnel d une base de données ACCESS

Créer le schéma relationnel d une base de données ACCESS Utilisation du SGBD ACCESS Polycopié réalisé par Chihab Hanachi et Jean-Marc Thévenin Créer le schéma relationnel d une base de données ACCESS GENERALITES SUR ACCESS... 1 A PROPOS DE L UTILISATION D ACCESS...

Plus en détail

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN Les contenues de ce document sont la propriété exclusive de la société REVER. Ils ne sont transmis qu à titre d information et ne peuvent en aucun cas

Plus en détail

GOL502 Industries de services

GOL502 Industries de services GOL502 Industries de services Conception d un service Partie IIb Version 2013 Introduction Conception d un service partie IIb Nous verrons dans ce chapitre Modélisation d un service; Langage de modélisation

Plus en détail

TP 1. Prise en main du langage Python

TP 1. Prise en main du langage Python TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer

Plus en détail

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page

Plus en détail

Bien architecturer une application REST

Bien architecturer une application REST Olivier Gutknecht Bien architecturer une application REST Avec la contribution de Jean Zundel Ce livre traite exactement du sujet suivant : comment faire pour que les services web et les programmes qui

Plus en détail

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

Plus en détail

Présentation du module Base de données spatio-temporelles

Présentation du module Base de données spatio-temporelles Présentation du module Base de données spatio-temporelles S. Lèbre slebre@unistra.fr Université de Strasbourg, département d informatique. Partie 1 : Notion de bases de données (12,5h ) Enjeux et principes

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Chapitre VI- La validation de la composition.

Chapitre VI- La validation de la composition. Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions

Plus en détail

Sommaire. 2 LINQ to Objects

Sommaire. 2 LINQ to Objects LINQ To Object 2 LINQ to Objects Sommaire 1 LINQ to Object... 3 1.1 Introduction par l exemple.... 3 1.2 Evaluation de requête différée... 6 1.3 Les objets «Enumerable» et «Queryable»... 7 1.4 Les mots-clés

Plus en détail

Générer du code à partir d une description de haut niveau

Générer du code à partir d une description de haut niveau Cedric Dumoulin Générer du code à partir d une description de haut niveau Ce projet vise à fournir un environnement de développement permettant de modéliser des UI Android à un haut niveau d abstraction,

Plus en détail

Cours en ligne Développement Java pour le web

Cours en ligne Développement Java pour le web Cours en ligne Développement Java pour le web We TrainFrance info@wetrainfrance Programme général du cours Développement Java pour le web Module 1 - Programmation J2ee A) Bases de programmation Java Unité

Plus en détail

Introduction à la B.I. Avec SQL Server 2008

Introduction à la B.I. Avec SQL Server 2008 Introduction à la B.I. Avec SQL Server 2008 Version 1.0 VALENTIN Pauline 2 Introduction à la B.I. avec SQL Server 2008 Sommaire 1 Présentation de la B.I. et SQL Server 2008... 3 1.1 Présentation rapide

Plus en détail

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services Ce Whitepaper décrit la méthodologie de développement d un rapport personnalisé au format SQL Server Reporting Service (SSRS) appliqué à System Center Operations Manager (SCOM) Whitepaper Méthodologie

Plus en détail

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour LMI 2 Programmation Orientée Objet POO - Cours 9 Said Jabbour jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour CRIL UMR CNRS 8188 Faculté des Sciences - Univ. Artois Février 2011 Les collections

Plus en détail

INF 1250 INTRODUCTION AUX BASES DE DONNÉES. Guide d étude

INF 1250 INTRODUCTION AUX BASES DE DONNÉES. Guide d étude INF 1250 INTRODUCTION AUX BASES DE DONNÉES Guide d étude Sous la direction de Olga Mariño Télé-université Montréal (Québec) 2011 INF 1250 Introduction aux bases de données 2 INTRODUCTION Le Guide d étude

Plus en détail

Visual Paradigm Contraintes inter-associations

Visual Paradigm Contraintes inter-associations Visual Paradigm Contraintes inter-associations Travail de Bachelor d'informaticien de gestion Partie C Présentation de Visual Paradigm 1 Présentation de Visual Paradigm For UML L objet du travail de Bachelor

Plus en détail

IV- Comment fonctionne un ordinateur?

IV- Comment fonctionne un ordinateur? 1 IV- Comment fonctionne un ordinateur? L ordinateur est une alliance du hardware (le matériel) et du software (les logiciels). Jusqu à présent, nous avons surtout vu l aspect «matériel», avec les interactions

Plus en détail

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e : CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE Projet 2 Gestion des services enseignants G r o u p e : B E L G H I T Y a s m i n e S A N C H E Z - D U B R O N T Y u r i f e r M O N T A Z E R S i

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Cours Bases de données

Cours Bases de données Informations sur le cours Cours Bases de données 9 (10) séances de 3h Polycopié (Cours + TD/TP) 3 année (MISI) Antoine Cornuéjols www.lri.fr/~antoine antoine.cornuejols@agroparistech.fr Transparents Disponibles

Plus en détail

Le langage SQL Rappels

Le langage SQL Rappels Le langage SQL Rappels Description du thème : Présentation des principales notions nécessaires pour réaliser des requêtes SQL Mots-clés : Niveau : Bases de données relationnelles, Open Office, champs,

Plus en détail

Introduction aux SGBDR

Introduction aux SGBDR 1 Introduction aux SGBDR Pour optimiser une base Oracle, il est important d avoir une idée de la manière dont elle fonctionne. La connaissance des éléments sous-jacents à son fonctionnement permet de mieux

Plus en détail

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES Dossier G11 - Interroger une base de données La base de données Facturation contient tout un ensemble d'informations concernant la facturation de la SAFPB (société anonyme de fabrication de produits de

Plus en détail

Les structures. Chapitre 3

Les structures. Chapitre 3 Chapitre 3 Les structures Nous continuons notre étude des structures de données qui sont prédéfinies dans la plupart des langages informatiques. La structure de tableau permet de regrouper un certain nombre

Plus en détail

Information utiles. cinzia.digiusto@gmail.com. webpage : Google+ : http://www.ibisc.univ-evry.fr/ digiusto/

Information utiles. cinzia.digiusto@gmail.com. webpage : Google+ : http://www.ibisc.univ-evry.fr/ digiusto/ Systèmes de gestion de bases de données Introduction Université d Evry Val d Essonne, IBISC utiles email : cinzia.digiusto@gmail.com webpage : http://www.ibisc.univ-evry.fr/ digiusto/ Google+ : https://plus.google.com/u/0/b/103572780965897723237/

Plus en détail

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux Formation Webase 5 Ses secrets, de l architecture MVC à l application Web Adrien Grand Centrale Réseaux Sommaire 1 Obtenir des informations sur Webase 5 2 Composants de Webase 5 Un

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines) Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines) Module 1 : Programmer une application informatique Durée

Plus en détail

THEME PROJET D ELABORATION D UNE BASE DE DONNEES SOUS LE SERVEUR MYSQL

THEME PROJET D ELABORATION D UNE BASE DE DONNEES SOUS LE SERVEUR MYSQL . THEME PROJET D ELABORATION D UNE BASE DE DONNEES SOUS LE SERVEUR MYSQL Mr MEZRED MOHAMED Ingénieur météorologue INTRODUCTION Il existe de nombreuses manières de construire une base de données. En effet,

Plus en détail

BIRT (Business Intelligence and Reporting Tools)

BIRT (Business Intelligence and Reporting Tools) BIRT (Business Intelligence and Reporting Tools) Introduction Cette publication a pour objectif de présenter l outil de reporting BIRT, dans le cadre de l unité de valeur «Data Warehouse et Outils Décisionnels»

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2 Langage et Concepts de Programmation Objet Travaux Dirigés no2 Pôle Informatique École Nationale Supérieure des Mines de St-Etienne Vous trouverez plus de détails sur les concepts abordés lors de ce TD

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

1 Introduction et installation

1 Introduction et installation TP d introduction aux bases de données 1 TP d introduction aux bases de données Le but de ce TP est d apprendre à manipuler des bases de données. Dans le cadre du programme d informatique pour tous, on

Plus en détail

SQL Server 2012 et SQL Server 2014

SQL Server 2012 et SQL Server 2014 SQL Server 2012 et SQL Server 2014 Principales fonctions SQL Server 2012 est le système de gestion de base de données de Microsoft. Il intègre un moteur relationnel, un outil d extraction et de transformation

Plus en détail

La Clé informatique. Formation Excel XP Aide-mémoire

La Clé informatique. Formation Excel XP Aide-mémoire La Clé informatique Formation Excel XP Aide-mémoire Septembre 2005 Table des matières Qu est-ce que le logiciel Microsoft Excel?... 3 Classeur... 4 Cellule... 5 Barre d outil dans Excel...6 Fonctions habituelles

Plus en détail

Techniques d interaction dans la visualisation de l information Séminaire DIVA

Techniques d interaction dans la visualisation de l information Séminaire DIVA Techniques d interaction dans la visualisation de l information Séminaire DIVA Zingg Luca, luca.zingg@unifr.ch 13 février 2007 Résumé Le but de cet article est d avoir une vision globale des techniques

Plus en détail

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour http://cuiwww.unige.

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour http://cuiwww.unige. : JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java Michel Bonjour http://cuiwww.unige.ch/~bonjour Plan JDBC: API bas niveau pour l accès aux BD (SQL) - Introduction - JDBC et : Java, ODBC, SQL

Plus en détail

Éléments de programmation et introduction à Java

Éléments de programmation et introduction à Java Éléments de programmation et introduction à Java Jean-Baptiste Vioix (jean-baptiste.vioix@iut-dijon.u-bourgogne.fr) IUT de Dijon-Auxerre - LE2I http://jb.vioix.free.fr 1-20 Les différents langages informatiques

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

A QUOI SERVENT LES BASES DE DONNÉES?

A QUOI SERVENT LES BASES DE DONNÉES? BASE DE DONNÉES OBJET Virginie Sans virginie.sans@irisa.fr A QUOI SERVENT LES BASES DE DONNÉES? Stockage des informations : sur un support informatique pendant une longue période de taille importante accès

Plus en détail

COMMENT REDIGER UN RAPPORT TECHNIQUE?

COMMENT REDIGER UN RAPPORT TECHNIQUE? COMMENT REDIGER UN RAPPORT TECHNIQUE? Christiaens Sébastien Université de Liège Département PROMETHEE Institut de Mécanique et de Génie Civil, Bât. B52 Chemin des Chevreuils, 1 B-4000 Liège, Belgique Janvier

Plus en détail

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1 La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1 Plan 1. Généralités sur la persistance des données dans les applications 2. La connection

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

Notions fondamentales du langage C# Version 1.0

Notions fondamentales du langage C# Version 1.0 Notions fondamentales du langage C# Version 1.0 Z 2 [Notions fondamentales du langage Csharp] [Date : 25/03/09] Sommaire 1 Tout ce qu il faut savoir pour bien commencer... 3 1.1 Qu est ce qu un langage

Plus en détail

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2 éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........

Plus en détail

Paginer les données côté serveur, mettre en cache côté client

Paginer les données côté serveur, mettre en cache côté client Paginer les données côté serveur, mettre en cache côté client Vous voulez sélectionner des lignes dans une table, mais celle-ci comporte trop de lignes pour qu il soit réaliste de les ramener en une seule

Plus en détail

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES BASE DE DONNEES La plupart des entreprises possèdent des bases de données informatiques contenant des informations essentielles à leur fonctionnement. Ces informations concernent ses clients, ses produits,

Plus en détail

INTERSYSTEMS CACHÉ COMME ALTERNATIVE AUX BASES DE DONNÉES RÉSIDENTES EN MÉMOIRE

INTERSYSTEMS CACHÉ COMME ALTERNATIVE AUX BASES DE DONNÉES RÉSIDENTES EN MÉMOIRE I N T E RS Y S T E M S INTERSYSTEMS CACHÉ COMME ALTERNATIVE AUX BASES DE DONNÉES RÉSIDENTES EN MÉMOIRE David Kaaret InterSystems Corporation INTERSySTEMS CAChé CoMME ALTERNATIvE AUx BASES de données RéSIdENTES

Plus en détail

BASES DE DONNÉES. CNAM Centre associé de Clermont-Ferrand Cycle A Année 1997-98. J. Darmont I. INTRODUCTION II. LES SYSTÈMES HIÉRARCHIQUES

BASES DE DONNÉES. CNAM Centre associé de Clermont-Ferrand Cycle A Année 1997-98. J. Darmont I. INTRODUCTION II. LES SYSTÈMES HIÉRARCHIQUES BASES DE DONNÉES CNAM Centre associé de Clermont-Ferrand Cycle A Année 1997-98 J. Darmont I. INTRODUCTION II. LES SYSTÈMES HIÉRARCHIQUES III. LES SYSTÈMES RÉSEAU IV. LES SYSTÈMES RELATIONNELS V. LE LANGAGE

Plus en détail

Le modèle de données

Le modèle de données Le modèle de données Introduction : Une fois que l étude des besoins est complétée, deux points importants sont à retenir : Les données du système étudié Les traitements effectués par le système documentaire.

Plus en détail

La gestion des exceptions

La gestion des exceptions La gestion des exceptions Même lorsqu un programme est au point, certaines circonstances exceptionnelles peuvent compromettre la poursuite de son exécution ; il peut s agir par exemple de données incorrectes

Plus en détail

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean. Plan du cours 2 Introduction générale : fondamentaux : les fondamentaux Michel Buffa (buffa@unice.fr), UNSA 2002, modifié par Richard Grin (version 1.1, 21/11/11), avec emprunts aux supports de Maxime

Plus en détail

Introduction à Microsoft InfoPath 2010

Introduction à Microsoft InfoPath 2010 Introduction à Microsoft InfoPath 2010 Couplé à Microsoft SharePoint Designer 2010, InfoPath 2010 simplifie la création de solutions de bout en bout sur SharePoint Server 2010, qui contiennent des formulaires

Plus en détail

Chapitre 1 Qu est-ce qu une expression régulière?

Chapitre 1 Qu est-ce qu une expression régulière? Chapitre 1 Qu est-ce qu une expression régulière? Les ordinateurs n ont pas du tout la même conception des textes que nous : pour nous, un texte est un ensemble d idées couchées sur papier. Nous nous en

Plus en détail

PG208, Projet n 3 : Serveur HTTP évolué

PG208, Projet n 3 : Serveur HTTP évolué PG208, Projet n 3 : Serveur HTTP évolué Bertrand LE GAL, Serge BOUTER et Clément VUCHENER Filière électronique 2 eme année - Année universitaire 2011-2012 1 Introduction 1.1 Objectif du projet L objectif

Plus en détail

Groupe Eyrolles, 2004 ISBN : 2-212-11504-0

Groupe Eyrolles, 2004 ISBN : 2-212-11504-0 Groupe Eyrolles, 2004 ISBN : 2-212-11504-0 Table des matières Avant-propos................................................ 1 Quel est l objectif de cet ouvrage?............................. 4 La structure

Plus en détail

Mise en œuvre des serveurs d application

Mise en œuvre des serveurs d application Nancy-Université Mise en œuvre des serveurs d application UE 203d Master 1 IST-IE Printemps 2008 Master 1 IST-IE : Mise en œuvre des serveurs d application 1/54 Ces transparents, ainsi que les énoncés

Plus en détail

Création et Gestion des tables

Création et Gestion des tables Création et Gestion des tables Version 1.0 Z Grégory CASANOVA 2 Sommaire 1 Introduction... 3 2 Pré-requis... 4 3 Les tables... 5 3.1 Les types de données... 5 3.1.1 Les types de données Sql Server... 5

Plus en détail

Préparation à l examen EFA en Macro

Préparation à l examen EFA en Macro Préparation à l examen EFA en Macro Exercice sur les macros en Word / Excel Les questions suivantes doivent constituer un bref rafraîchissement et vous aider à situer le niveau de vos connaissances : Question

Plus en détail

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE Cas Neptune hôtel Base de données et langage SQL Propriété Intitulé long Formation concernée Matière Notions Transversalité Présentation Description Neptune Hôtel. L interrogation d une base de données

Plus en détail

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Jade. Projet Intelligence Artificielle «Devine à quoi je pense» Jade Projet Intelligence Artificielle «Devine à quoi je pense» Réalisé par Djénéba Djikiné, Alexandre Bernard et Julien Lafont EPSI CSII2-2011 TABLE DES MATIÈRES 1. Analyse du besoin a. Cahier des charges

Plus en détail

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB www.enseirb.fr/~legal Olivier Augereau Formation UML

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB www.enseirb.fr/~legal Olivier Augereau Formation UML basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB www.enseirb.fr/~legal Olivier Augereau Formation UML http://olivier-augereau.com Sommaire Introduction I) Les bases II) Les diagrammes

Plus en détail

Présentation du langage et premières fonctions

Présentation du langage et premières fonctions 1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en

Plus en détail

Utilisation d objets : String et ArrayList

Utilisation d objets : String et ArrayList Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons

Plus en détail

RÉALISATION D UN SITE DE RENCONTRE

RÉALISATION D UN SITE DE RENCONTRE RÉALISATION D UN SITE DE RENCONTRE Par Mathieu COUPE, Charlène DOUDOU et Stéphanie RANDRIANARIMANA Sous la coordination des professeurs d ISN du lycée Aristide Briand : Jérôme CANTALOUBE, Laurent BERNARD

Plus en détail

Business Intelligence

Business Intelligence avec Excel, Power BI et Office 365 Téléchargement www.editions-eni.fr.fr Jean-Pierre GIRARDOT Table des matières 1 Avant-propos A. À qui s adresse ce livre?..................................................

Plus en détail

Le logiciel pour le courtier d assurances

Le logiciel pour le courtier d assurances Le logiciel pour le courtier d assurances Introduction - Présentation 2 Intégration totale 3 Paperless Office 3 Traitement Unifié de l information 4 Outils commerciaux 5 Communication 6 Intégration AS/2

Plus en détail

Langage SQL : créer et interroger une base

Langage SQL : créer et interroger une base Langage SQL : créer et interroger une base Dans ce chapitre, nous revenons sur les principales requêtes de création de table et d accès aux données. Nous verrons aussi quelques fonctions d agrégation (MAX,

Plus en détail

MODIFICATIONS DES PRINCIPES DIRECTEURS CONCERNANT LA RÉDACTION DES DÉFINITIONS RELATIVES AU CLASSEMENT

MODIFICATIONS DES PRINCIPES DIRECTEURS CONCERNANT LA RÉDACTION DES DÉFINITIONS RELATIVES AU CLASSEMENT ANNEXE VI MODIFICATIONS DES PRINCIPES DIRECTEURS CONCERNANT LA RÉDACTION DES DÉFINITIONS RELATIVES AU CLASSEMENT RECOMMANDATIONS GÉNÉRALES Les utilisateurs s attendent à trouver dans les définitions des

Plus en détail

Initiation à Excel. Frédéric Gava (MCF) gava@univ-paris12.fr

Initiation à Excel. Frédéric Gava (MCF) gava@univ-paris12.fr Initiation à Excel Frédéric Gava (MCF) gava@univ-paris12.fr LACL, bâtiment P2 du CMC, bureau 221 Université de Paris XII Val-de-Marne 61 avenue du Général de Gaulle 94010 Créteil cedex Plan de cette année

Plus en détail

Nom de l application

Nom de l application Ministère de l Enseignement Supérieur et de la Recherche Scientifique Direction Générale des Etudes Technologiques Institut Supérieur des Etudes Technologiques de Gafsa Département Technologies de l Informatique

Plus en détail

Base de données relationnelle et requêtes SQL

Base de données relationnelle et requêtes SQL Base de données relationnelle et requêtes SQL 1e partie Anne-Marie Cubat Une question pour commencer : que voyez-vous? Cela reste flou Les plans de «Prison Break»? Non, cherchons ailleurs! Et de plus près,

Plus en détail

Les bases de données Page 1 / 8

Les bases de données Page 1 / 8 Les bases de données Page 1 / 8 Sommaire 1 Définitions... 1 2 Historique... 2 2.1 L'organisation en fichier... 2 2.2 L'apparition des SGBD... 2 2.3 Les SGBD relationnels... 3 2.4 Les bases de données objet...

Plus en détail

Chapitre 2. Classes et objets

Chapitre 2. Classes et objets Chapitre 2: Classes et Objets 1/10 Chapitre 2 Classes et objets Chapitre 2: Classes et Objets 2/10 Approche Orientée Objet Idée de base de A.O.O. repose sur l'observation de la façon dont nous procédons

Plus en détail

Bases de données Cours 1 : Généralités sur les bases de données

Bases de données Cours 1 : Généralités sur les bases de données Cours 1 : Généralités sur les bases de données POLYTECH Université d Aix-Marseille odile.papini@univ-amu.fr http://odile.papini.perso.esil.univmed.fr/sources/bd.html Plan du cours 1 1 Qu est ce qu une

Plus en détail

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail