Abstrakt klass vs gränssnitt
Abstrakt klass (eller typ) är en typ av ett nominativt typsystem som deklareras av programmet. Även om namnet antyder så kan en abstrakt klass innehålla abstrakta metoder eller egenskaper. Skillnadsklassen avser olika språkkonstruktioner som kan användas för att implementera abstrakta typer. Abstrakta klasser kan präglas av en designproblem som håller med den bästa objektorienterade programmeringen och deras oavslutade naturer.
Ett gränssnitt är en abstrakt typ som klasser måste implementera för att ange ett gränssnitt (generellt sett). Gränssnitt får bara innehålla metod signaturer och konstanta deklarationer (både statiska och slutliga), aldrig metoddefinitioner. Gränssnitt simulerar flera arv och används för att koda likheter som delas mellan olika typer av klasser.
Abstrakta typer kan skapas, signifieras eller simuleras på flera olika sätt. En programmerare kan beteckna abstrakta typer genom att uttryckligen använda sökordet abstrakt genom att inkludera en eller flera metoder i klassdefinitionen, ärva från en annan abstrakt typ utan att överdriva saknade funktioner som är nödvändiga för att slutföra klassdefinitionen eller genom att skicka en viss metod till objektorienterade programmeringsspråk som är känt som detta, som inte implementerar metoden direkt.
Gränssnitt kan definieras med hjälp av abstrakta metoder. Klasser kan också genomföras i gränssnitt. Om en klass genomför ett gränssnitt och inte implementerar alla dess metoder måste signifikansabstraktet användas, annars är signifikanten inte nödvändig (eftersom alla gränssnitt är iboende abstrakta). Klasser kan också implementera flera gränssnitt.
Medan gränssnitt används för att ange generiska gränssnitt kan abstrakta typer användas för att definiera och tillämpa protokoll (vilket är en uppsättning operationer som alla objekt som implementerar det önskade protokollet måste stödja). Sammanfattande typer förekommer inte på språk utan subtyping. Som sådana subtyper är tvungna att genomföra all nödvändig funktionalitet, vilket garanterar att programkörning är korrekt. Det finns flera sätt på vilka abstrakta typer kan skapas: fullständiga abstrakta basklasser är klasser som antingen uttryckligen förklaras vara abstrakta eller innehåller abstrakta (otillförda) metoder; Vanliga Lisp Object Systems inkluderar blandningar som är baserade på Flavors systemet; Java, förstås och egenskaper som fungerar som en förlängning till Smalltalk.
Sammanfattning:
1. Abstrakta klasser (eller typer) förklarar program; gränssnitt är abstrakta typer som alla klasser måste genomföra för att specificera deras gränssnitt.
2. Sammanfattande typer kan uttryckas med hjälp av sökordet explicit; gränssnitt är i sig abstrakta, behöver därför inte betecknas med sökordet alls (såvida inte en specifik klass implementerar ett gränssnitt men inte implementerar alla dess metoder).