Chapitre II. Classes : Concepts de base

Documents pareils
Introduction au langage C

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Chapitre 2. Classes et objets

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

Introduction à l héritage en C++

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

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

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

Quelques éléments de compilation en C et makefiles

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

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Cours 1: Java et les objets

Java Licence Professionnelle CISII,

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

UE Programmation Impérative Licence 2ème Année

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

et Programmation Objet

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

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

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

as Architecture des Systèmes d Information

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

TD/TP PAC - Programmation n 3

Cours d initiation à la programmation en C++ Johann Cuenin

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

TP1 : Initiation à Java et Eclipse

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

Programmation avec des objets : Cours 7. Menu du jour

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

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


Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Cours d Algorithmique et de Langage C v 3.0

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

Programmation C++ (débutant)/instructions for, while et do...while

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

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

Rappels Entrées -Sorties

Programmer en JAVA. par Tama

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

TD/TP PAC - Programmation n 3

TD3: tableaux avancées, première classe et chaînes

Introduction à C++ et à wxwidgets

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

Programmation en C/C++

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Algorithmique et Programmation, IMA

Claude Delannoy. 3 e édition C++

I. Introduction aux fonctions : les fonctions standards

INFO-F-105 Language de programmation I Séance VI

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

Génie Logiciel avec Ada. 4 février 2013

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

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

TP : Gestion d une image au format PGM

Langage Java. Classe de première SI

Département Automatisation et Informatisation Année Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers

Une introduction à Java

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

Initiation à JAVA et à la programmation objet.

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Java c est quoi? Java pourquoi?

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

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

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

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

2. Comprendre les définitions de classes

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

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

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

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Cours 14 Les fichiers

Classes et Objets en Ocaml.

Java DataBaseConnectivity

Cours Langage C/C++ Programmation modulaire

Flux de données Lecture/Ecriture Fichiers

1. Base de données SQLite

RMI le langage Java XII-1 JMF

Utilisation d objets : String et ArrayList

OS Réseaux et Programmation Système - C5

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

Plan Pédagogique du cours

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

1 Lecture de fichiers

Chapitre 10. Les interfaces Comparable et Comparator 1

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

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Transcription:

Chapitre II Classes : Concepts de base 1 Introduction 2 Syntaxe 3 Encapsulation 4 5 Destructeur POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 28 Introduction Chapitre II Classes : Concepts de base 1 Introduction 2 Syntaxe 3 Encapsulation 4 5 Destructeur POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 29

Classe Introduction Ensemble d objets ayant des propriétés communes Chaque objet d une classe (instance) a les mêmes attributs. Chaque objet peut avoir des valeurs différentes des attributs qui représentent l état de l objet. Tous les objets d une classe ont le même comportement : méthodes. On appelle membres d une classe les attributs et les méthodes de la classe. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 30 Classe Introduction Habituellement, en C++, on sépare l interface de la classe de son implantation. L interface (la déclaration) d une classe est écrite dans un fichier d entêtes.h. L implantation (la définition) (code des méthodes) est écrite dans un fichier.cpp. Il est conseillé de donner le même nom aux deux fichiers. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 31

Classe Introduction Une classe est formée de membres : attributs et méthodes. L interface d une classe doit donner les noms des membres... Pour les attributs, le type doit être donné Pour les méthodes, la signature doit être donnée L implantation d une classe doit donner le corps (code) des méthodes. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 32 Syntaxe Chapitre II Classes : Concepts de base 1 Introduction 2 Syntaxe 3 Encapsulation 4 5 Destructeur POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 33

Classe Syntaxe Syntaxe (Déclaration) class NomClasse typemembre nomattribut ; typeretour nommethode (typearg1 nomarg1, ); ; POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 34 Classe Syntaxe Exemple (fichier.h) #ifndef fichier_h #define fichier_h #include <string> class Fichier private: std::string m_nom; unsigned int m_taille; public: void afficher(); unsigned int taille(); std::string nom(); void renommer(std::string nn); void fixertaille(unsigned int nt); ; #endif POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 35

Classe Syntaxe Exemple (fichier.cpp) #include "fichier.h" #include <iostream> void Fichier::afficher() std::cout << m_nom << " ("; if (m_taille == 0) std::cout << "vide)"; else std::cout << taille() << " octets)"; unsigned int Fichier::taille() return m_taille; POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 36 Classe Syntaxe Exemple (fichier.cpp) std::string Fichier::nom() return m_nom; void Fichier::renommer(std::string nn) m_nom = nn; void Fichier::fixerTaille(unsigned int nt) m_taille = nt; POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 37

Classe Déclaration d instance Syntaxe Une fois définie, la classe peut être utilisée comme un type. Syntaxe (Déclaration) NomClasse NomDeLInstance ; NomClasse * NomDuPointeur ; Attention. Seul un pointeur (non initialisé) est déclaré. NomClasse & NomDeLaReference ; Attention. Obligation de fournir la variable référencée (sauf dans une signature). POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 38 Classe Accès aux membres Syntaxe Syntaxe (Accès à un attribut) NomDeLInstance.NomDeLAttribut NomDuPointeur ->NomDeLAttribut (*NomDuPointeur ).NomDeLAttribut NomDeLaReference.NomDeLAttribut (sous réserve de visibilité) Dans une méthode, on peut utiliser directement un nom d attribut pour désigner l attribut correspondant de l instance sur laquelle la méthode a été appelée... Ou utiliser le pointeur this qui repère l instance courante. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 39

Classe Accès aux membres Syntaxe Syntaxe (Appel à une méthode) NomDeLInstance.NomDeLaMethode (arguments ) NomDuPointeur ->NomDeLaMethode (arguments ) (*NomDuPointeur ).NomDeLaMethode (arguments ) NomDeLaReference.NomDeLaMethode (arguments ) (sous réserve de visibilité) Dans une méthode, on peut utiliser directement un nom de méthode pour appeler cette méthode sur l instance sur laquelle la méthode a été appelée.... Ou utiliser le pointeur this qui repère l instance courante. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 40 Classe Syntaxe Exemple #include "fichier.h" int main() Fichier f; f.renommer("exemple.txt"); f.fixertaille(2567); f.afficher(); return 0; POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 41

Encapsulation Chapitre II Classes : Concepts de base 1 Introduction 2 Syntaxe 3 Encapsulation 4 5 Destructeur POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 42 Encapsulation Encapsulation L encapsulation permet de «cacher» des membres d une classe afin que l interface de la classe ne dispose que des membres qui ont été choisis par le concepteur de la classe. L encapsulation facilite la mise au point, la réutilisation, et l évolution. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 43

Encapsulation Encapsulation En C++, l encapsulation permet de choisir parmi 3 niveaux de visibilité : private Le membre est visible dans toutes les méthodes de la classe et invisible ailleurs. protected Le membre est visible dans toutes les méthodes de la classe (ainsi que dans les méthodes des sous-classes), et invisible ailleurs. public Le membre est visible partout. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 44 Encapsulation Encapsulation Habituellement, tous les attributs d une classe sont déclarés private, et certaines méthodes sont déclarées public. Syntaxe (Visibilité) class NomClasse [private protected public]: typemembre nommembre ; ; ; Tous les membres qui sont déclarés après une étiquette de visibilité ont cette visibilité là.les membres qui sont déclarés avant la première étiquette de visibilité sont privés. Exemple m_nom et m_taille sont privés, les 5 méthodes sont publiques. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 45

Encapsulation Encapsulation Un attribut public peut être lu et modifié (comme une variable). Parfois, on veut montrer la valeur de l attribut sans autoriser la modification. Rendre l attribut privé, et fournir un accesseur (en lecture). Définition Un accesseur (ou accesseur en lecture) est une méthode qui retourne la valeur d un attribut (privé). Un mutateur (ou accesseur en écriture) est une méthode qui permet de modifier la valeur d un attribut (privé). Exemple Fichier::nom() est un accesseur, Fichier::fixerTaille() est un mutateur. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 46 Chapitre II Classes : Concepts de base 1 Introduction 2 Syntaxe 3 Encapsulation 4 Présentation Liste d initialisations par défaut et par recopie 5 Destructeur POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 47

Présentation Un constructeur est une méthode qui est appelée pour construire (initialiser) une instance d une classe. Intérêt Imposer l exécution d une méthode pour s assurer de l initialisation de l objet. Exemple Fichier f; f.renommer("exemple.txt"); f.afficher(); // f.m_taille n est pas initialisé. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 48 Présentation Un constructeur est une méthode qui a comme nom le nom de la classe et qui ne retourne rien ( qui retourne void). Un constructeur est souvent public. Une classe peut avoir plusieurs constructeurs (avec des signatures différentes). Dans ce cas, on choisit le constructeur à utiliser au moment de créer une instance. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 49

Présentation Syntaxe (s) class NomClasse // par défaut. NomClasse (); // avec paramètres. NomClasse (typearg1 nomarg1, ); // par recopie. NomClasse (NomClasse const & nomarg ); ; POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 50 Présentation Exemple (fichier.h) class Fichier public: Fichier(std::string nom, unsigned int taille); ; Exemple (fichier.cpp) Fichier::Fichier(string nom, unsigned int taille) m_nom = nom; m_taille = taille; POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 51

Liste d initialisations Liste d initialisations Habituellement, un constructeur d une classe se charge d initialiser les attributs de l instance en cours de construction. Ces initialisations peuvent être réalisées avant même l exécution de la première ligne de code de la méthode du constructeur. Exemple (fichier.cpp) Fichier::Fichier(string nom, unsigned int taille) :m_nom(nom), m_taille(taille) POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 52 Liste d initialisations Liste d initialisations La liste d initialisations est formée du caractère :, des attributs à initialiser séparés par des, chaque attribut étant suivi de la valeur d initialisation : Si l attribut est d un type primitif (unsigned int), syntaxe C++ d initialisation. Si l attribut est d un type classe (std::string) Initialisation explicite par appel à un constructeur les paramètres passés doivent correspondre à un constructeur de la classe. Si aucune initialisation n est donnée, le constructeur par défaut (sans argument) de l attribut est utilisé. Ici std::string dispose d un constructeur prenant comme paramètre une instance de std::string, c est ce constructeur qui est appelé. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 53

Liste d initialisations Différences entre : Liste d initialisations Fichier::Fichier(string nom, unsigned int taille) m_nom = nom; m_taille = taille; et Fichier::Fichier(string nom, unsigned int taille) :m_nom(nom), m_taille(taille) Dans le premier cas, le constructeur par défaut de string est utilisé, et construit une chaîne vide. Puis l opérateur d affectation = est utilisé et copie la valeur du paramètre nom dans l attribut m_nom. Dans le second cas, le constructeur de string prenant comme paramètre une string est appelé pour construire directement m_nom avec une copie de nom. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 54 Liste d initialisation Liste d initialisations Il est toujours préférable d utiliser une liste d initialisations : Séparer les initialisations du code du constructeur. Plus rapide. Parfois indispensable (attribut référence). Quand le code du constructeur est exécuté, les attributs sont déjà initialisés. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 55

par défaut et par recopie Si aucun constructeur n est déclaré dans une classe, elle dispose tout de même d un constructeur par défaut qui : Appelle le constructeur par défaut sur tous les attributs de types classes. Ne fait rien pour les attributs de types primitifs. Si (au moins) un constructeur a été déclaré dans une classe, le constructeur par défaut implicite n est plus disponible. Mais un constructeur par défaut peut être déclaré. Exemple // Fichier f; // Provoque une erreur Fichier f("exemple.txt", 2567); f.afficher(); POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 56 par recopie par défaut et par recopie Un constructeur par recopie permet d effectuer une copie d une instance pour créer une nouvelle instance. Il est utilisé dans les cas suivants : Exemple Créer une nouvelle variable comme copie d une variable existante. Fichier f2(f);... POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 57

par recopie par défaut et par recopie... Exemple Passer une copie d une variable comme paramètre à une fonction ou méthode. int Fichier::comparer(Fichier b) return ( b.m_taille > m_taille )? 2 : 1; if (f1.comparer(f2) == 1) Une copie de f2 est passée à comparer afin que d éventuelles modifications de b dans comparer ne modifient pas f2. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 58 par recopie par défaut et par recopie Toute classe dispose d un constructeur par recopie implicite qui : Appelle le constructeur par recopie sur tous les attributs de types classes. Copie la valeur des attributs de types primitifs. Il est possible de définir explicitement le constructeur par recopie. Attention lors de la déclaration d un constructeur par recopie Le constructeur par recopie ne prend pas comme paramètre une instance de la classe : Fichier(Fichier f); Mais une référence (constante) sur une instance de la classe : Fichier(Fichier const & f); POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 59

Destructeur Chapitre II Classes : Concepts de base 1 Introduction 2 Syntaxe 3 Encapsulation 4 5 Destructeur POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 60 Destructeur Destructeur Le destructeur est une méthode qui est appelée implicitement sur une instance, quand celle-ci cesse d exister. Intérêt Imposer l exécution d une méthode pour s assurer de la destruction de l objet. Fermer des fichiers qui ont été ouverts dans les méthodes de la classe. Fermer une connexion réseau. Libérer les allocations dynamiques. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 61

Destructeur Destructeur Un destructeur est une méthode qui a comme nom le caractère ~ suivi du nom de la classe, qui n a aucun paramètre et qui ne retourne rien ( qui retourne void). Un destructeur est habituellement public. Une classe ne peut avoir qu un seul destructeur. Le destructeur n est jamais appelé explicitement. Quand une instance est détruite, les objets qui composent cette instance sont détruits implicitement. Mais pas les objets qui sont pointés par un pointeur qui compose l instance À faire dans le destructeur. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 62 Destructeur Destructeur Exemple. Rajouter les identifiants (unsigned int) des 20 derniers utilisateurs ayant lu le fichier. Exemple (fichier.h) class Fichier private: unsigned int * m_utilisateurs; ; Exemple (fichier.cpp) Fichier::Fichier(string nom, unsigned int taille) :m_nom(nom),m_taille(taille), m_utilisateurs(new unsigned int[20]) for (int i=0; i<20; i++) m_utilisateurs[i]=0; POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 63

Destructeur Destructeur Problème Quand une instance de Fichier cesse d exister, le bloc de 20 entiers continue à être réservé. Il ne peut pas être détruit ailleurs (par un delete [](f.m_utilisateurs);) car l attribut est privé. On aimerait automatiser la destruction. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 64 Destructeur Destructeur Exemple (fichier.h) class Fichier public: ~Fichier(); ; Exemple (fichier.cpp) Fichier::~Fichier() delete []m_utilisateurs; De façon générale, tout ce qui est alloué dynamiquement dans la classe pour être stocké dans les attributs de la classe doit être libéré dans le destructeur. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 65

Destructeur par recopie et destructeur Exemple (main) Fichier f1(), f2(); f1.comparer(f2) L appel à comparer crée une copie de f2 (dans b). Le constructeur par recopie implicite est appelé. Il appelle le constructeur par recopie de la string m_nom, copie la valeur de l entier m_taille et copie la valeur du pointeur m_utilisateurs. Quand comparer se termine, le paramètre b est détruit, le destructeur est appelé (implicitement). Ce destructeur libère b.m_utilisateurs... qui était la zone d entiers utilisée par f2. Tout accès à f2.m_utilisateurs est incorrect. POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 66 Destructeur par recopie et destructeur Définir un constructeur par recopie... qui recopie les utilisateurs (et pas simplement un pointeur sur une zone). Exemple (fichier.h) class Fichier public: Fichier(Fichier const & f); ; Exemple (fichier.cpp) Fichier::Fichier(Fichier const & f) :m_nom(f.m_nom), m_taille(f.m_taille), m_utilisateurs(new unsigned int[20]) for (int i=0; i<20; i++) m_utilisateurs[i]=f.m_utilisateurs[i]; POO2 Licence 3 Informatique 2016-2017 Classes : Concepts de base 67