Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Abstractie | OOP-Principes
C# Verder dan de Basis

bookAbstractie

Abstractie is een fundamenteel concept in objectgeoriënteerd programmeren (OOP) waarmee complexe implementatiedetails verborgen kunnen worden en de focus gelegd wordt op essentiële functionaliteiten. In C# wordt abstractie bereikt via abstracte klassen.

Note
Opmerking

OOP was oorspronkelijk gebaseerd op drie principes (soms aangeduid als "De Drie Pijlers van OOP"), waaronder Encapsulatie, Overerving en Polymorfisme. Daarom is abstractie een nieuwe toevoeging en wordt het volgens sommige bronnen niet altijd als een fundamenteel concept beschouwd. Niettemin is het een belangrijk concept.

Een abstracte klasse is een klasse die niet geïnstantieerd kan worden, wat betekent dat je geen object van die klasse kunt maken. Een abstracte klasse kan attributen en methoden bevatten zoals elke andere klasse, maar kan ook abstracte methoden bevatten, dit zijn blauwdrukmethoden die geïmplementeerd moeten worden door afgeleide klassen.

Je kunt een abstracte klasse maken door het sleutelwoord abstract toe te voegen vóór de definitie van de klasse. Bijvoorbeeld, laten we een abstracte klasse genaamd Shape maken:

index.cs

index.cs

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 } }

Op vergelijkbare wijze kan een abstracte methode worden aangemaakt door het sleutelwoord abstract vóór het retourtype te plaatsen. Een abstracte methode heeft geen implementatie - het is slechts een blauwdruk:

index.cs

index.cs

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

Het doel hiervan is om een blauwdruk voor andere klassen te creëren. Dit helpt bij het vereenvoudigen van de code. Om dit beter te begrijpen, bekijken we de Polymorfisme-opdracht uit Hoofdstuk 5:

index.cs

index.cs

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()); } }

In het bovenstaande voorbeeld is het niet de bedoeling om de Shape-klasse direct te gebruiken, maar moest je toch enkele fictieve implementaties van de methoden getArea en calculatePerimeter in de Shape-klasse schrijven. Je kunt deze code enigszins vereenvoudigen door de Shape-klasse abstract te maken. Daarnaast kun je ook de methoden getArea en calculatePerimeter abstract maken.

Note
Opmerking

Een methode kan ofwel abstract of virtual zijn, maar niet beide tegelijkertijd. Het is echter belangrijk op te merken dat een abstracte methode in feite een virtuele (overschrijfbare) methode is, maar zonder implementatie in de basisklasse.

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
using System; using System.Collections.Generic; 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. Welke keyword wordt gebruikt om een klasse abstract te maken?

2. Kan een abstracte klasse worden geïnstantieerd?

question mark

Welke keyword wordt gebruikt om een klasse abstract te maken?

Select the correct answer

question mark

Kan een abstracte klasse worden geïnstantieerd?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 5. Hoofdstuk 8

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 2.04

bookAbstractie

Veeg om het menu te tonen

Abstractie is een fundamenteel concept in objectgeoriënteerd programmeren (OOP) waarmee complexe implementatiedetails verborgen kunnen worden en de focus gelegd wordt op essentiële functionaliteiten. In C# wordt abstractie bereikt via abstracte klassen.

Note
Opmerking

OOP was oorspronkelijk gebaseerd op drie principes (soms aangeduid als "De Drie Pijlers van OOP"), waaronder Encapsulatie, Overerving en Polymorfisme. Daarom is abstractie een nieuwe toevoeging en wordt het volgens sommige bronnen niet altijd als een fundamenteel concept beschouwd. Niettemin is het een belangrijk concept.

Een abstracte klasse is een klasse die niet geïnstantieerd kan worden, wat betekent dat je geen object van die klasse kunt maken. Een abstracte klasse kan attributen en methoden bevatten zoals elke andere klasse, maar kan ook abstracte methoden bevatten, dit zijn blauwdrukmethoden die geïmplementeerd moeten worden door afgeleide klassen.

Je kunt een abstracte klasse maken door het sleutelwoord abstract toe te voegen vóór de definitie van de klasse. Bijvoorbeeld, laten we een abstracte klasse genaamd Shape maken:

index.cs

index.cs

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 } }

Op vergelijkbare wijze kan een abstracte methode worden aangemaakt door het sleutelwoord abstract vóór het retourtype te plaatsen. Een abstracte methode heeft geen implementatie - het is slechts een blauwdruk:

index.cs

index.cs

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

Het doel hiervan is om een blauwdruk voor andere klassen te creëren. Dit helpt bij het vereenvoudigen van de code. Om dit beter te begrijpen, bekijken we de Polymorfisme-opdracht uit Hoofdstuk 5:

index.cs

index.cs

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()); } }

In het bovenstaande voorbeeld is het niet de bedoeling om de Shape-klasse direct te gebruiken, maar moest je toch enkele fictieve implementaties van de methoden getArea en calculatePerimeter in de Shape-klasse schrijven. Je kunt deze code enigszins vereenvoudigen door de Shape-klasse abstract te maken. Daarnaast kun je ook de methoden getArea en calculatePerimeter abstract maken.

Note
Opmerking

Een methode kan ofwel abstract of virtual zijn, maar niet beide tegelijkertijd. Het is echter belangrijk op te merken dat een abstracte methode in feite een virtuele (overschrijfbare) methode is, maar zonder implementatie in de basisklasse.

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
using System; using System.Collections.Generic; 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. Welke keyword wordt gebruikt om een klasse abstract te maken?

2. Kan een abstracte klasse worden geïnstantieerd?

question mark

Welke keyword wordt gebruikt om een klasse abstract te maken?

Select the correct answer

question mark

Kan een abstracte klasse worden geïnstantieerd?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 5. Hoofdstuk 8
some-alt