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

renvoi de plusieurs paramètres sans pointeurs

20 réponses
Avatar
frandicz
Bonjour,

Ayant beaucoup programmé en C/C++, je suis en train de me mettre au
java. Etant donné qu'il n'existe pas de pointeurs, je me demande comment
on fait pour résoudre certains problèmes.

Comment fait une fonction pour renvoyer plusieurs paramètres ? En C++,
on passait un pointeurs vers des variables que la fonction devait
modifier. Par ex:

// fonction qui "renvoie" trois entiers
void ma_fonction(int *p1, int *p2, int *p3)
{
*p1 = 4;
*p2 = 5;
*p3 = 10;
}

Evidemment, on pourrait mettre des variables à retourner en global, ou
renvoyer une référence vers un objet qui contient les données, mais
c'est vraiment compliqué !

C'est le principal problème auquel j'ai pensé. Y-en a-t-il d'autres
importants, et quelles sont les remèdes ?

Merci.

10 réponses

1 2
Avatar
Cédric Chabanois
euler wrote:
Bruno Jouhier wrote:


Une des solutions classique consiste à passer un tableau à un seul
élément:

int [] p1 = new int[1];
int [] p2 = new int[1];
int [] p3 = new int[1];

ma_fonction(p1, p2, p3);




euh, quitte à bricoler, pourquoi ne pas passer directement des Integer ? en
plus avec java 5 y'a même l'autoboxing pour donner un coup de main !



Integer est immutable ....
On ne peut pas modifier la valeur d'un Integer (même chose pour un
String d'ailleurs).


Cédric


Avatar
Bruno Jouhier
"Marc Petit-Huguenin" a écrit dans le message de
news: t%cxd.783470$
Bruno Jouhier wrote:
[1] Programmer objet, pas programmer oriente objet comme en C++. La
programmation orientee objet est a la programmation objet ce que le steak
de soja est a la cote de boeuf.



Smalltalk, Eiffel, c'est du steak de soja?


Non, smalltalk et eiffel, c'est de la programmation objet. Je parlais de
C++.


Dans le livre d'Adele Goldberg (Smalltalk 80), il s'agit d' "object
oriented" programming, pas d' "object programming". Et le livre référence de
B Meyer, c'est "Object Oriented Software Construction", pas "Object Software
Construction". Donc Smalltalk et Eiffel, c'est bien de la programmation
"orientée objet", si on s'en tient aux sources. C'est pour ça que je te
demande tes références sur la différence entre "orienté objet" et "objet
tout court". Ca me parait plutôt fumeux (ou personnel).

Bruno.



Vous avez un papier qui explique un peu la différence, ou c'est juste du
troll sans intérêt?


Si tu pense que c'est un troll, alors pourquoi repondre?


Bruno.





Avatar
Bruno Jouhier
"euler" a écrit dans le message de news:

Bruno Jouhier wrote:

Une des solutions classique consiste à passer un tableau à un seul
élément:

int [] p1 = new int[1];
int [] p2 = new int[1];
int [] p3 = new int[1];

ma_fonction(p1, p2, p3);



euh, quitte à bricoler, pourquoi ne pas passer directement des Integer ?
en
plus avec java 5 y'a même l'autoboxing pour donner un coup de main !


Non, ça ne marche pas. Integer est immutable! Quant à l'autoboxing, ça ne
résout pas non plus le pb posé.

J'ai mentionné cette méthode car elle est parfois utilisée pour interfacer
Java avec des APIs écrite en C ou C++. En Java, je préfère la solution plus
orientée objet ci-dessous.



ou alors, tu peux introduire une classe ayant p1, p2, p3 pour membres et
passer une instance de cette classe, ou bien coder ta méthode pour
qu'elle
alloue une instance de cette classe pour retourner les 3 infos d'un coup.

Ce qui est pratique en Java, c'est que tu n'as pas à te préoccuper de la
libération de ces objets intermédiaires.

Si ça te pose vraiment problème, tu peux regarder le langage C#.


restons polis s.v.p :-D


Soyons curieux, plutôt!



[...]



Avatar
Marc Petit-Huguenin
Bruno Jouhier wrote:
"Marc Petit-Huguenin" a écrit dans le message de
news: t%cxd.783470$

Bruno Jouhier wrote:

[1] Programmer objet, pas programmer oriente objet comme en C++. La
programmation orientee objet est a la programmation objet ce que le steak
de soja est a la cote de boeuf.



Smalltalk, Eiffel, c'est du steak de soja?


Non, smalltalk et eiffel, c'est de la programmation objet. Je parlais de
C++.



Dans le livre d'Adele Goldberg (Smalltalk 80), il s'agit d' "object
oriented" programming, pas d' "object programming". Et le livre référence de
B Meyer, c'est "Object Oriented Software Construction", pas "Object Software
Construction". Donc Smalltalk et Eiffel, c'est bien de la programmation
"orientée objet", si on s'en tient aux sources. C'est pour ça que je te
demande tes références sur la différence entre "orienté objet" et "objet
tout court". Ca me parait plutôt fumeux (ou personnel).


Ok, a chaque fois que je dis "Programmation Objet", tu remplace par "Java,
Effeil ou Smalltalk", et a chaque fois que je dis "Programmation Orientee
Objet", tu remplace par "C++".

Il est content comme ca, le quadricapillotectomiste?


Bruno.


Vous avez un papier qui explique un peu la différence, ou c'est juste du
troll sans intérêt?


Si tu pense que c'est un troll, alors pourquoi repondre?


Bruno.










Avatar
Bruno Jouhier
"Marc Petit-Huguenin" a écrit dans le message de
news: jlfxd.596521$D%
Bruno Jouhier wrote:
"Marc Petit-Huguenin" a écrit dans le message
de news: t%cxd.783470$

Bruno Jouhier wrote:

[1] Programmer objet, pas programmer oriente objet comme en C++. La
programmation orientee objet est a la programmation objet ce que le
steak
de soja est a la cote de boeuf.



Smalltalk, Eiffel, c'est du steak de soja?


Non, smalltalk et eiffel, c'est de la programmation objet. Je parlais de
C++.



Dans le livre d'Adele Goldberg (Smalltalk 80), il s'agit d' "object
oriented" programming, pas d' "object programming". Et le livre référence
de B Meyer, c'est "Object Oriented Software Construction", pas "Object
Software Construction". Donc Smalltalk et Eiffel, c'est bien de la
programmation "orientée objet", si on s'en tient aux sources. C'est pour
ça que je te demande tes références sur la différence entre "orienté
objet" et "objet tout court". Ca me parait plutôt fumeux (ou personnel).


Ok, a chaque fois que je dis "Programmation Objet", tu remplace par "Java,
Effeil ou Smalltalk", et a chaque fois que je dis "Programmation Orientee
Objet", tu remplace par "C++".



On s'en fout de ce que tu dis. Ce qui compte c'est la terminologie
qu'utilisent les vrais experts.

Il est content comme ca, le quadricapillotectomiste?


Ce n'est pas moi qui coupe les cheveux en 4, c'est toi qui introduit des
distinctions sans fondement et confusionnantes. Pourquoi qqun qui a appris
la programmation "orientée" objet avec Smalltalk et Eiffel devrait-il du
jour au lendemain changer de vocabulaire. Si c'est juste pour te faire
plaisir, c'est un peu faible.

Bruno.





Bruno.


Vous avez un papier qui explique un peu la différence, ou c'est juste du
troll sans intérêt?


Si tu pense que c'est un troll, alors pourquoi repondre?


Bruno.











Avatar
Bruno Jouhier
"Marc Petit-Huguenin" a écrit dans le message de
news: jlfxd.596521$D%
Bruno Jouhier wrote:
"Marc Petit-Huguenin" a écrit dans le message
de news: t%cxd.783470$

Bruno Jouhier wrote:

[1] Programmer objet, pas programmer oriente objet comme en C++. La
programmation orientee objet est a la programmation objet ce que le
steak
de soja est a la cote de boeuf.



Smalltalk, Eiffel, c'est du steak de soja?


Non, smalltalk et eiffel, c'est de la programmation objet. Je parlais de
C++.




J'ai l'impression que tu te plantes totalement sur le sens du mot "orienté"
dans orienté objet.

"Orienté objet", ça veut dire que la programmation est centrée autour des
objets (des noms) au lieu d'être centrée autour des traitements (des
verbes). Ca a donc un sens technique précise, et il suffit de relire les
bons auteurs (Adele Goldberg par ex) pour s'en convaincre.

Ca ne veut pas du tout dire que le langage n'est qu'à moitié objet (qu'il ne
serait qu'orienté, par rapport à des langages qui seraient "totalement"
objet). Si c'est comme ça que tu le comprends, c'est un contresens.

Bruno.



Dans le livre d'Adele Goldberg (Smalltalk 80), il s'agit d' "object
oriented" programming, pas d' "object programming". Et le livre référence
de B Meyer, c'est "Object Oriented Software Construction", pas "Object
Software Construction". Donc Smalltalk et Eiffel, c'est bien de la
programmation "orientée objet", si on s'en tient aux sources. C'est pour
ça que je te demande tes références sur la différence entre "orienté
objet" et "objet tout court". Ca me parait plutôt fumeux (ou personnel).


Ok, a chaque fois que je dis "Programmation Objet", tu remplace par "Java,
Effeil ou Smalltalk", et a chaque fois que je dis "Programmation Orientee
Objet", tu remplace par "C++".

Il est content comme ca, le quadricapillotectomiste?


Bruno.


Vous avez un papier qui explique un peu la différence, ou c'est juste du
troll sans intérêt?


Si tu pense que c'est un troll, alors pourquoi repondre?


Bruno.











Avatar
Boogabi
Comment fait une fonction pour renvoyer plusieurs paramètres ? En C++,
on passait un pointeurs vers des variables que la fonction devait
modifier. Par ex:

// fonction qui "renvoie" trois entiers
void ma_fonction(int *p1, int *p2, int *p3)
{
*p1 = 4;
*p2 = 5;
*p3 = 10;
}


Non, on ne fait surtout pas ça en C++, mais en C. En C++, on a le
passage par référence, et on l'utilise.

void ma_fonction(int &p1, int &p2, int &p3) {
p1 = 4;
p2 = 5;
p3 = 10;
}

Passer des pointeurs dans ce cas est "sale" et peu pratique à l'usage.

En Java, on renvoit effectivement un objet ou un tableau (remarque qu'en
C++ aussi).

Avatar
Marc Petit-Huguenin
Bruno Jouhier wrote:
"Marc Petit-Huguenin" a écrit dans le message de
news: jlfxd.596521$D%

Bruno Jouhier wrote:

"Marc Petit-Huguenin" a écrit dans le message
de news: t%cxd.783470$


Bruno Jouhier wrote:


[1] Programmer objet, pas programmer oriente objet comme en C++. La
programmation orientee objet est a la programmation objet ce que le
steak
de soja est a la cote de boeuf.



Smalltalk, Eiffel, c'est du steak de soja?


Non, smalltalk et eiffel, c'est de la programmation objet. Je parlais de
C++.





J'ai l'impression que tu te plantes totalement sur le sens du mot "orienté"
dans orienté objet.

"Orienté objet", ça veut dire que la programmation est centrée autour des
objets (des noms) au lieu d'être centrée autour des traitements (des
verbes). Ca a donc un sens technique précise, et il suffit de relire les
bons auteurs (Adele Goldberg par ex) pour s'en convaincre.

Ca ne veut pas du tout dire que le langage n'est qu'à moitié objet (qu'il ne
serait qu'orienté, par rapport à des langages qui seraient "totalement"
objet). Si c'est comme ça que tu le comprends, c'est un contresens.

Bruno.




Petit complexe de superiorite, hein? Ca passera.

Puisse que tu insiste lourdement, oui, tu as totalement raison,
j'utilisais le terme a tord. Je voulais dire que C++ n'etait pas un
langage purement objet.

Et sur ces bonnes paroles, ce thread est termine et les messages suivant
seront >/dev/null.

--
Marc Petit-Huguenin
Home:
Work:






Avatar
Bruno Jouhier
"Marc Petit-Huguenin" a écrit dans le message de
news: W0wxd.530179$
Bruno Jouhier wrote:
"Marc Petit-Huguenin" a écrit dans le message
de news: jlfxd.596521$D%

Bruno Jouhier wrote:

"Marc Petit-Huguenin" a écrit dans le message
de news: t%cxd.783470$


Bruno Jouhier wrote:


[1] Programmer objet, pas programmer oriente objet comme en C++. La
programmation orientee objet est a la programmation objet ce que le
steak
de soja est a la cote de boeuf.



Smalltalk, Eiffel, c'est du steak de soja?


Non, smalltalk et eiffel, c'est de la programmation objet. Je parlais
de C++.





J'ai l'impression que tu te plantes totalement sur le sens du mot
"orienté" dans orienté objet.

"Orienté objet", ça veut dire que la programmation est centrée autour des
objets (des noms) au lieu d'être centrée autour des traitements (des
verbes). Ca a donc un sens technique précise, et il suffit de relire les
bons auteurs (Adele Goldberg par ex) pour s'en convaincre.

Ca ne veut pas du tout dire que le langage n'est qu'à moitié objet (qu'il
ne serait qu'orienté, par rapport à des langages qui seraient
"totalement" objet). Si c'est comme ça que tu le comprends, c'est un
contresens.

Bruno.




Petit complexe de superiorite, hein? Ca passera.


C'est passé. Depuis longtemps...


Puisse que tu insiste lourdement, oui, tu as totalement raison,
j'utilisais le terme a tord. Je voulais dire que C++ n'etait pas un
langage purement objet.


L'erreur est humaine. Si j'ai lourdement insisté, c'est parce que je pensais
qu'il y avait un contresens. Ca m'arrive aussi (de me faire reprendre sur un
forum parce que je raconte des conneries).

Bruno.


Et sur ces bonnes paroles, ce thread est termine et les messages suivant
seront >/dev/null.

--
Marc Petit-Huguenin
Home:
Work:








Avatar
Sébastien

En Java, on renvoit effectivement un objet ou un tableau (remarque qu'en
C++ aussi).


je dirais plutôt qu'en Java (et en C++) on renvoit un objet et PAS un tableau dans ce cas.
Car, visiblement, les entiers ont des sens différents. Et il n'y a rien de plus inutilisable que
d'avoir une fonction qui retourne un tableau dans lequel se trouve l'âge du capitaine à l'indice 0,
le nombre de matelots à l'indice 1 et la taille du bateau à l'indice 2.
Une collection ou un tableau ne doit pas être utilisée pour simuler une pseudo structure en
contenant des éléments conceptuellement différents les uns des autres.

Sébastien

1 2