Abstrakt type - Abstract type

I programmeringssprog er en abstrakt type en type i et nominativt typesystem, der ikke kan instantieres direkte; en type, der ikke er abstrakt - som kan instantieres - kaldes en konkret type . Hver forekomst af en abstrakt type er et eksempel på en konkret undertype . Abstrakte typer er også kendt som eksistentielle typer .

En abstrakt type giver muligvis ingen implementering eller en ufuldstændig implementering. På nogle sprog er abstrakte typer uden implementering (snarere end en ufuldstændig implementering) kendt som protokoller , grænseflader , signaturer eller klassetyper . I klassebaseret objektorienteret programmering implementeres abstrakte typer som abstrakte klasser (også kendt som abstrakte baseklasser ) og konkrete typer som konkrete klasser . I generisk programmering er den analoge forestilling et begreb , der på samme måde specificerer syntaks og semantik, men ikke kræver en undertype -relation: to ikke -relaterede typer opfylder muligvis det samme koncept.

Ofte vil abstrakte typer have en eller flere implementeringer leveret separat, for eksempel i form af konkrete undertyper, der kan instantieres. I objektorienteret programmering kan en abstrakt klasse omfatte abstrakte metoder eller abstrakte egenskaber , der deles af dens underklasser. Andre navne for sproglige funktioner, der er (eller kan være), der anvendes til at implementere abstrakte typer omfatter træk , mixins , smagsstoffer , roller , eller typen klasser .

Betydning af abstrakte typer

Abstrakte klasser kan oprettes, betegnes eller simuleres på flere måder:

  • Ved brug af det eksplicitte søgeord abstract i klassedefinitionen, som i Java , D eller C# .
  • Ved at inkludere en eller flere abstrakte metoder i klassedefinitionen (kaldet rene virtuelle funktioner i C ++ ), som klassen erklæres at acceptere som en del af sin protokol, men som der ikke er implementeret.
  • Ved at arve fra en abstrakt type og ikke tilsidesætte alle manglende funktioner, der er nødvendige for at fuldføre klassedefinitionen. Med andre ord bliver en barnetype, der ikke implementerer alle abstrakte metoder fra sin forælder, selv abstrakt.
  • I mange dynamisk indtastede sprog som Smalltalk kan enhver klasse, der sender en bestemt metode hertil , men ikke implementerer denne metode, betragtes som abstrakt. (Men på mange sådanne sprog, som f.eks. Objective-C , opdages fejlen ikke, før klassen bruges, og meddelelsen returnerer resultater i en undtagelsesfejlmeddelelse, f.eks. "Genkender ikke vælger: xxx", som - [NSObject doesNotRecognizeSelector:(SEL)selector]påberåbes ved registrering af en uimplementeret metode).

Eksempel (Java)

//By default, all methods in all classes are concrete, unless the abstract keyword is used.
abstract class Demo {
    // An abstract class may include abstract methods, which have no implementation.
    abstract public int sum(int x, int y);

    // An abstract class may also include concrete methods.
    public int product(int x, int y) { return x*y; }
}

//By default, all methods in all interfaces are abstract, unless the default keyword is used.
interface DemoInterface {
    [abstract] int getLength(); //Abstract can be used here, though is completely useless
    
    //The default keyword can be used in this context to specify a concrete method in an interface
    default int product(int x, int y) {
        return x * y;
    }
}

Brug af abstrakte typer

Abstrakte typer er en vigtig funktion i statisk indtastede OOP -sprog. Mange dynamisk indtastede sprog har ingen tilsvarende funktion (selvom brugen af andetypning gør abstrakte typer unødvendige); men træk findes i nogle moderne dynamisk typede sprog.

Nogle forfattere hævder, at klasser skal være bladklasser (ikke have nogen undertyper) eller ellers være abstrakte.

Abstrakte typer er nyttige, idet de kan bruges til at definere og håndhæve en protokol ; et sæt operationer, som alle objekter, der implementerer protokollen, skal understøtte.

Abstrakte typer er også en væsentlig del af skabelonmetodemønsteret .

Se også

Referencer

Yderligere læsning

eksterne links