Vous êtes sur la page 1sur 10

Questionnaire : POO .

NET (C#) - 2009-2010


1. Expliquez lintrt dutiliser simultanment les environnements de dveloppement Visual Studio et Expression Blend pour crer une application Silverlight . Quels sont les caractristiques de ces deux environnements ? Chacun de ces deux environnements permet-il de dvelopper un projet Silverlight entirement, et cela en se passant totalement de lautre ? Expliquer larchitecture de base dune application Silverlight : type(s) de projet(s) type(s) de fichier(s). Comment insre ton un contrle Silverlight dans une application Web ? Lintrt principal est que lon peut avoir un beau design graphique de la page web grce Silverlight. On peut dvelopper une application Silverlight sans utiliser expression Blend mais la mise en place des composants (ex : bouton, textbox...) est beaucoup plus fastidieuse. Caractristiques principales : Tout deux permettent de modifier le fichier XAML, la diffrence est que Visual studio permet de dvelopper du code et Expression Blend permet de travailer le design de l'application. Les deux programmes (Visual et Expression Blend) permettent de dvelopper une application Silverlight mais pour une application complte avec gestion des vnements, accs base de donnes, design facilement mit en place il faut utiliser les deux programmes... Les applications Silverlight peuvent tre crites dans nimporte quel langage de programmation .NET. De mme, nimporte quel outil de dveloppement qui peut tre utilis avec les langages .NET peut fonctionner avec Silverlight, d au fait quil pourra cibler directement le noyau CLR de Silverlight, la place du CLR .NET. Les versions 2.0 et 2.5 de Microsoft Expression Blend ont t penses pour la conception des utilisateurs des applications Silverlight 1.0 et 2.0 respectivement. Visual Studio 2008 peut tre utilis pour dvelopper et dboguer les applications Silverlight. Mais il faudra pour cela installer pralablement The Silverlight Tools for Visual Studio . Tout d'abord on lance Visual Studio 2008 et on cre un nouveau projet de type Silverlight Application. Un projet Silverlight contient les fichiers Silverlight.js et CreateSilverlight.js qui initialisent le plugin Silverlight pour lutilisation dans des pages HTML, un fichier XAML pour linterface utilisateur, et des fichiers de code pour les codes de lapplication. Les applications Silverlight sont dbogues de la mme manire que les applications ASP.NET. Le Remote Cross Platform Debugging du CLR de Visual Studio peut tre utilis pour dboguer les applications Silverlight tournant sur diffrentes plates-formes. Pour insrer un control web 2 solutions existent : La premire (la plus facile) : sous Expression Blend faire glisser un composant sur la page web puis dans ses proprits grer ses vnements (exactement comme en Java ou C# application normal). Cette solution gnre automatiquement la modification dans le fichier XAML. La deuxime, en modifiant le fichier XAML : par exemple pour un bouton : <Button x :name= "mybutton" Content="Click Me !" Click="myButton_Click" Width="100" Height="50"> </Button>

O Name est le nom du bouton, Content son contenu (le texte crit dessus), Click l'vnement gnr, Width la largeur et Height la hauteur.
Mthode plus complique car pour l'vnement il faut aller rajouter dans le fichier (par exemple, Page.xaml.cs) le code suivant : private void myButton_Click(object sender, RoutedEventArgs e) { myButton.Content = "You clicked !"; }

Soors Aurore - Ce document n'est pas garanti sans erreurs

2. A laide dun exemple, expliquez comment peut-on, dans un projet Silverlight , dfinir un nouveau look pour un bouton (ex : forme dtoile). Quel code doit-on crire et o doit-on le placer ? Plusieurs possibilits soffrent-elles nous ? Si oui, lesquelles ? Comment effectuer un choix ? Expliquez comment peut-on tenir compte dun paramtre dans ce code (ex : largeur de ltoile). Nous pouvons raliser cela en ajoutant un style dans notre App.xaml, o nous allons dfinir la proprit Template. <Style x:Key="StarButton" TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Grid> <Image Source="etoile.png" Width="200" Height="200"/> <TextBlock Text="Push Me !" HorizontalAlignment="Center" VerticalAlignment="Center"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>

Et lorsque nous crons un bouton a ne change pas : <Button Style="{StaticResource StarButton}"/> Le problme ici est que la taille et le texte du bouton sont mis en dur dans le code, mais nous pouvons videmment remdier a. <Style x:Key="StarButton" TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid> <Image Source="etoile.png" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Content="{TemplateBinding Content}"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> Maintenant la taille de l'image sera la mme que la taille spcifie lors de la cration du bouton. Button Style="{StaticResource StarButton}" Width="200" Height="200" Content="Push Me !" /> Une autre possibilit est de crer son Template bouton sur Silverlight. La via quelque click, on cre le bouton souhaiter que l'on utilisera ensuite comme bouton de rfrence. Soors Aurore - Ce document n'est pas garanti sans erreurs 2

3. Donnez une dfinition de Linq. A quelle version du framework .NET se trouve ton ? Idem au niveau du la version du langage C# ? A partir dun exemple, expliquez la syntaxe et le fonctionnement dune requte effectuant une slection avec filtrage et tri. Linq sadresse til uniquement aux bases de donnes ? Si non, citez les diffrents modules de Linq ? Le LINQ, Language Integrated Query,est un modle de programmation permettant dtablir des requtes sur des donnes dans nimporte quel langage Microsof .NET. Il permet au dveloppeur d'accder des ressources de donnes quelconques de manire unique et simplifie. En effetn aucun moment il n'y aurait entrer du code SQL par exemple. Ce langage est une nouveaut du Framework 3.5 et profite des amliorations du C# 3.0. Il existe de nos jours plusieurs sources de donnes : base de donnes, fichiers Microsoft Access, fichiers Microsoft Excel, fichiers XML, etc, chacun possdant une amnire spcifique d'accs aux donnes. Par exemple, on utilise trs souvent du SQL pour accder une base de donnes ou encore du Document Object Model (DOM) pour le XML. C'est ici qu'intervient LINQ. Pour faciliter la manipulation de donnes travers un programme, vous ne devez connaitre plus qu'un seul langage : le LINQ. A travers ses diffrentes extensions, il permet un accs universel toute source de donnes facilitant ainsi la tche des dveloppeurs. On trouve ainsi : un module nomm LINQ to objects permettant dinterroger (+ rcuprer) des collections dobjets classiques un module nomm LINQ to ADO.NET permettant de manipuler toutes les sources de donnes ADO.NET. Il se dcompose en trois parties : LINQ to DataSet, LINQ to Entities et LINQ to SQL (DLINQ) un module nomm LINQ to XML (XLINQ) permettant de manipuler des fichiers XML Exemple : string[] names = { "Burke", "Connor", "Frank", "Everett", "Albert", "George", "Harris", "David" }; IEnumerable<string> expr = from s in names where s.Length == 5 orderby s select s.ToUpper(); foreach (string item in expr) Console.WriteLine(item);

Soors Aurore - Ce document n'est pas garanti sans erreurs

4. A partir dun exemple, expliquez le principe des modules : Linq to Object Linq to ADO.NET ( dcomposer en 3 sous parties) Linq to XML Exemple : LINQ to objets List<String> source = new List<String>(); source.Add("texte"); source.Add("string"); source.Add("chaine"); source.Add("caractres"); La premire requte ci-dessous est une requte simple var requete1 = from s in source where s.Length < 10 select s; foreach (var e in requete1) { Console.WriteLine(e); } Console.Read(); Cette requte slectionne notre liste de chaines de caractres source , dont il identifie chaque objet tour de rle par s , tous les objets de la liste (ici des String ) ayant une longueur infrieure 10 caractres. La boucle foreach permet dafficher le contenu de la variable requte1 qui a stock les rsultats de notre requte. Exemple : Linq to XML : Cration d'un fichier XML XElement xml = new XElement("Personnes", new XElement("Personne", new XAttribute("Nom", "Romio"), new XAttribute("Prenom", "Alfonso"), new XAttribute("Age", "31") ), new XElement("Personne", new XAttribute("Nom", "Vilvens"), new XAttribute("Prenom", "Claude"), new XAttribute("Age", "51") ) ); xml.Save("Personnes.xml"); Lecture d'un fichier XML XDocument loaded = XDocument.Load(@"Personnes.xml"); var personnes = from pers in loaded.Descendants("Personne") where (int)pers.Attribute("Age") > 35 select (string)pers.Attribute("Nom") + " " + (string)pers.Attribute("Prenom"); foreach(var s in personnes) MessageBox.Show(s);

Soors Aurore - Ce document n'est pas garanti sans erreurs

LINQ

to ADO.NET se dcompose en trois parties : LINQ to DataSet LINQ to Entities LINQ to SQL (DLINQ)

Pour les exemples qui suivent, nous utiliserons la table personnel suivante :

LINQ to SQL Crez la classe personnel correspondant la table : [Table(Name="Personnel")] public class Personnel { [Column(IsPrimaryKey=true)] public string PersonneID; [Column] public string Nom; [Column] public string Prenom; [Column] public string Naissance; } Crez le datacontext et query DataContext db = new DataContext(connectionstring); // Recupere la table Table<Personnel> Personnel = db.GetTable<Personnel>(); // Personnel s'appelant toto var q = from p in Personnel where p.Nom == "toto" select p; foreach (var pers in q) Console.WriteLine("PersonneID = {0}, Naissance = {1}", pers.PersonneID , pers.Naissance );

Soors Aurore - Ce document n'est pas garanti sans erreurs

LINQ to Entities est peu de choses prs similaires LINQ to SQL. En effet, la seule diffrence rside dans le fait que LINQ to Entities nutilise pas la base de donnes physique, mais plutt un modle conceptuel de cette base de donnes. LINQ to Entities a t imagin afin de permettre aux applications dinteragir avec des donnes reprsentes sous forme relationnelle. Lextrait de code suivant permet de rcuprer lID, le nom, le prnom et la date de naissance dune personne grce son nom : using (LINQtoEntitiesEntities MyEntities = new LINQtoEntitiesEntities()) { ObjectQuery<Personnel> Personnel = MyEntities.Personnel; //Nous utilisons la proprit Naissance la place de //Date_de_naissance var requete = from p in Personnel where p.Nom == "TOTO" select new {p.PersonneID, p.Nom, p.Prenom, p.Naissance}; foreach (var ligne in requete) Console.WriteLine(ligne.PersonneID + " " + ligne.Nom + " " + ligne.Prenom + " " + ligne.Naissance); } LINQ to Dataset : Lexcution de requtes sur une DataTable est relativement similaire ltablissement de requte un objet contenant un ensemble de donnes, dont les classes ayant permis de les crer implmente linterface IEnumerable du Framework .NET. Cependant, la classe DataTable nimplmente pas cette interface. Cest pourquoi, il est ncessaire de lui appliquer la mthode AsEnumerable() pour requter lensemble des DataRow composant les DataTable, et la mthode Field<T>() / Field (Of T) sur les DataRow (lignes) des DataTable pour accder aux DataColumn (champs). Voici un bloc dinstructions, permettant dobtenir la liste du personnel via une requte LINQ, tris suivant le nom et le prnom dans lordre alphabtique, et de lafficher dans une grille de donnes via une opration de DataBinding : DataView oListePersonnel = (from oPersonnel in oDataSet.Tables["Personnel"].AsEnumerable() orderby oPersonnel.Field<string>("Nom"), oPersonnel.Field<string>("Prenom") select oPersonnel).AsDataView(); LstPersonnel.DataSource = oListePersonnel;

Soors Aurore - Ce document n'est pas garanti sans erreurs

5. Expliquez comment fait-on, dans une application Silverlight, pour accder une base de donnes en utilisant la technologie Linq ? Dans une application Silverlight il est actuellement impossible d'accder directement une base de donnes. Cela n'empche qu'il est parfois indispensable de pouvoir le faire. Pour contourner ce problme nous utiliserons un service WCF et une query Linq. Notre premire tape sera de crer notre projet Silverlight ainsi qu'une application web qui contiendra notre service WCF. Linq est une nouveaut de la version 3 de C#, il prtend tre la technique recommande pour accder aux bases de donnes depuis Silverlight. Nous allons ajouter un lment de type Linq to SQL Classes. Cette classe fera le mapping entre notre objet .Net et la table dans la base de donnes. Nous crerons ensuite une connexion vers la base de donnes dans le Server Explorer de Visual Studio et nous ajouterons les tables ncessaire dans notre schma (pour cela il suffit de "drag and dropper" nos tables). Par dfaut les classes ne sont pas srialisable, cela va poser problme lorsque l'on voudra les utiliser au travers de notre service WCF. Pour lesrendre srialisable rien de plus simple il suffit de modifier la proprit Serialization Mode en mettant la valeur Unidirectional. Maintenant que nos classes Linq sont cres et donc connues par le systme il nous reste crire les mthodes permettant de travailler avec ces objets. Pour cela nous allons faire appel un service WCF. Nous avons cr une application Silverlight et un service WCF, reste maintenant lier les deux. Pour cela : clic droit sur le projet Silverlight --> add Service Reference. Reste ensuite utiliser le proxy que nous venons de crer au travers du fichier xaml.

Soors Aurore - Ce document n'est pas garanti sans erreurs

6. Citez et expliquez en quelques mots les apports du C#3 Les apports du C#3 sont : les proprits automatiques l'instanciation des objets l'infrence de type d'une variable locale les types anonymes les expressions lambdas les mthodes d'extension Les proprits automatiques les concepteurs de la version 3 du langage C# ont introduits la notion de proprits automatiques. Cest dire quil suffit de dire quon dsire avoir une proprit dun certain type, portant un certain nom et de spcifier si on dsire avoir un accs en lecture ET en criture. public String Nom { get; set; } L'instanciation des objets Il est dsormais possible de laisser libre choix lutilisateur de votre classe de dterminer le nombre de proprits pour lesquelles il dcide donner une valeur dinitialisation particulire lorsquon instancie un objet. Autrement dit, vous navez la responsabilit dcrire toutes les versions correspondantes aux diffrents cas de figure qui auraient un sens (ex : initialiser le nom ET le prnom 1 constructeur dinitialisation crire initialiser le nom ET la date de naissance un deuxime constructeur crire, etc ), puisque lutilisateur de la classe peut crire le genre de code repris ci dessous. Soit la classe Personne reprise ci-dessous : public class Personne { public String Nom { get; set; } public String Prenom { get; set; } public String DateNaissance { get; set; } public Personne() { Nom = ""; Prenom = ""; DateNaissance = ""; } } On peut dsormais Personne p1 = Personne p2 = Personne p3 = Personne p4 = crire : new Personne new Personne new Personne new Personne

{ { { {

}; Nom="Durand" }; Nom="Dupuis", Prenom="Michel" }; Nom = "Duchnok", Prenom = "Gabriel", DateNaissance="06/09/1969" };

Remarquons lutilisation des accolades plutt que les parenthses traditionnelles des constructeurs classiques . Seules les proprits de la classe sont accessibles dans ce genre de constructeurs. Enfin, cest la virgule qui fait office de sparateur entre linitialisation de deux proprits. Quid au niveau des collections de donnes ? Les nouveauts syntaxiques exposes ci-dessus permettent galement de crer une collection de donnes en spcifiant la liste des objets quon y place ds le dpart. List<Personne> personnes = new List<Personne> { p1, p3}; Soors Aurore - Ce document n'est pas garanti sans erreurs 8

L'infrence de type d'une variable locale Il est dsormais possible de dduire / infrer le type dune variable lors de la compilation. Le type var permet lutilisateur de laisser la responsabilit au compilateur de dterminer le type dobjet retourn par une assignation simple, une fonction, etc (intressant pour LINQ). Les types anonymes Il est possible de crer un objet instanciant un type de donnes quon a pas dfinit ! En fait, il sagit de dfinir les caractristiques (en fait, uniquement une srie de proprits) de lobjet au moment o on linstancie. A nouveau, cette nouveaut prendra tout son sens et son intrt pour LINQ. Les expressions lambdas Les expressions lambdas permettent dcrire les fonctions anonymes de manire plus condense et plus intuitive . On peut remplacer le code suivant : personnes.Find(new Predicate<Personne>(delegate(Personne p) { if (p.Nom == "Toto") return true; return false; })); par celui-ci : personnes.Find(p => p.Nom == "Toto"); Les mthodes d'extension Il est dsormais possible dtendre la liste de mthodes dune classe. Cela peut savrer particulirement pratique lorsquon ne mtrise pas le code source de la dite classe. public static class StringExtensions { public static String AddStars(this String str) { return "***" + str + "***"; } } Notons que les mthodes dextensions sont toujours dfinies dans des classes statiques. On notera galement que la mthode est (forcment) statique et quelle utilise le mot cl this suivi du nom du type que lon dsire tendre

Soors Aurore - Ce document n'est pas garanti sans erreurs

7. Qu'est ce que LINQ. A partir d'une requte simple, expliquez o interviennent les nouveauts du C# 3 ... Le LINQ, Language Integrated Query,est un modle de programmation permettant dtablir des requtes sur des donnes dans nimporte quel langage Microsof .NET. Il permet au dveloppeur d'accder des ressources de donnes quelconques de manire unique et simplifie. En effetn aucun moment il n'y aurait entrer du code SQL par exemple. Ce langage est une nouveaut du Framework 3.5 et profite des amliorations du C# 3.0. Il existe de nos jours plusieurs sources de donnes : base de donnes, fichiers Microsoft Access, fichiers Microsoft Excel, fichiers XML, etc, chacun possdant une amnire spcifique d'accs aux donnes. Par exemple, on utilise trs souvent du SQL pour accder une base de donnes ou encore du Document Object Model (DOM) pour le XML. C'est ici qu'intervient LINQ. Pour faciliter la manipulation de donnes travers un programme, vous ne devez connaitre plus qu'un seul langage : le LINQ. A travers ses diffrentes extensions, il permet un accs universel toute source de donnes facilitant ainsi la tche des dveloppeurs. La requte LINQ : IEnumerable<string> expr = from s in names where s.Length == 5 orderby s select s.ToUpper(); peut galement scrire de la manire suivante : IEnumerable<string> expr = names .Where(s => s.Length == 5) .OrderBy(s => s) .Select(s => s.ToUpper()); Cette reprsentation de la requte met en vidence lutilisation, ainsi que lutilis, des expressions lambdas et des mthodes dextensions (les mthodes Where, OrderBy et Select tant des mthodes dextensions de la classe string[]).

Soors Aurore - Ce document n'est pas garanti sans erreurs

10

Vous aimerez peut-être aussi