1.Répondez aux questions suivantes:

publicité
Programmation Orientée Objet
IUT Lumière, DUT STID 2
2007-2008
Pierre-Edouard Portier, Pierre Parrend
Consignes:
– Vous disposez de
– 1 heure pour la partie sur papier
– 1 heure pour la partie sur machine
– Les document autorisés sont:
– partie 1: aucun
– partie 2: documents papier uniquement (cours, extraits de code).
– Connectez vous aux machines avec le login suivants
– login: examstid; mdp: stid
Examen : partie 1 (sur papier)
1.Répondez aux questions suivantes:
Donner le nom et la définition des quatres grandes familles de langages de programmation
(les exemples sont données en plus)
•
–
–
–
–
•
Langages de programmation fonctionnels: basé sur l'évaluation de fonctions mathématiques
(Erlang, Lisp, XSLT)
Langages de programmation logiques: exploitation des propriétés de la logique mathématique
(Prolog)
Langages de programmation procéduraux: caractérisé par du code modulaire et des appels de
procédures entre modules (VB, C, Perl, Php)
Langages de programmation Objets: les applications sont subdivisées entre entités autonomes
contenant données et fonctions, les objets (Java, C++, C#).
Ecrivez une classe 'Bonjour', dans un package 'salutation', qui affiche 'Bonjour Stid'
package salutation;
public class Bonjour
{
public static void main(String[] args)
{
System.out.println(« Bonjour Stid »);
}
}
•
Donnez un exemple simple de diagramme de séquence, avec 2 objets et un appel de méthode
Coco
Rico
boitDuPorto()
•
Expliquez la différence entre une classe et un objet
Classe: définition d'un type de donnée. Une classe représente l'unité de programmation. On peut
exécuter directement le code d'une classe si et seulement si ce code est 'static'.
Objet: représentation d'un type de donnée en mémoire. Un objet représente l'unité d'exécution. Un
programme objet se déroule selon les interactions entre ses objets.
•
Donnez les représentations UML de l'héritage (2 classes) et de l'implémentation d'interface (1
interface et 1 classe)
Héritage:
•
Donnez deux manières d'implémenter un compteur: avec 'while' et avec 'for'.
int i=0;
while(i<5)
{
...
i++;
}
et
for(int i=0;i<5;i++)
{
...
}
2.Réalisez le diagramme de classe qui correspond au scénario
suivant:
Vous réalisez une application de suivi d'animaux dans un zoo.
Les classes représentées sont les suivantes:
– Soigneur, qui contient une référence vers la classe Animal,
– Animal, qui contient un attribut 'nom', et une méthode manger(),
– Ours, qui hérite de Animal, et contient une méthode 'grogner()',
– Lion, qui hérite de Animal, et contient une méthode 'rugir()'.
Examen : partie 2 (sur machine)
3.Énoncé
Vous devez modéliser un montage expérimental composé de bacs, de tuyaux et de robinets. La
figure 1. vous donne le montage à modéliser.
Figure 1. Le Montage
La figure 2. vous donne le schéma UML de l'application.
Figure 2. Schéma UML de l'application
Un montage est constitué d'un ensemble de bacs. Un Bac est un Element. Un Tuyau et un
Robinet sont aussi des éléments.
Un élément peut avoir plusieurs sources, il a 0 ou 1 destination. Dans le cas de notre montage, les
sources du bac n°3 sont les deux tuyaux. La source du tuyau n°1 est le robinet n°1. La source du
tuyau n°2 est le robinet n°2. La source du robinet n° 1 est le bac n°1. La source du robinet n°2 est le
bac n°2.
La méthode fermer d'un élément appelle les méthodes fermer de toutes ses sources.
La méthode ouvrir d'un élément appelle les méthodes ouvrir de toutes ses sources.
Un robinet redéfinit les méthodes fermer et ouvrir.
La méthode demarrer de Montage appelle les méthodes ouvrir de tous ses Bacs. La méthode
stopper de Montage appelle les méthodes fermer de tous ses Bacs.
Un Bac est maintenable, c'est-à-dire qu'il peut être nettoyé et réparé.
La méthode controller de Montage sert à nettoyer tous les bacs.
Après nbMaxUtilisations du montage, il faut nettoyer tous ses bacs.
Nous vous donnons le code de la classe Application :
Application.java:
package examen;
import examen.experience.Bac;
import examen.experience.Montage;
import examen.experience.Robinet;
import examen.experience.Tuyau;
public class Application {
private Montage montage;
public Application () {
this.montage = new Montage(3);
}
public void start () {
Bac bac1 = new Bac("Bac n°1");
Bac bac2 = new Bac("Bac n°2");
Bac bac3 = new Bac("Bac n°3");
Tuyau tuyau1 = new Tuyau("Tuyau n°1");
Tuyau tuyau2 = new Tuyau("Tuyau n°2");
Robinet robinet1 = new Robinet("Robinet n°1");
Robinet robinet2 = new Robinet("Robinet n°2");
bac3.ajouterSource(tuyau1);
bac3.ajouterSource(tuyau2);
tuyau1.ajouterSource(robinet1);
tuyau2.ajouterSource(robinet2);
robinet1.ajouterSource(bac1);
robinet2.ajouterSource(bac2);
montage.ajouterBac(bac1);
montage.ajouterBac(bac2);
montage.ajouterBac(bac3);
for(int i=0 ; i<4 ; i++)
{
}
montage.demarrer();
montage.stopper();
}
public static void main(String[] args)
{
Application appli = new Application();
appli.start();
}
}
Montage.java
package examen.experience;
import java.util.ArrayList;
public class Montage {
protected ArrayList<Bac> bacs;
private int nbUtilisations = 0;
private int nbUtilisationsMax;
public Montage (int nbUtilisationsMax) {
this.nbUtilisationsMax = nbUtilisationsMax;
this.bacs = new ArrayList<Bac>();
}
public void stopper () {
for(int i=0 ; i<bacs.size() ; i++)
{
bacs.get(i).fermer();
}
if(nbUtilisations == nbUtilisationsMax)
{
controller();
}
}
public void demarrer () {
for(int i=0 ; i<bacs.size() ; i++)
{
bacs.get(i).ouvrir();
}
nbUtilisations++;
}
public void controller () {
for(int i=0 ; i<bacs.size() ; i++)
{
bacs.get(i).nettoyer();
}
}
}
public void ajouterBac (Bac bac) {
bacs.add(bac);
}
Maitenable.java
package examen.experience;
public interface Maintenable {
public void nettoyer ();
public void reparer ();
}
Element.java
package examen.experience;
import java.util.ArrayList;
public abstract class Element {
protected ArrayList<Element> sources;
protected Element destination;
protected String name;
public Element (String name) {
sources = new ArrayList<Element>();
this.name = name;
}
public void fermer () {
for(int i=0 ; i<sources.size() ; i++)
{
sources.get(i).fermer();
}
}
public void ouvrir () {
for(int i=0 ; i<sources.size() ; i++)
{
sources.get(i).ouvrir();
}
}
}
public void ajouterSource (Element source) {
sources.add(source);
source.destination = this;
}
Bac.java
package examen.experience;
public class Bac extends Element implements Maintenable {
public Bac (String name) {
super(name);
}
public void nettoyer () {
System.out.println(this.name + " nettoye");
}
}
public void reparer () {
System.out.println(this.name + " repare");
}
Robinet.java
package examen.experience;
public class Robinet extends Element {
public Robinet (String name) {
super(name);
}
public void fermer () {
System.out.println(this.name + " ferme");
}
public void ouvrir () {
System.out.println(this.name + " ouvert");
}
}
Tuyau.java
package examen.experience;
public class Tuyau extends Element {
public Tuyau (String name) {
super(name);
}
}
Téléchargement