Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
Concepts de base : la Classe Cette analogie est erronée car la structure en C ne permet pas dappliquer des mécanismes comme lencapsulation, lhéritage, … Pour comprendre en quoi une classe est différente dune structure avec des méthodes, il est nécessaire de comprendre ces mécanismes.
Concepts de base : LEncapsulation Lencapsulation est un des mécanismes qui permet de mettre en oeuvre la pensée objet. Prenons un exemple simple, celui dune classe CMonitoring qui permet de capturer des paquets sur une interface Ethernet.
Concepts de base : LEncapsulation Variable Membre Méthodes Propriété
Concepts de base : LEncapsulation La classe CMonitoring aura besoin dutiliser un driver de la carte Ethernet afin de capturer réellement les paquets. Considérons quune classe de plus bas niveau, CDriverEthernet permette de faire cette capture.
Concepts de base : LEncapsulation
On remarque que la classe CMonitoring va avoir besoin de la classe CDriverEthernet afin de capturer les paquets. Pour ce faire, la classe CMonitoring va utiliser une variable membre du type CDriverEthernet.
Concepts de base : LEncapsulation Variable Membre
Concepts de base : LEncapsulation Dune façon simplifiée nous avons donc ceci : ceci nest en rien une notation UML CDriverEthernetCMonitoring !
Concepts de base : LEncapsulation La classe CMonitoring utilise la classe CDriverEthernet sous forme dune variable membre m_DriverEthernet afin de capturer les paquets et cache la complexité de CDriverEthernet. Par exemple, nous pourrions imaginer la méthode Start() de la classe CMonitoring comme ceci.
Concepts de base : LEncapsulation
La méthode Stop() ressemblerait à :
Concepts de base : LEncapsulation Notre classe CMonitoring permet donc de démarrer et darrêter une capture réseau. Létat de la capture (en cours ou arrêtée) dépend donc de la variable m_DriverEthernet (== null ou de null).
Concepts de base : LEncapsulation Pour une utilisation normale de la classe CMonitoring, on devrait avoir ceci :
Concepts de base : LEncapsulation Mais que se passerait-il si nous avions ceci :
Concepts de base : LEncapsulation Il est donc nécessaire de protéger des éléments (variables, méthodes, …) de la classe afin quils ne soient pas directement accessibles et ce afin de garantir la cohérence et lintégrité de létat de lobjet. Cest ce que lon appelle lencapsulation.
Concepts de base : LEncapsulation Eléments protégés, inaccessibles Interface de la classe
Concepts de base : LEncapsulation
Lencapsulation est donc un mécanisme donné au concepteur et au programmeur afin quil puisse différencier la partie utilisable de la classe de la partie interne de la classe. La partie interne ou privée na donc de sens que pour celui qui développe la classe et non pour celui qui lutilise. Celui qui utilise la classe ne doit même pas connaître lexistence de cette partie interne.
Concepts de base : LInterface Lencapsulation permet donc de différencier la partie utilisable de la classe et la partie interne, encapsulée de la classe. La partie utilisable de la classe (Start(), Stop(), …) est ce que lon appelle linterface de la classe.
Concepts de base : Classe versus Objet Nous avons dit quune classe sapparentait à une structure mais que cette comparaison était erronée. En effet, nous avons vu que la classe, contrairement à la structure, supporte lencapsulation, autrement dit, la possibilité de différencier ce qui est interne et ce qui est utilisable. Mais quelle est la différence entre une classe et un objet ?
Concepts de base : Classe versus Objet Une classe nest jamais quune description textuelle (écrite ou codée). In fine, une classe est écrite dans un langage de programmation et compilée par un compilateur (ou interprétée).
Concepts de base : Classe versus Objet Lobjet lui occupe une place en mémoire (données + code). Il est créé à un instant et détruit à un autre. Lobjet est donc un élément matériel dans le sens où il occupe un espace mémoire et est « capable dexécuter » du code. La classe nest que la description de lobjet, ou de lensemble des objets de cette classe, rien dautre.
Concepts de base : Classe versus Objet Par exemple, une classe peut définir quune variable est privée. Lorsque dans le code, on créera un objet de cette classe, le compilateur générera une erreur si on essaye daccéder directement à cette variable. Dans ce sens, la classe dicte au compilateur les vérifications à effectuer et le code à générer. A lexécution, cette notion de public/privé nexiste plus. Il serait possible daccéder directement à la variable privée en accédant directement à la mémoire (soit avec un outil externe soit en utilisant des pointeurs dans le code).
Concepts de base : Classe versus Objet ClasseObjet en mémoire Processus Données CodePile
Concepts de base : Héritage Etant donné que le concept dhéritage, a été vu dans le cadre du cours de programmation orienté objet, nous ne ferons quun simple rappel sous forme dexemples. Pour une définition plus précise, on se référera au livre de POO.
Concepts de base : Héritage Reprenons notre classe CMonitoring qui encapsule un driver Ethernet. Nous savons quil existe plusieurs types de drivers permettant de capturer des trames : Ethernet, Wifi, … Il serait donc possible de concevoir une classe CMonitoring pour une carte Ethernet et une autre classe CMonitoring pour une carte Wifi. Mais le principe de monitoring reste le même : – Démarrage de la capture – Utilisation des trames/paquets capturés – Arrêt de la capture. Lhéritage va permettre de définir une super-classe exposant linterface commune et des sous-classes qui implémenteront un comportement spécifique.
Concepts de base : Héritage Notre classe CMonitoring devient :
Concepts de base : Héritage Avec une première sous-classe pour lEthernet :
Concepts de base : Héritage Avec une deuxième sous-classe pour le WIFI :
Autres concepts Pour les autres concepts de lorienté objets, tels que le polymorphisme, les classes génériques… on se référera au livre de POO.