Petites questions à propos de java
Fermé
aurelie689
-
30 oct. 2008 à 12:46
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 30 oct. 2008 à 20:54
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 - 30 oct. 2008 à 20:54
A voir également:
- Petites questions à propos de java
- Waptrick java football - Télécharger - Jeux vidéo
- Marketplace petites annonces - Guide
- Java apk - Télécharger - Langages
- Jeux java itel football - Télécharger - Jeux vidéo
- Jeux java itel 5360 ✓ - Forum Mobile
1 réponse
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
328
30 oct. 2008 à 20:54
30 oct. 2008 à 20:54
Salut Aurélie689,
Je ne connais pas le pascal donc je ne m'avancerai pas à faire de comparaisons.
Tout d'abord, en Java, il n'y a pas de procédure mais des méthodes : en règle générale ces méthodes sont relatives à l'objet dans lequel elles sont définies (principe d'encapsulation). Mais bon, c'est surtout une question de vocabulaire.
En ce qui concerne les modifications apportées par l'exécution d'une méthode, c'est assez compliqué, mais les principes sont communs à d'autres langages (par exemple C++).
En informatique, tu as 2 structures gérant la mémoire dans lesquels sont stockées tes données. La pile et le tas. En Java et C++, dès que tu instancies une classe (avec new), ton instance est créée dans le tas. Si tu utilises un type primitif, celui-ci est stocké dans la pile.
En informatique, tu as plusieurs méthodes pour passer des arguments à une méthode.
- La première méthode est le passage par recopie :
Le principe est simple, tu as une variable déclarée et initialisée dans une méthode A, et tu la passes en paramètre à la méthode B. La variable est alors copiée sur la pile (stack), et c'est cette copie qui va être utilisée par B (donc B n'utilise pas vraiment la variable initialisée dans A). Dans ce cas, si en sortie de B tu ne retournes pas la valeur, et que tu ne l'affectes pas à la variable initialisée dans A, les modifications apportées ne seront stockées nulle part.
Je pense que c'est ce type de passage qui est utilisé en Pascal par exemple.
- La seconde est le passage par pointeur :
Ici on va passer en paramètre à B non plus notre variable, mais son adresse (le pointeur vers notre variable). L'avantage majeur que ça a, c'est que si ta variable de base est un objet énorme, tu ne vas pas la recopier dans la pile pour la modifier, puis écraser son ancienne valeur (je te laisse par exemple imaginer comment ton ordinateur ramerait si tu avais un fichier de plusieurs centaines de méga octets en mémoire) : tu vas modifier directement l'objet. Ainsi, comme les modifications sont apportées directement sur l'objet de base, tu n'as pas besoin de le retourner.
Le second avantage du passage par pointeur, c'est de permettre au programmeur de développer super efficacement en optimisant son code à fond en jouant directement avec les adresses mémoire pour stocker des données...
L'inconvénient, c'est que si tu n'es pas expert là dedans, c'est difficile, et que souvent tu vas laisser des failles que les hackers (qui eux sont experts là dedans) vont déceler pour exploiter ton application.
- La 3ème méthode est le passage par référence :
En gros c'est comme un passage par pointeur, sauf que tu n'as pas l'autorisation d'écrire directement à l'adresse que tu veux et donc c'est plus sécurisé (je n'en connais pas vraiment plus donc je vais m'arrêter là).
En java, et à part pour les types primitifs, le passage en paramètre se fait par référence. Autrement dit, si ton objet a été créé en dehors de la méthode B, celle-ci va la modifier et n'aura pas besoin de la retourner. Par contre, tout objet déclaré dans la méthode B et non retourné sera effacé par le garbage collector.
Le return fonctionne aussi bien avec des instances de classes qu'avec des types primitifs (donc avec des booléens).
Cordialement,
Je ne connais pas le pascal donc je ne m'avancerai pas à faire de comparaisons.
Tout d'abord, en Java, il n'y a pas de procédure mais des méthodes : en règle générale ces méthodes sont relatives à l'objet dans lequel elles sont définies (principe d'encapsulation). Mais bon, c'est surtout une question de vocabulaire.
En ce qui concerne les modifications apportées par l'exécution d'une méthode, c'est assez compliqué, mais les principes sont communs à d'autres langages (par exemple C++).
En informatique, tu as 2 structures gérant la mémoire dans lesquels sont stockées tes données. La pile et le tas. En Java et C++, dès que tu instancies une classe (avec new), ton instance est créée dans le tas. Si tu utilises un type primitif, celui-ci est stocké dans la pile.
En informatique, tu as plusieurs méthodes pour passer des arguments à une méthode.
- La première méthode est le passage par recopie :
Le principe est simple, tu as une variable déclarée et initialisée dans une méthode A, et tu la passes en paramètre à la méthode B. La variable est alors copiée sur la pile (stack), et c'est cette copie qui va être utilisée par B (donc B n'utilise pas vraiment la variable initialisée dans A). Dans ce cas, si en sortie de B tu ne retournes pas la valeur, et que tu ne l'affectes pas à la variable initialisée dans A, les modifications apportées ne seront stockées nulle part.
Je pense que c'est ce type de passage qui est utilisé en Pascal par exemple.
- La seconde est le passage par pointeur :
Ici on va passer en paramètre à B non plus notre variable, mais son adresse (le pointeur vers notre variable). L'avantage majeur que ça a, c'est que si ta variable de base est un objet énorme, tu ne vas pas la recopier dans la pile pour la modifier, puis écraser son ancienne valeur (je te laisse par exemple imaginer comment ton ordinateur ramerait si tu avais un fichier de plusieurs centaines de méga octets en mémoire) : tu vas modifier directement l'objet. Ainsi, comme les modifications sont apportées directement sur l'objet de base, tu n'as pas besoin de le retourner.
Le second avantage du passage par pointeur, c'est de permettre au programmeur de développer super efficacement en optimisant son code à fond en jouant directement avec les adresses mémoire pour stocker des données...
L'inconvénient, c'est que si tu n'es pas expert là dedans, c'est difficile, et que souvent tu vas laisser des failles que les hackers (qui eux sont experts là dedans) vont déceler pour exploiter ton application.
- La 3ème méthode est le passage par référence :
En gros c'est comme un passage par pointeur, sauf que tu n'as pas l'autorisation d'écrire directement à l'adresse que tu veux et donc c'est plus sécurisé (je n'en connais pas vraiment plus donc je vais m'arrêter là).
En java, et à part pour les types primitifs, le passage en paramètre se fait par référence. Autrement dit, si ton objet a été créé en dehors de la méthode B, celle-ci va la modifier et n'aura pas besoin de la retourner. Par contre, tout objet déclaré dans la méthode B et non retourné sera effacé par le garbage collector.
Le return fonctionne aussi bien avec des instances de classes qu'avec des types primitifs (donc avec des booléens).
Cordialement,