Vous êtes sur la page 1sur 6

ECOLE SUPÉRIEURE D’ECONOMIE NUMÉRIQUE,

UNIVERSITÉ DE MANOUBA
EXAMEN : SESSION PRINCIPALE

Module Prog. orientée objet Date Janvier 2017


Enseignant Chiheb-Eddine Ben N’Cir Durée 2h

Exercice 1 : (15pts)
On propose de construire une petite application pour la gestion des factures achats et des factures ventes pour
une petite société commerciale. Soit la conception objet suivante d’une partie de l’application. Répondre aux
questions ci-dessous en utilisant le langage JAVA sachant que la visibilité de tous les attributs est privée.
Remarque: vous pouvez utiliser n’importe quelle méthode affichée dans ce diagramme sans donner son
code source (supposer que la méthode est déjà définie).
Classe Article :
1. Déclaré les attributs (visibilité privée) de la classe Article.
private static int numArt // il peut ajouter =0
private Strring libelle

2. Donner le code source du constructeur Article (String libelle) sachant que le numéro article doit être
géré en séquentiel lors de la création. (Libellé est la désignation de l’article)
public article (String libelle){
numArt=NumArt+1 ;
this,libelle=libelle ;
}

3. Donner le code source de la méthode SaisirArticle() permettant de donner la main à l’utilisateur


pour saisir les informations relatives à un article.
public void SaisirArticle (){
Scanner Sc=new Scanner(System,in) ;
S.O.P(‘Donner le libellé de l’article’) ;
libelle=sc,nextline() ;

Classe LigneFacture :

4. Donner le code source du constructeur de la classe LigneFacture qui permet de créer un objet
“LigneFacture” dont la valeur de ses attributs sont passées en paramètre. (Donner 0 s’il ne fait pas
correctement la déclaration de l’article dans les paramètres

public LigneFacture (Article article, double prix, int qte ){


this,article=article ;
this,prix=prix ;
this,qte=qte

5. Donner le code source de la méthode AfficherLigFacture() permettant d’afficher les informations


relatives à une ligne facture. (donner 0 s’il ne fait pas appel à la méthode afficherarticle() )
public void AfficherLigFacture (){
article,AfficherArticle() ;
S.O.P(‘le prix est ‘+prix) ;
S.O.P(‘la quantité est ‘+qte) ;

}
6. Donner le code source des accesseurs (get et set) des attributs de la classe LigneFactures

public void setQte( int qte){


this.qte=qte ;
}
public void getQte(){
return qte ;
}
public void setArticle (Article article){this.article=article;}
public void getArticle(){return article}
meme chose pour prix

Classe Facture, Facture Vente, Facture Achat :

7. Donner la déclaration de la classe abstraite Facture qui implémente l’interface OperationFacture.

Public abstract Facture implements OperationFacture

8. Est ce qu’on peut créer un constructeur à la classe abstraite Facture permettant d’initialiser les
valeurs des attributs passées en paramètre ? Si oui quel est son utilité ? sinon pourquoi ?

oui on peut créer un constructeur pour la classe abstraite. on ne peut pas faire appel à ce constructeur
directement mais son utilité est de ne pas refaire le code de d’initialisation des paramètres dans les
classes qui héritent de la classe Facture,

9. Donner le code source de la méthode AfficherFacture( ) permettant d’afficher les


informations relatives à une Facture. (Donner 0 s’il ne fait appel aux methodes afficherdatedate() et s’il ne
fait pas correctement l’affiche des lignes factures)

public void AfficherFacture (){


S.O.P(‘Le numéro de la facture est ‘+numFact) ;
date,AfficherDate() ;
for(i=0 ; i<ligneFact.length;i++)
{ligneFact[i].AfficherLigFacture() ;
}
}

10. Donner le code source de la méthode AfficherFacture( ) permettant d’afficher les


informations relatives à une Facture vente. (la note est divisée entre l’exactitude de la redéfinition et l’appel
de la méthode afficherDetailclient())

public void AfficherFacture (){


super.AfficherFacture() ;
client.AfficherDetailclient()
}
11. Donner le code source de la méthode TotalFacture( ) permettant de retourner le montant total
de la facture. (la somme des prix * qte pour toute les lignes. (Donner 0 s’il ne fait pas appel aux methodes
getprix() et getQte() ) Considerer juste s’il fait la somme des prix avec getprix() sans utiliser qte,

public Double TotalFacture (){


double Total=0 ;
for(i=0 ; i<ligneFact.length;i++)
{Total= Total+ (ligneFact[i].getPrix()*ligneFact[i].getQte() ) ;
}
return (Total) ;
}

Classe GestionFacture (contenant la méthode main)


On suppose que nous avons une classe « GestionFacture » qui contient une méthode main().
En se basant sur le principe du Polymorphisme, donner le code source de la méthode main () qui permet :
12. 1- Déclarer un tableau « FACT » qui peut contenir 10 Factures (achats et ventes).
2- Pour chaque facture dans le tableau « FACT » :
2.1) demander à l’utilisateur s’il veut ajouter une facture vente ou achat
2.2) selon le choix de l’utilisateur : créer une nouvelle facture vide.
2.3) Saisir les informations relatives à la facture Vente ou Achat.
3- Pour chaque facture dans le tableau « FACT » afficher le nombre de lignes de chaque facture.
4- Afficher le nombre total de facture sans boucler sur les factures une par une.

chaque sous question est sur 1 points (total 4 points pour cette question)), s’il y a des erreurs de
syntaxe donner la moitié de la note

public static void main()(String[] args){


Scanner M=new Scanner(System.in) ;
int user ;
Facture FACT[]= new Facture[10] ; (1point)

for(inti=0, i<FACT.length;i++)
{
SOP(’ taper 1 pour facture vente ou 2 pour Facture achat ’)
user=M.nexInt() ; //lire la valeur donner par l’utilisateur 1point
if(user==1) { FACT[i]=new FactureVente() ; }
else if (user==2) { FACT[i]=new FactureAchat() ; }
else SOP(‘Erreur’) ;

FACT[i].saisirFacture()
}
for(inti=0 ; i<FACT.length;i++)
{
int nbligne=FACT[i].getLigneFact().length ; 1 point //il faut utiliser méthode get de l’attribut
ligneFact sinon c’est faux)
SOP(‘ le nombre de ligne de la facture’+i + ‘est ‘ + nbligne) ;
}

SOP (‘le nombre total de facture est’ +getnumFact() ) ; 1 point //il faut utiliser méthode get de
l’attribut statique numFact sinon c’est faux)
}

Exercice 2 (5pts) : Donner la(s) bonne(s) réponse(s). Pour chaque question donner le numéro de la
question et les lettres correspondant aux bonnes réponses. // chaque question est sur 1 point sauf
question 4 il y a deux sous question sur 0,5 chacun. S’il y plusieurs réponses justes, l’etudiant peut
donner des réponse manquantes on donne la moitié de la note, s’il a une réponse juste avec des
réponses non correctes considérer 0 pour cette question,

1) public class Calculator {


int num = 100;
public void calc(int num) {
this.num = num * 10; }
public void printNum(){ System.out.println(num); }
Public static void main(String[] args) {
Calculator obj = new Calculator ();
obj.calc(2); obj.printNum(); } }

Le résultat est :
a) 20 b) 100 c) 1000 d) 2 // reponse correcte a

2) Etant donnée :
- A et E sont des classes
- B et D sont des interfaces
- C est une classe abstraite

Quelle(s) est (sont) la (les) déclaration(s) juste(s)


a) class F implements B,C{ } b) class F implements B{ } c) class F extends A,E{ }
d) class F extends E{ } e) class F implements B,D{ }
// reponse correcte b, d, e

3) le langage Java est un langage :


a) Interprété b) compilé c) compilé et interprété
d) nécessite une machine virtuelle Java e) nécessite seulement netbeans pour s’exécuter
// reponse correcte c, d
4) public class C1 {
public int m ;
public c1 (int m) {
this.m = m; }
public static void main(String[] args) {
C1 obj1 = new C1 (10);
C1 obj2= new C1(10) ; C1 obj3=new C1(5); obj3=obj1;
System.out.print(obj1.m); System.out.print(obj3.m); System.out.print(obj2.m); } }

4.1) Le programme affiche:


a) 101010 b)10510 c) 5510 d) 10105
// réponse correcte a

4.2) a) if (obj1==obj2) retourne “Vrai”


b) if (obj1==obj2) retourne “Faux”
c) obj1.equals(obj3) retourne “vrai”
d) obj1.equals(obj3) retourne “faux”
e) obj1.equals(obj2) retourne “vrai”
// réponse correcte b,c,e

5) public class C1 {
public int m ;
public c1 (int m) {
this.m = m; }
public static void main(String[] args) {
C1 obj1 = new C1 (10);
C1 obj2= new C1(10) ; C1 obj3=new C1(5); obj1=obj3;
System.out.print(obj1.m); System.out.print(obj3.m); System.out.print(obj2.m); } }

Le programme affiche:
a) 101010 b)10510 c) 5510 d) 10105
// reponse correcte c

Vous aimerez peut-être aussi