C# et Tests Unitaires
Histoire
Histoire
- Langage de programmation orienté objet
- Créé par Microsoft (notamment par Anders Hejlsberg)
- Proche du java
- Fonctionne sur la plateforme .net
Typage statique / dynamique
int a = 1;
string t = "Toto";
bool b = true;
float f = 10.5f;
var a = 1;
var t = "Toto";
var b = true;
var f = 10.5f;
Typage fort / faible
C#
int a = 1;
a = "Toto"; => Erreur
var a = 1;
a = "Toto"; => Erreur
Javascript
var a = 1;
a = function(){Console.log(“ok”)};
PHP
$a = 1;
$a = “value”;
Plateforme .Net
Programmation Orientée Objet
Programmation Orientée Objet
Programmation Orientée Objet : Paradigme de programmation consistant en la définition et l’assemblage de briques logicielles appelées objets.
Origines
- Provient des norvégiens Ole-Johan Dahl et Kristen Nygaard au début des années 1960 et poursuivi par les travaux d'Alan Kay dans les années 1970
- Le langage Simula 67 est le père de tout langage objet car il est le premier à avoir défini des langages orientée objet à classes
- La Programmation Orientée Objet est réellement apparu avec la venu du Smalltalk 71 puis du Smalltalk 80 qui ont déterminé les principes de cette programmation
- Exemple de langage objets : C++, Java, Python, C#, ...
Pourquoi ?
- Programmation procédurale => coût de développement augmente avec la complexité
- Programmation Orientée Objet =>
- Diminuer le coût du logiciel
- Augmenter sa durée de vie
- Augmenter sa réutilisabilité
- Augmenter la facilité de maintenance
Pourquoi ?
- Facilite l'organisation, la réutilisation du code. Des méthodes plus intuitive
- Facilite de correction, et des projets plus faciles à gérer
- Facilement concevable car il décrit des entités comme il en existe dans le monde réel.
Pourquoi ?
- Factorise le code en ensembles logiques.
- Facilite la sécurisation du programme en interdisant ou autorisant l'accès à ces objets aux autres parties du programme.
- Permet de diviser la complexité entre le concepteur et l’utilisateur des objets
Piliers
- Encapsulation :
- Désigne le principe de regrouper des données brutes avec un ensemble de routines permettant de les lire ou de les manipuler. Ce principe est souvent accompagné du masquage de ces données brutes. L’ensemble se considère alors comme une boîte noire ayant un comportement et des propriétés spécifiés.
Piliers
-
Héritage :
- C'est la définition d’une classe par extension des caractéristiques d’une autre classe, exemple : on a on a crée une classe Vehicule. Ainsi les classes Automobile et Avion ont pu hériter des caractéristiques de Vehicule.
Piliers
-
Polymorphisme :
- C'est le concept consistant à fournir une interface unique à des entités pouvant avoir différents types.
-
Il existe plusieurs sortes de polymorphismes fondamentalement différents :
- Le polymorphisme ad hoc (également surcharge ou en anglais overloading)
- Le polymorphisme paramétrique (également généricité ou en anglais template)
- Le polymorphisme d'héritage (également redéfinition, spécialisation ou en anglais overriding)
Principes
- Single responsability principle
- une classe doit avoir une et une seule responsabilité
- Open/closed principle
- une classe doit être ouverte à l'extension, mais fermée à la modification
- Liskov Substitution principle
- une instance de type T doit pouvoir être remplacée par une instance de type G, tel que G sous-type de T, sans que cela modifie la cohérence du programme
Principes
- Interface segregation principle
- préférer plusieurs interfaces spécifiques pour chaque client plutôt qu'une seule interface générale
- Dependency iversion principle
- il faut dépendre des abstractions, pas des implémentations
Visibilités
- Public = visible pour tout le monde
- Privée = visible pour la classe elle-même
- Protégé = visible pour la classe elle-même et celles en héritant
Classe en C#
Constructeur
Constructeur
public class MaClasse {
private int a;
private string b;
// Constructeur
public MaClasse() { }
// Surcharge d'un constructeur
public MaClasse(int a, string b) {
this.a = a;
this.b = b;
}
}
Constructeur
public class MaClasse {
private int a;
private string b;
// Constructeur
public MaClasse() : this(42, "string")
{ }
// Surcharge d'un constructeur
public MaClasse(int a, string b) {
this.a = a;
this.b = b;
}
}
Constructeur
public class MaClasse {
private int a;
private string b;
// Surcharge d'un constructeur
public MaClasse(int a = 42, string b = "string") {
this.a = a;
this.b = b;
}
}
Garbage collector
Garbage collector
SOUS-SYSTÈME INFORMATIQUE DE GESTION AUTOMATIQUE DE LA MÉMOIRE.
IL EST RESPONSABLE DU RECYCLAGE DE LA MÉMOIRE PRÉALABLEMENT ALLOUÉE PUIS INUTILISÉE.
Garbage collector
Destructeur
Destructeur
- SUPPRIMER L’OBJET DE LA MÉMOIRE
- LIBÈRE TOUTES LES RESSOURCES QUE L’OBJET À STOCKÉES
- NON DISPONIBLE DANS TOUS LES LANGAGES
Destructeur
CLASS CAR {
~CAR() // DESTRUCTOR
{
// CLEANUP STATEMENTS...
}
}
Mot clés
Mot clés
- NEW => UTILISÉ POUR CRÉER UN OBJET ET INVOQUER SON CONSTRUCTEUR
- VAR => TYPAGE IMPLICITE
- STATIC => UTILISER SUR UN ATTRIBUT, UNE MÉTHODE, LE MEMBRE STATIQUE APPARTIENT AU TYPE ET NON À L’OBJET
- READONLY
- CONST
- VIRTUAL => UTILISÉ POUR AUTORISER LA REDÉFINITION DE LA MÉTHODE OU DE LA PROPRIÉTÉ
- OVERRIDE => REQUIS POUR REDÉFINIR UNE MÉTHODE OU PROPRIÉTÉ ABSTRAITE OU VITUELLE
C#
By benjamin tourman
C#
- 382