Suverän typ

Den högsta typen  ( universell supertyp ) är en typ som används i ett antal typteorier och programmeringsspråk som innehåller alla möjliga objekt i systemet. Den högsta typen kallas ibland för en generisk supertyp , vilket betyder att alla andra typer i ett givet typsystem är undertyper av de översta. Det dubbla konceptet är den lägsta typen (universell undertyp) som inte innehåller några möjliga värden eller undertyper.

Stöd i programmeringsspråk

Programmeringsspråk med uttryckligt stöd för högre typ. De flesta objektorienterade programmeringsspråk inkluderar en generisk basklass :

namn språk
Object Smalltalk , Java , JavaScript , Ruby och några andra. I Java är det ofta prefixet med ett paket, som java.base/java/lang/Object. Det är dock Objectinte en supertyp för primitiva typer i Java; Men från och med Java 1.5 låter autoboxning dig explicit eller implicit casta en primitiv till Object, som ((Object)42).toString()t.ex.
Object Mål-C . I OpenStep och Cocoa , som är de mest populära språkbaserade ramverken, är NSObject  vanligtvis den generiska basklassen. Det är möjligt att skapa nya rotklasser helt enkelt utan att ange överordnade klasser i definitionen, men det är starkt avrådigt. Den högsta typen för objektpekare är id .
System.Object C# , Visual Basic .NET och andra .NET Framework- språk
object Python , som börjar med enandet av typer och klasser i version 2.2.
GObject Glib
TObject Objekt Pascal . [www.delphibasics.co.nr/RTL.asp?Name=TObject]
t Common Lisp och många andra Lisp-dialekter.
Any Scala . X10 , Kotlin .
GENERAL Eiffel .
UNIVERSAL Perl 5.
Variant Visual Basic upp till version 6.

C++ sticker ut bland objektorienterade språk genom att det inte har en generisk supertyp. Typen "pekare till tomrum" kan ta en pekare till vilket objekt som helst, även om tomrumstypen i sig inte är en generisk typ, utan bara en enskild typ .

Icke-objektorienterade språk har vanligtvis inte en generisk supertyp (eller stöder helt subtyp polymorfism). Common Lisp är ett undantag genom att dess inbyggda typer bildar en typhierarki även när dess CLOS- objektsystem inte används.

I de flesta programmeringsspråk är den högsta typen en abstrakt typ som inte innehåller några medlemmar som inte är medlemmar av någon (deklarerad) undertyp. I det här fallet är Java ett undantag: uttrycket new Object()är helt giltigt.

Den högsta typen används som en generisk typ, främst i språk utan stöd för parametrisk polymorfism . Till exempel, före tillägget av generiska typer i Java 5, stödde samlingen av klasser i Java-biblioteket (exklusive Java-arrayer) typreferenser Object; på detta sätt kan alla icke-infödda typer läggas till i samlingen. Den högsta typen används också ofta för att stödja objekt av en okänd typ.

I språk med ett strukturellt typsystem är den högsta typen den tomma strukturen. Till exempel är objekt i OCaml strukturellt typade; tom objekttyp (typen av ett objekt som inte har några metoder), " < >", är den högsta typen för objekttyper. Alla objekt i Ocaml kan uttryckligen castas till denna typ, även om resultatet kan vara ganska värdelöst.

Den högre typen kan också representeras som en implicit typ i icke-statiskt typade språk. Dynamiskt typade språk stöder ofta nedsändning (eller "typförfining") för att tillåta programmeraren att specificera en mer specifik typ för ett objekt under programexekveringen. Det bör noteras att nedsändning från en typ void *i C++ inte kan göras i en "säker" stil när en misslyckad cast upptäcks av språkmiljön.

Litteratur