• Aucun résultat trouvé

Langage et Concepts de Programmation Objet Travaux Dirigés n

N/A
N/A
Protected

Academic year: 2022

Partager "Langage et Concepts de Programmation Objet Travaux Dirigés n"

Copied!
3
0
0

Texte intégral

(1)

Langage et Concepts de Programmation Objet

Travaux Dirigés n

Pôle Informatique

École Nationale Supérieure des Mines de St-Etienne

*Vous trouverez plus de détails sur les concepts abordés lors de ce TD dans le livret de cours :

Chapitre 4: classes abstraites et interfaces

Annexe B: la notation UML des diagrammes de classes

Classe abstraite

Uneclasse abstraiteest une classe qui ne peut pas être directement instanciée. Une classe abstraite encapsule des attributs et méthodes qui peuvent être utilisés par les instances des classes qui en héritent. L’intérêt des classes abstraites est de regrouper plusieurs classes sous un même nom de classe (par polymorphisme) ainsi que de décrire partiellement des attributs et méthodes communs à plusieurs classes.

+ getSalaire() : Réel

+ verserSalaire() {abstract}

- salaire : Réel Salarié {abstrait}

+ getCompte() : Compte + verserSalaire() - compte : Compte

ClientInterne

+ verserSalaire() Employé

F  – Exemple de classe abstraite

Comme une classe abstraite ne peut pas être instanciée, elle peut encapsuler des méthodes dites abstraites, c’est-à-dire dont le traitement n’est pas défini dans la classe. Par contre, les classes héritant d’une classe abstraite doivent obligatoirement redéfinir ses méthodes abstraites ou alors être elles-mêmes abstraites.

En UML, le mot-clé{abstrait}(ou{abstract}) est accolé aux classes et méthodes abstraites. Une autre manière souvent usitée de représenter ces méthodes ou classes est d’écrire leur nom en italique.

L’exemple de la figuredistingue deux catégories de salariés dans une banque : ceux qui ont également un compte dans la banque et ceux qui sont clients d’une autre banque. Suivant le cas, la méthodeverserSalairedoit effectuer un traitement différent (un virement sur le compte interne ou l’envoi d’un chèque). Pour représenter les attributs et méthodes communs à ces deux classes, on les fait hériter d’une classe abstraiteSalarie. Cette classe est abstraite car elle n’implémente pas la méthodeverserSalairemais la déclare comme méthode abstraite pour obliger toute classe dérivée à la redéfinir. De plus, il est impossible dans ce diagramme de classes de créer des instances deSalariequi ne soient pas aussi des instances deClientInterneou deEmploye.

En Java, le mot-cléabstractest ajouté au début des déclarations de classes et de méthodes abstraites comme dans l’exemple suivant :

1

(2)

public abstract class Salarie { private double salaire; public double getSalaire() {

return salaire;

}

public abstract void verserSalaire();

}

Interface

De manière similaire aux classes abstraites ou concrètes (les classes non abstraites), uneinterfacedécrit des objets mais uniquement en terme de méthodes abstraites. Une interface ne peut contenir ni attribut, ni méthode implémentée. Le terme d’héritage n’est pas utilisé entre classes et interfaces : on dit qu’une classeimplémenteune interface. Lorsqu’une classe implémente une interface, elle doit redéfinir toutes ses méthodes abstraites ou bien être abstraite. Une interface peut hériter d’une autre interface.

+ getSalaire() : Réel

+ verserSalaire() {abstract}

- salaire : Réel Salarié {abstrait}

+ getCompte() : Compte + verserSalaire()

ClientInterne

+ verserSalaire() Employé + créerCompte()

ClientExterne

+ créerCompte() Client

<<interface>>

Compte

0..1

*

0..1

*

F  – Exemple d’interface

L’intérêt d’une interface est de regrouper plusieurs classes par polymorphisme. De plus, une classe peut im- plémenter plusieurs interfaces différentes. Ceci permet d’assouplir une restriction portant sur l’héritage qui est qu’une classe ne peut hériter que d’une seule autre classe.

En UML, une interface est décrite par le mot-clé«interface»et la relation d’implémentation entre une classe et une interface est représentée par une flèche d’héritage en pointillé.

La figurereprend l’exemple précédent en y ajoutant une interface représentant tous les clients de la banque, que ceux-ci y soient employés ou non.

En Java, le code source de l’interface Client se situe dans un fichier Client.java ayant pour contenu :

public interface Client { public void creerCompte();

}

Un exemple d’héritage de la classe abstraite Salarie et d’implémentation de l’interface Client est donné ci- dessous :

2

(3)

public class ClientInterne extends Salarie implements Client { private Compte compte;

public void creerCompte() { compte = new Compte();

}

public void verserSalaire() { compte.credite(salaire);

} }

Exercices

Exercices a

Modifiez le diagramme de classe de votre projet en utilisant des interfaces et des classes abstraites.

Exercice b

Dans le projet Java, la librairie graphique définie des interfaces :SimulationMap,Cell,Occupant,Rescuer, etCriminal. Ces interfaces servent à l’interface graphique (classeMapFrame) pour afficher la grille et son contenu.

Ainsi pour qu’une grille puisse être passée en paramètre de l’afficheur, il faut qu’elle implémente l’interfaceSimu- lationMap. Les cases de cette grille doivent implémenter l’interfaceCellpour pouvoir être affichées. Ces cellules doivent être occupées par des objets de classes implémentant l’interfaceOccupant, que l’on récupère en appelant la méthodegetOccupant()de l’interfaceCell. Un occupant peut être de deux types :RescuerouCriminal. En fonction de ce type, l’interface graphique affichera différentes images pour représenter les occupants. Ecrivez le diagramme de classes de la librairie graphique du projet.

Exercice c

Fusionnez les deux diagrammes précédents.

3

Références

Documents relatifs

(2006) which extends the subsumption relationship from domain theory to the description of action and sequence of action in order to introduce it as an order relationship in the

Maintenant que nous avons établi les propriétés fondamentales des espaces mesurables (X, A ), où A ⊂ P (X) est une σ-algèbre, munis d’une mesure µ, nous pouvons dévelop- per

On lance les trois dés simultanément (On remarquera que, lorsqu’on lance un tel tétraèdre, une seule face est cachée et trois faces sont visibles). 1- Calculer la

„ Les membres sont hérités avec les droits d'accès de leur classe de base (excepté les membres privés de la classe ancêtre qui sont inaccessibles dans la classe héritière ).

r la peirrnission de travailler. Il eût un succès formidable. est pas de mon invention. en tournant la main droite comme une roue. C'était /'express et nous

Dilemme, dont la seule issue possible est d’installer une méthode evolue() dans la classe Ressource , tout en déclarant cette méthode « abstraite », c’est-à-dire sans

On constate qu’une classe abstraite (exemple BufferedReader) contient au moins une méthode abstraite (exemple : abstract void close()). Création d’un fichier

Par contre, un rectangle est une figure géométrique dont le calcul du périmètre et de la surface est connu, on peut alors implémenter ces méthodes qui sont très concrètes (pas