• Aucun résultat trouvé

Licence Informatique 2ème année Programmation Objet 1 Contrôle continu – 25/02/2019 - 1h30 Numéro étudiant : Nom : Prénom : Diplôme :

N/A
N/A
Protected

Academic year: 2021

Partager "Licence Informatique 2ème année Programmation Objet 1 Contrôle continu – 25/02/2019 - 1h30 Numéro étudiant : Nom : Prénom : Diplôme :"

Copied!
7
0
0

Texte intégral

(1)

Licence Informatique 2ème année Programmation Objet 1

Contrôle continu – 25/02/2019 - 1h30

Numéro étudiant : Nom :

Prénom : Diplôme :

Les notes de cours, TD et TP sont autorisées.

Exercice 1 : À quel affichage conduit l'exécution du programme suivant? (5 points) class Exo1{

int i;

Exo1(int a){

this.i = a;

}

Exo1(){

this.i = 0;

}

Exo1 create(int b){

return new Exo1(b);

}

public String toString(){

return "Exo1 avec i="+i;

}

protected void finalize(){

System.out.println("aaarrrgh");

} }

class Exo1_1 extends Exo1{

int i;

Exo1_1(int b){

super.create(b);

}

public String toString(){

return "Exo1_1 avec i="+i;

}

public static void main(String[] t){

Exo1 e = new Exo1();

Exo1 f = new Exo1_1(4);

System.out.println(e.toString());

System.out.println(f.toString());

System.gc();

} }

(2)

Exercice 2 (7 points) : on veut faire une simulation d'un système de retraite où une partie des retraités cotisent dans un système par annuité et l'autre dans un système à points. La simulation est très simplifiée ici, évidemment. Un cotisant a un numéro de sécurité sociale (chaine de caractères) et peut avoir un travail pénible ou non. On doit pouvoir modifier la pénibilité (si le cotisant change de travail).

a- Proposez du code objet pour représenter les cotisants (1 point).

On veut maintenant représenter les cotisants par annuités, pour lesquels il faut connaitre le nombre de mois travaillés dans leur vie et la somme des salaires qu'ils ont touchés. Ces cotisants ont aussi un compte pénibilité. Ces cotisants ont une méthode cotise(float mois, float salaire) qui met à jour leurs mois et salaires à chaque fois qu'ils cotisent (le paramètre mois n'est pas entier car ils peuvent ne travailler qu'une partie du temps). Cette méthode augmente également le compte pénibilité du nombre de mois travaillés, mais seulement si leur travail est pénible à ce moment-là.

Ces cotisant ont aussi une méthode qui calcule leur pension de retraite, égale à 75% du salaire moyen (somme des salaires / mois), plus le montant du compte pénibilité, moins 10% de décote par année de différence entre 43 et les mois travaillés (si le cotisant a travaillé 360 mois, soit 30 ans à plein temps, il aura une décote de (43-30)*0.1).

b- Proposez du code objet pour représenter les cotisants par annuité (2,5 points).

(3)

Il s'agit maintenant de représenter les cotisants par points, ayant un nombre de points qui augmente à chaque fois qu'ils cotisent. Leur méthode cotise n'a qu'un salaire en paramètre et leur nombre de points augmente de 0.2 fois leur salaire s'ils exercent un travail non pénible et de 0.35 fois leur salaire s'ils ont un travail pénible. La pension d'un cotisant par points dépend de l'âge de départ à la retraite et est égale à la moitié des points accumulés, moins 5% par année de différence entre 64 et l'âge de départ (s'il part à la retraite à 62 ans, il aura 10% de décote).

c- Proposez du code objet pour représenter les cotisants par points (2,5 points).

Exercice 3 (8 points) : on veut écrire un programme pour manipuler du code HTML. Un programmeur a déjà écrit la classe Attribut qui représente les attributs des balises.

class Attribut{

String nom, valeur;

Attribut(String n, String v){ this.nom = n; this.valeur = v; } public String getCode(){ return this.nom+"=\""+this.valeur+"\""; } }

NB : on peut utiliser les mécanismes d'abstraction dans cet exercice mais ce n'est pas obligatoire (et ça ne rapporte pas plus de points).

Tous les éléments HTML représentés doivent avoir une méthode public String getCode() qui renvoie le code HTML de l'élément (y compris les "<" et ">" si nécessaire). On veut représenter les balises en général, qui ont un nom et une liste d'attributs, par exemple :

<img src="paysage.jpg" alt="Un joli paysage">

On doit pouvoir ajouter un attribut en précisant son nom et sa valeur, et doit pouvoir aussi récupérer la valeur d'un attribut dont on donne le nom. On peut utiliser une classe de liste de l'API Java (ArrayList ou LinkedList ou une autre), qui offrent toutes une méthode add pour ajouter un élément, et un constructeur sans paramètre qui créer une liste vide.

(4)

a- Écrire une classe Balise pour représenter ces balises. (3 points)

Certaines balises sont des commentaires, comme par exemple :

<!--img src="paysage.jpg" alt="Un joli paysage"-->

b- Proposez du code objet pour représenter les balises commentaires. (1 points)

Aide : la classe String offre une méthode String substring(int d,int f) qui renvoie la chaine contenant les caractères entre les indices d (inclus) et f (exclu).

(5)

Certaines balises sont sous forme de paire de balises et contiennent du texte ou d'autres balises :

<h1 style="color:blue">

Voici une jolie image : <br>

<img src="paysage.jpg" alt="Un joli paysage">

</h1>

Il faut donc écrire une classe BalisePaire qui représente les Balise ayant en plus une liste de contenus pouvant être des chaines de caractères ou d'autres balises. On a le droit de modifier la classe Balise si besoin, mais ces contenus ne doivent pas apparaitre dans la classe Balise.

NB : la classe String est final, aucune classe ne peut en hériter

c- Proposez du code objet pour représenter les balises paires. (4 points)

(6)

CO RR

EC TIO N

Exercice 1 Exo1 avec i=0 Exo1_1 avec i=0 aaarrrgh

Exercice 2 class Cotisant{

String numero;

boolean penible;

Cotisant(String n, boolean penible){

this.numero=n; this.penible=penible;

} void setPenibilite(boolean b){

this.penible = b;

} }

class CotisantParmois extends Cotisant{

float mois, salaires, penibilite;

CotisantParmois(String n,boolean p){

super(n,p);

}

void cotise(float duree, float salaire){

this.mois = this.mois+duree;

if(this.penible) this.penibilite=this.penibilite+duree;

this.salaires = this.salaires+salaire;

}

float pension(){

return 0.75f*salaires/mois + this.penibilite - (43.5f-12*mois)*0.1f;

} }

class CotisantParPoints extends Cotisant{

float points;

CotisantParPoints(String n, boolean p){

super(n,p);

}

void cotise(float salaire){

if(!this.penible) this.points = this.points+salaire*0.2f;

else this.points = this.points+salaire*0.35f;

}

float pension(int age){

return (0.5f*points - (64.0f-age)*0.1f);

}

public static void main(String[] t){

} }

Exercice 3

import java.util.ArrayList;

class Attribut{

String nom, valeur;

Attribut(String n, String v){ this.nom = n; this.valeur = v; } public String getCode(){

return this.nom+"=\""+this.valeur+"\"";

} }

(7)

CO RR

EC TIO N

class Balise implements Contenu{

String nom;

ArrayList<Attribut> att;

Balise(String n){

this.nom = n;

this.att = new ArrayList<Attribut>();

}

void setAttribut(String n, String v){

this.att.add(new Attribut(n,v));

}

String getValeurAttribut(String n){

for(Attribut a:this.att){

if(a.nom.equals(n)) return a.valeur;

}

return null;

}

public String getCode(){

String s = "<"+nom;

for(Attribut a:this.att) s = s+" "+a.getCode();

return s+">";

} }

class Commentaire extends Balise{

Commentaire(String n){ super(n); } public String getCode(){

String s = super.getCode();

return "<!--"+s.substring(1,s.length()-1)+"-->";

} }

class BalisePaire extends Balise{

ArrayList<Contenu> ct;

BalisePaire(String n){

super(n);

this.ct = new ArrayList<Contenu>();

}

public String getCode(){

String s = super.getCode();

s = s.substring(0,s.length()-1);

for(Contenu c:this.ct) s = s+c.getCode();

return s+nom+"/>";

} }

interface Contenu{

public String getCode();

}

class Texte implements Contenu{

String s;

Texte(String n){ this.s = n; }

public String getCode(){ return s.toString(); } }

Références

Documents relatifs

Enfin, quand il reçoit un émissaire d’une autre famille, il parle la moitié du temps des taxes, l’autre de la criminalité (et jamais de Roméo et Juliette)?. Question 1 Quelle est

Par exemple, pour trouver un entier dans un arbre, on devra faire un parcours exhaustif dans le cas d'un arbre général, alors qu'un parcours dichotomique suffira pour un arbre

On peut par exemple considérer que la vitesse d'un bateau est celle du courant local, plus un pourcentage de celle du vent selon l'angle entre le cap du bateau et la direction du

Chaque mois, les citoyens ayant un revenu mensuel supérieur à 850 euros payent à l'état un impôt sur le revenu égal à 14% de leurs revenus.. En plus, tous les citoyens payent à

Chaque partie peut être une chaine de caractères, mais aussi une histoire en elle-même : les 1001 Nuits racontent l'histoire de Shéhérazade, qui elle-même raconte des histoires

En outre, les acronymes doivent avoir une méthode String getSigle() qui renvoie la chaine de caractères constituée par les premières lettres de chacun des mots (NB : la méthode

Le code proposé doit comporter une classe Chiffres qui représente la numérotation avec uniquement des chiffres arabes (du genre 1.2.2) et implémente toutes les méthodes de

Question 2 ♣ Parmi les éléments suivants, lesquels font partie de l’Unité de Traitement.. Le registre d’état Le registre d’instruction Le registre