PROGRAMMATION ORIENTEE OBJET AVANCEE EN C++
 

Ce document s'adresse aux personnes qui connaissent déjà le C++ et qui désirent approfondir leurs connaissances. Des cours de tous niveaux sur ce langage et des références de livres peuvent être trouvés dans la rubrique de ce site. Je tiens à remercier ici Krishna, avec qui j'ai préparé ce cours à l'ISIMA, et l'OBC qui est à l'origine de nombreux documents que nous utilisons comme support. Le document proposé ici n'est qu'un simple complément à ces cours, dans la mesure où il présente simplement d'une manière différente des notions avancées de C++ et de programmation orientée objet.

Dans une première partie, des exemples simples sont proposés pour rappeler des concepts fondamentaux, mais également pour préciser déjà certains mécanismes plus avancés. Nous abordons notamment la surcharge d'opérateurs et les difficultés liées à l'héritage et au polymorphisme dynamique. Ensuite, nous détaillons les classes génériques, les templates, qui sont l'une des spécificités de C++. Nous proposons également une brève introduction à la STL (Standard Template Library), une bibliothèque de conteneurs et d'algorithmes très utile.

Notez que le titre de certains chapitres n'est pas toujours très évocateur de tout ce qui s'y trouve, les nombreux concepts de C++ et de l'objet y sont éparpillés, simplement parce qu'il est très difficile de fournir une présentation indépendante de toutes ces notions. Donc, n'hésitez pas à utiliser le moteur de recherche du site si vous cherchez quelque chose de précis.

  • L'approche orientée objet
    Avant d'attaquer le langage C++ même, il est important de se remémorer les concepts fondamentaux de l'approche orientée objet: l'agrégation, la composition, l'héritage, le polymorphisme, les classes génériques... Vous trouverez tous ces éléments dans le cours .


  • Explique par un exemple simple les différences fondamentales entre une classe en C++ et une structure en C. Les notions de construction et de destruction, d'affectation et de copie sont abordées.


  • Présente à travers un exemple plus sophistiqué comment concevoir correctement une classe, en proposant quelques règles d'usage. Cela permet d'aborder l'écriture de diverses méthodes (notamment des opérateurs), et de rappeler ainsi les notions fondamentales du langage.


  • Rappels sur l'héritage, la virtualité et le polymorphisme dynamique. Les notions d'héritage multiple, virtuel, de classe abstraite et d'interface sont abordées. Le mécanisme RTTI (Run-Time Type Information) ainsi que la gestion des exceptions sont également introduits.


  • Introduction aux patrons de composant, ou templates, et plus particulièrement à la conception de classes génériques. L'instanciation partielle, qui permet notamment de spécialiser un patron, est également présentée.


  • Présentation sommaire de la STL, introduction aux notions d'itérateur, de foncteur et d'adapteur.

  • Métaprogrammation générique
    Il peut être intéressant d'étudier la métaprogrammation générique, basée sur les patrons de composants et l'instanciation partielle. Elle est notamment utilisée pour le calcul scientifique, car elle permet des performances accrues tout en proposant des composants logiciels génériques et extensibles. Vous trouverez quelques exemples de cette approche dans le document .

  • C++11
    La norme C++11 apporte de nouvelles possibilités au langage C++, notamment concernant la conception des classes et la programmation générique. Des concepts importants sont introduits, à savoir les références rvalue et les opérateurs de mouvement, les génériques à paramètres variables, ainsi que les expressions lambda. Vous trouverez une présentation de ces nouveaux concepts dans le document .

  • Patrons de conception - Design Patterns
    Il est impossible de parler de programmation avancée sans aborder les patrons de conception, ou design patterns, qui fournissent des solutions conceptuelles éprouvées pour répondre à des problèmes récurrents de développement logiciel. Vous trouverez la plupart des patrons de conception classiques dans le cours .

 
 
Copyright (c) 1999-2016 - Bruno Bachelet - bruno@nawouak.net - http://www.nawouak.net
La permission est accordée de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License, Version 1.1 ou toute version ultérieure publiée par la fondation Free Software Foundation. Voir cette licence pour plus de détails (http://www.gnu.org).