12.07.2013 Views

Etude exploratoire de Linq - CoDE - de l'Université libre de Bruxelles

Etude exploratoire de Linq - CoDE - de l'Université libre de Bruxelles

Etude exploratoire de Linq - CoDE - de l'Université libre de Bruxelles

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Chapitre 3 : Implémentation Objets<br />

Nous avons vu jusqu’ici quelle est la manière <strong>de</strong> formuler une requête syntaxiquement vali<strong>de</strong>,<br />

requête au sens <strong>de</strong> <strong>Linq</strong>. Rien n’a été spécifié en ce qui concerne la nature <strong>de</strong> la source <strong>de</strong> données,<br />

ce qui implique que tout ce qui a été vu jusqu’ici sera toujours valable tant que nous parlons <strong>de</strong> <strong>Linq</strong>.<br />

Mais <strong>Linq</strong> en lui-même n’est qu’un tas <strong>de</strong> concepts mis bout à bout. Si nous faisons le point <strong>de</strong> ce qui<br />

a déjà été vu, nous avons un formalisme pour écrire <strong>de</strong>s requêtes avec l’explication générale <strong>de</strong><br />

comment cette requête pourra être traduite vers une source <strong>de</strong> données, quelle qu’elle soit. C’est<br />

précisément cette opération <strong>de</strong> traduction qui va nécessiter <strong>de</strong> connaître cette source plus en<br />

détails. Pour répondre à cette attente, <strong>Linq</strong> est présenté avec une syntaxe unifiée, faisant abstraction<br />

(répétons-le une fois encore) <strong>de</strong> la nature du stockage <strong>de</strong>s données. Et pourtant, ce que nous<br />

appelons <strong>Linq</strong> <strong>de</strong>puis le début est en réalité un ensemble d’implémentations partageant une même<br />

syntaxe extérieure. Chaque implémentation est définie par un nom qui correspond au type <strong>de</strong><br />

données qu’elle cible. Ainsi nous parlerons <strong>de</strong> <strong>Linq</strong> to Sql, <strong>Linq</strong> to DataSet et ainsi <strong>de</strong> suite. Nous<br />

commencerons notre étu<strong>de</strong> par l’implémentation objet, <strong>Linq</strong> to Objects. Cette implémentation sera<br />

rapi<strong>de</strong>ment parcourue, examinant quelques aspects intéressants. Parmi ces aspects, nous nous<br />

intéresserons à certains opérateurs généraux (donc valables pour toutes les implémentations) et à<br />

l’interface IEnumerable que doit implémenter toute donnée désirant interagir avec <strong>Linq</strong>. Ce<br />

chapitre dans son ensemble est inspiré <strong>de</strong> [11] et <strong>de</strong> [1] pour la <strong>de</strong>scription <strong>de</strong>s opérateurs.<br />

3.1 Champ d’application<br />

<strong>Linq</strong> to Objects permet d’interagir avec toute collection qui implémente IEnumerable. Les<br />

collections standards intégrées au framework implémentent toutes cette interface, ce qui permet <strong>de</strong><br />

ne pas se poser la question dès lors qu’on utilise une structure <strong>de</strong> base. Pour ce qui est <strong>de</strong>s<br />

collections définies par l’utilisateur (le programmeur), le plus simple est <strong>de</strong> créer une collection par<br />

héritage d’une structure standard. Cela peut s’avérer être une erreur conceptuelle dans certains cas,<br />

et l’utilisateur <strong>de</strong>vra réaliser lui-même l’implémentation <strong>de</strong> cette interface. Ceci s’applique à toutes<br />

les implémentations <strong>Linq</strong>.<br />

Regardons d’un peu plus près cette fameuse interface. Elle est définie dans l’espace <strong>de</strong> noms<br />

System.Collections.Generic et la documentation 5 [4] montre que la seule métho<strong>de</strong> qui est renseignée<br />

est GetEnumerator qui doit retourner un objet capable <strong>de</strong> parcourir les éléments <strong>de</strong> la collection un à<br />

un. La documentation officielle fait également état d’un ensemble d’extensions <strong>de</strong> métho<strong>de</strong> qui<br />

représentent en fait l’ensemble <strong>de</strong>s opérateurs disponibles. Implémenter IEnumerable signifie<br />

possé<strong>de</strong>r les extensions <strong>de</strong> métho<strong>de</strong> nécessaires à <strong>Linq</strong> pour assurer le bon déroulement <strong>de</strong> requêtes<br />

écrites avec la syntaxe vue précé<strong>de</strong>mment. Nous allons maintenant nous intéresser à certains<br />

opérateurs, ne pouvant tous les détailler par manque <strong>de</strong> place (il y en a plus d’une centaine en<br />

comptant toutes les surcharges !).<br />

5 La référence exacte est : http://msdn.microsoft.com/en-us/library/9eekhta0.aspx

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!