Formation C# - Cours 3 - Programmation objet

24,211 views

Published on

Troisième partie de la formation C# du Club Microsoft Isep.
Fondements de la Porgramation Orientée Objet, introduction aux classes, méthodes et attributs par l'exemple.

Published in: Technology

Formation C# - Cours 3 - Programmation objet

  1. 1. Formation C# <ul><li>Pierre de La Morinerie </li></ul><ul><li>Club Microsoft Isep — 2007 </li></ul>Cours n° 3 : Programmation objet
  2. 2. Plan <ul><li>Introduction, premiers pas, concepts </li></ul><ul><li>Programmation procédurale </li></ul><ul><li>Programmation objet </li></ul><ul><li>Programmation Windows </li></ul>
  3. 3. Cours n° 3 Programmation objet Programmation objet
  4. 4. Programmation objet <ul><li>Programmation objet : </li></ul><ul><ul><li>Modélise le programme par des objets </li></ul></ul><ul><li>Avantages : </li></ul><ul><ul><li>Encapsulation </li></ul></ul><ul><ul><li>Réutilisation facile </li></ul></ul><ul><ul><li>Débogage facilité </li></ul></ul>
  5. 5. Programmation objet <ul><li>Les classes : </li></ul><ul><ul><li>Servent à définir des types d’objets </li></ul></ul><ul><li>Les classes comportent : </li></ul><ul><ul><li>Des attributs (variables) </li></ul></ul><ul><ul><li>Des méthodes (fonctions) </li></ul></ul>
  6. 6. Programmation objet <ul><li>Différence classe/objet : </li></ul><ul><ul><li>Une classe est un type (un moule) </li></ul></ul><ul><ul><li>Un objet est une variable (un gâteau) </li></ul></ul><ul><li>Exemple : </li></ul><ul><li>Une classe Voiture </li></ul><ul><li>Deux objets, voiturePapa et maVoiture </li></ul>
  7. 7. Programmation objet <ul><li>Déclaration d’une classe : </li></ul><ul><ul><li>class <nom de la classe> { } </li></ul></ul><ul><li>Exemple : </li></ul><ul><ul><li>class Voiture { } </li></ul></ul>
  8. 8. Programmation objet <ul><li>Ajouter des fonctions à notre classe : </li></ul><ul><ul><li><accès> <type> <nom>(<arguments>) { } </li></ul></ul><ul><li>Exemple : </li></ul><ul><ul><li>public int MaMéthode(string a) { // code return 0; } </li></ul></ul>
  9. 9. Programmation objet <ul><li>Modificateurs d’accès : </li></ul><ul><ul><li>public : visible depuis l’extérieur et l’intérieur </li></ul></ul><ul><ul><li>private : visible uniquement de l’intérieur </li></ul></ul>
  10. 10. Programmation objet <ul><li>Exemple : calculatrice </li></ul><ul><ul><li>Code de l’interface dans la classe Main </li></ul></ul><ul><ul><li>Calculs dans une classe Calc </li></ul></ul><ul><li>Pour l’instant : </li></ul><ul><ul><li>Programmer un calcul de puissance </li></ul></ul>
  11. 11. Programmation objet <ul><li>Démo : débogage en temps réel </li></ul><ul><ul><li>Placer un ou plusieurs “Breakpoint” </li></ul></ul><ul><ul><li>Lancer le débogage </li></ul></ul><ul><ul><li>Le programme se met en pause aux Breakpoints </li></ul></ul>
  12. 12. Programmation objet <ul><li>Namespace : </li></ul><ul><ul><li>“Espace de noms” </li></ul></ul><ul><ul><li>Différencie des classes de même nom </li></ul></ul><ul><li>Directive “using <namespace>” : </li></ul><ul><ul><li>Evite d’avoir à taper le namespace à chaque fois </li></ul></ul>
  13. 13. Attributs <ul><li>Problème : </li></ul><ul><ul><li>Comment accéder à la même variable depuis plusieurs méthodes ? </li></ul></ul><ul><li>Solution : </li></ul><ul><ul><li>Les attributs </li></ul></ul>
  14. 14. Attributs <ul><li>Déclaration d’un attribut : </li></ul><ul><ul><li><accès> <type> <nom>; </li></ul></ul><ul><li>Exemple : </li></ul><ul><ul><li>public int precision; </li></ul></ul>
  15. 15. Attributs <ul><li>Exemple 2 : Calculette </li></ul><ul><ul><li>Un attribut précision détermine la précision de tous les calculs </li></ul></ul>
  16. 16. Propriétés <ul><li>Problème : </li></ul><ul><ul><li>Comment contrôler l’accès à des attributs ? </li></ul></ul><ul><li>Solution : </li></ul><ul><ul><li>Les propriétés </li></ul></ul>
  17. 17. Propriétés <ul><li>Déclaration d’une propriété </li></ul><ul><ul><li><accès> <type> <nom> { get { // code } set { // code } } </li></ul></ul>
  18. 18. Constructeur <ul><li>Problème : </li></ul><ul><ul><li>Comment initialiser les attributs d’un objet ? </li></ul></ul><ul><li>Solution : Les constructeurs </li></ul><ul><ul><li>Méthode appelée à la création de chaque objet </li></ul></ul>
  19. 19. Constructeur <ul><li>Déclaration d’un constructeur : </li></ul><ul><ul><li>public <nom de la classe>(<arguments>) { } </li></ul></ul><ul><li>Exemple : </li></ul><ul><ul><li>cf. Ex3.cs </li></ul></ul>
  20. 20. Constructeur <ul><li>Avantages : </li></ul><ul><ul><li>Obligation d’initialiser le ou les attributs </li></ul></ul><ul><ul><li>Permet d’initialiser l’état de l’objet </li></ul></ul>
  21. 21. Accesseurs <ul><li>Problème : Comment faire pour restreindre l’accès à un attribut ? </li></ul><ul><ul><li>Solution : le mettre en private </li></ul></ul><ul><li>Mais si on veut pouvoir lire la précision ? </li></ul><ul><ul><li>Solution : un accesseur en lecture-seule </li></ul></ul>
  22. 22. Accesseurs <ul><ul><li>Exemple d’accesseur : </li></ul></ul><ul><ul><ul><li>public int precision { get { return precision; } set { precision = value; } } </li></ul></ul></ul><ul><ul><li>Cf. Ex4.cs </li></ul></ul>
  23. 23. Accesseurs <ul><li>Avantages : </li></ul><ul><ul><li>Pas besoin de méthodes supplémentaires </li></ul></ul><ul><ul><li>Contrôle lecture/écriture </li></ul></ul><ul><ul><li>Contrôle d’erreur sur la valeur des attributs </li></ul></ul>
  24. 24. Exceptions <ul><li>Problème : </li></ul><ul><ul><li>Comment signaler les erreurs ? </li></ul></ul><ul><li>Solution : </li></ul><ul><ul><li>Passer par un canal spécial : les exceptions </li></ul></ul>
  25. 25. Exceptions <ul><li>Exception : un objet qui est “jeté” </li></ul><ul><li>Remonte les blocs de code jusqu’à être “attrapé” </li></ul>
  26. 26. Exceptions <ul><li>Jeter une exception : </li></ul><ul><ul><li>throw new Exception(); </li></ul></ul><ul><li>Attraper une exception : </li></ul><ul><ul><li>try { // code } catch (Exception e) { Console.WriteLine(“Erreur”); } </li></ul></ul>
  27. 27. Exceptions <ul><li>TP 5 : Exceptions </li></ul><ul><ul><li>Objectif : éviter les divisions par zéro </li></ul></ul><ul><ul><li>Calc.Div jette une Exception si b == 0 </li></ul></ul><ul><ul><li>Afficher un message en cas d’erreur </li></ul></ul><ul><li>Outils </li></ul><ul><ul><li>throw new Exception() </li></ul></ul><ul><ul><li>try { } catch (Exception e) { } </li></ul></ul>
  28. 28. XMLDoc <ul><li>Problème : </li></ul><ul><ul><li>Comment documenter son programme ? </li></ul></ul><ul><li>Solution : </li></ul><ul><ul><li>Documenter directement le code </li></ul></ul>
  29. 29. XMLDoc <ul><li>Principe de XMLDoc : </li></ul><ul><ul><li>Documenter dans le code </li></ul></ul><ul><ul><li>Classes, fonctions, attributs, etc. </li></ul></ul><ul><ul><li>Utiliser NDoc </li></ul></ul><ul><li>Syntaxe : </li></ul><ul><ul><li>/// <summary>Résumé</summary> </li></ul></ul>
  30. 30. XMLDoc <ul><li>Exemple 5 : Documentation </li></ul><ul><ul><li>Documenter toute la Calculette </li></ul></ul>
  31. 31. Garbage Collector <ul><li>Libère automatiquement les objets en mémoire </li></ul><ul><li>Pas besoin de “free” comme en C/C++ </li></ul>
  32. 32. Assemblies <ul><li>Assembly : DLL .NET compilée </li></ul><ul><li>Utilisable depuis n’importe quel langage .NET </li></ul><ul><li>GAC : Global Assembly Cache </li></ul>

×