Vous êtes sur la page 1sur 5

Université de Mostaganem

2ème année de licence informatique


Matière : POO 2019-2020

Devoir POO
Ce devoir est à envoyer à l’adresse: abidm7475@gmail.com en précisant vos noms et prénoms
au plus tard le 04/10/2020 à 23h59
Attention : Tout copié-collé sera sanctionné
Remarques : Des exemples personnels et originaux sont demandés dans ce devoir en dehors de ceux
déjà vus en cours et en TP.
Partie théorique : (10 points)
1. La programmation orientée objet s’appuie sur des concepts fondamentaux (4pts)
- Lister ces concepts
- Donner des exemples personnalisés pour illustrer chacun de ces concepts
(1) Classe et objet
Exemple :
Une classe « Pays » qui possède plusieurs attributs et méthodes.
L’objet « Algérie » qui est une instance de la classe pays.
(2) Encapsulation
Exemple :
Dans la classe « Pays » les attributs tels que « le nom », « la superficie » ou encore « la monnaie » ne
sont accessibles qu’à partir de certaines méthodes (constructeurs, accesseur ou mutateurs) par exemple
getNom ou setNom, getSuperficie ou setSuperficie… grâce au principe de visibilité : « privé » pour
les attribut et « public » pour les méthodes.
(3) Héritage (ou généralisation/spécialisation)
Exemple :
Classe « Principauté » qui hérite de la classe « Pays » et qui possède un prince comme attribut en plus
(4) Polymorphisme
Exemple :
Dans la classe « Habitant » il y a donc une méthode « vivre » très générale.
Cette méthode va s’adapter selon la catégorie d’habitants.
Si on considère par exemple que la classe Citadin hérite de la classe Habitant alors la méthode vivre
pour un Citadin c’est de vivre en ville. Par contre si une autre classe Campagnard hérite de la classe
Habitant alors la méthode vivre pour un Campagnard c’est de vivre à la campagne.
Habitant

vivre()

Citadin Campagnard

vivre(){ vivre(){
// vivre en ville //vivre à la campagne
}
}

2. Un programme écrit en Java peut s’exécuter sur n’importe quelle plateforme (1pt)
- Sous quelle(s) condition(s) cette phrase est vraie ?
- Lister 3 différentes plateformes que vous connaissez
Cette condition est vraie à condition qu’une machine virtuelle Java (ou JVM) soit installée et cela
quelle que soit la plateforme : Windows, Linux, Unix, MacOS, Solaris, Android,…
3. Expliquer avec vos propres mots (ou schémas) pourquoi l’instruction « for… each » pour le
parcours d’un tableau ne permet pas de modifier le contenu de ce tableau. (2pts)
La boucle for…each ne permet pas la modification des éléments d’un tableau car elle agit uniquement
sur une copie des éléments de ce tableau.
4. Soit la classe suivante : (1pts)
public class C {
int att ;
void meth1 (int p) {
att+=p;
}

void meth2 (int p) {


att-=p;
}

void meth3 (int p, C obj) {


this.meth1(p);
obj.meth2(p);
}

- Expliquer à quoi correspond « this » dans cet exemple.


- Selon vous, quelle(s) méthode(s) pourrai(en)t être statique (justifier votre réponse) ?
« this » fait référence à l’objet courant à travers lequel on fait l’appel. Par exemple si l’objet courant
est « ob0 » alors on fait appel à meth1 de l’objet « ob0 ».
Aucune des méthodes n’est statique car elles s’appuient sur des attributs et des méthodes non
statiques.
5. Soit le texte suivant : (2pts)
Une garderie pour enfant est gérée par un directeur ou une directrice.
La garderie dispose de différents espaces d’accueil : une cour où les enfants peuvent jouer ainsi que
différentes pièces. Une pièce dédiée à la sieste, un réfectoire où les enfants reçoivent leur déjeuner et
leur goûter, des ateliers créatifs (pour la peinture, la musique, la lecture,…) ainsi que des salles
d'études. Chacun de ces espaces a une certaine superficie ainsi qu’un nombre limité de places (nombre
de personnes max.). Il est également possible d’augmenter ou de diminuer la capacité d’un espace.
- D’après vous quelles classes peuvent être définies (plusieurs réponses sont possibles) ?
- Quelles sont les caractéristiques de chaque classe (attributs et méthodes) ?
Classes :
class Garderie {
Personne directeur
Espace Liste_espace []
ouvrirGarderie()
fermerGarderie()
}

class Espace {
double superficie
int capacité
void augmenter_espace(int capacité){
this.capacité += capacité
}
void diminuer_espace(int capacité){
this.capacité -= capacité
}

}
class Cour hérite d’Espace {
String jeux

}
class Sieste hérite d’Espace {
int nombre_lit

}
class Réfectoire hérite d’Espace {
int nombre_plateau
}
class AtelierCréatif {
String type
int nb_instrument

}
class salleEtude {
étudier()

}
class Enfant hérite Personne
class Personne {
String nom
String Prénom

Partie pratique : (10 points)


Critères de notation
- Les exemples de classes choisies sont originaux, personnalisés et logiques.
- Le programme compile et s’exécute. (1pts)
- La programmation doit être bien faite et modulaire (indentation, commentaires, …)
1. Définir une classe de votre choix qui modélise un phénomène (inspiré de la nature, d’objets
qui vous entourent, de relations sociales, …). Cette classe définie doit avoir :
- Des attributs
- Des méthodes
- Un constructeur qui permet d’initialiser ces attributs (3pts)
2. Instancier deux objets de cette classe et afficher les informations de ces objets (1pt)
3. Montrer en le codant comment on fait pour afficher les différents attributs de ces objets tout en
respectant le principe d’encapsulation. (0,5 pt)
4. Définir une méthode statique qui s’applique naturellement à votre classe. Expliquer en
commentaires pourquoi vous considérez que cette méthode doit être statique. (1,5 pts)
5. Proposer deux classes qui héritent de la première classe. (1pt)
6. Définir des constructeurs pour ces classes ainsi que des attributs et des méthodes. (1pt)
7. Instancier un objet pour chaque classe. (1pt)
Remarque :
Les classes devront contenir des attributs et des méthodes logiques et cohérentes avec votre
modélisation.
Une classe nommée « TesterProg » sera également définie avec la méthode main afin de tester le
programme.

Vous aimerez peut-être aussi