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 :

Imbrication Hiérarchie Interfaces


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut Imbrication Hiérarchie Interfaces
    Salut à toutes et à tous,

    Je cherche à créer une classe "Vecteur" qui devra entrer dans un ObservableCollection<Vecteur>.

    Il s'agit de l'ensemble des vecteurs formant un polygone.
    Mon problème est qu'un vecteur peut être soit une ligne, soit un arc, soit une polyligne.
    J'ai cherché à me documenter mais je n'y arrive pas. J'ai besoin de votre aide pour m'éclairer.

    Un vecteur a toujours un ID, une LongueurRéelle et une LongueurForcée

    Si c'est une droite:
    elle a un Point1 et un Point2
    sa longueur est la distance entre les 2 points (Formule 1)
    Si c'est un arc:
    elle a un Point1, un Point2 et un PointCentresa longueur est la distance entre les 2 points (Formule 2)
    Si c'est une polyligne:
    elle a un ObservableCollection<Point>
    sa longueur est la somme des distances entre les points (Formule 3)

    Je n'ai aucun pbl au niveau des formules ou des classes Droite, Arc et Polyligne, mais là où je coince c'est comment arriver à obtenir un Vecteur utilisable pour un ObservableCollection, donc qui a une signature identique dans les 3 cas ?

    J'ai bien pensé à créer un vecteur qui contiendrait ID, LongueurRéelle, LongueurForcée et un Objet qui contiendrait Ligne, Arc ou Polyligne.
    Je suis pourtant convaincu que ce n'est pas la meilleure méthode.
    À ce que j'ai vu, les interfaces pourraient m'aider, mais je n'arrive pas à comprendre comment.

    Les interfaces sont-elle vraiment la solution que je cherche ? Si oui, comment devrais-je faire ? Sinon, quelle serait la méthode que je devrais utiliser ?

    Merci de vos z'avis z'avisés,
    JM

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    les interfaces permettent à peu près la même chose que l'héritage
    la solution ici serait à mon avis de mettre le traitement des tes données dans les classes

    exemple si c'est pour dessiner ces vecteurs, il faudrait que la méthode de dessin soit sur chaque classe

    mais du coup que ca soit avec interface ou héritage tu peux y arriver

    avec héritage il faudrait mettre une méthode virtual qui dessine, et donc tu peux faire 3 classes filles qui auront chacune leurs propriétés et le code de dessin
    avec une collection de la classe de base tu pourrais appeler la méthode virtual qui fera donc des choses différentes selon le type de l'instance

    avec les interfaces il te faudrait une interface IVecteur qui aurait une méthode de dessin, et l'interface serait implémenter dans chaque classe


    principales différences entre héritage et interfaces :
    - par héritage une classe parente peut avoir du code, une interface n'a pas de code, l'héritage permet donc d'avoir du code générique qui n'est pas copié collé
    - le multi héritage est impossible en .net, par contre la multi implémentation est possible, ce qui permet d'avoir plusieurs interfaces et que chaque code qui fait une fonctionnalité a juste à tester si l'instance implémente telle interface pour savoir que telle méthode peut etre appelée sur l'instance
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut
    Merci de tes explications Pol63.
    Ça me permet quand-même de comprendre certaines choses. Entre autre que l'interface ne m'aidera pas dans la recherche de la solution à mon problème.

    Toutefois mon pbl n'est pas au niveau du traitement des données individuellement.
    Mon problème est plutôt qu'un polygone contient des vecteurs, et que ces vecteurs ne sont pas tjrs du même type. Il s'agit plus d'un pbl de "stockage" des entités différentes.

    À ce que j'ai compris, ma méthode n'était peut-être si mauvaise que je le pensais.
    La classe Vecteur pourrait contenir la LongueurForcée, un objet (qui selon le cas serait une ligne, un arc ou une polyligne), et une LongueurRéelle (qui irait soit récupérer la longueur dans l'objet, ou qui la calculerait selon le type d'objet).

    A moins qu'une meilleure solution me soit proposée, auquel cas je suis toujours intéressé.

    JM

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    Citation Envoyé par Jean-Marc68 Voir le message
    Mon problème est plutôt qu'un polygone contient des vecteurs, et que ces vecteurs ne sont pas tjrs du même type. Il s'agit plus d'un pbl de "stockage" des entités différentes.
    le stockage reste le plus simple
    par exemple une classe vide VecteurBase, 3 classes héritées avec les propriétés du type de vecteur
    et sur la classe polygon une propriété de type VecteurBase, comme ca tu peux mettre n'importe quelle instance d'un type dérivé dedans
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 243
    Par défaut
    Bonjour,

    Il est possible que je ne sois pas bien réveillé mais j'ai l'impression que tu as donné la solution dans ton énoncé :
    1 classe Vecteur abstraite avec 3 propriétés : ID, LongueurReelle et LongueurForcee.
    3 classes qui en héritent (et qui implémentent bien sûr les propriétés/méthodes de Vecteur) :
    • Droite avec les propriétés Point1 et Point2 supplémentaires (de type Point)
    • Arc avec les propriétés Point1, Point2 et PointCentres supplémentaires (de type Point)
    • Polyligne avec la propriété Points de type ObservableCollection<Point>


    Ensuite, tu stocke tes vecteurs dans une propriété Vecteurs de type ObservableCollection<Vecteur> de ta classe Polygone.

    J'ai raté quelque chose?

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 249
    Par défaut
    Merci à tous les 2,

    Un mix de vos réponses m'a fait comprendre.

    En effet, 250rgv, la réponse était dans la question, à condition de créer une classe Vecteur vide, comme le suggère Pol63.

    Je devais avoir le nez trop collé sur le problème. Je n'ai jamais pensé créer la classe vide, et mon problème était justement que les données étaient différentes selon les objets, et je ne voyais pas comment les traiter. Je créais des paramètres qui étaient toujours masqués, ce que je trouvais bizarre. Mais en effet, il suffisait de ne pas les créer dans la classe Vecteur.
    Enfin, le fait d'avoir la classe vecteur, même vide, me permet de limiter les objets qui pourraient être mis dans un ObservableCollection qui contiendra les vecteurs du polygone.

    Merci de m'avoir aidé, même si vous n'en avez pas eu l'impression.

    JM

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

Discussions similaires

  1. [EJB Stateless] Hiérarchie d'interfaces et de classes
    Par bdusauso dans le forum Java EE
    Réponses: 2
    Dernier message: 31/05/2010, 11h32
  2. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  3. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/10/2002, 16h15
  4. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  5. [VB6] [Interface] Icones de boutons de barre d'outils
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 13/09/2002, 15h50

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