Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Variables globales ?

44 réponses
Avatar
Michael Monerau
Bonjour,

J'ai une question concernant le design général pour un nouveau et long
projet.

Comment faites-vous pour stocker les options générales d'un programme ? Par
exemple, les options données par la ligne de commande, ou le Handle de la
fenêtre principale (sous Windows), ou l'objet sélectionné en ce moment (dans
le cas d'un programme qui présenterait une telle fonctionnalité), etc...

Vous m'avez compris :) J'aimerais savoir s'il y a un pattern destiné à celà
: garder les valeurs accessibles par tout le code... Est-ce que les
variables globales sont utilisables dans ce cas-là ?

J'ai utilisé un singleton "GeneralManager" dans mon projet précédent, avec
une paire de Get/Set pour chaque variable, mais je trouve cela vraiment très
lours à l'utilisation (GeneralManager::Instance()->GetBlah() à chaque
fois...).

Merci de vos lumières :)

--
<=-Michaël"Cortex" Monerau.-=>

10 réponses

1 2 3 4 5
Avatar
Gabriel Dos Reis
"David Brabant" writes:

| C'est à peine mieux
| que "the real thing". A vrai dire, selon moi toujour, c'est pire dans
| la mesure où cela risque de te donner relativement bonne conscience ;-).

N'est-ce pas ce qu'on demande de jours aux étudiants ? Appliquer les
méthodes (sophistiquées) et avoir la concience tranquille (du devoir
accompli).

Bon, je retourne à mes oignons.

-- Gaby
Avatar
Michael Monerau
Gabriel Dos Reis wrote:
"David Brabant" writes:

C'est à peine
mieux que "the real thing". A vrai dire, selon moi toujour,
c'est pire dans la mesure où cela risque de te donner
relativement bonne conscience ;-).


N'est-ce pas ce qu'on demande de jours aux étudiants ? Appliquer les
méthodes (sophistiquées) et avoir la concience tranquille (du devoir
accompli).


;-)

Mais dans mon cas, je ne suis pas encore étudiant ! Je voudrais juste
apprendre à programmer "proprement" :)

Bon, je retourne à mes oignons.


Oh, je suis sûr que tu as des très bonne manières pour stocker des
paramètres globaux ! Comment fais-tu dans tes projets ?
--
<=-Michaël"Cortex" Monerau.-=>


Avatar
Jean-Marc Bourguet
"Michael Monerau" writes:

Comment faites-vous pour stocker les options générales d'un
programme ? Par exemple, les options données par la ligne de
commande,


ont servit comme paramètres de constructeurs

ou le Handle de la fenêtre principale (sous Windows),


J'ai pas de fenêtre principale (je suis pas sous Windows et nous avons
plutôt plusieurs fenêtres qu'un concept MDI) et donc des objets
décrivant les fenêtres.

ou l'objet sélectionné en ce moment (dans le cas d'un programme qui
présenterait une telle fonctionnalité),


Le gestionnaire de sélection est un composant de la classe décrivant
la fenêtre.

etc...

Vous m'avez compris :) J'aimerais savoir s'il y a un pattern destiné à celà
: garder les valeurs accessibles par tout le code...


As-tu d'autres exemples de valeurs accessibles par tout le code?
Parce que là je suis pas convaincu de leur utilité.

Est-ce que les variables globales sont utilisables dans ce cas-là ?

J'ai utilisé un singleton "GeneralManager" dans mon projet
précédent, avec une paire de Get/Set pour chaque variable, mais je
trouve cela vraiment très lours à l'utilisation
(GeneralManager::Instance()->GetBlah() à chaque fois...).


Je ne cherche pas à abolir les variables globales a tout prix.

A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Luc Hermitte
dédé le homard wrote in
news:bftsco$v8l$:


voila, dans un petit programme en c++, pour afficher une phrase à tel
endroit, j'utilise fprint("33[xx,yy")

mais n'y a t il pas autre chose que cela, car cette expression
n'accepte pas les variables, il faut mettre une abscisse et une
ordonnée bien définie, et j'ai besoin d'une expression qui permette de
faire pareil, mais avec des variables comme abscisse et ordonnée.

on m'a dit d'aller voir 'ncurses', mais comment ,faire ?


...
Ouvrir ce qui te sert de butineur, aller sur google et taper ncurses.
Tu trouveras la doc avec la lib -- tu peux aussi regarder les sources
projets développés avec ncurses comme mutt p.ex.

--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>

Avatar
Fabien LE LEZ
On Sat, 26 Jul 2003 11:03:39 GMT, "Michael Monerau"
wrote:

Comment faites-vous pour stocker les options générales d'un programme ? Par
exemple, les options données par la ligne de commande, ou le Handle de la
fenêtre principale (sous Windows), ou l'objet sélectionné en ce moment (dans
le cas d'un programme qui présenterait une telle fonctionnalité), etc...


Pour la programmation graphique sous MS-Windows, j'utilise les OWL,
bibliothèque qui ressemble aux MFC. L'objet "de base" est donc un
objet "fenêtre" (TWindow) -- chaque fenêtre est gérée entièrement par
un objet TWindow.
Du coup, chaque objet TWindow doit contenir toutes les données dont il
a besoin : une copie des variables qu'il n'a pas le droit de modifier,
et un système d'accès aux variables qu'il a le droit de modifier. Je
passe à chacun de ces objets pas mal de trucs dans le constructeurs ou
dans une fonction Reset(). C'est une solution apparemment lourde, mais
robuste et flexible -- et incomparablement plus pratique que les
variables globales quand, après un an de développement, on s'aperçoit
qu'on a besoin de créer deux fenêtres de même type avec des paramètres
différents...

Quant aux arguments de main(), argc et argv, ce sont les arguments de
main() -- c'est donc à main() de les mettre en forme (éventuellement
en appelant d'autres fonctions) avant de créer un objet "application"
et de lui passer le résultat de cette mise en forme.



--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Avatar
Fabien LE LEZ
voila, dans un petit programme en c++, pour afficher une phrase à tel
endroit, j'utilise fprint("33[xx,yy")


Pourquoi ce message apparaît-il comme réponse au message "Variables
globales ?" de Michael ? Un problème avec mon serveur de news ou une
erreur de ta part ?


--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Avatar
M.B.
Avec les MFC, l'application est encapsulee dans l'instance d'une classe
qui derive de CApplication.

Cet objet est une variable globale (la seule en principe) de l'appli.

MB

"Fabien LE LEZ" a écrit dans le message news:

On Sat, 26 Jul 2003 16:13:31 GMT, "Michael Monerau"
wrote:

D'accord. Donc, encapsuler dans des classes... Mais il faut bien une
variable globale pour la fenêtre principale (à part si on met l'appli
dans


une classe, mais il faut une variable globale pour l'appli).


Avec les OWL, l'application est encapsulée dans un objet TApplication,
qui est une variable locale à la fonction main() (OwlMain, en fait) :




Avatar
Michael Monerau
Fabien LE LEZ wrote:
voila, dans un petit programme en c++, pour afficher une phrase à tel
endroit, j'utilise fprint("33[xx,yy")


Pourquoi ce message apparaît-il comme réponse au message "Variables
globales ?" de Michael ? Un problème avec mon serveur de news ou une
erreur de ta part ?


Sûrement une erreur de sa part, j'ai le même comportement sur le serveur de
news Chello.
--
<=-Michaël"Cortex" Monerau.-=>


Avatar
kanze
Gabriel Dos Reis wrote in message
news:...
"Michael Monerau" writes:

| > Bon, je retourne à mes oignons.

| Oh, je suis sûr que tu as des très bonne manières pour stocker des
| paramètres globaux ! Comment fais-tu dans tes projets ?

Ils sont globaux, sans fioriture -- lorsque cela doit être vraiment le
cas, et je m'assure manuellement de leurs constructions cohérentes, si
cela est nécessaire. Mais, souvent, je n'en ai pratiquement pas.


Les paramètres de configuration (lu depuis la ligne de commande ou d'un
fichier de configuration) est à mon avis un bon exemple d'un cas où une
variable globale pourrait se justifier. Ou un singleton, SI (et
seulement si) c'est une classe particulière qui les contient, et qu'on
tient à s'assurer qu'il n'y a qu'une seule instance de cette classe.

Dans la pratique, j'utilise deux techniques différentes pour la
configuration, selon la taille et l'utilisation du programme. Dans des
petits programmes, ou ceux conçu pour être appelé de façon interactive
depuis la ligne de commande (ou au moyen de la commande '!' de vi), la
configuration (qui est un bien grand mot pour ce que c'est dans ce
cas-ci) se fait au moyen d'options dans la ligne de commande. Pour
chaque option, je déclare une variable à durée de vie statique où
l'option sert ; l'option s'inscrit au près de la classe qui interprète
la ligne de commande (argc et argv), qui est un singleton surtout à
cause des problèmes liés à l'ordre d'initialisation.

Dans des applications plus grandes, ou celles qu'on démarre par un
script rc, j'utilise surtout un fichier de configuration -- dans
certains cas, ce n'est pas rare d'avoir une centaine d'options, voire
plus. Dans ce cas-ci, en général, il y a une classe qui parse le
fichier, et cette classe peut être un singleton (puisqu'il doit n'y
avoir qu'une seule instance), mais ce n'est pas rare que je me contente
d'une simple Configuration const* global non plus.

Quant à l'utilisation d'un objet « application », j'apprends des choses.
Quelle drôle de conception. (J'ai actuellement un « application
manager », mais c'est un thread à part qui écoute une connection sur un
socket prédéfinit pour traiter des commandes particulières de gestion.)

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Avatar
Gabriel Dos Reis
writes:

| Gabriel Dos Reis wrote in message
| news:...
| > "Michael Monerau" writes:
|
| > | > Bon, je retourne à mes oignons.
|
| > | Oh, je suis sûr que tu as des très bonne manières pour stocker des
| > | paramètres globaux ! Comment fais-tu dans tes projets ?
|
| > Ils sont globaux, sans fioriture -- lorsque cela doit être vraiment le
| > cas, et je m'assure manuellement de leurs constructions cohérentes, si
| > cela est nécessaire. Mais, souvent, je n'en ai pratiquement pas.
|
| Les paramètres de configuration (lu depuis la ligne de commande ou d'un
| fichier de configuration) est à mon avis un bon exemple d'un cas où une
| variable globale pourrait se justifier. Ou un singleton, SI (et
| seulement si) c'est une classe particulière qui les contient, et qu'on
| tient à s'assurer qu'il n'y a qu'une seule instance de cette classe.

Dans mes applications, j'ai rarement une seule option spécifiée en
ligne de commande (et dans ce cas, elle est souvent décrite par une
variable locale à ::main, ou utilisé comme argument pour construire un
objet plus élaboré). En général, je dois vérifier la cohérence des
options, et là, naturellement c'est le boulot d'une classe qui prend
argc et argv et construit ce qu'il faut, si tout va bien.

Les rares cas où les options sont globaux sont les machins comme GCC,
où de toute évidence, la notion de conception et construction de
logiciels (et non de programme) est, jusqu´à un temps assez récent,
de l'ordre de l'hérésie.

-- Gaby
1 2 3 4 5