SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Université Mohamed Chérif Messaâdia
– Souk Ahras –
Département : Faculté des sciences et de technologie
Mathématique et Informatique
Filière : Informatique
Spécialité : Gènie logiciel
Niveau : master 1
Module : TOA
Exposé : CLONAGE d'objets
Professeur : Amirat Présenté par :
TEBIB Med Elamine
PROMOTION : 2015/2016
Plan:
• Introduction
• Problématique
• Définitions
• Clonage superficiel
• Clonage profond
• Conclusion
Introduction:
-Dans la programmation orientée objet, il arrive que l'on
doit cloner un objet. Le "clonage" d'un objet pourrait se
définir comme la création d'une copie par valeur de cet
objet.
Dans cet exposé, nous allons voir comment est implémenté
ce concept en Java.
Problématique:
-En Java, lorsque vous affectez un objet à un autre, seule
l'adresse mémoire de l'objet est copiée , donc tout
changement sur l'objet original sera reflété dans le nouvel
objet
Myclass obj1 = new Myclass();
Myclass obj2 = obj1;
Dans ce cas, toutes les modifications que vous apportez à
obj1 reflétera dans obj2 et et vice versa.
Problématique:
-Si c'est ça ce qu'on veut pas de soucis, mais si on veut pas
que la modification de obj1 sera observable dans l'objet
obj2.
Qu'est ce qu'on doit faire ?ou d'une autre façon comment
peut-on avoir deux versions d'un mème objet susceptibles
d'évouluer différement ?
Définitions :
- Le clonage est l'opération de copie d'une instance de classe
afin de créer une nouvelle instance qui contienne les mêmes
informations.
- Pour qu'un objet soit clonable, il faut qu'il implémente
l'interface Cloneable.
Définitions :
-Pour qu'un objet soit copiable (clonable), sa classe doit implanter
la méthode clone() de l'interface Cloneable.
-En fait, la méthode clone() est définie pour la classe Object et
s'applique donc à tous les objets Java.
-En pratique, les sous-classes qui le désirent doivent implemanter
l'interface Cloneable et redéfinir la méthode clone(). Cette
redéfinition peut se limiter à faire appel à super.clone(); (i.e. la
méthode mère héritée).Celle-ci peut générer l'exception
CloneNotSupportedException.
Implémenter le clonage :
class A implements Cloneable
{
int i;
// la methode qui fait le clonage
public Object clone() throws CloneNotSupportedException
{
return super.clone();
}
}
Implémenter le clonage :
Class Test {
public static void main(args [] strings)
{
A obj1 = new A();
A obj2 = (A) obj1.clone();
System.out.println(obj1.i);
System.out.println(ob2.i);
}
}
● Ici obj2 a reçu une copie de obj1. Ce sont deux objets différents mais
de même valeur.
● La copie a été réalisée par la méthode public Object clone()
implémentée par A.
Clonage Superficiel « shallow copy » :
-En réalité, le clonage par defaut est superficiel .
-Est un copie bit à bit des champs du premier niveau.
Example :
public class A implements Cloneable{
int x=6;
int []T={1,2};
public Object clone() throws CloneNotSupportedException{
return super.clone();
}
public void afficher() {
System.out.println("x ="+this.x);
for (int i = 0; i < this.T.length; i++) {
System.out.println("T["+i+"] = "+T[i]);
}
} }
Clonage Superficiel « shallow copy » :
-Passons maintenant au classe Test
public class Test {
public static void main(String[] args) throws CloneNotSupportedException
{
A a = new A();
A b = (A) a.clone();
b.x=5; // on essaye de modifer la valeur de x de l'objet b
b.T[0]=10;// on essaye de modifer les elements de l'objet T de b
a.afficher();
b.afficher();
}
}
Clonage Superficiel « shallow copy » :
Clonage Superficiel « shallow copy » :
les resultats :
x =6
T[0] =10
T[1] = 2
-----
x =5
T[0] = 10
T[1] = 2
• L'entier a.x a été copié dans b.x, mais pour le tableau t, c'est la
référence qui a été copiée (non les éléments du tableau.).donc le
clonage superficiel ne copie que les attributs primitifs(les attributs
du premier ordre).
Quelle est la solution pour qu'on
puisse cloner mème les attributs
de type référence?
Clonage en Profondeur (deep copy):
public class A implements Cloneable
{
int x=6;
int []T={1,2};
public Object clone() throws CloneNotSupportedException
{
A tmp = (A) super.clone();
tmp.T = (int[]) this.T.clone();
return tmp;}
public void afficher()
{ System.out.println("x ="+this.x);
for (int i = 0; i < this.T.length; i++) {
System.out.println("T["+i+"] = "+T[i]);
}
}}
Clonage en Profondeur (deep copy):
-Passons maintenant au classe Test
public class Test
{
public static void main(String[] args) throws CloneNotSupportedException
{
A a = new A();
A b = (A) a.clone();
b.x=5; // on essaye de modifer la valeur de x de l'objet b
b.T[0]=10;// on essaye de modifer les elements de l'objet T de b
a.afficher();
b.afficher();
}
}
Clonage en Profondeur (deep copy):
Clonage en Profondeur (deep copy):
les resultats :
x =6
T[0] =1
T[1] = 2
-----
x =5
T[0] = 10
T[1] = 2
Conclusion:
- Une fois les détails d'implémentation de clone()
compris, il est facile de créer des objets facilement
duplicables pour produire des copies locales.
-Le rôle de la méthode clone() est de dupliquer un objet
rapidement, en dupliquant la zone mémoire dans laquelle il
se trouve à l'aide d'un processus rapide. Pour cloner un
objet, il suffit donc d'appeler cette méthode, qui nous
renverra une copie conforme de cet objet.
Références:
-Developper.com
-http://www.emi.ac.ma
-Université Lille 1:cours ACOO.

Contenu connexe

Tendances

Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++
Amel Morchdi
 
Java uik-chap4-poo3
Java uik-chap4-poo3Java uik-chap4-poo3
Java uik-chap4-poo3
Amel Morchdi
 
L’analyse et Expérimentation des séquences du Tri par shell
L’analyse et Expérimentation des séquences du Tri par shellL’analyse et Expérimentation des séquences du Tri par shell
L’analyse et Expérimentation des séquences du Tri par shell
youcefsama
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
Fredy Fadel
 

Tendances (19)

Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++Chapitre 2 poo classe objet c++
Chapitre 2 poo classe objet c++
 
Java uik-chap4-poo3
Java uik-chap4-poo3Java uik-chap4-poo3
Java uik-chap4-poo3
 
L’analyse et Expérimentation des séquences du Tri par shell
L’analyse et Expérimentation des séquences du Tri par shellL’analyse et Expérimentation des séquences du Tri par shell
L’analyse et Expérimentation des séquences du Tri par shell
 
TD Java POO
TD Java POO TD Java POO
TD Java POO
 
L’analyse et Expérimentation de algorithme du Tri par sélection
L’analyse et Expérimentation de algorithme du Tri par sélectionL’analyse et Expérimentation de algorithme du Tri par sélection
L’analyse et Expérimentation de algorithme du Tri par sélection
 
L'impact des incriments des séquences de tri Shell. Expérimentation des séque...
L'impact des incriments des séquences de tri Shell. Expérimentation des séque...L'impact des incriments des séquences de tri Shell. Expérimentation des séque...
L'impact des incriments des séquences de tri Shell. Expérimentation des séque...
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 
Tests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnitTests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnit
 
Part1
Part1Part1
Part1
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Memo java
Memo javaMemo java
Memo java
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donnees
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 

Similaire à Clonage d'objets

Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 

Similaire à Clonage d'objets (20)

POO
POOPOO
POO
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
 
Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2
 
Qc mcorrige
Qc mcorrigeQc mcorrige
Qc mcorrige
 
Initialisation dynamique en c++11 (n2660)
Initialisation dynamique en c++11 (n2660)Initialisation dynamique en c++11 (n2660)
Initialisation dynamique en c++11 (n2660)
 
Threads
ThreadsThreads
Threads
 
cours1.ppt
cours1.pptcours1.ppt
cours1.ppt
 
cours1.ppt
cours1.pptcours1.ppt
cours1.ppt
 
cours2.ppt
cours2.pptcours2.ppt
cours2.ppt
 
Présentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tPrésentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@t
 
Présentation LMAX / Disruptor
Présentation LMAX / DisruptorPrésentation LMAX / Disruptor
Présentation LMAX / Disruptor
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux java
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4
 
Formation POO & Java (2ème séance)
Formation POO & Java (2ème séance)Formation POO & Java (2ème séance)
Formation POO & Java (2ème séance)
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 
Multithreading
MultithreadingMultithreading
Multithreading
 
Java cours n° 2 - classe-objet-constructeur
Java   cours n° 2 - classe-objet-constructeurJava   cours n° 2 - classe-objet-constructeur
Java cours n° 2 - classe-objet-constructeur
 

Clonage d'objets

  • 1. Université Mohamed Chérif Messaâdia – Souk Ahras – Département : Faculté des sciences et de technologie Mathématique et Informatique Filière : Informatique Spécialité : Gènie logiciel Niveau : master 1 Module : TOA Exposé : CLONAGE d'objets Professeur : Amirat Présenté par : TEBIB Med Elamine PROMOTION : 2015/2016
  • 2. Plan: • Introduction • Problématique • Définitions • Clonage superficiel • Clonage profond • Conclusion
  • 3. Introduction: -Dans la programmation orientée objet, il arrive que l'on doit cloner un objet. Le "clonage" d'un objet pourrait se définir comme la création d'une copie par valeur de cet objet. Dans cet exposé, nous allons voir comment est implémenté ce concept en Java.
  • 4. Problématique: -En Java, lorsque vous affectez un objet à un autre, seule l'adresse mémoire de l'objet est copiée , donc tout changement sur l'objet original sera reflété dans le nouvel objet Myclass obj1 = new Myclass(); Myclass obj2 = obj1; Dans ce cas, toutes les modifications que vous apportez à obj1 reflétera dans obj2 et et vice versa.
  • 5. Problématique: -Si c'est ça ce qu'on veut pas de soucis, mais si on veut pas que la modification de obj1 sera observable dans l'objet obj2. Qu'est ce qu'on doit faire ?ou d'une autre façon comment peut-on avoir deux versions d'un mème objet susceptibles d'évouluer différement ?
  • 6. Définitions : - Le clonage est l'opération de copie d'une instance de classe afin de créer une nouvelle instance qui contienne les mêmes informations. - Pour qu'un objet soit clonable, il faut qu'il implémente l'interface Cloneable.
  • 7. Définitions : -Pour qu'un objet soit copiable (clonable), sa classe doit implanter la méthode clone() de l'interface Cloneable. -En fait, la méthode clone() est définie pour la classe Object et s'applique donc à tous les objets Java. -En pratique, les sous-classes qui le désirent doivent implemanter l'interface Cloneable et redéfinir la méthode clone(). Cette redéfinition peut se limiter à faire appel à super.clone(); (i.e. la méthode mère héritée).Celle-ci peut générer l'exception CloneNotSupportedException.
  • 8. Implémenter le clonage : class A implements Cloneable { int i; // la methode qui fait le clonage public Object clone() throws CloneNotSupportedException { return super.clone(); } }
  • 9. Implémenter le clonage : Class Test { public static void main(args [] strings) { A obj1 = new A(); A obj2 = (A) obj1.clone(); System.out.println(obj1.i); System.out.println(ob2.i); } } ● Ici obj2 a reçu une copie de obj1. Ce sont deux objets différents mais de même valeur. ● La copie a été réalisée par la méthode public Object clone() implémentée par A.
  • 10. Clonage Superficiel « shallow copy » : -En réalité, le clonage par defaut est superficiel . -Est un copie bit à bit des champs du premier niveau. Example : public class A implements Cloneable{ int x=6; int []T={1,2}; public Object clone() throws CloneNotSupportedException{ return super.clone(); } public void afficher() { System.out.println("x ="+this.x); for (int i = 0; i < this.T.length; i++) { System.out.println("T["+i+"] = "+T[i]); } } }
  • 11. Clonage Superficiel « shallow copy » : -Passons maintenant au classe Test public class Test { public static void main(String[] args) throws CloneNotSupportedException { A a = new A(); A b = (A) a.clone(); b.x=5; // on essaye de modifer la valeur de x de l'objet b b.T[0]=10;// on essaye de modifer les elements de l'objet T de b a.afficher(); b.afficher(); } }
  • 12. Clonage Superficiel « shallow copy » :
  • 13. Clonage Superficiel « shallow copy » : les resultats : x =6 T[0] =10 T[1] = 2 ----- x =5 T[0] = 10 T[1] = 2 • L'entier a.x a été copié dans b.x, mais pour le tableau t, c'est la référence qui a été copiée (non les éléments du tableau.).donc le clonage superficiel ne copie que les attributs primitifs(les attributs du premier ordre).
  • 14. Quelle est la solution pour qu'on puisse cloner mème les attributs de type référence?
  • 15. Clonage en Profondeur (deep copy): public class A implements Cloneable { int x=6; int []T={1,2}; public Object clone() throws CloneNotSupportedException { A tmp = (A) super.clone(); tmp.T = (int[]) this.T.clone(); return tmp;} public void afficher() { System.out.println("x ="+this.x); for (int i = 0; i < this.T.length; i++) { System.out.println("T["+i+"] = "+T[i]); } }}
  • 16. Clonage en Profondeur (deep copy): -Passons maintenant au classe Test public class Test { public static void main(String[] args) throws CloneNotSupportedException { A a = new A(); A b = (A) a.clone(); b.x=5; // on essaye de modifer la valeur de x de l'objet b b.T[0]=10;// on essaye de modifer les elements de l'objet T de b a.afficher(); b.afficher(); } }
  • 17. Clonage en Profondeur (deep copy):
  • 18. Clonage en Profondeur (deep copy): les resultats : x =6 T[0] =1 T[1] = 2 ----- x =5 T[0] = 10 T[1] = 2
  • 19. Conclusion: - Une fois les détails d'implémentation de clone() compris, il est facile de créer des objets facilement duplicables pour produire des copies locales. -Le rôle de la méthode clone() est de dupliquer un objet rapidement, en dupliquant la zone mémoire dans laquelle il se trouve à l'aide d'un processus rapide. Pour cloner un objet, il suffit donc d'appeler cette méthode, qui nous renverra une copie conforme de cet objet.