Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Abstraction | Principes de la POO
C# au-delà des Bases
course content

Contenu du cours

C# au-delà des Bases

C# au-delà des Bases

1. Structures Supplémentaires et Gestion des Fichiers
2. Structures et Énumérateurs
3. Introduction à la Programmation Orientée Objet (POO)
4. Essentiels de la POO
5. Principes de la POO

book
Abstraction

L'abstraction est un concept fondamental de la programmation orientée objet (POO) qui permet aux développeurs de masquer les détails d'implémentation complexes et de se concentrer sur les fonctionnalités essentielles. En C#, l'abstraction est réalisée grâce aux classes abstraites.

Une classe abstraite est une classe qui ne peut pas être instanciée, ce qui signifie que nous ne pouvons pas créer un objet de cette classe. Une classe abstraite peut contenir des attributs et des méthodes comme n'importe quelle autre classe, mais elle peut également contenir des méthodes abstraites qui sont des méthodes modèles destinées à être implémentées par des classes dérivées.

Nous pouvons créer une classe abstraite en ajoutant le mot-clé abstract avant la définition de la classe. Par exemple, créons une classe abstraite appelée Shape :

cs

index

copy
12345678910111213141516171819
using System; abstract class Shape { protected float circumference; public float getCircumference() { return circumference; } } class ConsoleApp { static void Main() { Shape s = new Shape(); // Error: Cannot create an instance of an abstract class } }

De même, nous pouvons créer une méthode abstraite en ajoutant le mot-clé abstract avant son type de retour. Une méthode abstraite n'a pas de corps - c'est simplement un modèle :

cs

index

copy
1234567891011
abstract class Shape { protected float circumference; public float getCircumference() { return circumference; } public abstract float getArea(); }

Le but de ceci est de créer un plan pour d'autres classes. Cela aide à simplifier le code. Pour mieux comprendre cela, regardons la tâche de polymorphisme du chapitre 5 :

cs

index

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
using System; class Shape { // Perimeter is the length of the 'outline' of a shape protected float perimeter; public float getPerimeter() { return perimeter; } public virtual float getArea() { return 0.0f; } // A virtual method can only be either 'public' or 'protected' protected virtual float calculatorPerimeter() { return 0.0f; } } class Rectangle : Shape { float width; float height; public Rectangle(float width, float height) { this.width = width; this.height = height; this.perimeter = getPerimeter(); } public override float getArea() { return width * height; } protected override float calculatorPerimeter() { return width * 2 + height * 2; } } class Square : Shape { float length; public Square(float length) { this.length = length * length; } public override float getArea() { return length * length; } protected override float calculatorPerimeter() { return 4 * length; } } class Circle : Shape { float radius; public Circle(float radius) { this.radius = radius; } // Area of a Circle = pi . r . r public override float getArea() { return 3.14f * radius * radius; } // Perimeter (or) Circumference: 2 . pi . r protected override float calculatorPerimeter() { return 2.00f * 3.14f * radius; } } class ConsoleApp { static void Main() { Rectangle r1 = new Rectangle(10f, 20f); Square s1 = new Square(10f); Circle c1 = new Circle(10f); Console.WriteLine(r1.getArea()); Console.WriteLine(s1.getArea()); Console.WriteLine(c1.getArea()); } }

Dans l'exemple ci-dessus, nous n'avons jamais l'intention d'utiliser la classe Shape, cependant nous avons dû écrire quelques implémentations fictives des méthodes getArea et calculatePerimeter à l'intérieur de la classe Shape. Nous pouvons quelque peu simplifier ce code en rendant la classe Shape abstraite, en plus de cela, nous pouvons également rendre les méthodes getArea et calculatePerimeter abstraites.

cs

index

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
using System; abstract class Shape { // Perimeter is the length of the 'outline' of a shape protected float perimeter; public float getPerimeter() { return perimeter; } public abstract float getArea(); protected abstract float calculatorPerimeter(); } class Rectangle : Shape { float width; float height; public Rectangle(float width, float height) { this.width = width; this.height = height; this.perimeter = getPerimeter(); } public override float getArea() { return width * height; } protected override float calculatorPerimeter() { return width * 2 + height * 2; } } class Square : Shape { float length; public Square(float length) { this.length = length * length; } public override float getArea() { return length * length; } protected override float calculatorPerimeter() { return 4 * length; } } class Circle : Shape { float radius; public Circle(float radius) { this.radius = radius; } public override float getArea() { return 3.14f * radius * radius; } protected override float calculatorPerimeter() { return 2.00f * 3.14f * radius; } } class ConsoleApp { static void Main() { Rectangle r1 = new Rectangle(10f, 20f); Square s1 = new Square(10f); Circle c1 = new Circle(10f); // We cannot create an instance of 'Shape' but we can use type datatype "Shape" for creating variables, arrays or lists List<Shape> shapes = new List<Shape>(); shapes.Add(r1); shapes.Add(s1); shapes.Add(c1); foreach(Shape shape in shapes) { Console.WriteLine(shape.getArea()); } } }

1. Quel mot-clé est utilisé pour rendre une classe abstraite ?

2. Une classe abstraite peut-elle être instanciée ?

Quel mot-clé est utilisé pour rendre une classe abstraite ?

Quel mot-clé est utilisé pour rendre une classe abstraite ?

Sélectionnez la réponse correcte

Une classe abstraite peut-elle être instanciée ?

Une classe abstraite peut-elle être instanciée ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 8
We're sorry to hear that something went wrong. What happened?
some-alt