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