Vous êtes sur la page 1sur 26

Algorithmique et programmation

Thme II Une approche objet aux structures de donnes


Cours 2 Concepts de l'orient objet Implantation Java des concepts de l'orient objet

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 1

Polymorphisme

Le polymorphisme est le fait que le comportement d'un objet dpend de sa nature


La classe dcrit la nature de l'objet Une sous-classe peut redfinir les comportements hrits selon ses besoins spcifiques Les comportements ainsi modifis sont dits polymorphiques

Le nom associ un comportement fait rfrence l'intention associe l'action raliser


Le polymorphisme fait rfrence au fait que l'implantation de cette action peut changer selon le contexte d'un objet spcifique

Exemple II-6

L'envoi et la rception d'appels se fait diffremment sur un tlphone standard et sur un tlphone cellulaire L'intention de l'envoi et de la rception est la mme

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 2

Exercice II-7

Dans le cas Video Mont-Royal


Identifiez les situations o l'on pourrait retrouver du polymorphisme

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 3

Utilisation des objets dans les algorithmes

Un algorithme peut utiliser un ou plusieurs objets Les objets utiliss dans un algorithme sont dclars dans la liste des variables de l'algorithme
Le type de l'objet correspond la classe de cet objet

nomObjet : un objet de type Classe

On peut utilis les attributs et comportements publics de l'objet dans la logique de l'algorithme
Pour utiliser un attribut : nomObjet.nomAttribut Pour utiliser un comportement : nomObjet.nomComportement(liste des paramtres)

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 4

Exercice II-8

Soit le modle objet ci-contre reprsentant les informations sur des employs d'une entreprise
Les administrateurs ont un salaire annuel seulement Tous les autres employs ont un salaire horaire Le tableau employs contient la liste de tous les employs de l'entreprise

Employ #salaireHoraire #heuresTravailles +calculePaie()

tablissez l'algorithme calculant le montant payer pour la prochaine paie


Pour toutes les classes le ncessitant, donnez l'algorithme pour le comportement calculePaie()

Technicien -spcialit

Administrateur -salaireAnnuel

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 5

Programmes Java

Un programme Java est un ensemble d'objets qui cooprent afin de rsoudre un problme
Une mthode appele main() est utilise pour initialiser les objets et coordonner leur comportement Cette mthode est localise dans une classe qui agit comme contrleur de l'excution On dit alors que cette classe est une application Java

Les caractristiques des objets sont dfinies dans des classes Java Les classes spcifient
Les attributs des objets Les comportements des objets
En programmation, les comportements sont les mthodes

Les classes avec visibilit publique sont codes dans des fichiers spars ayant le mme nom que la classe et portant l'extension .java

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 6

Exemple II-7

Voir le fichier http://tim.hec.ca/babin/2-750-04/algo/Exemple.java Voir le fichier http://tim.hec.ca/babin/2-750-04/algo/Test.java

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 7

Cration d'un objet en Java

On cre un objet avec l'oprateur new

L'oprateur new alloue l'espace en mmoire ncessaire pour stocker les attributs de l'objet Le mot cl new est suivi par un appel un constructeur
Le nom du constructeur correspond la classe de l'objet cr

On peut crer un objet et l'associer une variable d'une super-classe


Le type de la variable limite les caractristiques accessibles

Exemple II-8
Tarif t = new Tarif(); Tlphone t = new TlphoneCellulaire(); L'objet sait qu'il est de type TlphoneCellulaire mme s'il est assign une variable de type Tlphone Seules les mthodes de la classe Tlphone peuvent tre invoques
Le comportement de la mthode est celui de la classe TlphoneCellulaire

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 8

Les constructeurs

Un constructeur est utilis pour initialiser les attributs d'un objet lors de sa cration
On peut fournir plusieurs constructeurs pour une classe donne Un constructeur peut faire appel un autre constructeur de la mme classe
Les diffrents constructeurs sont alors diffrencis par leur signature

Un constructeur peut faire appel un constructeur de sa super-classe

On utilise alors l'expression this(...) avec les paramtres correspondant l'autre constructeur Cet appel doit tre le premier dans le constructeur On utilise alors l'expression super(...) avec les paramtres correspondant l'autre constructeur Cet appel doit tre le premier dans le constructeur

Lors de la dfinition d'une classe, on peut omettre le constructeur


Java cre alors un constructeur par dfaut
Le constructeur par dfaut appelle le constructeur de la super-classe Le constructeur par dfaut a la mme visibilit que la classe

La visibilit d'un constructeur peut tre prive, protge, publique

Habituellement, une classe publique aura au moins un constructeur public

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 9

Exemple II-9 : Constructeurs


1. public class Client { 2. 3. /** Nom du client */ 4. private String nom; 5. /** ID du client */ 6. private String ID; 7. /** solde du client */ 8. private int solde; 9. 10. /** Constructeur. Cre un client avec solde nul. 11. @param nomClient Nom du client cr */ 12. public Client (String nomClient) { 13. this(nomClient,0); 14. } 15. 16. /** Constructeur. Cre un client avec solde non-nul. 17. @param nomClient Nom du client cr 18. @param soldeClient Solde du client cr */ 19. public Client (String nomClient,int soldeClient) { 20. nom = nomClient; 21. ID = gnreID(); 22. solde = soldeClient; 23. } 24. 25. /** Cette mthode gnre le prochain ID pour un client */ 26. private gnreID() { 27. // dfinir plus tard 28. } 29. }

Constructeur 1

Constructeur 2

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 10

Les paquetages Java

Les paquetages ( packages ) sont une organisation hirarchique des classes On dclare le nom d'un paquetage l'aide du mot cl package au dbut du fichier contenant la classe
Ce nom doit correspondre au nom du rpertoire contenant la classe Lorsqu'on omet le nom du paquetage, le paquetage est dfini comme le rpertoire contenant la classe Pour nommer une classe, on doit normalement la prfixer de son nom de paquetage Par dfaut, le compilateur Java utilise le paquetage java.lang

Pour simplifier l'criture, on peut indiquer au compilateur qu'on utilise une classe provenant d'un autre paquetage avec le mot cl import Exemple II-10
package algo; // cette classe doit tre dans le rpertoire "algo"
import java.util.Random; // la classe Random du paquetage java.util import java.util.*; // toutes les classes du paquetage java.util

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 11

Visibilit en Java

Java offre 4 niveaux de visibilit

Visibilit prive : seuls les objets de cette classe ont accs


On utilise le mot cl private private String gnreID() {}

Visibilit publique : tous les objets ont accs


On utilise le mot cl public public String gnreID() {}

Visibilit protge : seuls les objets de cette classe et ses sous-classes ont accs
On utilise le mot cl protected protected String gnreID() {}

Visibilit de paquetage : seuls les objets des classes du mme paquetage ont accs
On n'utilise aucun mot cl String gnreID() {}

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 12

Exercice II-9

crivez les classes Java correspondant au diagramme UML suivant

Cuisinier9 +faireSandwich(entre serveur : Serveur9) : void +faireFrites(entre serveur : Serveur9) : void

Serveur9 -factures : int +prendreCommande(entre item : int, entre Client : Client9) : void +servirPlat(entre item : int, entre client : Client9) : void +produireFacture(entre client : Client9) : int

Client9 -porteFeuille : int +payerFacture(entre total : int) : void +placerCommande() : void

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 13

Pause

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 14

Classes et mthodes abstraites en Java

On spcifie une mthode abstraite l'aide du mot cl abstract, plac aprs la visibilit et le type retourn par la mthode
Cette mthode n'a pas d'implantation et la dclaration est termine avec un pointvirgule

On spcifie une classe abstraite l'aide du mot cl abstract, plac aprs la visibilit de la classe
Une classe ayant au moins une mthode abstraite doit aussi tre dclare abstraite Une classe abstraite peut avoir un ou plusieurs constructeurs
On ne peut pas invoquer directement ces constructeurs avec le mot cl new On peut inviquer ces constructeurs partir des constructeurs des sous-classes de la classe abstraite

Exemple II-11
public abstract class Animal { public abstract void mange() ; public abstract void marche() ; }

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 15

Interfaces gnriques en Java

Java permet de spcifier des interfaces gnriques Ces interfaces peuvent contenir
Des constantes associes cette interface Un ensemble de mthodes abstraites
Tout attribut dclar dans une interface est ncessairement une constante accs public

Toute mthode dclare dans une interface est ncessairement abstraite et accs public

Les interfaces avec visibilit publique sont codes dans des fichiers spars ayant le mme nom que l'interface et portant l'extension .java

Exemple II-12
public interface Connecteur { tablirConnection() ; }

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 16

Gnralisation et spcialisation en Java

En Java, la relation de gnralisation/spcialisation se matrialise avec l'oprateur extends Java ne supporte que l'hritage simple
On l'utilise pour indique qu'une classe spcialise ( extends ) une super-classe On l'utilise pour indique qu'une interface spcialise ( extends ) une super-interface Une classe ne peut spcialiser qu'une seule classe
La sous-classe hrite de toutes les caractristiques accessibles de la super-classe Par dfaut, toutes les classes hritent de la classe java.lang.Object La sous-interface hrite de toutes les caractristiques accessibles de la super-interface

Une interface ne peut spcialiser qu'une seule interface

Exemple II-13
public class TlphoneCellulaire extends Tlphone { ... } public interface Priselectrique extends Connecteur { ... }

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 17

Ralisation en Java

En Java, la relation de ralisation se matrialise avec l'oprateur implements


On l'utilise pour indique qu'une classe ralise ( implements ) une super-classe

Java supporte la ralisation multiple


Une classe raliser plusieurs interfaces La liste des interfaces ralises est spare par des virgules La classe doit implanter toutes les mthodes des interfaces ralises

Exemple II-14
public class PriseCanadienne implements Priselectrique { ... } public class Maison { public static void main (String argv[]) { Priselectrique prise = new PriseCanadienne(); } }

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 18

Exercice II-10

crivez les classes et interfaces Java correspondant aux diagrammes UML suivants

CompteBancaire10 #solde : int +obtenirSolde() : int

interface Oprateur10 +excuteOpration() : void

CompteChque10 Comptepargne10 -tauxIntrts : float +verserIntrts() : int -soldeMinimum : int -fraisFixes : int +retirer(entre montant : int) : void +traiterChque(entre montant : int) : void

Machine10

Employ10

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 19

Les associations en Java

L'association indique une relation pouvant exister entre les objets de deux (association binaire) ou plusieurs classes (association n-aire) En Java, on matrialise une association en crant un attribut dans les classes lies par l'association
Si la multiplicit maximale est 1, le type de l'attribut est le mme que celui de la classe lie Si la multiplicit est plus de 1, le type de l'attribut est habituellement un tableau du type de la classe lie Le nom de l'attribut correspond au rle jou par la classe dans l'association

Si un des bouts de l'association n'est jamais utilis pour retracer un objet, on ne cre aucun attribut
On dit que l'association n'est pas navigable dans ce sens

Ces rgles s'appliquent de la mme manire pour l'agrgation et la composition

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 20

Exercice II-11

crivez les classes Java correspondant au diagramme UML suivant

Division11 0..1 1 -patron quipe11 * * 1 -patron 0..1 1 * 1 * Dpartement11

Employ11

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 21

Polymorphisme et Java

La sous-classe peut redfinir une ou plusieurs mthodes hrites


On redfinit une mthode en fournissant une nouvelle implantation pour cette mthode avec la mme signature La redfinition n'est pas la surcharge
La redfinition se fait par une sous-classe pour une mthode dfinie dans la super-classe en fournissant la mme signature La surcharge se fait dans une classe pour une mthode existante (hrite ou non) en fournissant une signature diffrente

Le polymorphisme est une consquence de la redfinition d'une mthode


En redfinissant une mthode, la sous-classe modifie le comportement associ cette mthode

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 22

Exemple II-15

La classe java.lang.Object dfinit la mthode toString()


L'intention de toString() est de convertir l'objet en une chane de caractre Par dfaut, cette mthode retourne une chane de caractre contenant l'identifiant de l'objet

Une classe donne peut fournir une nouvelle dfinition pour toString()
La classe java.lang.Integer redfinit cette mthode pour retourner la valeur entire qu'elle contient La classe java.util.Date redfinit cette mthode pour retourner la date sour forme d'une chane de caractres

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 23

Attributs et comportements associs une classe

Java permet d'associer une mthode une classe plutt qu' un objet spcifique Java permet de crer un attribut dont la valeur est partage par tous les objets de cette classe On spcifie un attribut ou une mthode d'instance en ajoutant le mot cl static aprs le mode d'accs et avant le type
public static void main (String argv[]) {} On dira que cet attribut est un attribut de classe Cette mthode ne ncessite pas l'existence d'un objet On dira que cette mthode est une mthode de classe

On accde un attribut ou une mthode d'instance en spcifiant la classe, puis le nom de l'attribut ou de la mthode

Exemple II-16

La classe java.lang.Math fournit plusieurs mthodes de classe permettant de raliser des oprations mathmatiques
Math.floor() : calcule l'arrondi par dfaut Maht.ceil() : calcule l'arrondi par excs

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 24

Accs aux attributs par les mthodes

Les mthodes de classe ne peuvent accder qu' des attributs de classe


Ces mthodes ne sont pas associs aucun objet Elles ne peuvent donc pas accder aux attributs d'un objet particulier

Attribut

Les mthodes d'instance peuvent accder aux attributs d'instance et de classe


Une seule valeur de ces attributs existe pour l'ensemble des objets

Mthode
d'instance de classe

d'instance
oui non

de classe
oui oui

Dans UML, ont indique les mthodes et attributs d'instance en les soulignant

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 25

Exercice II-12

crivez les classes et interfaces Java ncessaires pour implanter l'algorithme de l'exercice II-8
Considrez toutes les variables de type entier Le tableau employs est un attribut de la classe Dpartement L'algorithme est la mthode main () de la classe Dpartement

Dernire mise jour: 14 novembre 2012, Service de l'enseignement des technologies de l'information cole des HEC de Montral, 2002. Tous droits rservs.

page 26

Vous aimerez peut-être aussi