Vous êtes sur la page 1sur 61

ELhaidaouiELhaidaoui@@hotmail.comhotmail.com

ELhaidaoui ELhaidaoui @ @ hotmail.com hotmail.com Programmation Programmation Programmation orient orient orientée é é
ELhaidaoui ELhaidaoui @ @ hotmail.com hotmail.com Programmation Programmation Programmation orient orient orientée é é
ELhaidaoui ELhaidaoui @ @ hotmail.com hotmail.com Programmation Programmation Programmation orient orient orientée é é
ELhaidaoui ELhaidaoui @ @ hotmail.com hotmail.com Programmation Programmation Programmation orient orient orientée é é
ELhaidaoui ELhaidaoui @ @ hotmail.com hotmail.com Programmation Programmation Programmation orient orient orientée é é

ProgrammationProgrammationProgrammation orientorientorientéeééee objetobjetobjet

0021266950863

1

Programmation Programmation Programmation orient orient orientée é é e e objet objet objet 0021266950863 1
Programmation Programmation Programmation orient orient orientée é é e e objet objet objet 0021266950863 1
IntroductionIntroductionIntroduction active du programme.
IntroductionIntroductionIntroduction
active du programme.

les programmes classiques sont constitués de données utilisées par des traitements.

Les données sont passives, elles subissent les traitements qui représentent la partie

Programmer revient donc à déclarer des variables , puis des procédures pour les manipuler

sans les associer explicitement les unes aux autres.

La programmation orientée objet consiste à modéliser informatiquement un ensemble

d'éléments d'une partie du monde réel (que l'on appelle domaine) en un ensemble d'entités

l'on appelle doma ine) en un ensemble d'entités informatiques. Ces entités in formatiques sont appelées ob

informatiques. Ces entités informatiques sont appelées objets. Il s'agit de données

informatiques. Ces entités in formatiques sont appelées ob jets. Il s'agit de données

informatiques regroupant les principales caractéristiques des éléments du monde réel

(taille, couleur,

).

0021266950863

2

3 PRINCIPE PRINCIPE PRINCIPE DES DES DES MODELES MODELES MODELES A A A OBJETS OBJETS

3

PRINCIPEPRINCIPEPRINCIPE DESDESDES MODELESMODELESMODELES AAA OBJETSOBJETSOBJETS

Les modèles à objets ont étés crées pour modéliser le monde réel.

Dans un modèle à objet, toute entité du monde réel est un objet

Un objet est un groupe de données structurées caractérisé par un identifiant unique représentant le monde réel.

un groupe de données structurées cara ctérisé par un identifiant unique représentant le monde réel. 0021266950863
un groupe de données structurées cara ctérisé par un identifiant unique représentant le monde réel. 0021266950863

0021266950863

4
4

PRINCIPEPRINCIPEPRINCIPE DESDESDES MODELESMODELESMODELES AAA OBJETSOBJETSOBJETS

Un objet se caractérise par Des attributs.

Exemple : Référence, Désignation, PrixUnitaire et Quantité sont les attributs de l'objet de type ARTICLE.

L'objet est manipulé par des procédures appelées méthodes qui sont caractérisées par

une entête définissant leur nom, les paramètres d'appel et de retour pour chacune d'elle.

Exemple : Nous pouvons définir comme méthodes de l'objet ARTICLE

PrixTtc : Méthode permettant de calculer le prix TTC d'un article SortieArticle : Méthode permettant de diminuer la quantité en stock EntreeArticle : Méthode permettant d'augmenter la quantité en stock

On ne peut exécuter une méthode sans préciser l'objet sur lequel elle s'applique.

sans préc iser l'objet sur lequel elle s'applique. L'ensemble des propriétés d'un objet (attri buts

L'ensemble des propriétés d'un objet (attributs et méthodes) constitue un ensemble appelé classe

0021266950863

des propriétés d'un objet (attri buts et méthodes) constitue un ensemble appelé c l a s
5 Le Le Le concept concept concept de de de classe classe classe c'est un

5

LeLeLe conceptconceptconcept dedede classeclasseclasse

c'est un ensemble de données et de fonctions regroupées dans une même entité.

est une description abstraite d'un objet.

Les fonctions qui opèrent sur les données sont appelées des méthodes.

Instancier une classe consiste à créer un objet sur son modèle.

Entre classe et objet il y a, en quelque sorte, le même rapport qu'entre type et variable.

Java est un langage orienté objet : tout appartient à une classe sauf les variables de type primitives.

Pour accéder à une classe il faut en déclarer une instance de classe ou objet.

Une classe comporte sa déclaration, des variables et la définition de ses méthodes.

Une classe se compose en deux parties : un en-tête et un corps. Le corps peut être divisé en 2 sections : la déclaration des données et des constantes et la définition des méthodes.

données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues
données et des constantes et la définition des méthodes. Les méthodes et les données sont pourvues

Les méthodes et les données sont pourvues d'attributs de visibilité qui gère leur accessibilité par les composants hors de la classe.

0021266950863

La classe est une définition d’objets ayant le même comportement (méthodes), la même structure (mêmes propriétés)

(méthodes), la même structure (mêmes propriétés) Dans ce modèle, un véhicule est repr ésenté par une
(méthodes), la même structure (mêmes propriétés) Dans ce modèle, un véhicule est repr ésenté par une
(méthodes), la même structure (mêmes propriétés) Dans ce modèle, un véhicule est repr ésenté par une
(méthodes), la même structure (mêmes propriétés) Dans ce modèle, un véhicule est repr ésenté par une

Dans ce modèle, un véhicule est représenté par une chaîne de caractères (sa marque) et trois entiers : la puissance fiscale, la vitesse maximale et la vitesse courante. Toutes ces données sont représentatives d'un véhicule particulier, autrement dit, chaque objet véhicule aura sa propre copie de ses données : on parle alors d'attribut d'instance. L'opération d'instanciation

0021266950863

6

qui permet de créer un objet à partir d'une classe consiste précisément à fournir des valeurs particulières pour chacun des attributs d'instance.

L’objet Les objets contiennent des attributs et des méthodes. Les attributs sont des variables ou
L’objet
Les objets contiennent des attributs et des méthodes. Les attributs sont des
variables ou des objets nécessaires au fonctionnement de l'objet. En Java, une
application est un objet. La classe est la description d'un objet. Un objet est une
instance d'une classe. Pour chaque instance d'une classe, le code est le même,
seules les données sont différentes à chaque objet.
Les objets appelés également instances de classe sont générés à partir de la
classe que l’on peut qualifier de modèle.
L’instanciation
C’est l’opération qui consiste à classer un objet dans une classe.
C’est la création d’un objet à partir d’une classe
Programmer revient donc à décrire des classes d’objets, à caractériser leur
structure et leur comportement puis à instancier ces classes pour créer des
objets
0021266950863
7
8 Le concept d’encapsulation L'ENCAPSULATION L'ENCAPSULATION L'ENCAPSULATION L'encapsulation est un

8

Le concept d’encapsulation

L'ENCAPSULATIONL'ENCAPSULATIONL'ENCAPSULATION

L'encapsulation est un mécanisme consistant à rassembler les données et les méthodes

au sein d'une structure en cachant l'implémentation de l'objet,

c'est-à-dire en empêchant l'accès aux données par un autre moyen que les services proposés.

L'encapsulation permet donc de garantir l'intégrité des données contenues dans l'objet. Le masquage des informations

L'utilisateur d'une classe n'a pas forcément à savoir de quelle façon sont structurées

les données dans l'objet, cela signifie qu'un utilisateur n'a pas à connaître l'implémentation.

Ainsi, en interdisant l'utilisateur de modifier directement les attributs,

et en l'obligeant à utiliser les fonctions définies pour les modifier (appelées interfaces),

L’Encapsulation
L’Encapsulation

C’est le regroupement dans une même entité appelée objet des données et des

dans une même ent ité appelée objet des données et des traitements appelés aussi méthodes ou

traitements appelés aussi méthodes ou services

traitements. On ne peut atteindre les attributs d’un objet que par l’intermédiaire de ses

0021266950863

hhhéééritageritageritage

h h h é é é ritage ritage ritage 9 La notion d'héritage L'héritage est un

9

La notion d'héritage

L'héritage est un principe propre à la programmation orientée objet, permettant de créer

une nouvelle classe à partir d'une classe existante.

Le nom d'"héritage" (pouvant parfois être appelé dérivation de classe) provient du fait que

la classe dérivée (la classe nouvellement créée) contient les attributs et les méthodes de sa

superclasse (la classe dont elle dérive). L'intérêt majeur de l'héritage est de pouvoir définir

de nouveaux attributs et de nouvelles méthodes pour la classe dérivée,

qui viennent s'ajouter à ceux et celles héritées.

et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.
et de nouvelles méthodes pour la classe dérivée, qui viennent s'ajouter à ceux et celles héritées.

0021266950863

hhhéééritageritageritage

Généralisation

h h h é é é ritage ritage ritage Généralisation Véhicule N° plaque Poids total Camion
Véhicule N° plaque Poids total
Véhicule N° plaque Poids total
Véhicule N° plaque Poids total
Véhicule
Véhicule

Véhicule

Véhicule
N° plaque Poids total
N° plaque Poids total

N° plaque Poids total

Véhicule N° plaque Poids total
Véhicule N° plaque Poids total
Véhicule N° plaque Poids total
Véhicule N° plaque Poids total
Véhicule N° plaque Poids total
Véhicule N° plaque Poids total
Véhicule N° plaque Poids total

Camion

Charge

Voiture

portes

Bus

capacité

Véhicule N° plaque Poids total Camion Charge Voiture portes Bus capacité 0021266950863 10 spécialisation
Véhicule N° plaque Poids total Camion Charge Voiture portes Bus capacité 0021266950863 10 spécialisation

0021266950863

Véhicule N° plaque Poids total Camion Charge Voiture portes Bus capacité 0021266950863 10 spécialisation
Véhicule N° plaque Poids total Camion Charge Voiture portes Bus capacité 0021266950863 10 spécialisation

10

spécialisation

PourquoiPourquoi hhéériterriter ?? 1. 2. 3. Pour ré-utiliser un type existant Pour relier des types
PourquoiPourquoi hhéériterriter ??
1.
2.
3.
Pour ré-utiliser un type existant
Pour relier des types entre eux
Pour réduire la programmation

CommentComment hhéériterriter ??

Par spécialisation

Exprimer qu’un type est un cas particulier d’un autre type Exemple : un Camion est un Véhicule particulière

Par enrichissement Ajouter des propriétés et des fonctionnalités à un type objet
Par enrichissement
Ajouter des propriétés et des fonctionnalités à un type objet
particulière Par enrichissement Ajouter des propriétés et des fonctionnalités à un type objet 0021266950863 11
champs hérités méthodes héritées
champs hérités
méthodes héritées

FonctionnementFonctionnementFonctionnement dedede lllhhhéééritageritageritage

Un objet hérite des champs et des méthodes de tous ses types ascendants

De plus, un objet dispose des champs et des méthodes de son propre type (nouveaux noms)

champs supplémentaires méthodes supplémentaires

Dans un type, on peut redéfinir une méthode d’un type ascendant

méthodes redéfinies

Dans un type, on peut redéfinir une méthode d’un type ascendant méthodes redéfinies 0021266950863 12
Dans un type, on peut redéfinir une méthode d’un type ascendant méthodes redéfinies 0021266950863 12
13 Exemple Exemple Exemple un Personnel est un fonctionnaire relevant du Ministère de l’Enseignement Supérieur

13

ExempleExempleExemple

un Personnel est un fonctionnaire relevant du Ministère de l’Enseignement Supérieur et de la Recherche ; il est défini par un certain nombre de variables d’instances privées, chacune associée à une méthode publique de même nom qui permet d’en obtenir la valeur :

CIN (de type String), nom (de type String), anneeNaissance (de type int),

un Enseignant définit une entité pouvant dispenser des cours , cela se définit par un ensemble de variables d’instance privées avec des méthodes publiques d’accès

matiere (de type String), classeNiveau (de type int),

un Chercheur est une autre entité consacrant une partie de son temps à des recherches ; encore une fois, des variables d’instance privées et des méthodes publiques d’accès :

domaineDeRecherches (de type String), nombrePublications (de type int)

hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863
hodes publiques d’accès : domaineDeRecherches (de type String ), nombrePublications (de type int ) 0021266950863

0021266950863

hhhéééritageritageritage Hiérarchie des classes Personnel Cin Nom anneeNaissance Enseignant Chercheur Matière
hhhéééritageritageritage
Hiérarchie des classes
Personnel
Cin
Nom
anneeNaissance
Enseignant
Chercheur
Matière
domaineDeRecherches
classeNiveau
nombrePublications
0021266950863
14
mêmemême nomnom auau seinsein dede lala mêmemême classeclasse
mêmemême nomnom auau seinsein dede lala mêmemême classeclasse

lalala surchargesurchargesurcharge

OnOn appelleappelle surchargesurcharge lele faitfait ddavoiravoir plusieursplusieurs mmééthodesthodes quiqui ontont lele

LesLes exemplairesexemplaires dede lala mmééthodethode ontont desdes paramparamèètrestres diffdifféérentsrents

IlsIls peuventpeuvent avoiravoir lele mêmemême typetype dede retourretour

ParPar contre,contre, impossibleimpossible ddavoiravoir desdes typestypes dede retourretour diffdifféérentsrents pourpour

lesles mêmesmêmes paramparamèètrestres

retour diff diff é é rents rents pour pour les les mêmes mêmes param param è
retour diff diff é é rents rents pour pour les les mêmes mêmes param param è
Surcharge Surcharge Surcharge : : : exemple exemple exemple class class Additionneur Additionneur { {

SurchargeSurchargeSurcharge ::: exempleexempleexemple

classclass AdditionneurAdditionneur {{

staticstatic intint somme(somme(intint a,a, intint b)b) //// 11 {{

somme( int int a, a, int int b) b) // // 1 1 { { return

returnreturn (a+b);(a+b);

}} staticstatic intint somme(somme(intint a,a, intint b,b, intint c)c) //// 22 {{

returnreturn (a+b+c);(a+b+c);

}} staticstatic floatfloat somme(somme(floatfloat a,a, floatfloat b)b) //// 33 {{

returnreturn (a+b);(a+b);

}} staticstatic floatfloat somme(somme(intint a,a, intint b)b) //// interditinterdit àà causecause dede 11 {{
}}
staticstatic floatfloat somme(somme(intint a,a, intint b)b) //// interditinterdit àà causecause dede 11
{{
returnreturn ((((floatfloat)a+()a+(floatfloat)b);)b);
}}
}}
b)b) //// interditinterdit àà causecause dede 11 {{ returnreturn ((((floatfloat)a+()a+(floatfloat)b);)b); }} }}
Polymorphisme Polymorphisme Polymorphisme On appelle polymorphisme (du grec signifiant « plusieurs formes ») le fait

PolymorphismePolymorphismePolymorphisme

On appelle polymorphisme (du grec signifiant « plusieurs formes »)

le fait de dissimuler des traitements différents derrière la même interface.

Le véritable intérêt du polymorphisme est de permettre l’évolution du logiciel avec un

minimum de modifications. Ajoutons une nouvelle classe (octogone) à l’exemple suivant :

avec un minimum de modifications. Ajoutons une nou velle classe (octogone) à l’exemple suivant : 0021266950863
avec un minimum de modifications. Ajoutons une nou velle classe (octogone) à l’exemple suivant : 0021266950863
Figure DessineToi() Cercle Rectangle Triangle Octogone DessineToi ( ) DessineToi ( ) DessineToi ( )
Figure
DessineToi()
Cercle
Rectangle
Triangle
Octogone
DessineToi ( )
DessineToi ( )
DessineToi ( )
DessineToi ( )

Il suffira de coder la méthode dessineToi dans la classe octogone.

de coder la méthode dessineToi dans la classe octogone. Les objets existants n’ont même pas be

Les objets existants n’ont même pas besoin de savoir que l’on a ajouté une nouvelle forme. Ils ne sont en rien affectés par la modification.

forme. Ils ne sont en rien affectés par la modification. Cet exemple montre l’importance de la

Cet exemple montre l’importance de la dissimulation de l’information. Chaque objet ne doit pas trop en savoir sur les autres.

0021266950863

18

Rappel

Cet objet informatique peut se caractériser ainsi :

Objet = identité + comportement

L’ identité permet de différencier chaque objet parmi les autres.

Le comportement est assuré par des opérations.

chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19

0021266950863

Attributs

Opérations

chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19
chaque objet parmi les autres. Le comportement est assuré par des opérations. 0021266950863 Attributs Opérations 19

19

20 Exemples d'objets Un objet voiture Un objet compte Un objet fenêtre uneFenêtre unCompte Attributs

20

Exemples d'objets

Un objet voiture

20 Exemples d'objets Un objet voiture Un objet compte Un objet fenêtre uneFenêtre unCompte Attributs :

Un objet compte

20 Exemples d'objets Un objet voiture Un objet compte Un objet fenêtre uneFenêtre unCompte Attributs :

Un objet fenêtre

uneFenêtre unCompte Attributs : Attributs : point-sup-gauche débit point-inf-droit crédit texture titulaire
uneFenêtre
unCompte
Attributs :
Attributs :
point-sup-gauche
débit
point-inf-droit
crédit
texture
titulaire
en-tête
Opérations :
Opérations :
activer ()
fermer ()
déposer (somme)
retirer (somme)
avoirSolde ()
réduire (coeff)
agrandir (coeff)
déplacer (lieu)
() déposer (somme) retirer (somme) avoirSolde () réduire (coeff) agrandir (coeff) déplacer (lieu) 0021266950863

0021266950863

21
21

Classe

Plusieurs objets peuvent posséder une structure et des comportements semblables. La classe factorise les caractéristiques communes de ces objets et, comme son nom le suggère, permet d’en bâtir une classification.

Exemple de classes

l a s s i f i c a t i o n . Exemple de
l a s s i f i c a t i o n . Exemple de
l a s s i f i c a t i o n . Exemple de
l a s s i f i c a t i o n . Exemple de
l a s s i f i c a t i o n . Exemple de
l a s s i f i c a t i o n . Exemple de

Les concepts d'objet et de classe sont interdépendants. En effet, un objet appartient à une classe et une classe décrit la structure et le comportement communs d'objets.

la stru cture et le comportement communs d'objets. Les classes ont un double rôle : •

Les classes ont un double rôle :

décrire et classer de façon abstraite des objets

mécanisme d’instanciation).

0021266950863

Instance Une instance est un représentant particulier d’une classe. Elle possède les mêmes attributs et
Instance
Une instance est un représentant particulier d’une classe.
Elle possède les mêmes attributs et les mêmes opérations que les autres instances de la classe.
Les attributs prennent des valeurs distinctes dans chacune des instances.
Classe
I n s t a n c e s
.
.
.
L'instanciation est le processus par lequel on crée de nouveaux objets
0021266950863
à partir du modèle défini par une classe.
22

Encapsulation

Voiture Kilométrage niveau d’essence
Voiture
Kilométrage
niveau d’essence

23

L’encapsulation consiste à masquer aux utilisateurs d’un objet les détails relevant de son implémentation

(vue interne ou réalisation), et de ne laisser accessible que la vue externe ou interface.

et de ne laisser accessible que la vue externe ou interface. Démarrer Se déplacer Mettre de

Démarrer

Se déplacer

Mettre de l’essence

Principe : les attributs ne doivent pas être accessibles de l’extérieur. Seules les opérations sont habilitées à modifier les valeurs des attributs.

de l’extérieur. Seules les opérations sont habilitées à modifier les valeurs des attributs. 0021266950863
de l’extérieur. Seules les opérations sont habilitées à modifier les valeurs des attributs. 0021266950863

0021266950863

Encapsulation - avantages

24
24
Encapsulation - avantages 24 L'intérieur de l'objet est protégé . L'accès direct aux données est
Encapsulation - avantages 24 L'intérieur de l'objet est protégé . L'accès direct aux données est
Encapsulation - avantages 24 L'intérieur de l'objet est protégé . L'accès direct aux données est
Encapsulation - avantages 24 L'intérieur de l'objet est protégé . L'accès direct aux données est
Encapsulation - avantages 24 L'intérieur de l'objet est protégé . L'accès direct aux données est
Encapsulation - avantages 24 L'intérieur de l'objet est protégé . L'accès direct aux données est

L'intérieur de l'objet est protégé. L'accès direct aux données est impossible. Il faut passer par une méthode (publique) constituant l'interface de l'objet pour avoir accès aux données. Ceci garantit la sécurité et l’intégrité des données.

La complexité est dissimulée. Le programmeur n'a plus à se préoccuper ni du détail de la structure des données, ni de la manière dont sont effectués les traitements.

La maintenance est simplifiée. La portée des modifications est limitée à l’intérieur de l’objet concerné. L’implémentation d’une opération peut évoluer sans modifier l’interface de l’objet.

ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules
ion peut évoluer sans modifier l’interface de l’objet. Les échanges avec l'extérieur sont codifiés . Seules

Les échanges avec l'extérieur sont codifiés. Seules les caractéristiques que l’on souhaite offrir aux utilisateurs potentiels de l’objet figurent dans la partie externe. Cet interface constitue un contrat entre l’objet et ses clients, c’est-à-dire entre le

0021266950863

concepteur et ses utilisateurs.

Héritage L'héritage est le mécanisme de transmission des propriétés d'une sur-classe vers ses sous-classes.
Héritage
L'héritage est le mécanisme de transmission des propriétés d'une sur-classe
vers ses sous-classes.
Compte
Compte
crédit
crédit
débit
débit
déposer
déposer
retirer
retirer
avoirSolde
avoirSolde
Compte d'épargne
Compte d'épargne
Crédit
Taux
débit
calculerIntérêts
Taux
déposer
retirer
avoirSolde
calculerIntérêts
L’héritage évite la duplication et facilite la réutilisation.
0021266950863
25
Constructeur Constructeur Constructeur Méthode spéciale, à mi chemin entre la méthode de classe et la

ConstructeurConstructeurConstructeur

Méthode spéciale, à mi chemin entre la méthode de classe et la méthode d'instance chargée de créer un nouvel objet en mémoire et d'initialiser son état.

0021266950863 26
0021266950863
26
0021266950863 27

0021266950863

27
27

DestructeurDestructeurDestructeur

Destructeur Destructeur Destructeur Un destructeur permet d'exécuter du code lors de la libération, par le garbage

Un destructeur permet d'exécuter du code lors de la libération, par le garbage

du code lors de la libération, par le garbage collector, de l'espace mémoire occupé par l'objet.

collector, de l'espace mémoire occupé par l'objet.

En Java, les destructeurs appelés finaliseurs (finalizers), sont

automatiquement appellés par le garbage collector.

Pour créer un finaliseur, il faut redéfinir la méthode finalize() héritée de la

classe Object.

Pour créer un finaliseur, il faut redéfinir la méthode finalize() héritée de la classe Object. 0021266950863
Pour créer un finaliseur, il faut redéfinir la méthode finalize() héritée de la classe Object. 0021266950863

0021266950863

28

H H Héritage é é ritage ritage et et et visibilit visibilit visibilité é é
H H Héritage é é ritage ritage et et et visibilit visibilit visibilité é é

HHHéritageééritageritage etetet visibilitvisibilitvisibilitééé

UneUne classeclasse fillefille hhéériterite desdes attributsattributs etet mmééthodesthodes public(public(PubliquesPubliques))

é é thodes thodes public( public( Publiques Publiques ) ) et et Protected Protected ( (
é é thodes thodes public( public( Publiques Publiques ) ) et et Protected Protected ( (

etet ProtectedProtected((protprotééggééeses)) dede lala classeclasse mmèère,re, ElleElle nnhhéériterite paspas desdes

attributsattributs etet mmééthodesthodes privateprivate ((PrivPrivééeses)) LaLa classeclasse mmèèrere nene voitvoit queque

cece quiqui estest publicpublic dansdans lala classeclasse fille.fille.

UnUn objetobjet dduneune classeclasse mmèèrere nnhhéériterite paspas desdes attributsattributs etet mmééthodesthodes

pas pas des des attributs attributs et et m m é é thodes thodes de de

dede sesses classesclasses filles.filles.

pas pas des des attributs attributs et et m m é é thodes thodes de de

0021266950863

29

autres autres classes. classes. La La La classe classe classe Object Object Object La La

autresautres classes.classes.

LaLaLa classeclasseclasse ObjectObjectObject

LaLa classeclasse ObjectObject estest lala classeclasse mmèèrere dontdont hhééritentritent toutestoutes lesles

dont dont h h é é ritent ritent toutes toutes les les Toute Toute classe classe

TouteToute classeclasse ddééfiniefinie enen Java,Java, queque cece soitsoit parpar llutilisateurutilisateur ouou

dansdans unun packagepackage dede llAPI,API, hhéériterite dede lala classeclasse ObjectObject

toutetoute classeclasse hhéériterite desdes mmééthodesthodes dede lala classeclasse ObjectObject

h h é é rite rite des des m m é é thodes thodes de de
h h é é rite rite des des m m é é thodes thodes de de

LesLesLes InterfacesInterfacesInterfaces (H(H(Héritageééritageritage Multiple)Multiple)Multiple)

Interfaces Interfaces Interfaces (H (H (Héritage é é ritage ritage Multiple) Multiple) Multiple) 0021266950863 31
Interfaces Interfaces Interfaces (H (H (Héritage é é ritage ritage Multiple) Multiple) Multiple) 0021266950863 31
Interfaces Interfaces Interfaces (H (H (Héritage é é ritage ritage Multiple) Multiple) Multiple) 0021266950863 31

LLL’implémentationimplimpléémentationmentation

L L L’implémentation ’ ’ impl impl é é mentation mentation 0021266950863 32
L L L’implémentation ’ ’ impl impl é é mentation mentation 0021266950863 32
L L L’implémentation ’ ’ impl impl é é mentation mentation 0021266950863 32

LaLaLa VisibilitVisibilitVisibilitééé

PublicPublic ProtectedProtected
PublicPublic
ProtectedProtected

AccessibleAccessible parpar toutestoutes lesles classesclasses dede toustous lesles packages.packages.

PermetPermet llaccaccèèss àà lala ressourceressource parpar lesles classesclasses ddéérivrivéés(cess(ces dernidernièèresres peuventpeuvent êtreêtre situsituééeses dansdans unun autreautre package)package) etet toutestoutes dudu mêmemême package.package.

PrivatePrivate

LesLes attributsattributs quiqui sontsont ddééfinisfinis avecavec llattributattribut privateprivate,, nene sontsont paspas accessibleaccessible àà partirpartir ddautresautres classesclasses nini parpar lesles soussous--classes.classes.

d d ’ ’ autres autres classes classes ni ni par par les les sous sous
d d ’ ’ autres autres classes classes ni ni par par les les sous sous
AbstractAbstract
AbstractAbstract

IntIntéérêtrêt

AbstractAbstract Int Int é é rêt rêt 0021266950863 34
AbstractAbstract Int Int é é rêt rêt 0021266950863 34
AbstractAbstract Int Int é é rêt rêt 0021266950863 34
0021266950863 35
0021266950863
35
0021266950863 36
0021266950863 36
0021266950863 36
0021266950863 37
0021266950863 37
0021266950863 37
0021266950863 38
0021266950863 38
0021266950863 38
0021266950863 39
0021266950863 39
0021266950863 39
TP 1 – Création de la Classe Salarie. Objectif : Concrétiser les concepts : Classe

TP 1 – Création de la Classe Salarie.

Objectif :

Concrétiser les concepts :

Classe , les objets , les membres ( propriétés , méthodes ) et l'encapsulation

Cahier des Charges :

Un salarie est décrit par ses données membres:

Un matricule Un statut (Cadre, Employé, Agent de maîtrise) Un service Un nom Un salaire.

On peut connaître le salaire d’un Employé par la fonction membre CalculSalaire().

Version A , une Classe Simple sans « encapsulation » : Définir une classe Salarie
Version A , une Classe Simple sans « encapsulation » :
Définir une classe Salarie avec ses données membres et deux méthodes :
- une méthode membre, CalculSalaire() :
- qui renvoie le calcul du salaire annuel (salaire * 1.2)*12

-

une méthode d’affichage des infos Affichage()

Salarie - m_iMatricule : int - m_cStatut : char - m_sService : String - m_sNom
Salarie
- m_iMatricule
: int
- m_cStatut
: char
- m_sService
: String
- m_sNom
: String
- m_dSalaire
: double
+ CalculSalaire ()
: double
+ Affichage ()
: void
- m_sNom : String - m_dSalaire : double + CalculSalaire () : double + Affichage ()

Quelques indications :

Instanciation

Déclaration de la variable objet :

Exemple :

Salarie salarie ; // réservation d' une zone mémoire

Instanciation de la classe (création d’un objet) :

Avec l’instruction new Exemple :

salarie = new Salarie( ) ;

// la référence de l'objet est valable

Déclaration et instanciation sur la même instruction Exemple :

Salarie salarie = new Salarie( );

Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );
Déclaration et instanciatio n sur la même instruction Exemple : Salarie salarie = new Salarie( );

0021266950863

42
42
Aide à la solution Version A : Il faut une classe Salarie public class Salarie
Aide à la solution Version A :
Il faut une classe Salarie
public class Salarie
{
int m_nMatricule;
// public par défaut donc pas d’encapsulation
}
il faut une méthode (ou fonction) pour le salaire
Double CalculSalaire( )
{
return…
}
il faut une méthode (ou fonction) pour l’affichage
Double Affichage( )
{
System.out.println…
}
44
44

Il faut aussi une classe de test pour dérouler un scénario activant des objets Particuliers de cette classe : créons deux salariés et imprimons les !!!

public class Application

{

public static void main (String[] args)

{

 

Salarie salarie;

salarie = new Salarie( ); // affectation des propriété salarie.m_nMatricule = 1;

salarie.Affichage() ;

}

}

// console DOS

// elles sont publiques )

= 1; … salarie.Affichage() ; … } } // console DOS // elles sont publiques )
= 1; … salarie.Affichage() ; … } } // console DOS // elles sont publiques )

0021266950863

public class Salarie { int m_iMatricule; char m_cStatut; String m_sService; String m_sNom; double

public class Salarie

{

int m_iMatricule; char m_cStatut; String m_sService; String m_sNom; double m_dSalaire;

double CalculSalaire()

{

return (m_dSalaire * 1.20 * 12);

}

void Affichage()

{

System.out.println("Matricule

: " + m_iMatricule +

"\nNom

"\nStatut

"\nService

: " + m_sNom + : " + m_cStatut + : " + m_sService);

System.out.println ("Salaire Annuel : " + (CalculSalaire()) + " E");

}

}

45

" + m_sService); System .out.println (" Salaire Annuel : " + (CalculSalaire()) + " E"); }

public class Application

{

public static void main(String[] args)

{

Salarie salarie1; salarie1 = new Salarie(); salarie1.m_iMatricule = 1; salarie1.m_cStatut = 'C'; salarie1.m_sNom = "Martin"; salarie1.m_sService = "Bip"; salarie1.m_dSalaire = 10000;

salarie1.Affichage();

Salarie salarie2 = new Salarie(); salarie2.m_iMatricule = 2; salarie2.m_cStatut = 'C'; salarie2.m_sNom = "Paul"; salarie2.m_sService = "Bip"; salarie2.m_dSalaire = 10000;

salarie2.Affichage();

"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46
"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46

}

0021266950863

}

"; salarie2.m_sService = " Bip "; salarie2.m_dSalaire = 10000; salarie2.Affichage(); } 0021266950863 } 46

46

0021266950863 47
0021266950863 47

0021266950863

47
47
48 Version B : Gestion de la classe salarié avec encapsulation Définition d’une classe Salarie

48

Version B : Gestion de la classe salarié avec encapsulation

Définition d’une classe Salarie avec :

- ses données membres

- ses méthodes d’accès aux données membres

- ses constructeurs et destructeurs

 

Salarie

- m_iMatricule

: int

- m_cStatut

: char

- m_sService

: String

- m_sNom

: String

- m_dSalaire

: double

+ CalculSalaire ()

: double

+ Affichage ()

: void

+ getIMatricule ()

: int

+ getCStatut ()

: char

+ getSService ()

: String

+ getSNom ()

: String

+ getDSalaire ()

: double

+ setIMatricule (int newM_iMatricule)

: void

+ setCStatut (char newM_cStatut)

: void

+ setSService (String newM_sService)

: void

+ setSNom (String newM_sNom)

: void

+ setDSalaire (double newM_dSalaire)

: void

+ SALARIE ()

+ setSNom (String newM_sNom) : void + setDSalaire (double newM_dSalaire) : void + SALARIE () 0021266950863
+ setSNom (String newM_sNom) : void + setDSalaire (double newM_dSalaire) : void + SALARIE () 0021266950863
+ setSNom (String newM_sNom) : void + setDSalaire (double newM_dSalaire) : void + SALARIE () 0021266950863

0021266950863

Accès aux données membre des objets :

Accès aux données membre des objets : On ne peut pas accéder directement aux données membre,

On ne peut pas accéder directement aux données membre, c’est le concept d’encapsulation.Il faut

Donc définir à l’intérieur de la classe employé des méthodes d’accès à ces données.

En général dans les langages Orienté objet ces méthodes se nomment get pour la lecture

et set pour l’écriture.

Exemple :

Get_Matricule() et Set_Matricule(…… )

En Java les méthodes get et set porte le même nom, celui de la donnée membre (par convention)

Matricule( ) et Matricule(… )

Les données membres sont déclarées en private dans la classe, par ce mot clé elles ne sont

accessibles

que dans le corps de la classe, on ne peut les consulter ou les modifier que si la classe définit une

méthode permettant cette consultation ou cette modification. Par opposition au mot clé public

0021266950863

49

les
les

données membres sont accessibles partout où la classe est accessible.

Constructeur et destructeur En Java, le mécanisme d’instanciation attribut par défaut une valeur à chaque

Constructeur et destructeur

En Java, le mécanisme d’instanciation attribut par défaut une valeur à chaque

variable d’instance en fonction de son type (null pour une variable de type String), en

Effet aucune variable d’instance ne peut être indéterminée.

Cette instanciation par défaut convient rarement aux spécifications de la classe.

Le programmeur peut définir lui-même l’instanciation qui convient en définissant un

constructeur. Un constructeur est une méthode spéciale, qui spécifie les opérations

à effectuer à l’instanciation.

En Java deux types de constructeurs, un par défaut et un d’initialisation.

de constructeurs, un par défaut et un d’initialisation. Le destructeur est une méthode particulière qui permet

Le destructeur est une méthode particulière qui permet lorsqu’il est activé de retirer

(ou nettoyer la mémoire lorsque l’objet n’est plus utilisé).On utilise la méthode finalize

0021266950863

50

Aide à la Solution : Voici la gestion de l'encapsulation pour le matricule de la

Aide à la Solution :

Voici la gestion de l'encapsulation pour le matricule de la classe salarié

// Les attributs doivent être déclarés private private int m_iMatricule ;

// Méthodes d'accès aux données membres, par convention portent le même nom que la variable // lecture ( get ) public int Matricule()

{

return m_iMatricule; // on retourne un entier , le matricule

}

// écriture ( put ) public void Matricule(int iMatricule)

{

m_iMatricule = iMatricule;

}
}

finalize( )

// on a besoin d'un paramètre :

// le nouveau matricule // pas de return

Pour le test on peut utiliser les différents constructeurs puis on détruit les objets av

0021266950863

51

public class Application {

public static void main (String[] args)

{

// 1er salarie : constructeurs par défaut Salarie salarie1 = new Salarie() ;

// affichage // destruction objet salarie1 // 2eme salarie : constructeurs complet Salarie salarie2; salarie2 = new Salarie(2,"Martin",

);

le constructeur dans la classe Salarie aura comme forme :

public Salarie(int Mat, String Nom, char Sta, String Ser, double Sal)

{

m_iMatricule = Mat; m_sNom = Nom ;

}

// affichage // destruction objet salarie2

// 3eme salarié : utilisation des méthodes d'accès aux attributs privés

Salarie salarie3 = new Salarie();

// Instanciation // affectation du matricule // affectation du nom

// affichage }
// affichage
}
du matricule // affectation du nom // affichage } salarie3.matricule(3); salarie3.nom("DUPONT"); //

salarie3.matricule(3);

salarie3.nom("DUPONT");

// destruction objet salarie3

0021266950863

nom // affichage } salarie3.matricule(3); salarie3.nom("DUPONT"); // destruction objet salarie3 0021266950863 52

52

public class Salarie

{

private int m_iMatricule; private String m_sNom; private char m_cStatut; private String m_sService; protected double m_dSalaire;

//Fonctions Set

public void Matricule(int Mat){m_iMatricule = Mat;} public void Nom(String Nom){m_sNom = Nom.toUpperCase();} public void Statut(char Sta){m_cStatut = Sta;} public void Service(String Ser){m_sService = Ser;} public void Salaire(double Sal){m_dSalaire = Sal;}

//Fonctions Get

public int Matricule(){return m_iMatricule;} public String Nom(){return m_sNom;} public char Statut(){return m_cStatut;} public String Service(){return m_sService;} public double Salaire(){return m_dSalaire;}

// Constructeur par défaut public Salarie()

{

m_iMatricule = 0; m_sNom = ""; m_cStatut = ' '; m_sService = "";

m_dSalaire = 0;

{ m_iMatricule = 0; m_sNom = ""; m_cStatut = ' '; m_sService = ""; m_dSalaire =
}

}

}
// Constructeur public Salarie(int Mat, String Nom, char Sta, String Ser, double Sal) { m_iMatricule

// Constructeur

public Salarie(int Mat, String Nom, char Sta, String Ser, double Sal)

{

m_iMatricule = Mat; m_sNom = Nom.toUpperCase(); m_cStatut = Sta; m_sService = Ser; m_dSalaire = Sal;

}

//destructeurs

protected void finalize()

{

System.out.println ("destruction de l'objet " +m_sNom);

}

//Fonctions d'affichage

public void Affichage(String NomObjet)

{

System.out.println("\nObjetSalarie : " + NomObjet); System.out.println("Matricule : " + m_iMatricule +

 

"\nNom

: " + m_sNom +

"\nStatut

: " + m_cStatut +

"\nService

: " + m_sService);

System.out.println ("Salaire Annuel : " + (CalculSalaire()) + " E");

}

public double CalculSalaire() { return (m_dSalaire * 1.20 * 12); } }
public double CalculSalaire()
{
return (m_dSalaire * 1.20 * 12);
}
}
public class Application2 { public static void main(String[] args) { Salarie salarie1 = new Salarie();

public class Application2

{

public static void main(String[] args)

{

Salarie salarie1 = new Salarie(); salarie1.Affichage("salarie 1");

salarie1.finalize();

Salarie salarie2 = new Salarie(2,"Marcel DURANT",'C',"BIP",10000.00); salarie2.Affichage("salarie 2");

salarie2.finalize();

Salarie salarie3 = new Salarie();

salarie3.Matricule(3);

salarie3.Nom("Roger Dupont");

salarie3.Statut('C');

salarie3.Service("BIP");

salarie3.Salaire(1000.00);

salarie3.Affichage("salarie 3");

salarie3.finalize();

}

}

salarie3.Salaire(1000.00); salarie3.Affichage("salarie 3"); salarie3.finalize(); } }
0021266950863 56

0021266950863

0021266950863 56

56

TP 2 – Création de la Classe Commercial. Objectif : L’héritage et le polymorphisme Cahier
TP 2 – Création de la Classe Commercial.
Objectif : L’héritage et le polymorphisme
Cahier des Charges :
On dérive la classe Salarié par une classe Commercial, la classe Salarié est la classe générique et la classe
Commercial est la classe spécialisée ou spécifique.
En plus des données membres Salarié, la classe Commercial a comme données membres :
Un Chiffre d’affaire
Un taux de commission
Les méthodes sont les même.
La méthodes CalculSalaire intègre un mode de calcul différent, on ajoute au salaire le calcul de la
commission (CA * Taux/100).
Schéma : Définition d’une classe Commercial avec ses données membres et une méthode CalculSalaire
Salarie
- m_iMatricule
: int
Commercial
- m_cStatut
: char
<<extend>>
- m_dChiffreAffaire
: double
- m_sService
: String
- m_iTauxCommission
: int
- m_sNom
: String
# m_dSalaire
: double
+ getITauxCommission ()
: int
+ CalculSalaire ()
: double
+ setITauxCommission (int newM_iTauxCommission)
: void
+ Affichage ()
: void
+ getDChiffreAffaire ()
: double
+ setDChiffreAffaire (double newM_dChiffreAffaire)
: void
+ getIMatricule ()
: int
+ getCStatut ()
: char
+ getSService ()
: String
+ getSNom ()
: String
+ getDSalaire ()
: double
+ setIMatricule (int newM_iMatricule)
: void
+
setCStatut (char newM_cStatut)
: void
+
setSService (String newM_sService)
: void
Construire la classe Commercial qui hérite de la classe Salarie
+ setSNom (String newM_sNom)
:
void
0021266950863
57
+ setDSalaire (double newM_dSalaire)
:
void
+ SALARIE ()

Aide à la solution class Salarie // idem TP 1 Version B

class Commercial : utiliser Extends pour assurer l'héritage de Salarie // Déclaration des données membres spécifiques de commercial se rajoutant à celles de salarié private double m_dChiffre;

// Méthodes d'accès aux données membres public int Commission()

{

return m_nCommission;

}

// Constructeur par défaut de la classe salarie

super( ) ;

m_nCommission = 0;

// appel au constructeur par défaut de la classe mère

}

// Constructeur d'initialisation

public Commercial(int nMatricule, … ,

{

super( …);

m_nCommission = nCommission;

}

// Méthodes de l'objet

public String CalculSalaire( ){

}

// rajouter les nouvelle propriétés

// intégration des commissions

Classe d’Application:

Prévoir deux salariés et un ou deux commerciaux

Les instancier avec les constructeurs adéquats Les afficher notamment calculSalaire( ) pour mettre en oeuvre le polymorphisme

public class Commer cial extends Salarie { private double m_dChiffre; private int m_nCommission; public double

public class Commercial extends Salarie

{

private double m_dChiffre; private int m_nCommission;

public double Chiffre(){return m_dChiffre;} public int Commission(){return m_nCommission;}

public void Chiffre (double dChiffre){m_dChiffre=dChiffre;} public void Commission (int nCommission){m_nCommission=nCommission;}

//constructeur commercial null public Commercial()

{

 

super();

m_nCommission=0;

m_dChiffre=0.0;

}

//constructeur commercial conforme

public Commercial (int nMatricule, String sNom, char cStatut, String sService, double dSalaire, double dChiffre, int nCommission)

{

//super fait ref à la classe mère Salarie super(nMatricule, sNom, cStatut, sService, dSalaire); m_dChiffre = dChiffre; m_nCommission = nCommission;

}

protected void finalize(){super.finalize();}

public double CalculSalaire()

}

{

}

return (m_dSalaire + (m_dChiffre*m_nCommission/100) * 1.20 * 12);

public double CalculSalaire() } { } return (m_dSalaire + (m_dChiffre* m_nCommission/100) * 1.20 * 12);
public class Application { public static void main(String[] args) { Salarie salarie1 = new Salarie();

public class Application

{

public static void main(String[] args)

{

Salarie salarie1 = new Salarie(); salarie1.Affichage("salarie 1");

salarie1.finalize();

Salarie salarie2 = new Salarie(2,"Marcel DURANT",'C',"BIP",10000.00); salarie2.Affichage("salarie 2");

salarie2.finalize();

Salarie salarie3 = new Salarie();

salarie3.Matricule(3);

salarie3.Nom("Roger Dupont");

salarie3.Statut('C');

salarie3.Service("BIP");

salarie3.Salaire(1000.00);

salarie3.Affichage("salarie 3");

salarie3.finalize();

Commercial salarie4 = new Commercial(2,"Etienne,Marcel",'C',"BIP",1000.00,1000.00,5); salarie4.Affichage("salarie 4");

salarie4.finalize();

Commercial salarie5 = new Commercial();

salarie5.Matricule(3);

salarie5.Nom("Aime Rene");

salarie5.Statut('C');

salarie5.Service("BIP");

salarie5.Salaire(1000.00);

salarie5.Chiffre(100.00);

salarie5.Commission(5);

salarie5.Affichage("salarie 5");

salarie5.finalize();

}

}

salarie5.finalize(); } }
salarie5.finalize(); } }
0021266950863 61

0021266950863

0021266950863 61

61