Abstrakt klasse vs. interface
Abstrakt klasse (eller type) er en type i et nominativt system, der er erklæret af programmet. Selvom navnet antyder sådan, kan en abstrakt klasse muligvis ikke indeholde abstrakte metoder eller egenskaber. Forskelsklassen henviser til forskellige sprogkonstruktioner, der kan bruges til at implementere abstrakte typer. Abstrakte klasser kan være karakteriseret ved et designproblem, der holder med den bedste objektorienterede programmering og af deres ufærdige natur.
En grænseflade er en abstrakt type, som klasser skal implementere for at specificere en grænseflade (generelt set). Grænseflader må kun indeholde metodesignaturer og konstante deklarationer (både statiske og endelige), aldrig metodedefinitioner. Grænseflader simulerer flere arv og bruges til at kode ligheder, der deles mellem forskellige typer klasser.
Abstrakte typer kan oprettes, betegnes eller simuleres på flere forskellige måder. En programmør kan betegne abstrakte typer ved at bruge nøgleordet abstrakt eksplicit ved at inkludere en eller flere metoder i klassedefinitionen, arve fra en anden abstrakt type uden at tilsidesætte manglende funktioner, der er nødvendige for at fuldføre klassedefinitionen, eller ved at sende en bestemt metode til det objektorienterede programmeringssprog kendt som dette, der ikke implementerer metoden direkte.
Grænseflader kan defineres ved hjælp af abstrakte metoder. Klasser kan også implementeres i grænseflader. Hvis en klasse implementerer en grænseflade og ikke implementerer alle dens metoder, skal signifiseringsabstraktet bruges, ellers er denne signifikant ikke nødvendig (fordi alle grænseflader i sig selv er abstrakte). Klasser kan også implementere flere grænseflader.
Mens grænseflader bruges til at specificere generiske grænseflader, kan abstrakte typer bruges til at definere og håndhæve protokol (som er et sæt af operationer, som alle objekter, der implementerer den ønskede protokol, skal understøtte). Abstrakte typer forekommer ikke på sprog uden undertype. Da sådanne undertyper er tvunget til at implementere al den nødvendige funktionalitet, hvilket sikrer rigtigheden af programudførelsen. Der er flere måder, hvorpå abstrakte typer kan oprettes: fulde abstrakte baseklasser er klasser, der enten eksplicit erklæres for abstrakte eller indeholder abstrakte (uimplementerede) metoder; Almindelige Lisp Object-systemer inkluderer mixins, der er baseret på Flavours-systemet; Java, selvfølgelig; og egenskaber, der fungerer som en udvidelse til Smalltalk.
Resumé:
1. Abstrakte klasser (eller typer) erklærer programmer; interface er abstrakte typer, som alle klasser skal implementere for at specificere deres interface.
2. Abstrakte typer kan betegnes ved hjælp af nøgleordet eksplicit; grænseflader er iboende abstrakte, behøver derfor ikke at blive betegnet ved hjælp af nøgleordet overhovedet (medmindre en bestemt klasse implementerer en grænseflade, men ikke implementerer alle dens metoder).