• Aucun résultat trouvé

Programmation Orientée Objet

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation Orientée Objet"

Copied!
27
0
0

Texte intégral

(1)

Programmation Orientée Objet

Valeur d’accueil et de reconversion en informatique (VARI1) Daniel Porumbel (dp.cnam@gmail.com)

http://cedric.cnam.fr/~porumbed/vari1/

(2)

v o i d se tup

( )

{

f l o a t

a

=

1 . 0 / 6 0

; f l o a t

b

=

1 . 0 / 3 0

; f l o a t

c

=

1 . 0 / 2 0

; i f

( 1 0

( a+b+c )==1 )

{

p r i n t l n ( " 10( a+b+c ) v a u t 1 " )

; }

e l s e{

p r i n t l n ( " 10( a+b+c ) d i f f é r e n t de 1 " )

; }

}

1 Que devrait afficher ce programme ? 2 Qu’affiche-t-il réellement ?

=⇒ On a besoin d’une nouvelle structure de données !

(3)

v o i d se tup

( )

{

f l o a t

a

=

1 . 0 / 6 0

; f l o a t

b

=

1 . 0 / 3 0

; f l o a t

c

=

1 . 0 / 2 0

; i f

( 1 0

( a+b+c )==1 )

{

p r i n t l n ( " 10( a+b+c ) v a u t 1 " )

; }

e l s e{

p r i n t l n ( " 10( a+b+c ) d i f f é r e n t de 1 " )

; }

}

1 Que devrait afficher ce programme ? 2 Qu’affiche-t-il réellement ?

=⇒ On a besoin d’une nouvelle structure de données !

(4)

On définit la structure/classe de Fraction

c l a s s Frac{

i n t num; / / numérateur

i n t den; / / dénominateur

Frac( i n t x , i n t y ){ / / f r a c t i o n x / y

num = x ;

den = y ;

}

f l o a t v a l F l o a t ( ){ / / r e n v o i e une v a l e u r r e t u r n ( f l o a t ) num / den; / / de t y p e f l o a t }

}

v o i d se tup( ) {

Frac a=new Frac( 2 , 3 ); / / i n i t i a l i s e a=2 / 3 p r i n t l n ( a . v a l F l o a t ( ) ) ; / / a f f i c h e 0.6666667

}

3/18

(5)

On définit la structure/classe de Fraction

c l a s s Frac{

i n t num; / / numérateur

i n t den; / / dénominateur

Frac( i n t x , i n t y ){ / / f r a c t i o n x / y

num = x ;

den = y ;

}

f l o a t v a l F l o a t ( ){ / / r e n v o i e une v a l e u r r e t u r n ( f l o a t ) num / den; / / de t y p e f l o a t }

}

v o i d se tup( ) {

Frac a=new Frac( 2 , 3 ); / / i n i t i a l i s e a=2 / 3 p r i n t l n ( a . v a l F l o a t ( ) ) ; / / a f f i c h e 0.6666667

}

constructeur

Fonction qui peut s’appliquer sur des objets de type Frac

(6)

On définit la structure/classe de Fraction

c l a s s Frac{

i n t num; / / numérateur

i n t den; / / dénominateur

Frac( i n t x , i n t y ){ / / f r a c t i o n x / y

num = x ;

den = y ;

}

f l o a t v a l F l o a t ( ){ / / r e n v o i e une v a l e u r r e t u r n ( f l o a t ) num / den; / / de t y p e f l o a t }

}

v o i d se tup( ) {

Frac a=new Frac( 2 , 3 ); / / i n i t i a l i s e a=2 / 3 p r i n t l n ( a . v a l F l o a t ( ) ) ; / / a f f i c h e 0.6666667

}

attributs visibles dans valFloat(), car valFloat()s’applique sur des objets Frac

3/18

(7)

La possibilité d’inverser une Frac(tion)

c l a s s Frac{

i n t num; / / numérateur

i n t den; / / dénominateur

Frac( i n t x , i n t y ){ / / f r a c t i o n x / y

num = x ;

den = y ;

}

f l o a t v a l F l o a t ( ){ / / r e n v o i e une v a l e u r r e t u r n ( f l o a t ) num / den; / / de t y p e f l o a t }

v o i d i n v e r s e r ( ){ i n t tmp = num;

num = den;

den = tmp;

} }

(8)

Qu’affiche ce code ?

v o i d se tup( ) {

Frac a=new Frac( 2 , 3 ) ; / / i n i t i a l i s e a=2 / 3 a . i n v e r s e r ( ) ;

p r i n t l n ( a . v a l F l o a t ( ) ); Frac b = new Frac( 4 , 5 ); Frac c = new Frac( 1 , 2 ); b . i n v e r s e r ( ) ;

c . i n v e r s e r ( ) ; c . i n v e r s e r ( ) ;

p r i n t l n ( b . v a l F l o a t ( ) ); p r i n t l n ( c . v a l F l o a t ( ) );

}

5/18

(9)

Qu’affiche ce code ?

v o i d se tup( ) {

Frac a=new Frac( 2 , 3 ) ; / / i n i t i a l i s e a=2 / 3 a . i n v e r s e r ( ) ; / / a=3 / 2

p r i n t l n ( a . v a l F l o a t ( ) ); / / 1 . 5 Frac b = new Frac( 4 , 5 ); / / b=4 / 5 Frac c = new Frac( 1 , 2 ); / / c=1 / 2 b . i n v e r s e r ( ) ; / / b=5 / 4 c . i n v e r s e r ( ) ; / / c=2 / 1 c . i n v e r s e r ( ) ; / / c=1 / 2 p r i n t l n ( b . v a l F l o a t ( ) ); / / 1.25 p r i n t l n ( c . v a l F l o a t ( ) ); / / 0 . 5

}

(10)

Que affiche ce code ?

c l a s s Frac{

i n t num; / / numérateur

i n t den; / / dénominateur

. . . . . . . .

boolean e g a l (i n t i ){ i f ( num==den∗i )

r e t u r n t r u e ; r e t u r n f a l s e ; }

}

v o i d se tup( ) {

Frac a=new Frac( 6 , 3 ) ; / / i n i t i a l i s e a=6 / 3 i f ( a . e g a l ( 2 ) )

p r i n t l n (" 6 / 3=2 ") ;

} 6/18

(11)

Quel est le role de simplifier() ?

c l a s s Frac{

i n t num; / / numérateur

i n t den; / / dénominateur

. . . .

v o i d s i m p l i f i e r ( ){

f o r( i n t d i v=2;d i v <num;d i v ++) / / s i d i v e s t d i v i s e u r commun i f ( ( num%d i v==0 )&&( den%d i v==0 ) ){

num = num / d i v; den = den / d i v ; }

}

}

! Rappel : l’opérateur% renvoie le reste de la division

(12)

! toString()convertit l’objet en chaîne de caractères

c l a s s Frac{

i n t num; / / numérateur

i n t den; / / dénominateur

. . . . . . . .

S t r i n g t o S t r i n g ( ) {

S t r i n g s = num + " / "+den; r e t u r n s;

} }

v o i d se tup( ) {

Frac a=new Frac( 6 , 4 ) ; / / i n i t i a l i s e a=6 / 4 p r i n t l n ( a . t o S t r i n g ( ) );

p r i n t l n ( a ); / / . t o S t r i n g ( ) e s t appelé

/ / automatiquement=>a . t o S t r i n g ( )

}

(13)

! toString()convertit l’objet en chaîne de caractères

c l a s s Frac{

i n t num; / / numérateur

i n t den; / / dénominateur

. . . . . . . .

S t r i n g t o S t r i n g ( ) {

S t r i n g s = num + " / "+den; r e t u r n s;

} }

v o i d se tup( ) {

Frac a=new Frac( 6 , 4 ) ; / / i n i t i a l i s e a=6 / 4 p r i n t l n ( a . t o S t r i n g ( ) );

p r i n t l n ( a ); / / . t o S t r i n g ( ) e s t appelé

/ / automatiquement=>a . t o S t r i n g ( )

}

Pour tout type d’objet,toString() est appelé automatiquement lors des affichages comme println(obj)

(14)

Multiplication et ajout (somme)

c l a s s Frac{

i n t num; / / numérateur

i n t den; / / dénominateur

. . . . . . . .

/ / m u l t i p l i e r l a f r a c t i o n par un f a c t o r v o i d m u l t i p l i e r (i n t f a c t o r ){

num = num∗f a c t o r ; }

/ / a j o u t e r f à l a f r a c t i o n v o i d a j o u t e r (Frac f ){

num = num∗f . den+den∗f . num; den = den∗f . den;

}

}

9/18

(15)

Multiplication et ajout (somme)

c l a s s Frac{

i n t num; / / numérateur

i n t den; / / dénominateur

. . . . . . . .

/ / m u l t i p l i e r l a f r a c t i o n par un f a c t o r v o i d m u l t i p l i e r (i n t f a c t o r ){

num = num∗f a c t o r ; }

/ / a j o u t e r f à l a f r a c t i o n v o i d a j o u t e r (Frac f ){

num = num∗f . den+den∗f . num; den = den∗f . den;

}

}

a

b

+

dc

=

ad+bcbd

(16)

Qu’affiche ce code ?

c l a s s Frac{ . . . . }

v o i d se tup( ) {

Frac a=new Frac ( 1 , 5 ) ; Frac b=new Frac ( 2 , 5 ) ; a. a j o u t e r( b ) ;

p r i n t l n (a); a. s i m p l i f i e r ( ) ;

p r i n t l n (a);

a. m u l t i p l i e r ( 1 0 ); p r i n t l n (a);

a. s i m p l i f i e r ( ) ; p r i n t l n (a);

}

10/18

(17)

Qu’affiche ce code ?

c l a s s Frac{ . . . . }

v o i d se tup( ) {

Frac a=new Frac ( 1 , 5 ) ; Frac b=new Frac ( 2 , 5 ) ; a. a j o u t e r( b ) ;

p r i n t l n (a); / / 15/25 a. s i m p l i f i e r ( ) ;

p r i n t l n (a); / / 3 / 5 a. m u l t i p l i e r ( 1 0 );

p r i n t l n (a); / / 30/5 a. s i m p l i f i e r ( ) ;

p r i n t l n (a); / / 6 / 1

}

(18)

Calcul correct 10 ·

601

+

301

+

201

= 1

c l a s s Frac{ . . . . }

v o i d se tup( ) {

Frac a=new Frac ( 1 , 6 0 ); Frac b=new Frac ( 1 , 3 0 ); Frac c=new Frac ( 1 , 2 0 );

a. a j o u t e r( b ) ; / / 1/ 60+ 1/ 30

a. a j o u t e r( c ) ; / / 1 / 6 0 + 1 / 3 0 + 1 / 20 a. m u l t i p l i e r ( 1 0 ); / / 1 0 ( 1 / 6 0 + 1 / 3 0 + 1 / 2 0 )

i f (a. e g a l ( 1 ) )

p r i n t l n (" 10( a+b+c ) v a u t 1 "); e l s e

p r i n t l n (" 10( a+b+c ) d i f f é r e n t de 1 ");

}

12/18

(19)

La notion théorique d’objet

Un objet

possède un état constitué de valeurs (attributs)

possède des actions (méthodes) qui peuvent agir sur ce cet état pour le modifier

les méthodes définissent le comportement d’un objet Un objet est une instance (un exemplaire) d’une classe

(20)

La notion théorique de classe

Une classe est unmodèlepour construire des objets classe = moule à objets

Toute classe définit :

les caractéristiques (attributs) de ses objets

chaque objet d’une classe possède une copie de l’ensemble de ces attributs

l’ensemble des actions (méthodes) que l’on peut effectuer sur les objets

Des constructeurs : des méthodes qui initialisent les attri- buts avec des valeurs

14/18

(21)

Autre exemple : quel est le résultat du code ?

c l a s s Compte{ i n t s o l d e;

Compte( ) { / / c o n s t r u c t e u r s o l d e = 0; / / sans arguments }

p u b l i c v o i d a j o u t e r ( i n t montant ){ s o l d e = s o l d e + montant;

} }

v o i d se tup( ) {

Compte c = new Compte( ) ; c . a j o u t e r ( 1 0 );

p r i n t l n ( c . s o l d e ) ;

}

(22)

Variables static

Une variable déclaréestaticn’appartient pas aux objets.

Elle appartient à la classe où elle est déclarée Elle est partagée par tous les objets

c l a s s Frac{

s t a t i c i n t maxDenominateur = 1000000; . . .

}

v o i d se tup( ) {

p r i n t l n ( Frac . maxDenominateur ) ;

p r i n t l n ( I n t e g e r . MAX_VALUE) ; / / a f f i c h e l a p l u s grande v a l e u r qu ’ un e n t i e r peut a v o i r

}

16/18

(23)

Méthodes static

Une méthodestaticn’est pas associée à un objet Pour l’appeler, on utilise le nom de la classe

i n t i = I n t e g e r . p a r s e I n t (" 123 "); double x = Math . round ( 6 . 6 );

double d = Math . pow ( x , 2 ) ;

(24)

Contineur la classe Compte pour :

1 Ajouter un nom de titulaire à la classeCompte

Ajouter une deuxième constructeur qui reçoit comme argu- ment le nom du titulaire

2 Accorder par défaut un crédit de 10 euros 3 Pouvoir retirer de l’argent

4 Pouvoir verser tout l’argent d’un comptec1dans un compte c2

18/18

(25)

Contineur la classe Compte pour :

1 Ajouter un nom de titulaire à la classeCompte

Ajouter une deuxième constructeur qui reçoit comme argu- ment le nom du titulaire

2 Accorder par défaut un crédit de 10 euros 3 Pouvoir retirer de l’argent

4 Pouvoir verser tout l’argent d’un comptec1dans un compte c2

(26)

Contineur la classe Compte pour :

1 Ajouter un nom de titulaire à la classeCompte

Ajouter une deuxième constructeur qui reçoit comme argu- ment le nom du titulaire

2 Accorder par défaut un crédit de 10 euros 3 Pouvoir retirer de l’argent

4 Pouvoir verser tout l’argent d’un comptec1dans un compte c2

18/18

(27)

Contineur la classe Compte pour :

1 Ajouter un nom de titulaire à la classeCompte

Ajouter une deuxième constructeur qui reçoit comme argu- ment le nom du titulaire

2 Accorder par défaut un crédit de 10 euros 3 Pouvoir retirer de l’argent

4 Pouvoir verser tout l’argent d’un comptec1dans un compte c2

Références

Documents relatifs

L’interpréteur java permet d’exécuter une application écrite en langage java (autre qu’une applet), plus spécifiquement un fichier ClassName.class (i.e le java bytecodes). Par

Une interface est introduite par le mot clé « interface », et se comporte comme une classe dont toutes les méthodes sont abstract et dont tous les attributs sont final. Les mots

Additionner deux vecteurs donnés ; on écrira pour cela une méthode statique nommée aussi addition (en utilisant ainsi la possibilité de la surcharge) qui recevra en

– Pour qu’une méthode accède aux variables déclarées dans la classe, elle doit y faire appel à l’aide de la syntaxe suivante :.

Hors cette étape n'est clairement pas du ressort d'un objet : seule la classe possède suffisamment d'informations pour la mener à bien : la création d'un objet est donc une méthode

Les exemples de code sont écrits en C#, mais sont facilement transposables à d'autres langages orientés objets comme

Si l'on appel notre méthode publique Animaux() depuis une instance de $zoo, cela va retourner de manière sécurisée notre tableau d'animaux stocké dans notre classe, et personne ne

une commande est créée pour un client et un catalogue donnés, on peut ajouter des articles à une commande, accéder à la liste des articles commandés ainsi que prix total des