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 :

Interfaces d'une librairie : Seules choses à utiliser


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut Interfaces d'une librairie : Seules choses à utiliser
    Chères (?) et chers,
    J'ai donc trouvé une librairie (non compilée) qui m'intéresse beaucoup, qu'importe ce qu'elle concerne. Elle comporte les fichiers sources de classes et d'interfaces '...cs' : C'est par exemple LayoutLibrary_lo_30.zip à http://aviationxchange.net/wikis/lan...gers-in-c.aspx .

    Ce que je comprends :
    - Une librairie de tiers est un ensemble de classes qui apportent des solutions, effectuent des calculs, prennent des décisions logiques ... dans le cadre d'une action spécialisée, telle que de disposer automatiquement et au mieux des objets de contrôle, des tableaux, des listes ... automatiquement dans l'espace d'un conteneur d'interface d'utilisateur.
    - Des interfaces existent simplement pour annoncer l'existence de toutes les fonctions de librairie de tiers, que les classes qui héritent de ces interfaces (soit mes propres classes) se doivent d'implémenter. Elles sont donc contraignantes, si toutefois je ne dispose pas des fichiers sources de classes de la librairie de tiers qui les implémenterait et dont mes propres classes peuvent hériter directement.

    Mes questions :
    - Quels types de fonction d'une librairie peuvent bien exister pour obliger l'utilisateur de la librairie à les implémenter ? Pas des fonction de résolution de l'objet même de la librairie, il me semble.
    (Cela concerne l'utilité des interfaces de fournisseurs de librairies ainsi que l'intérêt pour mes propres classes de les hériter et de les implémenter, si je dispose aussi des classes du fournisseur qui les implémente.)
    - Pourquoi une librairie de sources fournit-elle des fichiers interfaces, sinon que pour le cas où une de mes propres classes implémente une telle interface de tiers, je sois obliger de définir TOUTES les fonctions annoncées, dans ma propre classe ?

    Or la librairie qui m'intéresse (http://aviationxchange.net/wikis/lan...gers-in-c.aspx) ...
    - est basée sur deux interfaces : 'ILayoutable' et 'ILayoutManager', cette dernière héritant de cette première.
    - tous les fichiers restants décrivent des classes qui implémentent ces interfaces, c à d en résolvent la logique du problème spécifique de disposition de GUI (tel qu'il me semble logique, comme dit ci-dessus).
    Les fonctions annoncées sont :
    - 'ILayoutable' : GetMinimumSize(), GetMaximumSize(), GetPreferedSize(), GetLayout(), SetSize() et SetLocation().
    - 'ILayoutManager' : AddLaoutable(), RemoveLayoutable(), RemoveAll().

    Il me semble que ces fonctions sont quand même adressées à l'utilisateur de la librairie (moi).
    Comment savoir comment implémenter toutes ces fonctions ?
    Je veux disposer des services résolus d'une librairie; pas hériter d'un tas de fonction à implémenter ...

    Et comme une classe héritant d'une interface doit en implémenter TOUTES les fonctions ...
    Qu'est-ce qui m'échappe ?
    Merci.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Les interfaces te permettent (entre autre) de casser la dépendance.
    Tu n'es pas obligé de les utiliser meme si c'est conseillé.
    Si tu es sur que tu ne modifiera pas les fonctions de la librairie, alors oublie les interface. Sinon place les interface dans un projet, tout le reste dans un autre projet (qui du coup dépenderont du projet des interfaces).
    Puis dans ton programme utilise tant que tu peux les interface pour stocker les objets de ta librairie. ainsi si tu dois mofifier quelque chose dans la librairie, les interface ne bougeront pas, et donc ton programme ne bougera pas non plus.

    Pour ce qui est de l'autre question, je dirait qu'il faut lire la doc de la librairie, pour savoir qu'est ce qui sert à quoi.

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Exemple illustré
    J'ai une librairie de voitures :
    -Il y'a une interface IVoiture qui contient Avancer() Reculer() TournerADroite() TournerAGauche Arreter()
    -Il y'a des voitures qui heritent de IVoiture: Peugeot206, Peugeot207, Peugeot306
    -Il y'a un pilote qui prend une IVoiture et qui va faire un tour avec

    De base la librairie te permet de construire un pilote et de lui faire faire un tour avec une des voitures fournie avec ta librairie.
    Mais si un jour t'as envie que ton pilote fasse un tour dans une voiture un peu plus classe, rien ne t'empêche de chez toi créer une voiture qui implémente IVoiture (par exemple une AstonMartinVanquish) et de la donner a ton pilote pour qu'il la conduise. Le pilote lui s'en fiche de la voiture du moment qu'il peut avancer, reculer, tourner et s'arreter!

    Ta librairie finalement c'est:
    -une boite noire un peu mystique qui prend un objet et le triture.
    -des comportements que les objets qui veulent se faire triturer doivent adopter
    -éventuellement des objets un peu génériques qui implémentent ses comportements
    Tu peux compléter ces objets un peu génériques par les tiens qui répondent mieux à tes besoins.

    Dans ton cas si y'a ces deux interfaces à implémenter c'est que les fonctions sont utilisées dans des traitements internes à la librairie et tu peux éventuellement les utiliser toi si tu en as besoin.

    Cela dit, si tu veux faire des layout manager dans des fenêtres en .Net, utilise WPF

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut Classe qui utilise et classe de substitution
    Merci pour vos réponses, qiova_fr et PitMaverick78.
    Pour poursuivre sur base du raisonnement de PitMaverick78 :
    Nous comprenons donc bien de la même façon :
    - La classe devant hériter d'une interface n'est que celle qui construit un objet de substitution : Soit une voiture "plus classe", soit un autre Layout manager (ce qui n'était pas mon but, étant justement satisfait de la libraire trouvée.)
    - La classe pouvant utiliser des fonctions annoncées dans une interface est celle qui a besoin de la classe qui résout une particularité, soit un pilote qui utilise la voiture, soit une classe d'écran utilisateur qui utilise un Layout manager.

    Ce que je disais dans mon premier message est donc OK ?: Si ce n'est pas mon but de créer un objet de substitution d'un objet existant ...
    - qui apporte une solution, effectue des calculs, prend des décisions logiques dans le cadre d'une action spécialisée,
    - qui constitue une librairie et
    - qui de surcroit me convient entièrement,
    et si je ne fais que construire une classe devant utiliser les services des classes de librairie,
    alors, je n'ai pas besoin d'utiliser les interfaces déclarées dans cette librairie. Ma classe faisant usage des fonctions des classes de la librairie originale n'a qu'à instancier un membre de manière classique :
    truc = new LaClasseDeLibrairie_LeLayoutManagerQuiMeConvient();
    , d'accord ?
    Si oui, ton exemple m'a bien aidé, et je te remercie de toutes façons.

    Merci aussi pour ton conseil de prendre connaissance de WPF.
    Ciao !

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Effectivement, si tu as tous les objets dont tu as besoin dans la librairie, rien ne sert d'implémenter l'interface

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Facade] Donner une interface objet à une librairie Java, quel est ce pattern ?
    Par Pierre8r dans le forum Design Patterns
    Réponses: 3
    Dernier message: 28/10/2008, 12h19
  2. Réponses: 4
    Dernier message: 13/10/2005, 12h41
  3. Utiliser une librairie
    Par BugFactory dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 11/10/2005, 16h24
  4. Creer et utiliser une librairie externe à l'exécutable
    Par multani dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 06/11/2003, 10h11
  5. Utiliser une librairie graphique
    Par Troopers dans le forum Linux
    Réponses: 6
    Dernier message: 22/08/2003, 11h22

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