2-POO_CS_DotNET

publicité
POO – C#
C# / .Net / ASP.NET 5
Hervé PHILIPPE
Promotion 2015-2016
http://DevLab.Alsace
Plan

Langages informatiques
 Typage
 Paradigmes de programmation
 Evolution actuelle
 POO
 Encapsulation
 Héritage
 Polymorphisme
 C#
 Générialités
http://DevLab.Alsace
Langages informatiques
http://DevLab.Alsace
Langages informatiques
Typage
• Typage statique/dynamique
•
•
•
•
Typage statique, à la base du langage C (et dérivés)
Typage dynamique, à la base du JavaScript
Besoins de typage statique pour de grosses applications
Besoins de typage dynamique principalement pour l’IA
• Typage faiblement/fortement typé
• Définition assez subjective…
• Typage fort : garantir la cohérence des données sans conversion implicite
http://DevLab.Alsace
Langages informatiques
Paradigmes
 Programmation impérative
Principe : ne pas utiliser de branchements ("goto"). Exemple : langage C
http://DevLab.Alsace
Langages informatiques
Paradigmes
 Programmation impérative
Principe : ne pas utiliser de branchements ("goto"). Exemple : langage C
 Programmation orientée objet
Terme usuel pour la programmation orientée classe (C++, Java, C#...)
http://DevLab.Alsace
Langages informatiques
Paradigmes
 Programmation impérative
Principe : ne pas utiliser de branchements ("goto"). Exemple : langage C
 Programmation orientée objet
Terme usuel pour la programmation orientée classe (C++, Java, C#...)
 Programmation fonctionnelle
Un programme est une fonction au sens mathématique du terme
http://DevLab.Alsace
Langages informatiques
Paradigmes
 Programmation impérative
Principe : ne pas utiliser de branchements ("goto"). Exemple : langage C
 Programmation orientée objet
Terme usuel pour la programmation orientée classe (C++, Java, C#...)
 Programmation fonctionnelle
Un programme est une fonction au sens mathématique du terme
Autres :
 Programmation concurrentielle
Notions de processus (thread) et d’asynchrone
 Programmation événementielle
http://DevLab.Alsace
Langages informatiques
Evolution actuelle
• Les langages à typage dynamique s’enrichissent avec du typage
statique
Ex: JavaScript -> TypeScript, Flow (Facebook), PHP -> Hack
(Facebook)
• Et vice-versa !
Ex: C#
http://DevLab.Alsace
Langages informatiques
Evolution actuelle
• Les langages à typage dynamique s’enrichissent avec du typage statique
Ex: JavaScript -> TypeScript, Flow (Facebook), PHP -> Hack (Facebook)
• Et vice-versa !
Ex: C#
• Les langages orientés objets s’enrichissent avec de la programmation
fonctionnelle (lambda expressions)
Ex: Java, C#
• Et vice-versa !
Ex: JavaScript (ES2015), PHP 7
http://DevLab.Alsace
POO
http://DevLab.Alsace
POO - Encapsulation
• Rassembler dans une même structure :
• Variables membres (données)
• Méthodes (fonctions)
• Garantir l’intégrité des données en :
• Ne laissant visible que ce qui doit être réellement utilisé (visibilité)
• N’accédant aux données que par des méthodes
Classe = description abstraite d’un objet
Instancier une classe = créer un objet sur son modèle (grâce au
constructeur)
Propriété = variable membre accessible par un getter et/ou setter
http://DevLab.Alsace
POO - Héritage
• Classe qui hérite d’une autre classe
La classe fille hérite des attributs et méthodes de la
classe mère
http://DevLab.Alsace
POO - Héritage
• Classe qui hérite d’une autre classe
La classe fille hérite des attributs et méthodes de la
classe mère
• Attention à la visibilité des attributs/méthodes et celle
des classes !
http://DevLab.Alsace
POO - Héritage
• Classe qui hérite d’une autre classe
La classe fille hérite des attributs et méthodes de la
classe mère
• Attention à la visibilité des variables
membres/méthodes et celle des classes !
• Pour éviter l’héritage multiple (comme en C++),
des interfaces sont utilisées (Java, C#)
http://DevLab.Alsace
POO - Héritage
• Classe qui hérite d’une autre classe
La classe fille hérite des variables membres et méthodes
de la classe mère
• Attention à la visibilité des variables
membres/méthodes et celle des classes !
• Pour éviter l’héritage multiple (comme en C++),
des interfaces sont utilisées (Java, C#)
• Une interface est la description d’un comportement
Une classe l’implémente quand elle a besoin de ce
comportement
http://DevLab.Alsace
POO - Héritage
• Classe qui hérite d’une autre classe
La classe fille hérite des variables membres et méthodes
de la classe mère
• Attention à la visibilité des variables
membres/méthodes et celle des classes !
• Pour éviter l’héritage multiple (comme en C++),
des interfaces sont utilisées (Java, C#)
• Une interface est la description d’un comportement
Une classe l’implémente quand elle a besoin de ce
comportement
• Une classe abstraite et une interface ne peuvent être
directement instanciées
http://DevLab.Alsace
POO - Polymorphisme
• Surcharge d’une fonction (overload)
Même nom de fonction, paramètres différents
float Additionner(float, int){}
int Additionner(int, int){}
http://DevLab.Alsace
POO - Polymorphisme
• Surcharge d’une fonction (overload)
Même nom de fonction, paramètres différents
float Additionner(float, int){}
int Additionner(int, int){}
• Spécialisation/redéfinition d’une fonction (override)
Même nom de fonction, mêmes paramètres que celle de la classe
parente
http://DevLab.Alsace
POO - Polymorphisme
• Surcharge d’une fonction (overload)
Même nom de fonction, paramètres différents
float Additionner(float, int){}
int Additionner(int, int){}
• Spécialisation/redéfinition d’une fonction (override)
Même nom de fonction, mêmes paramètres que celle de la classe parente
• Généricité d’une classe (generics, template)
Classe ayant un type comme paramètre
class List<T> {...};
List<int> liste = new List<int>();
http://DevLab.Alsace
Langage C#
Introduction
• Langage très complet, qui évolue constamment mais reste cohérent
• Cours en ligne pour débuter :
• Débuter en C# : https://openclassrooms.com/courses/apprenez-a-developper-en-c
• C# avec la POO : https://openclassrooms.com/courses/programmez-en-oriente-objet-avec-c
• ASP.NET MVC (mais pas avec la nouvelle version ASP.NET Core) :
https://openclassrooms.com/courses/apprendre-asp-net-mvc
• Microsoft Virtual Academy : https://mva.microsoft.com
• Présentation ASP.NET 5
• Débuter avec C# partie 1
• Documentation C# et framework .NET :
http://DevLab.Alsace
https://msdn.microsoft.com/library
Langage C#
Généralités – Mots clés principaux
• namespace : paquetage permettant de regrouper des classes
• using : permet d’utiliser des paquetages
• class / interface : servent à définir une classe ou une interface
• Exemple d’héritage :
class Voiture : Vehicule, IQuiRoule {…}
• Constructeurs : méthode de même nom que la classe, sans valeur de retour
http://DevLab.Alsace
Langage C#
Généralités
• Propriétés : permet d’accéder à une variable membre
(lecture/écriture)
• Avantage : permet d’ajouter un traitement à la lecture et/ou à
l’écriture
string name;
• Syntaxe : private
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
http://DevLab.Alsace
Langage C#
Généralités
• Propriétés : permet d’accéder à une variable membre
(lecture/écriture)
• Avantage : permet d’ajouter un traitement à la lecture et/ou à
l’écriture private string name;
public string Name
• Syntaxe : {
get
{
return this.name;
}
set
{
public string Name { get; set; }
this.name = value;
}
}
• Instanciation simplifiée :
Voiture ma_voiture = new Voiture {Couleur = "rouge"};
http://DevLab.Alsace
Langage C#
Généralités
• Parcours d’une liste avec le mot clé « foreach »
• Dictionnaires : listes de clés/valeurs
Ex. : ViewData["ReturnUrl"] = returnUrl;
• Listes génériques : listes de types d’objets qu’on définit dans la
déclaration
Ex.:
http://DevLab.Alsace
List<Voiture> liste_de_voitures = new List<Voiture>();
Langage C#
Généralités
• Attributs : permet d’ajouter des précisions sur tout type de déclaration
Exemple :
[HttpGet]
[AllowAnonymous]
public IActionResult Login(string returnUrl = null) {…}
• Delegate = variable qui pointe sur une méthode
• Lambda expressions : syntaxe simplifiée permettant de créer des
méthodes anonymes
Exemple :
private delegate void DelegateTri(int[] tableau);
DelegateTri tri = delegate(int[] leTableau)
{
Array.Sort(leTableau);
};
http://DevLab.Alsace
private delegate void DelegateTri(int[] tableau);
DelegateTri tri = (leTableau) =>
{
Array.Sort(leTableau);
};
Langage C#
Bonnes pratiques
• Les classes, les interfaces, les méthodes et les propriétés
commencent par une majuscule
• Les variables commencent par une minuscule
• Les variables membres commencent par un « m » minuscule suivi
d’une majuscule
• Les interfaces commencent par un « I » majuscule suivi d’une
autre majuscule
• 1 fichier par classe/interface
http://DevLab.Alsace
Langage C#
Exercice 1
• Créer les classes :
• Animal :
• Propriétés : pelage poils/plumes, largeur, longueur, hauteur…
• Actions (afficher un texte pour chaque action) : dormir, manger…
• Chat (un chat est un animal)
• Propriétés : race, caractère…
• Actions : sauter, marcher…
• Oiseau (un oiseau est un animal)
• Propriétés : espère, envergure…
• Actions : voler, picorer…
• Instancier :
• Un chat roux
• Un canari
http://DevLab.Alsace
Langage C#
Exercice 2
Mais… un oiseau peut (éventuellement) marcher et une poule ne
peut pas voler !
• Intégrer, dans votre modèle objet, les interfaces :
• Marcher
• Voler
• Créer les classes :
• OiseauQuiMarche
• OiseauQuiVole
• Instancier :
• Une poule
• Un canari
http://DevLab.Alsace
Langage C#
Exercice 3
• Créer une liste d’animaux (chats, oiseaux…)
• Parcourir cette liste pour :
• Appeler la méthode « Voler » quand l’animal peut voler
• Appeler la méthode « Marcher » quand l’animal peut marcher
http://DevLab.Alsace
Téléchargement