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

[HS] Vocabulaire

27 réponses
Avatar
Ph. Ivaldi
Bonjour,

Ma question est totalement hors sujet mais je sais qu'il y a ici des
personnes compétentes pour y répondre; me rediriger le cas échéant.

Dans un langage du type C++, quelles sont les différences (s'il y en a)
entre
1.
* une fonction
* une routine (le mon anglais a-t-il le même sens en français ?)
* une procédure
* une commande

2.
* un paramètre
* un argument

3.
* une classe
* une structure

Merci et bonne année.
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/

10 réponses

1 2 3
Avatar
Jean-Marc Bourguet
Copie sur fr.comp.lang.general, je n'y mets pas le suivi mais ce serait
peut-etre une bonne idee.

Remarque generale, chaque langage a tendance a definir sa nomenclature qui
differe sur des points de details plus ou moins importants de celle des
autres. Meme dans une meme famille de langages.

Ph. Ivaldi writes:

Ma question est totalement hors sujet mais je sais qu'il y a ici des
personnes compétentes pour y répondre; me rediriger le cas échéant.

Dans un langage du type C++, quelles sont les différences (s'il y en a)
entre
1.
* une routine


C'est le terme le plus generique, avec sous-routine.

(le mon anglais a-t-il le même sens en français ?)


Il y a plus d'un sens en francais.

* une fonction


Souvent une routine qui renvoie une valeur, mais certains langages dont C
et C++ emploient le terme pour toutes les routines.

* une procédure


Souvent une routine qui ne renvoie pas de valeur, mais certains langages
(Algol68 par exemple) emploie le terme pour toutes les routines. C et C++
n'utilisent pas le mot.

* une commande


Soit une routine definie par le langage, eventuellement ayant des
caracteristiques non permisent par les routines definies par l'utilisateur
et donc potentiellement pour ce qui permet la structuration du code.

Soit un programme externe.

Soit pour tout ce qui est executable (proche d'instructions).

Pas utilise en C et en C++.

2.
* un paramètre
* un argument



Souvent utilise indifferemment. Qualifie de formel/actuel pour designer le
symbole dans la definition ou ce qui est reellement passe.

En C et C++, parametre est utilise pour argument formel (le symbole utilise
dans la definition) et argument pour la valeur passee.

3.
* une classe
* une structure


Entrer en detail dans les differences d'usage serait long. Tres
rapidement, on a tendance a reserver le premier terme pour ce qui entre
dans le cadre d'une conception "orientee objet" et le second pour un simple
regroupement de valeurs...

C n'a pas de classe.

Les classes et les structures du C++ n'ont pas de differences fondamentales
(seuls des comportements par defaut changent).

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Nicolas George
Jean-Marc Bourguet wrote in message
:
Qualifie de formel/actuel


Effectif serait une meilleure traduction de « actual ».

Avatar
Jean-Marc Bourguet
Nicolas George <nicolas$ writes:

Jean-Marc Bourguet wrote in message
:
Qualifie de formel/actuel


Effectif serait une meilleure traduction de « actual ».


Exact. Je travaille trop en anglais.

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
James Kanze
On Jan 1, 10:57 pm, Olivier Miakinen <om+ wrote:
ATTENTION : Je suis loin d'être un expert en la matière, alors mes
réponses sont probablement sujettes à corrections ou amendements.

Ma question est totalement hors sujet mais je sais qu'il y a ici des
personnes compétentes pour y répondre; me rediriger le cas échéa nt.


Je propose un suivi vers fr.comp.lang.c++ qui me semble assez adapté,
du moins si ta question concerne vraiment le C++ et pas l'ensemble des
langages « qui auraient des ressemblances (lesquelles ?) avec C++ ».


Effectivement, on en a discuté de temps à l'autre. Et je ne
crois pas qu'on puisse parler à ce propos des
« spécialistes » ; les membres de l'Académie française ne
connaissent pas l'informatique, et la plupart des informaticiens
n'ont pas fait des recherches philologiques. L'importance, c'est
qu'on s'entend.

Dans un langage du type C++, quelles sont les différences (s'il y en a )
entre
1.
* une fonction
* une routine (le mon anglais a-t-il le même sens en français ?)
* une procédure
* une commande


Je ne pense pas qu'il y ait tant de types différents d'appels
à du code. Pour moi il n'y a que des fonctions. Il me semble
me souvenir que l'on parlait de procédures en BASIC. Une
commande est pour moi plutôt un exécutable (donc un programme
complet) qu'une fonction d'un langage donné. Quant à une «
routine » je n'ai pas l'impression que cela ait un sens
spécifique en informatique francophone. Pour un informaticien
comme pour n'importe qui d'autre, la routine, c'est un truc
habituel, voire répétitif.


Dans le vocabulaire du C++, il n'y a pas de « routines » (que
j'entends ici pour la première fois en français -- en anglais,
on parlait en général des « subroutines » en assembleur) ni de
« procédures ». Ni des méthodes. D'autres langages ont
d'autres conventions : les langages de la famille Pascal
distinguent formellement entre les fonctions (qui renvoient une
valeur, et qui peuvent apparaître dans une expression) et les
procédures (qui ne renvoient rien, et qui sont appelées au moyen
d'un type d'instruction différente : Pascal a deux types
d'instruction, un appel d'une procédure et une affectation, ou
le C++ n'en a qu'un : une instruction d'expression (ou
l'affectation est un opérateur avec un effet de bord). En Java,
on n'a pas de fonctions, mais des méthodes ; certains utilisent
ce mot aussi en C++, avec des acceptations variables (fonction
membre, fonction membre non-statique, fonction virtuelle), mais
à mon avis, il ne fait pas partie du vocabulaire standard du
C++.

À mon avis, une commande, c'est encore autre chose ; dans la
contexte du C++, à peu près la seule utilisation que j'en fais,
c'est quand je parle de la commande de l'invocation du
compilateur.

Aussi, j'utilise le mot « instruction » pour traduire le mot
« statement ». Il ne m'emballe pas, mais je n'ai pas de
meilleur alternatif à proposer, et cette utilisation me semble
assez consacrée et répandue.

Ah si, en C++ on peut appeler « méthodes » les fonctions
attachées à une classe.


Certains le font, mais à mon avis, ce ne fait pas partie du
vocabulaire du C++, et comme j'ai dit ci-dessus, la
signification semble varier beaucoup selon l'utilisateur.

2.
* un paramètre
* un argument


Personnellement je parle d'un paramètre pour une fonction, et
d'un argument pour une commande. Ainsi, les arguments d'une
commande Unix écrite en C ou en C++ peuvent être lus dans les
paramètres (souvent appelés argc et argv) de la fonction
main().


Dans la contexte C++, je ne me sers que de paramètre : formel
ou réel. En français ; en anglais, c'est parameter et argument.

3.
* une classe
* une structure


En C, il n'y a que des structures, ne contenant que des
données, toutes d'accès public. En C++, je crois que
techniquement une classe est la même chose qu'une structure,
si ce n'est que l'accès par défaut est privé pour une classe
et public pour une structure. Mais habituellement on n'utilise
pas une structure pour ce qu'on fait avec des classes, à
savoir rassembler aussi des méthodes en plus des données.


Dans la norme 1998, « A structure is a class defined with the
class-key struct ». Cette phrase a disparu de la dernière
version de travail, et le mot « structure » n'apparaît pas du
tout dans les quinze premières sections de la norme (celles qui
définissent le langage proprement dit). On a, en revanche, des
« standard-layout struct » et des « POD struct » ; dans les
deux cas, on pourrait dire qu'une « struct » est une classe
qui n'est pas une union. Cette utilisation ne s'applique qu'à
ces cas bien précis, en revanche.

Note bien aussi qu'en C++, techniquement, une union est aussi
une classe. Dans l'utilisation de tous les jours (en dehors de
la norme, donc), je crois que la plupart des gens ne comprenent
pas des unions quand on parle des classes. Aussi, comme on
utilise « méthode » avec plusieurs acceptations différentes,
je crois qu'on utilise « structure » avec plusieurs
acceptations différentes : une classe définie avec le mot clé
struct, une classe dont toutes les données sont publiques, une
classe dont tout est public, etc.

--
James Kanze (GABI Software) email:
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
On Jan 2, 6:12 am, Fabien LE LEZ wrote:
On Wed, 02 Jan 2008 02:22:53 +0100, Mickaël Wolff
:

On peut considérer qu'un constructeur, un destructeur et une
fonction
void toto(...) sont des procédures :)


À la rigueur, l'implémentation en C++ du concept théorique de
"procédure".

Mais toto() est une fonction comme une autre, qui peut
parfaitement renvoyer une "valeur", de type "void".


Il ne peut pas y avoir de valeur de type void. En C++, void est
un type incomplet, et pour en avoir une valeur (rvalue, dans le
langage de la norme), il faut que le type soit complet.

L'utilisation de void comme « type » de retour d'une fonction
est un peu spéciale. Tu peux bien déclarer une fonction avec un
type de rétour incomplet :
class Toto ;
extern Toto titi() ;
Mais il faut que le type soit complet lors de la définition de
la fonction, et aussi à chaque endroit où tu appelle la
fonction. Par définition, void est un type incomplet qui ne
pourrait jamais être complété. Donc, tu peux déclarer des
fonctions qui renvoient void, mais tu ne peux pas les définir,
ni les appelées:-). Sérieusement : void, en tant que type de
rétour, est un peu spécial (mais mois que quand il apparaît
comme unique paramètre, quand même).

Dans le langage de la norme, il n'y a que des fonctions, et void
est un type quand il apparaît à la place du type de rétour --
ensuite, il y a des règles spéciales en ce qui le concerne. On
aurait aussi bien pu dire qu'il n'y a pas de fonctions qui
renvoient void, et que quand le mot clé apparaît dans cette
contexte, il signifie qu'on déclare ou qu'on définit une
procédure, et non une fonction. En fin de compte, on arrivera au
même endroit : c'est bonnet blanc et blanc bonnet.

Dans le code suivant, f<int> est bien une fonction ; pourquoi
faudrait-il donner un nom différent ("procédure") à f<void> ?

template <class T> T g() {}
template<> int g<int>() { return 0; }

template <class T> T f() { return g<T>(); }
void h() { return g<void>(); }

int main()
{
f<void>();
f<int>();
}


C'est encore une règle spéciale. Introduite exprès pour les
besoin des templates ; un return avec une expression, dans une
fonction renvoyant void, était illégal avant, et c'est encore
illégal en C.

Pour le constructeur, j'ai un doute : Comeau et Borland C++
5.5 acceptent le code ci-dessus, mais g++ 4.1.2 le refuse.

struct C
{
C() { return h(); }
};


§6.3.3/2 : « A return statement with an expression of type "cv
void" can be used only in functions with a return type of cv
void ». Un constructeur est une fonction. Donc, c'est légal
(mais pas forcément utile, ou à faire).

--
James Kanze (GABI Software) email:
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
On Jan 2, 8:44 am, Fabien LE LEZ wrote:
On Wed, 02 Jan 2008 08:17:44 +0100, Mickaël Wolff
:

Mais toto() est une fonction comme une autre, qui peut
parfaitement renvoyer une "valeur", de type "void".


Ça n'a aucun sens


Une fonction qui retourne un int, renvoie un "objet" qui contient
(typiquement) 32 bits d'information.

Une fonction qui retourne void, renvoie un "objet" qui
contient 0 bit d'information.


Il ne peut pas y avoir d'objet de type « void », parce que le
type est incomplet.

C'est assez proche de la fonction ci-dessous :

class C {};
C f();


Sauf qu'ici, tu peux bien écrire ensuite :
C c = f() ;
tandis que :
void c = g() ;
ne va pas du tout.

Une fonction qui renvoie void est un peu différente d'une
fonction qui renvoie autre chose. La norme (et Stroustrup, avant
elle) a bien choisi de considérer les deux des fonctions, et
puis décrire les différences -- ils auraient aussi bien pû
considérer l'un une procédure, et les autres des fonctions, et
puis décrire ce que les fonctions et les procédures ont en
commun.

Je suis d'ailleurs étonné que le compilateur accepte une telle écri ture.


Il me semble que c'est récent.


Pour une certaine définition de récent. Il n'était pas dans
l'ARM, et il a été ajouté pour mieux supporter les templates.

Et j'en ai indiqué la raison dans mon code : c'est pour éviter
d'avoir à gérer les cas particuliers dans l'utilisation de
templates.

template <class T> class C
{
public:
bool OK() const;
T f() { assert (OK()); return g(); }
private:
T g();
};
struct C
{
C() { return h(); }
};


Je ne sais pas ce que la norme dit à ce propos. Mais ça me
parait spécieux qu'un compilateur puisse accepter cette
écriture, du moins en C++.


J'avoue avoir été étonné que Comeau l'accepte. Dans le cas des
constructeurs et destructeurs, il est vrai que cette écriture
n'a guère de légitimité.


De même que pour les non-templates. En revanche, plutôt que de
faire un cas de règles spéciales, la norme a choisi une
expression très générique. Et malheureusement un peu ambigu :
est-ce que un constructeur est « une fonction avec un type de
retour void » ? (Dans la mesure où c'est une fonction, et que
toute fonction a un type de retour, je ne vois pas ce qu'il
pourrait être d'autre.)

--
James Kanze (GABI Software) email:
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
On Jan 2, 2:32 am, Fabien LE LEZ wrote:

[...]
En C++, je crois que techniquement une classe est la
même chose qu'une structure, si ce n'est que l'accès par défaut est
privé pour une classe et public pour une structure.


C'est plus flou que ça. Le terme "classe" désigne tout ce qui
est introduit par "struct" et "class".


Ou union ! Après :

union Toto { int i ; double d ; } ;

Toto est une classe.

[...]
Le mot "structure" étant hérité du C, il n'a pas de sens
vraiment précis en C++.


La norme 1998 utilisait le mot exactement une fois. Pour la
définir. Cette définition a disparu de la version de travail la
plus récente.

--
James Kanze (GABI Software) email:
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
Fabien LE LEZ
On Wed, 2 Jan 2008 03:17:37 -0800 (PST), James Kanze
:

Sérieusement : void, en tant que type de
rétour, est un peu spécial


Un peu spécial, certes.

Du coup, je suis en train de me demander s'il serait possible de
définir une classe C ainsi :

C g(); // légal
C f() { return g(); } // légal

int main()
{
f(); // légal
C c= f(); // illégal
}

En "trichant", i.e. en déclarant f et g membres de C, c'est peut-être
possible.

Avatar
Fabien LE LEZ
On Wed, 2 Jan 2008 02:46:44 -0800 (PST), James Kanze
:

Dans l'utilisation de tous les jours (en dehors de
la norme, donc), je crois que la plupart des gens ne comprenent
pas des unions quand on parle des classes.


Faut dire aussi que dans l'utilisation de tous les jours, on ne
rencontre pas très souvent "union".

Avatar
Olivier Miakinen

Dans l'utilisation de tous les jours (en dehors de
la norme, donc), je crois que la plupart des gens ne comprenent
pas des unions quand on parle des classes.


Faut dire aussi que dans l'utilisation de tous les jours, on ne
rencontre pas très souvent "union".


Dans l'utilisation de tous les jours d'il y a vingt ou vingt-cinq ans,
quand la mémoire était comptée, c'était un peu plus fréquent. Mais on
parlait aussi un peu moins souvent de classes et de C++.


1 2 3