Définition de classe

Programmation procédurale et programmation orientée objet

Avant l’apparition des classes, des langages comme le C ne disposaient pas de ce concept. Ce style de programmation sans classes ni objets, tel que le langage C, est appelé programmation procédurale.

Programmation procédurale : un programme est une suite d’instructions, l’objectif principal est d’optimiser les étapes d’exécution.

Avec l’existence des classes, nous pouvons réaliser de la programmation orientée objet.

Programmation orientée objet : un programme est constitué d’un ensemble de classes encapsulées. L’idée centrale consiste à regrouper les données et les fonctions qui manipulent ces données au sein d’unités logiquement liées ; ces unités sont appelées classes (class).

Définition d’une classe

Une classe est une structure de données qui contient des données stockées et du code exécutable. Elle comporte deux catégories de membres :

  1. Membres de données (Data Members) : stockent les attributs de l’objet : champs (Fields), constantes (Constants)
  2. Membres fonctionnels (Function Members) : implémentent la logique de comportement des objets : méthodes, propriétés, constructeurs, destructeurs, opérateurs, indexeurs, événements

Une classe est un ensemble encapsulant des données et fonctions logiquement associées, utilisé pour modéliser des entités du monde réel ou abstrait.

En résumé, une classe est une structure de données composée de données et de fonctions. On peut créer des objets à partir d’une classe ; les données et membres sont accessibles via les objets, et ils sont aussi accessibles directement depuis l’intérieur de la classe.

Déclaration d’une classe

Le mot-clé class définit uniquement un modèle de classe, il ne crée pas d’instances d’objets. Un modèle comporte trois parties : nom de la classe, membres de la classe, caractéristiques de la classe.

Syntaxe

class NomClasse
{
    // déclaration des membres (champs, méthodes, l’ordre n’est pas imposé)
}Langage du code : JavaScript (javascript)

La déclaration de classe est souvent désignée sous le nom de définition de classe (class definition)


class Program
{
    static void Main(string[] args)
    {
        AddCalculator addCalculator = new AddCalculator();
        SubCalculator subCalculator = new SubCalculator();
    }
}


class AddCalculator
{
    public int A { get; set; }
    public int B { get; set; }
    public int Add()
    {
        return A + B;
    }
}

class SubCalculator
{
    public int A { get; set; }
    public int B { get; set; }
    public int Subtract()
    {
        return A - B;
    }
}Langage du code : JavaScript (javascript)

Dans l’exemple ci-dessus, deux classes sont déclarées : une pour les additions, l’autre pour les soustractions. Dans la fonction Main du programme principal, nous instancions ces deux classes pour les utiliser.

Contenu issu du site foxdevelop.com

Les déclarations de classes ne doivent pas obligatoirement être écrites de haut en bas. Vous pouvez déclarer vos classes en bas du fichier et les appeler depuis la fonction Main située au-dessus. Une classe n’est qu’un modèle, un plan. Le code ne s’exécute pas séquentiellement de haut en bas : l’exécution débute dans Main, et le programme va chercher le modèle correspondant lorsqu’il a besoin de la classe.

Membres de classe

Champs (Fields)

Un champ est une variable appartenant à une classe. Il peut s’agir d’un type natif ou d’un type défini par l’utilisateur, et autorise la lecture et l’écriture de données.

Type NomChamp;
class MyClass
{
    int MyField; // champ de type int nommé MyField
}Langage du code : JavaScript (javascript)

Différence majeure avec C/C++ : C# ne dispose pas de variables globales. Tous les champs doivent être déclarés à l’intérieur d’un type (classe ou structure).

Règles d’initialisation des champs

(1) Initialisation implicite (sans affectation)

Le compilateur affecte automatiquement une valeur par défaut adaptée au type ; les valeurs par défaut varient selon chaque type.

int F1;    // valeur par défaut 0
string F2; // valeur par défaut nullLangage du code : JavaScript (javascript)

Le tableau ci-dessous liste les types C# et leurs valeurs par défaut pour les champs. Cette règle ne s’applique pas aux variables locales, que le développeur doit initialiser manuellement.

Types valeur primitifs

Type de donnéesValeur par défautDescription
sbyte0Entier 8 bits signé
byte0Entier 8 bits non signé
short0Entier 16 bits signé
ushort0Entier 16 bits non signé
int0Entier 32 bits signé
uint0Entier 32 bits non signé
long0LEntier 64 bits signé
ulong0ULEntier 64 bits non signé
float0.0fFlottant simple précision
double0.0dFlottant double précision
decimal0.0mDécimal haute précision
char'\0' (caractère nul, ASCII 0)Caractère unique
boolfalseType booléen
Énumération EnumL’élément d’énumération correspondant à l’entier de base 0Les énumérations reposent sur des entiers, valeur par défaut 0
Structure structTous les champs prennent leur valeur par défaut respectiveType valeur personnalisé, remis à zéro globalement

Types référence

Tous les types référence ont pour valeur par défaut null, ce qui signifie qu’ils ne pointent vers aucun objet sur le tas (heap).

Autrement dit, aucune adresse mémoire n’est stockée. Rappelez-vous le schéma mémoire vu précédemment : un type référence conserve une adresse heap telle que 000001 01010. Lorsque la valeur est null, aucune adresse valide n’est enregistrée.

Catégorie de typeExemples de typesValeur par défaut
Types référence natifsstring, objectnull
Classe personnalisée classPerson Studentnull
Tableaux (toutes dimensions)int[], string[,]null
Délégués / ÉvénementsAction, Func, delegate personnalisénull
Interface interfaceToute variable d’interfacenull

Exemples

string str;        // par défaut null
Student jason;     // classe personnalisée, par défaut null
int[] arr;         // tableau, par défaut null
Action callback;   // délégué, par défaut nullLangage du code : JavaScript (javascript)

Types acceptant la valeur null (Nullable / T?)

Ajouter un point d’interrogation ? après un type valeur primitif crée un nouveau type autorisant l’absence de valeur. Par exemple, int age; vaudra 0 par défaut si non initialisé. Si vous voulez représenter l’absence totale de valeur, écrivez int? age2;. age2 est alors un type nullable et peut recevoir null : int? age2 = null;

Un type nullable est un ValueType encapsulé, sa valeur par défaut est null, ce qui signifie « aucune valeur valide ».

Syntaxe de déclarationValeur par défaut
int? numnull
bool? flagnull
decimal? pricenull
class Test
{
    int a;      // automatiquement égal à 0
    string b;   // automatiquement égal à null
    bool c;     // automatiquement égal à false
}Langage du code : JavaScript (javascript)

(2) Initialisation explicite

Affectez une valeur au moment de la déclaration à l’aide de =. La valeur fournie doit être déterminable à la compilation ; les valeurs aléatoires ou les entrées utilisateur ne sont pas autorisées ici.

int days = 25;
string word = "foxdevelop";Langage du code : JavaScript (javascript)
(3) Écriture abrégée pour plusieurs champs du même type

Plusieurs variables d’un même type peuvent être déclarées ensemble, séparées par des virgules. Il est interdit de mélanger des types différents dans une même déclaration

int player, blood = 25;
string title, subTitle = "hi welcome to foxdevelop.com";Langage du code : JavaScript (javascript)

Méthodes (Methods)

Définition d’une méthode

Une méthode est un bloc de code nommé, réutilisable et exécutable, équivalent aux fonctions membres du C++. Lorsqu’elle est appelée, elle exécute son code interne puis rend la main à l’appelant. On distingue les méthodes avec valeur de retour et les méthodes sans valeur de retour.

Quatre composantes d’une méthode

  1. Type de retour : écrivez void s’il n’y a pas de valeur renvoyée
  2. Nom de la méthode
  3. Liste des paramètres : les parenthèses () sont obligatoires même sans paramètre
  4. Corps de la méthode : code exécutable encadré par {}

class Program
{
    static void Main(string[] args)
    {
        Robot robot = new Robot();
        robot.SayHello();
    }
}


class Robot
{
    public void SayHello()
    {
        Console.WriteLine("Hello everyone");
        Console.WriteLine("Welcome to visit foxdevelop.com");
    }
}Langage du code : JavaScript (javascript)

Le mot-clé public devant public void SayHello() est un modificateur d’accès : il permet d’appeler cette fonction depuis l’extérieur de la classe sous la forme nomObjet.NomMéthode. Sans public, le niveau d’accès par défaut est private. Les méthodes privées ne sont accessibles qu’à l’intérieur de la classe ; on ne peut pas les appeler depuis l’extérieur même avec une instance telle que robot.

Création de variables de classe et d’instances

1. Caractéristiques fondamentales des types référence

Les classes appartiennent aux types référence. La mémoire est divisée en deux zones :

  1. Pile (Stack) : stocke les variables de référence (pointeurs vers des adresses mémoire)
  2. Tas (Heap) : stocke les données réelles des objets

2. Création pas à pas d’un objet

1 Déclaration seule de la variable de référence (seule la pile est allouée, aucun objet sur le tas)
Robot robot; 
// Alloue uniquement un emplacement de référence sur la pile, valeur indéfinie, aucun objet sur le tas
Langage du code : JavaScript (javascript)
Ce code crée une variable sur la pile destinée à conserver une référence vers Robot (adresse sur le tas), mais elle vaut null et est vide à ce stade.

2 Allocation mémoire sur le tas avec l’opérateur new

new NomType();Langage du code : JavaScript (javascript)
  1. Alloue de la mémoire sur le tas et initialise automatiquement tous les champs avec leurs valeurs par défaut
  2. Retourne l’adresse de référence de l’objet sur le tas et l’affecte à la variable de la pile
robot = new Robot();
Langage du code : JavaScript (javascript)
class Program
{
    static void Main(string[] args)
    {
        Robot robot;
        robot = new Robot();
    }
}


class Robot
{
    void SayHello()
    {
        Console.WriteLine("Hello everyone");
        Console.WriteLine("Welcome to visit foxdevelop.com");
    }
}Langage du code : JavaScript (javascript)
3. Déclaration et instanciation sur une même ligne
Robot robot = new Robot();Langage du code : JavaScript (javascript)
class Program
{
    static void Main(string[] args)
    {
        Robot robot = new Robot();
    }
}Langage du code : JavaScript (javascript)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *