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
Made with Slides.com