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ä.
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.
Tietotyypit | |
---|---|
Käsittämätön | |
Numeerinen | |
Teksti | |
Viite | |
Komposiitti | |
abstrakti | |
Muut | |
liittyvät aiheet |