• Aucun résultat trouvé

Licence Informatique 2ème annéeProgrammation Objet 1

N/A
N/A
Protected

Academic year: 2021

Partager "Licence Informatique 2ème annéeProgrammation Objet 1"

Copied!
8
0
0

Texte intégral

(1)

Licence Informatique 2ème année Programmation Objet 1

Contrôle continu – 05/05/2020 - 1h30

Numéro étudiant : Nom :

Prénom :

Les notes de cours, TD et TP sont (forcément) autorisées.

Exercice 1 (6 points) : le programme suivant a été écrit pour gérer des logements, mais il ne respecte pas les principes de la POO. Proposez un nouveau programme qui les respectent.

public interface Commune{

public int prixMetreCarre();

}

public class Logement{

private String type;

private int surface;

public int getSurface(){

return this.surface;

}

public int prix(Commune c){

if(type.equals("Appartement")) return this.surface*c.prixMetreCarre();

if(type.equals("Maison")) return this.surface*c.prixMetreCarre()*1.2;

} }

(2)

Exercice 2 (7 points) : on veut représenter les numérotations de sections de documents, du genre 1.2.3, A-a-1 ou I.B.a Comme il existe plusieurs systèmes de numérotations (avec des chiffres arabes, des chiffres romains, des lettres, etc), on factorise tous ces systèmes dans l'interface suivante :

public interface Numero{

// passe au numéro suivant au même niveau (2 si on est sur 1, ou 1.2 si on est sur 1.1) public void suivant();

// passe a la sous-section suivante (1.1 si on est sur 1, ou 1.2.1 si on est sur 1.2) public void sousSection() throws java.lang.UnsupportedOperationException;

// passe a la sur-section suivante (1.2 si on est sur 1.1.3 ou 2 si on est sur 1.5) public void surSection() throws java.lang.UnsupportedOperationException;

// renvoie la chaine representant le numero public String toString();

}

On suppose qu'il n'existe que 3 niveaux de numérotations. Si on appelle la méthode sousSection sur un numéro de 3e niveau (comme 1.3.4), la méthode lance une UnsupportedOperationException. Si on appelle la méthode surSection sur un numéro de premier niveau (comme 1), le même genre d'exception est levée.

NB : pour lancer une exception de type UnsupportedOperationException, il faut utiliser l'instruction throw new UnsupportedOperationException();

Proposez du code respectant les principes de la POO pour représenter les différents systèmes de numérotations en général, sachant que tout objet représentant une numérotation doit implémenter l'interface Numero. 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 l'interface Numero.

(3)

Exercice 3 (7 points) : on veut représenter les personnes dans un programme, avec un prénom, un père, une mère et un sexe.

a- Écrivez une classe Personne qui respecte les principes objet et une méthode main qui crée une personne masculine nommée "Ouranos" (qui n'a pas de parent), une personne féminine nommée "Gaia" (qui n'a pas de parent non plus) et une personne masculine nommée "Cronos" qui a Ouranos et Gaia pour parents. (3 points)

(4)

On veut représenter les jumeaux. Un jumeau est une personne qui a un lien avec une autre personne ayant les mêmes parents et le même sexe. L'appel au constructeur de la classe Jumeau doit entrainer la création des deux objets qui représentent les jumeaux, et seulement ces deux objets.

b- Proposez du code objet pour représenter les jumeaux. (4 points)

Exercice Bonus (pouvant rapporter jusqu'à 4 points, dans la limite de 20 points au total bien sur) :

On veut réaliser un programme qui permet de jouer à trouver un nombre entre 0 et 100 et dont l'interface ressemble à l'image suivante. Quand on saisit un nombre dans la zone de texte à gauche et qu'on appuie sur le bouton "soumettre", le texte à droite affiche "Trop petit", "Trop grand" ou "Vous avez gagné".

Écrivez une classe qui correspond à ce jeu.

(5)
(6)

CO RR

EC TIO N

Exercice 1

public abstract class Logement{

protected int surface;

protected Commune com;

public Logement(int s, Commune c){

this.surface = s;

this.com = c;

}

public int getSurface(){

return this.surface;

}

public abstract int prix();

}

public class Appartement extends Logement{

public Appartement(int s, Commune c){

super(s,c);

}

public int prix(){

return this.surface*this.com.prixMetreCarre();

} }

public class Maison extends Logement{

public Maison(int s, Commune c){

super(s,c);

}

public int prix(){

return (int) (this.surface*this.com.prixMetreCarre()*1.2);

} }

Exercice 2

public abstract class Section implements Numero{

protected int a,b,c;

public Section(){

this.a=1; this.b=0; this.c=0;

}

public void suivant(){

if(this.c==0){

if(this.b==0) this.a = this.a+1;

else this.b = this.b+1;

}

else this.c = this.c+1;

}

public void sousSection() throws java.lang.UnsupportedOperationException{

if(this.b==0) this.b = 1;

else{

if(this.c==0) this.c = 1;

else throw new java.lang.UnsupportedOperationException();

} }

public void surSection() throws java.lang.UnsupportedOperationException{

if(this.c!=0){ this.b = this.b+1; this.c = 0; } else{

if(this.b!=0){ this.a = this.a+1; this.b = 0; }

else throw new java.lang.UnsupportedOperationException();

} } }

public class Chiffres extends Section{

public Chiffres(){

(7)

CO RR

EC TIO N

super();

}

public String toString(){

String s = ""+a;

if(b!=0) s = s+"."+b;

if(c!=0) s = s+"."+c;

return s;

} }

Exercice 3

class Personne{

protected String n;

private Personne pere, mere;

private char sexe; // M ou F

public Personne(String n, char sexe, Personne pere, Personne mere){

this.n=n; this.pere=pere; this.mere=mere; this.sexe = sexe;

}

public static void main(String[] t){

Personne o = new Personne("Ouranos",'M',null,null);

Personne g = new Personne("Gaia",'F',null,null);

Personne c = new Personne("Cronos",'M',o,g);

} }

class Jumeau extends Personne{

private Jumeau j;

public Jumeau(String n1, String n2, char sexe, Personne pere, Personne mere){

super(n1,sexe,pere,mere);

this.j = new Jumeau(n2,sexe,pere,mere);

}

private Jumeau(String n, char sexe, Personne pere, Personne mere){

super(n,sexe,pere,mere);

} }

Exercice Bonus

import javax.swing.JFrame;

import javax.swing.JTextField;

import javax.swing.JLabel;

import javax.swing.Box;

import javax.swing.BoxLayout;

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

public class Jeu extends JFrame implements ActionListener{

private JTextField nb;

private JLabel message;

private int n; // entre 0 et 100 public Jeu(){

super("Deviner un nombre");

this.n = (int) (Math.random()*101);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.nb = new JTextField(10);

this.message = new JLabel("Proposez un nombre entre 0 et 100");

JButton jb = new JButton(" soumettre ");

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.nb);

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

b.add(jb);

(8)

CO RR

EC TIO N

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

b.add(this.message);

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

this.pack();

this.setVisible(true);

}

public void actionPerformed(ActionEvent e){

try{

int i = Integer.parseInt(this.nb.getText());

if(i==n) this.message.setText("Bravo, vous avez trouv\u00e9 !");

else{

if(i<n) this.message.setText("Trop petit !");

else this.message.setText("Trop grand !");

} }

catch(NumberFormatException ex){ ex.printStackTrace(); } }

public static void main(String[] t){

new Jeu();

} }

Références

Documents relatifs

On choisit au hasard et simultanément deux stylos parmi quatre stylos de couleur rouge, verte, noire et bleue.. Un singe tape successivement sur deux touches de chiffres d'une

Toutes les personnes qu'on veut afficher, en plus d'être des Displayable doivent avoir une direction et une vitesse. De plus, les personnes s'affichent sous forme d'un rond complété

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

Exercice Bonus (peut rapporter jusqu'à 4 points de plus dans la limite de 20/20) : écrivez un programme qui permet de saisir des notes dans des cases et d'obtenir la moyenne des

Q₂ Pour chacune des valeurs de k précédemment determinées, trouver tous les entiers réversibles de

Ce ne serait pas possible si la somme des chiffres (qu’il connaˆıt) pouvait correspondre ` a plusieurs des nombres de

On pose en colonne les nombres en représentation binaire et on additionne les chiffres de chaque colonne, en tenant compte de l’éventuelle retenue obtenues de la colonne