Documente Academic
Documente Profesional
Documente Cultură
com
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
active du programme.
Programmer revient donc à déclarer des variables , puis des procédures pour les manipuler
d'éléments d'une partie du monde réel (que l'on appelle domaine) en un ensemble d'entités
0021266950863 2
PRINCIPE
PRINCIPE DES
DES MODELES
MODELES A
A OBJETS
OBJETS
Les modèles à objets ont étés crées pour modéliser le monde réel.
0021266950863 3
PRINCIPE
PRINCIPE DES
DES MODELES
MODELES A
A OBJETS
OBJETS
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.
On ne peut exécuter une méthode sans préciser l'objet sur lequel elle s'applique.
L'ensemble des propriétés d'un objet (attributs et méthodes) constitue un ensemble appelé classe
0021266950863 4
Le
Le concept
concept de
de classe
classe
c'est un ensemble de données et de fonctions regroupées dans une même entité.
Les fonctions qui opèrent sur les données sont appelées des méthodes.
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.
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 5
La classe est une définition d’objets ayant le même comportement (méthodes),
la même structure (mêmes propriétés)
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 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.
L’instanciation
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.
et en l'obligeant à utiliser les fonctions définies pour les modifier (appelées interfaces),
L’Encapsulation
C’est le regroupement dans une même entité appelée objet des données et des
traitements. On ne peut atteindre les attributs d’un objet que par l’intermédiaire de ses 8
0021266950863
traitements appelés aussi méthodes ou services
hhéritage
éritage
La notion d'héritage
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
0021266950863 9
hhéritage
éritage
Véhicule
N° plaque
Poids total
spécialisation
Généralisation
Camion Voiture Bus
Charge portes capacité
0021266950863 10
Pourquoi hériter ?
Comment hériter ?
Par spécialisation
Par enrichissement
0021266950863 11
Fonctionnement de ll’héritage
’héritage
Un objet hérite des champs et des méthodes de tous ses types ascendants
¾ champs hérités
¾ méthodes héritées
De plus, un objet dispose des champs et des méthodes de son propre type
(nouveaux noms)
¾ champs supplémentaires
¾ méthodes supplémentaires
¾ méthodes redéfinies
0021266950863 12
Exemple
Exemple
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
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 :
0021266950863 13
hhéritage
éritage
Hiérarchie des classes
Personnel
Cin
Nom
anneeNaissance
Enseignant Chercheur
Matière domaineDeRecherches
classeNiveau nombrePublications
0021266950863 14
la surcharge
¾ On appelle surcharge le fait d’avoir plusieurs méthodes qui ont le
0021266950863 15
Surcharge : exemple
class Additionneur {
0021266950863 16
Polymorphisme
0021266950863 17
Figure
DessineToi()
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.
Attributs Opérations
0021266950863 19
Exemples d'objets
Un objet voiture
uneVoiture
Attributs :
couleur = bleue
poids = 979 kg
puissance = 12 CV
capacité carburant = 50 l
conducteur = Dupont
vitesse instantanée = 50 km/h
Opérations :
démarrer ()
déplacer ()
mettreEssence ()
Attributs : Attributs :
point-sup-gauche débit
point-inf-droit crédit
texture titulaire
en-tête
Opérations :
Opérations : déposer (somme)
activer () retirer (somme)
fermer () avoirSolde ()
réduire (coeff)
0021266950863 agrandir (coeff) 20
déplacer (lieu)
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
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
Instances ...
Voiture
Démarrer
Kilométrage
Se déplacer niveau d’essence
Mettre de l’essence
0021266950863 23
Encapsulation - avantages
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.
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 interface0021266950863
constitue un contrat entre l’objet et ses clients, c’est-à-dire entre24
le
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.
Compte
Compte
crédit
crédit débit
débit
déposer
déposer retirer
retirer avoirSolde
avoirSolde
Taux Crédit
calculerIntérêts débit
Taux
déposer
retirer
avoirSolde
calculerIntérêts
0021266950863 26
0021266950863 27
Destructeur
classe Object.
0021266950863 28
Héritage et visibilit
Héritage visibilitéé
0021266950863 29
La classe Object
autres classes.
0021266950863 30
Les Interfaces (Héritage Multiple)
(Héritage
0021266950863 31
LL’implémentation
’implémentation
0021266950863 32
La Visibilit
Visibilitéé
¾ Public
Accessible par toutes les classes de tous les packages.
Protected
Permet l’accès à la ressource par les classes dérivés(ces dernières
peuvent être situées dans un autre package) et toutes du même
package.
¾ Private
Les attributs qui sont définis avec l’attribut private, ne sont pas
accessible à partir d’autres classes ni par les sous-classes.
0021266950863 33
¾ Abstract
¾ Intérêt
0021266950863 34
0021266950863 35
0021266950863 36
0021266950863 37
0021266950863 38
0021266950863 39
TP 1 – Création de la Classe Salarie.
Objectif :
Un matricule
Un statut (Cadre, Employé, Agent de maîtrise)
Un service
Un nom
Un salaire.
0021266950863 40
Version A , une Classe Simple sans « encapsulation » :
Définir une classe Salarie avec ses données membres et deux méthodes :
Sal ari e
- m _iM atri cul e : i nt
- m _cStatut : char
- m _sServi ce : Stri ng
- m _sNom : Stri ng
- m _dSalaire : doubl e
+ Calcul Salaire () : doubl e
+ Affichage () : void
0021266950863 41
Quelques indications :
Instanciation
0021266950863 42
Aide à la solution Version A :
Il faut une classe Salarie
Double CalculSalaire( )
{
…
return…
}
Double Affichage( )
{
System.out.println…
… 0021266950863 43
}
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 !!!
0021266950863 44
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 : " + m_sNom +
"\nStatut : " + m_cStatut +
"\nService : " + m_sService);
System.out.println ("Salaire Annuel : " + (CalculSalaire()) + " E");
}
} 0021266950863 45
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();
salarie2.Affichage();
}
0021266950863 46
}
0021266950863 47
Version B : Gestion de la classe salarié avec encapsulation
Sal ari e
- m _i M atri cul e : i nt
- m _cStatut : char
- m _sServi ce : String
- m _sNom : String
- m _dSal ai re : doubl e
+ Cal cul Sal ai re () : doubl e
+ Affi chage () : void
+ getIM atricule () : i nt
+ getCStatut () : char
+ getSServi ce () : Stri ng
+ getSNom () : Stri ng
+ getDSal aire () : doubl e
+ setIM atricule (i nt newM _i M atri cul e) : void
+ setCStatut (char newM _cStatut) : void
+ setSServi ce (String newM _sServi ce) : void
+ setSNom (Stri ng newM _sNom ) : void
+ setDSal ai re (doubl e newM _dSalai re) : void
+ SALARIE ()
0021266950863 48
Accès aux données membre des objets :
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
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 où
les
0021266950863 49
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
variable d’instance en fonction de son type (null pour une variable de type String), en
constructeur. Un constructeur est une méthode spéciale, qui spécifie les opérations
à effectuer à l’instanciation.
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 :
// 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)
{
// on a besoin d'un paramètre :
m_iMatricule = iMatricule; // le nouveau matricule
// pas de return
}
Pour le test on peut utiliser les différents constructeurs puis on détruit les objets
0021266950863 51 ave
finalize( )
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
salarie3.matricule(3); // affectation du matricule
salarie3.nom("DUPONT"); // affectation du nom
// affichage
// destruction objet salarie3
0021266950863 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...
//Fonctions Get...
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_sNom : String - m_iTauxCommission : int
# m_dSalaire : double + getITauxCommission () : int
+ CalculSalaire () : double + setITauxCommission (int newM_iTauxCommission) : void
+ Affichage () : void + getDChiffreAffaire () : double
+ getIMatricule () : int + setDChiffreAffaire (double newM_dChiffreAffaire) : void
+ 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 Construire la classe Commercial qui hérite de la classe Salarie
+ 0021266950863
setDSalaire (double newM_dSalaire) : void 57
+ 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( ) ; // appel au constructeur par défaut de la classe mère
m_nCommission = 0;
…
}
// Constructeur d'initialisation
public Commercial(int nMatricule, … , // rajouter les nouvelle propriétés
{
super( …);
m_nCommission = nCommission;
…
}
// Méthodes de l'objet
public String CalculSalaire( ){ // intégration des commissions
…
}
Classe d’Application:
Prévoir deux salariés et un ou deux commerciaux
Les instancier avec0021266950863
les constructeurs adéquats 58
Les afficher notamment calculSalaire( ) pour mettre en oeuvre le polymorphisme
public class Commercial extends Salarie
{
private double m_dChiffre;
private int m_nCommission;