La programmation orientée objet (POO) en C++ - Prof. Emmanuel, Exercises of Computer Science

Ce document présente les concepts fondamentaux de la programmation orientée objet (POO) en C++, notamment la notion de classe, d'objet, d'encapsulation et d'accès aux membres. Il aborde la déclaration et la définition des classes, l'instanciation d'objets, les constructeurs et destructeurs, ainsi que les règles d'accès aux membres (public, private, protected). L'objectif est de fournir une introduction solide aux principes de base de la POO en C++ pour les étudiants en BTS SN option IR.

Typology: Exercises

2019/2020

Uploaded on 06/27/2023

yann-kacou
yann-kacou 🇨🇮

1 document

1 / 23

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
La programmation orientée objet (POO) en C++
Première partie
Thierry Vaira
BTS SN Option IR
v.1.1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Partial preview of the text

Download La programmation orientée objet (POO) en C++ - Prof. Emmanuel and more Exercises Computer Science in PDF only on Docsity!

La programmation orientée objet (POO) en C++

Première partie

Thierry Vaira

BTS SN Option IR

v.1.

Sommaire

(^1) POO, Classes et Objets

(^2) Conception d’une classe

(^3) Création d’objets

(^4) Destruction d’objets

(^5) Les objets constants

(^6) Attributs et méthodes

POO, Classes et Objets

Qu’est ce qu’un programme en P.O.O.?

Un programme Orienté Objet est écrit à partir d’un langage Orienté Objet. Les langages O.O. les plus utilisés sont : C++, C#, Java, PHP, Python, ... En C++, un programme Orienté Objet est vu comme un ensemble d’objets interagissant entre eux en s’échangeant des messages.

  • En C++, il existe toujours une fonction principale main. Certains langages O.O. (comme le Java) disposent d’une classe principale qui doit contenir une méthode main.

POO, Classes et Objets

Qu’est ce qu’un objet?

Un objet est caractérisé par le rassemblement, au sein d’une même unité d’exécution, d’un ensemble de propriétés (constituant son état ) et d’un ensemble d’ opérations (constituant son comportement )

fl On parle d’ encapsulation

**Propriétés

Comportement**

La notion de propriété est matérialisée par un attribut fl Comparable à une « variable locale » à un objet, une donnée (information, caractéristique ou état) propre à l’objet

La notion d’ opération est matérialisée par une méthode fl Comparable à une « fonction » de l’objet, une action pouvant être effectuée sur l’objet

POO, Classes et Objets

Comment interagir avec un objet?

Les objets interagissent entre eux en s’échangeant des messages.

La réponse à la réception d’un message par un objet est appelée une méthode.

Une méthode est donc la mise en oeuvre du message : elle décrit la réponse qui doit être donnée au message. Le code des méthodes contient généralement : Des accès en lecture/écriture aux attributs d’un objet Des appels (on parle d’ invocation ) aux méthodes d’un objet

Conception d’une classe

Exemple d’une lampe

Une lampe est caractérisée par : Sa puissance (une propriété fl un attribut ) Le fait qu’elle soit allumée ou éteinte (un état fl un attribut )

Au niveau comportement , les actions possibles sur une lampe sont donc : L’ allumer (une méthode ) L’ éteindre (une autre méthode )

Conception d’une classe

Définition des méthodes d’une classe en C++

La définition d’une classe revient à définir l’ensemble de ses méthodes. On doit faire précéder chaque méthode de l’opérateur de résolution de portée :: précédé du nom de la classe (ici Lampe) pour préciser au compilateur que ce sont des membres de cette classe. La définition des méthodes de la classe Lampe se fait dans un fichier source Lampe.cpp

#include "Lampe.h" void Lampe::allumer() { this->estAllumee = true; } void Lampe::eteindre() { this->estAllumee = false; }

Création d’objets

Instances de classe

Chaque instance possède un exemplaire propre de chaque attribut défini par la classe Un objet possède sa propre existence et un état (c.-à-d. les valeurs de ses attributs) qui lui est propre (indépendant des autres objets) Le code des méthodes est commun à toutes les instances (il n’existe qu’une seule fois en mémoire)

Le mot-clé this (auto pointeur), utilisé dans le code des méthodes d’une classe, fait référence à l’instance (l’objet lui-même) sur laquelle est invoquée la méthode

Création d’objets

Constructeur

L’ instanciation d’un objet est réalisée par l’ appel à un constructeur (une méthode qui porte le même nom que la classe) D’un point de vue système , le constructeur a pour but d’ allouer un nouvel objet en mémoire

D’un point de vue fonctionnel , le constructeur a pour but de créer un nouvel objet dans un état « utilisable »

Il doit donc simplement contenir les instructions d’ initialisation (des attributs) de l’objet

class Lampe { ... public: // Constructeur Lampe( int puissance); }; // Définition du constructeur Lampe::Lampe( int puissance) { this->puissance = puissance; this->estAllumee = false; }

Création d’objets

Règles du constructeur

Un constructeur est chargé d’ initialiser un objet de la classe. Il est appelé automatiquement au moment de la création de l’objet. Un constructeur est une méthode qui porte toujours le même nom que la classe. Il existe quelques contraintes : Il peut avoir des paramètres, et des valeurs par défaut. Il peut y avoir plusieurs constructeurs pour une même classe (surcharge). Il n’a jamais de type de retour. Il existe implicitement un constructeur par défaut : Son rôle est de créer une instance non initialisée quand aucun autre constructeur fourni n’est applicable. Il est sans paramètre. Il est fortement recommandé d’écrire soi-même le constructeur par défaut

Création d’objets

Tableaux d’objets

Il est possible de conserver et de manipuler des objets Lampes dans un tableau.

// Un tableau de 10 objets Lampe Lampe guirlande[10]; // Le constructeur par défaut est appelé 10 fois (pour chaque objet Lampe du tableau)! for ( int i = 0; i < 10; i++) { guirlande[i].allumer(); sleep(1); // attendre 1 s guirlande[i].eteindre(); }

Destruction d’objets

Destructeur

Le destructeur est la méthode membre appelée automatiquement lorsqu’une instance (objet) de classe cesse d’exister en mémoire : Son rôle est de libérer toutes les ressources qui ont été acquises depuis la construction (typiquement libérer la mémoire qui a été allouée dynamiquement par cet objet). Un destructeur est une méthode qui porte toujours le même nom que la classe, précédé de "~". Il existe quelques contraintes : Il ne possède aucun paramètre. Il n’y a qu’un et un seul destructeur. Il n’a jamais de type de retour.

Les objets constants

Les objets constants

Les règles suivantes s’appliquent aux objets constants :

On déclare un objet constant avec le modificateur const

On ne pourra pas modifier l’ état (ses attributs) d’un objet constant

On ne peut appliquer que des méthodes constantes sur un objet constant

Une méthode constante est tout simplement une méthode qui ne modifie aucun des attributs de l’objet

class Lampe { ... public: int getPuissance() const ; }; // Une méthode constante int Lampe::getPuissance() const { return this->puissance; } const Lampe l3(100); // l3 est un objet constant int p = l3.getPuissance(); // autorisé : getPuissance() est déclarée const l3.allumer(); // interdit : allumer() n’ est pas const (car elle modifie l’ attribut estAllumee)

Attributs et méthodes

Accès aux membres (visibilité)

En POO, il est possible de préciser le type d’accès aux membres ( attributs et méthodes ) d’un objet.

Cette opération s’effectue et s’applique au niveau des classes :

  • Accès public : les membres publics peuvent être utilisés dans et par n’importe quelle partie du programme.
  • Accès private : les membres privés d’une classe ne sont accessibles que par les objets de cette classe et non par ceux d’une autre classe. Seule une méthode membre de la même classe peut utiliser ce membre ; il est invisible de l’extérieur de la classe.
  • Accès protected : comme les membres privés, mais ils peuvent en plus être utilisés par une classe dérivée (notion d’ héritage ).