0 évaluation 0% ont trouvé ce document utile (0 vote) 40 vues 20 pages CH1-POO-c
La programmation orientée objet permet de manipuler des objets, comme le type string, qui est utilisé pour stocker du texte en mémoire. Contrairement aux types simples, string est un objet qui masque la complexité de la gestion du texte, en utilisant des tableaux de caractères et des méthodes pour effectuer des opérations. Ce document explique comment créer et utiliser des objets string, ainsi que les méthodes associées pour manipuler les chaînes de caractères.
Titre et description améliorés par l'IA
Copyright
© © All Rights Reserved
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
Accéder aux éléments précédents Accéder aux éléments suivants
Enregistrer CH1-POO-c++ pour plus tard
Liidée de la programmation orientée objet, c'est
de manipuler dans son code source des
éléments que |'on appelle des "objets". Dans un
programme, cela peut étre une fenétre ou
encore un bouton, et il s'agit d'un mélange de
plusieurs variables et fonctions.
Nous n'allons pas voir tout de suite comment faire
pour créer des objets, en revanche nous allons
apprendre a en utiliser un.
Comprenez d'abord le
fonctionnementde string
Dans ce chapitre, nous allons nous pencher sur le cas
de string
J'ai déja utilisé le type string , ce n'est pas
une nouveauté pour moi ! C'est le type qui
permet de stocker du texte en mémoire, c'est
cela ?
Oui! Mais le type string est différent des autres.
des types qui stockent des données tres
int , bool , float , double sont
simples.
Cen'est paslecasde string quiesten
fait... un objet !Je vais vous montrer comment fonctionne string
"4 l'intérieur du cube". Préparez-vous a d'horribles
vérités.
Horrible vérité n° 1: Pour un ordinateur, les
lettres n'existent pas...
L'avantage des objets est de masquer la complexité du
code a l'utilisateur. Et justement, les choses sont
compliquées parce que, a la base, un ordinateur ne
sait pas gérer du texte ! Oui, l'ordinateur n'est
véritablement qu'une grosse machine a calculer
dénuée de sentiments. Il ne reconnait que des
nombres.
Mais alors, si l'ordinateur ne peut manipuler que
des nombres, comment se fait-il qu'il puisse
afficher du texte a I'écran ?
Grace a une astuce que l'on utilise depuis longtemps !
La table ASCII (American Standard Code
for Information Interchange) est un tableau qui
sert de convention pour convertir des nombres
en lettres.
Eee
64 @ 96 ‘
65 A 97 a65
66
67
68
69
70
71
72
73
74
75
76
77
Sars
64 @ 96 :
A 97 a
B 98 b
c 99 c
D 100 d
E 101 e
F 102 f
G 103 g
H 104 h
| 105 i
J 106 J
K 107 k
E 108 |
M 109 m
Comme vous le voyez :
la lettre « A » majuscule correspond au
nombre 65 ;
la lettre « a » minuscule correspond au
nombre 97 ;
e etc.Tous les caractéres utilisés en anglais figurent
dans cette table.
C'est pour cela que les caractéres accentués
ne sont, de base, pas utilisables en C++: ils
n'apparaissent pas dans la table ASCII.
Alors, a chaque fois que l'ordinateur voit le
nombre 65 , il prend cela pour la lettre A ?
Non, !'ordinateur ne traduit un nombre en lettre que si
on le lui demande. En pratique, on se base sur le type
de la variable pour savoir si le nombre stocké est
véritablement un nombre ou, en réalité, une lettre :
¢ Sion utilise le type int pour stocker le
nombre 65 , l'ordinateur considérera que c'est un
nombre.
En revanche, si on utilise le type char pour
stocker le nombre 65 , l'ordinateur se dira "C'est
la lettre A’.
Letype char (abréviation de
"character", caractére, en francais) est prévu
pour stocker un caractere. Il stocke donc un
nombre qui est interprété comme un caractére.
Un char ne peut stocker qu'un seul
caractere ? Comment fait-on alors pour stocker
une phrase entiére ?Eh bien, la non plus, ce n'est pas simple ! C'est un
autre probleme que nous allons voir...
Horrible vérité n° 2 : Les textes sont des
tableaux de char
Puisque char ne peut stocker qu'une seule lettre,
les programmeurs ont eu l'idée de créer... un tableau
de char ! Mais ca, vous le saviez déja
Les tableaux permettant de retrouver céte a
céte en mémoire plusieurs variables d'un méme
type, ils sont le moyen idéal de stocker du
texte
On parle aussi de "chaines de caractéres”, vous
comprenez maintenant pourquoi.
Ainsi, il suffit de :
¢ déclarer un tableau de char pour pouvoir
stocker du texte (environ 100 caractéres) :
cpp
© ouutiliserun vector sion veut changer la
longueur du texte :
cpp
Nahe os
Le texte n'est donc en fait qu'un assemblage de
lettres, stocké en mémoire dans un tableau :Chaque case correspond aun char . Tous ces
char mis c6te a céte forment du texte.
En théorie, on pourrait se débrouiller avec des
tableaux statiques ou dynamiques de char a
chaque fois que l'on veut manipuler du texte.
Mais ce serait fastidieux. C'est pour ca que les
concepteurs du langage ont décidé de cacher
tout ces mécanismes dans une boite fermée,
un objet.
Gerer du texte n'est pas vraiment simple. Il faut :
e créer untableaude char dont chaque case
correspond a un caractére ;
* prévoir une taille suffisante pour stocker le texte
que l'on souhaite sinon cela plante..
Bref, cela fait beaucoup de choses auxquelles il faut
penser.
C'est la qu'intervient la programmation orientée objet :
un développeur place le tout dans un cube facile a
utiliser ott il suffit d'appuyer sur des boutons. Ce cube,
c'est l'objet string
Créez un objet string v
Vous le savez déja, la création d'un objet ressemble
beaucoup a la création d'une variable classique
comme int ou doubleStas
ae) to
int main()
4
Resta Cec r an
Pour pouvoir utiliser des objets de type string
dans le code, il est nécessaire d'inclure l'en-téte de la
bibliotheque string . C'est ce que j'ai fait ala
deuxieme ligne.
Intéressons-nous maintenant a la ligne ol je cree un
objet de type string
Done... on crée un objet de la méme maniére
qu'on crée une variable ?
ll y a plusieurs fagons de créer un objet, celle que vous
venez de voir est la plus simple. Et, oui, c'est
exactement comme si on avait créé une variable !
Mais... comment on fait pour différencier les
objets des variables ?C'est bien tout le probleme : variables et objets se
ressemblent dans le code. Pour éviter la confusion, il y
a des conventions. La plus célébre d'entre elles est la
suivante :
* le type des variables commence par
une minuscule (ex. : int) ;
* le type des objets commence par
une majuscule (ex. : Voiture).
Je sais ce que vous allez me dire :
string ne commence pas par une majuscule
alors que c'est un objet!
|| faut croire que les créateurs de string ne
respectaient pas cette convention. Mais
rassurez-vous, maintenant la plupart des gens
mettent une majuscule au début de leurs objets
(moi y compris, ce ne sera donc pas la foire
dans la suite de ce cours).
En réalité, lorsque vous serez habitué a penser
avec des objets, vous verrez qu'une telle
distinction n'est pas nécessaire. Il y a bien
d'autres maniéres de distinguer les types des
variables des types des objets. La premiére
étant la fagon dont les objets sont utilisés.
Initialisez la chaine lors de la déclaration
Pour initialiser notre objet au moment de la déclaration
(et donc lui donner une valeur), il y a plusieurs
possibilités.La plus courante consiste a ouvrir des parentheses
comme nous I'avons fait jusqu'ici :
cpp
Fran P uO)
{
rest Mua Gl Ceol a a
C'est la technique classique que l'on connait déja, et
qui s'applique aussi bien aux variables qu'aux objets.
On dit que l'on construit l'objet.
Et comme pour les variables, il faut noter que
l'on peut aussi initialiser avec le signe égal :
string maChaine = “Bonjour |";
Ona maintenant créé un objet maChaine qui
contient la chaine "Bonjour !".
On peut l'afficher comme n'importe quelle chaine de
caractéres avec un cout
Tara O}
if
Siar Mur ear Pes a
cout << maChaine << endl;Affectez une valeur a la chaine apres
déclaration
Maintenant que notre objet est créé, ne nous arrétons
pas la. Changeons le contenu de la chaine aprés sa
déclaration :
cpp
main()
rap Uy ear Ol an ae
cout << maChaine << endl;
maChaine = "Bien le bonjour !";
celia maChaine << endl;
daa
Bonjour !
Bien le bonj
Pour changer le contenu d'une chaine apres sa
déclaration, on doit obligatoirement u
symbole =
Tout cela, vous savez déja le faire. Ce que je veux
vous montrer ici, c'est comment la magie de la POO
opére :1. Vous, l'utilisateur, vous avez appuyé sur un
bouton pour dire : Je veux maintenant que la
chaine a l'intérieur devienne "Bien le bonjour !".
N
. Alintérieur de l'objet, des mécanismes (des
fonctions) se sont activés lorsque vous avez
réalisé l'opération. Ces fonctions ont vérifié,
entre autres, s'il y avait de la place pour stocker
la chaine dans le tableau de char
o
. Elles ont vu que non. Elles ont alors créé un
nouveau tableaude char , suffisamment long
cette fois, pour stocker la nouvelle chaine.
4. Et, tant qu'a faire, elles ont détruit l'ancien
tableau qui ne servait plus a rien, puis les
nouvelles lettres ont été copiées.
Mais permettez-moi de vous parler franchement : ce
qui s'est passé a |'intérieur de l'objet, on s'en fiche
royalement ! C'est bien la tout l'intérét de la POO:
l'utilisateur n'a pas besoin de comprendre comment
cela fonctionne a l'intérieur. On se moque de savoir
que le texte est stocké dans un tableau de char
(ouest-ce un vector 7). objet est en quelque
sorte intelligent et gére tous les cas. Nous, nous nous
contentons de utiliser.
Assemblez des chaines de
caractéres
Imaginez que l'on souhaite concaténer (assembler)
deux chaines. En théorie, c'est compliqué a faire car il
faut fusionner deux tableaux de char . En pratique,
la POO nous évite de nous soucier du fonctionnement
interne :int main()
x
Sree acai alts a
ree tear alec areas
Paty auc P ee
ine ee PL a chaine2;
cout ue BU) endl;
Bonjour !Comment allez-vous ?
A Laffichage, il manque une espace au milieu. On n'a
qu'a changer la ligne de la concaténation :
chaine3 = chaine1 bial Pty
Résultat :
Bonjour ! Comment allez-vous ?
C'est trés simple a utiliser alors que "derriére", ca
s'active pour assembler les deux tableaux de char
Comparez des chaines de
caractéres
<
On peut comparer des chaines entre elles a l'aide des
symboles == (identique) ou != (différent) dans
un ift main()
repay arya
if (chainel == chaine2)
=f
(ol eMC TE fa ask oe
aaa
es chain lhe aaah
A lintérieur de l'objet, la comparaison se fait caractére
par caractére entre les deux tableaux de char (a
l'aide d'une boucle qui compare chacune des lettres).
Nous, nous n'avons pas a nous soucier de tout cela :
nous demandons a l'objet chaine1_ s'il est identique
a chaine2_ ; il fait des calculs et nous répond trés
simplement par un oui ou un non.
Dans la suite du cours, nous allons apprendre
comment faire pour écrire de tels objets, ot toutes les
opérations complexes sont cachées. Vous pourrez
alors utiliser ces boites dans d'autres parties de votre
programme, sans avoir a vous soucier ni méme a vous
rappeler de leur fonctionnementFaites des opérations sur les
string
Comme tout objet qui se respecte, le type string
propose un nombre important d'autres fonctionnalités
qui permettent de faire tout ce dont ona
besoin. Voyons les principales.
Retenez le vocabulaire de base en POO:
“Attribut" et "méthode"
Je vous avais dit qu'un objet était constitué de
variables et de fonctions.
En fait, le vocabulaire est un peu différent avec
les objets :
1. Les variables contenues a I'intérieur des
objets sont appelées “attributs". On parle
aussi de variables membres.
2. Les fonctions sont appelées
"méthodes". On parle aussi de fonctions
membres.
Imaginez que chaque méthode (fonction) que propose
un objet corresponde a un bouton différent sur la face
avant du cube. Pour appeler la méthode d'un objet, on
utilise une écriture que vous avez déja vue :
[Link]() . On sépare le nom de |'objet et
le nom de la méthode par un point.Cela signifie :
"Sur l'objet indiqué, j'appelle cette méthode".
Traduction : "Sur le cube indiqué, j'appuie sur ce
bouton pour déclencher une action".
En théorie, on peut aussi accéder aux variables
membres (les attributs) de l'objet de la méme
maniére. Cependant, en POO, il y a une régle
trés importante : l'utilisateur ne doit pas pouvoir
accéder aux variables membres, mais
seulement aux fonctions membres (les
méthodes). On en reparlera plus en détail juste
apres ce chapitre.
Je vous avais dit qu'il était facile de distinguer
les objets des variables car on les utilisait
différemment. Voici donc un premier exemple.
La notation avec le point pour appeler une
méthode de l'objet est propre aux objets. On ne
peut pas faire ga avec les variables.
Utilisez les méthodes du type string
Laméthode size()
Vous le savez déja, la méthode size() permet de
connaitre la longueur de la chaine actuellement
stockée dans l'objet de type stringCette méthode ne prend aucun paramétre et renvoie
la longueur de la chaine. Vous venez de découvrir qu'il
s'agit d'une régle générale, mais nous I'avions déja fait
avant ; il faut appeler la méthode de la maniére
suivante :
PETES
Essayons cela dans un code complet qui affiche la
longueur d'une chaine de caractéres
cpp
aur)
Erte uy ME euC FO Cnt a
cout << "Longueur de la chaine
Cee eee. OH
Laméthode erase()
Cette méthode trés simple supprime tout le contenu
de la chaine :
cpp
chaine("Bonjour !");
[Link]();
CT eee eC eth a Corre tr
foeBelg Bhal Matos hah
Comme on pouvait s'y attendre, la chaine ne contient
plus rien.
Notez que c'est équivalent a chaine = "";
Laméthode substr()
Cette méthode permet d'extraire une partie de la
chaine stockée dans une string
substr_ signifie "substring", soit "sous-
chaine" en frangais.
Tenez, on va regarder son prototype, vous allez voir
que c'est intéressant :
cpp
dem Esbs ina (met ems
co
Cette méthode renvoie donc un objet de type
string
Ce sera la sous-chaine obtenue apres découpage.
Elle prend deux paramétres ou, plus exactement, un
parametre obligatoire et un paramétre facultatif. En
effet, num posséde une valeur par défaut (_ npos
), ce qui fait que le second paramétre ne doit pas
obligatoirement étre renseignéVoyons plus en détail ce qui se cache sous ces
paramétres
1. index permet d'indiquer a partir de quel
caractére on doit couper (ce doit étre un numéro
de caractére)
2. num permet d'indiquer le nombre de
caractéres que l'on prend. Par défaut, la valeur
est npos_ , ce qui revient a prendre tous les
caractéres qui restent. Si vous indiquez 2, la
méthode ne renverra que 2 caractéres.
Allez, un exemple sera plus parlant, je crois :
t main()
rae ty ma FU Gatun ota
re eee ESR ree) eat
On a demandé a couper a partir du troisieme
caractere, soit la lettre "j" (étant donné que la premiere
lettre correspond au caractére n° 0).
On a volontairement omis le second paramétre
facultatif, ce qui fait que substr() arenvoyé tous
les caractéres restants jusqu'a la fin de la chaine.
Essayons de renseigner le parameétre facultatif pour
exclure le point d'exclamation, par exempleLo OF
rae tae ) << endl;
Bingo ! On a demandé a prendre 4 caractéres en
partant du caractére n° 3, ce qui fait qu'on a récupéré
“jour’.
ll existe une autre maniére de faire pour
accéder a un seul caractére. On utilise les
crochets [ ] comme pour les tableaux.
cpp
string chaine("Bonjour !");
cout << chaine[3] << endl;
En résumé v
« La programmation orientée objet est une fagon
de concevoir son code. On considére qu'on
manipule des objets.
« Les objets sont parfois complexes a I'intérieur,
mais leur utilisation nous est volontairement
simplifiée. C'est un des avantages de la
programmation orientée objet.
« Un objet est constitué d'attributs et de
méthodes, c'est-a-dire de variables et de
fonctions membres.¢ La programmation orientée objet est une fagon
de concevoir son code. On considere qu'on
manipule des objets.
¢ Les objets sont parfois complexes a l'intérieur,
mais leur utilisation nous est volontairement
simplifiée. C'est un des avantages de la
programmation orientée objet.
Un objet est constitué d'attributs et de
méthodes, c'est-a-dire de variables et de
fonctions membres.
¢ On appelle les méthodes de ces objets pour les
modifier ou obtenir des informations
La gestion du texte en mémoire est en fait
complexe. Pour nous simplifier les choses, le
langage C++ nous propose le type string
Grace a lui, nous pouvons créer des objets de
type string et manipuler du texte sans avoir a
nous soucier du fonctionnement de la mémoire
Vous venez de découvrir le monde de la
programmation orientée objet, et je pense que tout
nest pas encore clair pour vous. Nous allons sans
tarder créer votre premiére classe, rien de mieux que
de pratiquer pour comprenare. Vous &tes prét ?
Vous aimerez peut-être aussi