CoursDocuments

Programmation Orienté Objet en C++(science1)

MODULE : POO Enseignant : Mohamed Kharrat Année universitaire 2016/2017 

Séance 1 

  • Le langage C++ est un des langages les plus célèbres au monde. Très utilisé, notamment dans le secteur des jeux vidéo qui apprécie ses performances et ses possibilités, le C++ est désormais incontournable pour les développeurs. 
  • Le C++ est le descendant du langage C. Ces deux langages, bien que semblables au premier abord, sont néanmoins différents. Le C++ propose de nouvelles fonctionnalités, comme la programmation orientée objet (POO). Elles en font un langage très puissant qui permet de programmer avec une approche différente du langage C. 

Présentation générale 

  • Le C++ a été conçu par Bjarne Stroustrup en 1982 aux ATT Bell Laboratories. L’idée était d’ajouter au C des possibilités sur l’orienté objet et de palier aux inconvénients du C. 

Le minimum vital sur les entrées sorties 

  • Bien sûr, C++ dispose des routines offertes par la bibliothèque standard du C ANSI <stdio.h>. 
  • Mais il comporte aussi des possibilités d’entrées sorties propres. Le but du slide suivant n’est pas de les présenter complètement mais de présenter le minimum sur les entrées sorties utilisées pour commencer à programmer en C++. 

Ecrire sur la sortie standard 

  • Le premier programme C++ à écrire est le suivant. #include <iostream.h> main () { cout << “ bonjour le monde ! ” << endl ; } 
  • <iostream.h> est la bibliothèque du C++ permettant de faire des entrées sorties. 
  • Pour écrire, sur la sortie standard on utilise le “ stream ” de la sortie standard cout. 
  • L’opérateur << prend un stream en premier opérande et une chaîne de caractères en deuxième opérande et retourne le premier opérande après avoir écrit la chaîne de caractères sur le stream. 
  • On peut chaîner l’utilisation de << pour écrire plusieurs chaînes de caractères à la suite les unes des autres. 
  • endl signifie le saut de ligne. 
  • Ainsi, la sortie de ce premier programme C++ est : bonjour le monde ! 

Spécificités de C++ surlangage de C 

  • C++ dispose d’un certain nombre de spécificités par rapport a C qui ne sont pas axées sur l’orienté objet : 
  • les commentaires 
  • l’emplacement libre des déclarations de variables 
  • les arguments par défaut 
  • la surdéfinition de fonction (surcharge) 
  • les opérateurs new et delete (Opérateurs de gestion de mémoire dynamique) 
  • les fonctions en ligne 
  • E/S texte sans « codes de format » ( %d, %f, . . . ) 
  • Type de donnée booléen (bool) 

Commentaire 

  • Pour écrire des commentaires dans un programme, le programmeur dispose toujours des commentaires C avec /* et */ et aussi de commentaires en fin de ligne avec // cout << « bonjour » ; // ceci est une formule de politesse 
  • On peut mêler les deux techniques : 

/* ceci est un commentaire en C // donc ce double slash ne sert a rien */ ou encore // ceci est un commentaire en C++ /* donc ce slash etoile ne sert à rien */ mais pas : // ceci est un commentaire en C++ /* donc ce slash étoile ne sert à rien et cela donne une erreur de compilation si l’étoile slash n’est pas sur la même ligne */ 

Emplacement des déclarations de variables 

  • L’emplacement des déclarations est libre en C++ ; le programmeur n’est pas obligé de les 
  • mettre au début d’une fonction. Par contre, on ne peut utiliser la variable déclarée que dans les instructions du bloc où est effectuée la déclaration et postérieures à la déclaration. L’avantage de cette spécificité du C++ est de pouvoir déclarer une variable juste au moment où l’on en a besoin et cela clarifie le programme. 

void f() { … i = 4 ; // incorrect … int i ; // i est déclaré ici … i = 4 ; // correct … {float f ; // f est déclarée ici … f = 4.0 ; // correct … } // fin de la portée de f … f = 4.0 ; // incorrect … i = 5 ; // correct … } // fin de la portee de i 

Booléens 

  • En plus des types définis par l’utilisateur (ou classes, une des notions fondamentales de la programmation orientée objets) C++ possède quelques types qui manquaient à C, notamment le type booléen et les types références. 
  • Le type bool (pour booléen) comporte deux valeurs : false et true. Contrairement à C : 
  • Le résultat d’une opération logique (&&, ||, etc.) est de type booléen 
  • Il est déconseillé de prendre les entiers pour des booléens et réciproquement. 
  • Conséquence pratique : n’écrivez pas « if (x) … » au lieu de « if (x != 0) … » 

Les variables 

  • Ce sont des éléments qui se retrouvent dans tous les langages de programmation. 
  • Tous les programmes C++ exploitent des fonctions. 
  • Le but des fonctions est de découper son programme en petits éléments réutilisables, un peu comme des briques. On peut les assembler d’une certaine manière pour créer un mur, ou d’une autre manière pour faire un gratte-ciel. Une fois que les briques sont créées, le programmeur « n’a plus qu’à » les assembler. 

Créer et utiliser une fonction 

La fonction main(). C’est le point d’entrée de tous les programmes C++, c’est par là que tout commence. #include <iostream> using namespace std; 

int main() //Début de la fonction main() et donc du programme { 

cout << « Bonjour tout le monde ! » << endl; return 0; } //Fin de la fonction main() et donc du programme 

  • Le programme commence réellement à la ligne 4 et se termine à la ligne 8 après l’accolade fermante. C’est-à-dire que tout se déroule dans une seule et unique fonction. Il n’y a qu’une seule portion de code qui est exécutée dans l’ordre, sans jamais sauter ailleurs. • On peut écrire d’autres fonctions et donc avoir un programme découpé en plusieurs modules indépendants. Mais pourquoi? 
  • Mettre l’ensemble du code dans la fonction main() est tout à fait possible. !!!!! 
  • Imaginons que nous voulions créer un jeu vidéo 3D. Le code source va nécessiter plusieurs dizaines de milliers de lignes ! Si l’on garde tout dans une seule fonction, il va être très difficile de s’y retrouver. Il serait certainement plus simple d’avoir dans un coin un morceau de code qui fait bouger un personnage. 

>Découper son programme en fonctions permet de s’organiser (Surtout s’il s’agit de plusieurs développeurs)

>On peut réutiliser plusieurs fois la même fonction et c’est une des raisons principales d’en écrire. 

  • Chaque programme est conçu dans un but précis. On pourrait aussi citer les jeux vidéo, par exemple, qui sont prévus pour s’amuser. 
  • Un jeu tel que God of War 3 nécessite une équipe complète de professionnels qui ont passé des journées, des semaines, des mois et souvent même des années entières à la conception du jeu. 

Le C++ : langage de haut ou de bas niveau ? 

  • Le C++ est un langage très populaire. Des sites comme langpop.com tiennent à jour un classement des langages les plus couramment utilisés, le C, le Java et le C++ occupent régulièrement le haut du classement. 
  • Faut-il choisir un langage parce qu’il est populaire ? 
  • C’est un langage dit « de bas niveau ». 
  • Si l’immense majorité des jeux sont développés en C++, c’est parce qu’il s’agit du langage qui allie le mieux puissance et rapidité. 

Résumé des forces du C++ 

  • Il fait partie des langages de programmation les plus utilisés sur la planète. 
  • Il est rapide, très rapide même, ce qui en fait un langage de choix pour les applications critiques qui ont besoin de performances. 
  • Il est portable 
  • Il existe de nombreuses bibliothèques pour le C++. 
  • Il est multi-paradigmes 

Petit aperçu du C++ 

#include <iostream> 

using namespace std; 

int main() { 

cout << « Hello world! » << endl; return 0; } 

Les outils nécessaires au programmeur 

  • Un éditeur pour écrire le code source du programme en C++. En théorie un logiciel comme le Bloc-Notes sous Windows ou sous Linux fait l’affaire. 
  • Un compilateur pour transformer (« compiler ») votre code source en binaire (Programme qui permet de traduire votre langage). 
  • Un débugger (« Débogueur » ou « Débugueur » en français) pour vous aider à traquer les erreurs dans votre programme. 
  • Sous Linux en particulier, bon nombre de programmeurs préfèrent utiliser ces 3 programmes séparément 
  • Sous Windows, on utilise un programme qui combine éditeur de texte, compilateur et débugger, appelés IDE (ou en français « EDI » pour « Environnement de Développement Intégré »). 

Il existe plusieurs environnements de développement pour les projets en C++ 

  • Un projet est constitué de plusieurs fichiers de code source : des fichiers .cpp, .h, les images du programme, etc. 
  • Le rôle d’un IDE est de rassembler tous ces fichiers d’un projet au sein d’une même interface. 

Code::Blocks (Windows, Mac OS, Linux) 

  • Code::Blocks est un IDE libre et gratuit, disponible pour Windows, Mac et Linux

Visual Studio(Windows seulement) 

  • C’est l’IDE de Microsoft. 
  • Il est à la base payant, mais Microsoft en a sorti une version gratuite intitulée Visual C++ Express. 

Xcode (Mac OS) 

  • Sur Mac OS X, vous pouvez aussi utiliser XCode, généralement fourni sur le CD d’installation de Mac OS X. C’est un IDE très apprécié par tous ceux qui font de la programmation sur Mac. Il fonctionne sous Mac OS X uniquement. 

Les programmes console 

  • Les programmes en console sont plus fréquents sous Linux que sous Windows et Mac OS X. Ils sont constitués de simples textes qui s’affichent à l’écran, le plus souvent en blanc sur fond noir (figure suivante). 
  • Ces programmes fonctionnent au clavier. La souris n’est pas utilisée. Ils s’exécutent généralement linéairement : les messages s’affichent au fur et à mesure, de haut en bas. 

Explications sur ce premier code source 

  • Lorsqu’un IDE crée un nouveau projet, il génère un fichier main.cpp contenant ce code : 

#include <iostream> using namespace std; 

int main()

cout << « Hello world! » << endl; return 0; }• Vous retrouverez les 3 premières lignes (include, using namespace et int main) dans quasiment tous vos programmes C++. Vous pouvez considérer que tous vos programmes 

commenceront par ces lignes. 

#include <iostream> 

  • C’est ce qu’on appelle une directive de préprocesseur. Son rôle est de « charger » des fonctionnalités du C++ pour que nous puissions effectuer certaines actions. Ici, on charge le fichier iostream, ce qui nous permet d’utiliser une bibliothèque… d’affichage de messages à l’écran dans une console, on pourra aussi récupérer ce que saisit l’utilisateur au clavier. 

using namespace 

  • Certaines fonctions ont le même nom. 
  • Pour éviter ce genre de problèmes, nous créons des namespaces (espaces de noms), qui sont des sortes de dossiers à noms. 
  • La ligne using namespace std; indique que vous allez utiliser l’espace de noms std dans la suite de votre fichier de code. 
  • Cet espace de noms est un des plus connus car il correspond à la bibliothèque standard (std), une bibliothèque livrée par défaut avec le langage C++. 
  • Pour accéder aux éléments d’un namespace, il faut utiliser l’opérateur de porté ‘::’ (A ne pas confondre avec l’appel à une méthode statique). 

int main() 

  • Chaque fonction a un rôle et peut appeler d’autres fonctions pour effectuer certaines actions. 
  • Tous les programmes possèdent une fonction dénommée « main ». C’est donc la fonction principale. 
  • Les accolades déterminent le début et la fin de la fonction. 
  • Peut-on écrire tout notre programme dans la fonction main ? 

cout 

  • C’est la première action qui sera exécutée par l’ordinateur (les lignes que nous avons vues précédemment ne sont en fait que des préparatifs pour le programme). 

cout << « Hello world! » << endl; 

  • Le rôle de cout est d’afficher un message à l’écran. C’est ce qu’on appelle une instruction. Tous les programmes sont constitués d’instructions. 

; & endl 

  • Chaque instruction se termine par un point-virgule ! C’est d’ailleurs ce qui vous permet de différencier les instructions du reste. Si vous oubliez le point-virgule, la compilation ne fonctionnera pas et votre programme ne pourra pas être créé ! 
  • Il y a 3 éléments sur cette ligne : 

cout : commande l’affichage d’un message à l’écran ; « Hello world! » : indique le message à afficher ; endl : crée un retour à la ligne dans la console. 

  • Il est possible de combiner plusieurs messages en une instruction. Par exemple : cout << « Bonjour tout le monde ! » << endl << « Comment allez-vous ? » << endl; 

Return return 0; 

  • Ce type d’instruction clôt généralement les fonctions. En fait, la plupart des fonctions renvoient une valeur (un nombre par exemple). Ici, la fonction main renvoie 0 pour indiquer que tout s’est bien passé (toute valeur différente de 0 aurait indiqué un problème). 

#include <iostream> // Inclut la bibliothèque iostream (affichage de texte) 

using namespace std; // Indique quel espace de noms on va utiliser 

/*Fonction principale « main » Tous les programmes commencent par la fonction main */ int main() { 

cout << « Hello world! » << endl; // Affiche un message return 0; // Termine la fonction main et donc le programme } 

Mettre son code en forme 

#include <iostream> using namespace std; int main() 

{cout << « Hello world! »<< endl; return 0; } 

En résumé 

  • On distingue deux types de programmes : les programmes graphiques (GUI) et les programmes console. 
  • Un programme possède toujours une fonction main() : c’est son point de démarrage. 
  • La directive cout permet d’afficher du texte dans une console. 
  • On peut ajouter des commentaires dans son code source pour expliquer son fonctionnement. Ils prennent la forme // Commentaire ou /* Commentaire */. 

Les noms de variables 

  • En C++, il y a quelques règles qui régissent les différents noms autorisés ou interdits. 
  • les noms de variables sont constitués de lettres, de chiffres et du tiret-bas _ uniquement ; 
  • le premier caractère doit être une lettre (majuscule ou minuscule) ; 
  • on ne peut pas utiliser d’accents ; 
  • on ne peut pas utiliser d’espaces dans le nom. 
  • Les noms ageZero, nom_du_zero ou encoreNOMBRE_ZEROS sont tous des noms valides. AgeZéro et _nomzero, en revanche, ne le sont pas. 
  • C++ fait la différence entre les majuscules et les minuscules. En termes techniques, on dit que C++ est sensible à la casse. Donc, nomZero, nomzero, NOMZERO et NomZeRo sont tous des noms de variables différents. 
  • Choisissez comme nom de variable ageUtilisateur plutôt que maVar ou variable1. 

Les types de variables 

Nom du type Ce qu’il peut contenir 

bool Une valeur parmi deux possibles, vrai (true) ou faux 

(false). 

char Un caractère. 

short int, int, long int Un nombre entier. 

unsigned int Un nombre entier positif ou nul. 

Float, Double, long double Un nombre à virgule. 

string Une chaîne de caractères, c’est-à-dire un mot ou une 

phrase. 

  • Certains caractères disposent d’une représentation conventionnelle utilisant le caractère « \ » notamment 
  • ’\n’ qui désigne un saut de ligne 
  • ’\’’ représente le caractère ’ et 
  • ’\ »’ désigne le caractère « . 
  • On peut également utiliser la notation hexadécimale (comme dans ’\x41’) ou octale (comme dans ’\07’). 

Déclarer une variable 

TYPE NOM (VALEUR): OuTYPE NOM= VALEUR; 

Exemple 

#include <iostream> using namespace std; 

int main() { 

int ageUtilisateur(16); int nombreAmis(432); //Le nombre d’amis de l’utilisateur 

double pi(3.14159); 

bool estMonAmi(true); //Cet utilisateur est-il mon ami ? 

char lettre(‘a’); 

return 0; } 

  • int a(2),b(4),c(-1); //On déclare trois cases mémoires nommées a, b et c et qui contiennent respectivement les valeurs 2, 4 et -1 
  • string prenom(« Albert »), nom(« Einstein »); //On déclare deux cases pouvant contenir des chaînes de caractères 

Résumé chronologique des déclarations 

  • le programme demande au système d’exploitation de lui fournir un peu de mémoire ; 
  • l’OS regarde s’il en a encore à disposition et indique au programme quel tiroir utiliser ; 
  • le programme écrit la valeur 16 dans la case mémoire ; 
  • il recommence ensuite pour les quatre autres variables ; 
  • en arrivant à la dernière ligne, le programme vide ses tiroirs et les rend à l’ordinateur. 

Le cas des strings 

Les chaînes de caractères sont un petit peu plus complexes à déclarer. l faut, en effet, indiquer au compilateur que nous souhaitons utiliser des strings. Sans cela, il n’inclurait pas les outils nécessaires à leur gestion. La ligne à ajouter est #include <string>. 

Voici ce que cela donne. 

#include <iostream> #include <string> using namespace std; 

int main() { 

string nomUtilisateur(« Albert Einstein »); return 0;

Déclarer sans initialiser 

  • Il suffit d’indiquer le type et le nom de la variable sans spécifier de valeur. 

Type NOM; 

cout : Afficher la valeur d’une variable 

  • À la place du texte à afficher, on met simplement le nom de la variable. 

cout << ageUtilisateur; 

Et on peut même afficher le contenu de plusieurs variables à la fois. 

#include <iostream> #include <string> using namespace std; 

int main() { 

int qiUtilisateur(150); string nomUtilisateur(« Albert Einstein »); 

cout << « Vous vous appelez  » << nomUtilisateur <<  » et votre QI vaut  » << qiUtilisateur << endl; return 0; } 

Les références 

  • En C++, on peut coller plusieurs étiquettes à une case mémoire. 
  • On obtient alors un deuxième moyen d’accéder à la même case mémoire. Un petit peu comme si on donnait un surnom à une variable en plus de son nom normal. On parle parfois d’alias, mais le mot correct en C++ est référence
  • On a une seule case mémoire mais deux étiquettes qui lui sont accrochées. 
  • Au niveau du code, on utilise une esperluette (&) pour déclarer une référence sur une variable. int ageUtilisateur(16); //Déclaration d’une variable. 

int& maVariable(ageUtilisateur); //Déclaration d’une référence nommée maVariable qui est accrochée à la variable ageUtilisateur 

La référence doit impérativement être du même type que la variable à laquelle elle est accrochée ! Un int& ne peut faire référence qu’à un int, de même qu’un string& ne peut être associé qu’à une variable de type string. 

On peut afficher l’âge de l’utilisateur comme d’habitude et via une référence. 

#include <iostream> using namespace std; 

int main() { 

int ageUtilisateur(18); //Une variable pour contenir l’âge de l’utilisateur 

int& maReference(ageUtilisateur); //Et une référence sur la variable ‘ageUtilisateur’ 

//On peut utiliser à partir d’ici //’ageUtilisateur’ ou ‘maReference’ indistinctement //Puisque ce sont deux étiquettes de la même case en mémoire 

cout << « Vous avez  » << ageUtilisateur <<  » ans. (via variable) » << endl; //On affiche, de la manière habituelle 

cout << « Vous avez  » << maReference <<  » ans. (via reference) » << endl; //Et on affiche en utilisant la référence 

return 0; }Résultat: Vous avez 18 ans. (via variable) Vous avez 18 ans. (via reference) 

  • Une fois qu’elle a été déclarée, on peut manipuler la référence comme si on manipulait la variable elle-même. Il n’y a aucune différence entre les deux. 

A quoi est-ce que cela peut bien servir ? 

  • Imaginez que l’on ait besoin de cette variable dans deux parties très différentes du programme, des parties créées par différents programmeurs. Dans une des parties, un des programmeurs va s’occuper de la déclaration de la variable alors que l’autre programmeur va juste l’afficher. Ce deuxième programmeur aura juste besoin d’un accès à la variable et un alias sera donc suffisant. 

 

télécharger gratuitement programmation orienté objet en c++

Articles similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Bouton retour en haut de la page

Adblock détecté

S'il vous plaît envisager de nous soutenir en désactivant votre bloqueur de publicité