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.
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.
Datatyper | |
---|---|
Otolkbart | |
Numerisk | |
Text | |
Referens | |
Sammansatt | |
abstrakt | |
Övrig | |
Relaterade ämnen |