ControleJava2012 v5 - INFRES, Telecom ParisTech

Transcription

ControleJava2012 v5 - INFRES, Telecom ParisTech
INF 103 – Langage JAVA Promotion 2015 Contrôle du 17 décembre 2012 Durée : 1h30 Nom : ……………………….………………. Prénom : ………………….……………………. Casier : ……….… Groupe : ………….. Ecrire les réponses directement sur les feuilles du sujet dans les cases prévues à cet effet. Le barème sur 15 points est donné à titre indicatif et pourra être revu au moment de la correction si les correcteurs l’estiment nécessaire. Le sujet comporte 9 pages. Vous avez droit à une feuille A4 manuscrite que vous remplissez avec du cours ou ce que vous voulez. 1. (3 point) Qu’est-­‐ce que l’encapsulation des données en orienté-­‐objet ? Pourquoi doit-­‐on encapsuler les données ? Transparents base de la programmation : n°35 Transparents base de la programmation : n° 36 et suivants. • Valider les valeurs que l’on donne aux attributs. • Cohérence et intégrité des structures de données. • Cohérence de l’application. • Transparence des misez en œuvre. 1 / 9 2. (1 point) Soient A une classe et B une classe fille de A. Soit les deux déclarations suivantes : A a ;
B b ;
Entourer les lignes qui ne compilent pas et pour chaque ligne entourée, donner la raison : a = new B() ; b = new A() ;
a = (A)new B() ; b = (B)new A()
2 / 9 3. (2,5 points) Qu'est-ce l'itération ? Identifiez deux moyens d'en faire une. Voir JavaProgrammationMéthodes.html, transparents 34 et suivant. 3 / 9 On désire modéliser les lots d’un immeuble en copropriété. Dans ces lots, on trouve des appartements, des caves et des parkings. Un appartement est caractérisé par son propriétaire, sa superficie et son étage. Un parking est caractérisé par son propriétaire et sa superficie. Une cave est également caractérisée par son propriétaire et sa superficie. On admettra que le propriétaire est nommé par une chaîne de caractères. 4. (1 points) Ecrire une classe Lot qui sera la classe de base des classes Appartement, Parking et Cave. public abstract class Lot
{
private String proprietaire ;
private double superficie ;
public Lot(String proprietaire, double superficie)
{
this.proprietaire = proprietaire ;
this.superficie
= superficie ;
}
public final String getProprietaire()
{
return proprietaire ;
}
public final double getSuperficie()
{
return superficie ;
}
//*** eventuellement setProprietaire(String proprietaire)
}
En effet, tous les lots ont en commun un propriétaire et une superficie. 4 / 9 5. (0,5 points) Ecrire la classe Appartement. public final class Appartement extends Lot
{
private final int etage ;
public Appartement(String proprietaire,
double superficie,
int
etage)
{
super(proprietaire,superficie) ;
this.etage = etage ;
}
}
public int getEtage()
{
return etage ;
}
6. (0,5 points) Ecrire la classe Parking. public final class Parking extends Lot
{
public Parking(String proprietaire,
double superficie)
{
super(proprietaire,superficie) ;
}
}
5 / 9 7. (0,5 point) Ecrire la classe Cave. public final class Cave extends Lot
{
public Cave(String proprietaire,
double superficie)
{
super(proprietaire,superficie) ;
}
}
8. (1 point) Déclarer une classe Lots pouvant contenir un nombre quelconque de lots. import java.util.* ;
public final class Lots
{
private ArrayList<Lot> lots = new ArrayList<Lot>() ;
public void add(Lot lot)
{
lots.add(lot) ;
}
// *** eventuellement une méthode remove(Lot lot)
}
6 / 9 9. (1 point) Déclarer une méthode main, une variable lots de type Lots et l’initialiser avec un certain nombre d’appartements, de parkings et de caves. public class Main
{
public final void main(String args)
{
Lots lots = new Lots() ;
lots.add(new Appartement("Patrick Bellot", 100.0, 4)) ;
lots.add(new Appartement("Laurent Pautet", 99.0, 3)) ;
lots.add(new Parking("Ada Diaconescu",
25.0)) ;
lots.add(new Parking("Jean-Claude Dufourd”, 24.0)) ;
lots.add(new Cave("Remi Sharrock”, 15.0)) ;
}
}
7 / 9 10. (2,5 points) On désire calculer les tantièmes des lots. Les tantièmes se calculent de la manière suivante : le tantième d’un appartement est obtenu en multipliant sa superficie par 300 et en y ajoutant 10 fois l’étage, le tantième d’un parking est obtenu en multipliant sa superficie par 200 et le tantième d’une cave est obtenu en multipliant sa superficie par 100. Modifier le programme pour être capable de calculer les tantièmes d’un lot avec une méthode double tantieme(). Dans la classe Lot, on déclare la méthode abstraite : public abstract class Lot
{
…
public abstract double tantieme() ;
}
Puis, on déclare la méthode dans chacune des sous-­‐classes : public final class Appartement extends Lot
{
…
public double tantieme()
{
return 300.0 * getSuperficie() + 10.0 * getEtage() ;
}
}
public final class Parking()
{
…
public double tantieme()
{
return 200.0 * getSuperficie() ;
}
}
public final class Cave()
{
…
public double tantieme()
{
return 100.0 * getSuperficie() ;
}
}
8 / 9 11. (1 point) Dans la classe Lots, écrire une méthode : double tantiemes(String proprietaire)
qui calcule le total des tantièmes dans les lots du propriétaire. public final Lots
{
…
public double tantiemes(String proprietaire)
{
double somme = 0.0 ;
for (Lot lot : lots) {
if (lot.getProprietaire().equals(proprietaire))
somme += lot.tantieme() ;
}
}
return somme ;
}
12. (0.5 point) Compléter le programme de la question 9 pour qu’il affiche le total des tantièmes. System.out.println(ʺ″Tantiemes : ʺ″ + lots.tantiemes()) ;
FIN DU SUJET 9 / 9