PPO : Notions de base PDF

Summary

The document is a set of lecture notes covering the fundamentals of object-oriented programming (OOP). It includes discussions on core concepts like objects, classes, methods, attributes in C# or similar programming languages, and various implementation examples.

Full Transcript

Programmation Orientée Objet PPO : Notions de base Notion d’objet  Quand on utilise la POO, on cherche à représenter le domaine étudié sous la forme d'objets. C'est la phase de modélisation orientée objet.  Un objet est une entité qui représente (modélise) un élément du domaine...

Programmation Orientée Objet PPO : Notions de base Notion d’objet  Quand on utilise la POO, on cherche à représenter le domaine étudié sous la forme d'objets. C'est la phase de modélisation orientée objet.  Un objet est une entité qui représente (modélise) un élément du domaine étudié (ex : une voiture, un compte bancaire, un nombre complexe, une facture, etc…) Objet = état + actions Informations (données) Comportements (traitements) Programmation Orientée Objet 2 PPO : Notions de base Notion d’objet  Un objet est une entité logicielle:  Ayant une identité  Capable de sauvegarder un état c'est-à-dire un ensemble d’information dans des variables internes (attributs).  Répondant à des messages précis en déclenchant des activations internes appropriées qui changent l’état de l’objet (comportement).  Ces opération sont appelées méthodes. Ce sont des fonctions liées à des objets et qui précisent le comportement de ces objets.  Attributs : Les attributs d’un objet sont l’ensemble des informations se présentant sous forme de variable et permettant de représenter l’état de l’objet.  Méthodes : une méthode est une fonction ou procédure liée à un objet qui est déclenchée à la réception d’un message particulier, la méthode déclenchée correspond strictement au message reçu Programmation Orientée Objet 3 PPO : Notions de base Notion d’objet Programmation Orientée Objet 4 PPO : Notions de base Notion de classe  Une classe est un modèle d'objet. C'est un nouveau type créé par le programmeur et qui sert de modèle pour tous les objets de cette classe.  Une classe spécifie les informations et les actions qu'auront en commun tous les objets qui en sont issus.  ATTENTION : ne pas confondre objet et classe. Une classe est un type abstrait (exemple : une voiture), un objet est un exemplaire concret d'une classe (exemple : une audi). Un objet est une variable particulière dont le type est une classe Programmation Orientée Objet 5 PPO : Notions de base Notion de classe  Une classe possède un nom et des membres, c’est à dire des attributs (ou champs) et des méthodes.  Chaque membre nommé membre d’un objet est accessible via l’expression  objet.membre.  Les attributs (ou champs)  ils sont à l’objet ce que les variables sont à un programme.  les attributs sont donc typés (exemple int, float, bool, string ou n’importe quel autre classe)  Les méthodes sont des procédures ou fonctions destinées à traiter les données. Elles servent d’interface entre les données et le programme.  les méthodes acceptent donc des arguments et peuvent renvoyer des valeurs Programmation Orientée Objet 6 PPO : Notions de base A retenir  La POO consiste à programmer en utilisant des objets.  Un objet modélise un élément du domaine étudié (exemples : un compte bancaire, une voiture, un satellite, etc.).  Un objet est une instance de classe. Une classe est un type abstrait, un objet est un exemplaire concret de cette classe.  Une classe regroupe des informations et des actions.  Les informations sont stockées sous la forme d’attribut (champs). Les attributs décrivent l'état d'un objet.  Les actions réalisables sur un objet sont représentées par des méthodes. Elles expriment ce que les objets peuvent faire, leur comportement.  Les informations stockées par un objet peuvent être appelées champs, attributs ou encore propriétés. Programmation Orientée Objet 7 PPO : Notions de base Déclaration, instanciation et initialisation C# Rectangle rect; déclaration de l'objet Rectangle rect = new Rectangle(); rect = new Rectangle(); instanciation de l'objet  La déclaration permet de créer une nouvelle variable, appelée « rect » dans l'exemple ci-dessus. A ce stade, aucune réservation de mémoire n'a eu lieu pour cet objet. Il est donc inutilisable. Le type de la variable rect est Rectangle. Le type d'un objet est sa classe.  L'instanciation utilise l'opérateur new , qui permet de réserver une zone mémoire spécifique pour l'objet. On dit que l'objet est instancié par l'opérateur new. Sans cette étape indispensable, l'objet déclaré ne peut pas être utilisé. l'instanciation est l'opération qui consiste à créer un nouvel objet à partir d'une classe, au moyen de l'opérateur new. Programmation Orientée Objet 8 PPO : Notions de base Le constructeur  le constructeur est une méthode spécifique dont le rôle est de construire un objet, le plus souvent en initialisant ses attributs.  L'utilisation d'un constructeur se fait au moment de l'instanciation de l'objet (opérateur new ), en passant en paramètres les futures valeurs des attributs de l'objet créé.  le nom du constructeur doit être identique au nom de la classe, et sa définition ne comporte pas le mot-clé void.  Lorsqu'une classe ne définit aucun constructeur, un constructeur par défaut sans aucun paramètre est implicitement créé. Il n'a aucun comportement mais son existence permet d'instancier des objets de cette classe.  En revanche, toute définition explicite d'un constructeur dans une classe "désactive" le constructeur par défaut.  une classe peut disposer de plusieurs constructeurs initialisant différents attributs. Programmation Orientée Objet 9 PPO : Notions de base L‘encapsulation  l'encapsulation est l'un des principes fondamentaux de la POO. C’est un mécanisme consistant à rassembler les données et les méthodes au sein d'une structure en cachant l'implémentation de l'objet, c'est-à-dire en empêchant l'accès aux données par un autre moyen que les services proposés.  Ces services accessibles (offerts) aux utilisateurs de l'objet définissent ce que l'on appelle l'interface de l'objet (sa vue externe).  L'encapsulation permet donc de garantir l'intégrité des données contenues dans l'objet.  L'encapsulation permet de définir des niveaux de visibilité des éléments d'un conteneur.  L'objectif de l'encapsulation est de ne laisser accessible que le strict nécessaire pour que la classe soit utilisable.  sauf cas particulier, on donne le niveau de visibilité private à tous les attributs d'une classe afin d'assurer leur encapsulation par défaut. Projet d'analyse et de conception 10 PPO : Notions de base L‘encapsulation  Les mots-clés public et private (modificateur d’accès) permettent de modifier le niveau d'encapsulation (on parle aussi de visibilité ou d'accessibilité) des éléments de la classe (attributs et méthodes) :  un élément public est librement utilisable depuis le reste du programme.  un élément privé est uniquement utilisable depuis les méthodes de la classe elle même.  dans de nombreux langages dont le C#, il existe un niveau d'encapsulation intermédiaire (protected) qui rend l’élément uniquement utilisable depuis les méthodes de la classe et ses dérivées Programmation Orientée Objet 11 PPO : Notions de base Les accesseurs et mutateurs  un accesseur ou mutateur sont des méthodes le plus souvent publique qui permettent d'accéder à un attribut privé.  un accesseur en lecture (getter) permet de lire la valeur d'un attribut.  un mutateur en écriture (setter) permet de modifier la valeur d'un attribut.  En C#, les accesseurs prennent la forme de propriétés. Une propriété se manipule comme un champ, mais il s'agit en réalité d'un couple d'accesseurs get et set. Dans la plupart des autres langages, les accesseurs sont des méthodes de la forme getXXX et setXXX. Version 1 du langage C# Version 3 du langage C# Version 6 du langage C# private string _nom; public string Nom { get; set; } private string _nom; public string Nom public string Nom { get => _nom; set => _nom = value; } { get { return _nom; } set { _nom = value; } } Programmation Orientée Objet 12 PPO : Notions de base Exercice 1  On souhaite créer un programme à l’aide de la POO. Chaque étudiant de l’école est identifié par son nom, prénom, âge et genre. Lorsqu’un étudiant est accueillit pour la première fois en classe il doit se présenter à son professeur en disant selon son genre : « Bonjour, je m’appelle Madame (ou Monsieur) « Nom » « Prénom » et j’ai « âge » ans a. Représenter le diagramme de classe de la classe Etudiant b. Créer en c# (Application en mode console) la classe Etudiant Pour les accesseurs et mutateurs vous n’utiliserez pas de propriété c. Créer les étudiants ci-dessous et afficher leur présentation à l’écran : Pierre, DUPONT, Masculin, 35 ans Nicolas, DURANT, Masculin 27 ans Elise DUMARCHER, Féminin 25 ans Céline LAPORTE, Féminin 28 ans Programmation Orientée Objet 13 PPO : Notions de base Exercice 1bis  Cette école dispose de plusieurs salles numérotées de 1 à 15 et pouvant accueillir des étudiants et un professeur. Le professeur dispose des mêmes caractéristiques que l’étudiant de l’exercice 1, mais il a en plus une matière à enseigner. Il doit lui aussi pouvoir se présenter en disant en fonction de son genre : « Bonjour, je m’appelle Madame (ou Monsieur) « Nom » « Prénom » et je suis votre professeur de « Matière » a. Représenter le diagramme de classe des classes « Professeur » et « Salle » b. Créer en c# (Application en mode console) la classe « Professeur » et la classe « Salle ». Pour les accesseurs et mutateurs vous n’utiliserez pas de propriété c. Créer le professeur de Mathématique, DUPRES, Daniel, Masculin, 43 et afficher sa présentation d. La salle dispose aussi d’une méthode pour se présenter. Implémenter sa classe en permettant d’afficher à l’écran : La salle n° « numéro » est occupé par Monsieur (ou Madame) « Nom » Prénom » et les étudiants présents sont « Nom_étudiant1 » « Prénom_étudiant1 », « Nom_étudiant2 » « Prénom_étudiant2 », etc…. e. Créer la salle 12 occupé par M. DUPRES et les étudiants de l’exercice 1 Programmation Orientée Objet 14 PPO : Notions de base Exercice 1ter  Repartir de l’exercice 1bis et : a. Ajouter des constructeurs permettant de créer une salle sans élève ni professeur et une salle sans élève. Attention il vous faut adapter la méthode SePresenter() de la classe Salle en conséquence. b. Gérer les contraintes de l’exercice 1bis concernant le numéro de la salle Programmation Orientée Objet 15 PPO : Notions de base Exercice 2 Une Voiture est caractérisée par sa « Marque », « Couleur », « Matricule » et « Nombre_de_chevaux ». a) Modéliser la classe voiture b) Créer la classe voiture (voiture.cs) et ses attributs en tenant compte du principe d’encapsulation c) Ajouter à la classe : un constructeur sans paramètre un constructeur qui permet d’initialiser la marque, la couleur, le matricule et le nombre de chevaux un constructeur qui permet d’initialiser seulement le matricule d) Ajouter la méthode « présentation » qui retourne les informations d’une voiture e) Dans le programme principal (Application en mode console) : créer une liste de cinq voitures et initialisez la Écrire le code qui permet d’afficher les informations de toutes les voitures de la liste Écrire le code qui permet d’augmenter le nombre des chevaux de un cheval à toutes les voitures de la liste Afficher les informations des voitures après modification Écrire le code qui permet d’inviter l’utilisateur à saisir le matricule d’une voiture. Ensuite rechercher et afficher les informations de la voiture correspondante. Dans le cas où celle-ci n’existerait pas on affichera le message «matricule inexistante» à l’écran. Programmation Orientée Objet 16 PPO : Notions de base Exercice 3 Un salarié est caractérisé par son Matricule (integer), Nom (string), Prénom(string), Salaire(float), TauxCS (float) a) Modéliser la classe Salarié b) Créer la classe Salarie (salarie.cs) et ses attributs en tenant compte du principe d’encapsulation c) Ajouter les constructeurs suivants : Un par défaut Un qui permet de renseigner le matricule lors de l’instanciation Un qui permet de renseigner le matricule et le nom Un qui permet l’initialisation de toutes les propriétés. d) Implémentez la méthode CalculerSalaireNet() qui doit calculer le salaire net d’un employé qui équivaut à : Salaire – (salaire*TauxCS) et retournera la valeur calculée. e) Ajouter un programme de test où il faut créer des objets (en utilisant les différents constructeurs) et leur calculer le salaire. f) Le taux de charges sociales (TauxCS) est en fait commun à tous les salariés. Pour éviter toute redondance de cette propriété, vous devriez donc la déclarer comme partagée au niveau de la classe Salarié et non comme une propriété spécifique des objets instanciés à partir de la classe. Proposer une solution et tester de nouveau avec d’autres objets. Programmation Orientée Objet 17 PPO : Notions de base Membres et Classes Statiques  En programmation orientée objet (POO), le mot-clé static est utilisé pour définir des membres (attributs et méthodes) qui appartiennent directement à la classe elle-même plutôt qu'aux instances (objets) créées à partir de cette classe. Cela permet de partager des données ou des comportements entre toutes les instances de la classe sans avoir besoin de dupliquer ces informations dans chaque objet.  Les membres statiques et les classes statiques sont utilisés lorsqu'un traitement ou une donnée doit être commun à tous les objets ou accessible sans créer d'objet. Cela permet une gestion plus efficace de certaines fonctionnalités partagées. Programmation Orientée Objet 18 PPO : Notions de base Attributs et Méthodes statiques  Le mot-clé static permet d’indiquer que l’attribut ou la méthode : Existe indépendamment de tout objet de la classe Est accessible même si aucun objet de la classe n’a encore été créé Est partagé par tous les objets de la classe est accessible par le nom de la classe suivi d’un point (ex. Classe.nomMethode() ou Classe.nomAttribut) Peut être initialisé et manipulé dans une méthode de la classe  On parle de membres de classe (attribut, méthode), par opposition aux membres d’instance  Règles d'interaction entre méthodes statiques et méthodes d'instance : Une méthode d'instance peut utiliser des membres statiques (attributs ou méthodes). Une méthode statique peut utiliser des membres statiques. Une méthode statique ne peut pas utiliser de membres d'instance (attributs ou méthodes) car ces derniers nécessitent une instance pour exister. Une méthode statique ne peut pas utiliser le mot-clé this (qui fait référence à une instance). Programmation Orientée Objet 19 PPO : Notions de base Classes statiques  Une classe statique est fondamentalement identique à une classe non statique, à une différence près : une classe statique ne peut pas être instanciée (vous ne pouvez pas utiliser l’opérateur new pour créer une variable du type classe) Étant donné qu’il n’y a aucune variable d’instance, vous accédez aux membres d’une classe statique en utilisant le nom de classe elle-même.  Par exemple, si vous avez une classe statique nommée UtilityClass qui a une méthode statique publique nommée MethodA, vous appelez la méthode en écrivant UtilityClass.MethodA();  La liste suivante fournit les fonctionnalités principales d’une classe statique : Elle contient uniquement des membres statiques. Elle ne peut pas être instanciée. Elle est verrouillée (sealed) => Elle ne peut pas être héritée (nous verrons plus tard dans le cours) Elle ne peut pas contenir de constructeurs d’instances.  Toutefois, elles peuvent contenir un constructeur statique. Les classes non statiques peuvent également définir un constructeur statique si la classe contient des membres statiques qui requièrent une initialisation. Programmation Orientée Objet 20 PPO : Notions de base Cas d'Utilisation Les membres statiques sont généralement utilisés pour :  Compteurs partagés Par exemple, pour compter le nombre total d'instances créées d'une classe  Constantes de classe Pour définir des valeurs constantes partagées par toute la classe  Utilitaires Des méthodes qui ne nécessitent pas d'état d'objet, comme des fonctions mathématiques ou des conversions  Gestion de ressources partagées Pour gérer des ressources communes à toutes les instances de la classe. Programmation Orientée Objet 21 PPO : Notions de base Exercices 4 Reprendre la classe réalisé « Salarie.cs » dans l’exercice 3 a) Ajouter un attribut Id qui identifiera le salarié b) Créer un attribut « partagé » GlobalId qui s’incrémente de 1 (valeur de départ à 1) à chaque création d’une nouvelle instance de Salarie c) Modifier votre classe pour permettre lors de son instanciation de définir l’« Id » du salarié de manière unique Programmation Orientée Objet 22 PPO : Notions de base Exercices 5 Un animal est caractérisée par son « cri » (string), « age » (int), « ageMaximum » (int). a) Créer la classe Animal (Animal.cs) et ses attributs en tenant compte du principe d’encapsulation b) Ajouter à la classe : un constructeur qui permet d’initialiser l’âge et l’âge maximal de l’animal un constructeur qui permet d’initialiser tous les paramètres Ajouter les méthodes : o « Crie » affichant le cri de l’animal o « SeDeplace » prenant en paramètre le nombre de mètres et affiche une phrase du style "l’animal se déplace de X mètres " o « Vieillit» ajoutant soit un an, soit le nombre d’années passé en paramètre à l’âge de l’animal.(L’animal meurt s’il dépasse son ageMaximum. Pensez à afficher l’âge et s’il est vivant encore…) o « Mange » affichant "l’animal mange" puis affichez le cri de l’animal o « Description » affichant la description de l’animal. c) Nous souhaitons donner la possibilité de savoir à tout moment combien d’animaux ont été créés ainsi que de pouvoir comparer l'âge de deux animaux en retournant le plus vieux des deux ou le deuxième passé en paramètre. Programmation Orientée Objet 23 PPO : Notions de base L’héritage  L'héritage est l'un des mécanismes fondamentaux de la POO. Il permet de créer des classes à partir de classes existantes. Facilite la structuration des programmes et la réutilisation du code. Facilite la maintenance et améliore la productivité. Facilite grandement la compréhension du code.  L’héritage permet de construire une classe B à partir d’une classe existante A.  La classe B va ainsi hériter de tous les membres de A puis, pourra ajouter des éléments supplémentaires qui lui son propres.  Si B hérite de A, on dit que B est une classe fille, une sous-classe, une classe enfant ou encore une classe dérivée de A.  A l’inverse, A se nomme la classe mère, la classe de base, la classe parent ou encore la super classe de B. Programmation Orientée Objet 24 PPO : Notions de base L’héritage  En conception objet, il existe deux techniques permettant de créer un arbre d’héritage : La généralisation La spécialisation  La généralisation A partir d’un ensemble de classes, cette technique consiste à : o Factoriser un ensemble de membres communs en créant une classe de base o Laisser dans les classes héritées les membres qui leur sont propres  La spécialisation Lorsqu’une classe permet de créer des objets qui sont en réalité de nature différente, il est nécessaire de la spécialiser, en créant des classes héritant de cette classe (qui devient la classe de base). La classe de base contient l’ensemble des membres communs et les classes héritées contiennent les membres qui leur sont propres. Programmation Orientée Objet 25 PPO : Notions de base L’héritage  Grâce à l’héritage, on crée une hiérarchie de classes de plus en plus spécialisées. Cela a comme avantage majeur de ne pas avoir à repartir de zéro lorsque l'on veut spécialiser une classe existante.  En règle générale, l’héritage est utilisé pour exprimer une relation « est un » entre une classe de base et une ou plusieurs classes dérivées, où les classes dérivées sont des versions spécialisées de la classe de base ; la classe dérivée est un type de la classe de base  De cette manière il est possible d'acheter dans le commerce des librairies de classes, qui constituent une base, pouvant être spécialisées à loisir (on comprend encore un peu mieux l'intérêt pour l'entreprise qui vend les classes de protéger les données membres grâce à l'encapsulation,...). Programmation Orientée Objet 26 PPO : Notions de base L’héritage : Principe de généralisation Programmation Orientée Objet 27 PPO : Notions de base L’héritage : Principe de spécialisation Programmation Orientée Objet 28 PPO : Notions de base Hiérarchie des classes  Il est possible de représenter sous forme de hiérarchie de classes, parfois appelée arborescence de classes, la relation de parenté qui existe entre les différentes classes. L'arborescence commence par une classe générale. Puis les classes dérivées (classe fille ou sous-classe) deviennent de plus en plus spécialisées. Ainsi, on peut généralement exprimer la relation qui lie une classe fille à sa mère par la phrase "est un". Programmation Orientée Objet 29 PPO : Notions de base Héritage multiple  Certains langages orientés objet, tels que le C++, permettent de faire de l'héritage multiple, ce qui signifie qu'ils offrent la possibilité de faire hériter une classe de deux superclasses. Ainsi, cette technique permet de regrouper au sein d'une seule et même classe les attributs et méthodes de plusieurs classes. Programmation Orientée Objet 30 PPO : Notions de base héritage et c#  Une classe ne peut avoir qu’une seule classe parent (héritage simple). L’héritage multiple est interdit. Toutefois, l’héritage est transitif, ce qui permet de définir une hiérarchie d’héritage pour un ensemble de types. En d’autres termes, le type D peut hériter du type C, qui hérite du type B, qui hérite du type de classe de base A. Étant donné que l’héritage est transitif, les membres de type A sont disponibles pour le type D.  Les cycles sont interdits : A ne peut hériter de B si B est un descendant de A.  le constructeur d'une classe dérivée doit obligatoirement faire explicitement appel au constructeur de la classe parente lorsque celui-ci prend des paramètres  Tous les membres d’une classe de base ne sont pas hérités par les classes dérivées. Les membres suivants ne sont pas hérités : Les constructeurs statiques, qui initialisent les données statiques d’une classe. Les Constructeurs d’instance, que vous appelez pour créer une nouvelle instance de la classe. Chaque classe doit définir ses propres constructeurs. Les destructeurs, qui sont appelés par le récupérateur de mémoire du runtime pour détruire les instances d’une classe. Programmation Orientée Objet 31 PPO : Notions de base héritage et c#  Bien que tous les autres membres de classe de base sont hérités par les classes dérivées, leur visibilité dépend de leur accessibilité. L’accessibilité d’un membre affecte sa visibilité pour les classes dérivées de la manière suivante : Visibilité Classe Classe dérivée Extérieur public Oui Oui Oui protected Oui Oui private Oui  L’héritage est déclaré lors de la déclaration de la classe avec la notation « : » Exemple : class IdentificateurClasse : IdentificateurClasseParent { } Programmation Orientée Objet 32 PPO : Notions de base héritage et c#  Si la classe B hérite de la classe A alors, du point de vue du typage, les objets de type B forment un sous ensembles des objets de type A.  Je peux créer des variables et des objets de type A et B, et comme les objets de type B peuvent également être vu comme étant du type parent A, je peux les référencer par des variables de type A: A a1 = new A(); B b1 = new B(); A a2 = new B(); // a2 est de type A mais référence un objet de type B A a3 = b1; // idem pour a3  On est alors dans la situation où la variable a2 a pour « type déclaré » A (le type de la variable tel qu’on l’a écrit dans le code) et pour « type constaté » B (le type de l’objet qui est référencé par la variable au moment de l’exécution). Programmation Orientée Objet 33 PPO : Notions de base héritage et c#  Lorsqu’on utilise l’opérateur d’accès «. », c’est le type déclaré qui est utilisé par le compilateur pour déterminer si on accède à un membre valide: b1.MethodeA(); // OK car b1 est de type déclaré B qui hérite de A b1.MethodeB(); // OK car b1 est de type déclaré B a2.MethodeA(); // OK car a2 est de type déclaré A a2.MethodeB(); // ERREUR de compilation car a2 est de type déclaré A (même si le type constaté est B) Programmation Orientée Objet 34 PPO : Notions de base Exercices 5bis Reprendre la classe Animal et complétez la de la manière suivante : a) Écrire une classe Oiseau héritant de la classe Animal. Sachant qu’un oiseau vole pour se déplacer, pousse le cri « cui cui » et à un âge maximum de 20 ans. b) Écrire une classe Corbeau héritant de la classe Oiseau. Un corbeau vit 10 ans et pousse comme cri « croi croi croi ». c) Écrire une classe Chien héritant de la classe Animal. Un chien possède un nom, marche pour se déplacer, pousse comme cri « waf waf » et a pour âge maximum 15 ans. Programmation Orientée Objet 35 PPO : Notions de base héritage et c#  Quiz 1 : Une classe peut avoir plusieurs classes mères Faux Une classe peut avoir plusieurs ancêtres Vrai Une classe peut avoir plusieurs classes filles Vrai Une classe peut avoir plusieurs descendants Vrai Plusieurs classes peuvent hériter d’une même classe Vrai Programmation Orientée Objet 36 PPO : Notions de base héritage et c# La classe B hérite de attributPublicA Vrai Dans la classe B on peut accéder à attributPublicA depuis l’instance courante. Vrai  Quizz 2: La classe B hérite de attributProtectedA Vrai Dans la classe B on peut accéder à attributProtectedA depuis l’instance Vrai courante. class A La classe B hérite de attributPrivateA Vrai { public int attributPublicA; Dans la classe B on peut accéder à attributPrivateA depuis l’instance courante. Faux protected int attributProtectedA; Dans la classe C on peut accéder à attributPublicA depuis une référence sur un Vrai private int attributPrivateA; objet de type A } class B : A {} Dans la classe C on peut accéder à attributProtectedA depuis une référence Faux sur un objet de type A class C {} Dans la classe C on peut accéder à attributPrivateA depuis une référence sur Faux un objet de type A Dans la classe C on peut accéder à attributPublicA depuis une référence sur un Vrai objet de type B Dans la classe C on peut accéder à attributProtectedA depuis une référence Faux sur un objet de type B Dans la classe C on peut accéder à attributPrivateA depuis un référence sur un Faux objet de type B. 37 Programmation Orientée Objet PPO : Notions de base héritage et c#  Quizz 3 : Pour chacune des 3 variables a, b et c, donnez son type déclaré et son type constaté, puis dites s’il est possible d’accéder aux membres des classes Mère et Fille avec l’opérateur «. » à partir de cette variable: class Mere { public int attributMere; Variable a b c public void methodeMere(){}; } Mere Fille Mere Type déclaré class Fille : Mere Type constaté Mere Fille Fille { public int attributFille; attributMere Vrai Vrai Vrai public void methodeFille(){}; } MethodeMere Vrai Vrai Vrai... attributFille Faux Vrai Faux MethodeFille Faux Vrai Faux Mere a = new Mere(); Fille b = new Fille(); Mere c = new Fille(); 38 Programmation Orientée Objet PPO : Notions de base Exercices 6  Une personne est décrite par son nom (string), prénom (string) et date de naissance (datetime) a) Créer la classe Personne (Personne.cs) et ses attributs en tenant compte du principe d’encapsulation b) Ajouter à la classe : un constructeur qui permet d’initialiser tous les paramètres Ajouter une méthode « Afficher() » qui permet d’afficher les données de chaque personne et qui pourra être redéfinie par les classes dérivées  Un employé est une personne qui possède un salaire (float) en plus. a) Écrire une classe Employé (Employe.cs) et ses attributs en tenant compte du principe d’encapsulation b) Ajouter à la classe : un constructeur qui permet d’initialiser tous les paramètres Ajouter une méthode « Afficher() » qui permet d’afficher les données de chaque employé et qui pourra être redéfinie par les classes dérivées Programmation Orientée Objet 39 PPO : Notions de base Exercices 6bis  Un Chef est une employé qui possède un service (string) en plus. a) Écrire une classe Chef (Chef.cs) et ses attributs en tenant compte du principe d’encapsulation b) Ajouter à la classe : un constructeur qui permet d’initialiser tous les paramètres Ajouter une méthode « Afficher() » qui permet d’afficher les données de chaque Chef et qui pourra être redéfinie par les classes dérivées  Un Directeur est une Chef qui possède une société (string) en plus. a) Écrire une classe Directeur (Directeur.cs) et ses attributs en tenant compte du principe d’encapsulation b) Ajouter à la classe : un constructeur qui permet d’initialiser tous les paramètres Ajouter une méthode « Afficher() » qui permet d’afficher les données de chaque Directeur et qui pourra être redéfinie par les classes dérivées Programmation Orientée Objet 40 PPO : Notions de base Exercices 7 (suite de l’exercice 6bis)  Créez un programme de test qui comporte une liste de cinq employés, une liste de deux chefs et une liste avec un directeur  Affichez l'ensemble des employés de la liste à l'aide de foreach.  Affichez l'ensemble des chefs et des directeurs de la liste à l'aide de for. Programmation Orientée Objet 41 PPO : Notions de base Exercices 7bis (suite de l’exercice 6bis)  Créez un programme de test qui comporte une liste de huit personnes avec cinq employés, deux chefs et un directeur  Affichez l'ensemble des personnes de la liste à l'aide de foreach.  Affichez l'ensemble des personnes de la liste à l'aide de for. Programmation Orientée Objet 42 PPO : Notions de base Polymorphisme : Définition Le nom de polymorphisme vient du grec et signifie « qui peut prendre plusieurs formes ».  Cette caractéristique est un des concepts essentiels de la programmation orientée objet. Alors que l'héritage concerne les classes (et leur hiérarchie), le polymorphisme est relatif aux méthodes des objets.  Le polymorphisme peut être vu comme la capacité de choisir dynamiquement la méthode qui correspond au type réel de l’objet. On distingue généralement trois types de polymorphisme : Le polymorphisme ad hoc (ou surcharge ou en anglais overloading) Le polymorphisme paramétrique (ou généricité ou en anglais template) Le polymorphisme d'héritage (ou redéfinition, spécialisation ou en anglais overriding) Programmation Orientée Objet 43 PPO : Notions de base Polymorphisme d’héritage : Principe  L’idée est que, lorsqu’une classe dérive d’une autre, elle hérite des propriétés et des méthodes de la classe de base. Si une méthode est déclarée dans la classe de base et est redéfinie dans la classe dérivée, cette méthode peut être appelée de manière polymorphique, en fonction du type de l'objet. Cela signifie que le même appel de méthode sur un objet de la classe de base peut se comporter différemment selon le type réel de l'objet (classe de base ou classe dérivée).  Cela signifie que lorsqu'une méthode est appelée sur une variable, le type déclaré détermine quelles méthodes peuvent être appelées, mais le type constaté détermine quelle version de la méthode sera réellement exécutée. Ainsi, un même appel de méthode sur une variable de type déclaré ClasseDeBase peut se comporter différemment selon le type constaté de l'objet (soit ClasseDeBase, soit une ClasseDerivee). C'est ce mécanisme qui rend possible le polymorphisme. Programmation Orientée Objet 44 PPO : Notions de base Polymorphisme d’héritage  Le polymorphisme d’héritage va donc consister à redéclarer dans une classe fille, une méthode déjà déclarée dans une classe parent (spécialisation).  En C#, on utilisera le couple virtual/override. La première déclaration de la méthode doit porter le qualificatif virtual et toutes les classes enfants modifiant son comportement doivent précéder sa déclaration par le qualificatif override.  Exemple class A class B : A class C : B class D : C { { { { public virtual void Afficher() } public override void Afficher() public override void Afficher() { { { Console.WriteLine("Bonjour"); Console.WriteLine("Coucou"); Console.WriteLine("Hello"); } } } } } } A obj1 = new A(); C obj2 = new C(); obj1.Afficher(); // résultat => Bonjour obj2.Afficher(); // résultat => Coucou Programmation Orientée Objet 45 PPO : Notions de base Polymorphisme d’héritage  Lorsque l’on créer une liste d’objet, la syntaxe va imposer de choisir un type unique pour toutes les références stockées. Par bon sens, nous choisissons comme type celui de l’ancêtre de la hiérarchie.  Exemple : List() Liste = new List() ; On peut alors parcourir la liste et appeler la méthode Afficher sur chacun de ses List.Add(new A()); éléments : List.Add(new B()); foreach(A m in Liste) List.Add(new C()); { List.Add(new D()); m.Afficher(); // Résultats : Bonjour Bonjour Coucou Hello } o Dans ce contexte, les éléments de la liste sont de type A. Néanmoins lors de l’exécution, le CLR va regarder le type constaté de chaque élément pour déterminer quelle méthode Afficher doit être exécutée. Programmation Orientée Objet 46 PPO : Notions de base Polymorphisme d’héritage  Si l’on oublie les mots clés virtual/override, cela ne provoquera pas d’erreur (ni à la compilation, ni à l’exécution) mais le comportement ne sera pas celui souhaité… class A class B : A class C : B class D : C { { { { public virtual void Afficher() } public void Afficher() public void Afficher() { { { Console.WriteLine("Bonjour"); Console.WriteLine("Coucou"); Console.WriteLine("Hello"); } } } } } } List() Liste = new List() ; foreach(A m in Liste) List.Add(new A()); { List.Add(new B()); m.Afficher(); // Résultats : Bonjour Bonjour Bonjour Bonjour List.Add(new C()); } List.Add(new D()); o Les objets sont gérés comme s’ils étaient tous de type A : c’est uniquement le type déclaré qui est pris en compte. En l’absence de toute syntaxe particulière, le langage considère que le type de l’objet référencé est donné par le type de la référence. Programmation Orientée Objet 47 PPO : Notions de base Exercices 8 (illustration classe et méthode abstraite)  Créer une classe FormeGeometrique comportant 3 méthodes CalulerPerimetre, CalculerSurface et CalculerVolume.  Créer les classes filles Triangle et Cercle de la classe FormeGeometrique. a) Quelles remarques pouvez-vous faire concernant : a) les méthodes de la classe FormeGeometrique b) La classe FormeGeometrique b) Faire de la classe FormeGeometrique une classe de Base pour les classes filles en imposant que ses méthodes soient implémentées par ces dernières. c) Compléter par des champs manquant les classes Triangle et Cercle afin de pouvoir compléter le code des 3 méthodes. Programmation Orientée Objet 48 PPO : Notions de base Méthode et classe Abstraite  Problématique : Au sommet d’une hiérarchie de classe, il n’est pas toujours possible de donner une définition générale de certaines méthodes, compatibles avec toutes les sous-classes, même si on sait que toutes ces sous-classes vont effectivement implémenter ces méthodes.  Exemple (cf exercice 8 ) : Les trois méthodes de la classe FormeGeométrique n’ont pas de « sens » en l’état contrairement à ses classes filles Triangle et Cercle. Programmation Orientée Objet 49 PPO : Notions de base Méthode Abstraite : Définition et syntaxe  Une méthode abstraite est incomplètement spécifiée : Elle n’a pas de définition dans la classe où elle est introduite (pas de corps) Elle sert à imposer aux sous-classes (non abstraites) qu’elles doivent définir la méthode abstraite héritée Elle sert de modèle ou de base pour d'autres classes qui l'héritent Elle doit être contenue dans une classe abstraite Syntaxe : public abstract Type nom_methode(liste d’arguments); Exemple : public abstract class FormeGeometrique { public abstract void CalculerSurface(); } Programmation Orientée Objet 50 PPO : Notions de base Classe Abstraite : Définition et remarques  Une classe abstraite est une classe désignée comme telle au moyen du mot réservé « abstract ».  Voici quelques points importants (non exhaustifs) à savoir sur les classes abstraites en C# : Elle peut avoir des méthodes abstraites et non abstraites. Elle doit être héritée et ses méthodes doivent êtres implémentées. On doit utiliser le mot-clé « override » avant la méthode qui est déclarée abstraite dans la classe fille. (Une méthode abstraite est implicitement une méthode virtuelle) Elle ne peut pas être instanciée. Elle peut contenir des constructeurs et des destructeurs. Nous utilisons des classes abstraites au moment de l’héritage. Programmation Orientée Objet 51 PPO : Notions de base Gestion des exceptions : Qu’est-ce que c’est ?  Les exceptions représentent des événements qui peuvent survenir durant l’exécution d’un programme et qui perturbent le déroulement normal des instructions. Elles sont des erreurs qui peuvent être anticipées et gérées afin d'éviter que le programme ne se termine brutalement. 1. Les exceptions sont principalement utilisées pour représenter des erreurs de différents types : des erreurs matérielles (crash du disque,...) des erreurs de programmation (indice d’un tableau hors limites,... ) des erreurs liées à l’environnement d’exécution (mémoire insuffisante,...) des erreurs spécifiques à une librairie ou à une application (numéro d’article non-défini) etc… Programmation Orientée Objet 52 PPO : Notions de base Gestion des exceptions : Qu’est-ce que c’est ? 2. Les exceptions peuvent également représenter des événements qui en sont pas à proprement parler des erreurs, mais qui correspondent à des situations exceptionnelles (prévues) qui doivent être traitées de manières différentes du flux normal des opérations. Par exemple : o la fin d’un fichier o un mot de passe incorrect o des ressources momentanément non-disponibles etc… Programmation Orientée Objet 53 PPO : Notions de base Gestion des exceptions : Pourquoi les gérer ?  Prévenir les plantages : Empêcher que des erreurs arrêtent brutalement l’exécution du programme.  Fournir des messages d'erreur explicites : Indiquer à l'utilisateur ou au développeur la nature exacte du problème.  Maintenir la continuité Permettre au programme de continuer à s’exécuter dans certains cas, même après une erreur. Programmation Orientée Objet 54 PPO : Notions de base Gestion des exceptions : Avantages  Les exceptions augmentent la lisibilité du code en séparant les instructions qui traitent le cas normal des instructions nécessaires au traitement des erreurs ou des événements exceptionnels.  Elles permettent la déclaration explicite des exceptions qu’une méthode peut lever (fait partie de la signature).  Forcent le programmeur à prendre en compte (traiter ou propager) les cas exceptionnels (erreurs ou autres événements) qui sont déclarés dans les méthodes qu’il invoque.  Offrent un mécanisme de propagation automatique ce qui permet au programmeur de choisir à quel niveau il souhaite traiter l’exception (celui auquel il est à même de prendre les mesures adéquates). Programmation Orientée Objet 55 PPO : Notions de base Gestion des exceptions : En c#  En C#, une exception est un événement ou un objet lancé lors de l’exécution.  Toutes les exceptions proviennent de la classe System.Exception. C’est une erreur d’exécution qui peut être traitée. Si nous ne gérons pas l’exception, il affiche le message d’erreur et termine le programme.  En C#, nous utilisons 4 mots-clés pour gérer les exceptions : try, catch, finally et throw  Une fois qu’une exception est levée, elle se propage jusqu’en haut de la pile des appels, jusqu’à ce qu’une instruction catch soit trouvée pour l’exception.  Les exceptions non interceptées sont gérées par un gestionnaire d’exceptions génériques fourni par le système qui affiche une boîte de dialogue. Programmation Orientée Objet 56 PPO : Notions de base Gestion des exceptions : En c#  Un bloc try est utilisé par les programmeurs C# pour partitionner du code susceptible d’être affecté par une exception.  Des blocs catch associés sont utilisés pour gérer les exceptions générées.  Un bloc finally optionnel contient du code qui est exécuté, qu’une exception soit levée ou non dans le bloc, par exemple la libération de ressources qui sont allouées dans le try bloc.  L’instruction throw sert à générer ou relancer une exception (on dit également lever une exception, lancer une exception,...)  Un bloc try doit être associé à un ou plusieurs blocs catch, à un bloc finally, ou aux deux. try try try { { { } } } catch (SomeSpecificException ex) finally catch (SomeSpecificException ex) { { { } } } finally{} Programmation Orientée Objet 57 PPO : Notions de base Gestion des exceptions : En c# Programmation Orientée Objet 58 PPO : Notions de base Gestion des exceptions : Exemple typique d’exception en c# Exception Description System.IO.IOException Gère les erreurs d’entrée-sortie. System.DivideByZeroException Gère l’erreur générée en divisant un nombre par zéro. System.NullReferenceException Gère l’erreur générée en référençant un objet null. System.InvalidCastException Gère l’erreur générée par une conversion de type non valide. System.FieldAccessException gère l’erreur générée par un accès invalide à un attribut privé ou protégé. Programmation Orientée Objet 59 PPO : Notions de base Exercice 10 Réaliser un programme de en mode console qui demande deux entiers A et B et qui retourne le résultat de la division de A par B. Intercepter l’exception DivideByZeroException qui est levée lorsque B est nul et informer l’utilisateur de l’erreur Programmation Orientée Objet 60 PPO : Notions de base Exercice 11 On reprend l’exercice 1 déjà réalisé et on ajoute comme contrainte que le nom et le prénom de l’étudiant ne peuvent pas être vides ou nuls. De plus, l’âge de l’étudiant doit être compris entre 18 et 50 ans. 1. En utilisant les exceptions ArgumentException et ArgumentOutOfRangeException, modifiez les mutateurs pour gérer ces contraintes. 2. Créez une exception personnalisée nommée AgeInvalideException qui héritera de la classe Exception et qui sera utilisée pour gérer les erreurs liées à l'âge. Programmation Orientée Objet 61 PPO : Notions de base Exercice 12 Reprendre l’exercice 11 et ajouter à l’exception personnalisée deux propriétés supplémentaires : AgeInvalide (de type int), représentant l'âge invalide ayant déclenché l'exception, et CodeErreur (de type string), indiquant un code d'erreur de retour. Ajoutez également une méthode publique nommée GetDetails(), qui fournit toutes les informations nécessaires à l'utilisateur lorsque l'exception est levée. Programmation Orientée Objet 62 PPO : Notions de base Exercice 13 Demandez à l’utilisateur de saisir un nombre entier et vérifiez la validité de cette saisie à l’aide de la méthode int.TryParse pour valider l'entrée utilisateur et les blocs try, catch et finally pour gérer les erreurs et les affichages. Programmation Orientée Objet 63

Use Quizgecko on...
Browser
Browser