Questionnement sur les .h

HarloHarlo Membre
29 mars modifié dans Dev. macOS #1

Petite question que je me pose sur les .h, je peux avoir une série d'objet utilisant d'autres objets

X va utiliser Album.h, Song.h, Title.h
Y va utiliser Album.h, Stream.h, Song.h
Z va utiliser Stream.h, Song.h

Par soucis de propreté je pensais à mettre tout ça dans un global.h mais c'est une pratique que je ne vois jamais donc j'en conclu que c'est "mal" ?

Si c'est le cas, pourquoi, ça implique quoi ?

Merci.

Réponses

  • PyrohPyroh Membre

    Pour que la compilation ne prenne pas des plombes il vaut mieux limiter les import que tu utilise.
    Ce qui fait que techniquement tu peux le faire mais tu risque d'inclure des .h sans que ça soit utile et augmenter ton temps de compilation. Il vaut mieux rester sobre à ce niveau là.

  • HarloHarlo Membre

    Ok, merci

  • klogklog Membre
    29 mars modifié #4

    Je ne pense pas que le temps de compilation augmente énormément, les .m de tes .h sont compilés indépendamment et seulement quand le code du .m est modifié (ou qu'il utilise un import modifié ça va de soi). Le linker se charge de lié les modules interdépendants à postériori.

    Mais en faisant de la sorte, outre le fait que le réseau d'interdépendance devient difficile à suivre, tu vas rendre certains objets dépendant d'autres qui n'ont rien à voir avec. Ce qui risque de complexifier l'extraction de ces objets pour les insérer dans une nouvelle bibliothèque par exemple.

    Par contre, si les objets "terminaux" doivent faire l'objet d'une bibliothèque autonome, il est habituel de créer un fichier global à appeler une seule fois dans les fichiers qui l'utiliserons. Il devient alors facile de créer un framework ou une librairie puisque ce fichier regroupe ce qui doit être "visible".

  • klogklog Membre
    29 mars modifié #5

    A titre personnel, je fonctionne de manière classique, par couche (une bibliothèque représentant une couche) :

    • Chaque bibliothèque contient un .h global en entrée et un .h en sortie
    • Le .h en entrée contient tous les imports de "services" minimaux dont toutes les classes de ma bibliothèque auront besoin
    • Le .h en sortie contient tous les imports de toutes les classes de la bibliothèque qui doivent être visibles
    • Chaque .h de chaque classe de ma bibliothèque contient donc le .h d'entrée + tous les imports dont la classe à besoin (y compris les interdépendances de la bibliothèque)
  • HarloHarlo Membre

    Merci :)

Connectez-vous ou Inscrivez-vous pour répondre.