Discussion:
Conception dans un développement C++
(trop ancien pour répondre)
ByB
2006-01-09 22:40:01 UTC
Permalink
Bonjour,

Je développe une application avec Visual C++ 6.0 et les MFC (oui, je
sais, ce n'est pas up-to-date, mais j'aime bien) et cette application
doit créer à la demande des pages HTML.

Pour cela, j'ai créé un fichier globales.h qui contient le code de mes
fonctions globales :


void WriteHTMLText(&f,...)
void WriteTaggedHTMLText(&f,...)

qui sont des fonctions qui me permettent d'écrire simplement des lignes
de HTML dans mon fichier. En l'occurrence le premier paramètre est un
pointeur vers le fichier que j'ai ouvert et contient le code HTML.

Exemple de code :

///SNIP///
CFile f;
f.Open("pageweb.htm",CFile::modeCreate|CFile::modeWrite,NULL);
WriteHTMLText(&f,....);
f.Close();
///SNIP///

Ma question est : cela se tient-il d'un point de vue objet ? Devrais-je
créer un objet quelconque qui "porte" mes deux fonctions
WriteHTMLText() ? Par exemple, une classe CMyFile dérivant de CFile et
comportant ces deux fonctions en plus ? Ou alors voyez vous autre chose
?

Merci de vos conseils.
--
LA FINALITE VALORISE LES PROCESSUS ORGANISATIONNELS DES BENEFICIAIRES
matlerouge
2006-01-27 13:49:54 UTC
Permalink
Post by ByB
Bonjour,
Hello
Post by ByB
(...)
Ma question est : cela se tient-il d'un point de vue objet ? Devrais-je
créer un objet quelconque qui "porte" mes deux fonctions WriteHTMLText()
? Par exemple, une classe CMyFile dérivant de CFile et comportant ces
deux fonctions en plus ? Ou alors voyez vous autre chose ?
C'est jamais trop bon si tu veux faire du "pur" objet de laisser trainer
des fonction globale

Moi j'aurais fait une classe contenant les methodes WriteHTMLText, et
dans le constructeur l'ouverture du fichier 'f'. (donc avec un objet
private CFile dans la classe)

Comment ca il te suffit d'instancier l'objet avec le nom du fichier, et
d'appeller les 2 methodes sans trop d'embeter.

Ensuite je ne pense pas qu'il faille deriver de CCFile. En effet CFile
represente un fichier, la derivation signifie en gros que tu va
specialiser ce concept, donc la c'est pas du tout ca : tu change
totalement le sens.

C'est pour ca que la relation de delegation (CFile DANS ta classe) est
mieux a mon sens
Bruno Desthuilliers
2006-01-30 21:42:04 UTC
Permalink
Post by matlerouge
Post by ByB
Bonjour,
Hello
Post by ByB
(...)
Ma question est : cela se tient-il d'un point de vue objet ? Devrais-je
créer un objet quelconque qui "porte" mes deux fonctions WriteHTMLText()
? Par exemple, une classe CMyFile dérivant de CFile et comportant ces
deux fonctions en plus ? Ou alors voyez vous autre chose ?
C'est jamais trop bon si tu veux faire du "pur" objet de laisser trainer
des fonction globale
Ah ? Et pourquoi donc ?

NB : si tu veux faire du "pur" objet, prend un langage "pur" objet. Dans
un tel langage, tout est objet, donc une fonction est elle-même un objet
- instance de la classe 'fonction'. Donc, ce n'est pas un problème !-)
Post by matlerouge
Moi j'aurais fait une classe contenant les methodes WriteHTMLText, et
dans le constructeur l'ouverture du fichier 'f'. (donc avec un objet
private CFile dans la classe)
Hmmm... je connais mal les MFC, mais est-ce qu'il n'y a pas une classe
plus abstraite représentant "tous les machins qui ressemblent à un
fichier accessible en écriture" ?
Post by matlerouge
Comment ca il te suffit d'instancier l'objet avec le nom du fichier, et
d'appeller les 2 methodes sans trop d'embeter.
Ensuite je ne pense pas qu'il faille deriver de CCFile. En effet CFile
represente un fichier, la derivation signifie en gros que tu va
specialiser ce concept, donc la c'est pas du tout ca : tu change
totalement le sens.
Attention, en C++, le même mécanisme (l'héritage) est utilisé pour deux
fonctionnalités sémantiquement distinctes : le sous-typage
(spécialisation), et la réutilisation de code (héritage
d'implémentation). Le fait d'hériter d'une classe ne signifie pas
forcément qu'on veuille créer un sous-type - il y a d'ailleurs, SJMSB,
une notion d'héritage privé en C++.
Post by matlerouge
(snip) la relation de delegation (CFile DANS ta classe) est
mieux a mon sens
Outre le fait qu'elle exprime plus clairement l'intention, la délégation
à un autre intéret : c'est un couplage faible, et qu'on peut rendre
paramétrable - à condition de ne pas hard-coder le type concret de
l'objet auquel on compte déléguer...
Bruno Desthuilliers
2006-01-30 22:20:33 UTC
Permalink
Post by ByB
Bonjour,
Je développe une application avec Visual C++ 6.0 et les MFC (oui, je
sais, ce n'est pas up-to-date,
no comment !-)
Post by ByB
mais j'aime bien) et cette application
doit créer à la demande des pages HTML.
Pour cela, j'ai créé un fichier globales.h qui contient le code de mes
Heu... Tu a mis l'implémentation dans le header ? J'ai fusillé des
stagiaires pour moins que ça, mais bon, c'est toi qui voit, hein...
Post by ByB
void WriteHTMLText(&f,...)
void WriteTaggedHTMLText(&f,...)
qui sont des fonctions qui me permettent d'écrire simplement des lignes
de HTML dans mon fichier.
Excuse-moi, mais je ne vois pas en quoi écrire du HTML est différent
d'écrire du texte ? A moins que ce ne soit pas du texte que tu passe à
ces fonctions ? En fait, c'est quoi le prototype complet de tes
fonctions ?
Post by ByB
En l'occurrence le premier paramètre est un
pointeur vers le fichier que j'ai ouvert et contient le code HTML.
///SNIP///
CFile f;
f.Open("pageweb.htm",CFile::modeCreate|CFile::modeWrite,NULL);
WriteHTMLText(&f,....);
f.Close();
///SNIP///
Ma question est : cela se tient-il d'un point de vue objet ?
Impossible à dire sans en savoir plus sans savoir ce que font ces deux
fonctions et avec quoi (à part le fichier of course !-)), ni dans
quelles conditions elles sont utilisée...

Accessoirement, le code HTML est généré à partir de quoi ? D'une saisie
directe, d'un autre format texte, d'un DOM ???
Post by ByB
Devrais-je
créer un objet quelconque qui "porte" mes deux fonctions WriteHTMLText()
? Par exemple, une classe CMyFile dérivant de CFile et comportant ces
deux fonctions en plus ? Ou alors voyez vous autre chose ?
Pas sans réponse préalable aux questions ci-dessus.
ByB
2006-02-06 21:33:42 UTC
Permalink
Si Bruno Desthuilliers ne nous l'avait pas dit, on n'aurait jamais cru
que
Post by Bruno Desthuilliers
Post by ByB
Bonjour,
Je développe une application avec Visual C++ 6.0 et les MFC (oui, je sais,
ce n'est pas up-to-date,
no comment !-)
Post by ByB
mais j'aime bien) et cette application doit créer à la demande des pages
HTML.
Pour cela, j'ai créé un fichier globales.h qui contient le code de mes
Heu... Tu a mis l'implémentation dans le header ? J'ai fusillé des stagiaires
pour moins que ça, mais bon, c'est toi qui voit, hein...
Post by ByB
void WriteHTMLText(&f,...)
void WriteTaggedHTMLText(&f,...)
qui sont des fonctions qui me permettent d'écrire simplement des lignes de
HTML dans mon fichier.
Excuse-moi, mais je ne vois pas en quoi écrire du HTML est différent d'écrire
du texte ? A moins que ce ne soit pas du texte que tu passe à ces fonctions ?
En fait, c'est quoi le prototype complet de tes fonctions ?
Je passe du texte à ma fonction, et elle se charge d'écrire dans la
page HTML en rajoutant les tags qui vont bien :

Exemple :

WriteTaggedHTML(&f,"H2","I","Salut les copains");

écrit "<H2><I>Salut les copains</I></H2>" dans le fichier f

Ca ne seont pas des fonctions très évoluées, juste une question de
confort et de simplification pour générer des pages HTML simplement.
--
N'est-ce pas étrange que les ordinateurs fassent aujourd'hui des choses
jugées inutiles il y a vingt ans ? [Gene Perret]
bruno at modulix
2006-02-07 10:12:09 UTC
Permalink
Si Bruno Desthuilliers ne nous l'avait pas dit, on n'aurait jamais cru que
(snip)
Post by Bruno Desthuilliers
Excuse-moi, mais je ne vois pas en quoi écrire du HTML est différent
d'écrire du texte ? A moins que ce ne soit pas du texte que tu passe à
ces fonctions ? En fait, c'est quoi le prototype complet de tes
fonctions ?
Je passe du texte à ma fonction, et elle se charge d'écrire dans la page
WriteTaggedHTML(&f,"H2","I","Salut les copains");
écrit "<H2><I>Salut les copains</I></H2>" dans le fichier f
Ok, je vois...

<hs>
Utilise de préférence les CSS pour le formatage. La soupe de tag n'est
plus vraiment d'actualité:
- au moins :
<h2 style="font-style: italic";>Salut les copains</h2>

- au mieux:
# dans le .css
.greetings { font-style: italic; }
# html
<h2 class='greetings'>Salut les copains</h2>
</hs>
Ca ne seont pas des fonctions très évoluées, juste une question de
confort et de simplification pour générer des pages HTML simplement.
Il existe un paquetage Python qui fait quelquechose de similaire, mais
avec des objets pour chaque tag.

Dans ton cas, et pour rester simple, je verrais bien une classe
HTMLDocument, avec des methodes (ou sous-objets ?) pour les tags...


HTMLDocument doc = new HTMLDocument(&file_or_stream_handle);
doc.h2('salut les copains', 'greetings');
HTMLTable t = doc.table(...);
for (parcours_de_donnees_ici) {
t.row(...);
}
t.flush(); // force l'écriture de la table dans le doc

etc...

Mes deux centimes...
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in '***@xiludom.gro'.split('@')])"
Jean-Marc MOLINA
2006-02-22 13:37:32 UTC
Permalink
Post by ByB
Je développe une application avec Visual C++ 6.0 et les MFC (oui, je
sais, ce n'est pas up-to-date, mais j'aime bien) et cette application
doit créer à la demande des pages HTML.
Un peu HS mais si tu souhaites te mettre au goût du jour je te conseille
vivement de jeter un coup d'œil à wxWidgets. Comme l'API de cette biblio est
similaire à celle de MFC, tu ne sera pas perdu, tout comme moi quand je suis
passé de MFC à wxWidgets. Les avantages sont multiples :
- Développement multi-plates-formes (Windows, Linux, Mac...)
- Biblio bien plus puissantes à la base
- Très bonne documentation (une sorte de MSDN)
- Nombreux environnement de développement de qualité (moi j'utilise l'outil
CDT de Eclipse, il y a aussi Dev-C++)
- C'est un projet libre ("open source")

Loading...