• Aucun résultat trouvé

Cours 4.0: Listes. Piles. Interface/Implements

N/A
N/A
Protected

Academic year: 2022

Partager "Cours 4.0: Listes. Piles. Interface/Implements"

Copied!
54
0
0

Texte intégral

(1)

Cours 4.0: Listes. Piles. Interface/Implements

Olivier Bournez

bournez@lix.polytechnique.fr LIX, Ecole Polytechnique

(2)

Aujourd’hui

Piles. Files

Utilisation des piles et des files

Programmer des piles et des files

Piles et files dans la biblioth`eque JAVA

Interface/Implements en JAVA

2

(3)

Le type abstrait “sac”

On souhaite consid´erer une structure de donn´ees, que l’on va appeler sac, permettant de stocker des Objets.

On veut pouvoir:

I tester si un sac est vide?

I ajouter un ´el´ement dans un sac.

I retirer un ´el´ement d’un sac non vide.

class Sac { ...

Sac() { . . . } //Construire un sac vide

boolean EstVide() { . . . } //Tester si un sac est vide void Ajouter(Objet e) { . . . } //Ajouter un ´el´ement `a un sac

(4)

Les types abstraits

permettent

de d´ecrire un objet uniquement par ses fonctions de base.

de faire abstraction de la r´ealisation.

I Un sac peut ˆetre impl´ement´e par une liste, par un tableau, . . .

I Modifier son impl´ementation ne modifie pas le reste du programme.

La notion d’interface, d’h´eritage, et de module sera vue plus avant dans le cours INF431.

4

(5)

Files. Piles

Les piles et les files sont des sacs.

Une pile est un sac LIFO (Last-In First-Out)

I lorsqu’on retire un ´el´ement, on r´ecup`ere toujours le dernier ajout´e.

I ajouter se dit empiler(push), retirer se dit epiler(pop).

Une file est un sac FIFO (First-in First-Out)

I on retire les ´el´ements dans l’ordre de leur insertion.

I ajouter se dit enfiler, retirer se dit efiler.

(6)

Files. Piles

Les piles et les files sont des sacs.

Une pile est un sac LIFO (Last-In First-Out)

I lorsqu’on retire un ´el´ement, on r´ecup`ere toujours le dernier ajout´e.

I ajouter se dit empiler(push), retirer se dit epiler(pop).

Une file est un sac FIFO (First-in First-Out)

I on retire les ´el´ements dans l’ordre de leur insertion.

I ajouter se dit enfiler, retirer se dit efiler.

5

(7)

Piles, Files d’entiers

class Pile { ...

Pile() { . . . }

boolean EstVide() { . . . } int Tete() { . . .}

void Empiler(int e) { . . . } int epiler() { . . . } }

Pile s=new Pile();

class File { ...

File() { . . . }

boolean EstVide() { . . . } int Tete() { . . .}

void Enfiler(int e) { . . . } int efiler() { . . . } }

File s=new File();

(8)

Une pile et une file de caract` eres

Sommet de pile a

b c

Entr´ee de file Sortie de file

a b c

s.Ajouter(’d’) Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b c

d

s.Ajouter(’e’) Sommet de pile

a b c d e

Entr´ee de file Sortie de file

a b c

d e s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b d e s.Ajouter(’f’)

Sommet de pile

a b c d f

Entr´ee de file Sortie de file

a b d e f s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file a

d e f

7

(9)

Une pile et une file de caract` eres

Sommet de pile a

b c

Entr´ee de file Sortie de file

a b c

s.Ajouter(’d’)

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b c

d

s.Ajouter(’e’) Sommet de pile

a b c d e

Entr´ee de file Sortie de file

a b c

d e s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b d e s.Ajouter(’f’)

Sommet de pile

a b c d f

Entr´ee de file Sortie de file

a b d e f s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file a

d e f

(10)

Une pile et une file de caract` eres

Sommet de pile a

b c

Entr´ee de file Sortie de file

a b c

s.Ajouter(’d’)

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b c

d

s.Ajouter(’e’) Sommet de pile

a b c d e

Entr´ee de file Sortie de file

a b c

d e s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b d e s.Ajouter(’f’)

Sommet de pile

a b c d f

Entr´ee de file Sortie de file

a b d e f s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file a

d e f

7

(11)

Une pile et une file de caract` eres

Sommet de pile a

b c

Entr´ee de file Sortie de file

a b c

s.Ajouter(’d’)

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b c

d

s.Ajouter(’e’)

Sommet de pile

a b c d e

Entr´ee de file Sortie de file

a b c

d e s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b d e s.Ajouter(’f’)

Sommet de pile

a b c d f

Entr´ee de file Sortie de file

a b d e f s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file a

d e f

(12)

Une pile et une file de caract` eres

Sommet de pile a

b c

Entr´ee de file Sortie de file

a b c

s.Ajouter(’d’) Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b c

d

s.Ajouter(’e’)

Sommet de pile

a b c d e

Entr´ee de file Sortie de file

a b c

d e

s.Enlever() Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b d e s.Ajouter(’f’)

Sommet de pile

a b c d f

Entr´ee de file Sortie de file

a b d e f s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file a

d e f

7

(13)

Une pile et une file de caract` eres

Sommet de pile a

b c

Entr´ee de file Sortie de file

a b c

s.Ajouter(’d’) Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b c

d

s.Ajouter(’e’)

Sommet de pile

a b c d e

Entr´ee de file Sortie de file

a b c

d e s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b d e s.Ajouter(’f’)

Sommet de pile

a b c d f

Entr´ee de file Sortie de file

a b d e f s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file a

d e f

(14)

Une pile et une file de caract` eres

Sommet de pile a

b c

Entr´ee de file Sortie de file

a b c

s.Ajouter(’d’) Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b c

d

s.Ajouter(’e’) Sommet de pile

a b c d e

Entr´ee de file Sortie de file

a b c

d e s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b d e

s.Ajouter(’f’) Sommet de pile

a b c d f

Entr´ee de file Sortie de file

a b d e f s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file a

d e f

7

(15)

Une pile et une file de caract` eres

Sommet de pile a

b c

Entr´ee de file Sortie de file

a b c

s.Ajouter(’d’) Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b c

d

s.Ajouter(’e’) Sommet de pile

a b c d e

Entr´ee de file Sortie de file

a b c

d e s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b d e s.Ajouter(’f’)

Sommet de pile

a b c d f

Entr´ee de file Sortie de file

a b d e f s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file a

d e f

(16)

Une pile et une file de caract` eres

Sommet de pile a

b c

Entr´ee de file Sortie de file

a b c

s.Ajouter(’d’) Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b c

d

s.Ajouter(’e’) Sommet de pile

a b c d e

Entr´ee de file Sortie de file

a b c

d e s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b d e s.Ajouter(’f’)

Sommet de pile

a b c d f

Entr´ee de file Sortie de file

a b d e f

s.Enlever() Sommet de pile

a b c d

Entr´ee de file Sortie de file a

d e f

7

(17)

Une pile et une file de caract` eres

Sommet de pile a

b c

Entr´ee de file Sortie de file

a b c

s.Ajouter(’d’) Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b c

d

s.Ajouter(’e’) Sommet de pile

a b c d e

Entr´ee de file Sortie de file

a b c

d e s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b d e s.Ajouter(’f’)

Sommet de pile

a b c d f

Entr´ee de file Sortie de file

a b d e f s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file a

d e f

(18)

Une pile et une file de caract` eres

Sommet de pile a

b c

Entr´ee de file Sortie de file

a b c

s.Ajouter(’d’) Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b c

d

s.Ajouter(’e’) Sommet de pile

a b c d e

Entr´ee de file Sortie de file

a b c

d e s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file

a b d e s.Ajouter(’f’)

Sommet de pile

a b c d f

Entr´ee de file Sortie de file

a b d e f s.Enlever()

Sommet de pile

a b c d

Entr´ee de file Sortie de file a

d e f

7

(19)

Aujourd’hui

Piles. Files

Utilisation des piles et des files

Programmer des piles et des files

Piles et files dans la biblioth`eque JAVA

Interface/Implements en JAVA

(20)

Les files

Elles sont pr´esentes d`es qu’on a besoin d’utiliser ou de mod´eliser une file d’attente.

par exemple:

I les impressions dans un syst`eme d’exploitation sont g´er´ees par une file;

I dans une simulation d’un guichet, on mod´elisera g´en´eralement l’arriv´ee des clients par une file.

Entr´ee de file Sortie de file

Il existe une th´eorie des files d’attente en ´evaluation de performances/recherche op´erationnelle.

9

(21)

Les files

Elles sont pr´esentes d`es qu’on a besoin d’utiliser ou de mod´eliser une file d’attente.

par exemple:

I les impressions dans un syst`eme d’exploitation sont g´er´ees par une file;

I dans une simulation d’un guichet, on mod´elisera g´en´eralement l’arriv´ee des clients par une file.

Entr´ee de file Sortie de file

(22)

Les piles

Les piles sont des objets informatiques omnipr´esents:

par exemple:

I les annulations d’´edition dans un traitement de texte sont er´ees par une pile;

I reconnaˆıtre une expression bien parenth´es´ee n´ecessite une pile;

I les appels r´ecursifs sont g´er´es par une pile de r´ecursion;

I ´evaluer une expression arithm´etique n´ecessite une pile.

Sommet de pile

10

(23)

Analyse syntaxique

Reconnaˆıtre une expression bien parenth´es´ee avec deux types de parenth`eses[ et(.

I [([])[]]est bien parenth´es´e.

I [(])est mal parenth´es´e.

static boolean BienParenth´es´e(String s) { Pile p =newPile () ;

for (int i=0; i<s.length(); i++) { char c= s.charAt(i);

i f (c==’[’ || c==’(’) p.Empiler(c);

else i f (c==’]’) {

i f (!p.EstVide() && p.D´epiler()6=’[’) return false;}

else i f (c==’)’) {

i f (!p.EstVide() && p.D´epiler()6=’(’) return false;}}

return p.EstVide();}

(24)

Aujourd’hui

Piles. Files

Utilisation des piles et des files

Programmer des piles et des files

Piles et files dans la biblioth`eque JAVA

Interface/Implements en JAVA

12

(25)

Programmer des piles et des files

Solution 1: avec des listes.

Solution 2: avec des tableaux.

(26)

Une pile avec une liste

class Pile {

private Liste l;// sommet de la pile Pile() { l=null; }

boolean EstVide() { return (l==null); } int Tete() { return l.contenu;}

void Empiler(int e) { l=newListe(e,l); }

int epiler() { int c=l.contenu; l=l.suivant; return(c); } }

l 4 7 3

Le mot cl´e private permet de garantir qu’aucune autre classe ne puisse modifier ou acc´eder au champl.

Cela permet de garantir qu’il n’est pas modifi´e autrement que par les m´ethodes de la classePile.

14

(27)

G´ erer les erreurs

class Pile {

private Liste l;// sommet de la pile Pile() { l=null; }

boolean EstVide() { return (l==null); }

int Tete() { i f (l==null) throw newError("Pile Vide");

return l.contenu;}

void Empiler(int e) { l=newListe(e,l); }

int epiler() { i f (l==null) throw newError("Pile Vide");

int c=l.contenu; l=l.suivant; return(c); } }

throw new Error("Pile Vide")arrˆete l’ex´ecution du programme en lan¸cant (instructionthrow) une exception (ici un objet de la classe Error).

(28)

Une file avec une liste

class File {

private Liste in;// entr´ee de la liste private Liste ou;// sortie de la liste File() { in=out=null; }

boolean EstVide() { return (in==null && out==null); } int Tete() { return out.contenu;}

...

}

out in

4 7 3

Le champ

outpointe sur la premi`ere cellule de liste (pour enlever) inpointe sur la derni`ere cellule de liste (pour ajouter)

16

(29)

Enfiler

void Enfiler(int i) { i f (EstVide())

in = out =newList(i,null);

else {

in.suivant =newList(i,null);

in = in.suivant;

}}

out in

4 7 3

5

(30)

Enfiler

void Enfiler(int i) { i f (EstVide())

in = out =newList(i,null);

else {

in.suivant =newList(i,null);

in = in.suivant;

}}

out in

4 7 3 5

17

(31)

Enfiler

void Enfiler(int i) { i f (EstVide())

in = out =newList(i,null);

else {

in.suivant =newList(i,null);

in = in.suivant;

}}

out in

4 7 3 5

(32)

D´ efiler

int efiler() { i f (EstVide())

throw newError("Pile Vide");

int r= out.contenu;

out = out.suivant;

i f (out==null) in = null;

return r;

}

out in

4 7 3

Ne pas oublier de remettre in`a null lorsque la pile est vide.

18

(33)

D´ efiler

int efiler() { i f (EstVide())

throw newError("Pile Vide");

int r= out.contenu;

out = out.suivant;

i f (out==null) in = null;

return r;

}

out in

4 7 3

(34)

Une pile avec un tableau

On cr´ee un tableau suffisamment grand.

On utilise un entiersp, le pointeur de pile, qui compte le nombre d’´el´ements dans la pile.

Les ´el´ements d’indice inf´erieur `a spcontiennent les ´el´ements de la pile.

Les autres, ici en blanc, sont disponibles.

sp 5 6

0 2 1

7 2

0 3

2 4

8 5

0 6

2 7

3 8

4 9

Principe:

I Tete(): t[sp-1].

I Empiler(e): t[sp++] =e.

I epiler(): t[--sp].

19

(35)

Une pile avec un tableau

class Pile {

final static int TAILLE = 100;

private int[] t;

private int sp;

Pile() { t=new int[TAILLE]; sp=0; } boolean EstVide() { return (sp0); } int Tete() {

i f (EstVide())throw newError("Pile Vide");

return t[sp-1];}

void Empiler(int e) {

i f (spt.length) throw newError("Pile Pleine");

t[sp++] = e;}

(36)

Une pile avec un tableau dynamique

private void resize() {

int[] newT =new int [2*t.length];

for (int i=0; i<t.length; i++) newT[i] = t[i];

t= newT;

}

void Empiler(int e) {

i f (spt.length) resize();

t[sp++] = e;}

21

(37)

Analyse de complexit´ e

Les versions pr´ec´edentes de Empiler()et epiler() fonctionnaient en tempsO(1) (temps constant).

Maintenant, Empiler()peut provoquer la recopie d’un tableau arbitrairement grand, et donc prendre un temps arbitrairement grand.

Cependant, Empiler() reste en coˆut O(1) amorti (coˆut global ramen´e au nombre d’op´erations).

I Supposons que l’on fasseNfois Empiler()ouepiler(), et que la taille initiale du tableau soit 2p0.

I Dans le pire cas, le tableau est redimensionn´ep+ 1p0 fois, avec 2p<N2p+1.

I Coˆut total dans ce cas:

O(2p0+ 2p0+1+· · ·+ 2p+1) =O(2p+2)<O(4.N) =O(N).

I Ce qui fait un coˆut amorti O(1) par ´el´ement. En effet, le coˆut global/ le nombre d’´el´ements estO(N)/N=O(1).

(38)

Analyse de complexit´ e

Les versions pr´ec´edentes de Empiler()et epiler() fonctionnaient en tempsO(1) (temps constant).

Maintenant, Empiler()peut provoquer la recopie d’un tableau arbitrairement grand, et donc prendre un temps arbitrairement grand.

Cependant, Empiler() reste en coˆut O(1) amorti (coˆut global ramen´e au nombre d’op´erations).

I Supposons que l’on fasseNfois Empiler()ouepiler(), et que la taille initiale du tableau soit 2p0.

I Dans le pire cas, le tableau est redimensionn´ep+ 1p0 fois, avec 2p<N2p+1.

I Coˆut total dans ce cas:

O(2p0+ 2p0+1+· · ·+ 2p+1) =O(2p+2)<O(4.N) =O(N).

I Ce qui fait un coˆut amorti O(1) par ´el´ement. En effet, le coˆut global/ le nombre d’´el´ements estO(N)/N=O(1).

22

(39)

Une file avec un tableau

On cr´eer toujours un tableau de tailleTAILLE suffisamment grande.

On utilise cette fois deux entiersin, et out.

Les ´el´ements entre inetout-1 contiennent les ´el´ements de la file.

Les autres, ici en blanc, sont disponibles.

in 3

out 7 6

0 2 1

7 2

0 3

2 4

8 5

0 6

2 7

3 8

4 9

Variante: on peut supposer le tableau circulaire: les ´el´ements entre inet out-1 moduloTAILLEcontiennent les ´el´ements de la file.

in 8

out 3 6

0 2 1

7 2

0 3

2 4

8 5

0 6

2 7

3 8

4 9

(40)

Une file avec un tableau

On cr´eer toujours un tableau de tailleTAILLE suffisamment grande.

On utilise cette fois deux entiersin, et out.

Les ´el´ements entre inetout-1 contiennent les ´el´ements de la file.

Les autres, ici en blanc, sont disponibles.

in 3

out 7 6

0 2 1

7 2

0 3

2 4

8 5

0 6

2 7

3 8

4 9

Variante: on peut supposer le tableau circulaire: les ´el´ements entre inet out-1modulo TAILLEcontiennent les ´el´ements de la file.

in 8

out 3 6

0 2 1

7 2

0 3

2 4

8 5

0 6

2 7

3 8

4 9

23

(41)

Une file avec un tableau

class File {

final static int TAILLE = 100;

private int[] t;

private int in,out;

File() { t=new int[TAILLE]; in=out=0; } boolean EstVide() { return (in == out); }

boolean EstPleine() { return ((out+1) % TAILLE == in);}

void Enfiler(int e) {

i f (EstPleine())throw newError("Pile Pleine");

t[out]=e;

out = (out +1) % TAILLE;}

int efiler() {

(42)

Aujourd’hui

Piles. Files

Utilisation des piles et des files

Programmer des piles et des files

Piles et files dans la biblioth`eque JAVA

Interface/Implements en JAVA

25

(43)

Utiliser les biblioth` eques JAVA

Piles et files sont tellement utilis´ees qu’elles sont propos´ees dans les classes JAVA standards.

Exemple: la classe Stackdu packagejava.util (qui correspond `a l’impl´ementation par tableaux dynamiques pr´ec´edente) pour les piles.

Des piles de quoi?

(44)

Classes g´ en´ eriques

Les codes

d’une pile/file d’entiers d’une pile/file de r´eels

d’une pile/file de chaˆınes de caract`eres d’une pile/file de piles

d’une pile/file de files d’une pile/file de ...

se ressemblent beaucoup.

27

(45)

Classes g´ en´ eriques

Les classes de la biblioth`eque JAVA sont en fait g´en´eriques.

I Stackest une classe g´en´erique qui prend une classe en argument.

I Exemple: Stack<String>esigne une pile de chaˆınes de caract`eres.

I Plus g´en´eralement,Stack<E>est une pile d’objets de la classe E.

(46)

Exemple (attention ordre op´ erations incorrect)

import java.util.*;

class Traduit {

public static void main (String [] args) { Stack<String> p =new Stack<String> () ; for (int i = 0 ; i < args.length ; i++) {

String cmd = args[i] ;

i f (cmd.equals("+") || cmd.equals("-")

|| cmd.equals("*") || cmd.equals("/")) p.push("(" + p.pop() + cmd + p.pop() + ")");

else

p.push(cmd) ; }

System.out.println(p.pop()) ; }}

Dans les librairies standards, Empilerse dit push,epiler se dit pop,EstVide() se dit empty,Tete se dit peek(voir documentation JAVA).

29

(47)

Comment cr´ eer une pile d’entiers

On ne peut pas utiliser le type Stack<int>, car int n’est pas une classe.

Cependant, la biblioth`eque JAVA standard fournit une classe appropri´ee par type scalaire.

Par exemple, la classe Integerpour int:

I La classeIntegerest une classe avec un champ private de type int.

I On convertit un scalaire int en un objetIntegeret eciproquement par:

public static Integer valueOf(int i): du scalaire vers unInteger.

public int intValue(): r´eciproquement.

(48)

Exemple

import java.util.* ; class Calc {

public static void main (String [] arg) { Stack<Integer> stack = newStack<Integer> () ; . . .

int i1 = stack.pop().intValue() ; int i2 = stack.pop().intValue() ; stack.push(Integer.valueOf(i2+i1)) ; . . .

} }

En fait, le compilateur accepte stack.push(i2+i1), car il fait les conversions int versIntegertout seul.

31

(49)

Files de la biblioth` eque

La classe LinkedList<C>(packagejava.util) fait l’affaire.

Il s’agit en fait d’une double-ended queue.

On peut utiliser

I les m´ethodesaddFirstetaddLast(put) pour ajouter un

´

el´ement au debut ou `a la fin.

I les m´ethodesremoveFirst (get) etremoveLastpour ecup´erer le premier ou dernier ´el´ement.

I Le tout en temps constant, par des listes doublement chaˆın´ees (voir le poly, section 2.3.3).

Il existe d’autres classes de la biblioth`eque standard avec des

(50)

Aujourd’hui

Piles. Files

Utilisation des piles et des files

Programmer des piles et des files

Piles et files dans la biblioth`eque JAVA

Interface/Implements en JAVA

33

(51)

D´ efinir un type abstrait proprement

On veut d´efinir le type abstrait “sac”

class Sac { ...

Sac() { . . . } //Construire un sac vide

boolean EstVide() { . . . } //Tester si un sac est vide void Ajouter(int e) { . . . } //Ajouter un entier `a un sac int Enlever() { . . . } //Enlever un entier d’un sac }

Pour le faire proprement en JAVA, on peut d´efinir interface Sac {

boolean EstVide(); //Tester si un sac est vide void Ajouter(int e); //Ajouter un entier `a un sac

(52)

Ce qui permet de l’utiliser

A ce moment l`a, sacn’est pas une classe, mais on peut l’utiliser comme un type...

static void count(Sac s) {

for (int i=0; !s.EstVide(); i++) { s.Enlever();

}}

... sans se pr´eoccuper de l’impl´ementation.

35

(53)

Cr´ eer une impl´ ementation

On utilise le mot cl´eimplements. Impl´ementation 1:

class Pileimplements Sac { private int[] t;

private int sp;

Pile() { t=new int[100]; sp=0; } public boolean EstVide() {

return (sp0); } int

Tete() {return t[sp-1];}

public void Ajouter(int e) { t[sp++] = e;}

Impl´ementation 2:

class Fileimplements Sac { private int[] t;

private int in,out;

File() { t=new int[100];

in=out=0;}

public boolean EstVide() { return (in == out); } public void Ajouter(int e) {

t[out]=e; out=(out +1)% 100;}

(54)

Int´ erˆ ets

On peut travailler sans se pr´eoccuper de l’impl´ementation.

1. ce qui permet le travail en groupe, ou modulaire.

2. et de remplacer une impl´ementation par une autre sans modifier le reste du programme.

Le compilateur refuse de compiler si une des m´ethodes de l’interface est manquante,

I et donc aide `a v´erifier que l’impl´ementation de chacune des fonctionnalit´es est bien pr´esente.

Note: Les m´ethodes d´eclar´ees dans l’interface doivent ˆetre qualifi´ees de public.

37

Références

Documents relatifs

En ce qui concerne le cours de EDM, je vous propose de réaliser les exercices qui se trouvent dans votre manuel, dans la partie exercices (partie bleue).. Les correctifs suivront

À l’aide des informations ci-dessous, concernant la population de l’établissement, réalise un graphique circulaire. Complète au préalable le tableau ci-dessous

Je profite de ce message pour demander à chacun d’entre vous de me fournir votre adresse mail et GSM, ainsi que l’adresse mail et le GSM de l’un de vos parents ou les deux si vous

Pour vous aider à mieux comprendre, voici le lien d’une vidéo explicative : https://www.youtube.com/watch?v=TBf1Dc7Aon4.. Le correctif des exercices vous sera fourni

En ce qui concerne le cours de Géographie, je vous propose de réaliser les recherches et localisations des autres pays et capitales, à savoir pour l’Asie et l’Océanie ; ainsi

Comme déjà montré en classe, vous pouvez remarquer sur la carte, ci-dessus, qu’il fait plus chaud au niveau de l’équateur, entre les tropiques du cancer et du

Ce dernier n’est pas obligatoire, mais très intéressant pour la relance du cours d’histoire l’an prochain en 4 ème.. Je vous conseille donc de

Ceci n’aura aucune incidence sur votre examen, puisque ce dernier sera le même principe qu’à Noël.. À savoir, par groupe de 2, réaliser des recherches sur un sujet imposé et