cours_2
Post on 12-Jul-2016
212 Views
Preview:
DESCRIPTION
TRANSCRIPT
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'uneclasse
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 constantesH. Afli, M1 C++, Université du Maine, 2012-2013
NOTION DE CLASSE
1/ Classe et typegé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 POOoutil 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 structureen C++ : les données membres
même comportementen 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
Réseau des objets
nom .
adresse .
--------------
........
........
numéro .titulaire .
solde .
---------------------donneTonSolde
dépose(uneSomme)retire(uneSomme)
afficheToi
1 •
2 •
3 •-------------
afficheToi
2025.54
une Chaineun CompteEnBanque
un Réel
un Caractère
L
é
o
un Caractère
un Caractère
…
une Chaine
732
un Entier
unePersonne
CLASSES/INSTANCES : EXEMPLE
numéro 8765 solde 5000titulaire Jean
.numéro 2345solde -3milliardstitulaire Tapie
Classe Compte
structure
numéro
solde
titulaire
comportement
donneTonSolde
dépose
retire
afficheToi
objet abstrait
(classe)
objets concrets
(instances de la classe)
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 comportementC++ : 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 fonctionmembre,
les données membres de l'objet receveurdu message sont accessibles par leur nom (sans référence explicite à l'objet receveurdu message)
les fonctions membres de la classe de l'objet receveur sont accessiblessans 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 constructeurde 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 cettestructure (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 membresappartiennent 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éaliserun type utilisateur encapsulant les données
généralement en POOles 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écessiteallocation et initialisation de mémoiregaranties
constructeurs et destructeur permettent au concepteur : d'orchestrer
initialisation et allocation (en définissant un ouplusieurs 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 initialiserou détruire des variables appartenant à une classequand 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 classele 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é automatiquementavant 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 constructeurau 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éfautpour éviter la prolifération des constructeurs
les constructeurs sont des fonctions membresspé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éesmembres
définir un destructeur pour libérer cesemplacements 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 seulementsa 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é inlinedans ce casla définition doit figurer aussi dans le fichier d'en-tê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 lignesoit à 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 fonctionsmembres vraiment triviales
Tenir compte des avertissements du compilateur qui refuse de développer unefonction
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 membrerepré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 (garantipar 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éfinieconstante 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
top related