Publier

INFO-H-301 Modélisation et programmation orientée objet

< Retour

Bersini Mai 2011 - 9 Jun 2011

Je suis passée la dernière de la journée, j'ai eu droit à deux questions! (tous les autres une seule rassurez-vous)
D'abord "parlez-moi de la persistance des données" Savoir expliquer les 3 (fichiers, sérialisation et BDD) inconvénients, pourquoi on est passé à autre chose, ... Savoir pour la BDD comment implémenter ça plus ou moins (une clé en BDD qui n'existe pas en POO, ...)
Et savoir pour les 3 en gros comment s'écrivent les commandes (write en castant, ...)
Deuxième question: le singleton. Lui écrire le code et (à mon avis) parler un peu là-dessus.
Voilà, c'est pas très représentatif des questions qui étaient tombés jusqu'à maintenant mais ça peut tomber!

INFO-H-301 - 9 Jun 2010

On a deux classes A et B, qui ont chacune comme attribut un int (a et b). De plus, A est liée à B par un lien de composition (A est composé d'un B).
Il écrit le code suivant en JAVA :
A a1 = new A(5,6);
A a2 = new A(5,6);
a1 = a2;
Question 1 : que se passe-t-il au niveau de la mémoire ?
Comme on est en JAVA, les objets sont passés par référence, donc quand on fait a1 = a2, on fait pointer a1 vers l'objet a2. Par conséquent, il n'y a plus rien qui pointe sur ce qu'il y avait en a1, et donc le Garbage Collector vire l'objet de la mémoire, ainsi que l'objet B qu'il contenait.
Question 2 : même chose, mais en C++.
En C++, le passage se fait par valeur, donc on écrase le contenu de a1 avec ce qu'il y avait en a2 (mais a1 et a2 restent deux objets séparés, et accessibles !)
Question 3 : comment transformer le code JAVA pour qu'il se comporte comme le C++ ?
Il faut utiliser clone().
Question 4 : réimplémenter clone()...
public Object clone() {
A newA = (A)super.clone();
newA.b = (B)b.clone();
return newA;
}
En n'oubliant pas de déclarer A et B comme Cloneable...

INFO-H-301 - 27 Apr 2011

Ma question etait pas dans le syllabus de Bersini (jcomprend tjrs pas pourquoi il l'a posée d'ailleurs!) C'est :
En java, quand on crée un tableau style entier 2x2, combien d'objets sont créés en réalité?
Rep : 7 (le chiffre magique 😉
1 pour le "pointeur" vers le tableau, 1 pour chaque ligne de la matrice (2), et 4 pour chaque entier du tableau... et paf, 3 ECTS 😀

INFO-H-301 - 4 Sep 2007

Voici ma question de ce matin:
On a trois classes A,B,C. A et B sont liées par un lien d'association et B et C sont liées par un lien de composition. Il donne ensuite un diagramme de séquence du genre:
" "a:A" "b:B" "c:C
" "|" "|" "|
" "|___faireB()________ >|___faireC()_______>|
" "|" "|" "|
" "|___________________> X ----------------->X
" "|" "|" "|
(rem:les fleches du bas indique qu'on effectue une procedure d'éliminationd es objets)
Question: donnez le code java représenté par ce diagramme de classe et de séquence. Expliquez la procedure l'élimination des objets.
Alors pour le diagramme UML , voir cours. Pour la procedure de suppression il faut dire qu'on invoque explicitement le garbage collector depuis A pour supprimer B avec finalize() et comme C est lié à B par un lien de composition, il sera éliminé qd B le sera. Mais Bersini veut savoir comment ca se passe dans la memoire cad comment peut on etre sure que tous les referents de l'objet B et de l'objet C seront éliminé!!
En somme il faut dire que pour l'objet C, comme il est instancié et crée dans c, tous ses referents sont assurée de disparaitre avec l'objet B. Mais pour le referent B on ne sait pas car il n'est que déclarer dans A(cf lien association).
Voila vla...

INFO-H-301 - 4 Sep 2007

Voici ma question de ce matin:
On a trois classes A,B,C. A et B sont liées par un lien d'association et B et C sont liées par un lien de composition. Il donne ensuite un diagramme de séquence du genre:
a:A b:B c:C
| | |
|___faireB()________ >|___faireC()________|
| | |
|___________________> X ----------------->X
| | |
(rem:les fleches du bas indique qu'on effectue une procedure d'éliminationd es objets)
Question: donnez le code java représenté par ce diagramme de classe et de séquence. Expliquez la procedure l'élimination des objets.
Alors pour le diagramme UML , voir cours. Pour la procedure de suppression il faut dire qu'on invoque explicitement le garbage collector depuis A pour supprimer B avec finalize() et comme C est lié à B par un lien de composition, il sera éliminé qd B le sera. Mais Bersini veut savoir comment ca se passe dans la memoire cad comment peut on etre sure que tous les referents de l'objet B et de l'objet C seront éliminé!!
En somme il faut dire que pour l'objet C, comme il est instancié et crée dans c, tous ses referents sont assurée de disparaitre avec l'objet B. Mais pour le referent B on ne sait pas car il n'est que déclarer dans A(cf lien association).
Voila vla...

INFO-H-301 - 10 Jun 1995

Il écrit au tableau:
public class A
{
private int a;
public A(int a)
{
this.a=a;
}
public void IncA()
{
a++;
}
}
public class Principale
{
public void Inc(int b)
{
b++;
}
public static void main(String []args)
{
A a=new A(5);
int b=5;
a.IncA();
Inc(b);
}
}
Et la question était: que vaut l'entier dans a et que vaut l'entier b?
Il fallait penser au fait que dans java, tout objet est passé par référence SAUF les objets de type primitif...comme notre entier b qui est passé par valeur. Bref, "a"=6 tandis que b=5.
J'ai très bien pu lui expliquer tout ce qui se passait, mais je n'ai pas pensé sur le moment à la particularité des objets primitifs. Il m'a laissé mariner pendant 10min puis m'a dit que je n'avais rien compris aux bases de la programmation OO. Je ne vois toujours pas en quoi cette question démontre la connaissance de l'OO, d'après moi, c'est une particularité du language JAVA.
GOOD LUCK, car ça se joue à ça.

INFO-H-301 - 21 Apr 2007

alors moi j'ai eu, après la défense du projet :
2 classes A et B, avec une association (ou dépendance je sais plus)
la classe A possède donc un objet de type B
ensuite il instancie 1 objet de A et m'a demandé comment faire une copie de a ? et quels problèmes peuvent survenir.
J'ai dis qu'il fallait utiliser la méthode clone() de la classe objet
il m'a demandé de faire un petit dessin pour expliquer ce qu'il se passait dans la mémoire, là j'ai un peu cafouillé mais il fallait simplement faire un objet a1 qui pointait vers un objet b.
ensuite un objet a2 mais qui pointe vers le même objet b <= c'est là que ça peut etre embetant donc comment faire pour avoir 2 trucs indépendants (clonage en profondeur quoi...)
bon bin là denouveau un peu lent à la détente moi...
pour me mettre sur la voie il me dit
"qu'est ce que java incite de faire?"
"bon dans la classe objet, la méthode clone est protected, (c quoi protected il me demande)"
tout ça pour que je lui sorte qu'il fallait redéfinir la méthode clone dans la classe A
avec un b2=b.clone() ou qqch du genre
il m'a dit "ah bin on y est arrivé c'est bon , ok!"
bye bye
A noter que le tout premier type a être entré à simplement eu 2 classes A et B (B fille de A) et du écrire les classes... (le mot magique était extends) il est resté 3 min...
y a également eu des histoires de polymorphisme (joueur = gardien...) et de garbage
aussi des histoires sur les interfaces et enfin une question sur le multithreading
bref en arrivant et en discutant avec le premier gars on se dit : "ahaha berber les doigts dans le pif" et puis c'est plutot lui qui nous passe à la broche...
note : il file pas les points

INFO-H-301 - 31 Aug 2006

hello,
alors g eut:
on a 3 classes:A,B,C et une interface IA
la classe C a un lien de composition vers la classe A.La classe B hérite de A et implémente l'interface IA.
Ds l'interface IA il y a une méthode faire A.
Pour cki est du diag de séquence on a un envoi de message de C sur un objet c vers B sur un objet b.
coder ça en java et faire un envoi de message ss voir B(doffice si ya une interface c pas fait pour les chiens:))...
en gros faut créer une méthode faire C ds C ou a lintérieur ya faire A et lappeler du main et introduire le lien de composition avec la classe A mais ça c texto ds le bookin,on crée un objet ds le constructeur grâce au new en tenant compte du principe de substitution(superclasse peut tout faire donc le typage statik de lobjet B peut être du type superclasse)...
voila je crois kya pas grd chose dautre a expliker,la dessus vous pouvez lui faire un joli 'ti baratin concernant lintérêt des interfaces et sur le principe de substitution comme ça vous lui montrer ke vous avez lu son passionnant boukin avec son humour bien lourdeau..enfin soit:p

INFO-H-301 - 30 Aug 2006

Salut j'ai passé l'exam ce matin et voici la question qui m'a été posée:
Bersini m'a donné un diagramme de classe et un diagramme de séquence et il voulait que je lui explique ce à quoi ça correspondait en lignes de code...
Diagramme de classe :
--> un classe A ayant un lien de composition avec une classe abstraite B
--> 3 classe C, D et E qui héritent de B
--> la classe D contient une methode faireD()
--> Cas évident de POLYMORPHISME
Diagramme de séquence
A:a
|
| ---------> D:d
| |
| |
| faireD() |
|------------>|
| |
Le diagramme de séquence est un peu bizarre ( flèche du haut ) mais ça correspond juste au fait que la classe A possède une méthode qui crée un objet de la classe D
La flèche du bas représente, comme dans le cours, à un envoi de message
Commençons par le plus simple
public class C extends B
{
public C() {}
}
idem pour la classe E
public class D extends B
{
public D() {}
public void faireD() {}
}
public abstract class B()
{
public B() {}
}
Pour la création de l'objet de la classe D, j'avais choisi de le faire dans le constructeur de la classe A ...
public class A()
{
private B unB;
public A()
{
unB=new D();
}
public void envoiMessage()
{
(D)unB.faireD(); //je suis pas sûr de cette ligne....
}
}
ATTENTION !!!! Je ne suis pas sûr que la méthode envoiMessage() est correcte....
En effet je suis parvenu à tout lui expliquer correctement jusqu'à la ligne unB=newD() sur laquelle j'ai coincé...
Je suis parti en vrille avec le casting ou je ne sais plus quoi car la classe B est abstraite et qu'elle ne peut donc pas créer d'objet et donc il fallait créer directement un objet de la classe D mais je voyais plus très bien comment il fallait écrire ça correctement ....--> après cinq grosses minutes de réflexion infructueuses, Bersini a interrompu l'exam ( je crois que les 20-25 minutes d'exam étaient passées ).Il m'a dit qu'il me mettait 11, m'a donné la bonne ligne de code et m'a annoncé que j'avais rien compris au polymorphisme!!!!!!!!!!!!!!!!!!.......
Voila... j'étais le premier à passer... le deuxième a eu la même question que moi et je crois que la troisième personne a reçu un bout de code à corriger et à compléter....
J'espère que j'ai été clair dans mes explications.... et bon courage à ceux qui doivent encore passer cet exam....

INFO-H-301 - 5 Sep 2005

La question commence par un diagramme UML avec une class B qui hérite d'une class A et qui a un lien de composition avec une classe C. Il demande le squelette du code en C++ et en Java du diagramme.
Puis il pose plein de petites questions sur le garbage collector et des trucs du genre.
Attention, Mr Bersini se dit que nous metrisons le C++, donc les erreurs de syntaxe, les hésitations sur le code ( pointeurs et autre) sont considérés comme inacceptable.

INFO-H-301 - 3 Sep 2005

Une petite erreur dans le post précédent. Pour le cas (2), le problème est signalé à la compilation et on force le compilateur dans (3) à accepter ce genre de truc car nous, programmeurs intelligents savons que cela ne posera pas de problème.

INFO-H-301 - 3 Sep 2005

Il ma dessicné un schéma UML au tableau. Une classe A dont hérite une classe B qui est elle-même composée d'une class C.
Il écrit ensuite ( sur ses grandes feuilles de papier cul ) :
void static main()
{
A a1 = new A();
A a2 = new A();
B b1 = new B();
B b2 = new B();
a1 = a2; //(1)
b1 = a2; //(2)
a1 = b1; //(3)
b1 = b2; //(4)
}
Il demande alors si tout est correcte et qu'est-ce qu'il se passe à la compilation et à l'exécution.
(1) La ligne est correcte, le référent a1 pointait vers un certain objet, en écrivant cette ligne, on le fait pointer vers l'objet vers lequel pointait a2. Comme il n'y a plus de référent qui pointait vers l'objet vers lequel a1 pointait précédemment, le garbage collector intervient et il disparait de la mémoire.
(2) Cette ligne est fausse car tout ce que sait faire un objet provenant de la classe B, un objet de la classe A ne sait pas le faire. Ainsi si j'executais une méthodeB sur b1 qui pointe en réalité sur a2, il y aura un problème. Il est signalé à l'exécution. => on retire cette ligne.
(3) Cette ligne est bonne ( raisonnement similaire au précédant mais ici cela ira ). Il nécessite néanmoins un casting afin que le compilateur la laisse passer: a1=(A)b1. On peut parler également des "Instance of" pour vérifier que le casting donnera qqch de correcte.
(4) Le pointeur b1 pointe vers un certain objet 1 et on le fait pointer vers un autre. Comme cet objet 1 est référencé également par a1 le garbage collecteur n'agira pas. On peut alors dévier sur le garbage collecteur en général.
Ensuite, il m'a demandé d'expliquer ce qu'était un clone et écrire succintement un bout de code sur cela. C'est dans le livre tel quel.
Je me suis trompé à la deuxième ligne (2), j'ai parlé du fait qu'égaler deux objets de classe différente ( dont l'une hérite de l'autre ) avec une phrase telle que b=a ne posait pas de problème car b était plus grand que a, a était contenu dans b. Il m'a alors demandé ce qu'il advenait des anciennes valeurs de B auquelles rien ne correspond dans la classe A... et m'a remis sur la voie correcte. :-). J'ai rattrapé le coup et suis sorti avec 14. Ahhh le stress...
Les cotes des personnes qui nous précédaient, moi et Mitch... : 16,16,17. Il leur a posé le même genre de petites questions. Il y en a une qui n'était pas passé ici, c'est avec la création d'objet selon différents constructeurs et la mémoire sur laquelle les objets ont été créé ( pile ou tas ) mais je ne suis pas sur, c'était tout aussi simple apparemment.
Il est vraiment cool mais ayez compris les principes de base et la réponse à ces questions-ci :-).

INFO-H-301 - 2 Sep 2005

bon, j'arrive... c'est le méga bordel dans son bureau :p
on passe l'oral sur des feuilles de papier-cul géantes sur lesquelles il faut écrire avec des stiff qui transpercent au travers de 4 pages :p
donc, il me tape 2 classes A et B dans lesquelles il tape des attributs et des constructeurs.
il me demande ce qui se passe pour a1 = a2 (de la classe A), donc attributs pointant le mm objet, et il me demande ce que ça fait au niveau de la mémoire et ce que fait le garbage collecteur. Il faut donc dessiner les pointeurs et montrer ce que le garbage collector fait.
ensuite, il me demande comme dans un des poste précédents comment faire -je sais plus quoi- , en gros, il voulait que je clone mon a2 que g fait comme ça: a1=a2.clone()
il me demande ce qui doit se passer au niveau de la déclaration des méthodes (là g t paumé) et le réponse: redéfinir la méthode de clonage dans la classe A.
il me demande après ce qui passait au niveau de la mémoire lorsque le clonage a été effectué (et là, c t l'embrouille de nouveau) et je me souviens plus de la réponse :p
En gros, mon exam était bcp (trop?) axé sur la gestion de mémoire, de la compréhension basique hardcore, quoi... mais je mattendais vraiment pas à ça :s
au final, je suis ressorti avec seulement 10 car javais trop calé sur ses bêtes trucs de mémoires.
mais sinon, encore une fois, il est vraiment sympa et ya mm moyen de se marrer avec lui:p donc stressez mais avec modération paske transpirer dans son costard, c marrant mais ça aide pas bcp pour réfléchir:p

INFO-H-301 - 1 Sep 2005

Hello
Mister Bersini m'a fait cadeau de 2 class: A et B, avec pour la B des attributs qcqs mais surtout une belle methode private void faireB().
La question: comment faire une association entre A et B qui utilise faireB?
Il fallait betement creer une methode public dans la class B genre:
public void faireautreB(){faireB()}
Ensuite il m'a demande quelle etait l'utilite d'avoir des methode privees, cf cours.
Pour finir il voulait savoir quelle etait l'etape superieur dans ce context, et c'etait l'interface. J'ai du lui ecrire le petit bout de code correspondant (quasi celui de "ou pas")et c'etait regle.
Bersinin est sympas et a pas l'air de se prendre la tete. Il veut meme bien faire l'effort de comprendre votre charabiat pour vous le reexpliquer.
J'ai pas toujours ete clair et j'ai fait qqs erreurs dans le code pourtant je sors avec 12.
Comprenez bien les notions et si en plus vous avez un peu de programmation dans les doigts, c'est dans la poche.

INFO-H-301 - 1 Sep 2005

Il m'a donné un programme avec des problèmes de casting et il demande de corriger,dire se qui se passe au niveau de l'allocation de la mémoire,etc donc il faut bien piger le garbage collector.Aussi qu'est ce qui se passe à la compilation, exécution.
Sinon il est sympa pour les points

INFO-H-301 - 1 Sep 2005

hello a tous on se bouscule pour donner ses question a ce que je vois...
bon il ma fait un petit diagramme UML juste deux classe d'une l'une herite de l'autre et avec redefinition de methode ds la classe fille.
ensuite il a ecrit des ligne de code et ma demander d'expliquer ce qu'il se passait (A= classe mere, B classe fille, faire() methode diff ds chaque classe)
1 A a= new A()
2 A b= new B()
3 B c= new A() ici il y a erreur de compilation pcq B ne peut etre egale a A cfr la classe fille fait plus de chose que la classe mere
4 B d= new B()
5 a.faire() methode de A
6 b.faire() methode de B
7 c.faire()//a supprimer
8 d.faire() methode de B
a quoi ca sert de faire l'instruction 2= polymorphisme, cfr l'exemple du bouquin avec les joueur de foot (le vecteur de joueur)
ensuite il ma demander c'est quoi la diff entre interface et classe abstract
et la on est parti ds les interfaces
il ma demander de coder une classe A qui interagi avec B sans voir B
j'ai rien compris sur le moment il ma bcq aider et si j'ai bien compris il faut faire comme ca
Class A{
methodeA( IB un lienB){
methodeB
}
IB = interface de B
mais lsq on appel la methodeA un lui passe en argument un objet B
puis il ma demander dans quelle classe est redefini methode B ( je crois que c'est dans la classe B, pas sur)
bilan 14/20
sur ce en esperant que d'autre suivront le mouvement
nb: l'exam se passe ds son bureau un par un 20-25 min par personne. il n'est pas stressant assez sympa c'est un dialogue entre lui et vous pour voir si vous avez compris comment ca se passe en java.
bonne m---- a tous ++
bien a vous ou pas

INFO-H-301 - 27 Aug 2004

je viens de sortir de bersini. c'est tres cool comme exam.
Vu que j'entrait avec un 11 en 1ere sess, il m'a a peine demandé deux lignes de code pour l'envoi de messages. Attention, il te donne le "main", et en fonction de l'appel qu'il fait, tu dois ecrire le code du message dans les classes A et B (soit par arguments, soit par attribut).
Ensuite, il m'ecrit a1=a2 dans le "main" et il demande ce que ca fait (=> copie du referent). Alors il demande comment on fait pour alloué un nouvel espace memoire en gardant a1=a2. la g un peu patauge mais c tout con il faut faire un clone, avec un cast, car la methode clone est une methode de la classe Object: a1=(A)a2.clone (un truc com ca)
Puis, il demande si g une idee de comment on fait pour cloner egalement l'objet b2 vers lequel pointe a2. ...heu... bref ca il m'a expliqué mais ca reste flou dans mon cerveau.
Au final, il me donne 14, alors que le precedent qui rentrait avec 2 en premiere sess s'est pris un 7 a l'oral ! Donc attention, il cote un peu a la tete du client...

INFO-H-301 - 27 Aug 2004

moi suis en électromec, je viens d'avoir Bersini:
il dessine un schema UML et vous devez ecrire le code correspondant.
Faut juste les grands principes, il met assez bien sur la voie pour que vous
codiez ce qu'il vous demande...
Moi j'ai un peu pataugé avec les envois de messages mais il m'a mit 13.
Y a donc facilement moyen de faire des points.


Il n'y a pas de publications plus anciennes.