CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

faire du code solid(e)

Sukiyakidepoche
Sukiyakidepoche
Niveau 40
03 février 2023 à 21:20:35

je fais un projet de cours en cpp en ce moment
j'ai un fichier main.cpp
et j'ai deux classes, disons :
classA et classB

classA utilise classB et classB utilise classA

on est d'accord que ça va pas du tout ?

Grand__Smurf
Grand__Smurf
Niveau 46
03 février 2023 à 22:28:18

Ça dépend, parfois c'est nécessaire. Ça s'appelle une dépendance circulaire et ça va probablement te poser des soucis mais en C++ c'est gérable.

Sukiyakidepoche
Sukiyakidepoche
Niveau 40
03 février 2023 à 22:38:19

Le 03 février 2023 à 22:28:18 :
Ça dépend, parfois c'est nécessaire. Ça s'appelle une dépendance circulaire et ça va probablement te poser des soucis mais en C++ c'est gérable.

d'accord merci pour ta réponse, je pensais que c'était un pattern à éviter absolument

Grand__Smurf
Grand__Smurf
Niveau 46
04 février 2023 à 00:51:46

Oui c'est à éviter, ça peut être le signe que t'as mal designé ton truc mais y a des cas où y a pas le choix.

Tetris-te
Tetris-te
Niveau 9
04 février 2023 à 18:24:42

Tu peux faire une classe C qui fait intérargir ensemble ta classe A et B. Sinon tu peux regarder du côté des designs pattern.

ParniakLeCougar
ParniakLeCougar
Niveau 19
04 février 2023 à 22:55:39

Explique nous déja pourquoi tu fais un import circulaire, avec une explication un peu plus concrete on pourra mieux t'aider

Oberginee
Oberginee
Niveau 7
05 février 2023 à 23:06:06

En Java ça va parce que le GC gère tout.

En C++ faut avoir une tête très claire parce que tu dois voir comment tu lâcheras les ressources une fois t'as plus besoin de ces classes là.

Très souvent t'as une manière de mieux gérer tes codes pour éviter ce genre de truc.

Impaloupa
Impaloupa
Niveau 11
09 février 2023 à 13:35:48

Tout dépend du contexte. Si t'es dans le cadre d'une modélisation de ton data layer, ce n'est pas considéré comme une mauvaise pratique. Ca s'appelle simplement une relation bilatérale. Par exemple, j'ai mes classes "Livre" et "Auteur". Quand j'accède à une instance de ma classe Livre, j'aimerais pouvoir obtenir l'auteur. Quand j'accède à une instance de ma classe Auteur, j'aimerais pouvoir retrouver les livres qu'il a rédigés. C'est tout à fait raisonnable de vouloir définir ce genre de relations et ce n'est pas une mauvaise pratique.

Pour reprendre les grands principes "SOLID", ils sont plus cohérents lorsqu'on parle de composants/modules de ton application. Ce sont des briques fonctionnelles composant ton soft qui sont responsables d'une ou plusieurs opérations assumées par ton programme. Le but fondamental de "SOLID", c'est de bien séparer les différentes briques de ton application pour qu'elles fassent seulement ce pourquoi elles ont été réalisées et qu'elles ne s'encombrent pas de détails liés au contexte d'exécution ou au contexte d'autres briques de ton application.

En respectant ces principes, si un jour tu te retrouves à devoir remplacer l'une de ces briques (maintenance évolutive, changement de technologie / framework, changement d'interfaces externes, etc.), ton travail s'avèrera beaucoup plus simple que si tu n'avais pas respecté ces principes.

-ChadGPT-
-ChadGPT-
Niveau 2
09 février 2023 à 23:09:38

Le 03 février 2023 à 21:20:35 sukiyakidepoche a écrit :
je fais un projet de cours en cpp en ce moment
j'ai un fichier main.cpp
et j'ai deux classes, disons :
classA et classB

classA utilise classB et classB utilise classA

on est d'accord que ça va pas du tout ?

Tout à fait, mon pote. C'est la définition même de la dépendance circulaire et ça va causer des problèmes de compilation et d'exécution. Si deux classes dépendent l'une de l'autre, il n'y a aucun moyen pour le compilateur de déterminer quelle classe doit être compilée en premier, ce qui entraîne une erreur de compilation. La meilleure façon de résoudre ce problème est de séparer les deux classes en différents fichiers et de les inclure l'un dans l'autre de manière appropriée. Il est également possible de créer une troisième classe qui gère les dépendances entre les deux classes et qui les utilise. De cette façon, tu évites la dépendance circulaire et les erreurs de compilation https://image.noelshack.com/fichiers/2019/25/2/1560867829-glados.png

lokilok
lokilok
Niveau 16
10 février 2023 à 00:20:27

Si deux classes dépendent l'une de l'autre, il n'y a aucun moyen pour le compilateur de déterminer quelle classe doit être compilée en premier, ce qui entraîne une erreur de compilation.

Ça veut rien dire. C'est pas le compilateur qui choisit l'ordre de compilation, il compile dans l'ordre d'apparition des classes dans le fichier.

La meilleure façon de résoudre ce problème est de séparer les deux classes en différents fichiers et de les inclure l'un dans l'autre de manière appropriée.

De un "les inclure l'un dans l'autre de manière appropriée" ça veut rien dire. De deux c'est totalement faux. Ce qu'il faut c'est pré-declarer les classes, la séparation en plusieurs fichiers ça n'a rien à voir dans la résolution du problème.

Puis en plus de ça la question du topic n'a jamais été "comment faire", mais "est-ce une bonne chose à faire".

Je déteste vraiment les réponses ChatGPT dans les forums, c'est vraiment n'importe quoi la plupart du temps.

Message édité le 10 février 2023 à 00:21:13 par lokilok
Impaloupa
Impaloupa
Niveau 11
10 février 2023 à 07:08:04

Le 09 février 2023 à 23:09:38 :

Le 03 février 2023 à 21:20:35 sukiyakidepoche a écrit :
je fais un projet de cours en cpp en ce moment
j'ai un fichier main.cpp
et j'ai deux classes, disons :
classA et classB

classA utilise classB et classB utilise classA

on est d'accord que ça va pas du tout ?

Tout à fait, mon pote. C'est la définition même de la dépendance circulaire et ça va causer des problèmes de compilation et d'exécution. Si deux classes dépendent l'une de l'autre, il n'y a aucun moyen pour le compilateur de déterminer quelle classe doit être compilée en premier, ce qui entraîne une erreur de compilation. La meilleure façon de résoudre ce problème est de séparer les deux classes en différents fichiers et de les inclure l'un dans l'autre de manière appropriée. Il est également possible de créer une troisième classe qui gère les dépendances entre les deux classes et qui les utilise. De cette façon, tu évites la dépendance circulaire et les erreurs de compilation https://image.noelshack.com/fichiers/2019/25/2/1560867829-glados.png

Comme l'a dit lokilok, ta réponse n'a pas de sens car elle mélange beaucoup de concepts.

Les dépendances circulaires ne sont pas un problème pour un compilateur mais plutôt pour un moteur d'injection. Le compilateur s'en fout des dépendances circulaires vu que ce n'est pas à lui de fournir les potentielles instances de classA et classB. Dans le cadre d'un moteur d'injection où tu aurais défini que pour construire A, tu as besoin de B et que pour construire B, tu as besoin de A, là t'auras un problème. Mais c'est au runtime ça, pas à la compil et ça ne concerne que ce genre de contextes (p.ex. DI).

La suite de ta réponse ne fait aucun sens. Si c'est du ChatGPT, je vois maintenant ce que ça peut donner quand quelqu'un ne connaissant pas le sujet s'aventure à essayer d'obtenir des réponses sur des topics aussi spécifiques. Moi j'obtiens généralement de meilleurs résultats mais c'est sûrement lié à la manière de poser les questions en utilisant les bons termes et en apportant les précisions nécessaires. Et oui, parfois il dit quand même de la grosse daube bien formulée :rire:

Message édité le 10 février 2023 à 07:11:15 par Impaloupa
Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment