• Aucun résultat trouvé

Licence Informatique 2ème année Programmation Objet 1

N/A
N/A
Protected

Academic year: 2021

Partager "Licence Informatique 2ème année Programmation Objet 1"

Copied!
5
0
0

Texte intégral

(1)

Licence Informatique 2ème année Programmation Objet 1

Examen de seconde session – 28/06/2019 – 2h

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

Exercice 1 (7 points) : on veut simuler la diffusion des fausses nouvelles sur un réseau social. Une nouvelle est constituée par un texte et un niveau de fiabilité (entre 0 et 100%).

a- Écrire une classe pour représenter les nouvelles (1 point).

Le réseau social est constitué de personnes qui ont un nom, des personnes amies, et la liste des nouvelles qu'elles publient sur leur page personnelle. On doit pouvoir ajouter un ami à une personne, et chaque personne peut recevoir une nouvelle d'une autre personne. Mais la façon dont elle traite la nouvelle reçue peut changer d'une personne à l'autre.

b- Écrire une classe pour représenter les personnes (3 points).

Quand une personne reçoit une nouvelle, elle peut l'ignorer, la publier (la nouvelle est alors ajoutée à sa liste de nouvelles publiées sur sa page), la transmettre à tous ses amis (qui donc recoivent cette nouvelle). Certaines personnes sont crédules et, quand elles recoivent une nouvelle qu'elles n'ont pas encore sur leur page, elles la publient sur leur page et la transmettent à tous leurs amis. Certaines personnes sont méfiantes et ne publient et transmettent que les nouvelles reçues d'une personne amie.

c- Proposer du code objet pour représenter les personnes crédules et les personnes méfiantes (3 points).

Exercice 2 (6 points) : un acronyme est un mot formé par les initiales d'autres mots (ex.: ENA est l'acronyme de "Ecole Nationale d'Administration"). On suppose ici que les acronymes sont constitués par les premières lettres des mots qui les composent, même si ce n'est pas tout à fait vrai (ex.: l'acronyme de Ecole Nationale d'Administration devrait être ENDA). Les acronymes sont des listes de mots et doivent obligatoirement implémenter l'interface suivante :

public interface Ecrivable{

public void ecrire(); // écrit l'objet à l'écran }

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 substring(int i, int j) de la classe String renvoie la chaine constituée par les caractères situés entre les indices i et j-1 inclus).

a- Écrire une classe Acronyme pour représenter les acronymes (2 points).

Les acronymes imbriqués sont des acronymes qui peuvent contenir des mots, mais aussi des objets de type Acronyme (ex.: AJAX est l'acronyme de "Asynchronous JavaScript And XML", XML étant l'acronyme de "eXtensible Markup Language").

b- Proposer du code objet pour représenter les acronymes imbriqués, qui doivent être des sous- types d'acronymes et avoir la méthode getSigle (4 points).

(2)

Exercice 3 (6 points) : on veut réaliser des interfaces graphiques pour traduire des phrases. Les objets chargés de traduire les phrases implémentent tous l'interface Traducteur :

public interface Traducteur{

public String traduit(String s); // renvoie la traduction de s }

L'interface graphique doit ressembler à l'image suivante :

a- Écrire une classe qui représente les interfaces graphiques de traduction, de façon à ce que quand on appuie sur le bout "Traduire", on affiche dans la zone de texte de droite la traduction de la phrase écrite dans la zone de texte de gauche (5 points).

On suppose qu'il existe une classe FR2GB qui implémente l'interface Traducteur et possède un constructeur sans paramètre. La méthode traduit de la classe FR2GB traduit la chaine paramètre s du français à l'anglais.

b- Écrire une fonction main qui crée une interface permettant de traduire des phrases du français à l'anglais (1 point).

(3)

CO RR

EC TIO N

Exercice 1

public class Nouvelle{

private String s;

private int fiabilite;

public Nouvelle(String s, int f){

this.s = s;

this.fiabilite = f;

} }

public abstract class Personne{

private String nom;

protected LinkedList<Personne> amis;

protected LinkedList<Nouvelle> nouvelles;

public Personne(String n){

this.nom = n;

this.amis = new LinkedList<Personne>();

this.nouvelles = new LinkedList<Nouvelle>();

}

public void ajoutAmi(Personne p){

this.amis.add(p);

}

public abstract void recoitNouvelle(Nouvelle n, Personne p);

}

public class Credule extends Personne{

public Credule(String n){

super(n);

}

public void recoitNouvelle(Nouvelle n, Personne p){

if(!this.nouvelles.contains(n)){

this.nouvelles.add(n);

for(Personne pe:this.amis) p.recoitNouvelle(n,this);

} }}

public class Mefiante extends Personne{

public Mefiante(String n){

super(n);

}

public void recoitNouvelle(Nouvelle n, Personne p){

if(!this.nouvelles.contains(n) && this.amis.contains(p)){

this.nouvelles.add(n);

for(Personne pe:this.amis) p.recoitNouvelle(n,this);

} } }

Exercice 2

public class Acronyme implements Ecrivable{

String mots[];

public Acronyme(){

this.mots = new String[0];

}

public Acronyme(String mots[]){

this.mots = mots;

}

(4)

CO RR

EC TIO N

public String getSigle(){

String s = "";

for(int i=0;i<this.mots.length;i++) s = s+this.mots[i].substring(0,1);

return s;

}

public void ecrire(){

System.out.println(this.getSigle());

} }

public class Chaine implements Ecrivable{

private String s;

public Chaine(String s){

this.s = s;

} public String getFirst(){

return this.s.substring(0,1);

}

public void ecrire(){

System.out.println(this.s);

} }

public class AcronymeImbrique extends Acronyme{

Ecrivable mots[];

public AcronymeImbrique(Ecrivable m[]){

super();

this.mots = m;

}

public String getSigle(){

String s = "";

for(int i=0;i<this.mots.length;i++){

if(this.mots[i] instanceof Chaine) s = s+((Chaine)

this.mots[i]).getFirst();

else s = s+((Acronyme) this.mots[i]).getSigle().substring(0,1);

}

return s;

} }

Exercice 3 :

public class TraducteurGUI extends JFrame implements ActionListener{

private JTextField from, to;

private Traducteur t;

public TraducteurGUI(Traducteur t){

super("Traducteur");

this.t = t;

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.from = new JTextField(30);

this.to = new JTextField(30);

JButton jb = new JButton(" > Traduire > ");

jb.setSize(new java.awt.Dimension(100,30));

jb.addActionListener(this);

Box b = new Box(BoxLayout.X_AXIS);

b.setBorder(javax.swing.BorderFactory.createEmptyBorder(10,10,10,10));

b.add(this.from);

b.add(b.createHorizontalStrut(10));

b.add(jb);

b.add(b.createHorizontalStrut(10));

b.add(this.to);

this.add(b,java.awt.BorderLayout.NORTH);

this.pack();

this.setVisible(true);

(5)

CO RR

EC TIO N

}

public void actionPerformed(ActionEvent e){

this.to.setText(t.traduit(this.from.getText()));

}

public static void main(String[] t){

new TraducteurGUI(new TraducteurFR2GB());

} }

Références

Documents relatifs

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

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%

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

Construire l’arbre de recherche parcouru par l’interpréteur Prolog lors de la résolution de ce but (on pourra se limiter à une profondeur de 5 résolutions et ne pas détailler

La machine de Kron qui est la machine la plus générale et la plus rigoureuse dans sa description théorique (pouvant même être relativiste, même si cela n'a pas forcément de sens

On ajoute chacun des tableaux de Young ainsi créé à la fin de la première ligne créée (la concaténation des listes s'obtenant par un simple +), formant ainsi à chaque fois