Programmation

202
1 Programmation Avant-propos

description

Programmation. Avant-propos. Programmation / Avant-propos. Programmation Ensemble des activités permettant l'écriture de programmes informatiques On parle de Conception logicielle. Programmation / Avant-propos. - PowerPoint PPT Presentation

Transcript of Programmation

  • ProgrammationAvant-propos

  • Programmation / Avant-proposProgrammation Ensemble des activits permettant l'criture de programmes informatiques On parle de Conception logicielle

  • Programmation / Avant-proposDe l'architecture machine aux langages de haut niveaux Un ordinateur est une machine permettant de traiter des informations selon des procdures Il est dot, entre autre,

    d'un processeur

    d'une mmoire centrale qui interagissentCPUMmoire

  • Programmation / Avant-proposLes procdures Une procdure est une opration effectuer Algorithme Un algorithme est une suite de procdures raliser

  • Programmation / Avant-proposImplmentation La mise en uvre d'un algorithme consiste en la traduction en langage de programmation On parle d'implmentation

    Langage de bas / haut niveau

    Principe: Une recette de cuisine doit tre plus ou moins dtaille en fonction de l'exprience du cuisinier

  • Programmation / Avant-proposLangage de bas / haut niveau (suite) Le niveau de dtail d'un algorithme est proportionnel celui du langage de programmation: Utilisation d'un langage de bas niveau: Ncessit de dtailler l'algorithme

    Utilisation d'un langage de haut niveau: Possibilit de moins dtailler l'algorithme

  • Programmation / Avant-proposExemple concret: La soustraction

    Acquis du module I1: Je connais la mthode permettant de raliserl'addition (a+b)la complmentation 2 (cplt2(x))

    Algorithmique a b = a + (-b) = a + cplt2 (b)

    J'ai maintenant la mthode permettant de raliser la soustraction

  • Programmation / Avant-proposAcquis du module I2: J'ai disposition:un composant ralisant l'addition d'un registre 8 bits (add)un composant ralisant la complmentation 2 (C2)

    Implmentation (langage bas niveau)addC2abcminus

  • Programmation / Avant-proposAcquis (futurs !) du module I3

    J'ai disposition une fonction permettant de raliser:l'addition (a+b)la ngation (-b)

    Implmentation (langage haut niveau)

    c=a+(-b)

  • Programmation / Avant-proposProcesseurstocker astocker braliser -baddition (a,t)stocker dans cAlgorithmeProgrammelangage humainement comprhensibleMmoirelangage comprhensible par la machinetraduction(compilation)stocker dans toprations entre/sortieprocdures

  • Programmation / Avant-proposDe l'algorithmique au programme

    L'algorithmique est l'tape essentielle (80%) de la conception d'un programme MAIS L'algorithme n'est pas directement comprhensible par la machine

  • Programmation / Avant-proposLe langage de programmation:

    est une traduction de l'algorithme dans un langage fini et non ambigu

    offre un certain nombre de procdures

    Le compilateur

    est l'outil permettant de traduire le langage de programmation en langage machine

    dpend du langage utilis

    est fortement li l'architecture de la machine

  • Programmation / Avant-proposSynthsetraduction en langage de programmationProgrammetraduction(compilation)read aread bt=-bc=a+tCode sourceIntervention du programmeurUtilisation de logiciel de compilation

  • JavaIntroduction

  • JavaRappel sur l'tape de la compilation Compilation:

    Rle: passage du langage de programmation vers un langage machine

    Consquences: Lors de la compilation, des liens sont tablis entre:

    le programme,le systme d'exploitation (Microsoft Windows, Linux, MacOS, )l'architecture de la machine (Intel, Risc, Motorola, )

  • JavaConsquences (suite)

    Un tel programme ne peut s'excuter que sur la plateforme pour laquelle il a t compil !

    Ncessit de re-compiler pour les diffrentes plateformes cibles

    Mme sur une mme architecture machine, un programme est li au systme d'exploitation

  • Langages compils et limitationsCompilationfichier source du programme

  • PortabilitNotion de portabilit Capacit d'un programme tre indpendant du systme d'exploitation et de l'architecture machineArchitecture 1Risc 6000UnixProgramme portableArchitecture 2Intel x86LinuxWindowsImpossible !

  • Java et la portabilitSolution propose: Construire une machine virtuelle:

    joue le rle de plateforme virtuelledpendante de l'architecture machine et du SEopre un langage machine virtuel indpendant de l'architecture relle et du SE rel

    Machine virtuelleSE / ArchitectureProgramme JavaCode source Java

  • Pseudo-Langage interprtSchma du principe Javafichier source du programmeCompilationProgramme JavaProgramme portable !

  • ConsquencesAvantage

    Portabilit

    Le programme ne ncessite pas de recompilation pour un autre couple SE/LM

    Inconvnient

    Vitesse d'excution

    La machine virtuelle interprte le pseudo langage pour excuter des instructions machines

  • JavaPrsentation

  • JavaJava est un langage de programmation orient objet

    La plateforme Java:

    Dfinition: Une plateforme est l'environnement matriel et logiciel dans lequel s'excute un programme

    Composition:

    La JVM (Java Virtual Machine) Elments du langage natif

    La J-API (Java Application Programming Interface) Elments supplmentaires

  • Java: Fiche signaltiquePropritaire:Sun Microsystem

    Naissance:fin 1995

    Signe particulier:

    fortes comptences dans la crations d'applications client-serveur et Internet

    Langage multi-plateforme

    Domaines d'applications multiple:bureautique,graphique,multimdia,base de donnes,

  • JavaTechniques de base

  • Compilation et excution sous JavaMon premier programme: HelloWorld !

    Remarques

    Le nom de la classe principale est le nom du fichier

    Une seule public class par fichier

    Attention la casse !

    Hello.javapublic class Hello { public static void main (String [] args) { System.out.println("Bonjour"); }}

  • Invocation dun programmeUne classe est excutable QUE si elle contient une mthode main()

    Invocation: java Hello (Attention: pas dextension !)

  • Compilation et excution sous Java

    C:\Hello>dir Le volume dans le lecteur C n'a pas de nom. Le numro de srie du volume est 78C3-E609

    Rpertoire de C:\Hello

    08/03/2005 14:12 .08/03/2005 14:12 ..08/03/2005 14:06 142 Hello.java 1 fichier(s) 142 octets 2 Rp(s) 5089857536 octets libres

    C:\Hello>

    C:\Hello>dir Le volume dans le lecteur C n'a pas de nom. Le numro de srie du volume est 78C3-E609

    Rpertoire de C:\Hello

    08/03/2005 14:12 .08/03/2005 14:12 ..08/03/2005 14:06 142 Hello.java 1 fichier(s) 142 octets 2 Rp(s) 5089771520 octets libres

    C:\Hello>javac Hello.java

    C:\Hello>

    Rpertoire de C:\Hello

    08/03/2005 14:12 .08/03/2005 14:12 ..08/03/2005 14:06 142 Hello.java 1 fichier(s) 142 octets 2 Rp(s) 5089771520 octets libres

    C:\Hello>javac Hello.java

    C:\Hello>dir Le volume dans le lecteur C n'a pas de nom. Le numro de srie du volume est 78C3-E609

    Rpertoire de C:\Hello

    08/03/2005 14:12 .08/03/2005 14:12 ..08/03/2005 14:12 417 Hello.class08/03/2005 14:06 142 Hello.java 2 fichier(s) 559 octets 2 Rp(s) 5089771520 octets libres

    C:\Hello>08/03/2005 14:12 .08/03/2005 14:12 ..08/03/2005 14:06 142 Hello.java 1 fichier(s) 142 octets 2 Rp(s) 5089771520 octets libres

    C:\Hello>javac Hello.java

    C:\Hello>dir Le volume dans le lecteur C n'a pas de nom. Le numro de srie du volume est 78C3-E609

    Rpertoire de C:\Hello

    08/03/2005 14:12 .08/03/2005 14:12 ..08/03/2005 14:12 417 Hello.class08/03/2005 14:06 142 Hello.java 2 fichier(s) 559 octets 2 Rp(s) 5089771520 octets libres

    C:\Hello>java HelloBonjour

    C:\Hello>

  • AppletPr requis Il faut crer une page HTML

    Visualisation Automatique, aprs chargement par un navigateur Attention: la JRE est requise !

    test applet Java

  • Javalments de base,Types natifs

  • Blocs et instructionsInstruction Une instruction se termine par ; Peut tenir sur plusieurs lignes

    Exemple char v = 'c'; char u = 'd' ;

  • Blocs et instructionsBloc Un bloc de code est dlimit par { et } Contient un ensemble d'instructions

    {instructions}

  • Types natifsJava est un langage de manipulation d'objets Cependant, tout n'est pas objet ! Il existe un nombre fini de types natifs La taille mmoire des types natifs est constant quelque soit la plateforme !

  • Types natifsboolean description type boolen intervalle de variation false ou true espace mmoire 1 bit exemple: boolean var = true;

  • Types natifsboolean (suite)

    Autre exemples boolean v1 = 2;// ERREUR boolean v2 = 'a';// ERREUR Remarque pas de conversion possible vers d'autre types

  • Types natifsbyte description type octet sign

    intervalle de variation [-128 ; +127] espace mmoire 8 bits exemple byte var = 0x12;

  • Types natifsbyte (suite)

    Autres exemples byte v1 = 12;// initialisation base 10 byte v2 = 'a';// initialisation caractre byte v3 = "toto";// ERREUR

  • Types natifschar

    description caractre unicode

    intervalle de variation [0 (\u0000); 65535 (\uFFFF)] espace mmoire 16 bits exemple char var = 'a';

  • Types natifschar (suite) Autre exemples char v1 = 12; char v2 = "ab";// ERREUR char v3 = 0x12; char v4 = \u0014;

    Remarque entour de cotes simples

  • Types natifsshort

    description entier court sign

    intervalle de variation [-32768 ; 32767 ] espace mmoire 16 bits exemple short var = 1452;

  • Types natifsint

    description entier sign

    intervalle de variation [-2147483648 ; 2147483647 ] espace mmoire 32 bits exemple: int v = -123;

  • Types natifslong

    description entier long

    intervalle de variation [-9223372036854775808 ; 9223372036854775807 ] espace mmoire 64 bits exemple: long v = 1524454;

  • Types natifsfloat description virgule flottante simple prcision

    intervalle de variation [1.401e-045 ; 3.40282e+038 ] espace mmoire 32 bits exemple float v = 123.45;

  • Types natifsdouble

    description virgule flottante double prcision

    intervalle de variation [2.22507e-308 ; 1.79769e+308 ] espace mmoire 64 bits exemple double v = 123.45;

  • AttentionL'affectation numrique peut gnrer des ambiguts ! Problmatique: Quel est le type des variables suivantes: 'a'char 0x12int 123int 123.45double?

  • AttentionProblmatique (suite) long v = 922337203685477508;// ERREUR car la valeur numrique est de type int erreur de type 'out of range' car la borne sup. du type int ( v >> 2147483647 )

    Effet pervers long v = 152454*2243*100; L'valuation numrique de v est 34195432200 (

  • Valeur numriquesQuestion Comment crer une valeur numrique de type long ??

    Suffixe numrique

    type long:nombrel ou nombreL

    type float:nombref ou nombreF

    type double:nombred ou nombreD

  • Valeur numriquesExemples: long v = 922337203685477508L; long v = 152454L*2243*100; System.out.println("v=" + v); Affichev=34195432200

  • Les variablesUne variable possde:

    un identifiant

    un type

    une valeur

  • Les variablesDclaration simple type identifiant ; Dclaration multiple type identifiant_1, identifiant_2(, ) ;

    Dclaration affectation simple type identifiant = valeur;

    Dclaration affectation multiple type identifiant_1 = valeur_1, identifiant_2 = valeur_2(, ) ;

  • Les variablesDclaration / Dfinition type identifiant = valeur; Remarques: valeur doit tre de mme type que type OU tre le type de la variable doit tre 'plus grand' que celui de la valeur

    une variable devrait toujours tre initialise

  • Les variablesExemples: int v = 12.3;// ERREUR double v = 12;// OK short u = 12345;// OK short u = 123456;// ERREUR (conv. int -> short)

  • VisibilitLa port d'une variable:

    commence l'endroit o elle est dclare

    est limit au bloc o elle est dclare

    Exempleporte de c

  • VisibilitQuels sont les cas corrects ?

    int c;{

    int c;

    }

    char c;{

    int c;

    }

    {

    int c;

    }char c;FAUXFAUXOK

  • JavaStructures de contrle

  • Les branchements conditionnelsA quoi a sert ? Effectuer un traitement spcifique excut uniquement lorsqu'une condition est respecteConditionsuite du programmeTraitement conditionnouinon

  • Les branchements conditionnelsExemple Afficher la valeur absolue d'un nombre Lire (a) Si (a < 0), Alors a = - a; Fin Si Afficher ( a )

  • Les branchements conditionnelsen algorithmique Si expression_conditionnelle, Alors

    traitement

    FinSi

  • Les branchements conditionnelsen Javaif (a < 0) {a = -a;}System.out.println(a);

  • Les branchements conditionnelset sinon ??? Gestion d'un traitement alternatifConditionsuite du programmeTraitement conditionnouinonTraitement conditionn

  • Les branchements conditionnelsExemple: Trouver le maximum de deux nombres ?? Formalisme mathmatique max2 (a,b)max(a,b) ??

  • Les branchements conditionnelsen algorithmique Si expression_conditionnelle, Alors

    traitement_si_oui

    Sinon

    traitement_si_non

    FinSi

  • Les branchements conditionnelsen Javaif (a > b) {System.out.println(a);}else {System.out.println(b);}

  • Les bouclesA quoi a sert ? criture simplifie d'actions rptitives Pourquoi faire n fois la mme chose Alors qu'on peut faire 1 fois les n choses ? condition de bouclage vrifieensembled'instructionssortiedpartOUINON

  • Les bouclesComment a marche ? Initialiser l'tat de dpart: inventaire des hypothses de dpart: initialisation

    Construire le corps de la boucle: inventaire des instructions rptitives

    Condition d'arrt condition pour sortir de la boucle

  • Les boucles: Un exempleAfficher les nombres de 0 10 Afficher 0Afficher 1Afficher 2Afficher 3Afficher 4Afficher 5Afficher 6Afficher 7Afficher 8Afficher 9Afficher 10

  • Les boucles: Un autre exempleAfficher les nombres de 0 100

    Afficher 0Afficher 1Afficher 2Afficher 3Afficher 4Afficher 5Afficher 6Afficher 7Afficher 8Afficher 9Afficher 10Je suis entrain de faire toujours la mme chose !!!

  • Les boucles: AnalyseQuel est le point commun ?

    Afficher 0Afficher 1Afficher 2Afficher 3Afficher 4Afficher 5Afficher 6Afficher 7Afficher 8Afficher 9Afficher 10

    Le point commun est Afficher (i) i part de 0 jusqu' 10 inclus

  • Les boucles: AnalyseQuel est le 1er tat souhait ? Afficher 0

    Quel est le dernier tat souhait ? Afficher 10 Que se passe t'il entre le 1er et le dernier tat ??

  • Les boucles: AnalyseBesoin de stocker l'tat Utilisation d'une variable d'tat Exemple: variable entire i Etat initiali=0Etat finali=10

    et entre deux tats successifs ? i est incrment de 1 i=i+1

  • Les bouclesCondition d'arrt Remarque: Trouver la condition pour sortir, c'est aussi difficile de trouver la condition pour rentrer dans le corps de boucle ? Afficher ( i ) i = i + 1Etat finalInitialisation (tat de dpart)i = 0OUINONQuel est la condition qui permet de rejoindre l'tat final ? (Condition d'arrt)Corps de boucle

  • Les bouclesCondition de bouclage ? L'tat initial est i=0, On doit rejoindre l'tat final i=10 (inclus !!)? Afficher ( i ) i = i + 1Etat finalInitialisation (tat de dpart)i = 0OUINONCorps de bouclei 10

  • Les boucles et en algo ? i=0

    TantQue i10, Faire

    Afficher (i)

    i = i + 1

    FinTantQue

    InitialisationCondition d'arrtCorps de boucle

  • Les bouclesFinalement, en Java TantQuewhile i=0;while (i
  • JavaLes oprateurs

  • Les oprateursA quoi a sert:

    manipuler

    sparer

    comparer

    stocker

    des valeurs

  • Les oprateursLes oprateurs peuvent tre classifi:selon le nombre d'oprandes:

    oprateurs unaires

    oprateurs binaires

    oprateurs ternaires

    selon leur champ d'action:

    oprateurs arithmtiques

    oprateurs de comparaisons

    oprateurs boolens

    oprateurs d'affectation

    oprateurs bit bit

  • Les oprateursPriorit des oprateurs A chaque oprateur est associ un niveau de priorit Sert indiquer l'ordre dans lequel s'effectue les oprations Exemple: 2 + 3 * 4 = 20 ou 14 ??

  • Les oprateursPriorit des oprateurs Que dire d'une expression utilisant plusieurs fois le mme oprateur ? Exemple: 2*3*4 ?? valuation de gauche droite

  • JavaLes oprateurs arithmtiques

  • Les oprateurs arithmtiquesCaractristique Soit {E,F,G} {boolean, byte, short, int, long, float, double} Un oprateur dfini une application de loi externe: E x FG o G = E ou G = F

  • Les oprateurs arithmtiquesSigne positif catgorie:unaire oprateur:+

    priorit:1 exemples:+a +(a-b) +7

  • Les oprateurs arithmtiquesSigne ngatif catgorie:unaire oprateur:-

    priorit:1 exemples:-a -(a-b) -7

  • Les oprateurs arithmtiquesMultiplication catgorie:binaire oprateur:*

    priorit:2 exemples:5 * 412.7*(-8.35)5*2.6a*2

  • Les oprateurs arithmtiquesDivision catgorie:binaire oprateur:/

    priorit:2 exemples:5 / 412.7 / 2a/2.

  • Les oprateurs arithmtiquesReste catgorie:binaire oprateur:%

    priorit:2 exemples:5 % 23 % ax % y

  • Les oprateurs arithmtiquesAddition catgorie:binaire oprateur:+

    priorit:3 exemples:5 + 42.7 + (-8.3)5 + 2.6a + 2

  • Les oprateurs arithmtiquesSoustraction catgorie:binaire oprateur:-

    priorit:3 exemples:5 - 412.7-(-8.35)5-2.6a-2

  • Les oprateurs arithmtiquesExemples d'utilisation int x = 5, y; float a, b = 5; y = x / 2;

    y = b / 2;

    y = b / 2.; a = b / 2;

    a = x / 2;

    a = x / 2f;Rsultat x = 5y = ??? Commentaire2 variables dclaresRsultat a = ???b = 5.0 Commentaire2 variables dclaresRsultat y = 2 Commentaireoprandes de type int rsultat de type intRsultat ERREUR DE CONVERSION Commentaireconversion automatique impossible(de float vers int)Rsultat ERREUR DE CONVERSION Commentaireconversion automatique impossible(de float vers int)Rsultat a=2.5 Commentaireoprations sur 2 floatrsultat de type floatRsultat a=2.0 Commentaireoprations sur 2 intrsultat de type int conversion auto. int -> floatRsultat a=2.5 Commentaireopration (int, float)rsultat de type float

  • Les oprateurs arithmtiquesRemarque le cas "y = b / 2" engendre une erreur Rappels:y de type intb de type float

    Solutions: y = (int)b/2;// transtypage de b en int avant division

    y = (int)(b/2);// transtypage du rsultat de la division

  • Les oprateurs arithmtiquesIncrmentation catgorie:unaire (post ou pr fixe) oprateur:++

    priorit:1 exemples:a++;++a;

  • Les oprateurs arithmtiquesDcrmentation catgorie:unaire (post ou pr fixe) oprateur:--

    priorit:1 exemples:a--;--a;

  • Les oprateurs arithmtiquesPost-incrmentation:k++; Effet: la valeur de k est utilise dans l'instruction, puis incrmente de 1 Exemple int k = 5, n;

    n = k++ - k;

    n=-1, k=6

  • Les oprateurs arithmtiquesPr-incrmentation:++k;

    Effet: la valeur de k est d'abord augmente de 1 puis utilise dans l'instruction, int k = 5, n;

    n = k++ + ++k;

    n=12, k=7

  • Les oprateurs arithmtiquesPost-dcrmentation:k--; Effet: la valeur de k est utilise dans l'instruction, puis dcrmente de 1 Exemple int k = 5, n;

    n = k-- - k;

    n=1, k=4

  • Les oprateurs arithmtiquesPr-dcrmentation:++k;

    Effet: la valeur de k est d'abord diminue de 1 puis utilise dans l'instruction, int k = 5, n;

    n = k-- - --k;

    n=7, k=3

  • Les oprateurs arithmtiquesRsum

  • JavaLes oprateurs de comparaison

  • Les oprateurs de comparaisonUn oprateur de comparaison renvoie un rsultat de type boolean (false ou true)

  • Les oprateurs de comparaisonInfriorit stricte catgorie:binaire oprateur:

    priorit:5 exemples:a>53>22>b

  • Les oprateurs de comparaisonInfriorit large (ou galit) catgorie:binaire oprateur:
  • Les oprateurs de comparaisonSupriorit large catgorie:binaire oprateur:>=

    priorit:5 exemples:a>=53>=22>=b

  • Les oprateurs de comparaisonEgalit catgorie:binaire oprateur:==

    priorit:6 exemples:a==53==22==b x+1==2

  • Les oprateurs de comparaisonDiffrence (non galit) catgorie:binaire oprateur:!=

    priorit:6 exemples:a!=53!=22!=b x+1!=2

  • Les oprateurs de comparaisonRsum

  • JavaOprateurs boolens

  • Oprateurs boolensOprateurs classique de l'algbre de Boole Le rsultat est boolen (true ou false)

  • Les oprateurs boolensET catgorie:binaire oprateur:&

    priorit:7 exemple:a & b

  • Les oprateurs boolensOU catgorie:binaire oprateur:|

    priorit:9 exemple:a | b

  • Les oprateurs boolensNON catgorie:unaire oprateur:!

    priorit:1 exemples:!a

  • Les oprateurs boolensOU-EXCLUSIF catgorie:binaire oprateur:^

    priorit:7 exemples:a^b

  • Les oprateurs boolensOU-optimis Postulat: Si A est vrai, alors (A ou x) est vrai, quelque soit x(x{faux, vrai}) Si A est faux, alors Le rsultat dpend exclusivement de x Consquence: optimisation de l'valuation de l'expression

  • Les oprateurs boolensET-optimis Postulat: Si A est faux, alors (A et x) est faux , quelque soit x(x{faux, vrai}) Si A est vrai, alors Le rsultat dpend exclusivement de x

    Consquence: optimisation de l'valuation de l'expression

  • Les oprateurs boolensRsum

  • JavaLes oprateurs bits bits

  • Les oprateurs bits bitsDomaine de dfinition Les oprateurs bits level agissent exclusivement sur des oprandes de type entier ou caractre: short, int, long, char, byte

    Permettent de manipuler directement les bits du mot mmoire associ la donne

  • Les oprateurs bits bitsComplment catgorie:unaire oprateur:~

    priorit:1 exemples:

    5// 0000000000000000000000000101~5// 11111111111111111111111111111010

  • Les oprateurs bits bitsEt catgorie:binaire oprateur:&

    priorit: exemples:

    a=4;// 000000000000000000100b=3;// 000000000000000000011r=a&b;// 000000000000000000000

  • Les oprateurs bits bitsOu catgorie:binaire oprateur:|

    priorit: exemples:

    a=4;// 000000000000000000100b=3;// 000000000000000000011r=a|b;// 000000000000000000111

  • Les oprateurs bits bitsdcalage gauche catgorie:binaire oprateur:
  • Les oprateurs bits bitsdcalage sign droite catgorie:binaire oprateur:>>

    priorit:4 exemples:

    5 >> 2 // 00000000000000000000000000000001-5 >> 0 // 11111111111111111111111111111011-5 >> 1 // 11111111111111111111111111111101-5 >> 2 // 11111111111111111111111111111110

  • Les oprateurs bits bitsdcalage non sign droite catgorie:binaire oprateur:>>>

    priorit:4 exemples:

    5 >>> 2 // 00000000000000000000000000000001-5 >>> 0 // 11111111111111111111111111111011-5 >>> 1 // 01111111111111111111111111111101-5 >>> 2 // 00111111111111111111111111111110

  • Les oprateurs bits bitsRsum

  • JavaLes oprateurs d'affectation

  • Les oprateurs d'affectationL'affectation Le symbole d'affectation est = Exemple: x = y; signifie que le contenu de la variable y est recopi dans l'espace mmoire associ la variable x Attention: x est obligatoirement une variable

  • Les oprateurs d'affectationExempleint a , b = 56 ;a = (b = 12)+8 ; // b prend une nouvelle valeur dans l'expressiona = b = c = d =8 ; // affectation multiple

  • Les oprateurs d'affectationRaccourcis Soit op un oprateur parmi l'ensemble {+, -, *, /, %, , >>>, &, |, ^} Alors l'instruction x op= y; est un raccourci de x = x op y;

  • Les oprateurs d'affectationExemplesint a , b = 56 ;a = -8 ;a += b ; // quivalent : a = a + bb *= 3 ; // quivalent : b = b * 3

  • Les oprateurs d'affectationRaccourcis et optimisation de code L'instructiontab[f(a)] = tab[f(a)] + x; a pour raccourcitab[f(a)] += x;

    L'appel la fonction f est effectu 1 fois au lieu de 2

  • JavaLes tableaux

  • Les tableauxDfinition Un tableau est un ensemble contigu dlments de mme type Dclaration: type [] variable; otype est un type natif ou un objetvariable est le nom associ la cellule contenant ladresse mmoire o est stock le premier lment du tableau

  • Les tableauxStockage dun tableau en mmoire

    Mmoire-43-2100x1353int a=2, b=4;int [] tab = {-4, 3, -2, 1, 0};

  • Les tableauxAccs Laccs aux lments du tableaux est ralis laide de loprateur [] Exemple: Mmoire-43-2100x1353int a=2, b=4;int [] tab = {-4, 3, -2, 1, 0}; int v = tab[2];

  • Les tableauxLoprateur daccs Que ralise exactement loprateur [ ] ? Il agit sur le nom de la variable associ au tableau contenu: ladresse du premier lment

    Loprateur contient un index (tab[index]) index est le dcalage en octet modulo la taille de la donne partir de ladresse du premier lment -43-2100x1353tab[2] quivaut 0x1353 + 2 * (taille dun entier) soit0x1353 + 2*4 = 0x135b

  • Les tableauxExemples de construction de tableaux: long [] t1 = {1L, 4L, 2L}; String [] t2 = {"iut", "rt", "chalons"}; Tableaux de tableaux Exemple de cration de tableaux 2D: int [][] M1 = {{1,2}, {3,4}}; int [][] M2 = {{1},{2,3},{4,5,6}};

  • Les tableauxint [][] M = {{1},{2,3},{4,5,6}};Mmoire0x21190x05f20x25ba10x1353456230x21190x05f20x25ba

  • Les tableauxOprateur d'accs int [][] M = {{1},{2,3},{4,5,6}}; M[0][0] = 1 M[1][0] = 2 M[2][1] = 5 Attention M[1][2] n'existe pas !!! Toute tentative d'accs un lment inexistant dclenche une erreur l'excution !!

  • JavaClasseMthodes de classesMthodes d'instance

  • Les classesDfinition Une classe est un regroupement de fonctionnalits lies un mme concept

    Une classe est une structure, ou ensemble construit, qui constitue la base de l'objet

    Exemple:NombreIndividuAdditionnerAvancerReculerTournerSoustraireMultiplierDiviser

  • Les classesSur l'exemple du concept d'Individu Un Individu peut:

    Avancer (en avant) Paramtres lis:Position de dpart ? Direction ? Rsultat:Nouvelle position

  • Les classesTourner Paramtres lis:Direction initiale ? Gauche ou Droite ? Rsultat:Nouvelle direction

  • Les classesSynthseIndividuAvancer (Position p, Direction d) => PositionTourner (Direction d, Sens s) => Direction

  • Les classesSynthse Avancer et Tourner possde suffisamment d'information pour pouvoir s'excuter dans le contexte d'Individu: Avancer et Tourner sont des mthodes de classes En Java: Ces mthodes commencent par le mot cl static

  • De la classe l'objetLe concept d'Individu dfinit l'ensemble des actions propres n'importe quel Individu Supposons que Toto soit un Individu Toto sait alors:

    Avancer Tourner Car il appartient la famille des Individu !!!

  • De la classe l'objetQuel est la diffrence entre Toto et Individu ??

    Individu est la classe Toto est un Individu personnalis: Toto est un Individu avec une information d'tat

    Toto est une instance de la classe Individu

  • De la classe l'objetRsum intermdiaire: Une classe est une dfinition d'un concept Elle peut comporter:

    des attributs propres au concept

    des mthodes de classes (static) reprsentant des actions non propres une instance particulire

    Exemple: Tous les bipdes humanodes possdent 2 jambes ! BipedeHumanoideAttributs de classe static final int nb_jambes=2; Mthodes de classe static int NbJambes();

  • De la classe l'objetRsum intermdiaire (suite) On peut personnaliser une classe en crant une instance de classe (oprateur new) Exemple: Un bipde humanode peut possder un nom, qui diffre selon les cas

    BipedeHumanoideAttributs de classe int nb_jambes; Mthodes de classe int NbJambes();Mthodes d'instance void setNom(String n) String getNom()Attributs String nom;

  • De la classe l'objetConcepts d'attributs Qu'est-ce qui caractrise une instance d'Individu ? Un Individu possde: Une position

    Une direction

    Ce sont ses attributs

  • De la classe l'objetConcepts d'attributs (suite) Attention: Peut-on initialiser les attributs:

    pour tout Individu ??

    ou pour un Individu particulier ?? Rponse: un Individu particulier

  • De la classe l'objetRsum: un Individu possde une position et une direction Toto connat sa position et sa direction Rappels Nous avions dfini les mthodes de classes suivantes:Avancer (Position p, Direction d) => PositionTourner (Direction d, Sens s) => Direction

    Or: Les paramtres p et d sont lis l'Individu Ce sont ses attributs !

  • De la classe l'objetFinalement, si l'Individu connat sa position et sa direction (informations d'tat), certains paramtres des mthodes Avancer et Tourner deviennent inutiles:

    Avancer (Position p, Direction d) => PositionTourner (Direction d, Sens s) => Direction Les mthodes de classes deviennent des mthodes d'instance:

    Avancer ()Tourner(Sens s)

  • De la classe l'objetDmonstration: Toto est dans l'tat suivant:position:(i,j)direction:Nord

    Demandons Toto de tourner gauche Appel la mthode d'instance de l'objet Toto: On crit: Toto.Tourner(Gauche) Nouvel tat:position:(i,j)direction:Ouest

  • Direction d = Individu.Tourner (Nord, Gauche)

  • De la classe l'objetComment faire natre Toto ? Toto est un Individu particulier Pour le faire natre, il faut faire appel au constructeur d'Individu Rle du constructeur Il permet de crer une instance de la classe pour dfinir un nouvel objet

    Il doit renseigner les attributs de la classe pour lui donner un tat stable

    Il est appel par l'instruction new

  • De la classe l'objetEn Java: Individu Toto = new Individu (i, j, Nord) Permet de crer un objet, instance de la classe Individu caractris par sa position (i,j) et sa direction (Nord)

  • De la classe l'objetAttention !!! On ne peut utiliser un objet QUE lorsqu'il est construit ! Exemple: Individu toto;

    toto.Tourner(Gauche);// NON VALIDE CAR toto n'est pas construit // Construction d'un Individutoto = new Individu (1,4,Nord);toto.Tourner(Gauche);// OK

  • SynthseIndividu

    Individu est une classe gnrique(sans tat)Individu Toto = new Individu (2, 5, nord)Individu Titi = new Individu (3, 2, est)

  • Remarque importanteSoit l'objet suivant: Point p1, p2, p3;p1 = new Point (1,2);Espace mmoireEspace des variablesProgrammep1p2p2 = new Point (3,4);p3 = p2;p3p2 = p1;

  • Formalisme de dclaration de mthodeUne dclaration de mthode est constitue:

    d'une entte comportant les diffrents paramtres et leurs types respectifs ainsi que le type de retour

    d'un corps de fonction comportant l'ensemble des instructions excuter

  • Cas des mthodes de classesDiagramme synoptiquestatictype du rsultatnom de la fonction()liste de paramtres{instructions}Type du rsultat: une mthode peut gnrer un rsultat d'un type quelconque (natif ou objet). Ce type est obligatoire.Une mthode ne gnre pas forcment de rsultat: le type de retour est voidNom de la fonction: identificateur, de prfrence au formalisme Java: le nom devrait tre une action, premire lettre de chaque mot en majuscule, sauf pour le premier motListe des paramtres Semblable la dclaration des variables (sans initialisation) Peut-tre vide

  • Cas des mthodes de classesAttention: Une mthode de classe ne peut appeler qu'une mthode de classe. En aucun cas une mthode de classe ne peut appeler une mthode d'instance !!

  • Cas des mthodes d'instanceDiagramme synoptique

    type du rsultatnom de la fonction()liste de paramtres{instructions}Signification semblable aux mthodes de classe

  • Retour de fonctionLe mot clef rserv return demande une fonction de se terminer en retournant un rsultat: return [expression];

    L'valuation de l'expression doit procurer un type compatible avec celui nonc dans la dfinition de la fonction L'appel l'instruction return; (sans expression) permet de sortir d'une fonction ne procurant pas de rsultat

  • Type de retourLa mthode retourne un rsultat Dfinition: static int f (int v) { int y=3 + v; return y; } Appel: int r = f(12);

  • Type de retourLa mthode ne retourne pas de rsultat type de retour: void Dfinition: static void afficherNombre (int v) { System.out.println("Nombre: " + v); } ou bien static void afficherNombre (int v) { System.out.println("Nombre: " + v); return; } Appel: afficherNombre(3);

  • Mthode de classe o d'instance ??La diffrence est stratgique: Mthode non spcifique l'tat de l'objet:

    Mthode de classe(mot clef:static)

    Mthode modifiant l'tat de l'objet (de l'instance)

    Mthode d'instance(aucun mot clef)

  • Quelques exemplesAttributs d'instance, mthodes d'instancepublic class Individu {

    enum orientation { nord, sud, est, ouest };enum sens { gauche, droite };

    int i, j;// attributs d'instanceorientation dir;// " "

    public void tourner (sens s) {switch (dir) {case nord:dir = s == sens.gauche ? ouest : est;break;case sud:}}}

  • Quelques exemplesAttributs statiques, mthodes de classes statiques public class Math {

    static final double Pi = 3.141592653569; static double cos (double x) {}}Dfinition d'une constanteFonction trigonomtrique appartenant au concept Math mais n'influe pas sur l'tat

  • ConstructeurDfinition Un constructeur est une mthode spcifique permettant:de crer une nouvelle instance d'objetde l'initialisant pour le placer dans un tat cohrent

    Exemple:

  • Transmission de paramtreExpos du problme: Soit la mthode de classe suivante: public static void afficher (double v) { System.out.println("v=" + v); } Quels sont les appels valides ? afficher (1.4d);afficher ('a');afficher (1.4f);afficher ("coucou");

  • Compatibilit de typeLa compatibilit de type s'effectue dans le sens: Qui peut le plus peut le moins Soit techniquement: Un type de n bits acceptera un type de p bits, o p
  • Compatibilit de typeExemple: public static void afficher (long v) { System.out.println("v=" + v); } Que produit l'appel suivant: afficher('a');

    Rponse: v=97

  • Transmission de paramtresDeux mthodes de transmission de paramtre:

    par valeur La fonction appele reoit une copie locale du paramtre Toute modification n'influe pas sur la variable de la fonction appelante

    par rfrence

    La fonction appele reoit une rfrence directe sur le paramtre de la fonction appelante

    Toute modification est directement rpercute sur la variable de la fonction appelante

  • Transmission de paramtresExemplepublic class Essai {public static void f1 (int x) {x=2;}

    public static void main(String [] args) {int i=1;System.out.println("i=" + i);f1(i);System.out.println("i=" + i);}}Rsultat:

    i=1i=1

  • Transmission de paramtrespublic static void main(String [] args) { int i=1; System.out.println("i=" + i); f1(i); System.out.println("i=" + i);}public static void f1 (int i) { i=12;}copie de i

  • Transmission de paramtresTransmission d'instance d'objet Soit l'objet suivantpublic class Point {int x, y;// coordonnes 2D du points

    Point (int a, int b) {x=a;y=b;}

    public static void initPoint (Point p) {p.x=0;p.y=0;}}Fichier Point.java

  • Transmission de paramtresEspace des variablesEspace mmoire// Ficher Point.java

    public class Point { public int x, y;

    Point (int a, int b) { x=a; y=b; }

    public static void initPoint (Point p) { p.x=0; p.y=0; }}// Ficher Main.java

    public class Main { public static void main (String[] args){ Point t = new Point(1,2); System.out.println("t.x=" + t.x); Point.initPoint(t); System.out.println("t.x=" + t.x); }}tp

  • SurchargeDeux mthodes membres quiappartiennent la mme classeportent un identificateur identique (mme nom de fonction)possdent des paramtres diffrents

    sont des mthodes surcharges

  • SurchargeExemple: Un point gomtrique peut tre dfini par:

    ses coordonnes donnes explicitement Point (int i, int j) { x=i; y=j; }

    un autre Point Point (Point p) { x=p.x; y=p.y; }

  • SurchargeExemple (suite):

    des coordonnes par dfaut Point () { x=0; y=0; }

    Soit: Point (int i, int j) Point (Point p) Point () 3 mthodes portant des signatures diffrentes

  • SurchargeAttention: Pas de diffrenciation sur le type de retour Exemple:

    int f (int v)

    et

    double f (int v)

    ne sont pas diffrentiable

  • Tableaux (le retour)Rappel Dclaration initialise d'un tableau: int [] tab = { 1, 2, 3}; Si la taille n'est pas connue la compilation, alors: int [] tab; Attention: Seule la rfrence nomme tab un tableau non construit est ralise !! Construction lors de l'excution: tab = new int [n];

  • Tableaux (le retour)Proprits particulires: int [] tab = new int [30]; Proprit de longueur: System.out.println("nb elt dans tab: " + tab.length); Synthse: Affichage des lments d'un tableau d'entier de taille quelconque: static void afficheTableau (int [] tab) { int i=0; while (i < tab.length) { System.out.println(tab[i++]); } }

  • JavaLa scurit d'accs lies aux attributs et aux mthodes visibilit mots clef public / protected / private

  • IntrtExemple de l'individu Supposons qu'un objet Individu soit cre Il possde:

    une position : Point pos;

    une direction: direction dir;

  • IntrtExemple (suite): L'individu est cre selon un cahier des charges Entre autre, la position est relative au labyrinthe ! pos.x >= 0 ET pos.x = 0 ET pos.y
  • IntrtExemple (suite): Un usage malheureux de l'objet place l'individu dans une position incohrente: Individu Toto = new Individu (2,3,Nord); Toto.pos.x = -4;// !!! Toto.Avancer();// Problme A qui incombe la faute ??

  • Attributs/Fonctions usage publique/priveLe crateur de l'objet doit laisser ou non l'accs aux attributs / fonctions membres ! Exemple: class Point { private int x, y; public Point () { } private void modificationInterne() { } }Variable usage interneAccs interdit depuis l'extrieur de la classeUn constructeur accessible depuis l'extrieurMthode usage interne la classe: ne doit pas tre appele l'extrieur

  • Attributs/Fonctions usage protgUn attribut ou une mthode dclare protected est accessible uniquement par les classes dclare dans le mme fichier Exemple: // Fichier: A.java

    public class A { public int x; protected int y; private int z; }

    class B { public void f (A p) { int x = p.x;// CORRECT int y = p.y;// CORRECT int z = p.z;// INCORRECT }}

  • Classe publique / priveClasse publique Rappels:

    Une classe publique est enregistre dans un fichier portant le nom de la classe Un fichier ne contient qu'une classe publique Usage du mot-cl public Une classe publique est accessible par tout fichier important la classe: import package.MaClasse;

  • Classe publique / priveClasse prive Une classe prive peut tre dclare dans un fichier contenant une ou aucune classe publique Une telle classe n'est visible que par les classes du mme package Attention: pas de mot-cl spcifique !!! private class A {// INCORRECT ... }

  • Scurit et visibilitExemples// Fichier: A.java

    package P;

    public class A { public A () { }}

    class B { public B () { A a = new A(); // CORRECT }}// Fichier: C.java

    package P;

    public class C { public C() { A a = new A(); // CORRECT B b = new B(); // CORRECT }}

    // Fichier: D.java

    // Pas de package import P.*;

    public class D { public D () { A a = new A(); // CORRECT B b = new B(); // INCORRECT C c = new C(); // CORRECT }}

  • JavaPackaging

  • Les packagesPrincipe

    Les classes fournies avec le JDK (Java Development Kit) ou par d'autres sources sont ranges dans des packages

    Un package est comparable un groupe rassemblant des classes par thme

  • Les packagesmot-cl import

    Dans un programme, il est ncessaire d'indiquer les classes qui seront utilises

    Ces clauses d'importation se place en dbut de fichier:

    Exemples: // importer une classe sans package import nomClasse; // importer une classe d'un package import nomPackage.nomClasse; // importer toutes les classes d'un package import nomPackage.*;

  • Les packagesmot-cl import (suite) La classe nomClasse peut correspondre soit

    un fichier source nomClasse.java,

    un fichier compil nomClasse.class, dans lequel est dfinie la classe public importer

  • Les packagesUn package reprsente une arborescence indiquant au compilateur quel chemin il faut emprunter pour retrouver la classe.

    Exemple: si le package est java.util, -> recherche dans le rpertoire java/util (ou java\util sous Windows)

    La variable d'environnement CLASSPATH dfini la position des packages

  • Les packagesLimitationL'importation d'un package se limite ses classes propres !Pas d'importation des classes utilises par le package !

    Ncessit d'importer chacun d'entre eux

  • Les packagesSynthseimport nomPackage.nomClasse;nomPackage

  • Les packagesSynthseimport nomPackage.*;

  • Les packagesSynthseimport nomPackage.*;Ces objets ne sont plus accessibles

  • Les packagesCrationmot-cl packagepermet de crer une bibliothque

    rassemble des objets d'un mme thme

    dfini un groupe d'outils pour une utilisation dans plusieurs projet

    Exemple: // toujours en amont du fichier source package monPackage;

  • Les packagesUtilisationPackage outilspackage outils;

    public class Classe1{}class Classe2{}package outils;

    class Classe3{ Classe1 var1; Classe2 var2; // }Classe1.javaClasse3.javaimport outils.Classe1;

    public class Classe4{ Classe1 var1; // }Classe4.java

  • JavaFin du module I3