INF103–LangageJAVA Examenderattrapage 23février2017 Nometprénom:……………………….…………………………………………………………. Groupe:………….. Enseignant:…………...................................... Écrirelesréponsesdirectementsurlesfeuillesdusujetdanslescasesprévuesàceteffet, latailledescasesderéponsen’estpasforcémentliéeàlatailledesréponses. Lebarèmeestsur20points. Lebarèmeestdonnéàtitreindicatifetpourraêtrerevuaumomentdelacorrectionsiles correcteursl’estimentnécessaire. Lesujetcomporte11pages. Pasdedocumentsautorisés,téléphoneséteints. Desréponsesillisiblesneserontpascorrigées. 1/11 1. (1points)Comments’appellelepremierlangageorientéobjet?Cocherlabonnecase. o Java o C++ o SmallTalk þ Simula o Basic o Eiffel o ObjectFirst 2. (1points)SoituneclasseStudentavecdeuxconstructeursdontlessignaturessont: Student(String name) et Student(String name, String school) Danslecodedecepremierconstructeur,commentpeut-onappelerledeuxièmeavec unargumentpardéfautpourleparamètreschool,disons"ENST"? VoirlecoursJava:Basesdelaprogrammation,transparent19. 2/11 3. (1 points) Pourquoi dit-on que c’est l’objet qui exécute une de ses méthodes? Commentaccède-t-onàcetobjetpendantl’exécutiondelaméthode? Lesméthodessontexécutéespardesobjetslorsqu’ilsreçoiventunmessagecorrespondant àl’en-têtedelaméthode.L’objetestaccessibleàtraverslapseudovariablethis. 4. (1 points) On désire compter tous les objets créés appartenant à une classe donnée, commentfait-on? On déclare une variable de classe initialisée à 0. Chaque fois qu’un objet est créé, on incrémentecettevariable.Cecidoitsefairedanschacundesconstructeursdelaclasse. 3/11 5. (1 points) Est-il possible de mettre les constructeurs dans une interface de programmationenJava? Non 6. (1points)Qu’appelle-t-onsurchargedeméthodesenJava? C’estquanddeuxméthodesontmêmenommaisdesparamètresdifférents. 4/11 7. (1 points) Citer les trois grands types d’exceptions en Java. Quelles sont leurs particularités? CoursJava:lesexceptions,transparents13. 8. (1points)VousvoyezdansunprogrammeJaval’expression: new Line2D.Float(2.53,3.54) QuelleestlanaturedeLine2D.Float ? C’estuneclasseimbriquée,voirlecoursComplémentsindispensables. 5/11 9. (1 points) Dans les TPs proposés par le cours Java, on demande de programmer les interfaces des différents objets intervenant dans l'algorithme de Dijkstra puis de programmer cet algorithme en utilisant ces interfaces. Pourquoi ? Qu'est-ce que cela apporte? Ondésireprogrammerl'algorithmedeDijkstraenfonctiondesinterfacesdetellemanière que cet algorithme soit valable pour n'importe quelle implémentation (du graphe, des sommets,destransitions,etc.)respectantcesinterfaces. 10. (1points)Commentappelle-t-onlemodedepassagedesparamètresenJava? C'estl'appelparvaleur,transparents38etsuivantdeClasseetobjets. 6/11 11. (1points)L'instruction A a = (B) b ; secompile.Donnerlaoulesconditionspourquecetteinstructioncompile: o laclasseBestunesous-classedeA(inutiledecasterdanscecas) þ laclasseBestunesuperclassedeA þ letypedéclarédebestunesous-classedeB o letypedéclarédebestunesuperclassedeB 12. (1points)Unattributstatiqueestaussiappelé(donnerlaoulesréponsesjustes): o unevariabled'instance þ unevariabledeclasse o unevariablelocale þ unevariableglobale(parfois,pastrèsOO,onpeutcocherounepascocher) o unevariabled'interface 13. (1points)Uneclassequiimplémenteuneinterface(donnerlaoulesréponsesjustes): o estobligatoirementuneinterface o estobligatoirementuneclasseabstraite þ peutêtreuneclasseabstraite o estobligatoirementuneclasseconcrète þ peutêtreuneclasseconcrète 14. (1 points) Quelle sont les similarités et les différences entre une collection de type ArrayListetunecollectiondetypeLinkedList ? Touteslesdeuxsontdesstructurespouvantcontenirdesobjets.Ellesimplémententtoutes les deux l'interface List. On ne définit pas la taille de la structure car on peut ajouter autantd'élémentsquelamémoiredeJavalepermet. L'accèsàunélémentparsonindexsefaitentempsconstantdansuneArrayListalors qu'ilsefaitentempslinéairedansuneLinkedList. L'insertion d'un élément nécessite la recopie de tous les éléments qui suivent l'index d'insertion dans le cas d'une ArrayList alors que ce n'est pas le cas pour une LinkedList. 7/11 15. (2 points) On se donne une classe abstraite Animal et des classes concrètes qui héritent de la classe Animal : Vache, Chien et Pigeon. La classe Vache à une méthode meugler(). La classe Chien a une méthode aboyer(). La classe Pigeonauneméthoderoucouler().Onadoncl’arbred’héritagesuivant: Ondésireuneméthodevoid crier()quilorsqu’elleestexécutéeparunobjetde typeAnimalréaliselecridel’animal:pourunobjetdetypeVache,elleappellerala méthode meugler(); pour un objet de type Chien, elle appellera la méthode aboyer();pourunobjetdetypePigeon,elleappelleralaméthoderoucouler(). Programmercrier().Préciserdansquelleclassevousécrivezdesprogrammes. DansclasseAnimal : public abstract void crier() ; DansclasseVache : public void crier() { meugler(); } DansclasseVache : public void crier() { aboyer (); } DansclassePigeon : public void crier() { roucouler (); } 8/11 UnesuitedeSyracusesecalculecommesuit:onsedonneunentierarbitraireU0.Puison calculeUn+1enfonctiondeUnaveclaformule: Un+1 = Un / 2 si Un est pair, 3Un + 1 sinon 16. (1point)DéfiniruneclasseSyracusedontleconstructeurprendraU0enargumentet quiauralesméthodessuivantes: • int current()quirendleUncourantencommençantparU0; • void next()quicalculel'entiersuivantquecurrent()rendra; • boolean hasNext() qui dit quand la suite est terminée sachant qu'elle se termine1aveclavaleur1. public final class Syracuse { private int u ; public Syracuse(int u0) { u = u0 ; } public boolean hasNext() { return (u != 1) ; } public void next() { u = (u % 2 == 0) ? (u / 2) : (3 * u + 1) ; } public int current() { return u ; } } 1Onaconstaté,maisnonprouvé,quelessuitesdeSyracuseseterminetoujoursparla répétitiondesvaleurs4,2,1. 9/11 17. (1 point) Donner une méthode void printFromFirst(Sysracuse s) d'une autreclassequenousappelonsMain.Cetteméthodepermetd'afficherunesuitede SyracuseencommençantparU0. LaméthodeàrajouterdanslaclasseMain: public static final void printFromFirst(Syracuse s) { while (true) { System.out.println(s.current()) ; if (s.hasNext()) s.next() ; else return ; } } 18. (1point)Donneruneméthodevoid printFromLast(Sysracuse s)toujours danslaclasseMainquipermetd'afficherunesuitedeSyracuseencommençantparle dernier. LaméthodeàrajouterdanslaclasseMain: public static final void printFromLast(Syracuse s) { int u = s.current() ; if (s.hasNext()) { s.next() ; printFromLast(s) ; } System.out.println(u) ; } 10/11 19. (1points)EcrireaméthodemaindelaclasseMain.CeprogrammeMainprenden argumentunentieretletransmetclassiquementdansletableauargsargumentdela méthode main. La méthode main va transformer args[0] en un entier puis affichera la suite de Syracuse commençant à cet entier une fois avec printFromFirstetunefoisavecprintFromLast. public static final void main(String[] args) { int n = Integer.parseInt(args[0]) ; Syracuse s1 = new Syracuse(n) ; printFromFirst(s1) ; /* Don't forget to recreate a Syracuse */ Syracuse s2 = new Syracuse(n) ; printFromLast(s2) ; } FINDUSUJET 11/11