69
OBJET Les concepts

OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Embed Size (px)

Citation preview

Page 1: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

OBJET

Les concepts

Page 2: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Approche classique Basée sur la séparation entre:

Le code Les données

Un programme est un ensemble de procédures qui utilisent et modifient des données

Programmer c’est concevoir des traitements

Page 3: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Approche classique

Découpage net entre données et traitement

SQL

SGBD

Prog 3

Prog 2

Prog 1

SP

Page 4: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Approche Objet Regrouper (encapsuler) données et traitement au sein

d’une même entité : l’objet

Un objet est une entité informatique Dont les attributs décrivent l’état Dont les opérations(méthodes) décrivent le comportement

Un programme écrit en langage objet: Est un ensemble d’objets ayant chacun une structure et un

comportement C’est la résultante de la collaboration de ces objets (qui communiquent

par envoi de messages)

Page 5: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Approche objet Un programme devient un ensemble de petites entités informatiques qui interagissent et communiquent par messages

Page 6: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Historique des langages OO

ALGOL 1960

SIMULA 1967

EIFFEL1989

C++1983

OBJECTPASCAL

C1972

PASCAL

ADA

SMALLTALK 1976

OBJECTIVE C

JAVA1995

LISP 1957

C#2000

Page 7: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Les concepts de base

Objet, Classe, Attributs, Méthodes Encapsulation Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface

Page 8: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

L’objet

Un objet est défini par : Ses attributs (ses caractéristiques) Les opérations qu’il supporte (ses méthodes)

Un objet regroupe ainsi : Un aspect statique (sa structure, son état) Un aspect dynamique (son comportement)

Page 9: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

L’objet

uneFenêtre

Attributs :point-sup-gauchepoint-inf-droittextureen-tête

Opérations : Activer ()Fermer ()Réduire (coeff)Agrandir (coeff)Déplacer (lieu)

unCompte

Attributs :numerosoldetitulaire

Opérations : Déposer (somme)Retirer (somme)AvoirSolde ()

uneVoiture

Attributs :couleur = bleue

poids = 979 kg

puissance = 12 CV

capacité carburant = 50 l

vitesse instantanée =50km/h

Opérations : Démarrer ()

Se déplacer ()

Mettre de l’essence ()

Page 10: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Objet et Classe Il est impossible de décrire chaque objet d’un système

Pour simplifier, pour abstraire, on décrit des classes d’objets avec: Des caractéristiques communes : Attributs Un comportement commun : Méthodes

Une classe est donc une abstraction, un concept

Page 11: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Objet et Classe

Les classes ont un double rôle : décrire et classer de façon abstraite des objets servir de « moule » à objets (mécanisme d’instanciation).

Page 12: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Attributs Les attributs définissent la structure d’un objet : ils sont nommés,

typés et peuvent posséder une valeur initiale L’état de l’objet correspond à la valeur des attributs à un instant

donné

unCompte

numérosolde : réel =0.0titulaire

Déposer (somme)Retirer (somme)AvoirSolde ()

Type de l’attribut

Valeur initialeNom de l’attribut

Page 13: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Méthodes

Structure d'un message :

Récepteur SélecteurParamètre ...

4462

4462 Déposer 100

Déposer

unCompte

Attributs :numérosoldetitulaire

Opérations : Déposer (somme)Retirer (somme)AvoirSolde ()

Nom de la méthode à activer

Nom de l’objet recevant le message

L’objet est sollicité de l’extérieur par un message

Il réagit à cette sollicitation en exécutant cette méthode

Page 14: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Méthodes

Une méthode est un « petit programme » qui exécute un traitement. Les méthodes sont décrites au niveau des classes. Chacune à un nom qui permet de l’activer.

Page 15: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Méthodes Les méthodes peuvent être publiques ou privées. Les méthodes publiques constituent l'interface de l'objet avec

l'extérieur. Les méthodes privées sont invisibles de l’extérieur.

Méthodes publiques

Méthodes privées

Données privées

Page 16: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Membres d ’objet

Comme on vient de le voir, les objets sont caractérisés par les données

et les méthodes qu’ils encapsulent;

chaque objet possède ses propres membres selon le modèle de sa

classe d ’appartenance.

Ce sont les variables d’objet et les méthodes d’objets.

Page 17: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Membres de classeLa classe peut elle même être caractérisée par des membres qui lui sont propres.

La classe Compte conserve le nombre total de comptes Compte.nbTotLa classe Compte propose une méthode qui retourne ce nombre

Compte.RetourneNb()

Ces membres n’existent qu’à l’unité; ils sont rattachés à la classe et sontpartagés par toutes les instances de la classe. On dit alors qu’ils sont statiques (qualifieur static en C++,Java, C#), car ilsexistent dès le début de l’application.

Ce sont les variables de classe et les méthodes de classe.

Page 18: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Membres de classe

Cette notion est très utile, à tel point que certaines classes ne font que proposer des membres statiques et ne sont pas destinées à être instanciées.

C ’est le cas en C# de la classe Math qui propose les données PI, E et les méthodes log, sin, exp , etc...

On dispose ainsi de nombreuses bibliothèques thématiques.

Page 19: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Les concepts de base

Objet, Classe, Attributs, Méthodes Encapsulation Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface

Page 20: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Encapsulation

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.

Démarrer

SeDéplacer

Mettredelessence

Voiture

kilométrageconsommation

Attributs privés

Page 21: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Encapsulation : Types de visibilité

Types de visibilité d’un attribut ou d’une opération Public : visible de toutes les classes Protégé : visible de la classe et des sous-classes Privé : visible uniquement de la classe

Page 22: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Encapsulation

Limiter la visibilité, c’est : Protéger l’intérieur de l’objet Dissimuler la complexité Simplifier la maintenance Codifier les échanges avec l’extérieur

Page 23: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Encapsulation

Il est important de noter :

qu’un objet n’est connu que par son interface : les services qu’il peut rendre

qu’il est autonome : il est responsable des actions qu’il sait effectuer.

Page 24: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

C# : une classe

class Compte{

public int numero;private decimal solde;public string titulaire;

public void Deposer (decimal somme){

solde += somme}public void Retirer (decimal somme){ solde -= somme }

}

class Compte{

public int numero;private decimal solde;public string titulaire;

public void Deposer (decimal somme){

solde += somme}public void Retirer (decimal somme){ solde -= somme }

}

Page 25: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

C# : une classe

class Compte{

private int numero;....

public int GetNumero() {

return numero;}public void SetNumero(int num){

numero = num;}

....

class Compte{

private int numero;....

public int GetNumero() {

return numero;}public void SetNumero(int num){

numero = num;}

....

class Compte{

private int numero;....

public int Numero{

get{

return numero;}set{

numero = value;}

}

class Compte{

private int numero;....

public int Numero{

get{

return numero;}set{

numero = value;}

} Fonction d’accès aux attributs

Ou assesseurs et modifieurs Propriétés d’objets

Page 26: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Les concepts de base

Objet, Classe, Attributs, Méthodes Encapsulation Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface

Page 27: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Cycle de vie de l’objet L’objet naît , vit , meurt : il a un cycle de vie

Création d’objet Allocation de mémoire à l’aide de new L’objet est initialisé grâce à un constructeur

Utilisation de l’objet : appel de méthodes Destruction d’objet

L’objet redevient mémoire L’allocation de mémoire est annulée

Page 28: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Cycle de vie de l’objetL'instanciation est le processus par lequel on crée de nouveaux objets

à partir du modèle défini par une classe.

Classe

I n s t a n c e s

L’opérateur new est utilisé pour créer des objets

(allocation de mémoire à partir de tas)

Page 29: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Cycle de vie de l’objetunCompte

Attributs :numérosoldetitulaire

Opérations : Déposer (somme)Retirer (somme)AvoirSolde ()

Classe

numéro 4462solde 200titulaire Paul

Instance de numéro 8765solde 5000titulaire Jean

Le monde abstrait des concepts

Le monde réel, concret

Page 30: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

class Compte{

private int numero;private decimal solde;private string titulaire;public int Numero{

get{return numero;}set{numero = value;}

} public string Titulaire{

get{return titulaire;}set{titulaire = value;}

} public decimal Solde{

get{return solde;}}

public void Deposer (decimal somme){ solde += somme; }public void Retirer (decimal somme){ solde -= somme; }

}

class Compte{

private int numero;private decimal solde;private string titulaire;public int Numero{

get{return numero;}set{numero = value;}

} public string Titulaire{

get{return titulaire;}set{titulaire = value;}

} public decimal Solde{

get{return solde;}}

public void Deposer (decimal somme){ solde += somme; }public void Retirer (decimal somme){ solde -= somme; }

}

Page 31: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

C# : Cycle de vie de l’objet

class Exemple{

static void Main(){

Compte leCompte = new Compte();

leCompte.Numero=4462;leCompte.Titulaire = “Paul”;leCompte.Deposer(200);

Console.WriteLine(leCompte.Solde) // écrit 200}

}

class Exemple{

static void Main(){

Compte leCompte = new Compte();

leCompte.Numero=4462;leCompte.Titulaire = “Paul”;leCompte.Deposer(200);

Console.WriteLine(leCompte.Solde) // écrit 200}

}

Page 32: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

C# : Cycle de vie de l’objet

class Compte{private int numero;private decimal solde;private string titulaire;public int Numero{ get{return numero;} set{numero = value;}} public string Titulaire{ get{return titulaire;} set{titulaire = value;}}

public decimal Solde{ get{return solde;}}public Compte(){ numero=0;

solde=0.0M;titulaire=“”;}

public void Deposer (decimal somme){ solde += somme; }public void Retirer (decimal somme){ solde -= somme; }

}

class Compte{private int numero;private decimal solde;private string titulaire;public int Numero{ get{return numero;} set{numero = value;}} public string Titulaire{ get{return titulaire;} set{titulaire = value;}}

public decimal Solde{ get{return solde;}}public Compte(){ numero=0;

solde=0.0M;titulaire=“”;}

public void Deposer (decimal somme){ solde += somme; }public void Retirer (decimal somme){ solde -= somme; }

}

Constructeur par défaut

(généré par le compilateur si non codé)

Page 33: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

C# : Cycle de vie de l’objet

class Compte{

public int numero;private decimal solde;public string titulaire;

public Compte (int num, decimal mt, string nom){

numero=num;solde=mt;titulaire=nom;

}

public void Deposer (decimal somme){ solde += somme; }public void Retirer (decimal somme){ solde -= somme; }

}

class Compte{

public int numero;private decimal solde;public string titulaire;

public Compte (int num, decimal mt, string nom){

numero=num;solde=mt;titulaire=nom;

}

public void Deposer (decimal somme){ solde += somme; }public void Retirer (decimal somme){ solde -= somme; }

}

Constructeur surchargé

Page 34: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

C# : Cycle de vie de l’objet

class Compte{private int numero;private decimal solde;private string titulaire;public int Numero{ get{return numero;} set{numero = value;}} public string Titulaire{ get{return titulaire;} set{titulaire = value;}}

public decimal Solde{ get{return solde;}}public Compte (int num, string nom){ numero=num;

titulaire=nom;}public void Deposer (decimal somme){ solde += somme; }public void Retirer (decimal somme){ solde -= somme; }

}

class Compte{private int numero;private decimal solde;private string titulaire;public int Numero{ get{return numero;} set{numero = value;}} public string Titulaire{ get{return titulaire;} set{titulaire = value;}}

public decimal Solde{ get{return solde;}}public Compte (int num, string nom){ numero=num;

titulaire=nom;}public void Deposer (decimal somme){ solde += somme; }public void Retirer (decimal somme){ solde -= somme; }

}

Constructeur surchargé

Page 35: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

C# : Cycle de vie de l’objet

class Exemple{

static void Main(){

Compte leCompte = new Compte(4462,“ Paul”);

leCompte.Deposer(200);

Console.WriteLine(leCompte.Solde) // écrit 200}

}

class Exemple{

static void Main(){

Compte leCompte = new Compte(4462,“ Paul”);

leCompte.Deposer(200);

Console.WriteLine(leCompte.Solde) // écrit 200}

}

Page 36: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Notion de référence L ’identifieur (leCompte) qui est attaché à l ’objet lors de l ’instanciation

puis qui permet de le manipuler s ’appelle une référence ( en C#), un pointeur (en C++) ou un handle(en Java )

Rien n’empêche que plusieurs références pointent sur le même objet

leCompte=new ComptetabCompte[5]=leCompteparamXX=leCompte

Dans ce cas, le garbage collector est vigilant et ne détruit pas l ’objet tant qu ’il estencore référencé.

numéro 4462solde 200titulaire Paul

Deposer (Somme)Retirer (Somme) AvoirSolde()

paramXX

tabCompte[5]

leCompte

Page 37: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Suppression d’objets en C# Impossible de détruire explicitement un objet

C# ne fournit pas d’opposé à new car une fonction desuppression est source de nombreuses erreurs

Oubli de détruire les objets Tentative de destruction d’un même objet plusieurs fois Destruction d’un objet actif

C’est le garbage collector qui détruit les objets Détruit les objets inaccessibles Réalloue la mémoire dans le tas Effectue cette tâche lorsque la mémoire est insuffisante

Page 38: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Suppression d’objets en C# Impossible de contrôler le moment ou un objet est détruit,

mais contrôle possible de ce qui se passe lors de la destruction

Par l’utilisation de la méthode Finalize (objets du framework) Par l’écriture d’un destructeur

class Compte{

~ Compte{

// instructions de nettoyage}

}

class Compte{

~ Compte{

// instructions de nettoyage}

}

A éviter …

Augmente la charge et

retarde la récupération mémoire

Page 39: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Les concepts de base

Objet, Classe, Attributs, Méthodes Encapsulation Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface

Page 40: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Classification

Les classifications permettent de gérer la complexité en ordonnant

les objets au sein d'arborescences de classes d'abstraction

croissante. Substance

Corps Substance incorporelle

Corps animé Corps inerte

Animal Pierre

Esprit

Animal rationnel

Etre humain Ange

L’arbre de Porphyre(philosophe 3eme siècle après JC)

Page 41: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Classification

Personnel

Personnel Naviguant

PersonnelAu sol

Hôtesse del’air

PiloteHôtesse d’accueil

Technicien

Page 42: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Généralisation

La généralisation consiste àfactoriser les élémentscommuns d'un ensemble declasses dans une classeplus générale : la super-classe ou sur-classe

La classe Personnel est unegénéralisation de la classePersonnelAuSol

Personnel

Personnel Naviguant

PersonnelAu sol

Hôtesse del’air

PiloteHôtesse d’accueil

Technicien

Page 43: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Spécialisation

La spécialisation permet decapturer les particularités d'unensemble d'objets nondiscriminées par les classes déjàidentifiées.

la classe Pilote est unespécialisation de la classePersonnelNaviguant,qui est ellemême une spécialisation de laclasse Personnel …

Personnel

Personnel Naviguant

PersonnelAu sol

Hôtesse del’air

PiloteHôtesse d’accueil

Technicien

Page 44: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

classe de base

classe dérivée

CA

CB

Relation d ’héritage

Généralisation

Spécialisation/Généralisation

L’héritage spécifie une relation « est une sorte de »

Spécialisation

Page 45: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Héritage

Une instance de la classePilote

Possède la structure définie sur la classe Pilote

Hérite de la structure définie sur la super-classe PersonnelNaviguant qui a elle-même hérité de la structure définie sur sa super-classe Personnel

Personnel

Personnel Naviguant

PersonnelAu sol

Hôtesse del’air

PiloteHôtesse d’accueil

Technicien

Page 46: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Héritage Les données membres de la classe de base deviennent donc données

à part entière de la classe dérivée

Un pilote a un nom, prénom, âge … qui lui viennent de la classe Personnel

Les services rendus par la super classe le sont aussi par la classe dérivée

Un pilote en tant que Personnel dispose d’un salaire qui peut être évalué sur l ’année

La classe fille rajoute ses propres données membres et services

Un pilote possède un nombre d’heures de vols ...

Page 47: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Héritage Héritage simple : dérivé d’une classe de base Héritage multiple : dérivé de plusieurs classes de base

Véhicules terrestres

Voiture

Véhicules terrestres Véhicules marins

Amphibie

C# restreint l’utilisation de l’héritage multiple : une classe ne peut hériter que d’une classe,

mais de plusieurs interfaces .

Page 48: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Héritage

Compte

Attributs :numérosoldetitulaire

Opérations : Déposer (somme)Retirer (somme)AvoirSolde ()

CompteEpargne

Attributs :taux

Opérations : CalculerInterêts ()

unCompteEpargne

Attributs :numérosoldetitulairetaux

Opérations : Déposer (somme)Retirer (somme)AvoirSolde ()CalculerInterêts ()

Est une sorte de

Hérite de

Page 49: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

C# : Héritage

class Compte{

private int numero;protected decimal solde;private string titulaire;

public Compte(){ numero=0;

solde=0.0M;titulaire=“”;}

public Compte(int num){ numero=num;}public void Deposer (decimal somme){ solde += somme; }public void Retirer (decimal somme){ solde -= somme; }

}

class Compte{

private int numero;protected decimal solde;private string titulaire;

public Compte(){ numero=0;

solde=0.0M;titulaire=“”;}

public Compte(int num){ numero=num;}public void Deposer (decimal somme){ solde += somme; }public void Retirer (decimal somme){ solde -= somme; }

}

class CompteEpargne : Compte{

private decimal taux;

public CompteEpargne() : base(){ taux=0.0M;}public CompteEpargne(int num, decimal tx)

:base(num){ taux =tx;}

public void CalculerInterets (){

…}

}

class CompteEpargne : Compte{

private decimal taux;

public CompteEpargne() : base(){ taux=0.0M;}public CompteEpargne(int num, decimal tx)

:base(num){ taux =tx;}

public void CalculerInterets (){

…}

}

Constructeur de classe de base

Page 50: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Héritage : Types de visibilité Une opération d’une classe autre qu’une sous-classe n’a pas

accès aux attributs et opérations privés ou protégés

Une opération d’une sous-classe Ne peut pas accéder (consultation ou affectation) à l’attribut

privé de sa sur-classe Peut accéder (consultation ou affectation) à l’attribut protégé

de sa sur-classe

Privé =« Boite noire » de la classe Protégé=« Boite noire » de la hiérarchie de classe

Page 51: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Les concepts de base

Objet, Classe, Attributs, Méthodes Encapsulation Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface

Page 52: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Polymorphisme En Programmation classique

Si x . type = "cercle " alors  x, dessinerCercle

SinonSi x . type ="rectangle "   alors

x, dessinerRectangleSinon

Si x . type = "triangle "   alors x, dessinerTriangle

FinsiFinsi

FinSi

Page 53: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Polymorphisme On appelle polymorphisme (du grec signifiant « plusieurs

formes ») le fait de dissimuler des traitements différents derrière la même méthode.

Page 54: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Polymorphisme En Programmation objet

Le nom de la méthode réside dans la classe de base Les implémentations de la méthode résident dans les

classes dérivées

Figure

Dessiner()

Cercle

Dessiner()

Rectangle

Dessiner()

Triangle

Dessiner()

Page 55: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Polymorphisme Évolution du logiciel : si je veux dessiner un octogone

Ajout de la classe Octogone Il suffira de coder la méthode Dessiner dans la classe Octogone. Aucune autre modification ne sera nécessaire.

Figure

Dessiner()

Cercle

Dessiner()

Rectangle

Dessiner()

Triangle

Dessiner()

Octogone

Dessiner()

Page 56: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Polymorphisme C’est la propriété de donner le même nom (sélecteur

dans le message) À des comportements analogues Qui vont donner lieu à des réalisations plus ou moins différentes Selon le receveur du message

Page 57: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Une méthode virtuelle spécifie une implémentation possible d’une méthode qui peut être substituée par polymorphisme dans une classe dérivée

Une méthode non virtuelle ne peut pas être substituée dans une classe dérivée

C# : Implémentation de méthodes

class Figure{

…public virtual void Dessiner(…){

// instructions}

}

class Figure{

…public virtual void Dessiner(…){

// instructions}

}

Dans la classe de base

Page 58: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Une méthode override (de substitution) spécifie une autre implémentation d’une méthode virtuelle

C# : Implémentation de méthodes

class Cercle : Figure{

…public override void Dessiner(…){

// instructions}

}

class Cercle : Figure{

…public override void Dessiner(…){

// instructions}

}

Dans la classe dérivée

Identique en tous

points à la méthode

virtuelle :

- même type de retour

- même nom

- mêmes paramètres

Peut être substituée ...

Page 59: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Substitution de méthodesCompte

Attributs :numérosoldetitulaire

Opérations : Déposer (somme)Retirer (somme)AvoirSolde ()CalculerInterêts()

CompteEpargne

Attributs :taux

Opérations : CalculerInterêts ()

Est une sorte de

class Compte {

…public void virtual CalculerInterêts(){

… }

}class CompteEpargne : Compte {

…public void override CalculerInterêts(){

… }

}

class Compte {

…public void virtual CalculerInterêts(){

… }

}class CompteEpargne : Compte {

…public void override CalculerInterêts(){

… }

}

Implicitement virtuelle

Jamais static ni private

Page 60: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Classes abstraites Ce sont des classes qui ne seront jamais instanciées. Elles ne servent qu’à modéliser l ’univers. Une bonne règle :

classes terminales :concrètes classes non terminales : abstraites

(qualifieur abstract en C++, Java et C#)

Page 61: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Classes abstraites

Figure

Dessiner()

Cercle

Dessiner()

Rectangle

Dessiner()

Triangle

Dessiner()

Octogone

Dessiner()

La classe de base existe dans le seul but de présenter le nom de la méthode dans la hiérarchie

Page 62: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Classes abstraites

abstract class Figure{

int i;public abstract void Dessiner();public virtual bool Effacer(){ …}

}class Cercle():Figure{

public override void Dessiner(){ …}public override bool Effacer(){ …}

}

abstract class Figure{

int i;public abstract void Dessiner();public virtual bool Effacer(){ …}

}class Cercle():Figure{

public override void Dessiner(){ …}public override bool Effacer(){ …}

}

Ne peut pas être instanciée

Pas de corps de méthode

implicitement virtuelle

Les classes abstraites sont utilisées pour fournir des implémentations de classes partielles, étendues dans les classes dérivées

Seules les classes abstraites peuvent déclarer des méthodes abstraites

Les méthodes abstraites ne peuvent pas contenir de corps de méthode

Les méthodes abstraites sont virtuelles

Page 63: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Interfaces Une interface spécifie un contrat auquel toutes les classes

dérivées doivent adhérer

interface IConstructible{

… void Dessiner(…);

}

interface IConstructible{

… void Dessiner(…);

}

Le nom doit commencer par la lettre I

Implicitement publique

Pas de corps de méthode

Page 64: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Interfaces Une classe peut implémenter zéro (ou plusieurs)

interface(s) interface IConstructible{

void Dessiner(…);}interface IManipulable{

void Copier(…); void Coller (…);

void Couper(…);}class Figure :IConstructible, IManipulable {

…}

interface IConstructible{

void Dessiner(…);}interface IManipulable{

void Copier(…); void Coller (…);

void Couper(…);}class Figure :IConstructible, IManipulable {

…}

Page 65: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Interfaces Toutes les méthodes déclarées dans les interfaces doivent

être implémentées

class Figure :IConstructible, IManipulable {

public void Dessiner(…){ …}public void Copier(…){ …} public void Coller (…){ …} public void Couper(…){ …}

class Figure :IConstructible, IManipulable {

public void Dessiner(…){ …}public void Copier(…){ …} public void Coller (…){ …} public void Couper(…){ …}

Identique en tous

points à la méthode

d’interface:

- même type de retour

- même nom

- mêmes paramètres

Peut être virtuelle ou

non ...

Page 66: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Interfaces Une classe implémente une interface et étend une classe de

base

Cercle

Dessiner()

Figure

Dessiner()

IConstructible

Dessiner()Interface

Classe

abstraite

Classe

concrète

Uniquement des opérations

Peut contenir une implémentation

Doit implémenter toutes les opérations issues

de l’héritage

Page 67: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Interfaces

interface IConstructible{

void Dessiner();}abstract class Figure :IConstructible{

…public virtual void Dessiner(){}

}class Cercle : Figure{

public override void Dessiner(){}

}

interface IConstructible{

void Dessiner();}abstract class Figure :IConstructible{

…public virtual void Dessiner(){}

}class Cercle : Figure{

public override void Dessiner(){}

}

Page 68: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

CONCLUSION Qu’est-ce qu’un programme ?

Il n’y a plus de programme au sens strict Chaque entité est conçue indépendamment

D’où un gain de modularité D’où aussi la nécessité de maîtriser les interactions Permet de modéliser la réalité telle qu’elle est

conceptualisée

Page 69: OBJET Les concepts. Approche classique Basée sur la séparation entre: Le code Les données Un programme est un ensemble de procédures qui utilisent et

Principes Créer des classes qui vont permettre d’instancier des objets

Principe de réification

Communiquer par envoi de messages Principe de délégation

Utilisation de l’héritage Conception par affinage et abstraction