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

Documents pareils
Chapitre 2. Classes et objets

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

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

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres 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

Programmation Orientée Objet

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

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

Initiation à JAVA et à la programmation objet.

Premiers Pas en Programmation Objet : les Classes et les Objets

et Programmation Objet

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

Plan Pédagogique du cours

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Chapitre VI- La validation de la composition.

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

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Cours de Programmation Impérative: Zones de mémoires et pointeurs

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

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

Diagramme de classes

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

as Architecture des Systèmes d Information

Java c est quoi? Java pourquoi?

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

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

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

Programmation par les Objets en Java

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

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Plan du cours Cours théoriques. 29 septembre 2014

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

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

Application web de gestion de comptes en banques

Traduction des Langages : Le Compilateur Micro Java

Cours de Génie Logiciel

Cours 1: Java et les objets

Programmer en JAVA. par Tama

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

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

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

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

LE LANGAGE C++ ENAC 1997 A. DANCEL

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

Programmation assembleur : aperçu

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct...

Structurer ses données : les tableaux. Introduction à la programmation

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

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

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

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

Une introduction à Java

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

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

2 Grad Info Soir Langage C++ Juin Projet BANQUE

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

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

GOL502 Industries de services

Le langage C. Séance n 4

UML et les Bases de Données

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)

Conception. Génie Logiciel. Renaud Marlet. LaBRI / INRIA (d'après A.-M. Hugues) màj 17/04/2007

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

UML (Diagramme de classes) Unified Modeling Language

TP1 : Initiation à Java et Eclipse

Bases de programmation. Cours 5. Structurer les données

Les diagrammes de modélisation

Cours Programmation Système

Chapitre 1 : Introduction aux bases de données

TD/TP PAC - Programmation n 3

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

Programmation Objet Java Correction

Programmation Orientée Objet en C#

alg - Classes, instances, objets [oo] Exercices résolus

Programmation MacOSX / ios

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

C++ - Classes, instances, objets [oo] Exercices résolus

Cours 14 Les fichiers

Claude Delannoy. 3 e édition C++

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

COMPARAISONDESLANGAGESC, C++, JAVA ET

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

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

Programmation en Java IUT GEII (MC-II1) 1

Chapitre 1 : La gestion dynamique de la mémoire

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

3. UML - Unified Modeling Language Diagrammes statiques

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

1 Définition d une classe en Java

Programmation Objet - Cours II

Programmation stochastique

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

INSTALLATION ET CONFIGURATION DE OPENLDAP

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 )

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Corrigés des premiers exercices sur les classes

Transcription:

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 des objets d'une classe Utilisation d'une classe Droit d'accès aux membres d'une classe Fonctions membres notions de constructeur/destructeur fonctions membres en ligne auto-référence fonctions constantes H. Afli, M1 C++, Université du Maine, 2012-2013

NOTION DE CLASSE 1/ Classe et type généralisation de la notion de TYPE utilisateur regrouper les données et le comportement autoriser l'encapsulation des données spécifier et réaliser des TDA 2/ Classe et POO outil de conception et de programmation modéliser le réel, abstraction organiser le code (modularité) factoriser ou réutiliser le code (héritage)

CLASSE ET OBJETS une classe décrit un ensemble d'objets ayant mêmes propriétés même structure en C++ : les données membres même comportement en C++ : les fonctions membres un élément d'un tel ensemble est appelé une instance de la classe ou un représentant de la classe ou un objet de la classe ou en C++ : une variable dont le type est le nom de la classe

OBJETS INFORMATIQUES un Entier 732 un CompteEnBanque unepersonne une Chaine un Caractère numéro. titulaire. solde. --------------------- donnetonsolde dépose(unesomme) retire(unesomme) affichetoi un Réel 2025.54 nom. adresse. --------------...... 1 2 3 ------------- affichetoi une Chaine L un Caractère é un Caractère o Réseau des objets

CLASSES/INSTANCES : EXEMPLE objet abstrait (classe) Classe Compte structure numéro solde titulaire comportement donnetonsolde dépose retire affichetoi objets concrets (instances de la classe) numéro 8765 solde 5000 titulaire Jean. numéro 2345 solde -3milliards titulaire Tapie uncompte unautrecompte

CLASSES/INSTANCES tout objet est instance d'une classe la classe spécifie la structure de l'objet et son comportement le nom des variables d'état (les champs) C++ : données membres le texte des procédures définissant le comportement C++ : fonctions membres l'objet spécifie les valeurs des variables d'état (les attributs, le contenu des champs)

PROGRAMMATION OBJETS 3 moments spécification d'une classe étape de modélisation point de vue du concepteur de la classe C++ : déclaration de la classe dans un fichier. h codage des méthodes d'une classe étape de réalisation point de vue du programmeur de la classe C++ : définition des méthodes de la classe utilisation d'une classe étape de création d'instances de la classe et leur activation point de vue de l'utilisateur de la classe, du client

SPÉCIFICATION D'UNE CLASSE (DÉCLARATION) déclaration de toutes les fonctions membres (public ou private) données membres (généralement : private) interface de la classe : la partie publique de la déclaration d'une classe une classe passe un contrat avec les autres classes : elle s'engage à fournir tous les services publiés dans son interface

EN PRATIQUE par défaut : un membre est privé en général on place les déclarations de classe dans un fichier d'en-tête (.h) des membre publiques de la classe : au début de la déclaration de la classe des membres privés de la classe : à la fin (et préfixées par un soulignement) Remarque : ceci est un style de programmation il est conseillé de l'utiliser mais ce n'est pas obligatoire

PROGRAMMATION OBJETS 3 moments spécification d'une classe codage des méthodes d'une classe étape de réalisation point de vue du programmeur de la classe C++ : définition des méthodes de la classe utilisation d'une classe

CODAGE DES FONCTIONS MEMBRES D'UNE CLASSE (DÉFINITION) définir les fonctions membres généralement à l'extérieur de la définition de la classe dans un fichier.cpp préfixer le nom de la fonction membre par le nom de la classe suivi de l'opérateur de portée ::

NOM DES MEMBRES D'UNE CLASSE au sein de la définition d'une fonction membre, les données membres de l'objet receveur du message sont accessibles par leur nom (sans référence explicite à l'objet receveur du message) les fonctions membres de la classe de l'objet receveur sont accessibles sans utiliser le nom de la classe et l'opérateur de portée

PROGRAMMATION OBJETS 3 moments spécification d'une classe codage des méthodes d'une classe utilisation d'une classe étape de création d'instances de la classe et leur activation point de vue de l'utilisateur de la classe, du client

CRÉATION D'INSTANCES ET ANIMATION DU MODÈLE la fonction cliente (utilisatrice) de la classe crée des instances de la classe : en C++ en déclarant une variable de type le nom de la classe initialise l'état de ces instances (la valeur des données membres) dans ex1 : appel à la fonction membre initialiser en C++ : automatiquement par appel à un constructeur de la classe (Cf. ex 2) envoie des messages aux instances créées et initialisées pour modifier leur état obtenir des informations les faire agir

INVERSION PAR RAPPORT AU C : UN EXEMPLE en C une pile est définie comme une structure : le contenu de la pile (tableau/liste) le sommet de la pile (index ou ptr) ensuite on définit des fonctions pour manipuler cette structure (initialiser, empiler, dépiler, sommet) en C++ : la classe Pile est définie comme étant à la fois une structure (contenu, sommet) un comportement (initialiser, empiler...) Les fonctions membres appartiennent au type pile, sont invoquées en envoyant un message à un objet de type pile

CLASSE ET ACCÈS AUX MEMBRES une classe permet de réaliser un type utilisateur encapsulant les données généralement en POO les données (privées) ne sont accessibles de l'extérieur de l'objet que par les méthodes de la classe (publiques) en C++ donnée (resp. fonction) membre publique : peut être accédée (resp. invoquée) dans n'importe quelle fonction privée : peut être accédée (resp. invoquée) dans des fonctions membres (ou amies) de la classe où elle est déclarée

PLAN Classes et objets en C++ Spécification d'une classe Codage du comportement des objets d'une classe Utilisation d'une classe Inversion par rapport au C : un exemple Accès membres d'une classe Compléments sur les fonctions membres notions de constructeur/destructeur fonctions membres en ligne auto-référence fonctions constantes

CONSTRUCTEURS ET DESTRUCTEURS (PRINCIPE) type utilisateur sûr nécessite allocation et initialisation de mémoire garanties constructeurs et destructeur permettent au concepteur : d'orchestrer initialisation et allocation (en définissant un ou plusieurs constructeur(s)) libération (en définissant un destructeur) à l'utilisateur de ne pas s'en préoccuper : le compilateur génère automatiquement des appels aux constructeurs et au destructeur pour initialiser ou détruire des variables appartenant à une classe quand elles doivent l'être

CONSTRUCTEURS ET DESTRUCTEURS (EN C++) constructeurs fonctions membres publiques (en général) identificateur : nom de la classe aucun type de retour (pas même void) appelé automatiquement à chaque création d'objet destructeur fonction membre publique identificateur : nom de la classe précédé de tilde ~ ni argument ni de valeur de retour appelé automatiquement à chaque destruction d'objet

INVOCATION AUTOMATIQUE dans tous les cas où l'on définit un objet de la classe le compilateur génère automatiquement un appel au constructeur lors de la déclaration d'un objet non externe lors de la création d'un objet automatique (pile) quand un objet est créé dynamiquement (tas) (new appelle automatiquement un constructeur) le destructeur est appelé automatiquement avant la libération de la mémoire allouée à l'objet pour les objets automatiques : à la sortie du bloc ou de la fonction pour les objets dynamiques (créé par new) : lorsque l'opérateur delete est invoqué, il appelle le destructeur

RÔLES DU CONSTRUCTEUR EXPLICITE 1/ initialisation des données membres avec des valeurs passées en argument au constructeur au choix : dans le corps du constructeur par la liste d'initialisation 2/ allocation dynamique de mémoire pour des données membres (cas où les données membres sont dynamiques) 3/ construction des objets membres (cas où les données membres sont d'un type utilisateur class )

PROPRIÉTÉS DES CONSTRUCTEURS comme toutes les fonctions membres, les constructeurs peuvent être surchargés pour autoriser plusieurs façons d'initialiser un objet posséder des arguments par défaut pour éviter la prolifération des constructeurs les constructeurs sont des fonctions membres spéciales invoquées automatiquement par le compilateur pas en envoyant un message à l'objet

CONSTRUCTEURS PAR DÉFAUT constructeur par défaut : constructeur sans argument à partir du moment où une classe a défini un constructeur, il n'est plus possible de créer un objet sans fournir les arguments requis par son constructeur explicite (sauf si la classe a défini un constructeur sans argument)

DESTRUCTEUR rôle : libère la mémoire allouée pour l'objet règle : quand on définit un constructeur qui alloue de la mémoire dynamique dans le tas pour les données membres définir un destructeur pour libérer ces emplacements dans le tas plus généralement la responsabilité d'un destructeur est de détruire les ressources allouées lors de la durée de vie d'un objet (pas uniquement lors de sa construction, un objet peut adopter un pointeur)

PLAN Classes et objets en C++ Spécification d'une classe Codage du comportement des objets d'une classe Utilisation d'une classe Inversion par rapport au C : un exemple Accès membres d'une classe Compléments sur les fonctions membres notions de constructeur/destructeur fonctions membres en ligne auto-référence fonctions constantes

FONCTIONS MEMBRES EN LIGNE (DÉVELOPPABLES, "INLINE") Deux façons de définir des fonctions membres en ligne : écriture 1 : la définition de la fonction membre (pas seulement sa déclaration) est à l'intérieur de la définition de la classe écriture 2 : la définition de la fonction membre est extérieure à la déclaration de la classe mais est précédée du mot clé inline dans ce cas la définition doit figurer aussi dans le fichier d'entête

FONCTIONS MEMBRES EN LIGNE (2) écriture 1 : plus rapide (en cours, TD) confusion spécification (déclaration) et réalisation (définition) écriture 2 : plus long à écrire permet de séparer l'interface d'une classe de sa réalisation conseil : on place les fct en ligne soit à la fin du fichier d'en-tête soit dans un autre fichier d'en-tête qui est inclus à la fin du fichier de déclaration de la classe

UTILISATION DES FONCTIONS INLINE (ref : Meyers p. 128-132) Limiter les déclarations inline aux fonctions membres vraiment triviales Tenir compte des avertissements du compilateur qui refuse de développer une fonction Utiliser la règle de 80-20 : utilisez la directive inline pour les 20 % du code sur lesquels le programme passe les 80 % de son temps. Définir inline généralement les constructeurs souvent les destructeurs

AUTO-RÉFÉRENCE (THIS) le mot-clé "this" dans la définition d'une fonction membre représente un pointeur sur l'objet qui invoque la fonction membre this est un pointeur constant (pseudo-variable) on peut le consulter, pas le modifier l'objet pointé par this peut être modifié mais this ne peut l'être utilisation de this inutile (ringard) : pour accéder aux membres d'une classe indispensable : pour écrire des fonctions membres qui manipulent des pointeurs

FONCTIONS MEMBRES CONSTANTES une fonction membre constante ne modifie pas les données membres de l'objet qui l'invoque (garanti par le compilateur) dans une fonction constante this est un pointeur constant (comme d'hab) mais sur un objet constant seules les fonctions membres constantes peuvent être invoquées sur des objets constants une fonction déclarée constante doit être définie constante et réciproquement on peut surcharger une fonction membre constant par une fonction membre non constante et réciproquement distinguer : fonction constante fonction dont un argument est constant

AUTOÉVALUATION