• Aucun résultat trouvé

cm02-heritage.pdf — March 1, 2005 — 1

N/A
N/A
Protected

Academic year: 2021

Partager "cm02-heritage.pdf — March 1, 2005 — 1"

Copied!
10
0
0

Texte intégral

(1)

as

Architecture des Systèmes d’Information

Plan Quelques sp´ecificateurs Types ´enum´er´es H´eritage

Programmation - Classes et H´ eritage -

Nicolas Malandain

March 1, 2005

Programmation - Classes et H´eritage - 1 / 38

as

Architecture des Systèmes d’Information

Plan Quelques sp´ecificateurs Types ´enum´er´es H´eritage

1 Quelques sp´ecificateurs static

final

2 Types ´enum´er´es Pr´esentation Exemples

3 H´eritage R´eutilisation En Java Polymorphisme La classe Object

Programmation - Classes et H´eritage - 2 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es H´eritage static final

Attributs et M´ ethodes de classe

Propri´et´es

Les membresstatic:

ne sont pas attach´es `a une instance ont une existence avant instanciation ne peuvent acc´eder aux membres non static sont partag´es par toutes les instances

Syntaxe

class NomClasse {

acc`es static type attribut;

acc`es static type methode(...);

}

Plan Quelques sp´ecificateurs Types ´enum´er´es H´eritage static final

Attributs de classe

initialis´es dans la classe (au chargement) acc`es par la classe ou une instance

Utilisation : information commune `a des instances (constantes), compteur de r´ef´erences, . . .

M´ethodes de classe

ne peuvent acc´eder qu’aux membresstatic acc`es par la classe ou une instance

Utilisation : boite `a outils (Math), manipulation d’instances de la classe, . . .

(2)

Plan Quelques sp´ecificateurs Types ´enum´er´es H´eritage static final

Initialisateur static

Permet l’initialisation complexe de membresstatic

Syntaxe

class NomClasse { static {

// instructions }

}

Programmation - Classes et H´eritage - 5 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es H´eritage static final

Exemples

ClasseCompteur.java

packagefr.insarouen.asi.cours2;

public class ClasseCompteur { private static int compteur=0;

public ClasseCompteur() { compteur++;

}

public static int getNbObjetConstruits() { returncompteur;

}

public static voidmain(String[] args) {

System.out.println("Nb objets construits : "+ClasseCompteur.getNbObjetConstruits());

ClasseCompteur[] cc=newClasseCompteur[10];

for(inti=0;i<10;i++) cc[i]=newClasseCompteur();

System.out.println("Nb objets construits : "+ClasseCompteur.getNbObjetConstruits());

} }

Programmation - Classes et H´eritage - 6 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es H´eritage static final

Hasard.java

packagefr.insarouen.asi.cours2;

importjava.util.Random;

public class Hasard {

private static final int NB_VAL = 20;

private static int[] sequenceAleatoire =new int[NB_VAL];

private Random aleatoire;

static {

Random alea=new Random();

for(inti=0; i<NB_VAL; i++)

sequenceAleatoire[i]=alea.nextInt()%100;

}

public Hasard() {

aleatoire =new Random(System.currentTimeMillis());

}

public int getNombre() {

returnsequenceAleatoire[aleatoire.nextInt()%NB_VAL];

} }

Plan Quelques sp´ecificateurs Types ´enum´er´es H´eritage static final

Les significations de final

final= non modifiable

En fonction du contexte final type attribut type simple : valeur constante type objet : r´ef´erence constante

type nomMethode(final type param, ...) le param`etre est constant (cf. ci-dessus) final type nomMethode(...)

la m´ethode ne peut ˆetre red´efinie lors d’un h´eritage private→final

final class NomClasse ...

la classe ne peut ˆetre d´eriv´ee

(3)

Plan Quelques sp´ecificateurs Types ´enum´er´es H´eritage static final

Constantes

Initialisation

Toute constante doit ˆetre initialis´ee : soit `a la d´eclaration

soit dans le constructeur (ou initialisateurstatic) l’initialisation peut ˆetre :

`

a la compilation : la valeur est disponible et elle est plac´ee en dur

`

a l’ex´ecution : la constante est initialis´ee `a l’ex´ecution

Deux “types” de constantes constante d’instance

initialis´ee `a l’instanciation, une constante par instance constante de classe

d´eclar´ee static(init au chargement), une constante unique

Programmation - Classes et H´eritage - 9 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es H´eritage static final

Exemples

Constantes.java

packagefr.insarouen.asi.cours2;

public class Constantes {

public final intvaleurentiere=42;

public final intvaleurAleatoire=(int)(Math.random()*100);

public static final intVALEUR_PLANCHER=200;

public final int[] tableau={1,2,3};

public final intvaleurentiere2;

public Constantes(intvalent) { valeurentiere2=valent;

// valeurentiere=valent;

// VALEUR_PLANCHER=13;

}

public static voidmain(String[] args) { Constantes cnsts=newConstantes(4);

// cnsts.valeurentiere2=3;

// cnsts.tableau=new int[5];

cnsts.tableau[0]=5;

} }

Programmation - Classes et H´eritage - 10 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage Pr´esentation Exemples

D´ efinition et syntaxe

D´efinition

Un type ´enum´er´e permet de d´efinir explicitement un ensemble ordonn´e de valeurs.

Syntaxe

enum NomTypeEnum {VAL1,VAL2, ..., VALn};

D´efinition interne `a une classe (inline) ou externe (publicou non)

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage Pr´esentation Exemples

Syntaxe et fonctionnalit´es

unenum est une classe (d´erive dejava.lang.Enum) les valeurs sontpublic static final

comparaison via==ouequals()

impl´emente l’interfacejava.lang.Comparable dispose des m´ethodestoString()etvalueOf()a ordinal()⇒position, values()⇒it´eration

a`a la red´efinition de l’une, l’autre doit toujours avoir la fonctionnalit´e inverse

(4)

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage Pr´esentation Exemples

Genre.java

packagefr.insarouen.asi.cours2;

publicenum Genre {MASCULIN, FEMININ};

Informaticien.java

packagefr.insarouen.asi.cours2;

public classInformaticien {

// un enum dans une classe est static

publicenum Type {NOUVEAU, DEBUTANT, CONFIRME, GOUROU};

private Type type;

private Genre genre;

publicInformaticien(Type _type, Genre _genre) { type=_type;

genre=_genre;

}

publicInformaticien(String strType, String strGenre) { type=Type.valueOf(strType);

genre=Genre.valueOf(strGenre);

}

publicString toString() {

return"Informaticien "+genre.toString().toLowerCase()+" "+type.toString().toLowerCase();

} }

Programmation - Classes et H´eritage - 13 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage Pr´esentation Exemples

EnumTest.java

package fr.insarouen.asi.cours2;

public class EnumTest {

public static void main(String[] args) {

Informaticien inf1 = new Informaticien(Informaticien.Type.NOUVEAU, Genre.MASCULIN);

Informaticien inf2 = new Informaticien("GOUROU","FEMININ");

System.out.println(inf1);

System.out.println(inf2);

} }

Programmation - Classes et H´eritage - 14 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

La r´ eutilisation des classes

La r´eutilisation de classes

La relation “a un” : la composition une classe `a pour attribut une classe.

Par exemple : une personne `a une adresse

La relation “est un” : l’h´eritage

une classe (d´eriv´ee) est d´efinie `a partir d’une autre classe (base) Par exemple : un homme est un mammif`ere

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Vocabulaire de l’h´eritage

h´eriter⇔´etendre⇔d´eriver

super-classe⇔classe de base⇔classe m`ere sous-classe⇔classe d´eriv´ee⇔classe fille

Caract´eristiques de l’h´eritage cr´eation d’un nouveau type

contenant les membres du type de base (m´ethodes + attributs) les objets acceptent les messages des objets de la classe de base la classe d´eriv´ee est du type de la classe de base

Comment diff´erencier la nouvelle classe ajouter des nouveaux comportements red´efinir (changer) des comportements

(5)

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Utilisation en Java

H´eritage

class ClasseFille extends ClasseMere { // attributs

// constructeurs et m´ethodes }

superetsuper()

superacc`ede aux attributs (en cas de masquage) et m´ethodes de la classe m`ere

super()appelle un contructeur de la classe m`ere

Remarque

Java ne permet pas l’h´eritage multiple

Programmation - Classes et H´eritage - 17 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Surcharge & Red´ efinition

Surcharge(technique non li´ee `a l’h´eritage)

Cr´eer une m´ethode de mˆeme nom qu’une autre mais avec une signature diff´erente (ordre, type et nombre de param`etres).

Lors de l’envoi de message, le choix de la m´ethode a appeller se fait `a la compilation (invocation statique).

Red´efinition

Cr´eer une m´ethode de mˆeme signature qu’une m´ethode de la classe m`ere, ce qui modifie le comportement pour un mˆeme envoi de message.

Dans ce cas, le choix de la m´ethode `a appeller se fait `a l’ex´ecution (invocation dynamique)

Masquage

Dans une classe fille un attribut de mˆeme nom que dans la classe m`ere masque ce dernier (acc`es viasuper)

Programmation - Classes et H´eritage - 18 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Trois types de polymorphisme

ad-hoc(surcharge)

m´ethodes de mˆeme nom aux fonctionnalit´es similaires dans une mˆeme classe ou dans des classes diff´erentes

par h´eritage (sp´ecialisation)

red´efinition d’une m´ethode d’une classe m`ere dans une classe fille possibilit´e d’envoyer un message `a un objet sans se soucier de son type

exemple : classespiece,pion,fou,roi,... et une m´ethodedeplacer

param´etrique (g´en´ericit´e) cf. cours suivants

possibilit´e de d´efinir des m´ethodes g´en´eriques (abstraction des types) exemple : m´ethode de tri quelque soit le type des objets `a trier

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Le Polymorphisme (par h´ eritage)

Utilit´e

D´efinir un comportement commun dans une classe de base D´ecliner un comportement diff´erent dans des sous-classes Ne pas se soucier du type manipul´e (via la classe de base)

(6)

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Exemple

Heritage.java

packagefr.insarouen.asi.cours2;

public classHeritage {

public static voidmain(String[] args) { Personne p1=newPersonne(Genre.MASCULIN);

Personne p2=newInformaticien2(Informaticien2.Type.DEBUTANT);

Personne p3=newMathematicien(Mathematicien.Type.CONFIRME);

Personne p4=newGeek();

Entreprise entreprise=newEntreprise(5);

entreprise.recrute(p1);

entreprise.recrute(p2);

entreprise.recrute(p3);

entreprise.recrute(p4);

entreprise.execute();

} }

Programmation - Classes et H´eritage - 21 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Entreprise.java

packagefr.insarouen.asi.cours2;

public classEntreprise { privatePersonne[] equipe;

private intplace=0;

public Entreprise(inttailleEquipe) { equipe =newPersonne[tailleEquipe];

}

public booleanrecrute(Personne p) { if (place < equipe.length) {

equipe[place++]=p;

return true;

} return false;

}

public voidexecute() { for(inti=0; i<place; i++) {

System.out.println("--- "+equipe[i]+" ---");

equipe[i].cycleVie();

} } }

Programmation - Classes et H´eritage - 22 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Personne.java

packagefr.insarouen.asi.cours2;

public class Personne { private Genre genre;

publicPersonne(Genre _genre) { genre=_genre;

}

publicPersonne(String strGenre) { genre=Genre.valueOf(strGenre);

}

public voidcycleVie() { manger();

sortir();

dormir();

}

public voidcycleVie(intnbcycles) { for(inti=0; i<nbcycles; i++)

cycleVie();

}

public voidmanger() {

System.out.println("je mange");

}

public voidsortir() {

System.out.println("ouais super, on va en boite");

}

public voiddormir() {

System.out.println("Rrrrrrr zzzzzzz Rrrrrrr zzzzzzzz");

}

publicString toString() {

return"Personne "+genre.toString().toLowerCase();

} }

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Mathematicien.java

packagefr.insarouen.asi.cours2;

public class MathematicienextendsPersonne {

publicenum Type {NOUVEAU, DEBUTANT, CONFIRME, GOUROU};

private Type type;

publicMathematicien(Type _type) { super(Genre.MASCULIN);

type=_type;

}

publicMathematicien(Type _type, Genre genre) { super(genre);

type=_type;

}

public voidsortir() {

System.out.println("On s’fait une r´eunion sur les SVM");

}

public voidresoudreEquations() {

System.out.println("P(A|B) = P(AnB)/P(B)");

}

publicString toString() {

return super.toString()+" : mathematicien ("+getType()+")";

}

publicType getType() { returntype;

}

public voidcycleVie() { manger();

resoudreEquations();

sortir();

dormir();

} }

(7)

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Informaticien2.java

packagefr.insarouen.asi.cours2;

public class Informaticien2extendsPersonne { // un enum dans une classe est static

publicenum Type {NOUVEAU, DEBUTANT, CONFIRME, GOUROU};

private Type type;

publicInformaticien2(Type _type) { super(Genre.MASCULIN);

type=_type;

}

publicInformaticien2(Type _type, Genre genre) { super(genre);

type=_type;

}

public voiddevelopper() {

System.out.println("je d´eveloppe, tu d´eveloppes, il d´eveloppe, ...");

}

publicString toString() {

return super.toString()+" : informaticien ("+getType()+")";

}

public voidcycleVie() { manger();

developper();

sortir();

dormir();

}

public Type getType() { returntype;

} }

Programmation - Classes et H´eritage - 25 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Geek.java

packagefr.insarouen.asi.cours2;

public classGeekextendsInformaticien2 { public Geek() {

super(Type.GOUROU,Genre.MASCULIN);

}

public Geek(Type type, Genre genre) { super(type,genre);

}

public voiddevelopper() {

System.out.println("je script `a mort un truc r´evolutionnaire");

}

public voiddormir() {

System.out.println("Rrrrrrr zzzz; make bzImage ; Rrrrrrr zzzzz");

}

public voidsortir() {

System.out.println("je participe `a une bug squash party");

}

public String toString() {

return super.toString()+" avec comportement de geek" ; }

}

Programmation - Classes et H´eritage - 26 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Constructeur

H´eritage & Constructeurs

pas d’h´eritage des constructeurs

appel des constructeurs des classes de base en premier

Fonctionnement

Le contructeur appelle par d´efaut le constructeur par d´efaut de la classe m`ere.

Modification du comportement :

Appel explicite `a un constructeur de la classe m`ere via super()

Syntaxe

ConstructeurClassFille( [param`etres] ) {

super( [param`etres] ); // appel au constructeur de la classe m`ere // code du constructeur

}

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Constructeurs & m´ ethodes polymorphes

Explication du probl`eme

Si un constructeur d’une classe m`ere appelle une m´ethode red´efinie dans une classe fille, c’est cette m´ethode red´efinie qui est appell´ee.

ConstructeurEtPolymorphisme.java

packagefr.insarouen.asi.cours2;

public class ConstructeurEtPolymorphisme { public static voidmain(String[] args) {

B b=newB();

System.out.println(b);

} } class A {

int vara;

publicA() { methode();

}

public voidmethode() { vara=3;

}

publicString toString() { return"A(vara:"+vara+")";

} }

classBextendsA { intvarb;

publicB() { varb=10;

}

public voidmethode() { varb++;

}

publicString toString() {

return super.toString()+"B(varb:"+varb+")";

} }

(8)

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Finalize

Red´efinition definalize

En cas de red´efinition definalize, il est important de respecter la structure de code suivante :

void finalize() {

super.finalize() // appel obligatoire // code

}

Programmation - Classes et H´eritage - 29 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Object

Description

Objectest la super classe de toutes les classes (java.lang.object)son h´eritage est implicite.

Quelques m´ethodes

public String toString() protected Object clone() public boolean equals(Object) public int hashCode()

protected void finalize() public final Class getClass() void notify(), void notifyAll()

void wait() , void wait(long), void wait(long, int)

Programmation - Classes et H´eritage - 30 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

La m´ ethode toString

Fonction

Retourne une chaˆıne de caract`ere d´ecrivant l’objet (par d´efaut la classe) ainsi que le r´esultat de la m´ethodehashCode.

Appel´ee automatiquement si il y a besoin d’une chaˆıne de caract`eres.

Utilisation

Red´efinir la m´ethode pour retourner les informations souhait´ees (´etat de l’objet, valeurs, . . . )

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

La m´ ethode equals

Red´efinition (squelette classique) public boolean equals(Object o) {

return o!=null && getClass()==o.getClass()

&& test des attributs ; --- ou ---

return (o instanceof Demo) && test des attributs ; // des tests plus ‘‘compliqu´es’’ peuvent ^etre faits }

Remarques

commutative, r´eflexive, transitive

x.equals(y)⇒x.hashCode()==y.hashCode()

la red´efinition deequals()n´ecessite la red´efinition dehashCode() Non red´efinition deequals= test de l’´egalit´e des r´ef´erences

(9)

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

La m´ ethode clone

Fonctionnement

m´ethode d’Object= copie bit `a bit copie de surface

m´ethodeprotecteddansObject n´ecessite une red´efinition public doit impl´ementer l’interfaceCloneable

Programmation - Classes et H´eritage - 33 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Squelette declone

class Demo implements Cloneable { // attributs

public Object clone() { Object copie=null;

try {

copie=super.clone();

}

catch (CloneNotSupportedException e) { e.printStackTrace(System.err);

}

// code de copie sp´ecifique du contenu de l’objet return copie;

} }

Programmation - Classes et H´eritage - 34 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Exemple

EqualsClone.java

package fr.insarouen.asi.cours2;

public class EqualsClone {

public static void main(String[] args) {

PersonneEC p1 = new PersonneEC("Hoposte Fid`ele",194092890,10,01,1938);

PersonneEC p2 = new PersonneEC("Dipachair Deborah",294092890,12,8,1980);

PersonneEC p3;

System.out.println("p1.equals(p2) : "+p1.equals(p2));

System.out.println("p1.equals(p1) : "+p1.equals(p1));

p3 = (PersonneEC)p1.clone();

System.out.println("p1.equals(p3) : "+p1.equals(p3));

p3.setDateNaissance(12, 01, 1944);

System.out.println("p1.equals(p3) : "+p1.equals(p3));

} }

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

EqualsClone.java

class PersonneECimplementsCloneable {// code de classe incomplet privateString nomComplet;

private intnumSecu;

privateDateNaissance dateNaissance;

public booleanequals(Object o) {// ne tient pas compte du numSecu if (!(oinstanceofPersonneEC))

return false;

PersonneEC p = (PersonneEC) o;

returnnomComplet.equals(p.nomComplet) && dateNaissance.equals(p.dateNaissance);

}

public inthashCode() {// ne doit pas tenir compte de numSecu (cf equals) returnnomComplet.hashCode()+dateNaissance.hashCode();

}

public Object clone() { Object copie=null;

try {

copie=super.clone();

}

catch(CloneNotSupportedException e) { e.printStackTrace(System.err);

}

// PersonneEC copiePersonneEC = (PersonneEC)copie;

// dateNaissance = (DateNaissance)copiePersonneEC.dateNaissance.clone(); // copie en profondeur returncopie;

}

public String toString() {

returnnomComplet+"("+dateNaissance+") : "+numSecu;

(10)

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

EqualsClone.java

class DateNaissanceimplementsCloneable {// code de classe incomplet intjour, mois, annee;

public voidset(int_jour,int_mois,int_annee) { jour = _jour; mois = _mois; annee = _annee;

}

publicString toString() { returnjour+"/"+mois+"/"+annee;

}

public booleanequals(Object o) { if (!(oinstanceofDateNaissance))

return false;

DateNaissance dn=(DateNaissance)o;

returnjour==dn.jour && mois==dn.mois && annee==dn.annee;

}

public inthashCode() {

return(""+jour+mois+annee).hashCode();

}

publicObject clone() { Object copie=null;

try {

copie=super.clone();

}

catch(CloneNotSupportedException e) { e.printStackTrace(System.err);

} returncopie;

} }

Programmation - Classes et H´eritage - 37 / 38

Plan Quelques sp´ecificateurs Types ´enum´er´es eritage eutilisation En Java Polymorphisme La classe Object

Ex´ecution

p1.equals(p2) : false p1.equals(p1) : true p1.equals(p3) : true p1.equals(p3) : true

Ex´ecution avec retrait des commentaires p1.equals(p2) : false

p1.equals(p1) : true p1.equals(p3) : true p1.equals(p3) : false

Programmation - Classes et H´eritage - 38 / 38

Références

Documents relatifs

= suivi d’une constante enti`ere), les ´el´ements suivants ´etant alors incr´ement´es `a partir de cette valeur. Par exemple si on d´eclare :.. enum jour {lundi, mardi, mercredi =

- 1 o ) Ecrire une m´ethode d’initialisation (sans argument) qui demande une ´ chaˆıne de moins de quinze caract`eres (repr´esentant la langue) et, pour chaque entier compris entre

Examen d’analyse num´ erique.. Aucun document n’est

Examen d’analyse num´ erique.. Aucun document n’est

´ Ecrire la fonction somme colonne(A,j) qui fait la somme des valeurs ab- solues des termes de la colonne j.. En d´ eduire la fonction norme1(A) qui renvoie le maximum de

Sur le plan de la classe, colorie en rouge ta table, en vert le tableau, en jaune les emplacements des ordinateurs, et en bleu les bibliothèques. Découverte

La présence de lactose dans le régime se traduit par des modifications dans la composition corporelle et dans la répartition des divers tissus : lorsque le lactose est

Ecrire la m´ ethode “public static int recherche(int[] tab, int x, int o)” de la classe “TableauEn- tier” qui renvoie l’indice de l’occurence n ◦ o de x ou −1 si x