Concevoir et utiliser des classes

Effectué

Dans la programmation orientée objet (OOP), les classes sont les blocs de construction d’une application. Comprendre la relation entre les classes et les objets est essentielle.

  • Les classes sont les blueprints que les développeurs utilisent pour définir les propriétés (données) et les méthodes (comportements) des objets. Les classes offrent un moyen d’encapsuler les données et le comportement, ce qui facilite l’organisation et la gestion du code.
  • Les objets sont des instances de classes. Lorsqu’une classe est instanciée, un objet est créé en mémoire. Chaque objet a son propre ensemble de propriétés et de méthodes, mais partage la même structure définie par la classe.

L’examen des objets réels autour de vous peut vous aider à comprendre le fonctionnement des classes et des objets dans la programmation. Les objets du monde réel ont des attributs (propriétés) et des comportements (méthodes) qui définissent leur objectif et leur fonctionnalité. Par exemple, une voiture est un objet avec des attributs tels que la marque, le modèle et la couleur, et des comportements tels que la conduite et l’arrêt.

Objets réels

Les gens interagissent constamment avec des objets dans leur vie quotidienne. En fait, presque tout ce que nous interagissons peut être considéré comme un objet.

Les critères suivants peuvent être utilisés pour définir des objets dans le monde réel :

  • Les objets sont les éléments que nous pouvons voir et toucher.
  • Les objets ont un but.
  • Les objets ont des parties qui prennent en charge leur objectif.

Un crayon est un exemple d’objet physique. L’objectif d’un crayon est de créer une note ou un dessin. Les parties d’un crayon incluent le corps, la pointe, et peut-être une gomme. Les parties fonctionnent ensemble pour atteindre l’objectif prévu du crayon.

Il existe également des objets physiques qui existent en tant qu’assembly d’autres objets. La liste suivante fournit des exemples d’objets composés d’autres objets :

  • Une voiture : L’objectif d’une voiture est de fournir des transports terrestres pour les particuliers et les familles. Les parties d’une voiture comprennent un moteur, les roues, une roue de direction, et bien d’autres. Les parties d’une voiture travaillent ensemble pour permettre le transport terrestre.
  • Une maison : L’objectif d’une maison est de fournir un abri. Les parties d’une maison comprennent une fondation, des murs extérieurs, un toit et des chambres. Ces parties fonctionnent ensemble pour créer un espace de vie.
  • Un téléphone intelligent : l’objectif d’un téléphone intelligent est d’aider l’utilisateur à effectuer des tâches et des activités quotidiennes. Les parties d’un téléphone intelligent incluent un écran, un microprocesseur, une mémoire et un stockage, une batterie, des caméras et des boutons. Ces parties fonctionnent ensemble pour activer les fonctionnalités de communication, de divertissement et de productivité.

Chaque partie d’une voiture, d’une maison ou d’un téléphone intelligent est un objet avec son propre objectif et peut également être un assembly d’objets.

Attributs et fonctionnalités d’un objet physique

Prenez une minute pour prendre l’exemple d’un crayon. Un crayon comporte des parties (corps, conseil, gomme) et un but (créer une note ou un dessin). Les crayons partagent ces caractéristiques de base. Cependant, tous les crayons ne sont pas les mêmes.

Certains crayons sont courts, certains sont longs. Certains crayons sont jaunes, certains sont noirs. Certains crayons ont une pointe terne, certains ont une pointe aiguisée. Certains crayons ont une gomme, certains n’ont pas de gomme.

Les attributs d’un objet sont souvent divisés en catégories physiques et comportementales suivantes :

  • Physique : les attributs physiques sont les aspects d’un objet qui peut être vu ou mesuré.
  • Comportement : les attributs comportementaux sont les aspects d’un objet qui décrivent ses fonctionnalités ou interactions avec d’autres objets.

Pour l’exemple de crayon, les attributs physiques incluent la longueur du corps, la couleur du corps, la netteté de la pointe et si le crayon a ou non une gomme. Les attributs comportementaux incluent la possibilité d’écrire, la possibilité d’effacer et la possibilité d’être aiguisé. Un crayon interagit avec du papier ou d’autres objets solides qui peuvent être écrits ou dessinés dessus.

Les attributs physiques sont souvent appelés propriétés, tandis que les attributs comportementaux sont souvent appelés fonctions (méthodes de programmation C#).

Classes de code et objets dans la programmation C#

Dans le monde de la programmation C#, les propriétés et méthodes d’objet sont définies par une classe. Les classes fournissent le blueprint pour ce qu’un objet (une instance de la classe) peut effectuer. Le blueprint d’une classe est appelé définition de classe.

Lorsqu’une application est en cours d’exécution, l’ordinateur utilise une définition de classe pour allouer de la mémoire pour un objet (instance de la classe). L’ordinateur utilise le blueprint pour configurer un bloc de mémoire adapté à l’objet. Un objet est essentiellement un bloc de mémoire.

Les objets de code, tout comme les objets physiques, peuvent avoir des valeurs différentes affectées à ses propriétés.

Les classes encapsulent les données et le comportement

Les classes fournissent un moyen d’encapsuler les données et le comportement. L’encapsulation est le processus de combinaison de données et de comportement en une seule unité. Les classes utilisent des propriétés pour activer l’accès aux données et aux méthodes pour activer les comportements.

Propriétés de classe

Les propriétés de classe sont utilisées pour gérer les données qui différencient un objet (instance de classe) d’un autre objet du même type.

Les propriétés de classe permettent aux objets de lire, d’écrire ou de calculer la valeur des variables (champs de données) définies dans la classe. Les propriétés apparaissent comme des membres de données publics, mais elles sont implémentées comme des méthodes spéciales appelées accessors. Cette fonctionnalité permet aux appelants d’accéder facilement aux données tout en favorisant la sécurité et la flexibilité des données.

Les valeurs de propriété peuvent être lues à l’aide d’un accesseur get et affectées à l’aide d’un accesseur set.

Méthodes de classe

Les méthodes de classe définissent les actions (comportements) qu’une classe peut effectuer.

Les méthodes peuvent prendre des paramètres qui fournissent des données d’entrée et peuvent retourner des données de sortie via des paramètres. Les méthodes peuvent également retourner une valeur directement, sans utiliser de paramètre.

Par exemple, la classe Console inclut des méthodes WriteLine, ReadLineet Clear (entre autres). Ces méthodes permettent d’activer les comportements prévus de la classe Console. Les méthodes peuvent être utilisées pour effectuer des actions, telles que des calculs, une manipulation de données ou une interaction avec d’autres objets.

Les méthodes sont souvent conçues pour accepter un ou plusieurs arguments de méthode. Les arguments de méthode sont passés à la méthode en tant que paramètres de l’instruction appelante utilisée pour appeler la méthode. Par exemple, la méthode WriteLine de la classe Console peut accepter un argument de chaîne fourni par l’instruction appelante.

Définitions de classes dans le code C#

L’exemple suivant montre une classe simple en C#. La classe Phone a des propriétés pour Brand, Modelet Year. La classe inclut également des méthodes pour Call et Text.


public class Phone
{
    public string? Brand { get; set; }
    public string? Model { get; set; }
    public int Year { get; set; }

    public void Call(string phoneNumber)
    {
        Console.WriteLine($"Calling {phoneNumber}...");
    }

    public void Text(string phoneNumber, string message)
    {
        Console.WriteLine($"Texting {phoneNumber}: {message}");
    }
}

Utilisation d’espaces de noms

Dans la programmation C#, les espaces de noms sont utilisés de deux façons :

  • La bibliothèque de classes .NET utilise des espaces de noms pour organiser ses nombreuses classes.
  • Les développeurs déclarent leurs propres espaces de noms pour contrôler l’étendue des noms de classes et de méthodes dans des projets de programmation plus volumineux.

Espaces de noms dans la bibliothèque de classes .NET

Les espaces de noms sont utilisés par la bibliothèque de classes .NET pour regrouper les types associés, ce qui facilite leur recherche et leur utilisation.

Prenez l'exemple de l'extrait de code suivant :


System.Console.WriteLine("Hello World!");

Dans cet exemple, System est un espace de noms et Console est une classe dans cet espace de noms.

Fournir le nom complet de la classe (System.Console) garantit que la classe correcte est utilisée. Toutefois, l’utilisation de noms qualifiés complets peut être fastidieuse lors de l’utilisation de nombreuses classes à partir du même espace de noms. Pour améliorer la lisibilité du code, vous pouvez utiliser la directive using. La directive using vous permet d’utiliser des types définis dans un espace de noms sans spécifier l’espace de noms complet de ce type.

L’extrait de code suivant implémente la directive using pour améliorer la lisibilité du code :


using System;

Console.WriteLine("Hello World!");

Remarque

À compter de .NET 6, les directives implicitesglobal using sont ajoutées aux nouveaux projets C#. Cela signifie que vous pouvez utiliser des types définis dans ces espaces de noms sans avoir à spécifier leur nom complet ou à ajouter manuellement une directive using. L’aspect implicite fait référence au fait que les directives d’utilisation globale sont ajoutées à un fichier généré dans le répertoire obj du projet. Cette fonctionnalité vous permet d’utiliser Console.WriteLine sans déclarer explicitement using System lors du développement d’applications dans les versions 6.0 ou ultérieures de .NET.

Organisation de classes avec des espaces de noms

La déclaration de vos propres espaces de noms peut vous aider à contrôler l’étendue des noms de classes et de méthodes dans des projets de programmation plus volumineux. Utilisez le mot clé namespace pour déclarer un espace de noms.

Prenez l'exemple de l'extrait de code suivant :


namespace SampleNamespace
{
    class SampleClass
    {
        public void SampleMethod()
        {
            System.Console.WriteLine("SampleMethod inside SampleNamespace");
        }
    }
}

Le nom de l’espace de noms doit être un nom d’identificateur C# valide.

Vous pouvez déclarer un espace de noms pour tous les types définis dans ce fichier, comme indiqué dans l’extrait de code suivant :


namespace SampleNamespace;

class SampleClass
{
    public void SampleMethod()
    {
        System.Console.WriteLine("SampleMethod inside SampleNamespace");
    }
}

class AnotherSampleClass
{
    public void AnotherSampleMethod()
    {
        System.Console.WriteLine("AnotherSampleMethod inside SampleNamespace");
    }
}

L’avantage de cette nouvelle syntaxe est qu’il est plus simple, ce qui permet d’économiser de l’espace horizontal et des accolades. Cela facilite la lecture de votre code.

Vue d’ensemble des espaces de noms

Les espaces de noms ont les propriétés suivantes :

  • Ils organisent des projets de code volumineux.
  • Ils sont délimités à l’aide de l’opérateur ..
  • La directive using évite l’exigence de spécifier le nom de l’espace de noms pour chaque classe.
  • L’espace de noms global est l’espace de noms « racine » : global::System fait toujours référence à l’espace de noms système .NET.

L’utilisation d’espaces de noms pour regrouper des types associés facilite leur recherche et leur utilisation.