Ylivoimainen tyyppi

Korkein tyyppi  ( yleinen supertyyppi ) on useissa tyyppiteorioissa ja ohjelmointikielissä käytetty tyyppi , joka sisältää kaikki mahdolliset järjestelmän objektit. Korkeinta tyyppiä kutsutaan joskus yleiseksi supertyypiksi , mikä tarkoittaa, että kaikki muut tyypit missä tahansa tietyssä tyyppijärjestelmässä ovat ylimmän tyypin alatyyppejä . Kaksoiskonsepti on alin tyyppi (universaali alatyyppi), joka ei sisällä mahdollisia arvoja tai alatyyppejä.

Ohjelmointikielien tuki

Ohjelmointikielet, joissa on selkeä tuki korkeammalle tyypille. Useimmat olio- ohjelmointikielet sisältävät yleisen perusluokan :

Nimi Kieli (kielet
Object Smalltalk , Java , JavaScript , Ruby ja jotkut muut. Javassa sen etuliitteenä on usein paketti, kuten java.base/java/lang/Object. Se Objectei kuitenkaan ole Javan primitiivityyppien supertyyppi; kuitenkin, Java 1.5:stä lähtien autoboxing sallii sinun suorastaan ​​tai implisiittisesti lähettää primitiivin Object, kuten ((Object)42).toString().
Object Tavoite-C . OpenStepissä ja Cocoassa , jotka ovat suosituimpia kielipohjaisia ​​kehyksiä, NSObject on  tyypillisesti yleinen perusluokka. On mahdollista luoda uusia juuriluokkia yksinkertaisesti määrittelemättä yläluokkia määritelmässä, mutta tämä ei ole suositeltavaa. Korkein objektiosoittimien tyyppi on id .
System.Object C# , Visual Basic .NET ja muut .NET Framework -kielet
object Python , alkaen tyyppien ja luokkien yhdistämisestä versiossa 2.2.
GObject Glib
TObject Objekti Pascal . [www.delphibasics.co.nr/RTL.asp?Name=TObject]
t Common Lisp ja monet muut Lisp murteet.
Any Scala . X10 , Kotlin .
GENERAL Eiffel .
UNIVERSAL Perl 5.
Variant Visual Basic versioon 6 asti.

C++ erottuu oliokielistä siinä, että sillä ei ole yleistä supertyyppiä. "Osoittimen void" -tyyppi voi viedä osoittimen mihin tahansa objektiin, vaikka itse tyhjätyyppi ei ole yleinen tyyppi, vaan vain yksi tyyppi .

Ei-oliosuuntautuneilla kielillä ei yleensä ole yleistä supertyyppiä (tai ne tukevat täysin alatyypin polymorfismia). Common Lisp on poikkeus, koska sen sisäänrakennetut tyypit muodostavat tyyppihierarkian, vaikka sen CLOS -objektijärjestelmää ei käytetä.

Useimmissa ohjelmointikielissä korkein tyyppi on abstrakti tyyppi , joka ei sisällä jäseniä, jotka eivät ole jonkin (ilmoitetun) alatyypin jäseniä. Tässä tapauksessa Java on poikkeus: lauseke new Object()on täysin kelvollinen.

Korkeinta tyyppiä käytetään yleisenä tyyppinä, pääasiassa kielissä, joissa ei tueta parametrista polymorfismia . Esimerkiksi ennen yleisten tyyppien lisäämistä Java 5:een Java-kirjaston luokkakokoelma (lukuun ottamatta Java-taulukoita) tuki tyyppiviittauksia Object; Tällä tavalla kokoelmaan voidaan lisätä mitä tahansa ei-natiivityyppiä. Korkeinta tyyppiä käytetään myös usein tukemaan tuntemattoman tyyppisiä objekteja.

Rakenteellisella tyyppijärjestelmällä varustetuissa kielissä korkein tyyppi on tyhjä rakenne. Esimerkiksi OCamlin objektit on kirjoitettu rakenteellisesti; tyhjä objektityyppi (objektin tyyppi, jolla ei ole menetelmiä), " < >" on objektityyppien korkein tyyppi. Mikä tahansa OCaml-objekti voidaan suoraviivaistaa tähän tyyppiin, vaikka tulos voi olla melko hyödytön.

Korkeampi tyyppi voidaan esittää myös implisiittisenä tyyppinä ei-staattisesti kirjoitetuissa kielissä. Dynaamisesti kirjoitetut kielet tukevat usein alaslähetystä (tai "tyypin tarkennusta"), jotta ohjelmoija voi määrittää tarkemman tyypin objektille ohjelman suorittamisen aikana. On huomattava, että void *C++:n tyypistä laskemista ei voi tehdä "turvallisella" tyylillä, kun kieliympäristö havaitsee epäonnistuneen lähetyksen.

Kirjallisuus