Abstrakt klasse vs konkret klasse
De fleste af de populære moderne objektorienterede programmeringssprog som Java og C # er klassebaseret. De opnår de objektorienterede begreber såsom indkapsling, arv og polymorfisme ved hjælp af klasser. Klasser er en abstrakt repræsentation af objekter i den virkelige verden. Klasser kan være enten konkrete eller abstrakte afhængigt af implementeringsniveauet for deres metodefunktionaliteter. En konkret klasse implementerer fuldstændigt alle dens metoder. En abstrakt klasse kan betragtes som en begrænset version af en almindelig (konkret) klasse, hvor den kan indeholde delvist implementerede metoder. Betonklasser kaldes typisk (bare) klasser.
Hvad er betonklasse?
Standardklassen er en konkret klasse. Klassen nøgleord bruges til at definere klasser (f.eks. I Java). Og normalt kaldes de simpelthen klasser (uden adjektivet konkret). Betonklasser skildrer den konceptuelle repræsentation af objekter i den virkelige verden. Klasser har egenskaber kaldet attributter. Attributter implementeres som globale og forekomstvariabler. Metoder i klasserne repræsenterer eller definerer opførelsen af disse klasser. Metoder og attributter for klasser kaldes klassens medlemmer. Typisk opnås indkapsling ved at gøre attributterne private, mens der oprettes offentlige metoder, der kan bruges til at få adgang til disse attributter. Et objekt er forekomsten af en klasse. Arv giver brugeren mulighed for at udvide klasser (kaldet underklasser) fra andre klasser (kaldet superklasser). Polymorfisme giver programmereren mulighed for at erstatte et objekt i en klasse i stedet for et objekt i dens superklasse. Typisk bliver substantiverne, der findes i problemdefinitionen, direkte klasser i programmet. Og på samme måde bliver verb til metoder. Offentlige, private og beskyttede er de typiske adgangsmodifikatorer, der bruges til klasser.
Hvad er abstrakt klasse?
Abstrakte klasser erklæres ved hjælp af abstrakt søgeord (f.eks. I Java,). Typisk kan abstrakte klasser, også kendt som abstrakte baseklasser (ABC), ikke instantieres (et eksempel på denne klasse kan ikke oprettes). Så abstrakte klasser er kun meningsfulde at have, hvis programmeringssprog understøtter arv (evne til at oprette underklasser fra at udvide en klasse). Abstrakte klasser repræsenterer normalt et abstrakt koncept eller enhed med delvis eller ingen implementering. Derfor fungerer abstrakte klasser som forældreklasser, hvorfra barneklasser er afledt, så børneklassen vil dele de ufuldstændige funktioner i forældreklassen, og funktionalitet kan tilføjes for at afslutte dem.
Abstrakte klasser kan indeholde abstrakte metoder. Underklasser, der udvider en abstrakt klasse, kan implementere disse (arvelige) abstrakte metoder. Hvis barneklassen implementerer alle sådanne abstrakte metoder, bliver det en konkret klasse. Men hvis det ikke gør det, bliver barneklassen også en abstrakt klasse. Hvad alt dette betyder, er, at når programmøren nominerer en klasse som et abstrakt, siger hun, at klassen vil være ufuldstændig, og den vil have elementer, der skal udfyldes af de arvelige underklasser. Dette er en dejlig måde at oprette en kontrakt på mellem to programmerere, der forenkler opgaver inden for softwareudvikling. Programmereren, der skriver kode for at arve, skal følge metodedefinitionerne nøjagtigt (men kan selvfølgelig have sin egen implementering).
Hvad er forskellen mellem abstrakt klasse og konkret klasse?
Abstrakte klasser har normalt delvis eller ingen implementering. På den anden side har konkrete klasser altid fuld implementering af dens opførsel. I modsætning til konkrete klasser, kan abstrakte klasser ikke instantieres. Derfor skal abstrakte klasser udvides for at gøre dem nyttige. Abstrakte klasser kan indeholde abstrakte metoder, men konkrete klasser kan ikke. Når en abstrakt klasse udvides, arves alle metoder (både abstrakte og konkrete). Den arvede klasse kan implementere en hvilken som helst eller alle metoder. Hvis alle de abstrakte metoder ikke implementeres, bliver den klasse også en abstrakt klasse.