OVH Cloud OVH Cloud

Débuter en C++

78 réponses
Avatar
H.
Bonsoir...

[Copie d'un message sur fr.comp.lang.c]
Bon, je sais, c'est une question de débutant, mais bon... je n'arrive
pas à trouver de réponses pertinentes sur internet ou dans la FAQ.
En gros, j'hésite à passer au langage C (je maîtrise bien GW Basic,
Turbo Pascal, PHP et quelques autres langages). Et j'hésite entre C et
C++... Je ne trouve pas de comparatif "pertinent" au sens ou je l'entend
(i.e.
pour débutant !), donc je me permets de poser quelques questions simples,
dont les réponses me permettront de choisir :
- quelle est la différence entre C et C++, "à part" que C++ permet la
programmation orientée objet ?
- peut-on programmer en C++ sans se servir dans l'immédiat de la
programmation orientée objet (autrement dit, apprendre progressivement, mais
juste sous C++) ?
- quel compliateur choisir (sur quels critères se baser ?) ? J'ai
téléchargé sans les installer Dév-C++ et MS Visual C++ 2005 Express
(gratuits).

En fait, mon objectif à court terme est de faire un programme spécifique
(évolutif et assez complexe) avec une interface graphique et une base de
données (j'ai l'habitude en PHP) :
- est-ce qu'il est possible (autrement dit pas trop complexe pour
quelqu'un qui débute avec ce langage), en C ou en C++, de faire "sa" base de
données avec des fichiers texte (sans se servir de SQL ou autres) ?
- pour les interfaces graphiques, d'après ce que j'ai lu, on en revient
toujours à l'OS, et puis ce n'est pas le sujet du forum, etc. Néanmoins, je
ne vois pas bien "comment" on peut s'occuper d'une interface graphique : par
l'intégration d'une bibliothèque spécifique ? Pour Windows, y en a-t-il une
qui soit relativement simple d'abord, ou, à défaut, quelle est la plus
répandue (et libre) ?


Cordialement,
Christophe

10 réponses

1 2 3 4 5
Avatar
James Kanze
Fabien LE LEZ wrote:
On Sun, 09 Jul 2006 16:34:52 +0200, James Kanze :


Si tu as besoin d'une base de données, tu as besoin d'une base de
données.



Sauf cas spécifique (accès à une base de données existante,
par exemple), on n'a jamais *besoin* d'une base de données. On
a un problème, et utiliser une BdD classique (MySQL par
exemple) peut être une solution. Solution plus ou moins
opportune selon les circonstances.


Dans un script PHP sur un serveur web, l'usage d'une BdD (souvent
MySQL) est courant.


Dans un logiciel écrit en C++ et installé chez un grand nombre
de clients, c'est nettement moins conseillé, car ça complique
horriblement le déploiement, tout en n'apportant pas tant que
ça d'avantages -- bien souvent, gérer soi-même une assez
grande quantité de données est relativement facile en C++.


Ça dépend ce que tu entends par « gérer ». Si tu as besoin des
recherches compliquées sur une quantité importante
d'information, avec une structure plus ou moins complexe, ce
n'est pas facile du tout en C++. Et sinon, tu n'as pas besoin
d'une base de données.

Je crois que la source de notre désaccord, c'est plutôt que
beaucoup d'applications Web utilise une base de données non
parce qu'elles ont besoin d'une base de données, mais parce que
le PHP sur leur site fournisseur n'offre pas d'autre solution de
persistence. (Il n'y a pas de quoi dans la bibliothèque standard
de C++ d'assurer une persistence fiable non plus. Mais beaucoup
d'applications n'ont pas réelement besoin d'une fiabilité
transactionnelle absolue non plus.)

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34


Avatar
Sylvain
James Kanze wrote on 09/07/2006 18:51:

beaucoup d'applications Web utilise une base de données non
parce qu'elles ont besoin d'une base de données, mais parce que
le PHP sur leur site fournisseur n'offre pas d'autre solution de
persistence. (Il n'y a pas de quoi dans la bibliothèque standard
de C++ d'assurer une persistence fiable non plus.


"persistence" de session ? ou illimitée ?

pour le premier les variables de sessions de PHP existe depuis .. tjrs.

pour le second on a /besoin/ d'une base -- seuls les non professionels
créent des structures à la con dépendant de leur indianess, compilos et
autre libraries.

Sylvain.

Avatar
Fabien LE LEZ
On Sun, 09 Jul 2006 18:51:39 +0200, James Kanze :

Ça dépend ce que tu entends par « gérer ». Si tu as besoin des
recherches compliquées sur une quantité importante
d'information, avec une structure plus ou moins complexe, ce
n'est pas facile du tout en C++. Et sinon, tu n'as pas besoin
d'une base de données.


Il me semble que la structure de données et les "requêtes" pour la
solution "BdD" et pour la solution "C++ pur" seront très très
différentes.
Si tu veux "singer" directement une BdD SQL en C++, c'est
effectivement délicat.

Il y a aussi la structure naturelle des données : une liste "plate"
(liste des clients d'une entreprise, par exemple) est bien adaptée aux
BdD ; une structure d'arbre (surtout de profondeur non fixée) s'y
prêtera vraisemblablement moins.

Je crois que la source de notre désaccord, c'est plutôt que
beaucoup d'applications Web utilise une base de données non
parce qu'elles ont besoin d'une base de données, mais parce que
le PHP sur leur site fournisseur n'offre pas d'autre solution de
persistence.


Disons que dans un programme (GUI par exemple) qui tourne pendant
plusieurs minutes/heures, on a une certaine forme de persistance : les
données restent en RAM. De plus, passer deux secondes au début du
programme pour charger les données, puis deux secondes à la fin pour
les enregistrer sur disque, est acceptable. Interdire un accès
concurrent aux données est également acceptable la plupart du temps.

Dans un CGI ou script PHP sur un serveur web, la durée d'exécution
tourne typiquement autour de quelques dizaines de millisecondes. Si on
veut simuler une persistence (je dis bien "simuler", car de toutes
façons, ça passera par des requêtes HTTP séparées), il faut trouver un
moyen très rapide d'enregistrer les données.

(Il n'y a pas de quoi dans la bibliothèque standard
de C++ d'assurer une persistence fiable non plus.


D'une manière générale, il n'y a pas grand-chose dans la bibliothèque
standard.

Avatar
Loïc Joly
James Kanze wrote on 09/07/2006 18:51:


beaucoup d'applications Web utilise une base de données non
parce qu'elles ont besoin d'une base de données, mais parce que
le PHP sur leur site fournisseur n'offre pas d'autre solution de
persistence. (Il n'y a pas de quoi dans la bibliothèque standard
de C++ d'assurer une persistence fiable non plus.



"persistence" de session ? ou illimitée ?

pour le premier les variables de sessions de PHP existe depuis .. tjrs.

pour le second on a /besoin/ d'une base -- seuls les non professionels
créent des structures à la con dépendant de leur indianess, compilos et
autre libraries.


Je crée régulièrement des fichiers sans passer par des bases de données.
Ces fichiers ne dépendent pas de l'endianness, du compilo ou d'autre
bibliothèque. Je le fait souvent sans utiliser la moindre bibliothèque,
parfois avec boost. Et ça se fait en quelques lignes. Est-ce grave docteur ?

--
Loïc


Avatar
Sylvain
Loïc Joly wrote on 09/07/2006 20:48:

Je crée régulièrement des fichiers sans passer par des bases de données.
Ces fichiers ne dépendent pas de l'endianness, du compilo ou d'autre
bibliothèque. Je le fait souvent sans utiliser la moindre bibliothèque,


pareil.

parfois avec boost.


ça non.

Et ça se fait en quelques lignes.


il faudrait plus ?

Est-ce grave docteur ?


je ne sais pas demande au professeur de service, lui réponds DB2 si tu
parles fichier de config. et surement vice-versa.

'non-professionel' était réducteur, soit, il y a aussi les "escrocs"
(98% de developpeurs) qui pensent que les données de l'utilisateur lui
appartiennent et s'autorisent tous les formats propriétaires, pourquoi
se géner si le quidam ouvre un tel fichier un jugement en violation de
propriété le guette.

Sylvain.

Avatar
James Kanze
Sylvain wrote:
James Kanze wrote on 09/07/2006 18:51:


beaucoup d'applications Web utilise une base de données non
parce qu'elles ont besoin d'une base de données, mais parce que
le PHP sur leur site fournisseur n'offre pas d'autre solution de
persistence. (Il n'y a pas de quoi dans la bibliothèque standard
de C++ d'assurer une persistence fiable non plus.



"persistence" de session ? ou illimitée ?


Persistente, ça veut dire que les données ne sont pas perdues,
quoique qui arrive.

pour le premier les variables de sessions de PHP existe depuis
.. tjrs.


pour le second on a /besoin/ d'une base -- seuls les non
professionels créent des structures à la con dépendant de leur
indianess, compilos et autre libraries.


Une base est certainement une des solutions. En revanche, elle
en est loin d'être la seule. Et c'est claire qu'on sait gérer le
format qu'on utilise. Qu'on écrit dans une base de données où
ailleurs.

Et j'avoue que je ne comprends pas ces histoires de boutisme. Je
ne me suis jamais occupé de la représentation des données en
mémoire quand j'écris un fichier externe. Je définis un format,
et je l'écris.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34


Avatar
James Kanze
Fabien LE LEZ wrote:
On Sun, 09 Jul 2006 18:51:39 +0200, James Kanze :


Ça dépend ce que tu entends par « gérer ». Si tu as besoin des
recherches compliquées sur une quantité importante
d'information, avec une structure plus ou moins complexe, ce
n'est pas facile du tout en C++. Et sinon, tu n'as pas besoin
d'une base de données.



Il me semble que la structure de données et les "requêtes"
pour la solution "BdD" et pour la solution "C++ pur" seront
très très différentes. Si tu veux "singer" directement une
BdD SQL en C++, c'est effectivement délicat.


Il y a aussi la structure naturelle des données : une liste
"plate" (liste des clients d'une entreprise, par exemple) est
bien adaptée aux BdD ; une structure d'arbre (surtout de
profondeur non fixée) s'y prêtera vraisemblablement moins.


Ça dépend, mais c'est vrai qu'on pourrait lui préférer une base
hièrarchique à une base relationnelle. Disons LDAP.

Je crois que la source de notre désaccord, c'est plutôt que
beaucoup d'applications Web utilise une base de données non
parce qu'elles ont besoin d'une base de données, mais parce
que le PHP sur leur site fournisseur n'offre pas d'autre
solution de persistence.



Disons que dans un programme (GUI par exemple) qui tourne
pendant plusieurs minutes/heures, on a une certaine forme de
persistance : les données restent en RAM. De plus, passer deux
secondes au début du programme pour charger les données, puis
deux secondes à la fin pour les enregistrer sur disque, est
acceptable. Interdire un accès concurrent aux données est
également acceptable la plupart du temps.


Et qu'est-ce qui se passe si le système crashe entre la
modification des données et leur écriture sur disque ? S'il
s'agit des paramètres de configuration d'une GUI, j'avoue que ce
n'est peut-être pas si grave, et qu'on pourrait accepter que
dans ce cas, il faut que l'utilisateur réconfigure. Si c'est une
transfert bancaire qui se perd, c'est moins acceptable, et que
si nous disons au client que sa commande a été prise en compte,
et qu'elle se perd, ça pourrait nous coûter dans les millions
d'Euros.

Dans un CGI ou script PHP sur un serveur web, la durée
d'exécution tourne typiquement autour de quelques dizaines de
millisecondes. Si on veut simuler une persistence (je dis bien
"simuler", car de toutes façons, ça passera par des requêtes
HTTP séparées), il faut trouver un moyen très rapide
d'enregistrer les données.


(Il n'y a pas de quoi dans la bibliothèque standard
de C++ d'assurer une persistence fiable non plus.



D'une manière générale, il n'y a pas grand-chose dans la
bibliothèque standard.


:-).

Dans ce cas-ci, ce qui manque, c'est très précis : il n'y a pas
d'écriture synchronisée.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34


Avatar
Sylvain
James Kanze wrote on 09/07/2006 23:28:
Sylvain wrote:
James Kanze wrote on 09/07/2006 18:51:

beaucoup d'applications Web utilise une base de données non
parce qu'elles ont besoin d'une base de données, mais parce que
le PHP sur leur site fournisseur n'offre pas d'autre solution de
persistence. (Il n'y a pas de quoi dans la bibliothèque standard
de C++ d'assurer une persistence fiable non plus.


"persistence" de session ? ou illimitée ?


Persistente, ça veut dire que les données ne sont pas perdues,
quoique qui arrive.


merci je connais la définition, ce n'est pas ce que je t'ai demandé.

il n'y a que 3 points ci-dessus, faut-il les reprendre ?

- tu nous indiques que "bcp d'applications web" utilise une base comme
choix par défaut

a) on parle de la home page de Mme Michou ou de eBay et Amazone ?? parce
que le premier cas on s'en fout surement, les autres utlisent des bases.

b) PHP sait lire et écrire des fichiers, il est donc déjà suffisant pour
permettre la persistence de données,

c) mais sauf pour Mme Michou s'il fait cela pour des volumes importants
de données, il bouffera toutes les ressources du serveur pour un mauvais
résultat.

donc la question n'est pas que signifie persistence, mais à quelle
donnée persistante pensais-tu, la réponse menera sans peine à une
distinction entre variables de session (ou même ping-pong dans les
headers http) ou vers une base, enfin sauf pour Mme Michou ...

Sylvain.



Avatar
Sylvain
James Kanze wrote on 09/07/2006 23:36:

Il y a aussi la structure naturelle des données : une liste
"plate" (liste des clients d'une entreprise, par exemple) est
bien adaptée aux BdD ; une structure d'arbre (surtout de
profondeur non fixée) s'y prêtera vraisemblablement moins.



pourquoi "surtout [si la] profondeur [est] non fixée" ??

tu n'as pas l'air de savoir ce que signifie clé secondaire, ni jointure
externe.

Ça dépend, mais c'est vrai qu'on pourrait lui préférer une base
hièrarchique à une base relationnelle. Disons LDAP.


tu as déjà serieusement travaillé sur des annuaires LDAP ?? je préfère
encore passer par AD que par cette "hiérarchisation" là.

Dans ce cas-ci, ce qui manque, c'est très précis : il n'y a pas
d'écriture synchronisée.


qui existe dans une base transactionnée, pas exactement l'"écriture
synchronisée" -- à quoi d'ailleurs ? la pensée de l'utilisateur qui
voudrait peut être commander sa pizza ? si tu peux détailler -- mais les
mécanismes permettant la prise de décision et/ou le rapport
d'information pertinente; "relativement facile [à coder] en C++" ???

Sylvain.


Avatar
Fabien LE LEZ
On Sun, 09 Jul 2006 23:36:26 +0200, James Kanze :

Et qu'est-ce qui se passe si le système crashe entre la
modification des données et leur écriture sur disque ?


Comme l'OP parle de "question de débutant", j'imagine qu'on ne va pas
lui confier l'écriture de logiciels "sensibles" avant un petit bout de
temps.

1 2 3 4 5