 |
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). |
|
|
|