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 :

[POO] Forcer un objet a être une propriété d'un autre?


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 52
    Points : 30
    Points
    30
    Par défaut [POO] Forcer un objet a être une propriété d'un autre?
    Hello!

    Donc voilà, j'ai un petit problème de disons... analyse, et je m'y butte depuis quelques instants sans trop savoir par où commencer mes recherches.

    Je vais y aller avec un exemple plus imagé que ce que j'ai a appliquer, c'est une histoire de logique et de principe donc je pense que l'essentiel devrait y être.

    J'ai disons une classe "Voiture"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class _Voiture 
    {
    int annee;
    string modele;
    List<_Pneu> pneus;
    ....
    }
    et la classe "Pneu"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class _Pneu
    {
    double diametre;
    double largeur;
    ...
    }
    Jusque là tout va bien, je peux ajouter un ou des pneus a ma voiture sans problème.

    Sauf que je voudrais forcé un pneu a appartenir a une voiture, un pneu seul ne voudrais rien dire dans le cadre du programme.

    Le tout dans l'optique d'arrivé a écrire une fonction dans ma classe pneu qui pourrait se servir d'une autre propriété de la voiture, disons un truc comme;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public double getUsure()
    {
    return (voitureparent.Kilometrage * this.UsureParKilo)
    }
    quelqu'un a une idée de quel côté ou quelques mots clés pour orienté mes recherches sur quelque chose du genre?


    Amuny,

  2. #2
    Membre Expert

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    L'idée de placer GetUsure dans la classe Pneu n'est peut-être pas une bonne idée, il suffirait de la placer dans la classe Voiture pour résoudre ton problème étant donné que voiture à déjà une propriété de pneus

    Si tu veux garder GetUsure dans la classe Pneu alors il faudrait passer au constructeur de ton Pneu la voiture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Pneu
    {
       private Voiture voitureparent;
       public Pneu(Voiture voiture) { voitureparent = voiture ;}
     
       public double getUsure()
       {
          return (voitureparent.Kilometrage * this.UsureParKilo)
       }
    }

    Je me pose quand même la question (par rapport au grasp pattern Expert) où serait le bon endroit de placer cette méthode (pourquoi pas une classe OrdinateurDeBord ?)
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 52
    Points : 30
    Points
    30
    Par défaut
    pour passé une voiture en propriété au pneu... oui mais non... ce serai beaucoup trop lourd

    mettre la fonction ailleurs, j'y ai pensé, mais je me retrouve avec le même problème; je dois toujours spécifié quel pneu de la voiture je veux, alors que c'est une fonction qui ne sera utilisé QUE sur un pneu.

    Dans le pire des cas c'est ce que je ferais (mettre la fonction dans voiture et passé en paramètre un pneu), mais ca me titille un peu et je me demande vraiment s'il y a pas une trace a quelque part qui dit dans le pneu "hop moi j'appartient a cette voiture" j'aimerais bien pouvoir faire pneu.getUsure

  4. #4
    Membre Expert

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par Amuny Voir le message
    pour passé une voiture en propriété au pneu... oui mais non... ce serai beaucoup trop lourd
    Euh et pourquoi ?

    Citation Envoyé par Amuny Voir le message
    mais ca me titille un peu et je me demande vraiment s'il y a pas une trace a quelque part qui dit dans le pneu "hop moi j'appartient a cette voiture" j'aimerais bien pouvoir faire pneu.getUsure
    Qui crée les objets pneus ? Qui crée les objets voiture ? Il n'y a pas de magie en POO. Les pneus qui appartiennent à la voiture c'est ta propriété List dans la classe voiture. Donc autant mettre la méthode dans voiture avec comme paramètre un pneu
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 52
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par hegros Voir le message
    Euh et pourquoi ?
    car ca voudrais dire que pour un truc a 10 roues, j'aurai en mémoire dix fois toute les propriétés de la même voiture
    et comme le kilo change souvent, faudrais aller rechanger le kilo de la propriété voiture de tout les pneus a chaque fois...

    Citation Envoyé par hegros Voir le message
    Qui crée les objets pneus ? Qui crée les objets voiture ? Il n'y a pas de magie en POO. Les pneus qui appartiennent à la voiture c'est ta propriété List dans la classe voiture.
    Exact. Mon point, c'est de savoir comment récupéré son "créateur" et ses propriétés qui viennent avec. Ce sera toujours une voiture qui aura des pneus, et du coup je me demande si il y a moyen de faire référence a son "maître" et d'avoir accès a ses informations en partant a l'envers

  6. #6
    Membre Expert

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par Amuny Voir le message
    car ca voudrais dire que pour un truc a 10 roues, j'aurai en mémoire dix fois toute les propriétés de la même voiture
    Beh non c'est une référence ce n'est pas une copie d'objet champs à champs.

    Citation Envoyé par Amuny Voir le message
    et comme le kilo change souvent, faudrais aller rechanger le kilo de la propriété voiture de tout les pneus a chaque fois...
    Beh non c'est une référence vers une voiture ce n'est pas une simple copie.


    Citation Envoyé par Amuny Voir le message
    Exact. Mon point, c'est de savoir comment récupéré son "créateur" et ses propriétés qui viennent avec. Ce sera toujours une voiture qui aura des pneus, et du coup je me demande si il y a moyen de faire référence a son "maître" et d'avoir accès a ses informations en partant a l'envers
    Cela ne réponds pas à mes questions : qui crée les objets voitures et qui crée les objets pneus ? (réfléchissez y bien car c'est aussi un grasp pattern => créateur)
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  7. #7
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Le kilométrage parcouru pour ton calcul d'usure ce n'est pas le kilométrage de la voiture mais celui du pneu qui devrait être utilisé, question de logique. Un pneu ça se change après tout, à moins que ce soit plus simpliste pour ce que tu fais.

    Auquel cas, le pneu a son kilométrage parcouru et résultat plus de souci pour le calcul puisque tout est sur le pneu. Pour moi ce serait ainsi qu'il faudrait procéder.
    Pas de questions techniques par MP

  8. #8
    Membre Expert

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Je suis d'accord avec StormimOn, le kilométrage de la voiture ce n'est pas le kilométrage du pneu, c'est donc 2 propriétés différentes et indépendantes.

    Maintenant il y a peut-être une corrélation à faire dans le calcul de l'usure du pneu avec le kilométrage de la voiture. En effet, et là c'est purement du métiers, mais est-ce que l'usure d'un pneu évolue de la même façon pour une voiture à 10000kilomètre qu'une voiture avec 300000kilométres ?

    Il y a probablement d'autres facteurs qui rentrent en compte pour le calcul de l'usure d'un pneu, d'où ma proposition de passer par une autre classe qui n'est ni pneu ni voiture mais qui prendrait en paramètres ces derniers.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  9. #9
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Si beaucoup de facteurs interviennent il vaut mieux effectivement déporter le calcul dans une autre classe. Une bête classe "helper" peut faire l'affaire. On lui passe une voiture et ça retourne par exemple un dico avec en clé un pneu et en valeur l'usure.

    En tout cas le kilométrage de la voiture et du pneu sont totalement indépendants et la question de départ n'a plus de sens dans ce contexte. A voir ce qu'il en est pour l'OP maintenant ^^
    Pas de questions techniques par MP

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 52
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par hegros Voir le message
    Beh non c'est une référence vers une voiture ce n'est pas une simple copie.
    cette référence m'emmène un paquet d'erreur de StackOverFlow un peu partout en tout cas

    Après, l'histoire du kilo, c'était un exemple hein

    mais bon, je crois que je vais y aller pour placer cette fonction dans le "owner", et obtenir l'usure d'un pneu via la voiture avec comme paramètre le pneu... ça me semble le moyen le plus simple efficace et clean au final en fait

  11. #11
    Membre Expert

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par Amuny Voir le message
    cette référence m'emmène un paquet d'erreur de StackOverFlow un peu partout en tout cas
    Montre ton code parce que StackOverflow c'est typiquement que tu cherches à faire des appels récursifs sans aucune condition d'arrêt donc rien à avoir avec une référence (c'est un problème d'algorithme)
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 52
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par hegros Voir le message
    Montre ton code parce que StackOverflow c'est typiquement que tu cherches à faire des appels récursifs sans aucune condition d'arrêt donc rien à avoir avec une référence (c'est un problème d'algorithme)
    c'est exact, des appels récursif, avec de la réflection en plus, et du coup en ajoutant l'objet direct comme une autre propriété, il allait le trouver encore et encore

    J'y travaille pas mal, finalement j'y suis aller pour cela avec quelques correctifs a mon code sachant que c'est vraiment une référence. J'ai donc attacher le "owner" a la classe en dessous, ça fonctionne au moins en test jusqu'à maintenant.

    Merci du coup de main et de l'information en tout cas, j'étais vraiment convaincu que de faire ça je me ramasserais avec des milliers de copie de gros enregistrements partout, alors que finalement, C# est plus intelligent que je pensais

    Amuny,

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/04/2013, 21h20
  2. Réponses: 2
    Dernier message: 24/04/2009, 11h45
  3. [POO] parcourir un objet json avec une boucle for in
    Par bucheron007 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 19/01/2009, 12h55
  4. [POO] Sérialiser un objet PDO dans une classe
    Par __fabrice dans le forum Langage
    Réponses: 9
    Dernier message: 15/09/2008, 22h30
  5. [POO] Tableau d'objets B dans une instance de class A
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 24/05/2006, 09h52

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