31
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

  • Upload
    thimba

  • View
    41

  • Download
    0

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: Concepts de base : la Classe

Concepts de base : la Classe

• Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.

Page 2: Concepts de base : la Classe

Concepts de base : la Classe

• Cette analogie est erronée car la structure en C ne permet pas d’appliquer des mécanismes comme l’encapsulation, l’héritage, …

• Pour comprendre en quoi une classe est différente d’une structure avec des méthodes, il est nécessaire de comprendre ces mécanismes.

Page 3: Concepts de base : la Classe

Concepts de base : L’Encapsulation

• L’encapsulation est un des mécanismes qui permet de mettre en oeuvre la pensée objet.

• Prenons un exemple simple, celui d’une classe CMonitoring qui permet de capturer des paquets sur une interface Ethernet.

Page 4: Concepts de base : la Classe

Concepts de base : L’Encapsulation

Variable Membre

Méthodes

Propriété

Page 5: Concepts de base : la Classe

Concepts de base : L’Encapsulation

• La classe CMonitoring aura besoin d’utiliser un ‘driver’ de la carte Ethernet afin de capturer réellement les paquets.

• Considérons qu’une classe de plus bas niveau, CDriverEthernet permette de faire cette capture.

Page 6: Concepts de base : la Classe

Concepts de base : L’Encapsulation

Page 7: Concepts de base : la Classe

Concepts de base : L’Encapsulation

• 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.

Page 8: Concepts de base : la Classe

Concepts de base : L’Encapsulation

Variable Membre

Page 9: Concepts de base : la Classe

Concepts de base : L’Encapsulation

• D’une façon simplifiée nous avons donc ceci :

ceci n’est en rien une notation UML

CDriverEthernet CMonitoring

!

Page 10: Concepts de base : la Classe

Concepts de base : L’Encapsulation

• La classe CMonitoring utilise la classe CDriverEthernet sous forme d’une 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.

Page 11: Concepts de base : la Classe

Concepts de base : L’Encapsulation

Page 12: Concepts de base : la Classe

Concepts de base : L’Encapsulation

• La méthode Stop() ressemblerait à :

Page 13: Concepts de base : la Classe

Concepts de base : L’Encapsulation

• Notre classe CMonitoring permet donc de démarrer et d’arrê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).

Page 14: Concepts de base : la Classe

Concepts de base : L’Encapsulation

• Pour une utilisation normale de la classe CMonitoring, on devrait avoir ceci :

Page 15: Concepts de base : la Classe

Concepts de base : L’Encapsulation

• Mais que se passerait-il si nous avions ceci :

Page 16: Concepts de base : la Classe

Concepts de base : L’Encapsulation

• Il est donc nécessaire de protéger des éléments (variables, méthodes, …) de la classe afin qu’ils ne soient pas directement accessibles et ce afin de garantir la cohérence et l’intégrité de l’état de l’objet.

• C’est ce que l’on appelle l’encapsulation.

Page 17: Concepts de base : la Classe

Concepts de base : L’Encapsulation

Eléments protégés, inaccessibles

Interface de la classe

Page 18: Concepts de base : la Classe

Concepts de base : L’Encapsulation

Page 19: Concepts de base : la Classe

Concepts de base : L’Encapsulation

• L’encapsulation est donc un mécanisme donné au concepteur et au programmeur afin qu’il puisse différencier la partie utilisable de la classe de la partie ‘interne’ de la classe.

• La partie ‘interne’ ou privée n’a donc de sens que pour celui qui développe la classe et non pour celui qui l’utilise.

• Celui qui utilise la classe ne doit même pas connaître l’existence de cette partie interne.

Page 20: Concepts de base : la Classe

Concepts de base : L’Interface

• L’encapsulation 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 l’on appelle l’interface de la classe.

Page 21: Concepts de base : la Classe

Concepts de base : Classe versus Objet

• Nous avons dit qu’une classe s’apparentait à une structure mais que cette comparaison était erronée.

• En effet, nous avons vu que la classe, contrairement à la structure, supporte l’encapsulation, 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 ?

Page 22: Concepts de base : la Classe

Concepts de base : Classe versus Objet

• Une classe n’est jamais qu’une 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).

Page 23: Concepts de base : la Classe

Concepts de base : Classe versus Objet

• L’objet lui occupe une place en mémoire (données + code).

• Il est créé à un instant et détruit à un autre. • L’objet est donc un élément matériel dans le sens où

il occupe un espace mémoire et est « capable d’exécuter » du code.

• La classe n’est que la description de l’objet, ou de l’ensemble des objets de cette classe, rien d’autre.

Page 24: Concepts de base : la Classe

Concepts de base : Classe versus Objet

• Par exemple, une classe peut définir qu’une 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 d’accéder directement à cette variable.

• Dans ce sens, la classe dicte au compilateur les vérifications à effectuer et le code à générer.

• A l’exécution, cette notion de public/privé n’existe plus. Il serait possible d’accé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).

Page 25: Concepts de base : la Classe

Concepts de base : Classe versus Objet

Classe Objet en mémoire

Processus

DonnéesCode Pile

Page 26: Concepts de base : la Classe

Concepts de base : Héritage

• Etant donné que le concept d’héritage, a été vu dans le cadre du cours de programmation orienté objet, nous ne ferons qu’un simple rappel sous forme d’exemples.

• Pour une définition plus précise, on se référera au livre de POO.

Page 27: Concepts de base : la Classe

Concepts de base : Héritage• Reprenons notre classe CMonitoring qui encapsule un driver Ethernet. • Nous savons qu’il 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.

• L’héritage va permettre de définir une super-classe exposant l’interface commune et des sous-classes qui implémenteront un comportement spécifique.

Page 28: Concepts de base : la Classe

Concepts de base : Héritage

• Notre classe CMonitoring devient :

Page 29: Concepts de base : la Classe

Concepts de base : Héritage

• Avec une première sous-classe pour l’Ethernet :

Page 30: Concepts de base : la Classe

Concepts de base : Héritage

• Avec une deuxième sous-classe pour le WIFI :

Page 31: Concepts de base : la Classe

Autres concepts

• Pour les autres concepts de l’orienté objets, tels que le polymorphisme, les classes génériques… on se référera au livre de POO.