46
POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les données sont regroupées avec les traitements qui les utilisent. Une classe Facture regroupe, par exemple, tout ce que l’on peut faire avec une facture, avec toutes les données nécessaires à ces traitements.

POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Embed Size (px)

Citation preview

Page 1: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

POO : Objets et classes (Rappels)

Objectifs de la POO:

• On manipule des objets.

• Les programmes sont découpés suivant les types des objets manipulés.

• Les données sont regroupées avec les traitements qui les utilisent.

• Une classe Facture regroupe, par exemple, tout ce que l’on peut faire avec une facture, avec toutes les données nécessaires à ces traitements.

Page 2: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Notion d’objet en Java (Rappels)

L’état interne est donné par des valeurs de variables d’instances.

Le comportement est donné par des fonctionsou procédures, appelées méthodes.

Un objet a: – une adresse en mémoire (identifie l’objet) – un comportement (ou interface) – un état interne

Page 3: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Qu’est-ce qu’un objet? (Rappels)

• Toute entité identifiable, concrète ou abstraite, peut être considérée comme un objet.

• Un objet réagit à certains messages qu'on lui envoie de l'extérieur ; la façon dont il réagit détermine le comportement de l'objet.

• Il ne réagit pas toujours de la même façon à un même événement ; sa réaction dépend de l’état dans lequel il se trouve.

Page 4: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Exemple d’objet (Rappels)

Page 5: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Exemple d’objet (Rappels)

Page 6: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Interactions entre objets (Rappels)

Les objets interagissent en s’envoyant des messages synchronesLes méthodes d’un objet correspondent aux messages qu’on peut lui envoyer : quand un objet reçoit un message, il exécute la méthode correspondanteExemples :

objet1.decrisToi();

employe.setSalaire(20000);

voiture.demarre();

voiture.vaAVitesse(50);

Objet qui reçoit le message

Message envoyé

Page 7: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Interactions entre objets (Rappels)

Message envoyé

Page 8: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Messages entre objets (Rappels)

Pierre envoie un message à sa voiture

maVoiture.vaVitesse(70)

Page 9: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

9

Paradigme objet (Rappels)

La programmation objet est un paradigme, une manière de « modéliser le monde » :

– des objets ayant un état interne et un comportement– collaborent en s'échangeant des messages (pour fournir les

fonctionnalités que l'on demande à l'application)

D’autres paradigmes :– programmation impérative (Pascal, C)– programmation fonctionnelle (Scheme, Lisp)

Page 10: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

10

Classes Java (Rappels)

• Les objets qui collaborent dans une application sont souvent très nombreux.

• Mais on peut le plus souvent dégager des types d'objets : des objets ont une structure et un comportement très

proches, sinon identiques.

• Par exemple, tous les livres dans une application de gestion d'une bibliothèque.

• La notion de classe correspond à cette notion de types d'objets.

• Un objet correspond à une instanciation de classes

Page 11: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

11

Classes et instances

Une instance d’une classe est créée par un desconstructeurs de la classe.

Une fois qu’elle est créée, l’instance :

– a son propre état interne (les valeurs des variables) – partage le code qui détermine son comportement (les

méthodes) avec les autres instances de la classe

Page 12: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

12

Constructeurs d’une classe

Chaque classe a un ou plusieurs constructeursqui servent à :

– créer les instances– initialiser l’état de ces instances

Un constructeur

– a le même nom que la classe– n’a pas de type retour

Page 13: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

13

Création d’une instance

variablesd’instance

création d'une instancede Employe

Page 14: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

14

Plusieurs constructeurs (surcharge)

Page 15: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

15

Constructeur par défaut

Lorsque le code d’une classe ne comporte pas de constructeur, un constructeur sera automatiquement ajouté par Java

Pour une classe Classe, ce constructeur sera par défaut défini par Java

[public] Classe() { }

Page 16: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

16

les accesseurs

Deux types de méthodes servent à donner accès aux variables depuis l’extérieur de la classe :

les accesseurs en lecture pour lire les valeursdes variables ; « accesseur en lecture » estsouvent abrégé en « accesseur »

les accesseurs en écriture, ou modificateurspour modifier leurs valeurs

Page 17: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

les accesseurs de modification public class Emprunteur {

private String prenom = "";

public void setPrenom(String prenom) {

this.prenom = prenom;

}

}

Valeur en entrée de la méthode

Page 18: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

les accesseurs de lecture : Exemple

public class Emprunteur {

private String prenom = "";

public String getPrenom() { return prenom;

}

}

Valeur en sortie de la méthode

Page 19: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

19

Surcharge d’une méthode

• En Java, on peut surcharger une méthode, c’est-à-dire, ajouter une méthode qui a le même nom mais pas la même signature qu’une autre méthode :

calculerSalaire(int)calculerSalaire(int, double)

indice dansla grille des

salaires

prime accordéeaux commerciaux

Page 20: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

20

Surcharge d’une méthode

• En Java, il est interdit de surcharger une méthode en changeant le type de retour.

• Autrement dit, on ne peut différencier 2 méthodes par leur type retour.

• Par exemple, il est interdit d'avoir ces 2 méthodes dans une classe :

int calculerSalaire(int)double calculerSalaire(int)

Page 21: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

21

Types de variables

Les variables d’instances

– sont déclarées en dehors de toute méthode– conservent l’état d’un objet, instance de la classe– sont accessibles et partagées par toutes les méthodes de la classe

Les variables locales

– sont déclarées à l’intérieur d’une méthode– conservent une valeur utilisée pendant l’exécution de la méthode– ne sont accessibles que dans le bloc dans lequel elles ont été déclarées

Page 22: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

22

Déclaration des variables

• Toute variable doit être déclarée avant d’être utilisée • Déclaration d’une variable : on indique au compilateur que le

programme va utiliser une variable de ce nom et de ce type

Exemples:

double prime;Employe e1;Point centre;

Page 23: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

23

Affectation des variables

• L’affectation d’une valeur à une variable est effectuée par l’instruction:

variable = expression;• L’expression est calculée et ensuite la valeur

calculée est affectée à la variable

Exemple :

x = 3;

x = x + 1;

Page 24: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

24

Initialisation d’une variable

• Une variable doit être initialisée (recevoir une valeur) avant d’être utilisée dans une expression.

• Si elles ne sont pas initialisées par le programmeur, les variables d’instance reçoivent les valeurs par défaut de leur type, si elle sont de type primitif, et null sinon.

• L’utilisation d’une variable locale non initialisée par le programmeur provoque une erreur (pas d’initialisation par défaut)

Page 25: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

25

Initialisation d’une variable

On peut initialiser une variable en la déclarant.

La formule d’initialisation peut être une expression complexe :

double prime = 2000.0;

Employe e1 = new Employe("Dupond", "Jean");

double salaire = prime + 5000.0;

Page 26: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

26

Désigner les variables d’une instance

• Soit un objet o1 ; la valeur d’une variable v deo1 est désignée par o1.v .

Par exemple,Cercle c1 = new Cercle(p1, 10);System.out.println(c1.rayon); // affiche 10

Remarque : le plus souvent les variables sont privateet on ne peut y accéder directement en dehors de leurclasse

Page 27: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

27

Accès aux membres d’une classe

• Degrés d'encapsulation

– Java permet plusieurs degrés d’encapsulation pour les membres (variables et méthodes) et les constructeurs d’une classe

– L’encapsulation est le fait de ne montrer et de ne permettre de modifier que ce qui est nécessaire à une bonne utilisation

Page 28: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

28

Types d'autorisation d'accès

• private : seule la classe dans laquelle il est déclaré a accès (à ce membre ou constructeur)

• public : toutes les classes sans exception y ont accès

• Sinon, par défaut, seules les classes du même paquetage que la classe dans lequel il est déclaré y ont accès

Rappel : un paquetage est un regroupement de classes.

Page 29: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

29

Méthodes et variables de classe

Variables de classe– Certaines variables sont partagées par toutes les

instances d’une classe. Ce sont les: variables de classe (modificateur static)

– Si une variable de classe est initialisée dans sa déclaration, cette initialisation est exécutée une seule fois quand la classe est chargée en mémoire

Page 30: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Mémoire

e1

e2 public static void main(String[] args) {

Emprunteur e1 ; Emprunteur e2; Emprunteur e3;

e3

}

Page 31: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Mémoire

e1

e2 public static void main(String[] args) {

Emprunteur e1 ; Emprunteur e2; Emprunteur e3;

e3 e1 = new Emprunteur("Lefevre","Celian"); e2 = new Emprunteur("Dupont","Charlotte"); e3 = new Emprunteur("Cartier", "Sébastien");

}

Page 32: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Mémoire

e1

e2 public static void main(String[] args) {

Emprunteur e1 ; Emprunteur e2; Emprunteur e3;

e3 e1 = new Emprunteur("Lefevre","Celian"); e2 = new Emprunteur("Dupont","Charlotte"); e3 = new Emprunteur("Cartier", "Sébastien");

}

Page 33: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

Mémoire

e1

e2

public static void main(String[] args) {

Emprunteur e1 ; Emprunteur e2; Emprunteur e3;

e3 e1 = new Emprunteur("Lefevre","Celian"); e2 = new Emprunteur("Dupont","Charlotte"); e3 = new Emprunteur("Cartier", "Sébastien");

}

Page 34: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

34

Méthodes de classe

• Une méthode de classe (modificateur static en Java) exécute une action indépendante d’une instance particulière de la classe

• Une méthode de classe peut être considérée comme un message envoyé à une classe

• Exemple :public static int getNbEmployes() {

return nbEmployes;}

Page 35: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

35

Désigner une méthode de classe

• Pour désigner une méthode static depuis une autre classe, on la préfixe par le nom de la classe :

int n = Employe.getNbEmploye();

• On peut aussi la préfixer par une instance quelconque de la classe (à éviter car cela nuit à la lisibilité : on ne voit pas que la méthode est static) :int n = e1.getNbEmploye();

Page 36: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

36

Méthodes de classe

• Comme une méthode de classe exécute une action indépendante d’une instance particulièrede la classe, elle ne peut utiliser de référence àune instance courante (this)

• Il serait, par exemple, interdit d’écrire

static double tripleSalaire() {return salaire * 3;

• }

Page 37: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

37

La méthode static main

• La méthode main() est nécessairement static.

Pourquoi ?

• La méthode main() est exécutée au début du programme. Aucune instance n’est donc déjà créée lorsque la méthode main() commence son exécution. Ça ne peut donc pas être une méthode d’instance.

Page 38: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

38

L’héritage

• L'héritage de classe est un des constituants primordiaux de la programmation orientée objet.

• C'est un mécanisme permettant de créer une nouvelle classe en partant d'une classe existante.

• La nouvelle classe (classe fille) conservera les propriétés et méthodes de la classe d'origine (classe mère), tout en pouvant y ajouter ses propres.

• On dit aussi que la classe fille étend la classe mère.

Page 39: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

L’héritage

Page 40: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

L’héritage

Page 41: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

L’héritage

Page 42: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

42

Le polymorphisme

• Le polymorphisme correspond à la possibilité pour un opérateur ou une fonction d'être utilisable dans des contextes différents

Page 43: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

43

Le polymorphisme

• Ainsi, on peut par exemple définir plusieurs méthodes homonymes addition() effectuant une somme de valeurs.

• La méthode int addition(int, int) pourra retourner la somme de deux entiers

• La méthode float addition(float, float) pourra retourner la somme de deux flottants

• La méthode char addition(char, char) pourra définir au gré de l'auteur la somme de deux caractères

• etc.

Page 44: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

44

Le polymorphisme d'héritage

• La possibilité de redéfinir une méthode dans des classes héritant d'une classe de base s'appelle la spécialisation.

• Il est alors possible d'appeler la méthode d'un objet sans se soucier de son type intrinsèque : il s'agit du polymorphisme d'héritage.

• Ceci permet de faire abstraction des détails des classes spécialisées d'une famille d'objet, en les masquant par une interface commune (qui est la classe de base).

Page 45: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

45

Les interfaces

• Une interface est constituée d'un ensemble de déclarations de méthodes sans implantation.

• On n'y trouve uniquement, pour chaque méthode, que la définition de son profil, c'est-à-dire son en-tête suivi de ; .

• Les interfaces sont définies par le mot clé interface.

• Si les interfaces permettent de déclarer des variables de référence portant leur type, elles ne sont pas, par contre, instanciables. En particulier une interface ne possède pas de constructeur.

• Une classe peut implanter une ou plusieurs interface(s) : la définition de la classe comporte alors le mot clé implements suivi d'une liste de noms d'interfaces (les noms des interfaces implantées y sont séparés par une virgule).

Page 46: POO : Objets et classes (Rappels) Objectifs de la POO: On manipule des objets. Les programmes sont découpés suivant les types des objets manipulés. Les

46

Les interfaces

public interface MonInterface {

[public abstract] type methode1([arguments]); ...

}

Public class MaClass implements MonInterface {public type methode1([arguments]) {// Implementation de la méthode methode1…}

}