Exercices de base oriente objet Java autour de ? 2 Exercices de base oriente objet Java autour

  • Published on
    12-Sep-2018

  • View
    212

  • Download
    0

Transcript

  • Exercices de base oriente objet Java autour de complexes

    Universit Paris Sud

    Prambule

    Cette suite dexercices a pour but, au travers de la construction de tableaux de com-plexes, de passer en revue diverses notions de base orientes objet du langage. La rdac-tion en est volontairement elliptique de faon obliger ltudiant rflchir sur un certainnombre de notions essentielles. Il est plus que conseill de vous reporter au notes de coursqui vous ont t distrribues ainsi qu laide sur les API Java.

    Exercice 1 Premire manipulations de complexes (crationde classes, constructeurs, mthodes et champsstatiques)

    1. Nous allons crer deux classes de manipulation dobjets de type complexe.a) Une premire classe, nomme Complexe, non publique (sans le mot cl public

    devant class), contiendra 2 champs de type double : partieReelle, pour contenir la partie relle, et partieImaginaire, pour contenir la partie imaginaire.Mettre le bon mot cl de visibilit, de sorte que ces champs ne puissent treaccessibles que de la classe Complexe et de ses sous-classes (se reporter auxmots cls de visibilit dans le chapitre des bases dorientation objet en Java desnotes de cours).Cette classe contiendra en outre deux mthodes : Un constructeur, admettant deux paramtres : les parties relle et imaginaire

    du complexe crer. Une mthode publique nomme toString(), sans argument, renvoyant une

    rfrence vers un objet de type String. Pour un complexe de partie rellere et de partie imaginaire im, la mthode renverra la chane (re, im). Parexemple, pour le complexe 2, 5 0, 5i, la mthode renverra (2.5, 0.5).

    Note : on rappelle que la mthode toString() est prsente dans toutes lesclasses de lAPI Java. On pourra plus prcisment se servir de la mthodestatic String toString(double i) de la classe Double, classe utili-taire de manipulation de nombres virgule.

    1

  • 2 Exercices de base oriente objet Java autour de complexes

    Indication : dans le cas o cette question vous pose des difficults, vous pourrezvous reporter avec profit un exemple du polycopi dans le chapitre sur lesclasses utilitaires de base, section sur les chanes de caractres, sous section surla conversion de chanes.

    b) Une deuxime classe, nomme ComplexeMain, publique, contenant une seulemthode main(...). lintrieur de cette mthode, crer un complexe puis lafficher (via la mthodevoid System.out.println(String s)).

    2. a) Raffiner la classe Complexe prcdente en crant : Deux constructeurs, lun sans paramtre initialisant les parties relle et ima-

    ginaire 0 (constructeur par dfaut), et lautre admettant une rfrencede type Complexe en paramtre (constructeur de copie). Ces constructeursdoivent obligatoirement faire appel au constructeur ralis en 1a.

    Une mthode publique nomme multiplier(...), ralisant la multipli-cation du complexe courant (rfrenc par la rfrence courante this) et decelui fourni en unique argument. La mthode renvoie le complexe rsultat.Cette mthode ne doit pas tre statique.

    Une mthode publique et statique nomme racNiemeUnite(...) ren-voyant un Complexe, la racine nime de lunit et admettant n comme uniqueargument entier (de type primitif int).On rappelle, en cas damnsie aussi soudaine que regrettable, que la racinenime de lunit est

    e2i/n

    On pourra se servir des mthodes et constantes utilitaires suivantes de laclasse Math :static double cos(double a)static double sin(double a)static double PI.

    b) La classe ComplexeMain contiendra toujours une seule mthode main(...).La commande ComplexeMain.class (celle que lon entre dans une fentretexte par java ComplexeMain) correspondante admet 1 ou 4 paramtresrels correspondant 1 ou 2 nombres complexes. On rappelle que ces argu-ments sont accessibles par le tableau de chanes de caractres argument demain(...) (par exemple, si cet argument est nomm args, args[0] est le1er argument, args[1] est le 2ime argument, etc.). Dans le cas dun para-mtre, il y aura affichage de la racine nime correspondante si largument peuttre converti en entier ; dans le cas contraire, afficher un message de la forme"Parametre de type invalide" et sortir du programme. Dans le cas de4 paramtres, il y aura affichage du produit des 2 complexes correspondants.Le cas de paramtres de format invalide donnera galement lieu laffichagedun message derreur et la sortie du programme.On pourra se servir des mthodes utilitaires static int parseInt(Strings) de la classe Integer et static double parseDouble(String s) dela classe Double qui trnasforment des chanes en int et double.

    c) Dans un but de comptabilit mmoire, on dsire savoir combien dobjets com-plexes ont t allous par new. Crer un champ cet effet ; mettre le bon motcl de visibilit pour que ce champ ne soit visible que de sa classe. Complterle constructeur ralis en 1a et modifier la mthode toString() pour quelle

  • Exercice 2 Tableaux gnriques (tableaux) 3

    affiche le numro du complexe cr, le format daffichage devenant [no](re,im) o no est le numro du complexe, re sa partie relle et im sa partie ima-ginaire. Ensuite, crer deux complexes (par new), raliser laffectation de lundans lautre. Quel est leffet produit ? Peut-on y remdier ?

    Exercice 2 Tableaux gnriques (tableaux)

    1. Crer une classe nomme Tableau pour la gestion de tableaux dobjets. Elle aurales caractristiques suivantes : Un champ donnees, de type tableau dObject. Un champ nbElts, entier, pour stocker le nombre dlments. Un constructeur admettant un argument entier, le nombre nb dlments du ta-

    bleau. On affectera nb nbElts et on allouera un tableau de nbElts rfrencessur Object que lon affectera donnees. Mettre le bon mot cl de visibilit pourque ce constructeur ne soit accessible que de sa classe et de ses sous-classes.

    Une mthode publique int size() renvoyant la taille du tableau. Une mthode publique int indexOf(Object elem) qui renvoie lindice dans

    le tableau de lobjet dont une rfrence est passe en argument. On se servira,pour les comparaisons, de la mthode boolean equals(Object elt) hritedObject.

    Une mthode publique Object get(int index) qui renvoie une rfrence surlobjet stock lindice index.

    Une mthode publique Object set(int index, Object element) qui placelobjet rfrenc par element lindice index. Elle renvoie une rfrence verslobjet prcdemment plac cet indice.

    Une mthode void muer(Tableau nouv) qui remplace champ par champ, letableau courant par le tableau nouv. Mettre le bon mot cl de visibilit, de sorteque cette mthode ne puisse tre accessible que de la classe Tableau et de sessous-classes.

    2. Ajouter la mthode nomme void change(double npr, double npi) laclasse Complexe qui change les parties relle et imaginaire du complexe courant.

    3. Crer une classe TableauMain, ne contenant quune mthode main(). Dans cettedernire, crer un Tableau de 3 lments, nomm par exemple tab, puis crer unComplexe, nomm par exemple cplxe. Effectuer ensuite les oprations suivantes :

    tab.set(0, cplxe);cplxe.change(4,3);tab.set(1, cplxe);cplxe.change(7,8);tab.set(2,cplxe);// Affichage

    Puis afficher les diffrents lments du tableau. Le rsultat vous semble-t-il conforme vos attentes ?

    4. la fin de la classe TableauMain, ajouter une cration dun deuxime complexeet dun nouveau tableau tabBis cr partir de tab, laide du constructeur parcopie. Faire une modification par set() sur tabBis et afficher les deux tableaux :

  • 4 Exercices de base oriente objet Java autour de complexes

    Complexe cplxeBis = new Complexe(5, 5);Tableau tabBis = new Tableau(tab);tabBis.set(2, cplxeBis);// Affichage

    La copie ralise par le constructeur public Tableau(Tableau nouvTab) estdite copie superficielle (qui ne copie que les rfrences) par opposition une copiedite profonde (qui copie galement les objets rfrencs, toutes profondeurs).

    Exercice 3 Tableaux dynamiques (interfaces,polymorphisme)

    1. Crer une interface nomme TailleVariable, destine aux tableaux taille va-riable et contenant les dclarations de mthodes suivantes : void add(int index, Object element); pour ajouter au tableau un l-

    ment point par la rfrence element. Object remove(int index); pour enlever du tableau llment situ lin-

    dice index.

    2. Crer une classe nomme TableauDynamique hritant de Tableau et implantantlinterface TailleVariable. La classe TableauDynamique encapsule (englobeen le protgant) un tableau dlments de type Object et taille variable. Cetteclasse ne contiendra quun constructeur, et limplantation des mthodes add() etremove(). Le constructeur se contente dappeler le constructeur de la classe mre(Tableau).Par souci de simplicit dimplantation, un nouveau tableau dObject sera cr chaque modification. La rfrence donnees hrite de Tableau viendra pointer surce tableau nouvellement cr. On laissera au ramasse-miettes (garbage collector) lesoin de rcuprer la place mmoire de lancien tableau (avant modification), dont onaffectera la rfrence null.

    3. Crer une classe nomme TableauComplexeDyn hritant de TableauDynamique.Cette classe sera ddie aux tableaux de complexes et taille variable ; elle contien-dra : un constructeur 3 paramtres : le nombre dlments du tableau (un entier) et

    2 tableaux de double contenant les parties relles et imaginaires (ces tableauxseront supposs avoir un nombre dlments gal lentier pass en premier para-mtre) ;

    une redfinition de la mthode toString() afin dafficher le tableau lment parlment ; pour ce faire, on appellera la mthode toString() de chaque lment.

    4. redfinir dans la classe Complexe la mthode publique boolean equals(...)de sorte quelle teste lgalit de contenu du complexe rfrenc par this (linstancecourante) et du complexe pass en paramtre.

    5. Crer une classe TableauComplexeDynMain avec une seule mthode, main(...),de test. Elle admettra comme paramtre de la ligne de commandes le nombre dl-ments du tableau de type TableauComplexeDyn crer. Les divers lments dutableau sont initialiss laide de la mthode double Math.random() qui renvoieune valeur alatoire comprise entre 0 et 1. Effectuer les oprations suivantes dans lemain(...)

  • Exercice 3 Tableaux dynamiques (interfaces, polymorphisme) 5

    a) Crer le tableau et linitialiser avec double Math.random().

    b) Afficher le tableau en utilisant un seul appel la mthode daffichageSystem.out.println(String s).

    c) Insrer un lment.

    d) Afficher le tableau.

    e) Dtruire deux lments.

    f) Insrer une instance de la classe Integer (par new Integer(...)) et ins-rer une chane de caractres (instance de String, par new String(msg) omsg sera une chane comme par exemple "Lhomme sourit la fleur.La fleur sourit.").

    g) Afficher le tableau. Que constatez-vous laffichage ?

    h) Redfinir dans TableauComplexeDynMain la mthode dajout add(intind, Object elt) en testant si elt est de la classe Complexe (par lop-rateur instanceof) et en affichant un message si ce nest pas le cas, puis enappelant la mthode add(...) de la classe mre.

    Exercice 1 Premire manipulations de complexes (cration de classes, constructeurs, mthodes et champs statiques)Exercice 2 Tableaux gnriques (tableaux)Exercice 3 Tableaux dynamiques (interfaces, polymorphisme)

Recommended

View more >