Universit´e de Nice-Sophia Antipolis vendredi 30 septembre 2016
POLYTECH. CiP2 Dur´ee: 3h
Algorithmique et Programamtion Java
Travaux Pratiques – S´eance no4
1 La classe Complexe
Un programme Java est une collection de classes. Nous avons d´ej`a vu qu’il devait en compor-
ter au moins une contenant la fonction main. Un programme Java en cours d’ex´ecution est une
interaction d’objets. Les classes d´ecrivent des objets poss´edant les mˆemes propri´et´es.
Nous allons d´efinir une classe Complexe permettant de repr´esenter des nombres complexes. Un
objet complexe est constitu´e d’une partie r´eelle et d’une partie imaginaire, toutes deux de type
r´eel.
1) Tout d’abord, cr´eez un r´epertoire que vous nommerez Complexe.Les fichiers que vous cr´eerez
par la suite devront tous ˆetre plac´es dans ce r´epertoire.
2) Cr´eez le fichier Complexe.java qui d´eclare la classe Complexe form´ee des deux attributs priv´es
que sont les parties r´eelle et imaginaire, puis compilez cette classe.
/* la cl ass e com pl ex e re pr´es ent e les nom br es m at h´ema ti qu es c om pl exe s */
p u b l i c c l a s s Complexe {
p r i v a t e d o u b l e r´e el ;
p r i v a t e d o u b l e img ;
}
3) Cr´eez le fichier TestComplexe.java, dans lequel vous d´efinirez la classe TestComplexe qui contien-
dra la fonction principale main. Nous l’utiliserons pour tester la classe Complexe. Dans la fonction
main, d´eclarez une variable c1 de type Complexe et cr´eez un objet, `a l’aide de l’op´erateur new que
vous affecterez `a la variable c1. Notez que la variable c1 contient une r´ef´erence `a l’objet de type
Complexe, et non l’objet lui-mˆeme. ´
Ecrivez sur la sortie standard le complexe c1. Compilez cette
classe et ex´ecutez l’application TestComplexe.class.
Le r´esultat qui est affich´e est quelque chose de la forme Complexe@80cc9b4. La proc´edure
System.out.println n’accepte en param`etre qu’une chaˆıne de caract`eres. Si le param`etre n’est
pas de type String, deux cas se pr´esentent : soit il est d’un type de base, et alors il est converti ;
soit le param`etre est un objet, et alors la m´ethode toString de l’objet est appel´ee afin d’avoir une
repr´esentation sous forme de chaˆıne de caract`eres de l’objet. Si cette derni`ere n’existe pas dans
l’objet, d’autres fonctions toString sont recherch´ees, et il en existe au moins une qui donne le
r´esultat que vous avez obtenu.
4) Ajoutez `a la classe Complexe, la m´ethode toString() qui renvoie une chaˆıne de caract`eres de la
forme (r´eel,img). Pour cela, vous utiliserez l’op´erateur +qui concat`ene deux chaˆınes de caract`eres.
5) Recompilez la classe Complexe et ex´ecutez `a nouveau l’application TestComplexe.class. Par
d´efaut, `a quelle valeur est initialis´e un complexe ?
Si l’on veut que la classe Complexe fournisse d’autres initialisations, il va falloir ´ecrire des
constructeurs. Les constructeurs sont des m´ethodes particuli`eres qui ne renvoient aucun r´esultat
et dont le nom est le nom de la classe. Les constructeurs sont ex´ecut´es par l’op´erateur new pour
initialiser les variables membres des objets.
6) ´
Ecrivez un constructeur qui prend en param`etres deux double et les affecte, respectivement, `a
1
la partie r´eelle et `a la partie imaginaire.
7) D´eclarez dans la fonction main la variable c1 et testez votre application.
Co mpl exe c1 = new C omp le xe (32 , -234);
8) Ajoutez dans la fonction main la d´eclaration de la variable c2 :
Co mpl exe c2 = new C omp lex e ();
9) Testez votre application. Que se passe-t-il ?
Et oui, le constructeur par d´efaut n’est plus accessible ! Il faut donc ajouter `a la classe Complexe
un deuxi`eme constructeur, qui initialise les parties r´eelle et imaginaire `a 0.
10) Faites-le. Testez votre application.
11) Ajoutez `a la classe Complexe, la constante Iqui repr´esente le complexe (0,1). Cette constante
sera partag´ee par tous les objets, et devra ˆetre d´eclar´ee static .
Les membres r´eel et img sont priv´es et ne sont pas accessibles `a l’ext´erieur de la classe Complexe.
Ainsi la notation c1.r´eel dans la fonction main est erron´ee. C’est `a la classe, si elle le d´esire, d’offrir
aux clients, des m´ethodes pour acc´eder `a ses donn´ees priv´ees.
12) D´efinissez les m´ethodes partieR´eelle et partieImaginaire qui renvoient les valeurs des parties
r´eelle et imaginaire d’un objet complexe.
13) Compl´etez la fonction main pour tester ces deux m´ethodes.
On veut pouvoir r´ealiser les op´erations math´ematiques standard sur les complexes.
Commen¸cons par programmer les m´ethodes de conversion de la repr´esentation polaire vers la
repr´esentation cart´esienne.
Rappel : Tout complexe cadmet une repr´esentation cart´esienne x+iy et polaire ρeθo`u ρest
la norme et θla phase de c. Le passage d’un syst`eme de coordonn´ees `a l’autre se fait `a l’aide des
formules de conversion :
coordonn´ees polaires coordonn´ees cart´esiennes
ρ=px2+y2x=ρcos(θ)
θ=arctan(y/x)y=ρsin(θ)
14) Ajoutez la m´ethode rho (qui calcule la norme de l’objet courant) `a la classe Complexe.
15) Pr´eparez sur papier l’algorithme de la m´ethode theta (qui calcule la phase de l’objet courant).
D´emontrez de mani`ere formelle sa validit´e. Attention, la fonction arctan est d´efinie de IR vers
−π
2,π
2. Programmez cette m´ethode et ajoutez-la `a la classe Complexe.
Notez que la m´ethode double Math.atan2(double y, double x) r`egle le probl`eme pr´ec´edent.
16) Testez les deux m´ethodes rho et theta.
17) ´
Ecrivez la m´ethode statique polComplexe qui poss`ede deux param`etres de type r´eel repr´esen-
tant la norme et la phase d’un complexe polaire, et qui renvoie un objet de type complexe en
coordonn´ees cart´esiennes. Cette m´ethode poss`ede l’en-tˆete suivant :
p u b l i c s t a t i c C omp lex e po lCom plex e ( double n , double p)
18) Testez cette m´ethode en l’appliquant `a la norme et la la phase de c1. Que pensez-vous du
r´esultat ?
19) Ajoutez des m´ethodes qui effectuent la somme, la soustraction et le produit de l’objet courant
et de leur param`etre de type Complexe. Ces m´ethodes ont les en-tˆetes suivants :
2