Pour la petite histoire, j'ai posé la question le lendemain au prof, à qui j'ai dû expliquer RAII. Il m'a dit qu'il n'y avait pas moyen, mais que de toute façon, un truc tordu comme ça ne devait servir à rien.
Héhé... faut croire que la philosophie de programmation en Java (ou C#, qui a aussi un garbage collector je crois) est très différente de celle du C++. En fait Java est quelque part entre C et C++ : il y a la notion d'objet, mais pas la notion de durée de vie des objets. Et donc, je suppose, aucun équivalent possible à fstream (fichier à fermeture automatique).
J'ai oublié de préciser qu'il ne s'agissait pas d'un cours sur Java lui-même, mais d'un cours général sur la programmation orientée objet, dont le langage de support est Java !
Les autres étudiants avaient déjà fait du Java, mais pas moi, pour une histoire de passerelle depuis un autre établissement.
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
Fabien LE LEZ <gramster@gramster.com> writes:
On Sun, 01 Aug 2004 23:59:31 +0200, drkm <usenet.fclcxx@fgeorges.org>:
Pour la petite histoire, j'ai posé la question le lendemain au prof,
à qui j'ai dû expliquer RAII. Il m'a dit qu'il n'y avait pas moyen,
mais que de toute façon, un truc tordu comme ça ne devait servir à
rien.
Héhé... faut croire que la philosophie de programmation en Java (ou
C#, qui a aussi un garbage collector je crois) est très différente de
celle du C++.
En fait Java est quelque part entre C et C++ : il y a la notion
d'objet, mais pas la notion de durée de vie des objets. Et donc, je
suppose, aucun équivalent possible à fstream (fichier à fermeture
automatique).
J'ai oublié de préciser qu'il ne s'agissait pas d'un cours sur Java
lui-même, mais d'un cours général sur la programmation orientée objet,
dont le langage de support est Java !
Les autres étudiants avaient déjà fait du Java, mais pas moi, pour
une histoire de passerelle depuis un autre établissement.
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
Pour la petite histoire, j'ai posé la question le lendemain au prof, à qui j'ai dû expliquer RAII. Il m'a dit qu'il n'y avait pas moyen, mais que de toute façon, un truc tordu comme ça ne devait servir à rien.
Héhé... faut croire que la philosophie de programmation en Java (ou C#, qui a aussi un garbage collector je crois) est très différente de celle du C++. En fait Java est quelque part entre C et C++ : il y a la notion d'objet, mais pas la notion de durée de vie des objets. Et donc, je suppose, aucun équivalent possible à fstream (fichier à fermeture automatique).
J'ai oublié de préciser qu'il ne s'agissait pas d'un cours sur Java lui-même, mais d'un cours général sur la programmation orientée objet, dont le langage de support est Java !
Les autres étudiants avaient déjà fait du Java, mais pas moi, pour une histoire de passerelle depuis un autre établissement.
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
drkm
Fabien LE LEZ writes:
De plus, si "new UneClasse()" renvoie une exception, l'assignation d'un pointeur à "unObjet" ne se fait pas, et le delete a un comportement indéfini.
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
Andre Heinen
On Sun, 01 Aug 2004 23:18:01 +0200, "Florent 'flure' C." wrote:
Argh ! Au temps pour moi ! Bien que n'ayant jamais utilisé la clause finally en C++, j'étais persuadé qu'elle existait, étant pour moi obligatoirement liée à un bloc try ...
Elle est reconnue par certains compilateurs, mais ce n'est pas du C++ standard.
-- Andre Heinen My address is "a dot heinen at europeanlink dot com"
On Sun, 01 Aug 2004 23:18:01 +0200, "Florent 'flure' C."
<flurePASDESPAM@freePASDESPAM.fr> wrote:
Argh !
Au temps pour moi ! Bien que n'ayant jamais utilisé la clause finally en
C++, j'étais persuadé qu'elle existait, étant pour moi obligatoirement
liée à un bloc try ...
Elle est reconnue par certains compilateurs, mais ce n'est pas du
C++ standard.
--
Andre Heinen
My address is "a dot heinen at europeanlink dot com"
On Sun, 01 Aug 2004 23:18:01 +0200, "Florent 'flure' C." wrote:
Argh ! Au temps pour moi ! Bien que n'ayant jamais utilisé la clause finally en C++, j'étais persuadé qu'elle existait, étant pour moi obligatoirement liée à un bloc try ...
Elle est reconnue par certains compilateurs, mais ce n'est pas du C++ standard.
-- Andre Heinen My address is "a dot heinen at europeanlink dot com"
Andre Heinen
On Sun, 01 Aug 2004 23:28:33 +0200, Fabien LE LEZ wrote:
On Sun, 01 Aug 2004 23:18:01 +0200, "Florent 'flure' C." :
Au temps pour moi ! Bien que n'ayant jamais utilisé la clause finally en C++, j'étais persuadé qu'elle existait, étant pour moi obligatoirement liée à un bloc try ...
Ben non. Et, en pratique, on s'en passe plutôt bien :-)
De fait, Stroustrup nous dit qu'il n'y a pas besoin de finally en C++ parce que RAII est presque toujours meilleur: http://www.research.att.com/~bs/bs_faq2.html#finally
J'imagine qu'on a dû rajouter un "finally" en Java parce que le programmeur n'a pas une parfaite maîtrise de la durée de vie des objets ?
Effectivement, en Java il n'y a pas de destructeurs, donc pas de RAII.
-- Andre Heinen My address is "a dot heinen at europeanlink dot com"
On Sun, 01 Aug 2004 23:28:33 +0200, Fabien LE LEZ
<gramster@gramster.com> wrote:
On Sun, 01 Aug 2004 23:18:01 +0200, "Florent 'flure' C."
<flurePASDESPAM@freePASDESPAM.fr>:
Au temps pour moi ! Bien que n'ayant jamais utilisé la clause finally en
C++, j'étais persuadé qu'elle existait, étant pour moi obligatoirement
liée à un bloc try ...
Ben non. Et, en pratique, on s'en passe plutôt bien :-)
De fait, Stroustrup nous dit qu'il n'y a pas besoin de finally en
C++ parce que RAII est presque toujours meilleur:
http://www.research.att.com/~bs/bs_faq2.html#finally
J'imagine qu'on a dû rajouter un "finally" en Java parce que le
programmeur n'a pas une parfaite maîtrise de la durée de vie des
objets ?
Effectivement, en Java il n'y a pas de destructeurs, donc pas de
RAII.
--
Andre Heinen
My address is "a dot heinen at europeanlink dot com"
On Sun, 01 Aug 2004 23:28:33 +0200, Fabien LE LEZ wrote:
On Sun, 01 Aug 2004 23:18:01 +0200, "Florent 'flure' C." :
Au temps pour moi ! Bien que n'ayant jamais utilisé la clause finally en C++, j'étais persuadé qu'elle existait, étant pour moi obligatoirement liée à un bloc try ...
Ben non. Et, en pratique, on s'en passe plutôt bien :-)
De fait, Stroustrup nous dit qu'il n'y a pas besoin de finally en C++ parce que RAII est presque toujours meilleur: http://www.research.att.com/~bs/bs_faq2.html#finally
J'imagine qu'on a dû rajouter un "finally" en Java parce que le programmeur n'a pas une parfaite maîtrise de la durée de vie des objets ?
Effectivement, en Java il n'y a pas de destructeurs, donc pas de RAII.
-- Andre Heinen My address is "a dot heinen at europeanlink dot com"
Matthieu Moy
Fabien LE LEZ writes:
En fait Java est quelque part entre C et C++ : il y a la notion d'objet, mais pas la notion de durée de vie des objets. Et donc, je suppose, aucun équivalent possible à fstream (fichier à fermeture automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de connexion réseau par exemple sont fermés automatiquement quand le garbage collector efface cet objet, c'est à dire ... un jour, mais dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les fermer à la main !
-- Matthieu
Fabien LE LEZ <gramster@gramster.com> writes:
En fait Java est quelque part entre C et C++ : il y a la notion
d'objet, mais pas la notion de durée de vie des objets. Et donc, je
suppose, aucun équivalent possible à fstream (fichier à fermeture
automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de
connexion réseau par exemple sont fermés automatiquement quand le
garbage collector efface cet objet, c'est à dire ... un jour, mais
dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les fermer
à la main !
En fait Java est quelque part entre C et C++ : il y a la notion d'objet, mais pas la notion de durée de vie des objets. Et donc, je suppose, aucun équivalent possible à fstream (fichier à fermeture automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de connexion réseau par exemple sont fermés automatiquement quand le garbage collector efface cet objet, c'est à dire ... un jour, mais dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les fermer à la main !
-- Matthieu
Cyrille Karmann
Matthieu Moy disait:
Fabien LE LEZ writes:
En fait Java est quelque part entre C et C++ : il y a la notion d'objet, mais pas la notion de durée de vie des objets. Et donc, je suppose, aucun équivalent possible à fstream (fichier à fermeture automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de connexion réseau par exemple sont fermés automatiquement quand le garbage collector efface cet objet, c'est à dire ... un jour, mais dieu seul sait quand ;-).
Oui, enfin on peut demander par un appel à System.gc() au garbage collector de lancer tout de suite le recyclage des objets inutilisés, mais d'après la doc il semble y avoir garantie de moyens, pas de résultats.
Donc, en pratique, il vaut mieux les fermer à la main !
En fait Java est quelque part entre C et C++ : il y a la notion
d'objet, mais pas la notion de durée de vie des objets. Et donc, je
suppose, aucun équivalent possible à fstream (fichier à fermeture
automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de
connexion réseau par exemple sont fermés automatiquement quand le
garbage collector efface cet objet, c'est à dire ... un jour, mais
dieu seul sait quand ;-).
Oui, enfin on peut demander par un appel à System.gc() au garbage
collector de lancer tout de suite le recyclage des objets inutilisés,
mais d'après la doc il semble y avoir garantie de moyens, pas de
résultats.
Donc, en pratique, il vaut mieux les fermer à la main !
En fait Java est quelque part entre C et C++ : il y a la notion d'objet, mais pas la notion de durée de vie des objets. Et donc, je suppose, aucun équivalent possible à fstream (fichier à fermeture automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de connexion réseau par exemple sont fermés automatiquement quand le garbage collector efface cet objet, c'est à dire ... un jour, mais dieu seul sait quand ;-).
Oui, enfin on peut demander par un appel à System.gc() au garbage collector de lancer tout de suite le recyclage des objets inutilisés, mais d'après la doc il semble y avoir garantie de moyens, pas de résultats.
Donc, en pratique, il vaut mieux les fermer à la main !
En effet.
-- Cyrille
Loïc Joly
Matthieu Moy wrote:
Fabien LE LEZ writes:
En fait Java est quelque part entre C et C++ : il y a la notion d'objet, mais pas la notion de durée de vie des objets. Et donc, je suppose, aucun équivalent possible à fstream (fichier à fermeture automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de connexion réseau par exemple sont fermés automatiquement quand le garbage collector efface cet objet, c'est à dire ... un jour, mais dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les fermer à la main !
D'après ce que j'ai compris (je n'ai jamais utilisé Java), il y a aussi quelques cas particuliers utilisants une écriture de type RAII, mais uniquement pour u type particulier, (synchronized pour des mutex) et non extensibles aux types utilisateurs.
-- Loïc
Matthieu Moy wrote:
Fabien LE LEZ <gramster@gramster.com> writes:
En fait Java est quelque part entre C et C++ : il y a la notion
d'objet, mais pas la notion de durée de vie des objets. Et donc, je
suppose, aucun équivalent possible à fstream (fichier à fermeture
automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de
connexion réseau par exemple sont fermés automatiquement quand le
garbage collector efface cet objet, c'est à dire ... un jour, mais
dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les fermer
à la main !
D'après ce que j'ai compris (je n'ai jamais utilisé Java), il y a aussi
quelques cas particuliers utilisants une écriture de type RAII, mais
uniquement pour u type particulier, (synchronized pour des mutex) et non
extensibles aux types utilisateurs.
En fait Java est quelque part entre C et C++ : il y a la notion d'objet, mais pas la notion de durée de vie des objets. Et donc, je suppose, aucun équivalent possible à fstream (fichier à fermeture automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de connexion réseau par exemple sont fermés automatiquement quand le garbage collector efface cet objet, c'est à dire ... un jour, mais dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les fermer à la main !
D'après ce que j'ai compris (je n'ai jamais utilisé Java), il y a aussi quelques cas particuliers utilisants une écriture de type RAII, mais uniquement pour u type particulier, (synchronized pour des mutex) et non extensibles aux types utilisateurs.
-- Loïc
Fabien LE LEZ
On Mon, 02 Aug 2004 20:45:34 +0200, Matthieu Moy :
Donc, en pratique, il vaut mieux les fermer à la main !
Comme en C.
-- ;-)
On Mon, 02 Aug 2004 20:45:34 +0200, Matthieu Moy
<MatthieuNOSPAM.Moy@imag.fr.invalid>:
Donc, en pratique, il vaut mieux les fermer
à la main !
On Mon, 02 Aug 2004 20:45:34 +0200, Matthieu Moy :
Donc, en pratique, il vaut mieux les fermer à la main !
Comme en C.
-- ;-)
Jean-Marc Bourguet
Matthieu Moy writes:
Fabien LE LEZ writes:
En fait Java est quelque part entre C et C++ : il y a la notion d'objet, mais pas la notion de durée de vie des objets. Et donc, je suppose, aucun équivalent possible à fstream (fichier à fermeture automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de connexion réseau par exemple sont fermés automatiquement quand le garbage collector efface cet objet, c'est à dire ... un jour, mais dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les fermer à la main !
Comme en C++ si on veut gerer correctement les erreurs.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
En fait Java est quelque part entre C et C++ : il y a la notion
d'objet, mais pas la notion de durée de vie des objets. Et donc, je
suppose, aucun équivalent possible à fstream (fichier à fermeture
automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de
connexion réseau par exemple sont fermés automatiquement quand le
garbage collector efface cet objet, c'est à dire ... un jour, mais
dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les
fermer à la main !
Comme en C++ si on veut gerer correctement les erreurs.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
En fait Java est quelque part entre C et C++ : il y a la notion d'objet, mais pas la notion de durée de vie des objets. Et donc, je suppose, aucun équivalent possible à fstream (fichier à fermeture automatique).
Sauf erreur de ma part, en Java, les descripteurs de fichier ou de connexion réseau par exemple sont fermés automatiquement quand le garbage collector efface cet objet, c'est à dire ... un jour, mais dieu seul sait quand ;-). Donc, en pratique, il vaut mieux les fermer à la main !
Comme en C++ si on veut gerer correctement les erreurs.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Fabien LE LEZ
On 03 Aug 2004 08:20:34 +0200, Jean-Marc Bourguet :
[les fichiers]
Donc, en pratique, il vaut mieux les fermer à la main !
Comme en C++ si on veut gerer correctement les erreurs.
Quand tout se passe bien, oui. Mais en cas d'exception, s'il n'est de toutes façons pas possible d'enregistrer des informations correctes dans le fichier, la fermeture automatique est bien pratique :-)
-- ;-)
On 03 Aug 2004 08:20:34 +0200, Jean-Marc Bourguet <jm@bourguet.org>:
[les fichiers]
Donc, en pratique, il vaut mieux les fermer à la main !
Comme en C++ si on veut gerer correctement les erreurs.
Quand tout se passe bien, oui.
Mais en cas d'exception, s'il n'est de toutes façons pas possible
d'enregistrer des informations correctes dans le fichier, la fermeture
automatique est bien pratique :-)
On 03 Aug 2004 08:20:34 +0200, Jean-Marc Bourguet :
[les fichiers]
Donc, en pratique, il vaut mieux les fermer à la main !
Comme en C++ si on veut gerer correctement les erreurs.
Quand tout se passe bien, oui. Mais en cas d'exception, s'il n'est de toutes façons pas possible d'enregistrer des informations correctes dans le fichier, la fermeture automatique est bien pratique :-)