0% ont trouvé ce document utile (0 vote)
40 vues20 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.

Transféré par

stcoulibaly026
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
40 vues20 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.

Transféré par

stcoulibaly026
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
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 a 65 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 double Stas 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 if t 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 fonctionnement Faites 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 string Cette 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 foe Belg 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 exemple Lo 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