Vous êtes sur la page 1sur 2

INSA Centre Val de Loire

Année 2020-2021
Département STI

Programmation Orientée Objet

TD 5 – Des équations de degré un génériques

Durant ce TD, nous allons reprendre les équations de degré un implémentées durant le TD2.
Les codes de départ sont disponibles sur Celene dans le même dossier que le présent sujet. Ils
contiennent :
— une classe EqDegOne représentant une équation de type aX + b = 0 avec a et b float.
— une classe TestEquation implémentant quelques tests basiques sur équation.
— une classe Complex représentant des nombres complexes (elle nous sera utile plus tard).
— une classe FloatCoeff encapsulant un float.
Nous allons construire une équation générique permettant de traiter des coefficients ayant
tout type. Tout au long de ce TD, TA , TB et TX désigneront le type de a, b et X, respectivement.
Rendu : Ce TD est à faire individuellement. Il n’est pas forcément attendu qu’il soit inté-
gralement fini dans le temps imparti. À rendre : une archive contenant votre code source sur
celene sur le rendu "Rendu TD généricité 2, equation". Le rendu devra être effectué pour la fin
du TD, c’est à dire à T0+1h20 (1h20 après le début du TD, soit 15h) au plus tard.

1 Des types numériques simples pour commencer


Dans un premier temps, on considérera des classes numériques simples de sorte que TA =
TB = TX , toute opération effectuée dans le cadre de la résolution de l’équation sera considérée
stable pour ce type.
Exercice 1 : Préliminaires
Comme vu lors du TD précédent, comme des opérations sont appliquées à nos coefficients
(multiplication, etc...), le type paramétré devra être contraint. Pour bien distinguer ces opéra-
tions et préparer notre classe, nous allons faire une étape intermédiaire. Nous allons remplacer
le type de a et b de sorte qu’il ne soit plus primitif.
a : Compléter la classe FloatCoeff, encapsulant nos floats pour l’équation de degré un. Elle
implémentera toutes les opérations à effectuer sur a et b dans la classe EqDegOne (et uniquement
celles-ci). Même si nous considérons des types simples pour le moment, attention à bien définir
vos opérations de sorte à ce qu’elles soient valides dans le cas général. Il n’a pas lieu par exemple
de penser que l’opération "division" ait un sens (dans le cadre de matrices, par exemple).
b : Créer une classe EqDegOneGenSimple dont les coefficients sont des FloatCoeff. On s’ap-
pliquera à utiliser uniquement les méthodes de FloatCoeff et aucune comparaison ou opération
définie sur le type primitif.
c : Lancez les tests pour cette nouvelle classe. Elle doit avoir le même comportement qu’au
début du TD.
Exercice 2 : Classe générique
a : Afin de déclarer les contraintes sur le type paramétré, définir une interface listant les
opérations que l’on doit faire sur a et b (a priori celles de FloatCoeff). Cette interface pourra
être elle même générique si nécessaire.
b : Rendre la classe EqDegOneGenSimple générique, de sorte que son type paramétré manipule
des objets implémentant l’interface précédemment définie.
Exercice 3 : Test
a : Rattachez FloatCoeff à l’interface précédemment définie, et rejouez les tests sur EqDegOneGenSimple.
b : Faites en sortes que EqDegOneGenSimple puisse être instanciée avec des coefficients de
type Complex.
c : Testez EqDegOneGenSimple à l’aide d’objets de type Complex.

2 Des types un peu plus génériques


On considère à présent le cas général où TA 6= TB , mais où les opérations opposée et in-
version sont stables pour leur domaine de définition. Aucune autre hypothèse (par exemple de
commutativité) ne sera faite pour le moment.
Exercice 4 : Préparation
a : Quel est le type de X ? On pourra dans un premier temps et pour simplifier faire l’hypo-
thèse TX = TB .
b : Créer des interfaces devant être implémentées dans ce nouveau cas, symbolisant :
— La ou les opération(s) propre(s) au type TA .
— La ou les opération(s) propre(s) au type TB .
— La ou les opération(s) impliquant TA et TB .
Ces interfaces pourront elles même être générique et paramétrées.
c : Créer une classe EqDegOneGen générique manipulant des objets de types TA et TB implé-
mentant les interfaces précédemment définies.
Exercice 5 : Test
a : Cette nouvelle représentation doit être aussi puissante que la précédente. Faire tourner
un exemple avec les complexes. (i.e., TA = TB = C).
b : On souhaite résoudre grâce à EqDegOneGen une équation avec TA = FloatCoeff et TB
= C. Faites les modifications nécessaires et testez.

3 Pour aller plus loin...

Exercice 6 : Levons des hypothèses simplificatrices...


Dans les deux questions ci-après, il s’agira surtout de définir intelligemment vos interfaces et
de les paramétrer de manière idoine.
a : Gérez le cas plus général où TX 6= TB .
b : Gérez le cas le plus général où l’inversion et l’opposition ne sont pas stables sur TA et
TB .

Vous aimerez peut-être aussi