Abstracte klasse versus concrete klasse
De meeste populaire moderne objectgeoriënteerde programmeertalen zoals Java en C zijn gebaseerd op klassen. Ze bereiken de objectgeoriënteerde concepten zoals inkapseling, overerving en polymorfisme door het gebruik van klassen. Klassen zijn een abstracte weergave van objecten uit de echte wereld. Klassen kunnen concreet of abstract zijn, afhankelijk van het implementatieniveau van hun methodefunctionaliteiten. Een concrete klasse implementeert volledig al zijn methoden. Een abstracte klasse kan worden beschouwd als een beperkte versie van een reguliere (concrete) klasse, waar deze gedeeltelijk geïmplementeerde methoden kan bevatten. Doorgaans worden concrete klassen (alleen) klassen genoemd.
Wat is Concrete Class?
De standaardklasse is een concrete klasse. Het class-sleutelwoord wordt gebruikt om klassen te definiëren (bijvoorbeeld in Java). En meestal worden ze gewoon klassen genoemd (zonder het adjectief concreet). Concrete klassen geven de conceptuele representatie van objecten uit de echte wereld weer. Klassen hebben eigenschappen die attributen worden genoemd. Attributen worden geïmplementeerd als globale en instantievariabelen. Methoden in de klassen vertegenwoordigen of definiëren het gedrag van deze klassen. Methoden en attributen van klassen worden de leden van de klasse genoemd. Meestal wordt inkapseling bereikt door de attributen privé te maken, terwijl openbare methoden worden gecreëerd die kunnen worden gebruikt om toegang te krijgen tot die attributen. Een object is de instantie van een klasse. Overerving stelt de gebruiker in staat om klassen (subklassen genoemd) uit te breiden van andere klassen (superklassen genoemd). Met polymorfisme kan de programmeur een object van een klasse vervangen door een object van zijn superklasse. Meestal worden de zelfstandige naamwoorden in de probleemdefinitie direct klassen in het programma. En op dezelfde manier worden werkwoorden methoden. Openbaar, privé en beveiligd zijn de typische toegangsmodificaties die voor klassen worden gebruikt.
Wat is abstracte les?
Abstract-klassen worden gedeclareerd met het trefwoord Abstract (bijvoorbeeld in Java,). Typisch kunnen abstracte klassen, ook wel abstracte basisklassen (ABC) genoemd, niet worden geïnstantieerd (er kan geen instantie van die klasse worden gemaakt). Abstracte klassen hebben dus alleen betekenis als de programmeertaal overerving ondersteunt (mogelijkheid om subklassen te maken door een klasse uit te breiden). Abstracte klassen vertegenwoordigen meestal een abstract concept of entiteit met gedeeltelijke of geen implementatie. Daarom fungeren abstracte klassen als bovenliggende klassen waaruit onderliggende klassen zijn afgeleid, zodat de onderliggende klasse de onvolledige kenmerken van de bovenliggende klasse deelt en functionaliteit kan worden toegevoegd om ze te voltooien.
Abstracte klassen kunnen abstracte methoden bevatten. Subklassen die een abstracte klasse uitbreiden, kunnen deze (overgeërfde) abstracte methoden implementeren. Als de onderliggende klasse al dergelijke abstracte methoden implementeert, wordt het een concrete klasse. Maar als dat niet het geval is, wordt de onderliggende klasse ook een abstracte klasse. Wat dit allemaal betekent, is dat, wanneer de programmeur een klasse nomineert als een abstract, ze zegt dat de klasse onvolledig zal zijn en elementen zal hebben die moeten worden voltooid door de overnemende subklassen. Dit is een leuke manier om een contract tussen twee programmeurs te maken, wat de taken in softwareontwikkeling vereenvoudigt. De programmeur, die code schrijft om te erven, moet de methodedefinities exact volgen (maar kan natuurlijk haar eigen implementatie hebben).
Wat is het verschil tussen abstracte klasse en concrete klasse?
Abstracte klassen hebben meestal een gedeeltelijke of geen implementatie. Aan de andere kant hebben concrete klassen altijd volledige implementatie van hun gedrag. In tegenstelling tot concrete klassen, kunnen abstracte klassen niet worden geïnstantieerd. Daarom moeten abstracte klassen worden uitgebreid om ze bruikbaar te maken. Abstracte klassen kunnen abstracte methoden bevatten, maar concrete klassen niet. Wanneer een abstracte klasse wordt uitgebreid, worden alle methoden (zowel abstract als concreet) overgeërfd. De overgeërfde klasse kan een of alle methoden implementeren. Als niet alle abstracte methoden zijn geïmplementeerd, wordt die klasse ook een abstracte klasse.