Les classes abstraites
Les classes abstraites sont des classes et des méthodes de types abstraites. Ainsi, pendant la conception hiérarchique, on pourra créer des classes généralistes et transférer l'intégration à des niveaux plus éloignés quand le comportement arrive à niveau plus défini. Par exemple, si aurait a définir de mathématique, on serait à niveau trop vague pour parler de géométrie et encore plus vague pour calculer la largeur d'un objet. En plus, nous n'avons pas d'unité de mesure à lequel se référé à se niveau. Donc, on ne peut pas le déterminer une réponse n'étant pas abstraite à se niveau de classe, on utilisera donc le mot réservé «abstract». Dans un deuxième exemple, si nous avons des véhicules, il est difficile d'indiquer la consommation d'essence sans savoir la marque, si un modèle est VUS ou une décapotable. On commencera donc en indiquant une classe abstraite Vehicule, lequel sera remplacé par une classe précise de fabricant et de modèle.
abstract class nomclasse { definition; } |
Exemples
Voici un exemple d'une classe abstraite en C# basée sur un concept de véhicules, avec un focus particulier sur les VUS (Véhicules Utilitaires Sport) :
- using System;
-
- namespace AbstractClassVehicles {
- // Classe abstraite représentant un véhicule
- public abstract class Vehicle {
- // Propriétés communes à tous les véhicules
- public string Make { get; set; } // Marque
- public string Model { get; set; } // Modèle
- public int Year { get; set; } // Année de fabrication
-
- // Constructeur pour initialiser les propriétés
- protected Vehicle(string make, string model, int year) {
- Make = make;
- Model = model;
- Year = year;
- }
-
- // Méthode abstraite que les sous-classes doivent implémenter
- public abstract void DisplayInfo();
-
- // Méthode concrète pour démarrer le véhicule
- public virtual void Start() {
- Console.WriteLine($"{Make} {Model} démarre.");
- }
- }
-
- // Classe abstraite spécifique aux VUS (hérite de Vehicle)
- public abstract class SUV : Vehicle {
- public bool HasFourWheelDrive { get; set; } // Indique si le VUS a 4 roues motrices
-
- protected SUV(string make, string model, int year, bool hasFourWheelDrive) : base(make, model, year) {
- HasFourWheelDrive = hasFourWheelDrive;
- }
-
- // Méthode concrète spécifique aux VUS
- public void ToggleFourWheelDrive() {
- if(HasFourWheelDrive) {
- Console.WriteLine($"{Make} {Model} active les 4 roues motrices.");
- } else {
- Console.WriteLine($"{Make} {Model} n'a pas de 4 roues motrices.");
- }
- }
- }
- }
Voici un exemple d'une classe abstraite utilisé par d'autres classes en C# :
- using System;
-
- namespace AbstractClassExample
- {
- // Définition d'une classe abstraite
- public abstract class Shape {
- // Propriété commune à toutes les formes
- public string Color { get; set; }
-
- // Constructeur de la classe abstraite
- public Shape(string color) {
- Color = color;
- }
-
- // Méthode abstraite : doit être implémentée par les classes dérivées
- public abstract double GetArea();
-
- // Méthode concrète : peut être utilisée ou remplacée par les classes dérivées
- public virtual void DisplayInfo() {
- Console.WriteLine($"Forme de couleur : {Color}");
- }
- }
-
- // Classe concrète héritant de Shape
- public class Circle : Shape {
- public double Radius { get; set; }
-
- public Circle(string color, double radius) : base(color) {
- Radius = radius;
- }
-
- public override double GetArea() {
- return Math.PI * Radius * Radius;
- }
-
- public override void DisplayInfo() {
- base.DisplayInfo();
- Console.WriteLine($"Cercle avec un rayon de {Radius}, Surface : {GetArea():0.00}");
- }
- }
-
- // Une autre classe concrète héritant de Shape
- public class Rectangle : Shape {
- public double Width { get; set; }
- public double Height { get; set; }
-
- public Rectangle(string color, double width, double height) : base(color) {
- Width = width;
- Height = height;
- }
-
- public override double GetArea() {
- return Width * Height;
- }
-
- public override void DisplayInfo() {
- base.DisplayInfo();
- Console.WriteLine($"Rectangle de {Width} x {Height}, Surface : {GetArea():0.00}");
- }
- }
-
- class Program {
- static void Main(string[] args) {
- Shape circle = new Circle("Rouge", 5.5);
- circle.DisplayInfo();
-
- Shape rectangle = new Rectangle("Bleu", 10, 4);
- rectangle.DisplayInfo();
- }
- }
- }