INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous...

67
INF 321 Classes, Objets, Exceptions... Eric Goubault Cours 4 3 juin 2013 1

Transcript of INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous...

Page 1: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

INF 321Classes, Objets, Exceptions...

Eric Goubault

Cours 4

3 juin 2013

1

Page 2: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Dans l’episode precedent...

Cours precedent

Les types produits - retour sur les tableaux

Les types somme

Les types recursifs

Dans ce cours

Classes et methodes dynamiques

Le traitement des erreurs et les exceptions

Classes abstraites, interfaces, packages

2

Page 3: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Programmation orientee objet?

class? : jusqu’a present:

On n’avait defini que des class contenant des donnees (avecconstructeurs neanmoins) - cf. types produits, enregistrements

Ou des class ne contenant que du code: les “programmes”

Melons les deux!

3

Page 4: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Programmation orientee objet?

class? : jusqu’a present:

On n’avait defini que des class contenant des donnees (avecconstructeurs neanmoins) - cf. types produits, enregistrements

Ou des class ne contenant que du code: les “programmes”

Melons les deux!

4

Page 5: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Exemple: static→dynamique

Philosophie orientee objet (1ere approximation)

Au lieu de:

c l a s s P i l e {L i s t c ;P i l e ( L i s t x ) { t h i s . c = x ;} }

c l a s s Prog {s t a t i c void push ( i n t a , P i l e l ) {

l . c = new L i s t ( a , l . c ) ; }s t a t i c void pop ( P i l e l ) {

l . c = l . c . t l ; }s t a t i c i n t top ( P i l e l ) {

return l . c . hd ; } }

Mettre toutes les methodes concernant les piles dans class

Pile!

5

Page 6: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Vers l’oriente objet...

On obtiendrait ainsi:

c l a s s P i l e {L i s t c ;P i l e ( L i s t x ) { t h i s . c = x ; }s t a t i c void push ( i n t a , P i l e l ) {

l . c = new L i s t ( a , l . c ) ; }s t a t i c void pop ( P i l e l ) {

l . c = l . c . t l ; }s t a t i c i n t top ( P i l e l ) {

return l . c . hd ; } }c l a s s Prog {

. . . P i l e . push ( 1 , p ) ; . . . }

Les fonctions s’appliquant a la collection ou classe des pilessont comme des champs (ou enregistrements - cf. typesproduits, cours 2 - cf. von Neuman!): methodes

On les appelle en faisant Pile.methode...

6

Page 7: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Critique

Enregistrement?

Quand on a une Pile p, on fait p.c pour obtenir son champde type List

Pourquoi Pile.push(1,p) pour les methodes?

Champs/methodes statiques...ou pas

c est un champ non statique (pas de qualificatif static)

push est une methode statique (qualificatif static)

Commencons par expliquer les champs statiques/non-statiquesavant les methodes...

7

Page 8: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Statique or not...? (experimentation)

Champs statiques

c l a s s S t a t {s t a t i c i n t x = 2 ; }

c l a s s Prog {pub l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {

S t a t s , t ; s = new S t a t ( ) ; t = new S t a t ( ) ;System . out . p r i n t l n ( s . x ) ;t . x = 3 ;System . out . p r i n t l n ( s . x ) ;

Donne:

> j a v a Prog23

Blup?

8

Page 9: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Statique or not...? (experimentation)

Champs non statiques

On change juste:

c l a s s S t a t 2 {i n t x = 2 ; }

Donne:

> j a v a Prog22

Ouf.... ;-)

9

Page 10: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Explication

Champs statiques/non statiques

class (classe) definit un ensemble d’objets

Stat (version 1, statique) ne contient qu’un singleton

Stat2 (version 2, dynamique) peut contenir n’importe quelnombre d’objet, dont le trait commun est qu’ils contiennentun champ entier x initialise a 2

Plus generalement, les champs static sont communs a tousles objets de cette classe

Et les methodes dans tout cela?

Moche ce que l’on a fait: Pile.push(1,p)

On voudrait ecrire comme pour les champs quelque chosecomme p.push(1): possible avec une methode push nonstatique!

10

Page 11: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

On obtient:

c l a s s P i l e {L i s t c ;P i l e ( L i s t x ) { t h i s . c = x ; }

. . .void push ( i n t a ) {

t h i s . c = new L i s t ( a , t h i s . c ) ; }

void pop ( ) {t h i s . c = t h i s . c . t l ; }

i n t top ( ) {return t h i s . c . hd ; }

}

“Module” coherent parlant de piles, avec toutes les operationslegales associees

11

Page 12: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Explication?

Methodes dynamiques

De meme: methode static, une seule par classe, exemplemain

p.push est une fonction differente de q.push (pour deux pilesp et q distinctes)

push (dynamique) definit une fonction partielle, instanciee parle passage de p (appele this - objet courant sur lequels’applique la methode) lors de son appel par p.push(...)(regles de passage d’argument inchangees)

Quand on fait p.push(...), la machine regarde le type de p,voit Pile, trouve l”’enregistrement” (fonctionnel) push, passela reference sur le contenu de p a push puis execute soncode...

12

Page 13: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Remarques importantes!

this...

est le plus souvent implicite: on aurait pu ecrire:

void push ( i n t a ) {c = new L i s t ( a , c ) ; }

void pop ( ) {c = c . t l ; }

Le cas de null...

Attention ne jamais faire p.push(...) quand p vaut null!

13

Page 14: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Autres remarques

Types somme

Rend possible une autre implementation des types somme

Classes entierement static

Il en existe... exemple, fonctions de librairie Math.sin, Math.cosetc.

14

Page 15: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Premier resume

Quelques elements de vocabulaire

communs aux langages orientes objet:

objet: structure de donnee compose de:

attributs: ou champs (cf. types produit, ou enregistrement!),ce sont les donnees elementaires composant l’objetmethodes: fonctions pouvant s’appliquer a ce type d’objet

classe: ensemble d’objets du meme type

instance: on dit qu’un objet est une instance de sa classe

15

Page 16: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Notion de classe en Java

Methodes: fonctions associees a une classe d’objets

Objet instance d’une classe

c l a s s Toto {i n t champ1 ; i n t champ2 ;i n t methode1 ( i n t par ame t re ) { . . . } }

Toto x = new Toto ( ) ; . . .

contient des champs de donnees et des methodes qui sont desfonctions s’appliquant sur tout objet de la classe:x.methode1(parametre) (en C, non oriente objet, onecrirait methode1(x,parametre))

16

Page 17: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Methodes

Qualificatifs

methodes static (pas dynamiques), ou methodes de classe,on ne peut faire que methode1(parametre) ouToto.methode1(parametre), pas de connaissance d’un objetx particulier, mais juste de la classe Toto

methodes public sont connues de tout le monde

methodes particulieres dites constructeurs (deja vues au cours3 etc.)

17

Page 18: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Petit historique de l”’oriente objet”

Simula 67 (base sur Algol 60)

Smalltalk 71/80

Objective C, C++ 83...

Beaucoup depuis...(Java, OCaml en particulier)

Exemple typique de programmation oriente objet: interfacesgraphiques (ex. QT4), ateliers graphiques de programmation(Google App Inventor, cf. http://appinventor.mit.edu/) etc.

Utilite principale

C’est essentiellement un style de programmation:

Permet de bien “cloisonner” le code, en unites coherentes, cf.diagrammes de classes et UML (Unified Modelling Language)

Permet de reutiliser du code, plus aisement (“composants”),par heritage en particulier (apres...)

18

Page 19: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Interlude...

Coupure pub?

Dans ce qui suit, demo d’un environnement graphique deprogrammation d’applications Android (smartphones)

Dans la grande tradition des langages graphiques,pedagogiques (Logo, Alice, Kodu etc.), ou non (Hypercard,Scade/Lustre, QT etc.)

Cet environnement permet de manipuler des classes d’objets:

graphiques (pour l’interface) comme des boutons, des zones detexte, des images etc.non-apparents: son, donnees GPS, connexions wifi/3G etc.

La creation d’objets se fait graphiquement, leursenregistrements peuvent etre modifies a l’interface

Pour chaque objet, on a une representation graphique desmethodes associees que l’on combine pour programmer...

(Rappel: Android base sur Linux, applications ecritesmajoritairement en Java - plus la dessus en INF 422)

19

Page 20: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Demo Google App Inventor (merci a youtube)

Ma video

20

Page 21: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Heritage (simple): interet important del’oriente objet!

Reutilisation de code

On a defini une classe Point et ses methodes:

c l a s s P o i n t {i n t x , y ; // c o o r d o n n e e st r a n s l a t i o n ( i n t u , i n t v ) {

x = x+u ; y = y+v ; } . . . }

On veut maintenant des points colores, au lieu de redefinir (agauche), on peut ecrire (a droite):

c l a s s C o l o r P o i n t {i n t x , y ; // c o o r d o n n e e si n t c o l ; // c o u l e u rt r a n s l a t i o n ( i n t u , i n t v ) {

x = x+u ; y = y+v ; } . . . }

c l a s s C o l o r P o i n textends P o i n t {

i n t c o l ; // c o u l e u r. . . }

21

Page 22: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Heritage

Declaration d’heritage

Par mot cle extends: class A extends B ... , A herite de B

Champs

Un ColorPoint cp aura des champs col (accessible parcp.col), mais aussi x et y (accessibles par cp.x et cp.y)

Methodes

translation s’applique implicitement sur un objet de laclasse ColorPoint en s’appliquant a sa “sous-partie”Point

Cela s’appelle l’heritage, et permet une economie et unestructuration du code meilleure (en Java et Caml, pas en C)Remarque: tous les objets Java heritent d’une classe unique:Object

22

Page 23: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Structuration par heritage simple

Diagramme de classe pour Point, ColorPoint

class Point

class ColorPoint

Autre exemple

class Shape

class Rectangle class Circle class Ellipse

23

Page 24: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Au dela de l’heritage simple?

Heritage multiple

pouvoir heriter du code de plusieurs classes

complique semantiquement!

existe en C++ pas en Java

forme degradee en Java, semantiquement raisonnable:heritage simple de code, multiple de signatures (interface) -fin du cours

24

Page 25: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Hierarchie de classes - retour sur Android...

Android (cf.http://developer.android.com/reference/packages.html)

java.lang.Object↪→ android.graphics.Paint

The Paint class holds the style and color information about how todraw geometries, text and bitmaps.Public Constructors

Pa in t ( )

Create a new paint with default settings.

Pa in t ( i n t f l a g s )

Create a new paint with the specified flags.

Pa in t ( Pa in t p a i n t )

Create a new paint, initialized with the attributes in the specifiedpaint parameter.

25

Page 26: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Hierarchie de classes - Android

Paint

Public Methods ...

i n t ge tCo l o r ( )

Return the paint’s color.

f l o a t ge tFon tMe t r i c s ( Pa in t . Fon tMet r i c s me t r i c s )

Return the font’s recommended interline spacing, given the Paint’ssettings for typeface, textSize, etc.

f l o a t ge tTex tS i z e ( )

Return the paint’s text size.

vo id s e tC o l o r ( i n t c o l o r )

Set the paint’s color....

26

Page 27: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Hierarchie de classe typique

Android...

java.lang.Object↪→ android.graphics.Paint

↪→ android.text.TextPaintClass OverviewTextPaint is an extension of Paint that leaves room for some extradata used during text measuring and drawing.SummaryInherited Constants

From c l a s s and ro i d . g r a p h i c s . Pa in t. . .

Fields

pub l i c i n t b a s e l i n e S h i f tpub l i c i n t bgCo lo rpub l i c f l o a t d e n s i t ypub l i c i n t [ ] d r awab l eS t a t epub l i c i n t l i n k C o l o r

27

Page 28: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

TextPaint

Public Constructors

TextPa in t ( )TextPa in t ( i n t f l a g s )TextPa in t ( Pa in t p )

Public Methods

vo id s e t ( TextPa in t tp )

Copy the fields from tp into this TextPaint, including the fieldsinherited from Paint.Inherited Methods

From c l a s s and ro i d . g r a p h i c s . Pa in tFrom c l a s s j a v a . l ang . Object

28

Page 29: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Programmation orientee objet - deuxiemeresume

Vocabulaire

heritage: une classe peut etre une sous-classe d’une autre: lasous-classe l’etend en rajoutant des methodes et des attributs,elle accede aux attributs et aux methodes de sa sur-classe

polymorphisme (par sous-typage): un objet d’une sous-classeA de B en accedant aux methodes de B est considere du type B

(et A)

29

Page 30: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Mais aussi polymorphisme pour les methodes!

Polymorphisme des operateurs

Exemple: calcul garanti, par arithmetique rationnelle:

c l a s s Rat {i n t p , q ;Rat ( i n t x , i n t y ) { p=x ; q=y ; }Rat p l u s ( Rat y ) {

return new Rat ( t h i s . p∗y . q+t h i s . q∗y . p ,t h i s . q∗y . q ) ; }

void show ( ) {System . out . p r i n t l n ( p+”/ ”+q ) ; }

}

30

Page 31: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Exemple de redefinition d’arithmetique

Polymorphisme des operateurs

Exemple: calcul garanti, par arithmetique d’intervalles:

c l a s s D o u b l e i n t {double i n f , sup ;D o u b l e i n t ( double x , double y ) { i n f=x ; sup=y ; } ;D o u b l e i n t p l u s ( D o u b l e i n t y ) {

return new D o u b l e i n t ( t h i s . i n f+y . i n f ,t h i s . sup+y . sup ) ; }

void show ( ) {System . out . p r i n t l n ( ”[ ”+i n f+” , ”+sup+”] ” ) ; }

}

plus et show sont polymorphes: peuvent prendre des Rat ou desDoubleint! (pratique, on peut ne changer que la donnee et pas leprogramme...)

31

Page 32: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Exemple d’execution

Polymorphisme des operateurs

c l a s s Prog {pub l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {

Rat r = new Rat ( 1 , 2 ) ;Rat s = new Rat ( 1 , 3 ) ;Rat t = r . p l u s ( s ) ; // = s . p l u s ( r ) ;D o u b l e i n t r i = new D o u b l e i n t ( 0 . 5 0 , 0 . 5 0 ) ;D o u b l e i n t s i = new D o u b l e i n t ( 0 . 3 3 , 0 . 3 4 ) ;D o u b l e i n t t i = r i . p l u s ( s i ) ; // = s i . p l u s ( r i ) ;t . show ( ) ;t i . show ( ) ;

}}

Donne:

5/6[0 .8300000000000001 ,0 .8400000000000001 ]

32

Page 33: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Traitement des erreurs...

Reprenons le code de pop():

void pop ( ) {t h i s . c = t h i s . c . t l ; }

Comment traiter le cas this.c == null?

void pop ( ) {i f ( t h i s . c != nu l l )t h i s . c = t h i s . c . t l ; }

Probleme: laisser this.c a null est trompeur... mais que faired’autre? renvoyer un code d’erreur? (int pop()): moche...

33

Page 34: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Exceptions

Le probleme des erreurs en informatique...

D’ailleurs que se passe t-il si l’on fait?:

P i l e p = empty ( ) ;p . pop ( ) ;

Excep t i on i n th r ead ”main ” j a v a . l ang . Nu l l P o i n t e r E x c e p t i o nat Prog . pop ( P i l e . j a v a : 1 6 )at Prog . main ( P i l e . j a v a : 2 3 )

Trait moderne des langages de programmation: les exceptions

34

Page 35: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Qu’est-ce qu’une exception?

Un essai de definition

C’est le resultat d’un comportement errone

Pas vraiment comme une erreur au sens classique du terme:c’est un objet traitable par le programme

Tout calcul peut lancer (“throw”) une exception, c.-a-d.retourner en plus d’une valeur, un type d’erreur, a sonappelant

Qui pourra la recuperer (“catch”) pour la traiter, ou la relancera son appelant etc.

A distinguer d’une erreur

Qui ne peut etre traitee

Qui arrete le programme dans un etat potentiellementincoherent

35

Page 36: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Une remarque en passant...

Concept absent du C

Il faut traiter les cas d’erreur de facon ad hoc...

Concept present dans les langages modernes

Caml, Java, Ada... Sauf qu’il faut traiter les exceptions, sinon...

36

Page 37: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Une remarque en passant...

Concept absent du C

Il faut traiter les cas d’erreur de facon ad hoc...

Concept present dans les langages modernes

Caml, Java, Ada... Sauf qu’il faut traiter les exceptions, sinon...

37

Page 38: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Exceptions en Java

Classes

Exception

avec pour sous-classes, IOException, RuntimeExceptionetc.

D’ou creation d’une nouvelle exception...

...par heritage:

c l a s s Monexcept ion extends E x c e p t i o n {. . .

}

Et instanciation par:

new Monexcept ion ( ) ;

38

Page 39: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Operations sur les exceptions

Declarer qu’une methode peut lancer une exception

void pop ( ) throws Monexcept ion {. . . }

dit que pop() ne renvoie rien comme donnee, mais peut lancer uneexception, rattrapable par l’environnement...

Lancer une exception

On ne doit pas faire return new Monexception();, mais plutotthrow new Monexception(); par exemple:

void pop ( ) throws Monexcept ion {i f ( t h i s . c == nu l l ) throw new Monexcept ion ( ) ;t h i s . c = t h i s . c . t l ; }

throw a une semantique un peu comme return, interrompt lecode...

39

Page 40: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Rattraper une exception

Code

t ry { p . pop ( ) ; }catch ( Monexcept ion e ) {

System . out . p r i n t l n ( ”P i l e v i d e ! ” ) ;. . . } . . .

Executions possibles:

Si p.c n’est pas null, alors p.pop() termine normalement,sans lever d’exception; le code se poursuit normalement au“...”

Si p.c est null, alors p.pop() lance une exception, qui estrattrapee par catch (Monexception e), e vaut alors l’objetde type Monexception cree par p.pop()

On peut lancer de nouveau cette exception a l’appelant del’appelant et ainsi de suite...

40

Page 41: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Les objets en (O)Caml

Principales differences avec Java

Enregistrements et objets sont les memes choses en Java

Enregistrements et objets sont differents en Caml (la partieoriente objet est une sur-couche, venue longtemps apres...)

Seules les methodes peuvent acceder aux champs en Caml(pas visible autrement) - correspond a private de Java (horsprogramme...)

Exemple Caml

c l a s s p i l e = ob j e c tv a l mutable c = ( [ ] : i n t l i s t )method g e t c ( ) = cmethod te s t empty ( ) = c=[]method push x = c<−x : : cmethod pop ( ) = c<−L i s t . t l cmethod top ( ) = L i s t . hd c

end

41

Page 42: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Interfaces

Qu’est-ce que c’est?

Ensemble de declaration de methodes sans implementation

Definies par le mot cle interface

Permettent de declarer des variables avec le type de l’interface,mais pas instanciable! (pas de constructeur en particulier)

Une classe peut implementer une ou plusieurs interfaces, parle mot cle implements

Permet de faire de l’heritage multiple en quelque sorte, maisseulement simple, de code

42

Page 43: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Exemple - quasi fonctionnel ;-)

Interface pour les fonctions de N dans Ni n t e r f a ce F u n c t i o n {

pub l i c i n t a p p l y ( i n t n ) ;}

Une seule methode a implementer pour etre une fonction de Ndans N: l’application!

43

Page 44: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Exemple - quasi fonctionnel ;-)

Des fonctions implementant cette interface

pub l i c c l a s s C a r r e implements F u n c t i o n {pub l i c i n t a p p l y ( i n t n ) {

return n∗n ; } }

pub l i c c l a s s Fact implements F u n c t i o n {pub l i c i n t a p p l y ( i n t n ) {

. . . return f a c t ; } }

pub l i c c l a s s Exemple {pub l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {

C a r r e x = new C a r r e ( ) ; Fact y = new Fact ( ) ;System . out . p r i n t l n ( ”C a r r e (3)= ”+x . a p p l y ( ) ) ;System . out . p r i n t l n ( ”Fact (4)= ”+y . a p p l y ( ) ) ; }

44

Page 45: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

A quoi servent les interfaces?

Une interface est la donnee d’une signature de methodes sansleur implementation. Exemple:

i n t e r f a ce F u n c t i o n {pub l i c i n t a p p l y ( i n t n ) ;

}

C’est un contrat (minimal, cf. cours 6 et 8) entre leprogrammeur et des utilisateurs eventuels

pub l i c c l a s s Toto implements F u n c t i o n {pub l i c i n t a p p l y ( i n t n ) {

// IMPLEMENTATION PROMISE}// AUTRES METHODES EVT . . . }

Il y aura une erreur a la compilation si les methodes promisesne sont pas implementees, avec le bon type!

45

Page 46: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Interet

Stylistique

Permet de separer les definitions “utiles a tous” ou“exportables” des implementations (comme les .h/.c en C)

46

Page 47: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Interet

Expressivite

On peut ecrire un code ne manipulant que des objets d’untype interface donne

N’utilisant une implementation donnee que choisiedynamiquement, par transtypage:

pub l i c c l a s s pow2n implements Funct i on {pub l i c i n t app l y ( i n t n ) {

i n t r e s =1;f o r ( i n t i =0; i<n ; i++) r e s=2∗ r e s ;r e t u r n r e s ; } }

pub l i c c l a s s bet te rpow2n implements Funct i on {pub l i c i n t app l y ( i n t n ) { // suppose n>2

i n t k=1; i n t r e s =2;wh i l e ( k < n−1) {

r e s = r e s∗ r e s ;k = 2∗k

} . . . r e t u r n r e s ; } }

pub l i c c l a s s Exemple {pub l i c s t a t i c vo id main ( S t r i n g [ ] a r g s ) {

Funct i on x = ( Funct i on ) new pow2n ( ) ; // cho i x pow2n/ bet te rpow2n. . . x . app l y ( y ) . . . ;. . .

47

Page 48: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Interet

Pour aller plus loin

Permet de “simuler” l’heritage multiple, tout en ayant unheritage simple de code

Tres utile par exemple pour les threads JAVA, RMI etc. (coursINF431/INF 560)

Exemple: interface Runnable etc.

pub l i c c l a s s Example extends MaClasseimplements Runnable {

pub l i c void run ( ) {// FAIRE QQCHOSE

}

pub l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {Example ex = new Example ( ) ;Thread t = new Thread ( ex ) ;t . s t a r t ( ) ; } }

48

Page 49: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Heritage et typage

Relation de sous-typage

On note T ← S si S est un sous-type de T , defini par:

T ← T

si la classe S est une sous-classe de T , on a T ← S

si l’interface S est une sous-interface de I , on a I ← S ;

si la classe C implemente l’interface I , on a I ← C

si T ← S , alors T []← S []

si S ← SS et T ← S , alors T ← SS

Propriete fondamentale

Si T ← S , alors toute valeur du type S peut etre utilisee en lieu etplace d’une valeur de type T (transtypage implicite)

49

Page 50: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Transtypage?

Implicite

Si S sous-type de T , on peut faire le transtypage (cast) implicite:

S x = new S ( . . . ) ;T y = x ;

50

Page 51: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Transtypage

Dans l’autre sens?

Interdit! (meme quand finalement assez similaires...)

c l a s s X { f l o a t n ; }c l a s s Y extends X {

pub l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {X x = new X ( ) ;Y y = x ; } }

A la compilation on obtient une erreur:

j a v a c Y . j a v aY . j a v a : 5 : i n c ompa t i b l e t yp e sfound : Xr e q u i r e d : Y

Y y = x ; }ˆ

1 e r r o r

51

Page 52: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Transtypage explicite

Il faut faire un transtypage (cast) explicite:

c l a s s X { f l o a t n ; }c l a s s Y1 extends X {

pub l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {X x = new X ( ) ;Y1 y = (Y1) x ; } }

A la compilation tout se passe bien...mais le bon comportementdans ce cadre depend entierement de l’utilisateur (6= typage fort ala CAML, cf. cours 9)

En C

Le cast est d’emploi tres courant, par exemple a l’allocation (cf.cours 2, listes...):

L i s t r e s = ( L i s t ) ma l l o c ( s i z e o f ( s t r u c t s t L i s t ) ) ;

car malloc renvoie le type fourre-tout void *...

52

Page 53: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Classes abstraites

Qu’est-ce que c’est?

Sorte d’intermediaire entre interfaces et classes (ditesconcretes)

Permettent de definir des variables avec le type correspondantet permettent l’heritage (comme les classes concretes)

Permettent de specifier des methodes abstraites avec l’attributabstract, qui sont des specifications de methodes, mais pasleur implementation; pas de new possible (comme lesinterfaces);

On peut melanger des definitions de methodes concretes(implementees) et des methodes abstraites (different desinterfaces)

Une sous-classe d’une classe abstraite n’implementant pastoutes les methodes abstraites d’une classe abstraite doiventetre declarees abstract

53

Page 54: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Retour sur les types somme

Expressions arithmetiques:

expr = Var | Cste | expr + expr | expr ∗ expr | −expr

c l a s s Expr {i n t s e l e c t ;i n t Cste ;S t r i n g Var ;Typop Op ;Expr gauche ;Expr d r o i t e ; . . . }

enum Typop {p l u s , minus , t i m e s }

on inclut tout dans le type produit... (R + R ⊆ R× R, egalitedans les espaces vectoriels...)

54

Page 55: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Mais “propre” avec les constructeurs

Du coup

On utilise select: si 0, l’expression est une constante (champCste), si 1, l’expression est une variable (champ Var), si 2,l’expression est un operateur binaire (Op est plus ou times)et les sous-expressions sont gauche et droite, ou l’expressionest unaire (Op est minus) et gauche est la sous-expression

il est alors commode de definir plusieurs constructeurs selonles cas (qui “imitent” les injections dans le type somme):

Expr ( i n t c o n s t a n t e ) {s e l e c t = 0 ; Cste = c o n s t a n t e ; }

Expr ( S t r i n g v a r i a b l e ) {s e l e c t = 1 ; Var = v a r i a b l e ; }

Expr ( Typop o p e r a t e u r , Expr a r g l , Expr a r g r ) {s e l e c t =2; Op=o p e r a t e u r ; gauche=a r g l ; d r o i t e=a r g r ;}Expr ( Expr a rg ) {

s e l e c t = 2 ; Op = minus ; gauche = arg ; }

55

Page 56: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Exemple

Une expression: 2 ∗ x + 1 est representee comme:

Expr e1 = new Expr ( 1 ) ;Expr e2 = new Expr ( 2 ) ;Expr e3 = new Expr ( ”x ” ) ;Expr e4 = new Expr ( t imes , e2 , e3 ) ;Expr e5 = new Expr ( p l u s , e4 , e1 ) ;

+

×

2 x

1

56

Page 57: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Exemple (Denis Monasse)

Retour sur les types somme...

abstract c l a s s C a r t e {pub l i c s t a t i c f i n a l i n t PIQUE = 0 ,

COEUR = 1 , CARREAU = 3 , TREFLE = 4 ;i n t c o u l e u r ;

abstract i n t v a l e u r ( i n t c o u l e u r a t o u t ) ; }

c l a s s As extends C a r t e {i n t v a l e u r ( i n t c o u l e u r a t o u t ) { return 1 1 ; }

c l a s s V a l e t extends C a r t e {i n t v a l e u r ( i n t c o u l e u r a t o u t ) {

i f ( c o u l e u r==c o u l e u r a t o u t ) return 2 0 ;e l s e return 1 ; }

. . .

De meme, vous pourriez reprendre les expressions arithmetiques...57

Page 58: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Paquetages et collections

Permet d’organiser un ensemble de classes et d’interfaces enun tout coherent (sorte de module a la CAML)

Limite en particulier la portee des identificateurs

Un paquetage peut avoir un nom, et des sous-paquetages (unearborescence, comme des repertoires UNIX...)

Exemple

L’API standard de JAVA est organisee en paquetage etsous-paquetages!

Paquetage java qui contient comme sous-paquetagesjava.lang, java.io, java.util etc.

58

Page 59: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Paquetages

CLASSPATH

Java cherche les .class (bytecode Java correspondant a lacompilation de .java) dans les repertoires listes dans lavariable d’environnement CLASSPATH

Chez moi:

> echo $CLASSPATH. : / U s e r s / E r i c / Cours /X/ INF321

. est le repertoire courant et INF321 est le repertoire ou jeprogramme

Autre solution, indiquer le CLASSPATH a lacompilation/execution:

> j a v a c −cp CHEMIN t o t o . j a v a> j a v a −cp CHEMIN t o t o

59

Page 60: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Paquetages

Le nom d’un paquetage et de sous paquetagespaquet.souspaquet.soussouspaquet... doit refleter uneorganisation en repertoires, sous-repertoires etc.

A partir du CLASSPATH, on doit trouver ces repertoires:

> l s / U s e r s / E r i c / Cours /X/ INF321. . .paquet /. . .> l s / U s e r s / E r i c / Cours /X/ INF321 / paquets o u s p a q u e t /. . .

60

Page 61: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Paquetages

Definir un paquetage

Dans le repertoire/Users/Eric/Cours/X/INF321/essaipackage:

package e s s a i p a c k a g e ;

pub l i c c l a s s A {pub l i c i n t methodeA ( ) {

return 0 ;}

}

package e s s a i p a c k a g e ;

pub l i c c l a s s B {pub l i c i n t methodeB ( ) {

return 1 ;}

}61

Page 62: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Paquetages

Compilation

Remarquez bien: une seule classe public dans un fichier JAVA, dumeme nom que le fichier le contenant

> cd / U s e r s / E r i c / Cours /X/ INF321> j a v a c e s s a i p a c k a g e /∗ . j a v a

62

Page 63: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Utilisation de classes d’un paquetage

Sous /Users/Eric/Cours/X/INF321:

pub l i c c l a s s e s s a i {pub l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {

System . out . p r i n t l n (new e s s a i p a c k a g e . A ( ) . methodeA ( ) ) ;System . out . p r i n t l n (new e s s a i p a c k a g e . B ( ) . methodeB ( ) ) ;

}}

Compilation et execution

> j a v a c e s s a i . j a v a> j a v a e s s a i01

63

Page 64: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Paquetages

Importer un paquetage

import e s s a i p a c k a g e .A ;import e s s a i p a c k a g e .B ;

pub l i c c l a s s e s s a i 2 {pub l i c s t a t i c vo id main ( S t r i n g [ ] a r g s ) {

System . out . p r i n t l n (new A( ) . methodeA ( ) ) ;System . out . p r i n t l n (new B( ) . methodeB ( ) ) ;

}}

On peut importer toutes les fonctions d’un paquetage (maispas recursivement dans les sous-paquetages):

import j a v a . i o . ∗ ;

Remarques: java.lang est toujours importeautomatiquement - toutes les classes definies jusqu’a presentetaient dans le paquetage anonyme!

Possibilite de compresser (archiver) un paquetage: .jar (unpeu similaire a des .zip)

64

Page 65: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

Collections

Collections

Pour aller plus loin, les collections, qui permettent de representerdivers types d’elements d’objets JAVA...

65

Page 66: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

C’est tout pour aujourd’hui..

La prochaine fois

Les fonctions recursives (programmation)

Les fonctions recursives primitives et partielles (theorie de lacalculabilite)

Bon TD!

66

Page 67: INF 321 Classes, Objets, Exceptions · Plus g en eralement, les champs static sont communs a tous les objets de cette classe Et les m ethodes dans tout cela? Moche ce que l’on a

C’est tout pour aujourd’hui..

La prochaine fois

Les fonctions recursives (programmation)

Les fonctions recursives primitives et partielles (theorie de lacalculabilite)

Bon TD!

67