La programmation orientée objet (POO) en C++ Première partie

Documents pareils
Chapitre 2. Classes et objets

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Généralités sur le Langage Java et éléments syntaxiques.

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Programmation Orientée Objet en C#

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Cours Langage C/C++ Programmation modulaire

Programmation par les Objets en Java

et Programmation Objet

Premiers Pas en Programmation Objet : les Classes et les Objets

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

as Architecture des Systèmes d Information

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Héritage presque multiple en Java (1/2)

Exercices INF5171 : série #3 (Automne 2012)

Initiation à JAVA et à la programmation objet.

I. Introduction aux fonctions : les fonctions standards

LE LANGAGE C++ ENAC 1997 A. DANCEL

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Programmer en JAVA. par Tama

Cours 1: Java et les objets

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

2 Grad Info Soir Langage C++ Juin Projet BANQUE

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Diagramme de classes

THEGREENBOW FIREWALL DISTRIBUE TGB::BOB! Pro. Spécifications techniques

Programme Compte bancaire (code)

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation par composants (1/3) Programmation par composants (2/3)

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

WEA Un Gérant d'objets Persistants pour des environnements distribués

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Langage Java. Classe de première SI

Plan Pédagogique du cours

Java - la plateforme

Une introduction à Java

Chapitre 1 : Introduction aux bases de données

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

1.6- Génération de nombres aléatoires

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

4. Groupement d objets

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Connexion à une base de données. Connexion à une base de données. Connexion à une base de données Développement d'une application

Programmation Orientée Objet application au langage Java Version Novembre 2007

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Création d objet imbriqué sous PowerShell.

Recherche dans un tableau

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

GOL-502 Industrie de services. Travaux Pratique / Devoir #7

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

INITIATION AU LANGAGE JAVA

TP1. Outils Java Eléments de correction

Introduction à la programmation concurrente

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

1. Installation d'un serveur d'application JBoss:

Petite définition : Présentation :

Application web de gestion de comptes en banques

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

BASES DE DONNEES ORIENTEES OBJETS BDA10.1

Programmation Objet - Cours II

Cours: Administration d'une Base de Données

Notion de base de données

TP1 : Initiation à Java et Eclipse

Environnements de développement (intégrés)

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

RMI le langage Java XII-1 JMF

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

4D Server et les licences : fonctionnement et environnement

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Annexe : La Programmation Informatique

Conception de circuits numériques et architecture des ordinateurs

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

CPR Informatique. (poste 3159 ou 3164) Septembre 2002

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Projet de Veille Technologique

Les structures. Chapitre 3

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

OASIS Date de publication

Introduction à NetCDF

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Le langage C. Séance n 4

Java DataBaseConnectivity

Java c est quoi? Java pourquoi?

Tp 1 correction. Structures de données (IF2)

Cours 14 Les fichiers

Introduction à l héritage en C++

GOL502 Industries de services

Transcription:

La programmation orientée objet (POO) en C++ Première partie Thierry Vaira BTS SN Option IR v1.1-12 septembre 2017

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 Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 2 / 23

POO, Classes et Objets Qu'est ce que la Programmation Orientée Objet? La programmation objet consiste à dénir des objets logiciels et à les faire interagir entre eux. On parle d'échange de messages Un objet est créé à partir d'un modèle ( moule ) appelé classe. On parle d'instanciation Un objet posséde une identité qui permet de distinguer un objet d'un autre objet. On parle de son nom, son adresse mémoire Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 3 / 23

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. Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 4 / 23

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) On parle d'encapsulation Propriétés + Comportement La notion de propriété est matérialisée par un attribut 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 Comparable à une fonction de l'objet, une action pouvant être eectuée sur l'objet Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 5 / 23

POO, Classes et Objets Qu'est ce qu'une classe? Une classe dénit un type qui peut être vue comme un moule ou une fabrique d'objets et qui comporte : La déclaration des attributs La déclaration et la dénition des méthodes La fabrication d'un objet s'appelle l'instanciation L'objet est appelé instance de classe et possède le type que dénit sa classe Remarque : La classe n'existe qu'à la compilation, l'objet n'existe qu'à l'exécution Instanciation Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 6 / 23

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 Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 7 / 23

Conception d'une classe Exemple d'une lampe Une lampe est caractérisée par : Sa puissance (une propriété un attribut) Le fait qu'elle soit allumée ou éteinte (un état un attribut) Au niveau comportement, les actions possibles sur une lampe sont donc : L'allumer (une méthode) L'éteindre (une autre méthode) Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 8 / 23

Conception d'une classe Déclaration d'une classe en C++ La déclaration de la classe Lampe se fait dans un chier d'en-tête (header ) Lampe.h class Lampe { private: // Attributs int puissance; bool estallumee; }; public: // Méthodes void allumer(); void eteindre(); Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 9 / 23

Conception d'une classe Dénition des méthodes d'une classe en C++ La dénition d'une classe revient à dénir 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énition des méthodes de la classe Lampe se fait dans un chier source Lampe.cpp #include "Lampe.h" void Lampe::allumer() { this->estallumee = true; } void Lampe::eteindre() { this->estallumee = false; } Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 10 / 23

Création d'objets Instances de classe Chaque instance possède un exemplaire propre de chaque attribut déni 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 Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 11 / 23

Création d'objets Instanciation d'un objet Instancier un objet revient à créer une variable d'un type classe. Une instance de classe est donc un objet. Lampe l1; // instancie un objet l1 de type Lampe l1.allumer(); // appel la méthode allumer() à partir de l'objet l1 Lampe *l2 = new Lampe(); // alloue dynamiquement une instance de type Lampe // La variable l2 n'est pas un objet mais un pointeur sur un objet Lampe! l2->eteindre(); // appel la méthode eteindre() à partir de l'objet l2 (*l2).eteindre(); // cette écriture est possible : je pointe sur l'objet puis j' appelle sa méthode delete l2; On accède aux membres comme pour une structure : avec l'opérateur d'accès. ou l'opérateur d'indirection -> si on manipule une adresse. Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 12 / 23

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; } Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 13 / 23

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 Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 14 / 23

Création d'objets Constructeur par défaut class Lampe {... public: Lampe(); // Déclaration du constructeur par défaut... }; // Définition du constructeur par défaut Lampe::Lampe() { this->puissance = 50; this->estallumee = false; } // Exemples : Lampe l1;// appel du constructeur par défaut : initialise puissance à 50 Lampe l2(75);// appel du constructeur : initialise puissance à 75 Lampe *l3 = new Lampe();// appel du constructeur par défaut : initialise puissance à 50 Lampe *l4 = new Lampe(100);// appel du constructeur : initialise puissance à 100 Lampe *l5;// pas d'appel du constructeur : aucun objet créé (pointeur non initialisé) Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 15 / 23

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(); } Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 16 / 23

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 lors de 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. Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 17 / 23

Destruction d'objets class Lampe {... public: ~Lampe(); }; // Destructeur Lampe::~Lampe() // Destructeur { // rien à faire pour l'instant } // Exemple : Lampe *l2 = new Lampe(100); delete l2; // appel automatique du destructeur Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 18 / 23

Les objets constants Les objets constants Les règles suivantes s'appliquent aux objets constants : On déclare un objet constant avec le modicateur const On ne pourra pas modier 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 modie 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) Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 19 / 23

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'eectue 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). Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 20 / 23

Attributs et méthodes Controle d'accès aux membres Lampe l1; l1.estallumee = true; // erreur d'accès : 'bool Lampe::estAllumee' is private l1.allumer(); // pas d'erreur : 'void Lampe::allumer()' is public Une méthode peut évidemment être privée : c'est alors une méthode interne à l'objet (qui réalise un comportement à usage interne). Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 21 / 23

Attributs et méthodes Règle d'encapsulation L'encapsulation est l'idée de protéger les variables contenues dans un objet et de ne proposer que des méthodes pour les manipuler. En respectant ce principe, tous les attributs d'une classe seront donc privés (private). On permettra un accès extérieur en lecture et/ou écriture via des méthodes appelées accesseurs et mutateurs. L'objet est ainsi vu de l'extérieur comme une boîte noire possédant certaines propriétés et ayant un comportement spécié et sécurisé. C'est le comportement (ses méthodes publiques) d'un objet qui modiera son état (c'est-à-dire la valeur de ses attributs privés). L'ensemble des méthodes publiques forme l'interface. Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 22 / 23

Attributs et méthodes Les accesseurs et mutateurs On ajoute souvent (mais pas obligatoirement) des méthodes publiques pour établir un accès contrôlé aux variables privées de la classe : get() (getter ou accesseur) : permet l'accès en lecture set() (setter ou mutateur ou manipulateur) : permet l'accès en écriture class Lampe {... public: int getpuissance() const; // un accesseur void setpuissance(int puissance); // un mutateur }; int Lampe::getPuissance() const { return puissance; } void Lampe::setPuissance(int puissance) { this->puissance = puissance; } Thierry Vaira (BTS SN-IR Avignon) La POO en C++ (Part. I) v1.1-12 septembre 2017 23 / 23