IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Restriction dans un programme


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 97
    Par défaut Restriction dans un programme
    Bonjour à tous,

    Je dois créer un programme qui contient une classe Livre (auteur, titre, catégorie,...) et une classe ListeDeLivre. Cette dernière consiste à enregistrer les différents livres avec leurs caractéristiques dans un tableau. Il est dit dans l'énoncé: "La liste de livres sera unique, il n'y aura donc pas possibilité d'en créer plusieurs". Et c'est là que je ne comprends pas ce que je dois faire...

    Comment puis-je rendre la liste de livre unique?

    Merci

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Bonjour,

    Quand l'énoncé dit unique, il entend par là qu'un seul objet de ce type doit et ne peut exister au sein de l'application.

    Il faut donc que tu utilises le design pattern Singleton. En voici un exemple simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public class ListeDeLivre
    {
    	private static ListeDeLivre _instance;
     
    	private ListeDeLivre()
    	{
    		// Initialisation
    	}
     
    	public static ListeDeLivre GetInstance()
    	{
    		if(_instance == null)
    			_instance = new ListeDeLivre();
     
    		return _instance;
    	}
    }
    Ici, tu mets le constructeur de la classe en privé, ce qui veut dire qu'il ne peut être appelé que de l'intérieur de la classe. Tu mets à disposition une méthode statique GetInstance() qui sera appelée par les objets qui auront besoin de la liste de livres. Quand cette méthode est appelée, si c'est la première fois, elle crée une nouvelle liste de livre, sinon, elle retourne la liste de livre déjà crée.

    Il y a beaucoup de type d'implémentations de singleton (thread-safe, etc ...) mais je pense que celui la suffira pour ton exercice. Tu peux toujours aller googler à droite ou à gauche pour avoir plus de détails sur ce pattern.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 97
    Par défaut
    ok ok. Bizarre qu'il nous demande ça le prof car on n'a jamais vu ça mais bon...

    Merci

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Essaye peut être de le mailer à ce sujet pour avoir plus d'info mais même en relisant bien, la description me parait celle d'un singleton.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  5. #5
    Membre confirmé
    Profil pro
    profiler
    Inscrit en
    Février 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : profiler

    Informations forums :
    Inscription : Février 2008
    Messages : 84
    Par défaut
    Il veut peut être dire unique dans la liste des livres. Moi je verrais bien un Dictionnary<>() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dictionnary<string, Livre> ListreDeLivre = new Dictionnary<string, Livre>();
    ListeDeLivre["Tintin"] = new Livre("Tintin");
    ListeDeLivre["Bioman"] = new Livre("Bioman");
    ....

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    La liste de livres sera unique
    C'est la liste qui est unique selon l'énoncé. Après, si ce n'est pas ce qui est demandé, faudrait peut être qu'ils retravaillent leur énoncé
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  7. #7
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    Citation Envoyé par MaximePalmisano Voir le message
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public class ListeDeLivre
    {
    	private static ListeDeLivre _instance;
     
    	private ListeDeLivre()
    	{
    		// Initialisation
    	}
     
    	public static ListeDeLivre GetInstance()
    	{
    		if(_instance == null)
    			_instance = new ListeDeLivre();
     
    		return _instance;
    	}
    }
    Dommage de donne le pire modèle d'implémentation du pattern singleton !
    En voici un safety thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public sealed class Singleton
    {
        static readonly Singleton instance=new Singleton();
     
        // Explicit static constructor to tell C# compiler
        // not to mark type as beforefieldinit
        static Singleton()
        {
        }
     
        Singleton()
        {
        }
     
        public static Singleton Instance
        {
            get
            {
                return instance;
            }
        }
    }
    Je pense que ce qui t'en demandé c'est de vérifier l'unicité des éléments de ta liste. Si "Les misérables" est déjà dans ta liste, tu ne le rajoutes pas une nouvelle fois !

    Faire un signleton sur ta liste d'ouvrages n'a aucun intérêt du point de vue applicatif.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Puisqu'on parle de différents moyen d'implémenter le pattern Singleton, j'ai trouvé cette page qui donne pas mal d'infos très utiles là dessus:
    http://csharpindepth.com/Articles/Ge...Singleton.aspx

    Il y a vos deux exemples, et quelques autres ainsi que leurs pros/cons.

  9. #9
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    @kheironn :

    Je n'ai pas donné le "pire" Singleton, j'ai donné le plus accessible. Quand on débute en dev, rien que le nom "Design Pattern" donne des boutons. Si c'est "un simple exercice", je ne vois pas en quoi le rendre thread safe ajoute une quelconque plus value à la chose.

    J'ai donc donné une version qui soit compréhensible par un néophyte: on voit bien que le singleton ne peut être instancié une seule fois grâce à la vérification du if. (En plus je suis pas persuadé qu'il y ait du multithreading dans un exo de ce niveau )

    Je suis bien d'accord avec toi que ce n'est peut être pas le plus beau à écrire dans une appli mais c'est à mes yeux celui avec la plus grande clarté pour s'initier à la chose. On attendra un peu pour lui montrer un singleton à double lock


    @NaeiKinDus :

    L'article est vraiment sympa, ça peut toujours être pratique quand on doit décider de l'implémentation du pattern en fonction des contraintes.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  10. #10
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    Citation Envoyé par NaeiKinDus Voir le message
    Puisqu'on parle de différents moyen d'implémenter le pattern Singleton, j'ai trouvé cette page qui donne pas mal d'infos très utiles là dessus:
    http://csharpindepth.com/Articles/Ge...Singleton.aspx

    Il y a vos deux exemples, et quelques autres ainsi que leurs pros/cons.
    C'est effectivement de là qu vient mon extrait

    @MaximePalmisano : autant donner aux débutants de bonnes bases... Quitte a en apprendre un, autant en apprendre un qui marche tout le temps
    Mais j'ai déjà eu un CDP qui donnait comme pattern celui que tu as cité en exemple...

  11. #11
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Pour rendre un attribut d'une classe unique pour tout un programme il faut le rendre static...(c'est d'ailleurs ce que fait le pattern singleton)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    static class ControllerOfBooks
    {
       private static List<Book> books = new List<Book>();
     
       public static List<Book> Books()
       {
            return books;
       }
    }
    S'il s'agit de l'unicité d'un livre dans une list alors la solution avec un dictionnaire semble répondre à ton problème. La question est alors quelle est la clef ? (nom ? l'isbn? couplet ?....)

Discussions similaires

  1. Chargement d'une lib partagée C++ dans un programme C
    Par Zero dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/09/2003, 16h40
  2. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37
  3. Réponses: 2
    Dernier message: 24/06/2003, 20h31
  4. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52
  5. [langage] Commande DOS dans un programme
    Par Jibees dans le forum Langage
    Réponses: 15
    Dernier message: 23/04/2003, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo