• Aucun résultat trouvé

But de ce cours

N/A
N/A
Protected

Academic year: 2022

Partager "But de ce cours "

Copied!
52
0
0

Texte intégral

(1)

Java

Les Classes et les Objets

Ahcène Bounceur

(2)

La Programmation Orientée Objet

Elle se fonde sur la programmation structurée

Elle contribue à la fiabilité des logiciels

Elle facilite la réutilisation de code existant

Elle introduit de nouveaux concepts :

Objets

Encapsulation

Classe

Héritage

(3)

But de ce cours

Aborder la notion de classe dans toute sa généralité, telle qu'elle apparaît dans les concepts de P.O.O

Définir une classe et l’utiliser

Utiliser une classe signifie instancier des objets du type correspondant

Introduire la notion de référence d'un objet

Étudier l'importante notion de constructeur

C'est une méthode appelée automatiquement lors de la création d'un objet

Examiner comment se présente l'affectation d'objets

La comparer à celle des variables de type primitif

(4)

But de ce cours

Préciser les propriétés des méthodes (arguments, variables, etc.)

Aborder les possibilités de la surdéfinition (surcharge)

Présenter les modes de transmission (par valeur et par référence)

Étudier les champs (attributs) et les méthodes de classes

Présenter la notion de classe interne

Présenter la notion de paquetage (package)

(5)

La notion de classe

Définir une classe

Prenons comme exemple d'objet un point

Voici comment définir une classe Point

public class Point { }

(6)

La notion de classe

Définir le contenu d'une classe :

Les champs (ou les attributs)

Les méthodes

(7)

La notion de classe

Définition des attributs :

Pour le cas du point, les attributs sont son absicsse et son ordonnée

public class Point {

private int x ; // abscisse private int y ; // ordonnee }

(8)

La notion de classe

Définition des méthodes :

Supposons que nous souhaition disposer des méthodes suivants :

initialiser : pour initialiser la position du point

deplacer : pour déplacer les point

afficher : pour afficher le point

(9)

La notion de classe

Définition des attributs :

La méthode initialiser

public class Point {

private int x ; // abscisse private int y ; // ordonnee

public void initialiser(int abs, int ord) { x = abs ;

y = ord ; }

}

(10)

La notion de classe

Définition des attributs :

Les méthodes deplacer et afficher

public class Point {

private int x ; // abscisse private int y ; // ordonnee

public void initialiser(int abs, int ord) { x = abs ;

y = ord ; }

public void deplacer(int dx, int dy) { x += dx ;

y += dy ; }

public void afficher(int abs, int ord) {

System.out.println("Point ( "+x+", "+y+")" ) ; }

}

(11)

La notion de classe

La classe Point va permettre d'instancier des objets de type Point et leur appliquer à

vonlonter les méthode publiques

Instancier = création en mémoire

Remarque :

Toutes les instructions java appartiennent à une méthode

Pour tester la classe Point, on créera une autre classe contenant la méthode main

(12)

Utiliser la classe Point

Déclaration d'une variable de type Point

Point p ;

à ce stade, p n'existe pas dans la mémoire. C'est juste une déclaration, contrairement à int x; où x est tout de suite créé en mémoire

Pour instancer un objet de type Point, on utilisera le mot clé new

p = new Point() ;

(13)

Utiliser la classe Point

Cette situation peut être schématisée comme suit :

? a ?

x y

(14)

Utiliser la classe Point

p.initialiser(3, 5)

3 a 5

x y

(15)

Utiliser la classe Point

Exemple

public class TestPoint {

public void main(String [] args) { Point p ;

p = new Point() ;

p.initialiser(3, 5) ; p.afficher() ;

p.deplacer(2, 0) ; p.afficher() ;

Point b = new Point() ; b.initialiser(6, 8) ; b.afficher() ;

}

} Exécution :

Point (3, 5) Point (5, 5) Point (6, 8)

(16)

Utiliser la classe Point

Attention !

public class TestPoint {

public void main(String [] args) { Point p ;

p = new Point() ;

p.x = 4 ; }

}

Erreur : car l’attribut x est privé (précédé par private)

(17)

Programme à plusieurs classes

Il faut créer un fichier java pour chaque classe

L'extension d'un fichier java et .java

Le nom du fichier doit être le même que celui de la classe

Pour la classe Point, le nom du fichier correspondant est : Point.java

Sa compilation donner le fichier : Point.class

(18)

Programme à plusieurs classes

Pour la classe TestPoint, le nom du fichier correspondant est : TestPoint.java

Sa compilation donner le fichier : TestPoint.class

L'execution de ce programme se fait comme suit :

javac Point.java

javac TestPoint.java java TestPoint

javac : pour compiler

java : pour lancer l'application

(19)

Programme à plusieurs classes

Tout dans un même fichier  c'est possible

public class TestPoint {

public static void main(String [] args) { Point p = new Point();

p.initialiser(10, 20);

p.afficher();

} }

class Point {

private int x ; private int y ;

public void initialiser(int abs, int ord) { x = abs ;

y = ord ; }

public void deplacer(int dx, int dy) { x += dx ;

y += dy ; }

public void afficher() {

System.out.println("Point ("+x+", "+y+")");

} }

Attention ! Ne pas mettre public ici

(20)

La notion de constructeur

Un constructeur est une méthode qui n'a pas de valeur de retour et qui porte le même nom que la classe

Il peut être utilisé avec ou sans arguments

Permet d'initialiser automatiquement un objet au moment de sa création

L'initialisation ne se limite pas à la mise en place des valeurs initiales : on peut effectuer n'importe quelle action utile au bon

fonctionnement de l'objet

(21)

La notion de constructeur

Exemple de la classe Point :

Supposons que nous voulons initialiser le point au moment de sa création. C'est-à-dire, appeler

automatiquement la méthode initialiser au moment de l'instanciation d'un point

Solutions :

On crée un constructeur qui fait appel à la méthode initialiser

On remplace la méthode initialiser par un constructeur

(22)

La notion de constructeur

Constructeur faisant appel à une méthode

public class Point {

private int x ; // abscisse private int y ; // ordonnee

public Point(int a, int o) { initialiser(a, o) ; }

public void initialiser(int abs, int ord) { x = abs ;

y = ord ; }

public void deplacer(int dx, int dy) { x += dx ;

y += dy ; }

public void afficher(int abs, int ord) {

System.out.println("Point ( "+x+", "+y+")" ) ; }

}

(23)

La notion de constructeur

Constructeur avec initialisation

public class Point {

private int x ; // abscisse private int y ; // ordonnee

public Point(int abs, int ord) { x = abs ;

y = ord ; }

public void deplacer(int dx, int dy) { x += dx ;

y += dy ; }

public void afficher(int abs, int ord) {

System.out.println("Point ( "+x+", "+y+")" ) ; }

}

(24)

La notion de constructeur

Constructeur : Rappel

public class Point {

private int x ; // abscisse private int y ; // ordonnee

public Point(int abs, int ord) { x = abs ;

y = ord ; }

public void deplacer(int dx, int dy) { x += dx ;

y += dy ; }

public void afficher(int abs, int ord) {

System.out.println("Point ( "+x+", "+y+")" ) ; }

}

Un constructeur est une méthode qui n'a pas de valeur de retour (il n’est précédé ni par void, ni int, float, …)

(25)

La notion de constructeur

Constructeur : Rappel

public class Point {

private int x ; // abscisse private int y ; // ordonnee

public Point(int abs, int ord) { x = abs ;

y = ord ; }

public void deplacer(int dx, int dy) { x += dx ;

y += dy ; }

public void afficher(int abs, int ord) {

System.out.println("Point ( "+x+", "+y+")" ) ; }

}

Un constructeur est une méthode qui porte le même nom que la classe

(26)

Construction et initialisation d’un objet

La création d'un objet entraîne, par ordre chronologique, les oéprations suivantes :

Initialisation par défaut de tous les attirbuts

Initialisation explicite lors de la déclaration des attributs

Initialisation par exécution des instructions du corps du constructeur

(27)

Construction et initialisation d’un objet

Initialisation par défaut de tous les attirbuts :

chaque déclaration d'un attribut entraine

automatiquement son initialisation par défaut. Les valeurs initialisées par défauts sont données comme suit :

Type de l’attribut Valeur par défaut booleen

char

entier (byte, short, int, long) flottant (float, double)

objet

false

caractère code nul 0

0.f ou 0.

null

(28)

Construction et initialisation d’un objet

Initialisation explicite des attributs d'un objet :

public class A {

private int n = 10 ; private int p ;

private int y = n+2 ;

public A(...) {...}

...

}

(29)

Construction et initialisation d’un objet

Initialisation par constructeur :

public class A {

private int n = 10, p = 20 ; private int y = n+2 ;

private int np ;

public A() {

np = n * p ; n = 5 ;

} ...

} n = 5

p = 20

y =12

np = 200

(30)

Déclaration des constantes

Les attributs final :

Déclarer une constante n initiélisée à 20 :

public class A {

private final int n = 20 ; ...

}

(31)

Déclaration des constantes

Une constante peut être initialisée dans un constructeur :

public class A {

private final int n;

public A() { n = 20 ; }

}

(32)

Déclaration des constantes

Attention 1 : une constante s’initialise une seule fois uniquement :

public class A {

private final int n;

public A() { n = 20 ; ...

n = 30 ; // erreur de compilation }

}

public class A {

private final int n = 20 ; public A() {

n = 30 ; // erreur de compilation }

}

(33)

Déclaration des constantes

Attention 2 : une constante doit être obligatoirement initialisée :

public class A {

private final int n;

public A() { //erreur de compilation ...

} }

(34)

Éléments de conception des classes

Une conception orientée objet s'appuie sur la notion de contrat (ce que fait une classe) et d'implémentation (comment elle le fait) :

Le Contrat : une classe est caractérisée par

Les en-têtes de ses méthodes publiques

Le comportement de ses méthodes publiques

L’Implémentation : dans une classe,

Les attributs et les corps des méthodes publiques doivents être privés

(35)

Éléments de conception des classes

L’ENCAPSULATION :

des données privées (private) permet à

l'utilisateur de modifier le comportement d'une classe sans à modifier le programme qui l'exploite.

D'une autre manière :

Modifier les valeurs des attributs en passant par des méthodes

(36)

Éléments de conception des classes

MESSAGE :

Une classe peut modifier le comportement (ou un attribut) d'une autre classe par l'intérmédiaire des méthodes

Une classe qui appelle une méthode d'une autre classe s'appelle aussi une classe qui envoie un message à une autre classe

(37)

Typologie des méthodes

Parmi les méthodes d'une classe, on distingue :

Les constructeurs

Les accesseurs (accessors ou méthodes d'accès)

Elles fournissent des informations relatives d'un état d'un objet, c'est-à-dire les attributs d'une classe

Les mutateurs (mutators ou méthode d'altération)

Ils modifient l'état d'un objet, c'est-à-dire les valeurs des attributs

(38)

Typologie des méthodes

Exemple : cas de la classe Point

public class Point {

private int x ; // abscisse private int y ; // ordonnee

public int getX() {return x ;}

public int getY() {return y ;}

public void setX(int x) {this.x = x ;}

public void setY(int y) {this.y = y ;}

public void setPosition(int x, int y) { this.x = x ;

this.y = y ; }

...

}

(39)

Affectation et comparaison d’objets

Premier exemple :

Point a, b ; ...

a = new Point (3, 5) ; b = new Point (2, 1) ;

2 b 1

x y 3

a 5

x y

(40)

Affectation et comparaison d’objets

Premier exemple :

Point a, b ; ...

a = new Point (3, 5) ; b = new Point (2, 1) ; a = b ;

2 b 1

x y 3

a 5

x y

(41)

Affectation et comparaison d’objets

Premier exemple :

Point a, b ; ...

a = new Point (3, 5) ; b = new Point (2, 1) ; a = b ;

2 b 1

x y 3

a 5

x y

(42)

Affectation et comparaison d’objets

Exemple 2 : exercice

Point a, b, c ; ...

a = new Point (1, 10) ; b = new Point (2, 20) ; c = b ;

a = b ; b = c ;

2 c 20

x y 1

a 10

x y b

(43)

Affectation et comparaison d’objets

Attention !

Une variable de type classe (l'instanciation d'une classe) est une référence et non pas une valeur

Il peut y avoir des conséquences dans la transmission d'un objet en argument d'une méthode

(44)

Initialisation de référence

Point p ;

p.afficher() ; // erreur de compilation : p n'est pas initilisé

Point p ;

if (p == null) … // juste : on compare p à null

Point p = null ; // juste

p.afficher(); // erreur de compilation

(45)

Comparer deux objets

Point a, b ;

On peut écrire : (a == b) et (a != b)

(a == b) est vrai :

Si a et b font référence à un seul et même objet

Leurs attributs auront par conséquent les mêmes valeurs

(46)

Comparer deux objets

Exercice :

Point a, b ; ...

a = new Point (1, 10) ; b = new Point (1, 10) ;

if (a == b) ... // VRAI ou FAUX ?

(47)

Le ramasse miette

Garbage Collector

Ce point est supprimé automatiquement de la mémoire après son affichage

Tous les objets non référencés seront

autmatiquement supprimée de la mémoire

(new Point (1, 10)).afficher() ;

(48)

Le ramasse miette

La méthode finalize est appelée par le

garbage collector avant qu'il supprime un objet

On peut lancer cette méthode dans un programme, ce qui peremttra de forcer l'élimination des objets par le garbage collector

Le grarbage collector ne se déclanche que si la mémoire commence à se faire rare …

(49)

Méthodes fonctions

On ajoutera la méthode distance à la classe Point :

public class Point {

private int x ; // abscisse private int y ; // ordonnee ...

public double distance() {

double d = Math.sqrt(x*x + y*y) ; return d ;

} ...

}

Règles d’écriture des méthodes

distance calcule la distance du point P par rapport à l’origine.

(50)

Règles d’écriture des méthodes

Méthodes fonctions

Voici un exemple de l'utilisation de la méthode distance de la classe Point

Point a = new Point() ; double u, v ;

...

u = 2. * a.distance() ;

v = Math.sqrt(a.getX() * a.getX() + a.getY() * a.getY() ) ;

(51)

Les arguments d’une méthode

Arguments muets

Lorsuqu'une méthode est déclarée, l'ensemble de ses arguments sont appelés arguments muets,

Lorsqu'une méthode est appelée, l'ensemble des arguments spécifiés (ou utilisés) sont appelés

arguments effectifs.

Exemple :

public void f (final int n, double x) {

n = 12 ; // erreur de compilation x = 2.5 ;

}

(52)

Merci de votre attention

Références

Documents relatifs

Vous pouvez acheter des plantes sans racines comme les cératophylles (Ceratophyllum demersum), peu onéreuses en magasin mais… qui constituent une excellente nourriture pour les

1) Les critères permettant de définir les élèves des classes genevoises dépendront des représentations des enseignants à leur sujet. Le contexte de l’école

Et je vous convie à vous rendre sur le site https://www.edumedia- sciences.com/fr/ qui vous présentera la matière d’une façon plus ludique et interactive.. Prenez le temps de lire

Ce n'est qu'après la mort de Galilée que son assistant, Evangelista Torricelli, fut capable de reconnaître que les deux effets, apparemment sans rapport, étaient en réalité

de la méthode d'expression libre dans une classe à tous les. Naturellement il ne saurait être question de éparer cet. apprentissage de la lecture de celui de

temps de décisions collectives, des temps de régulation et d’organisa- tion, des temps de présentations et d’évaluations.La façon dont le groupe classe, par exemple lors

La jeune femme a fait savoir à cet effet, que lorsque la Ligue de wilaya de football a ouvert en 2019 aux dames l’accès à la formation en arbitrage, elle a sauté sur l’occasion

- utilisabilité (ergonomie, intuitif, confort d’interaction avec l’utilisateur, temps minimal requis pour atteindre un résultat, grande souplesse d’utilisation,