Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de décision en POO

    7 juin 2023 à 13:44:27

    Salut !

    Je suis en train de faire un petit projet en C++ et j'utilise la POO.

    Là, j'ai un problème : je suis dans une situation où j'ai une première classe, qui est destinée à être utilisée par l'utilisateur, et une seconde, destinée à être exclusivement utilisée par la première classe, je ne veux pas qu'elle puisse être utilisée par l'utilisateur. Quelle est l'approche à choisir dans ce cas ? Est-ce que je dois déclarer la deuxième classe à l'intérieur de la première ? Est-ce que je dois déclarer les classes comme amies ?

    Merci par avance !

    • Partager sur Facebook
    • Partager sur Twitter
      7 juin 2023 à 14:56:52

      Salut


      Est-ce que ce serait vraiment grave si quelqu'un d'autre pouvait l'instancier?

      Tout ce qu'il suffit en général c'est d'organiser le code en fichiers et répertoires/modules qui ont du sens et éviter les références circulaires...

      L'amitié c'est pour avoir des classes/fonctions qui comprennent les invariants de tes classes et qui sauront les respecter.
      On peut certes aussi s'est servir pour mettre en place des clé qui interdisent des comportements, mais généralement c'est parce qu'il y a des raccourcis/bidouilles avec invariants ou pour bloquer des façons d'utiliser qui paraissent simples mais qui en fait ne sont pas à destination des utilisateurs finaux qui ne sauront pas s'en servir correctement.

      Bref. AMA, tu te fais probablement des nœuds au cerveau pour rien.

      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        7 juin 2023 à 15:10:37

        Salut !

        lmghs a écrit:

        Est-ce que ce serait vraiment grave si quelqu'un d'autre pouvait l'instancier?


        Ce n'est pas tellement grave, mais je trouvais que ça ferait plus propre.

        lmghs a écrit:

        On peut certes aussi s'est servir pour mettre en place des clé qui interdisent des comportements, mais généralement c'est parce qu'il y a des raccourcis/bidouilles avec invariants ou pour bloquer des façons d'utiliser qui paraissent simples mais qui en fait ne sont pas à destination des utilisateurs finaux qui ne sauront pas s'en servir correctement.

        Je ne comprend pas trop cette phrase.

        • Partager sur Facebook
        • Partager sur Twitter
          7 juin 2023 à 15:38:16

          Il y a pas mal d'approche possible en fonction des contraintes d'utilisation et de visibilité.

          Pour qu'un code utilisateur puisse voir une classe et pas une autre, dans un module, c'est que la première fait partie de l'API du module mais pas la seconde.

          Généralement, l'API d'un module est constitué d'un fichier d'en-tête.

          Donc, si la classe constitue la totalité de l'API du module, l'API du module n'est que le fichier d'en-tête de la classe.

          Si l'API est plus vaste, une forward déclaration de la classe est insérée dans un fichier d'en-tête dédié de l'API du module.

          Si l'on veut renforcer la séparation entre la classe de l'API et l'autre classe, mettre la seconde dans un namespace interne permet de structurer le code du module.

          En POO, généralement, c'est l'extensivité (héritage, surcharge, redéfinition, etc...) ou pas de certaine choses qu'on cherche à maîtriser, pas forcement la "visibilité", où de simple espace de noms font le taf.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

          Problème de décision en POO

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown