Université Libre de Bruxelles							2007-2008
Faculté des Sciences Appliquées
Cours INFO-H-405
Prof. H. Bersini

Approfondissement de la programmation orientée objet
INFO-H-405 : TP1

C. Philemotte et H. Bersini.

Exercice 1 :
Nous allons lors de ce petit exercice revoir la différence entre les paradigmes procédural, fonctionnel et orienté objet. Le langage C++ est en effet un langage de programmation multiparadigme. Il est à souligner que ces paradigmes ne sont pas exclusifs et que l'on retrouve, du moins en partie, en orienté objet du procédural et du fonctionnel.

Connaissances nécessaires : pointeur de fonction, définition de type, classe, méthode virtuelle, héritage

a)	Ecrivez une fonction permettant un tri par insertion d'un tableau d'entiers reçu en paramètre.
b)	Ecrivez une fonction permettant un tri par bulle d'un tableau d'entiers reçu en paramètre.
c)	Définissez un type de pointeur de fonction fnctSort. Déclarez un pointeur de ce type et initialisez le à l'aide des référents des fonctions précédemment utilisées. Exécuter ensuite ce pointeur de fonction. Ceci vous donnera donc une approche fonctionnelle du problème.
d)	Déclarez et définissez une classe abstraite Sort possédant une méthode virtuelle operate, recevant en paramètre un tableau d'entiers. Et puis, déclarez et définissez des sous-classes permettant d'implémenter le tri par bulle et par insertion.
Exercice 2 :
Lorsque l'on définit de nouveau type par le biais d'une classe, ces types se retrouvent être traités indépendamment des types primitifs par le biais des méthodes. Le C++ offre toute une série de possibilité permettant de rendre le traitement transparent. Il sera alors dès lors possible d'utiliser les opérateurs arithmétiques, relationnels, ou même de conversion pour manipuler ces nouveaux types.

Connaissances nécessaires : forme de Coplien (constructeur, constructeur par copie, assignation), surcharge d'opérateurs y compris ceux de conversion, conversion explicite et imlicite

Déclarez et Définissez une classe permettant de manipuler les complexes au même titre que les autres types primitifs numéraires. Vous surchargerez les opérateurs arithmétiques binaires et unaires (- + * / -= += /= *=), l'égalité == et la différence !=, et les opérateurs de redirection pour l'entrée >> et la sortie <<. Vous offrirez les moyens d'initialisation, de copie (y compris l'opérateur d'assignation) et de conversions (via la surcharge de constructeur ou d'opérateur de conversion).
Exercice 3 :
Le Design Pattern Singleton est certainement aussi fondamental que le Composite. Cet exercice vous demande de l'implémenter sur un cas pratique le couplant à de l'héritage.

Connaissances utilisées : classe, héritage, statique ou non, template et singleton

Déclarez et définissez une classe Person et une classe AddressBook contenant les différentes Person. Déclarez et définissez une classe Superman qui hérite de Person et dont vous assurerez l'unicité de son instance.