Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
OBJET Les concepts
2
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 Paradigme : Modèle de pensée
3
Approche classique Découpage net entre données et traitement Prog 2
SQL Prog 2 SGBD Prog 3 SP Basée sur la séparation entre le code et les données Un programme est un ensemble de procédures qui utilisent et modifient des données Programmer c’est concevoir des traitements Prog 1
4
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)
5
Approche objet Un programme devient un ensemble de petites entités informatiques qui interagissent et communiquent par messages
6
Historique des langages OO
ALGOL 1960 LISP 1957 SIMULA 1967 PASCAL C 1972 SMALLTALK 1976 OBJECT PASCAL ADA C++ 1983 OBJECTIVE C EIFFEL 1989 C# 2000 JAVA 1995
7
Les concepts de base Objet, Classe, Attributs, Méthodes Encapsulation
Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface
8
L’objet Un objet est défini par : Un objet regroupe ainsi :
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)
9
L’objet 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 () uneFenêtre Attributs : point-sup-gauche point-inf-droit texture en-tête Opérations : Activer () Fermer () Réduire (coeff) Agrandir (coeff) Déplacer (lieu) unCompte Attributs : numero solde titulaire Opérations : Déposer (somme) Retirer (somme) AvoirSolde ()
10
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
11
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).
12
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éro solde : réel =0.0 titulaire Déposer (somme) Retirer (somme) AvoirSolde () Type de l’attribut Nom de l’attribut Valeur initiale
13
Nom de l’objet recevant le message
Méthodes Structure d'un message : Récepteur Sélecteur Paramètre ... Nom de la méthode à activer Nom de l’objet recevant le message unCompte Attributs : numéro solde titulaire Opérations : Déposer (somme) Retirer (somme) AvoirSolde () 4462 Déposer 100 Déposer L’objet est sollicité de l’extérieur par un message Il réagit à cette sollicitation en exécutant cette méthode 4462
14
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.
15
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. Données privées Méthodes publiques Méthodes privées
16
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.
17
Membres de classe La 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.nbTot La 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 sont partagés par toutes les instances de la classe. On dit alors qu’ils sont statiques (qualifieur static en C++,Java, C#), car ils existent dès le début de l’application. Ce sont les variables de classe et les méthodes de classe.
18
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.
19
Les concepts de base Objet, Classe, Attributs, Méthodes Encapsulation
Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface
20
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. Voiture Attributs privés Démarrer kilométrage consommation SeDéplacer Mettredelessence
21
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
22
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
23
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.
24
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 }
25
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 Numero get return numero; } set numero = value; Fonction d’accès aux attributs Ou assesseurs et modifieurs Propriétés d’objets
26
Les concepts de base Objet, Classe, Attributs, Méthodes Encapsulation
Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface
27
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
28
Cycle de vie de l’objet L'instanciation est le processus par lequel on crée de nouveaux objets à partir du modèle défini par une classe. Classe L’opérateur new est utilisé pour créer des objets (allocation de mémoire à partir de tas) I n s t a n c e s
29
Cycle de vie de l’objet Le monde abstrait des concepts Classe
unCompte Attributs : numéro solde titulaire Opérations : Déposer (somme) Retirer (somme) AvoirSolde () Le monde abstrait des concepts Classe numéro 4462 solde titulaire Paul numéro 8765 solde titulaire Jean Instance de Le monde réel, concret
30
public void Deposer (decimal 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; }
31
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 }
32
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; } } Constructeur par défaut (généré par le compilateur si non codé)
33
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; } Constructeur surchargé
34
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; } } Constructeur surchargé
35
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 }
36
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 Compte tabCompte[5]=leCompte paramXX=leCompte Dans ce cas, le garbage collector est vigilant et ne détruit pas l ’objet tant qu ’il est encore référencé. leCompte paramXX numéro 4462 solde titulaire Paul Deposer (Somme) Retirer (Somme) AvoirSolde() tabCompte[5]
37
Suppression d’objets en C#
Impossible de détruire explicitement un objet C# ne fournit pas d’opposé à new car une fonction de suppression 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
38
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 } A éviter … Augmente la charge et retarde la récupération mémoire
39
Les concepts de base Objet, Classe, Attributs, Méthodes Encapsulation
Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface
40
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 Esprit Animal Pierre Animal rationnel L’arbre de Porphyre(philosophe 3eme siècle après JC) Etre humain Ange
41
Classification Personnel Naviguant Au sol Hôtesse de l’air Pilote
d’accueil Technicien
42
Généralisation La généralisation consiste à factoriser les éléments
communs d'un ensemble de classes dans une classe plus générale : la super-classe ou sur-classe La classe Personnel est une généralisation de la classe PersonnelAuSol Personnel Naviguant Au sol Hôtesse de l’air Pilote Hôtesse d’accueil Technicien
43
Spécialisation La spécialisation permet de
capturer les particularités d'un ensemble d'objets non discriminées par les classes déjà identifiées. la classe Pilote est une spécialisation de la classe PersonnelNaviguant,qui est elle même une spécialisation de la classe Personnel … Personnel Naviguant Au sol Hôtesse de l’air Pilote Hôtesse d’accueil Technicien
44
Spécialisation/Généralisation
CA Généralisation classe de base Relation d ’héritage CB classe dérivée Spécialisation L’héritage spécifie une relation « est une sorte de »
45
Héritage Une instance de la classe Pilote
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 Naviguant Au sol Hôtesse de l’air Pilote Hôtesse d’accueil Technicien
46
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 ...
47
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 .
48
Héritage Hérite de Est une sorte de Compte Attributs : numéro solde
titulaire Opérations : Déposer (somme) Retirer (somme) AvoirSolde () Hérite de unCompteEpargne Attributs : numéro solde titulaire taux Opérations : Déposer (somme) Retirer (somme) AvoirSolde () CalculerInterêts () Est une sorte de CompteEpargne Attributs : taux Opérations : CalculerInterêts ()
49
C# : Héritage class CompteEpargne : Compte 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 () … } Constructeur de classe de base
50
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
51
Les concepts de base Objet, Classe, Attributs, Méthodes Encapsulation
Cycle de vie Classification, Héritage Polymorphisme, classe abstraite, interface
52
Polymorphisme En Programmation classique Si x . type = "cercle " alors
x, dessinerCercle Sinon Si x . type ="rectangle " alors x, dessinerRectangle Si x . type = "triangle " alors x, dessinerTriangle Finsi FinSi
53
Polymorphisme On appelle polymorphisme (du grec signifiant « plusieurs formes ») le fait de dissimuler des traitements différents derrière la même méthode.
54
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 Rectangle Triangle
55
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 Rectangle Triangle Octogone
56
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
57
C# : Implémentation de méthodes
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 Dans la classe de base class Figure { … public virtual void Dessiner(…) // instructions }
58
C# : Implémentation de méthodes
Une méthode override (de substitution) spécifie une autre implémentation d’une méthode virtuelle Identique en tous points à la méthode virtuelle : - même type de retour - même nom - mêmes paramètres Peut être substituée ... Dans la classe dérivée class Cercle : Figure { … public override void Dessiner(…) // instructions }
59
Substitution de méthodes
Compte Attributs : numéro solde titulaire Opérations : Déposer (somme) Retirer (somme) AvoirSolde () CalculerInterêts() class Compte { … public void virtual CalculerInterêts() } class CompteEpargne : Compte public void override CalculerInterêts() Jamais static ni private Est une sorte de CompteEpargne Attributs : taux Opérations : CalculerInterêts () Implicitement virtuelle
60
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#)
61
Classes abstraites Figure Dessiner() Cercle Rectangle Triangle
Octogone La classe de base existe dans le seul but de présenter le nom de la méthode dans la hiérarchie
62
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() 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 Ne peut pas être instanciée Pas de corps de méthode implicitement virtuelle
63
Interfaces Une interface spécifie un contrat auquel toutes les classes dérivées doivent adhérer Le nom doit commencer par la lettre I interface IConstructible { … void Dessiner(…); } Pas de corps de méthode Implicitement publique
64
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 …
65
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(…) 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 ...
66
Interfaces Une classe implémente une interface et étend une classe de base IConstructible Dessiner() Uniquement des opérations Interface Figure Dessiner() Classe abstraite Peut contenir une implémentation Cercle Dessiner() Doit implémenter toutes les opérations issues de l’héritage Classe concrète
67
Interfaces interface IConstructible { void Dessiner(); }
abstract class Figure :IConstructible … public virtual void Dessiner() class Cercle : Figure public override void Dessiner()
68
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
69
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 Réification : représentation informatiquement sous la forme d’un objet.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.