Copyright © SUPINFO. All rights reserved La Programmation Orientée Objet en C# 2.0
Objectifs de ce module Comprendre la programmation orientée objet. Voir l’implémentation de la POO en C#2.0. Connaître des spécificités du C#2.0. En suivant ce module vous allez: La Programmation Orientée Objet en C# 2.0
Plan du module Notions fondamentales de la Programmation Objet en C#2.0. Notions avancées de la Programmation Objet en C#2.0. Héritage en C# 2.0. Surcharge d’opérateurs, délégués et évènements. Voici les parties que nous allons aborder: La Programmation Orientée Objet en C# 2.0
Notions fondamentales de la Programmation Orientée Objet en C#2.0. La Programmation Orientée Objet en C# 2.0
Plan de la partie Classes et Objets Comparaison entre Classe et Structure L’encapsulation Données de l’objet, données statiques et méthodes statiques C# 2.0 et l’Orientation Objet Définition de systèmes orientés objet Voici les chapitres que nous allons aborder: Notions fondamentales de la Programmation Orientée Objet en C#2.0
Classes et Objets Notions fondamentales de la Programmation Orientée Objet en C#2.0 Classe - Une classe est la définition d’un ensemble d’entités qui partagent les mêmes attributs, les mêmes opérations et la même sémantique.
Classes et Objets Notions fondamentales de la Programmation Orientée Objet en C#2.0 Phare Toit ouvrant Portière Ouvrir Roue Allumer Tourner Exemple : Cas d’une voiture
Classes et Objets Notions fondamentales de la Programmation Orientée Objet en C#2.0 Objet - Un objet est une instance d’une classe et est caractérisé par une identité, un état et un comportement.
Comparaison entre Classe et Structure Notions fondamentales de la Programmation Orientée Objet en C#2.0 Peuvent contenir d’autres types comme membres. Peuvent avoir des membres (constructeurs, méthodes, propriétés, champs, etc.). Chaque membre peut avoir un modificateurs différent (private, public, protected, etc.). Peuvent implémenter des interfaces. Peuvent lever des évènements et déclarer des délégués. Quelques Points communs
Comparaison entre Classe et Structure Notions fondamentales de la Programmation Orientée Objet en C#2.0 Une structure est de type valeur, une classe est de type référence. Par défaut tout membre d’une structure est public alors qu’il est privé pour une classe. Une structure ne peut être héritée, une classe oui. Une structure ne nécessite pas de constructeur Tout champ d’une structure ne peut être initialisé que s’il est déclaré static ou const Quelques Différences
L’encapsulation Notions fondamentales de la Programmation Orientée Objet en C#2.0 Encapsulation - Mécanisme permettant de rassembler les attributs et méthodes propres à un type donné afin d’en restreindre l’accès et/ou d’en faciliter l’utilisation et la maintenance.
L’encapsulation Notions fondamentales de la Programmation Orientée Objet en C#2.0 Modificateurs d’accès private, public, etc. Accessors Permettent de récupérer la valeur d’un champ GetData() { … } Mutators Permettent de définir la valeur d’un champ SetData() { … } L’encapsulation regroupe :
Données de l’objet, données statiques et méthodes statiques Notions fondamentales de la Programmation Orientée Objet en C#2.0 Chaque objet possède des données propres Données statiques Propres à toutes les instances de la classe Méthodes statiques Accessibles par toutes les instances Peuvent utiliser des données statiques
Données de l’objet, données statiques et méthodes statiques Notions fondamentales de la Programmation Orientée Objet en C#2.0 Compte Epargne Solde Taux = 3,14% Compte A Solde = 315€ Compte B Solde = 567€ Exemple: Cas d’un compte épargne Compte Epargne Solde Taux = 3,16%
C# 2.0 et l’orientation objet Notions fondamentales de la Programmation Orientée Objet en C#2.0 Déclaration de classe : public class MyClass { private int _theValue; public void Increment() { _theValue++; } Classe Méthode Champ
C# 2.0 et l’orientation objet Notions fondamentales de la Programmation Orientée Objet en C#2.0 Instanciation : class Program { public static void Main() { MyClass theClass = new MyClass(); } Déclaration et Instanciation
C# 2.0 et l’orientation objet Notions fondamentales de la Programmation Orientée Objet en C#2.0 Le mot-clé this : Référence à l’objet en cours Utilisable uniquement dans des méthodes non- statiques public void Increment() { this._theValue++; }
C# 2.0 et l’orientation objet Notions fondamentales de la Programmation Orientée Objet en C#2.0 Les classes imbriquées : Permet de définir une classe à l’intérieur d’une classe Seules classes pouvant avoir les modificateurs protected ou private public class MyDataSet { protected class MyDataTable {... }
Définition de systèmes orientés objet Notions fondamentales de la Programmation Orientée Objet en C#2.0 Définition de systèmes orientés objet – Réalisation d’une représentation orientée objet d’un élément ou d’un système.
Définition de systèmes orientés objet Notions fondamentales de la Programmation Orientée Objet en C#2.0 Exemple de système orienté objet : public class Car { private Wheel[] _wheels; private Light[] _lights; private Door[] _doors; public void Turn() { } public void Open(Door door) { }
Notions avancées de la Programmation Orientée Objet en C#2.0 La Programmation Orientée Objet en C# 2.0
Plan de la partie Propriétés. Indexeurs. Attributs. Voici les chapitres que nous allons aborder: Notions avancées de la Programmation Orientée Objet en C#2.0
Propriétés Notions avancées de la Programmation Orientée Objet en C#2.0 Nouveautés de C# Utilisé pour : Récupérer la valeur d’un champ (get) Définir la valeur d’un champ
Propriétés Notions avancées de la Programmation Orientée Objet en C#2.0 Exemple de définition : public class MyClass { private int _theValue; public int Value { get { return _theValue; } set { _theValue = value; } Propriété Accesseurs
Propriétés Notions avancées de la Programmation Orientée Objet en C#2.0 Exemple d’utilisation : public static void Main() { MyClass theClass = new MyClass(); int classValue = theClass.Value; theclass.Value = ++classValue; } Accesseur Get. Accesseur Set.
Indexeurs Notions avancées de la Programmation Orientée Objet en C#2.0 Similaire aux propriétés Utilisables comme une collection public class MyClass { private ArrayList _theCollection = new ArrayList(); public MyElement this[int index] { get { return (MyElement) _theCollection[index]; } set { _theCollection[index]= value; } }
Attributs Notions avancées de la Programmation Orientée Objet en C#2.0 Permet de spécifier donner plus de détails sur une méthode, une classe Se déclare en précédant l’élément Peut être utilisé avec des paramètres [Flags] public enum StateFlags { WithWheels = 0x0001, WithEngine = 0x0002, WithLights = 0x0004, WithBreaks = 0x0008 } Indique que l’énumération contient des nombres binaires
Héritage en C# 2.0 La Programmation Orientée Objet en C# 2.0
Plan de la partie Dérivation de classe. Implémentation de méthodes. Implémentation d’interfaces. Utilisation d’interfaces. Utilisation de classes abstraites et scellées. Hiérarchie des objets Voici les chapitres que nous allons aborder: Héritage en C# 2.0
Dérivation de classe Héritage en C# 2.0 Permet d’hériter des données et fonctionnalités d’une classe mère Mot-clés protected et internal pour restreindre l’accès Appel possible au constructeur de la classe mère
Dérivation de classe Héritage en C# 2.0 Exemple de dérivation : public class MyClass {... } public class MyDerivedClass : MyClass {... } Classe mère Classe fille
Dérivation de classe Héritage en C# 2.0 Exemple d’appel au constructeur de base : public class MyDerivedClass : MyClass { public MyDerivedClass() : base() {... } Appel au constructeur de la classe mère
Implémentation de méthodes Héritage en C# 2.0 Virtual et Override Uniquement pour des méthodes Méthodes non-statiques Méthodes non-privées New Redéfinir une méthode non-virtuelle Peut être utilisé avec les méthodes virtuelles
Implémentation de méthodes Héritage en C# 2.0 Exemple d’utilisation de virtual et override : class MyClass { protected int _myField; public virtual void Increment() { _myField++; } } class MyDerivedClass : MyClass { public override void Increment() { _myField += 2; } }
Implémentation d’interfaces Héritage en C# 2.0 Interface – Contrat qu’une classe l’implémentant se doit de respecter.
Implémentation d’interfaces Héritage en C# 2.0 Plusieurs interfaces implémentables pour une même classe Une classe implémentant une interface doit implémenter toutes les méthodes de l’interface public class Light : ISwitchable { public void Switch() { }
Utilisation d’interfaces Héritage en C# 2.0 Mot-clé Interface Méthodes déclarées : Ne contiennent pas de code Ne comporte pas de modificateur d’accès Peut être utilisé comme type de donnée public interface ISwitchable { void Switch(); }
Utilisation de classes abstraites et scellées Héritage en C# 2.0 Faites pour être dérivées Ne peuvent être instanciées Classes abstraites public abstract class Vehicule { public void Stop() {... } }
Utilisation de classes abstraites et scellées Héritage en C# 2.0 Ne peuvent être dérivées Classes scellées public sealed class Vehicule { public void Stop() {... } }
Hiérarchie des objets Héritage en C# 2.0 Toute classe dérive directement ou indirectement de System.object Quelques méthodes : ToString() Equals() GetType() Finalize()
Hiérarchie des objets Héritage en C# 2.0 Quelques opérateurs de POO : TypeOf Récupérer le System.Type de l’objet Is Vérifier la compatibilité d’un objet avec un type As Vérifie la compatibilité d’un objet puis le transforme dans le type donnée
Surcharge d’opérateurs, délégués et événements La Programmation Orientée Objet en C# 2.0
Plan de la partie Surcharge d’opérateurs. Délégation. Evènements. Voici les chapitres que nous allons aborder: Surcharge d’opérateurs, délégués et événements
Surcharge d’opérateurs Surcharge d’opérateurs, délégués et événements Contrôler le comportement d’un objet face à un opérateur Méthode statique Mot-clé operator Opérandes passés en argument Opérateurs surchargeables : Arithmétiques ("+", "-", “&", "++", etc.) De conversion de type De comparaison
Surcharge d’opérateurs Surcharge d’opérateurs, délégués et événements public static Complex operator ++ (Complex c) { return new Complex(++c.Real, ++c.Imaginary); } Exemple de surcharge : Type de retourOpérateur
Délégation Surcharge d’opérateurs, délégués et événements Utilisé pour déléguer l’exécution d’un morceau de programme Peut référencer plusieurs méthodes déléguées Déclaration d’un type delegate Mot-clé delegate Déclaration des arguments de la méthode déléguée Exemple de déclaration d’un délégué : public delegate int MyDelegateType(int i);
Délégation Surcharge d’opérateurs, délégués et événements public static int Increment(int value); { return ++value; } static void Main(string[] args) { MyDelegateType myDelegate = new MyDelegateType(Increment); myDelegate(10); } Exemple d’utilisation d’un délégué : Méthode déléguée Instanciation Appel
Délégation Surcharge d’opérateurs, délégués et événements public static int Increment(int value); { return ++value; } public static void Show(int value); { Console.WriteLine("Valeur : {0}", value.ToString()); } static void Main(string[] args) { MyDelegateType myDelegate = new MyDelegateType(Increment); myDelegate += new MyDelegateType( Show ); myDelegate(10); } Exemple de référencement de plusieurs méthodes :
Evènements Surcharge d’opérateurs, délégués et événements Permettent de capturer une action du programme Méthode standard pour la gestion d’évènements Basé sur la délégation Mot-clé event Signature fixe : void OnEventName(object sender, EventArgs);
Evènements Surcharge d’opérateurs, délégués et événements public delegate void NewInfoHandler(object sender, EventArgs e); Déclaration du délégué : public event NewInfoHandler InfoHandler; Déclaration de l’évènement : InfoHandler += new NewInfoHandler(); Abonnement :
L’héritage Surcharger un opérateur La Programmation Orientée Objet Utiliser délégués et évènements Résumé du module L’implémentation objet de C#2.0 La Programmation Orientée Objet en C# 2.0
Félicitations Vous avez suivi avec succès le module de cours La Programmation Orientée Objet en C# 2.0
Fin La Programmation Orientée Objet en C# 2.0