Je vous l'ai dit dès le tout début du premier chapitre du cours, et je ne vous ai pas menti :
le langage C n'est pas limité. Vous pouvez faire tout ce que vous voulez avec, des fenêtres (avec GTK+ par exemple), de la 2D (avec SDL), de la 3D (avec OpenGL)... Le tout est de trouver la librairie qui propose ce dont vous avez besoin.
Alors du coup on peut se demander... pourquoi un gars s'est levé un jour et a dit : "Aujourd'hui je vais inventer un nouveau langage" ?
Le type en question s'appelle
Bjarne Stroustrup, il est danois et il est l'auteur d'un des langages de programmation les plus utilisés dans le monde aujourd'hui. Et il n'est pas fou : il n'a pas fait ça pour le plaisir (enfin j'espère) !
Le C a des avantages
Maintenant que vous programmez en C, vous avez pu vous rendre compte certainement que celui-ci a un grand nombre d'avantages :
- C'est un langage très rapide car assez bas niveau. Si on a des calculs importants à faire, un programme écrit en C les exécute en moins de temps qu'il n'en faut pour dire "ouf" (sauf si vous avez codé avec les pieds bien entendu
)
- C'est un langage portable. Le même code source peut être compilé aussi bien sous Windows, Linux, Mac OS et ne dépend d'aucun type de processeur particulier.
- Le langage est libre, ce qui permet à n'importe qui de (très) motivé d'écrire son propre compilateur. Cela explique donc la grande diversité des compilateurs aujourd'hui : GCC, mingw, MS Visual C++, Borland, et j'en passe.
Bref, autant de raisons valables d'aimer le C
Mais le C a aussi des défauts !
Si le C n'avait que des avantages, ce serait le langage parfait. Or, les programmeurs savent très bien que
le langage parfait n'existe pas. Tout langage a des défauts.
Donc le C n'est pas parfait. Que lui reproche-t-on ?
Déjà, certains concepts de programmation plus récents manquent :
- Les références, qui permettent d'éviter quelques prises de tête avec les pointeurs.
- Les exceptions, une technique puissante pour gérer les erreurs de ses programmes.
- ... et il y en a d'autres mais ça ne sert à rien de rentrer dans le détail de suite.
Mais le
vrai problème du langage C est qu'il n'est pas prévu pour faire de la
Programmation Orientée Objet, une technique de programmation particulièrement efficace apparue récemment.
Non, ce n'est pas une insulte.
Bon d'accord, il faut avouer que quand quelqu'un nous dit : "Je fais de la programmation orientée objet", on a tendance à s'éloigner un peu de peur que ça soit contagieux
Beaucoup de gens parlent ou ont entendu parler de Programmation Orientée Objet (que j'abrègerai maintenant tout le temps POO, ça va plus vite

). Mais concrètement, la POO c'est quoi ?
La POO est un concept de programmation, une façon de programmer. Ce n'est pas un langage.
Le C++, lui, est un langage. Il a été principalement inventé pour faciliter l'utilisation de la POO.
La POO n'est pas utilisée qu'en C++. De nombreux langages, encore plus récents, exploitent au maximum les concepts de la POO. Je pense en particulier à Java et Python, mais il y en a bien d'autres.
Par ailleurs, il est possible de faire de la POO en C, mais c'est assez compliqué.
Bon, à quoi ça sert la POO ?
C'est une façon de programmer qui permet de
rendre un code source plus facilement réutilisable, plus facile à modifier.
Comment ça ? Les programmes écrits en C sont difficiles à modifier ?
Ah non, je n'ai pas dit ça

Simplement, quand le programme devient gros, il faut avouer qu'on finit assez facilement par se perdre dans toutes les fonctions qu'on a créées. La POO nous permet de mieux organiser notre code source, de lui donner une certaine
logique. Les avantages de cette meilleure organisation sont nombreux, vous les découvrirez progressivement.
En fait, c'est un peu comme les pointeurs : vous n'en avez pas forcément compris l'intérêt tout de suite, mais je suis sûr que maintenant vous ne pouvez plus vous en passer !
L'idée à la base de la POO
En C, vos programmes ne sont au final qu'un ensemble de fonctions accessibles de partout qui manipulent des tonnes de pointeurs. Même si vous pouvez faire plusieurs fichiers, cela ne suffit pas toujours à organiser correctement votre programme.
Par exemple,
vous ne pouvez pas avoir deux fonctions nommées ajouter dans votre programme. Même si ces fonctions sont dans deux fichiers différents !
Ainsi, si vous avez une fonction
ajouter permettant d'ajouter des heures et ailleurs une autre fonction
ajouter permettant d'ajouter des euros, le langage C sera perdu et vous dira qu'il ne sait pas quelle fonction appeler quand vous demandez la fonction
ajouter.
Imaginez que toutes les fonctions d'un programme en C nagent dans une seule et même grande piscine. C'est ce qu'on appelle
l'espace global. Les fonctions évoluent toutes dans un même espace.
Imaginez maintenant si on séparait ces fonctions. On place la fonction
ajouter spécialisée dans les heures dans une piscine, et on place la fonction
ajouter spécialisée dans les euros
dans une autre piscine. Du coup, vous n'avez plus qu'à vous rendre devant la piscine qui vous intéresse (par exemple la piscine spécialisée dans les heures) et vous pouvez alors appeler la fonction
ajouter. Il n'y a pas de risque de conflit cette fois, parce que les fonctions sont confinées dans des espaces différents ! On ne les mélange plus
En C++, les fonctions sont compartimentées dans des espaces différents
Dans le schéma ci-dessus, j'ai créé 2 espaces pour séparer les fonctions
ajouter. J'ai nommé ces espaces pour les identifier. On a maintenant :
- L'espace spécialisé dans la gestion du temps,
- L'espace spécialisé dans la gestion de l'argent.
Allons un peu plus loin
Est-ce qu'on ne peut mettre qu'une seule fonction par espace ?
Non, bien sûr ! Le but, c'est de regrouper les fonctions de notre programme par "thème".
Prenons par exemple le thème
Temps.
On peut ajouter des heures, mais on pourrait aussi créer la fonction qui retire des heures, une autre qui donne l'heure actuelle, etc.
De même pour le thème
Argent. Disons que ça c'est l'argent que vous avez.
Vous pouvez aussi retirer de l'argent, créer la fonction qui vous donne la quantité d'argent que vous avez sur votre compte en banque, etc.
Ajoutons ces fonctions dans notre schéma :
Regroupez vos fonctions par thème !
Vous noterez qu'il y a 2 fonctions
retirer : là encore ça ne pose pas de problème car elles sont dans 2 espaces différents.
Eh bien, croyez-moi si vous voulez, mais si vous avez compris ce que je viens d'expliquer à l'instant, vous avez déjà une bonne petite idée de ce qu'est la
programmation orientée objet !
Maintenant je vous rassure : ça c'est vraiment
la base de la base. La POO implique pas mal de règles, et l'organisation est parfois un peu déroutante. On va parler de POO dans pratiquement toute cette partie du cours, vous aurez donc le temps de vous rendre compte à quel point le sujet est riche