La Programmation Orientée Objet en C# 2.0

Download Report

Transcript La Programmation Orientée Objet en C# 2.0

La Programmation Orientée
Objet en C# 2.0
www.supinfo.com
Copyright © SUPINFO. All
rights reserved
La Programmation Orientée Objet en C# 2.0
Objectifs de ce module
En suivant ce module vous allez:
 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.
La Programmation Orientée Objet en C# 2.0
Plan du module
Voici les parties que nous allons aborder:
 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.
La Programmation Orientée Objet en C# 2.0
Notions fondamentales de la
Programmation Orientée
Objet en C#2.0.
Notions fondamentales de la Programmation Orientée Objet en C#2.0
Plan de la partie
Voici les chapitres que nous allons aborder:
 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
Notions fondamentales de la Programmation Orientée Objet en C#2.0
Classes et Objets
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.
Notions fondamentales de la Programmation Orientée Objet en C#2.0
Classes et Objets
Exemple : Cas d’une voiture
Toit ouvrant
Portière
Phare
Ouvrir
Allumer
Roue
Tourner
Notions fondamentales de la Programmation Orientée Objet en C#2.0
Classes et Objets
Objet - Un objet est une instance d’une
classe et est caractérisé par une
identité, un état et un comportement.
Notions fondamentales de la Programmation Orientée Objet en C#2.0
Comparaison entre Classe et Structure
Quelques Points communs
 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.
Notions fondamentales de la Programmation Orientée Objet en C#2.0
Comparaison entre Classe et Structure
Quelques Différences
 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
Notions fondamentales de la Programmation Orientée Objet en C#2.0
L’encapsulation
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.
Notions fondamentales de la Programmation Orientée Objet en C#2.0
L’encapsulation
L’encapsulation regroupe :
 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() { … }
Notions fondamentales de la Programmation Orientée Objet en C#2.0
Données de l’objet, données statiques et méthodes statiques
 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
Notions fondamentales de la Programmation Orientée Objet en C#2.0
Données de l’objet, données statiques et méthodes statiques
Exemple: Cas d’un compte épargne
Compte Epargne
Solde
Taux = 3,16%
3,14%
Compte A
Solde = 315€
Compte B
Solde = 567€
Notions fondamentales de la Programmation Orientée Objet en C#2.0
C# 2.0 et l’orientation objet
Déclaration de classe :
public class MyClass
{
Classe
}
private int _theValue;
Champ
public void Increment()
{
_theValue++;
}
Méthode
Notions fondamentales de la Programmation Orientée Objet en C#2.0
C# 2.0 et l’orientation objet
Instanciation :
class Program
{
public static void Main()
{
MyClass theClass =
Déclaration et
Instanciation
new MyClass();
}
}
Notions fondamentales de la Programmation Orientée Objet en C#2.0
C# 2.0 et l’orientation objet
Le mot-clé this :
 Référence à l’objet en cours
 Utilisable uniquement dans des méthodes nonstatiques
public void Increment()
{
this._theValue++;
}
Notions fondamentales de la Programmation Orientée Objet en C#2.0
C# 2.0 et l’orientation objet
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 {
...
}
}
Notions fondamentales de la Programmation Orientée Objet en C#2.0
Définition de systèmes orientés objet
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.
Notions fondamentales de la Programmation Orientée Objet en C#2.0
Définition de systèmes orientés objet
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) {
}
}
La Programmation Orientée Objet en C# 2.0
Notions avancées de la
Programmation Orientée
Objet en C#2.0
Notions avancées de la Programmation Orientée Objet en C#2.0
Plan de la partie
Voici les chapitres que nous allons aborder:
 Propriétés.
 Indexeurs.
 Attributs.
Notions avancées de la Programmation Orientée Objet en C#2.0
Propriétés
 Nouveautés de C#
 Utilisé pour :
 Récupérer la valeur d’un champ (get)
 Définir la valeur d’un champ
Notions avancées de la Programmation Orientée Objet en C#2.0
Propriétés
Exemple de définition :
public class MyClass
{
private int _theValue;
public int Value
{
get {
return _theValue;
}
set {
_theValue = value;
}
}
Propriété
}
Accesseurs
Notions avancées de la Programmation Orientée Objet en C#2.0
Propriétés
Exemple d’utilisation :
public static void Main()
{
MyClass theClass = new MyClass();
int classValue = theClass.Value;
theclass.Value = ++classValue;
}
 Accesseur Get.
 Accesseur Set.
Notions avancées de la Programmation Orientée Objet en C#2.0
Indexeurs
 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;
}
}
}
Notions avancées de la Programmation Orientée Objet en C#2.0
Attributs
 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
Indique que
l’énumération contient
des nombres binaires
[Flags]
public enum StateFlags
{
WithWheels = 0x0001,
WithEngine = 0x0002,
WithLights = 0x0004,
WithBreaks = 0x0008
}
La Programmation Orientée Objet en C# 2.0
Héritage en C# 2.0
Héritage en C# 2.0
Plan de la partie
Voici les chapitres que nous allons aborder:
 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
Héritage en C# 2.0
Dérivation de classe
 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
Héritage en C# 2.0
Dérivation de classe
Exemple de dérivation :
Classe mère
public class MyClass
{
...
}
public class MyDerivedClass : MyClass
{
...
}
Classe fille
Héritage en C# 2.0
Dérivation de classe
Exemple d’appel au constructeur de base :
public class MyDerivedClass : MyClass
{
public MyDerivedClass() : base()
{
...
}
}
Appel au constructeur de la
classe mère
Héritage en C# 2.0
Implémentation de méthodes
 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
Héritage en C# 2.0
Implémentation de méthodes
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; }
}
Héritage en C# 2.0
Implémentation d’interfaces
Interface – Contrat qu’une classe
l’implémentant se doit de respecter.
Héritage en C# 2.0
Implémentation d’interfaces
 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()
{
}
}
Héritage en C# 2.0
Utilisation d’interfaces
 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();
}
Héritage en C# 2.0
Utilisation de classes abstraites et scellées
Classes abstraites
 Faites pour être dérivées
 Ne peuvent être instanciées
public abstract class Vehicule
{
public void Stop()
{ ... }
}
Héritage en C# 2.0
Utilisation de classes abstraites et scellées
Classes scellées
 Ne peuvent être dérivées
public sealed class Vehicule
{
public void Stop()
{ ... }
}
Héritage en C# 2.0
Hiérarchie des objets
 Toute classe dérive directement ou indirectement de
System.object
 Quelques méthodes :
 ToString()
 Equals()
 GetType()
 Finalize()
Héritage en C# 2.0
Hiérarchie des objets
 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
La Programmation Orientée Objet en C# 2.0
Surcharge d’opérateurs,
délégués et événements
Surcharge d’opérateurs, délégués et événements
Plan de la partie
Voici les chapitres que nous allons aborder:
 Surcharge d’opérateurs.
 Délégation.
 Evènements.
Surcharge d’opérateurs, délégués et événements
Surcharge d’opérateurs
 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, délégués et événements
Surcharge d’opérateurs
Exemple de surcharge :
Type de retour
Opérateur
public static Complex operator ++
(Complex c)
{
return new Complex(++c.Real,
++c.Imaginary);
}
Surcharge d’opérateurs, délégués et événements
Délégation
 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);
Surcharge d’opérateurs, délégués et événements
Délégation
Exemple d’utilisation d’un délégué :
Méthode
déléguée
public static int Increment(int value);
{ return ++value; }
static void Main(string[] args)
{
MyDelegateType myDelegate =
Instanciation
new MyDelegateType(Increment);
myDelegate(10);
Appel
}
Surcharge d’opérateurs, délégués et événements
Délégation
Exemple de référencement de plusieurs méthodes :
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);
}
Surcharge d’opérateurs, délégués et événements
Evè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);
Surcharge d’opérateurs, délégués et événements
Evènements
Déclaration du délégué :
public delegate
void NewInfoHandler(object sender,
EventArgs e);
Déclaration de l’évènement :
public event NewInfoHandler InfoHandler;
Abonnement :
InfoHandler += new NewInfoHandler();
La Programmation Orientée Objet en C# 2.0
Résumé du module
Surcharger un
opérateur
La
Programmation
Orientée Objet
L’implémentation
objet de C#2.0
Utiliser
délégués et
évènements
L’héritage
Félicitations
Vous avez suivi avec succès le
module de cours
La Programmation Orientée
Objet en C# 2.0
La Programmation Orientée Objet en C# 2.0
Fin