L’environment.NET
19/10/20195 Environnement .Net
•.NET est une plateforme élaborée par l’entreprise Microsoft (Juin 2002) afin de fournir un ensemble des technologies informatiques, pour le développement d'applications d'entreprises.
•Les applications d’entreprises doivent être :
•Ces considérations rendent ces applications complexes.
•La solution c’est le DOTNET
-Portable
-Fiableetsécurisée
-Maintenable etflexible
-Performante
-Facile à intégrerdans unsystème d'informationexistant
19/10/20196 Environnement.Net
•Microsoft .NET constitue ainsi la réponse de Microsoft à la plateforme J2ee de Sun.
•Pourquoion parlede .NETquandon veutapprendrele langageC#?
•C#: c'est le langage, la "langue" dans laquelle vous allez parler. Vous allez par exemple pouvoir dire "Ouvre une fenêtre en haut à gauche de l'écran".
•.NET: ce sont les outils dont vous avez besoin pour travailler. C’est un ensemble de composants informatiques, que l'on appelleframework, qui vous permet d'avoir accès à la création et manipulation de fenêtres, à l'écriture de fichiers,.. etc.
•Nativement, la plateforme .NET fut crée pour Windows. Celle-ci est désormais portable sur des systèmes Linux ou Unix, grâce à un projet intitulé MONO.
•Le Framework .Net, est multi-langages : on peut programmer en VB, en C#, en C++, en J# ...et autres.
19/10/20197 Historique.Net
•1995: Le lancement de java
•1996: Microsoftaachetéunelicence javadeSun pour pouvoir utiliser les applets java dans Internet Explorer.
•1997: Action en justice de Sun contre Microsoft. oSun accuse Microsoft de ne pas respecter la licence, en développant une version de Java incompatible avec son cahier de charge. oSun accuse MS de vouloir provoquer une cassure du marché et inciter à fabriquer des logiciels utilisant Java qui fonctionneraient uniquement avec Windows.
oMicrosoft continue de développer sa propre version de Java, Librairies, compilateur, machine virtuelle.
•1998: Sun obtient une injonction qui empêche MS de vendre tout produit java incompatible avec ses spécifications.
•1999: Sun annonce le lancement de J2EE. Un ensemble d’outils permettant de créer des applications d’entreprise en n’utilisant que le langage Java.
•2000: Microsoft lance .Net, avec un nouveau langagede programmation semblable à java appelé C#.8 19/10/2019
Historique .Net
•Janvier 2001: Sun et Microsoft en arrivent à un arrangement sur Java. Sun obtient 20 millions. Microsoft ne peut plus développer de produits incompatibles avec les spécifications de Sun mais peut continuer à distribuer les versions actuelles.
•Juillet 2001: Microsoft annonce que sa machine virtuelle pour Java ne sera pas distribuée avec son nouveau système d’exploitation, Windows XP, ni dans Internet Explorer 6. (mais elle sera disponible par téléchargement sur le site de Microsoft).
•Octobre 2001: Lancement de Windows XP sans le Framework .NET.
•Janvier 2002: Le .NET Framework SDK version finale est disponible pour téléchargement sur le site web de Microsoft.
•Février 2002: Microsoft lance Visual Studio .NET.
•Mars 2002: Nouvelle action en justice de Sun contre Microsoft. Environ 1 milliard de dollars est demandé, l’inclusion de Java dans Windows XP et IE6, et la révélation d’un ensemble d’API de Windows XP.
•2003: La plate forme .Net est lancé officiellement après que SUN remporte le procès obligeant MS d’arrêter le développement de sa propre machine virtuelle de Java.9 19/10/2019Limites •En utilisant C et C++, un programme compilé (binaire) ne fonctionne que sur la plateforme sur laquelle il a été compilé. Il est par exemple impossible de faire tourner sous Linux un programme compilésur Windows.
•Les langages récents, comme le C# et le Java, résolvent ce problème de compatibilité.
19/10/201910 Le code en langage intermédiaire (CIL)
•La compilation en C# ne donne pas un programme binaire, contrairement au C et au C++. •Le code C# est en fait transformé dans un langage intermédiaire (appelé CIL, anciennement MSIL) que l'on peut ensuite distribuer à tout le monde. •Ce code n'est donc pas exécutable, car l'ordinateur ne comprend que le binaire.
19/10/201911 Le code en langage intermédiaire (CIL)
•CLRest le nom choisi par Microsoft de la machine virtuelle du framework.NET
•Sous Windows, le code en CIL prend l'apparence d'un .exe, mais ne contient en revanche pas de binaire. Lorsqu'on exécute le programme CIL, celui-ci est lu par le CLRqui le compile cette fois en vrai programme binaire.
•Cela offre beaucoup de souplesse au programmeur. 19/10/201912 Common LangageRuntime (CLR)
•Cette complexité ralentit légèrement la vitesse d'exécution des programmes (par rapport au C ou au C++), mais la différence est négligeable par rapport aux gains que cela apporte. On parle de managedcodequi permettra d’améliorer lasûreté de fonctionnementd'un programme informatique.
•Lemanagedcodeest uncode sourcequi s'exécute sous le contrôle de lamachine virtuelleCLR. Ce terme est employé par opposition auunmanagedcode(code non géré), qui est exécuté directement par leprocesseur. 19/10/201913 .NetFramework
•Framework = cadre dedéveloppement
•Le Framework .Net a 3rôles :
Build: Vérifier le code (compilation)+ exécution via leCLR
Manage: outils facilitant laprogrammation
Deploy: outildedéploiementde l’application pourla mise enproduction14 19/10/2019
Framework dedéveloppement
.NETn'estpasunetechnologiemaisunensembledetechnologies.Le
Framework.NEToffreauxdéveloppeursplusieursbibliothèquesoffrantchacun
desservicesdifférents:
•WindowsForm•WPF •ASP.net•WCF •Windowsstore•etc 15
19/10/2019
Environnement de travail en .Net
1.Installer Microsoft .Net Framework
2.Avoir un environnement de développementdes applications .Net: Visual studio oVersion gratuite: Visual studio express ne contient pas toutesles fonctionnalités.
oVersion payante: Visual studio ultimate16 19/10/2019
VisualStudio
Remarques:
•LorsdepremièredémarragedeVisualStudio,onvousdemandelelangagede
programmationàutiliser(C#,VB...),parlasuite,çaseralelangagepardéfaut
pourlesautresdémarragesdeVisualstudio.
•Sionveutmodifiercelangage:Outils Importationetexportationdes
paramètres Réinitialisertouslesparamètres choisirlelangage17 19/10/2019
Visual Studio
•Pour organiser les classes, Java utilise le concept de packages et C# utilise le concept de Namespaces.
•Nom de solution: conteneur d’un ensemble de projet
•Nom: le nom de projet18 19/10/2019
Comparaison entre J2ee et.Net19 19/10/2019
Comparaison entre J2ee et.Net
•Langage deprogrammation
oJ2ee utilise un seul langageJava
o.Netmulti-langage•IDE oIDE de j2ee open source
oIDE de .Net payant+ basé sur les systèmesWindows
•Portabilité
oPortabilité mieux enj2ee
•Documentation
oMieux en J2ee par rapport à.Net20 19/10/2019
Comparaison entre J2ee et .Net21 •Applicationdebureau
J2EE.NET
Swing Awt JavaFX WindowsForms WPF
19/10/2019
Comparaison entre J2ee et.Net22 •ApplicationServeur
J2EE.NETServeur Web ,serveur
d’Application
Apache tomcat,Jboss,GlassFishIIS ApplicationWeb
JSP/ Servlet
JSF/ Struts
SpringMVC
ASP WebFormsASPMVC Gestion de base de données
JDBCADO.net
19/10/2019
Comparaison entre J2ee et.Net23 J2EE.NET
Framework ORM
HibernateJPA NhibernateLinQ EntityFramework
ApplicationRIA
FlashSilverlight
Framework pour Injection de dependence
SpringMicrosoftdependancy
Injection
Spring.Net
19/10/2019
Comparaison entre J2ee et.Net24 J2EE.NET
Programmation
distribuéRMI WebServices
.NetRemotingWCF BI
TalendMicrosoft BI Service Sqlserver
Application mobile
AndroidWindowsPhone
19/10/2019
Comparaison entre J2ee et .Net25 Tout ce qu’on peut faire en J2ee, on peut le faireen
.Net etviceversamaisde différentefaçon.
En tantqu'ingénieuren développement informatique, il faudra avoir une base solide dans les deuxenvironnements
•Récapitulatif
19/10/2019
Exercice : Personnalisez votre environnement
•Pour changer le titre de la fenêtre : •Console.Title= "Mon application";
•Pour forcer un fond bleu, on écrit :
•Console.BackgroundColor= ConsoleColor.Blue;
•Console.Clear();
•Pour changer la taille de la fenêtre :
•Console.SetWindowSize(64,30); //caractères et lignes
•Pour positionner le curseur au point (10, 20) et afficher du texte en rouge sur fond noir :
•Console.SetCursorPosition(10, 20);
•Console.BackgroundColor= ConsoleColor.Black;
•Console.ForegroundColor= ConsoleColor.Red;
•Console.Write(" Bonjour tout le monde ! ");26 19/10/2019
Initiation àla programmationC#
19/10/201927 Plan
1.Variables et types de données
2.L’affichage et la saisie en C#
3.Les opérateurs
4.Les structures de contrôle (Conditions et Boucles)
5.Tableaux, tableaux hétérogènes et Tableaux multi-dimension
6.Les fonctions et passage des paramètres
7.Les énumérations28 19/10/2019
Avant de commencer, il faut savoir :
•C# est sensible à la casse.
•C# accepte les lettres accentuées dans les identificateurs (nom de variables, de fonctions, de classes, ...). •Maindoit être contenu dans une classe et être qualifié destatic.
•La directive usingsignale que l’on fera appel à des fonctions de l’architecture .NET regroupées dans un espace de noms appelé System.
•La classe Consoleenglobe les fonctions de dialogue avec l’utilisateur en mode console. Elle fait partie de l’espace de nom System.
•Utilisation du UpperCamelCasepour les noms des classes, interfaces, namespaceset pour les méthodes.29 19/10/2019
La classe Console
La classe Console possède les méthodes suivantes :
•Read() oLit le caractère suivant à partir du clavier
•ReadLine()
oLit la ligne suivante (string) à partir du clavier
•Write(objecto)
oEcrit la représentation textuelle de l’objet passé en paramètre sur l’écran
•WriteLine(objecto)
oEcrit la représentation textuelle de l’objet passé en paramètre sur l’écran avec un retour à la ligne
19/10/201930 Structure Typiqued’un FichierSource
19/10/201931 Alias et Noms Pleinement Qualifiés32 19/10/2019
Initiation àla programmationC#
Variables et types de données
19/10/201933 Déclaration des Variables
•La déclaration des variables en C# se fait avec lasyntaxe: <type> <nom_var> =<valeur>;
•Exemple : intx = 5;
•EnC#,onpossèdeégalementlemotclévarpourdéclarerunevariableavec
untypeimplicite,letypedelavariableestdoncdéterminédepuislavaleur
affectée:
•Exemple : var y = 6.1034 19/10/2019
Types de Données
•TouslestypesprimitifsenC#sontdesobjetsdanslenamespaceSystem.
•Pourchacundecestypesonaunalias(nompluscourt)afindesimplifier
l’utilisation.
•Exemple:intpourreprésenterletypeSystem.Int32
•Vuquecestypessontdesobjets,ilspossèdentdesméthodesqu’on peut appeler;35 int x =4;
Console.WriteLine(x.CompareTo(12));
19/10/2019
Types de Données36 ShortName.NETClassDescriptionNumber ofBitsbyte Byte
De 0 à 2558 sbyteSByte De -128 à 1278 shortInt16 De -32768 à 3276716 ushortUInt16 De 0 à 6553516 intInt32 De -2147483648 à 214748364732 uintUInt32 De 0 à 429496729532 longInt64 De -9223372036854775808 à 22337203685477580764 ulongUInt64 De 0 à 1844674407370955161564 •Letype entier:
19/10/2019
Types de Données37 Short name.Net classNumber of bitsfloat Float32bits doubleDouble 64bits
•Le type réel:
•Le type caractère:
•Le type Boolean:
Short name.Net classNumber of bitsbool Boolean1bit Short name.Net classNumber of bitschar Char16bits 19/10/2019
Types de Données38 Short name.Net classstring String
•Le type String:
•Le type object:
Short name.Net classobject Object
19/10/2019
Les Types Nullables
•Lestypesqu’onvientdevoirnepeuventpasprendrenullcommevaleur.C#
parcontreoffreuneversionnullabledecestypes.
•Parexemplepourletypeint(System.Int32),onpossèdeletypenullable
équivalentsuivant:
•Exemple: int? x= null;
Console.WriteLine(x);
inty = x; // ERREUR, comment faire? 39
Short name.Net class
int ?
Nullable<Int32>
19/10/2019
Les Types Nullables
•Pour accéder à la valeur de ces types nullables, C# offre les moyens suivants:
oL’utilisation d’un castexplicite.
oLa propriété Value.
•Exemple :
double? x=7;
doubley=(double) x;//castexplicite
doublez= x.Value; //propriétéValue
doublev=x; //erreur40 19/10/2019
Variables
•Les deux déclarations suivantes sont équivalentes : ointv;
oSystem.Int32v; •Une variable pas encore initialisée ne peut pas être utilisée, sauf à gauche d’une assignation
ointa=5,b,c;
oa = c + 5; // erreur : la variable «c» n’est pas initialisée !
ob = a + 5;
// correct : b est à gauche de l’assignation !
•Le type float:
odoubled = 1.2; // Aucun problème.
ofloatf1 = 1.2; // Erreur de syntaxe : 1.2 en format double.
ofloatf2 = 1.2f;// Aucun problème.41 19/10/2019
Value Types Vs. ReferenceTypes
19/10/201942 TypeValeurTypeRéférence
•Un type de données est dit « Type valeur » s'il possèdeladonnéedans son propre espacede mémoire.
----------------------------------------------------------------
•Les types «Type valeur » sont:
oTousles types numériques.
oBoolean, Char et Date
oToutesles structures
oLes énumérations.
•Untypededonnéesestdit«Type référence »
s'ilpossèdeuneréférenceversunautreemplacement
dela mémoire où la donnée eststockée.
---------------------------------------------------------------------
•Les types «Type référence» sont:
oString. (mais se comporte commeunValueType!!)
oTouslestableaux.
oLesclasses.
oLesDelegates.
Initiation àla programmationC#
L’affichageet la saisie
19/10/201943 L’affichageenC#
1.Console.WriteLine("Expression àafficher");
2.Console.Write("Expression àafficher");
3.intx=6; Console.Write("Expression àafficher" + x);
4. Formatstring :
intx=6;y=9; Console.Write("{0} et {1}",x,y); // 6 et 9
strings =String.Format("{{0}} estremplacépar {0} et {{1}} par {1}","p2","p3");// {0} est remplacé par p2 et {1} par p3
Remarque : vouspouvezdéterminerla façondontunedonnéevaêtrereprésentéeenfaisant
suivrel'indexide deuxpoints et de caractèresspéciaux, commececi:{0:X}pour un affichage
enhexadecimal.44 19/10/2019
L’affichageenC#45 19/10/2019
Exercice (Affichage)
staticvoidmain (){ inti=10, j=5; // qu’affiche chacune des instructions suivantes ?
Console.WriteLine("i = " + i + " et j = " + j);
Console.WriteLine("i = {0} et j = {1}", i, j); Console.WriteLine(i + j); Console.WriteLine("Somme = " + i + j); Console.WriteLine("Somme = " + (i + j) );
Console.WriteLine("Somme = {0}", i + j);
Console.WriteLine("Somme = " + i*j); Console.WriteLine(i + j + "Somme = "); }46 // i = 10 et j = 5
// i = 10 et j = 5
// 15
// Somme = 105
// Somme = 15
// Somme = 15
// Somme = 50
// 15Somme =
19/10/2019
CnversionNombre ---Chaine
•La classe Convertpossède des méthodes statiques qui permettent de convertir des valeurs d’un type vers un autre type :
•Par exemple, la méthode ToInt32 permet de convertir une chaine de caractères, un double, un caractère, .... en entier
intnombre1 = Convert.ToInt32('5');
intnombre2 = Convert.ToInt32("22");
double d1 = Convert.ToDouble("12.5");
•En outre, les typesint,double etfloatpossèdent la méthode Parsequi permet de récupérer un nombre à partir d’une chaine
intnombre1 = int.Parse("22");
double d1 = double.Parse("12.5");
19/10/201947 La saisieenC#
•le résultat de la méthode Console.ReadLine( ) est toujours une chaîne de caractère.
•Pour pouvoir récupérer la valeur saisie dans une variable d’un certain type, il faut effectuer une conversion en utilisantConvert.
•Exemple:
Convert.ToInt32(v);
Convert.ToDouble(v); Convert.ToChar(v); //etc48 stringv;
v=Console.ReadLine();
19/10/2019
La saisieenC#
•Exemple49 19/10/2019
Exercice (saisie)
•Terminez le code suivant :
staticvoidmain(){ Console.WriteLine("Entrez votre nom : ");
string n = ... ; Console.WriteLine("Entrez votre age: ");
inta = ... ;
Console ... ;}
// Entrez votre nom : toto
// Entrez votre age: 20
// Bonjour toto, vous avez 20 ans.50 19/10/2019
Exercice (saisie)
staticvoidmain(){ Console.WriteLine("Entrez votre nom : ");
stringn = Console.ReadLine();
Console.WriteLine("Entrez votre age: ");
inta = Convert.ToInt32(Console.ReadLine());
Console.Write("\n\nBonjour{0}, vous avez {1} ans.", n, a);} 51
19/10/2019
Initiation àla programmationC#
Les opérateurs
19/10/201952 Opérateurs
OperateurSignification
+Addition
-Soustraction
*Multiplication
/Division%Modulo Opérateurs arithmétiques : 19/10/201953 intx; //déclaration d'un entier x sans initialisation.
inty = 5; //déclaration d'un entier y ayant pour valeur 5. x = 7; //affectation de 7 à x
//On initialise les résultats à 0
intresultatAddition= 0;
intresultatSoustraction= 0;
intresultatMultiplication= 0;
intresultatDivision= 0;
intresultatModulo= 0;
//On effectue les calculs et on les assignent aux résultats
//correspondants.
resultatAddition= x + y;
resultatSoustraction= x -y;
resultatMultiplication= x * y;
resultatDivision= x / y;
resultatModulo= x % y;
//Ici on fait afficher nos résultats à la console.
Console.WriteLine(resultatAddition);
Console.WriteLine(resultatSoustraction);
Console.WriteLine(resultatMultiplication);
Console.WriteLine(resultatDivision);
Console.WriteLine(resultatModulo);
Le résultat :12 235 12 19/10/201954 Opérateurs
OperateurSignification
>Strictement supérieur
<Strictement inférieur
>=Supérieur ou égal
<=Inférieur ou égal
!=Différent de==Egal Opérateurs de test :
19/10/201955 inta = 3, b = 8;
//On déclarenosrésultats.
boolresultat1, resultat2, resultat3, resultat4;
//Ici on effectue nos tests. resultat1 = a > b;
resultat2 = a < b;
resultat3 = a != b;
resultat4 = a == b;
//Ici on fait afficher nos résultats à la console. Console.WriteLine(resultat1);
Console.WriteLine(resultat2);
Console.WriteLine(resultat3);
Console.WriteLine(resultat4);
Le résultat :False TrueTrue False
19/10/201956 Opérateurs
OperateurSignification||OU &&ET
? : (opérateur ternaire)Condition ? valeur_si_Vrai: valeur_si_Faux
???? valeur si null
Opérateurs de test:
Exemple:
int? a = null; intb = a ?? -1; Console.WriteLine(b); // output: -1
19/10/201957 inta = 3; //trois entiers pour les trois tests. intb = 6;
intc = 1;
stringd = null;
booltest1; //trois résultat des tests. booltest2;
stringtest3;
stringtest4;
test1 = ((a == 2) || (a == 5)); //vrai si a=2 ou a=5.
test2 = ((b >= 0) && (b <= 10)); //vrai si b est compris
//entre zéroet dix.
test3 = (c == 1) ? "c est égal à 1": "c n'est pas égal à 1";
//enregistrela premier chaînesic==1 sinonenregistrela
//deuxiemmechaîne.
test4 = d ?? "d est null";
//test4 vaut d ou 5 si d vaut null
//on affiche les résultats dans la console. Console.WriteLine(test1); Console.WriteLine(test2); Console.WriteLine(test3); Console.WriteLine(test4);
Le résultat :False True
c est égal à 1
d est null
19/10/201958 Opérateurs
OperateurSignification
=Permet d’assigner une valeur à une variable
+=, -=, *=, /=, %=Opération puis réassignation
Opérateurs d’affectation :
19/10/201959 inta; // on déclare un entier a.
a = 3; //opérateur "=" assigne la valeur "3" à // la variable "a". Console.WriteLine(a);
a += 1; //équivaut à a = a+1, donc ici a = 4. Console.WriteLine(a);
a -= 2; //équivaut à a = a-2,donc ici a = 2. Console.WriteLine(a);
a *= 3; //équivaut à a = a*3,donc ici a = 6. Console.WriteLine(a);
a /= 6; //équivaut à a = a/6,donc ici a = 1. Console.WriteLine(a);
Le résultat :3 42 61 19/10/201960 Opérateurs
OperateurSignification
variable++ ,variable--+1 ou -1 après utilisation de la variable
++variable ,--variable+1 ou -1 avant l’utilisation de la variable
Opérateurs d’incrémentation:
19/10/201961 //a++ équivaut à a+=1 qui équivaut à a=a+1.
inta = 0;
// on initialise a à 0.
Console.WriteLine(a++);
//affiche a, soit 0, puis l'incrémente.
Console.WriteLine(a);
//affiche la valeur courante de a, soit 1.
Console.WriteLine(++a);
//incrémente a, puis affiche sa valeur, soit 2.
Le résultat :0 12 19/10/201962 Initiation àla programmationC#
Les structures de contrôle
19/10/201963 Les conditions (if)
•Forme : if (<condition1>) {
<instruction1>} elseif (<condition2>) {
<instruction2>} else
<instruction3>
•Exemple:
if ((v==3) && (i<5)){ i=i+4;v=v*2; }
else v=i;
Tests acceptés C/C++ :
if ( i )
if ( ! i )
if ( i = j )
En C#, il faut écrire :
if ( i != 0 )
if ( i == 0 )
if ( (i=j) != 0 )
Remarque: L’instruction if : Une différence par rapport à C/C++ :
19/10/201964 Les conditions (switch)
Forme : Exemple: switch (<expression entière>) {
case <valeur 1>: <instructions>; break;
case <valeur 2>: <instructions>; break;. .
case <valeur n>: <instructions>;break;
default: <instructions>} Remarque: Lesbreakserventà clôturerlescase,si
vousn'enmettezpas, le code ducasesuivantsera aussiexécuté.
19/10/201965 Boucle (while)
•Forme 1:
while(<expression entière>) <instruction>
•Forme 2:
do {
<instruction>
} while(<expression entière>); 19/10/201966 On remarque que le test est effectué avant la boucle.
On remarque que le test est effectué aprèsla boucle.
Boucle (for)
•Forme :
for (<expression 1>; <expression 2>;<expression 3>)
<instruction>
•Le mécanisme est équivalant à : 19/10/201967 Boucle nouvelle (foreach)
•La boucle foreachest utile pour balayer en lecture uniquement un tableau.
•foreachne permet pas de modifier le tableau, vous devez pour cela utiliser une autre forme de boucle.
Forme: foreach(<element> in <ensemble>) {
<instruction>} •Exemple :
int[] tab = { 5, 6, 8, 1 };
foreach(inti intab) {Console.WriteLine(i);}
string[] jours = new string[] { "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche" };
foreach(stringjour injours) {Console.WriteLine(jour);}
19/10/201968 break et continue
•Les instructions breaket continuepeuvent être exécutées dans une boucle :
•L’instruction continuefait passer directement à l’itération suivante ;
•L’instruction breakfait quitter la boucle.
•Exemple : 19/10/201976 Le passage de paramètres
•Les arguments d’une fonction sont passés :
•par valeur ou référence dans le cas d’arguments de types « valeur » (int, float, string, etc...)
•par référence uniquement dans le cas de tableaux ou d’objets (voir les classes)
•Lorsdel’appeld’uneméthodeprenantenparamètredes types valeur, les paramètres sont passés parvaleur.
•Lorsdel’appeld’uneméthodeprenantenparamètredes types références, les paramètres sont passés parréférence.
•Pour contrôler ce comportement par défaut, C# propose des modificateurs des paramètres.
19/10/201977 Passage d’arguments par valeur
•Cela signifie qu'une copie de la valeur de chaque argument est faite au moment de l'appel et ce son
