Tipul suprem

Cel mai înalt tip  ( supertip universal ) este un tip utilizat într-o serie de teorii de tip și limbaje de programare care conține fiecare obiect posibil al sistemului. Cel mai înalt tip este uneori denumit supertip generic , ceea ce înseamnă că toate celelalte tipuri din orice sistem de tip dat sunt subtipuri ale celui mai de sus. Conceptul dual este cel mai mic tip (subtip universal) care nu conține valori sau subtipuri posibile.

Suport în limbaje de programare

Limbaje de programare cu suport explicit pentru tipul superior. Majoritatea limbajelor de programare orientate pe obiecte includ o clasă de bază generică :

Nume Limbi
Object Smalltalk , Java , JavaScript , Ruby și altele. În Java, este adesea prefixat cu un pachet, cum ar fi java.base/java/lang/Object. Cu toate acestea, nu Objecteste un supertip pentru tipurile primitive în Java; cu toate acestea, începând cu Java 1.5, autoboxing vă permite să aruncați în mod explicit sau implicit o primitivă în Object, cum ar fi ((Object)42).toString().
Object Obiectiv-C . În OpenStep și Cocoa , care sunt cele mai populare cadre bazate pe limbaj, NSObject  este de obicei clasa de bază generică. Este posibil să se creeze noi clase rădăcină pur și simplu fără a specifica clasele părinte în definiție, dar acest lucru este foarte descurajat. Cel mai înalt tip pentru pointerii obiect este id .
System.Object C# , Visual Basic .NET și alte limbaje .NET Framework
object Python , începând cu unificarea tipurilor și claselor în versiunea 2.2.
GObject Glib
TObject Obiect Pascal . [www.delphibasics.co.nr/RTL.asp?Name=TObject]
t Lisp comun și multe alte dialecte Lisp.
Any Scala . X10 , Kotlin .
GENERAL Eiffel .
UNIVERSAL Perl 5.
Variant Visual Basic până la versiunea 6.

C++ se remarcă printre limbajele orientate pe obiect prin faptul că nu are un supertip generic. Tipul „pointer to void” poate lua un pointer către orice obiect, chiar dacă tipul void în sine nu este un tip generic, ci doar un singur tip .

Limbile non-orientate pe obiecte, de obicei, nu au un supertip generic (sau suportă pe deplin polimorfismul subtipului). Common Lisp este o excepție prin faptul că tipurile sale încorporate formează o ierarhie de tipuri chiar și atunci când sistemul său de obiecte CLOS nu este utilizat.

În majoritatea limbajelor de programare, cel mai înalt tip este un tip abstract care nu conține membri care să nu fie membri ai unui subtip (declarat). În acest caz, Java este o excepție: expresia new Object()este perfect valabilă.

Cel mai înalt tip este folosit ca tip generic , în primul rând în limbile fără suport pentru polimorfismul parametric . De exemplu, înainte de adăugarea de tipuri generice în Java 5, colecția de clase din biblioteca Java (excluzând matricele Java) a acceptat referințe de tip Object; în acest fel, orice tip non-nativ poate fi adăugat la colecție. Cel mai înalt tip este adesea folosit și pentru a susține obiecte de tip necunoscut.

În limbile cu un sistem de tip structural, cel mai înalt tip este structura goală. De exemplu, obiectele din OCaml sunt tipizate structural; tip de obiect gol (tipul unui obiect care nu are metode), " < >", este cel mai înalt tip pentru tipurile de obiecte. Orice obiect din OCaml poate fi turnat în mod explicit la acest tip, deși rezultatul poate fi destul de inutil.

Tipul superior poate fi reprezentat și ca tip implicit în limbaje tipizate nestatic. Limbile tipizate dinamic acceptă adesea downcasting (sau „rafinare de tip”) pentru a permite programatorului să specifice un tip mai specific pentru un obiect în timpul execuției programului. Trebuie remarcat faptul că downcasting-ul de la un tip void *în C++ nu se poate face într-un stil „sigur” atunci când o distribuție eșuată este detectată de mediul de limbaj.

Literatură