Concepts OO avancés                      1
Plan1.   Les tableaux2.   Le principe d’agrégation3.   Encapsulation et Contrôle des accès4.   Héritage5.   Polymorphisme6...
1. Les tableauxDéclaration de tableaux Déclaration de tableaux de types  fondamentaux ou de classe :int tab [];int [] tab...
1. Les tableaux En Java, un tableau est l’instance d’une classe, La déclaration ne crée pas l’objet lui-même. La déclar...
1. Les tableaux Les tableaux comme les objets, sont crées en  utilisant le mot clé new . Les tableaux déclarés en dessou...
1. Les tableaux//création de la référence et  instantiationint [] tab = new int [5] ou//création de la référenceint [] ta...
1. Les tableaux   création de la référence tab de type [ ]int                tabint []         null                       ...
1. Les tableaux     instantiation et copie de l’adresse dans la référence                tabint[]           @1@1          ...
1. Les tableauxInitialisation de tableaux Lorsqu’un tableau est créé, chaque élément  est initialisé à sa valeur par défa...
1. Les tableauxLimites de tableau Dans le langage Java, les indices des tableaux sont  des entiers commençant à zéro. Ja...
1. Les tableaux   remplir un tableauint tab[] = {3, 5,9,10 }; La ligne de code au dessus est  équivalente à la suivante :...
1. Les tableaux   Notez que la limite de la boucle est déterminé    par comparaison avec la variable    list.length plutô...
2. Principe d’agrégation   On a vu que les attributs d’une classe sont de type    primitifclass Date{int jour,mois,annee;...
2. Principe d’agrégation   Une classe peut être      class Cercle{    aussi constitué de type   int rayon;    structuré  ...
2. Principe d’agrégation   Création d’un Cercle de rayon 10 et de centre    le Point(2,3)Cercle c1=new Cercle();//Le cerc...
3.Instanciation.3.3 Mais que se passe t-il en mémoire              cCercle        @1@1       0              rayonint      ...
2. Principe d’agrégationc1.rayon=10;c1.centre = new Point(2,3);//c à maintenant un rayon 10 et le  centre est à null      ...
3.Instanciation.3.3 Mais que se passe t-il en mémoire             cCercle        @1@1      10         0             rayoni...
2. Principe d’agrégation Une classe peut être class Cercle{  aussi constitué de type int rayon;  structuré               ...
2. Principe d’agrégationPoint p=new Point(1,3)Cercle c=new Cercle(10,p)OuCercle c=new Cercle(10,new  Point(2,3));         ...
2. Principe d’agrégation   Les tableaux d’objetsPoint tab []=new Point[2]Il s’agit d’un tableau de 2 référence  de type P...
3.Instanciation.3.3 Mais que se passe t-il en mémoire               tabPoint[]        @1@1      null                tab[0]...
 Remplir le tableautab[0] = new Point(2,3);tab[1]=new Point(5,6);                           23
3.Instanciation.3.3 Mais que se passe t-il en mémoire             tabPoint[]        @1                                    ...
1.Encapsulation & Contrôle des accès   L’encapsulation est la possibilité de ne    montrer de l’objet que ce qui est    n...
1. Encapsulation & Contrôle des Accèsclass MaDate {private int jour;private int mois;private int annee;}                  ...
1.Encapsulation & Contrôle des accès   L’utilisation du mot-clé private comme    modificateur de jour, mois et annee au s...
1.Encapsulation & Contrôle des accèsclass MaDateUser {public static void main(String args[])  {MaDate mydate = new MaDate(...
1.Encapsulation & Contrôle des accès   Cela peut sembler une chose étrange à faire délibérément mais    présente en fait ...
1.Encapsulation & Contrôle des accès Considérons une classe de date permettant un accès arbitraire aux  membres depuis l’...
1.Encapsulation & Contrôle des accès   Si les membres de données d’une classe ne    sont pas exposés, l’utilisateur de la...
1.Encapsulation & Contrôle des accès Considérez la méthode suivante comme faisant partie de la  classe MaDate :public voi...
1.Encapsulation & Contrôle des accès   Outre protéger les données d’un objet contre une modification    incorrecte, force...
1.Encapsulation & Contrôle des accès   Cet aspect du regroupement des données et    du code dans un objet comme celui du ...
1.Encapsulation & Contrôle des accès   Les get/set sont des méthodes permettant de    respectivement lire/modifier les at...
1.Encapsulation & Contrôle des accèsclass MaDate {private int day;private int month;private int year;int getDay(){return d...
1.Encapsulation & Contrôle des accès                                 void setAnnee(int nA)         void setJour(int nJ)   ...
1.Encapsulation & Contrôle des accès                                   38
1.Encapsulation & Contrôle des accès   L’encapsulation permet d’offrir aux utilisateurs d’une classe la    liste des méth...
1.Encapsulation & Contrôle des accèsEncapsulation : avantages   1. Simplification de l’utilisation des objets.       Pou...
1.Encapsulation & Contrôle des accèsAttribut ou                 Defaut (rien)   public   privateMéthodeAccessible dans la ...
public class Personne {String nom,prenom;public static void main(String  args[]){Personne p = new Personne();System.out.pr...
Personne@de6ced                  43
public class Personne {String nom,prenom;public static void main(String  args[]){Personne p = new Personne();//System.out....
   Afficher une référence c’est faire appel à la    méthode toString()                                                   ...
public class Personne{String nom,prenom;public String toString(){return « nom=«  +nom+ « prenom=»+prenom;}public static vo...
nom=a prenom=b                 47
Prochain SlideShare
Chargement dans…5
×

Java uik-chap5-poo avance vf

1 296 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 296
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
164
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Java uik-chap5-poo avance vf

  1. 1. Concepts OO avancés 1
  2. 2. Plan1. Les tableaux2. Le principe d’agrégation3. Encapsulation et Contrôle des accès4. Héritage5. Polymorphisme6. Surcharge 2
  3. 3. 1. Les tableauxDéclaration de tableaux Déclaration de tableaux de types fondamentaux ou de classe :int tab [];int [] tab;char s[];Point p[]; 3
  4. 4. 1. Les tableaux En Java, un tableau est l’instance d’une classe, La déclaration ne crée pas l’objet lui-même. La déclaration créer simplement une référence Le format crochet ouvrant et fermant est hérité des langages C et C++. Java offre une alternative de format en plaçant les crochets ouvrant et fermant avant la variable elle-même :Création de deux référence de type tableau de char et tableau dechar [] s;int [] tab; 4
  5. 5. 1. Les tableaux Les tableaux comme les objets, sont crées en utilisant le mot clé new . Les tableaux déclarés en dessous peuvent être crées comme suit :s = new char[20];tab = new int[100]; La première ligne crée un tableau de dimension 20 valeurs de type char. Le second crée un tableau de 100 variables de type int. 5
  6. 6. 1. Les tableaux//création de la référence et instantiationint [] tab = new int [5] ou//création de la référenceint [] tab;//instantiationtab=new int[5]; 6
  7. 7. 1. Les tableaux création de la référence tab de type [ ]int tabint [] null 7
  8. 8. 1. Les tableaux instantiation et copie de l’adresse dans la référence tabint[] @1@1 0 tab[0]int 0 tab[1]int 0 tab[2]int 0 tab[3]int 0 tab[4]int 8
  9. 9. 1. Les tableauxInitialisation de tableaux Lorsqu’un tableau est créé, chaque élément est initialisé à sa valeur par défaut Pour le tableau de int ci-dessus, chaque élément est initialisé à la valeur 0 9
  10. 10. 1. Les tableauxLimites de tableau Dans le langage Java, les indices des tableaux sont des entiers commençant à zéro. Java génère une exception en cas de dépassement d’indice. L’obtention de la taille d’un tableau en utilisant la variable membre length. Pour une itération de tableau le code suivant utilise cette variable :int list[] = new int [10];for (int i = 0; i < list.length; i++){// faire quelque chose.} 10
  11. 11. 1. Les tableaux remplir un tableauint tab[] = {3, 5,9,10 }; La ligne de code au dessus est équivalente à la suivante :int tab[];tab = new int[4];tab[0] = 3;tab[1] = 5;tab[2] = 9;tab[3] = 10; 11
  12. 12. 1. Les tableaux Notez que la limite de la boucle est déterminé par comparaison avec la variable list.length plutôt qu’une valeur immédiate 10. Cette approche sécurise davantage le code engendré. 12
  13. 13. 2. Principe d’agrégation On a vu que les attributs d’une classe sont de type primitifclass Date{int jour,mois,annee;}class Cercle{int rayon;……} 13
  14. 14. 2. Principe d’agrégation Une classe peut être class Cercle{ aussi constitué de type int rayon; structuré Point centre; ……class Point{ }int abs,ordPoint(int a,int b){abs=a;ord=b;}} 14
  15. 15. 2. Principe d’agrégation Création d’un Cercle de rayon 10 et de centre le Point(2,3)Cercle c1=new Cercle();//Le cercle est de rayon 0 et le centre est à null 15
  16. 16. 3.Instanciation.3.3 Mais que se passe t-il en mémoire cCercle @1@1 0 rayonint null centrePoint 16
  17. 17. 2. Principe d’agrégationc1.rayon=10;c1.centre = new Point(2,3);//c à maintenant un rayon 10 et le centre est à null 17
  18. 18. 3.Instanciation.3.3 Mais que se passe t-il en mémoire cCercle @1@1 10 0 rayonint @2 2 absint @2 centrePoint 3 ordint 18
  19. 19. 2. Principe d’agrégation Une classe peut être class Cercle{ aussi constitué de type int rayon; structuré Point centre; Cercle (int r,Point p)class Point{ {int abs,ord rayon=r;Point(int a,int b) centre=p;{abs=a;ord=b;} }} } 19
  20. 20. 2. Principe d’agrégationPoint p=new Point(1,3)Cercle c=new Cercle(10,p)OuCercle c=new Cercle(10,new Point(2,3)); 20
  21. 21. 2. Principe d’agrégation Les tableaux d’objetsPoint tab []=new Point[2]Il s’agit d’un tableau de 2 référence de type Point 21
  22. 22. 3.Instanciation.3.3 Mais que se passe t-il en mémoire tabPoint[] @1@1 null tab[0]Point null tab[1]Point 22
  23. 23.  Remplir le tableautab[0] = new Point(2,3);tab[1]=new Point(5,6); 23
  24. 24. 3.Instanciation.3.3 Mais que se passe t-il en mémoire tabPoint[] @1 2 abs 3 ord@1 @2 tab[0]Point 5 abs @3 tab[1]Point 6 ord 24
  25. 25. 1.Encapsulation & Contrôle des accès L’encapsulation est la possibilité de ne montrer de l’objet que ce qui est nécessaire à son utilisation, Les avantages en sont :  Simplification de l’utilisation des objets,  Meilleure robustesse du programme,  Simplification de la maintenance globale de l’application. 25
  26. 26. 1. Encapsulation & Contrôle des Accèsclass MaDate {private int jour;private int mois;private int annee;} 26
  27. 27. 1.Encapsulation & Contrôle des accès L’utilisation du mot-clé private comme modificateur de jour, mois et annee au sein de la classe MaDate a pour effet de rendre impossible tout accès à ces membres à partir de n’importe quel code, excepté les méthodes de la classe MaDate elle-même. 27
  28. 28. 1.Encapsulation & Contrôle des accèsclass MaDateUser {public static void main(String args[]) {MaDate mydate = new MaDate();mydate.jour = 21; // incorrect !}} 28
  29. 29. 1.Encapsulation & Contrôle des accès Cela peut sembler une chose étrange à faire délibérément mais présente en fait de gros avantages potentiels pour la qualité du programme qui utilise la classe MaDate. Les différents éléments de données étant inaccessibles, le seul moyen de lire ou d’écrire dans ces éléments est d’utiliser des méthodes. Ainsi, si une cohérence interne des membres de la classe est requise, cette cohérence peut être gérée par les méthodes de la classe elle-même. 29
  30. 30. 1.Encapsulation & Contrôle des accès Considérons une classe de date permettant un accès arbitraire aux membres depuis l’extérieur. Il serait alors très facile de coder pour effectuer l’une des opérations suivantes :MaDate d = new MaDate();d.jour = 32;d.mois = 2; d.jour = 30; // plausible mais fauxd.mois = d.mois + 1; // omettre le contrôle //pour retour au début Cette affectation, comme beaucoup d’autres, génère des valeurs incorrectes ou incohérentes dans les champs de l’objet date. 30
  31. 31. 1.Encapsulation & Contrôle des accès Si les membres de données d’une classe ne sont pas exposés, l’utilisateur de la classe est contraint de modifier les variables membres par l’intermédiaire de méthodes. Du fait qu’elles correspondent à du code réel, ces méthodes peuvent réaliser des contrôles de validité. 31
  32. 32. 1.Encapsulation & Contrôle des accès Considérez la méthode suivante comme faisant partie de la classe MaDate :public void setJour(int nouveauJour) {if (nouveauJour > 31) {System.err.println(« jour invalide " + nouveauJour);}else {jour = nouveauJour;}} La méthode vérifie si le jour qu’elle doit définir est en fait valide. S’il ne l’est pas, elle ignore la requête et imprime un message. Vous pouvez voir que cette classe de dates est efficacement protégée contre les dates trop élevées. 32
  33. 33. 1.Encapsulation & Contrôle des accès Outre protéger les données d’un objet contre une modification incorrecte, forcer l’utilisateur à accéder aux données via une méthode permet de réutiliser plus simplement cette méthode en garantissant que les effets secondaires sont correctement gérés. Si les données étaient entièrement accessibles, chaque utilisateur de la classe aurait à incrémenter la valeur jour, à la tester par rapport au nombre de jours contenus dans le mois en cours, et à gérer la boucle de fin du mois (voire de fin d’année). Cette opération est fastidieuse et source d’erreurs. Ces besoins sont bien compris pour les dates, mais d’autres types de données présentent des contraintes similaires qui sont mal connues. En forçant l’utilisateur à utiliser les méthodes fournies, chacun peut être assuré que les effets secondaires seront chaque fois gérés de façon cohérente et correcte. 33
  34. 34. 1.Encapsulation & Contrôle des accès Cet aspect du regroupement des données et du code dans un objet comme celui du masquage de données est généralement appelé encapsulation. 34
  35. 35. 1.Encapsulation & Contrôle des accès Les get/set sont des méthodes permettant de respectivement lire/modifier les attributs privés Leur nom et normalisé getNomAttribu, setNomAttribu Il doit exister une paire get/set pour chaque attribut 35
  36. 36. 1.Encapsulation & Contrôle des accèsclass MaDate {private int day;private int month;private int year;int getDay(){return day;}int getMonth(){return month;}int getYear(){return year;}void setDay(int d){day=d;}void setMonth(int m){month=m;}void setYear(int y){year=y;}} 36
  37. 37. 1.Encapsulation & Contrôle des accès void setAnnee(int nA) void setJour(int nJ) int getAnnee() jour=30 mois=1 annee=2009 int getMois() int getJour() void setMois(int nM) 37
  38. 38. 1.Encapsulation & Contrôle des accès 38
  39. 39. 1.Encapsulation & Contrôle des accès L’encapsulation permet d’offrir aux utilisateurs d’une classe la liste des méthodes et éventuellement des attributs utilisables depuis l’extérieur. Cette liste de services exportables est appelé l’interface de la classe et elle est composée d’un ensemble de méthodes et d’attributs dits publics. Les méthodes et attributs réservés à l’implémentation des comportements internes à l’objet sont dits privés. Leur utilisation est exclusivement réservée aux méthodes définies dans la classe courante. 39
  40. 40. 1.Encapsulation & Contrôle des accèsEncapsulation : avantages 1. Simplification de l’utilisation des objets.  Pour utiliser un objet, inutile de connaître son implémentation, la connaissance de son interface suffit. Par exemple, il est inutile de savoir que les coordonnées du centre du cercle sont stockées dans deux variables cx et cy, qui sont de type int. 2. Meilleure robustesse du programme  Une fois un objet testé et développé, un “bug” ne peut pas être généré par du code extérieur à l’objet. Par exemple, si on tente par erreur de mettre une valeur de type int dans la variable cx ou cy, ce ne sera pas permis.  Nous somme donc obligé d’appeler la méthode publique move(int dx, int dy). Si un bug apparaît, c’est alors dans l’objet qu’il faut le chercher (notre méthode publique est-elle capable de traiter ce type d’erreur ?) 3. Simplification et maintenance de l’application  En fonction de ce que nous avons dit précédemment, ce point en est une conséquence logique. 40
  41. 41. 1.Encapsulation & Contrôle des accèsAttribut ou Defaut (rien) public privateMéthodeAccessible dans la classe OUI OUI OUIelle mêmeAccessible dans une autre OUI OUI NONclasse du même package(répertoire)Accessible dans une autre NON OUI NONclasse dans un autrepackage (répertoire) 41
  42. 42. public class Personne {String nom,prenom;public static void main(String args[]){Personne p = new Personne();System.out.println(p);}} 42
  43. 43. Personne@de6ced 43
  44. 44. public class Personne {String nom,prenom;public static void main(String args[]){Personne p = new Personne();//System.out.println(p);System.out.println(p.toString());}} 44
  45. 45.  Afficher une référence c’est faire appel à la méthode toString() 45
  46. 46. public class Personne{String nom,prenom;public String toString(){return « nom=« +nom+ « prenom=»+prenom;}public static void main(String args[]){Personne p = new Personne();p.nom=«a »,p.prenom=« b »;System.out.println(p);//System.out.println(p.toString());}} 46
  47. 47. nom=a prenom=b 47

×