OVH Cloud OVH Cloud

[débutant]Quel langage choisir?

38 réponses
Avatar
Stéphane OUTHIER
Bonjour tous le monde,

J'aurai besoin des lumières des âmes charitables.
j'aimerais apprendre un langage de programmation, et en particulier le C++.
Mais je connais très peu de choses en programmation.
Ma question est la suivante:
-Peut on commencer directement par l'apprentissage du C++, ou dois-je passer
par un autre langage avant (tel que le C).
-Est il possible d'apprendre depuis des ouvrages traitant du sujet, de
manière autodidacte? Si oui Quel sont les ouvrages les plus pédagogiques ou
les plus adaptés pour un autodidacte?

Par avance, je vous remercie des vos réponse.

10 réponses

1 2 3 4
Avatar
kanze
"Alexandre" wrote in message
news:<3ffb0ff4$0$7160$...

[...]
Le langage C++ ne comporte pas d'API standard pour interface
graphique dans sa spécification et les API de collections comme la
STL sont souvent d'une lourdeur syntaxique...


surtout pour un débutant !!! Difficile d'expliquer à qqn que
std::vector<int> V(10);
est bcp mieux que
int V[10];


Pour un débutant, ils sont tous les deux nouveaux. Alors, si on ne lui
montre que le premier, il va probablement trouver que c'est verbose (ce
qui est vrai), mais pour la reste, je ne vois pas de problème.

alors que syntaxiquement c'est pas clair, qu'il faut déjà avoir
compris la notion d'espace de noms, de paramètre de type, de
constructeur...


Pourquoi, pourquoi et pourquoi. Le nom du type générique, c'est
std::vector. C'est vrai que les : ne sont pas permis dans les symboles
en général, mais std::vector n'est pas un symbole général. Quant aux
paramètres de types : c'est un type dérivé, de même que par exemple
int*@; c'est plutôt normal que le nom du type de base se retrouve dans
le type dérivé, il me semble. Et quant au constructeur : pourquoi est-ce
qu'il faut en parler tout de suite ?

--
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:

| Pourquoi, pourquoi et pourquoi. Le nom du type générique, c'est
| std::vector. C'est vrai que les : ne sont pas permis dans les symboles
| en général, mais std::vector n'est pas un symbole général. Quant aux
| paramètres de types : c'est un type dérivé, de même que par exemple

« type dérivé » n'est plus utilisé depuis je ne sais quand. Cela
prète à confusion avec « classe derivée. » Le terme correct est
« compound type » -- que je traduirais pas « type composite » (« type
composé » ?).

| int*@; c'est plutôt normal que le nom du type de base se retrouve dans
| le type dérivé, il me semble. Et quant au constructeur : pourquoi est-ce
| qu'il faut en parler tout de suite ?

Dans ce context il faut distinguer le nom d'un type fundamental
(identificateur) du type qu'il désigne ; autrement cela devient confus.

-- Gaby
Avatar
adebaene
"Alexandre" wrote in message news:<3ffb0ff4$0$7160$...
Les langages "agréables" pour débuter sont, par exemple, Python ou Java
(Je

mentionne Java par démagogie, parce que le langage est assez élégant, mais
je trouve l'API épouvantable).


Oui, et puis si on a du mal à comprendre la POO, c'est pas l'idéal, Java ;-)

(si quelqu'un pouvait m'expliquer la nécessité d'existence simultanée des
objets "valeurs", des références et des pointeurs sur objets plutôt que
seulement des références ?).


Objets valeurs : essentiels pour travailler "bas niveau".


Ca veut dire quoi "bas niveau" dans ce contexte?

Il me semble que tu oublies le plus important : les variables par
valeur permettent de contrôler la durée de vie de l'objet de manière
automatique, et ouvrent par ce biais la possibilité d'idiomes
extrêmement utiles comme RAII.


Et puis, passer un
bool par référence constante c'est plus lourd ;-)
Objets références : pratiques pour éviter de passer un pointeur sur un
paramètre out, pratique pour éviter des copies, etc...
Objets pointeurs : est-ce utile de préciser l'interet des pointeurs ?
Ben oui c'est utile, j'aimerais savoir à quoi tu penses exactement...


Arnaud
MVP - VC


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

| Pourquoi, pourquoi et pourquoi. Le nom du type générique, c'est
| std::vector. C'est vrai que les : ne sont pas permis dans les
| symboles en général, mais std::vector n'est pas un symbole général.
| Quant aux paramètres de types : c'est un type dérivé, de même que
| par exemple

« type dérivé » n'est plus utilisé depuis je ne sais quand.


2002, au moins:-). Mais je suppose que ton énoncé se limite au C++, où
ça pourrait prêter réelement à confusion. (La norme C parle toujours
des « derived types ».)

Cela prète à confusion avec « classe derivée. » Le terme correct est «
compound type » -- que je traduirais pas « type composite » (« type
composé » ?).


Je trouve que l'expression « composite » suggère un peu trop l'idée
qu'il y a plus d'un type plus primitif en jeu (mais la suggestion est
bien présente aussi dans « compound type », quoique moins forte). J'aime
bien « type composé ». Mais je laisserai la décision à des vrais
francophones.

| int* ; c'est plutôt normal que le nom du type de base se retrouve
| dans le type dérivé, il me semble. Et quant au constructeur :
| pourquoi est-ce qu'il faut en parler tout de suite ?

Dans ce context il faut distinguer le nom d'un type fundamental
(identificateur) du type qu'il désigne ; autrement cela devient
confus.


Un type composé est composé sur la base d'un ou de plusieurs types ; on
indique la composition au moyen de divers opérateurs et mots clés du
langage. Donc, à partir d'int, on peut faire des choses comme : int*,
int (*)(), etc. Où std::vector<int>, std::list<int>, etc. -- dans la
mesure que le langage offre plusieurs structures de composition, je ne
vois pas où il y a un problème d'utiliser des symbols (à la place des
opérateurs) pour les spécifier.

AMHA, c'est à mon avis une amélioration par rapport à C, et bien que
verbose, je préfère std::vector<int> a à int a[N] -- quelque chose comme
le int [N] a de Java serait à la rigueur acceptable s'il n'y avait pas
d'autre structures de collection. Mais dans l'ensemble, je préfère la
syntaxe des déclarations en Pascal : a: ARRAY [ IndexType ] OF INTEGER
(ou il faut que IndexType soit un type « subrange »).

--
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
Loïc Joly
wrote:
Je trouve que l'expression « composite » suggère un peu trop l'idée
qu'il y a plus d'un type plus primitif en jeu (mais la suggestion est
bien présente aussi dans « compound type », quoique moins forte).


Moi aussi.

J'aime
bien « type composé ». Mais je laisserai la décision à des vrais
francophones.


"Type composé" a l'avantage de faire un parallèle avec l'expression mot
composé, et un int * s'écrit bien de façon semblable à un
"haut-parleur", et pourtant dans les deux cas, l'objet référé n'est pas
l'association des différents éléments en jeu, mais une autre notion.

Ce n'est pas évident de traduire ce genre de terme. Une autre
possibilité serait de s'éloigner un peu de l'anglais pour une expression
comme "type construit".

--
Loïc

Avatar
Gabriel Dos Reis
Loïc Joly writes:

| > J'aime
| > bien « type composé ». Mais je laisserai la décision à des vrais
| > francophones.
|
| "Type composé" a l'avantage de faire un parallèle avec l'expression
| mot composé, et un int * s'écrit bien de façon semblable à un
| "haut-parleur", et pourtant dans les deux cas, l'objet référé n'est
| pas l'association des différents éléments en jeu, mais une autre
| notion.

Tiens. Tu maintiens la même chose pour "X", où

struct X { };

ou

typedef int* X;

?

| Ce n'est pas évident de traduire ce genre de terme. Une autre
| possibilité serait de s'éloigner un peu de l'anglais pour une
| expression comme "type construit".

-- Gaby
Avatar
Gabriel Dos Reis
writes:

| Gabriel Dos Reis wrote in message
| news:...
| > writes:
|
| > | Pourquoi, pourquoi et pourquoi. Le nom du type générique, c'est
| > | std::vector. C'est vrai que les : ne sont pas permis dans les
| > | symboles en général, mais std::vector n'est pas un symbole général.
| > | Quant aux paramètres de types : c'est un type dérivé, de même que
| > | par exemple
|
| > « type dérivé » n'est plus utilisé depuis je ne sais quand.
|
| 2002, au moins:-).

1997 au moins.

| Mais je suppose que ton énoncé se limite au C++, où
| ça pourrait prêter réelement à confusion.

étant donné qu'on est sur fr.comp.lang.C++ et qu'il est fait mention
de classe dérivée, je ne sais pas ce que tu veux imaginer d'autres.

| (La norme C parle toujours des « derived types ».)

Mais la norme C ne parle pas de classe dérivée, n'est-il pas ?

| Je trouve que l'expression « composite » suggère un peu trop l'idée
| qu'il y a plus d'un type plus primitif en jeu (mais la suggestion est
| bien présente aussi dans « compound type », quoique moins forte). J'aime
| bien « type composé ». Mais je laisserai la décision à des vrais
| francophones.
|
| > | int* ; c'est plutôt normal que le nom du type de base se retrouve
| > | dans le type dérivé, il me semble. Et quant au constructeur :
| > | pourquoi est-ce qu'il faut en parler tout de suite ?
|
| > Dans ce context il faut distinguer le nom d'un type fundamental
| > (identificateur) du type qu'il désigne ; autrement cela devient
| > confus.
|
| Un type composé est composé sur la base d'un ou de plusieurs types ; on

M. de Lapalisse ne dit pas le contraire. Mais cela passe, je crois, à
côté de ce que je disais.

| indique la composition au moyen de divers opérateurs et mots clés du
| langage. Donc, à partir d'int, on peut faire des choses comme : int*,
| int (*)(), etc. Où std::vector<int>, std::list<int>, etc. -- dans la
| mesure que le langage offre plusieurs structures de composition, je ne
| vois pas où il y a un problème d'utiliser des symbols (à la place des
| opérateurs) pour les spécifier.

???

-- Gaby
Avatar
Arnaud ARZUFFI
Loïc Joly wrote:

Pour moi, ces trois concepts répondent à des besoins différents. Peux-tu
développer en quoi tu les trouve redondants, afin que je puisse mieux
comprendre ton point de vue (et éventuellement sortir des
contre-arguments).



Justement, j'arrive pas vraiment à discerner (honte à moi !) : les
pointeurs, aucun problème : des objets alloués par new, qui ont une portée
plus grande que la méthode, et une durée de vie choisie par l'utilisateur ;
les objets "valeur" pour des objets temporaires, de durée de vie
fonction... par contre, les références, je les utilise seulement lorsqu'une
méthode dans une API me l'impose !


--
Arnaud ARZUFFI

Avatar
Arnaud ARZUFFI
Willy wrote:

Java (Je mentionne Java par démagogie, parce que le langage est assez
élégant, mais je trouve l'API épouvantable).


Pourquoi ?


Un extrême lourdeur pour effectuer des actions élémentaires : pour écrire
dans un fichier (c'est basique pourtant !), l'étudiant devra connaître les
exceptions, et manipuler toutes ces classes (BufferedWriter,
OutputStreamWriter et compagnie...) Effectivement, l'architecture est assez
élégante, mais je me rappelle que lorsque j'ai découvert Java, j'ai
souffert avec ces choses...


--
Arnaud ARZUFFI


Avatar
Michel Michaud
Dans news:btjl6q$kaa$, Arnaud
Justement, j'arrive pas vraiment à discerner (honte à moi !) : les
pointeurs, aucun problème : des objets alloués par new, qui ont une
portée plus grande que la méthode, et une durée de vie choisie par
l'utilisateur ; les objets "valeur" pour des objets temporaires, de
durée de vie fonction... par contre, les références, je les utilise
seulement lorsqu'une méthode dans une API me l'impose !


De D&E « References were introduced primarily to support operator
overloading. [...] notational convenience is essential because
users cannot be expected to insert address-of operators if the
objects are large. For example:

a = b - c;

is acceptable (that is, conventional) notation, but

a = &b - &c;

is not. »

Ceci dit, ce n'est pas la seule utilité : que ça paraisse bon ou
mauvais aux yeux de certains, le passage de paramètre de sortie
en C++ est typiquement fait par des références et il est normal
de renvoyer une référence à partir d'une fonction quand c'est
utile. Dans ces deux cas, des pointeurs pourraient être utilisés,
mais la syntaxe est alors moins naturelle... sauf pour ceux qui
viennent de C !


--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

1 2 3 4