Верхній тип у теорії типів математики, логіки й інформатики, — універсальний тип, який іноді називають універсальним супертипом, оскільки усі інші типи будь-якої системи типів є [en] кореня. Здебільшого це тип, що містить усі можливі об'єкти досліджуваної системи типів. Визначення верхнього типу є протилежністю визначенню [en], або універсального підтипу, для якого кожен інший тип є супертипом і в більшості випадків це тип, який взагалі не містить об'єктів.
Підтримка у мовах програмування
Декілька типізованих мов програмування забезпечують явну підтримку верхнього типу.
У статично типізованих мовах обговорюються два різних поняття, що часто плутаються:
- Універсальний базовий клас або інший елемент у верхній частині ієрархії класів часу виконання (часто має відношення саме до об'єктно-орієнтованого програмування) або ієрархії типів; часто дозволено створювати об'єкти цього типу, або його можна знайти за допомогою рефлексії при виконанні програми
- Статичний тип [en], змінним якого можуть бути призначено будь-яке значення (або з його підмножини, наприклад, значення посилання на об'єкт), що є подібним до динамічного виведення типів
Перша концепція часто має на увазі другу: якщо існує універсальний базовий клас, то змінна, яка вказує на об'єкт цього класу, може насправді вказувати на об'єкт будь-якого класу. Тим не менш, кілька мов мають верхні типи у другому варіанті (наприклад, void *
в C ++, id
в Objective-C, interface {}
в Go), тобто якісь статичні типи, змінні яких можуть приймати будь-яке значення, але при виконанні програми не корелюють з реальними типами, які об'єкт може мати в даній системі типів, тому такі типи не є верхніми у логіці першого визначення.
У динамічно типізованих мовах друга концепція не існує (так як будь-яке значення може бути призначено будь-якій змінній), тому обговорюється лише перша (ієрархія класів). Ця стаття в основному обговорює першу концепцію верхніх типів, але буде згадувати другу в мовах, де вона є важливою.
Ім'я | Мови |
---|---|
Object | Smalltalk, JavaScript, Ruby (pre-1.9.2), і деякі інші. |
java.lang.Object | Java. Часто пишеться без префікса пакета, просто Object . Крім того, цей клас не є супертипом примітивних типів; однак, з версії Java 1.5, [en] дозволяє неявні або явні перетворення значень примітивних типів у Object , наприклад, ((Object)42).toString() |
System.Object | C #, Visual Basic .NET та інші мови .NET Framework |
object | Python після об'єднання типу і класу у версії 2.2 (справедливо тільки для об'єктів нового стилю; об'єкти старого стилю в 2.x не успадковуються від object ) |
TObject | Object Pascal |
t | Lisp, багато з діалектів, в тому числі Common Lisp |
Any | Kotlin |
Any | Scala |
ANY | Eiffel |
UNIVERSAL | Perl 5 |
Variant | Visual Basic до версії 6 |
interface{} | Go |
BasicObject | Ruby (версія 1.9.2 і вище) |
Наступні об'єктно-орієнтовані мови не мають універсального базового класу:
- . Вказівник на тип void може приймати будь-який покажчик, що не є функцією, навіть якщо сам тип void не є універсальним типом, а [en].
- Objective-C. Дозволено створення нового базового класу, для цього потрібно не вказати батьківський клас іншому класу, що є достатньо незвичним випадком.
Object
традиційно використовується в якості базового класу під час виконання оригінального Objective-C. У бібліотеках OpenStep і CocoaNSObject
є універсальним базовим класом. Верхнім типом для посилань на об'єкти єid
. - Swift. Так же як і у Objective-C, можливо створити новий базовий клас, якщо не вказати батьківський клас для класу. Протокол
Any
може приймати будь-який тип. - PHP.
Інші мови
Мови, які не є об'єктно-орієнтованими, зазвичай не мають підтримки універсального супертипу, або, іншими словами, поліморфізму на основі підтипів.
Хоча Haskell цілеспрямовано не має підтипів, він має кілька інших форм поліморфізму, включаючи [en]. Найбільш поширеним параметром узагальненого класу типів є forall a. a
. Аналогічно в Rust, <T: ? Sized>
є найзагальнішим параметром (<T>
таким не є, оскільки він має на увазі Sized
).
Верхній тип використовується як узагальнений тип, особливо в мовах без [en]. Наприклад, перед включенням у Java 5 дженериків, класи колекцій в бібліотеці Java (за винятком масивів Java) працювали з посиланнями типу Object
. Таким чином, об'єкт будь-якого типу може бути вставлений в колекцію. Верхній тип також часто використовується для зберігання об'єктів невідомого типу.
У мовах зі [en] верхній тип — це порожня структура. Наприклад, об'єкти в OCaml структурно типізовані; порожній об'єктний тип (тип об'єктів з відсутніми методами), < >
— верхній тип типів об'єктів. Будь-який об'єкт OCaml може бути явно перетворений на цей тип, хоча результат не буде корисним. Go також використовує структурну типізацію; також усі типи реалізують порожній інтерфейс: interface {}
.
Верхній тип може розглядатися як непрямий тип не статистично типізованих мов. Мови з типізацією під часу виконання часто надають [en] для того, щоб дозволити привести об'єкт до більш конкретного типу під час виконання. У C ++ уточнення з void *
не може бути здійснено безпечним способом, де під безпечним способом мається на увазі виявлення мовою програмування помилки уточнення типу під час виконання програми.
У логіці
Поняття вершини також зустрічається в численні висловлювань, і відповідає формулі, яка істинна в будь-якому можливому тлумаченні. Вона має аналогічне значення в численні предикатів. В описовій логіці вершина використовується для позначення набору усіх понять. Це інтуїтивно схоже на використання верхнього типу у мовах програмування. Наприклад, у Web Ontology Language (OWL), яка підтримує різні описувальні логіки, вершина відповідає класу owl:Thing
, де всі класи є підкласами owl:Thing
(нижній тип або порожня множина відповідає owl:Nothing
).
Див. також
- [en]
Примітки
- Class: BasicObject (Ruby 1.9.2). Процитовано 7 квітня 2014.
- System.Object
- Об'єднання типу / класу Python
- An Overview of the Scala Programming Language (PDF). 2006. Процитовано 7 квітня 2014.
- Standard ECMA-367. Eiffel: Analysis, Design and Programming Language (PDF). 2006. Процитовано 10 березня 2016.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Verhnij tip u teoriyi tipiv matematiki logiki j informatiki universalnij tip yakij inodi nazivayut universalnim supertipom oskilki usi inshi tipi bud yakoyi sistemi tipiv ye en korenya Zdebilshogo ce tip sho mistit usi mozhlivi ob yekti doslidzhuvanoyi sistemi tipiv Viznachennya verhnogo tipu ye protilezhnistyu viznachennyu en abo universalnogo pidtipu dlya yakogo kozhen inshij tip ye supertipom i v bilshosti vipadkiv ce tip yakij vzagali ne mistit ob yektiv Pidtrimka u movah programuvannyaDekilka tipizovanih mov programuvannya zabezpechuyut yavnu pidtrimku verhnogo tipu U statichno tipizovanih movah obgovoryuyutsya dva riznih ponyattya sho chasto plutayutsya Universalnij bazovij klas abo inshij element u verhnij chastini iyerarhiyi klasiv chasu vikonannya chasto maye vidnoshennya same do ob yektno oriyentovanogo programuvannya abo iyerarhiyi tipiv chasto dozvoleno stvoryuvati ob yekti cogo tipu abo jogo mozhna znajti za dopomogoyu refleksiyi pri vikonanni programi Statichnij tip en zminnim yakogo mozhut buti priznacheno bud yake znachennya abo z jogo pidmnozhini napriklad znachennya posilannya na ob yekt sho ye podibnim do dinamichnogo vivedennya tipiv Persha koncepciya chasto maye na uvazi drugu yaksho isnuye universalnij bazovij klas to zminna yaka vkazuye na ob yekt cogo klasu mozhe naspravdi vkazuvati na ob yekt bud yakogo klasu Tim ne mensh kilka mov mayut verhni tipi u drugomu varianti napriklad void v C id v Objective C interface v Go tobto yakis statichni tipi zminni yakih mozhut prijmati bud yake znachennya ale pri vikonanni programi ne korelyuyut z realnimi tipami yaki ob yekt mozhe mati v danij sistemi tipiv tomu taki tipi ne ye verhnimi u logici pershogo viznachennya U dinamichno tipizovanih movah druga koncepciya ne isnuye tak yak bud yake znachennya mozhe buti priznacheno bud yakij zminnij tomu obgovoryuyetsya lishe persha iyerarhiya klasiv Cya stattya v osnovnomu obgovoryuye pershu koncepciyu verhnih tipiv ale bude zgaduvati drugu v movah de vona ye vazhlivoyu Nastupni ob yektno oriyentovani movi programuvannya mistyat taki universalni bazovi klasi Im ya Movi Object Smalltalk JavaScript Ruby pre 1 9 2 i deyaki inshi java lang Object Java Chasto pishetsya bez prefiksa paketa prosto Object Krim togo cej klas ne ye supertipom primitivnih tipiv odnak z versiyi Java 1 5 en dozvolyaye neyavni abo yavni peretvorennya znachen primitivnih tipiv u Object napriklad Object 42 toString System Object C Visual Basic NET ta inshi movi NET Framework object Python pislya ob yednannya tipu i klasu u versiyi 2 2 spravedlivo tilki dlya ob yektiv novogo stilyu ob yekti starogo stilyu v 2 x ne uspadkovuyutsya vid object TObject Object Pascal t Lisp bagato z dialektiv v tomu chisli Common Lisp Any Kotlin Any Scala ANY Eiffel UNIVERSAL Perl 5 Variant Visual Basic do versiyi 6 interface Go BasicObject Ruby versiya 1 9 2 i vishe Nastupni ob yektno oriyentovani movi ne mayut universalnogo bazovogo klasu C Vkazivnik na tip void mozhe prijmati bud yakij pokazhchik sho ne ye funkciyeyu navit yaksho sam tip void ne ye universalnim tipom a en Objective C Dozvoleno stvorennya novogo bazovogo klasu dlya cogo potribno ne vkazati batkivskij klas inshomu klasu sho ye dostatno nezvichnim vipadkom Object tradicijno vikoristovuyetsya v yakosti bazovogo klasu pid chas vikonannya originalnogo Objective C U bibliotekah OpenStep i Cocoa NSObject ye universalnim bazovim klasom Verhnim tipom dlya posilan na ob yekti ye id Swift Tak zhe yak i u Objective C mozhlivo stvoriti novij bazovij klas yaksho ne vkazati batkivskij klas dlya klasu Protokol Any mozhe prijmati bud yakij tip PHP Inshi movi Movi yaki ne ye ob yektno oriyentovanimi zazvichaj ne mayut pidtrimki universalnogo supertipu abo inshimi slovami polimorfizmu na osnovi pidtipiv Hocha Haskell cilespryamovano ne maye pidtipiv vin maye kilka inshih form polimorfizmu vklyuchayuchi en Najbilsh poshirenim parametrom uzagalnenogo klasu tipiv ye forall a a Analogichno v Rust lt T Sized gt ye najzagalnishim parametrom lt T gt takim ne ye oskilki vin maye na uvazi Sized Verhnij tip vikoristovuyetsya yak uzagalnenij tip osoblivo v movah bez en Napriklad pered vklyuchennyam u Java 5 dzhenerikiv klasi kolekcij v biblioteci Java za vinyatkom masiviv Java pracyuvali z posilannyami tipu Object Takim chinom ob yekt bud yakogo tipu mozhe buti vstavlenij v kolekciyu Verhnij tip takozh chasto vikoristovuyetsya dlya zberigannya ob yektiv nevidomogo tipu U movah zi en verhnij tip ce porozhnya struktura Napriklad ob yekti v OCaml strukturno tipizovani porozhnij ob yektnij tip tip ob yektiv z vidsutnimi metodami lt gt verhnij tip tipiv ob yektiv Bud yakij ob yekt OCaml mozhe buti yavno peretvorenij na cej tip hocha rezultat ne bude korisnim Go takozh vikoristovuye strukturnu tipizaciyu takozh usi tipi realizuyut porozhnij interfejs interface Verhnij tip mozhe rozglyadatisya yak nepryamij tip ne statistichno tipizovanih mov Movi z tipizaciyeyu pid chasu vikonannya chasto nadayut en dlya togo shob dozvoliti privesti ob yekt do bilsh konkretnogo tipu pid chas vikonannya U C utochnennya z void ne mozhe buti zdijsneno bezpechnim sposobom de pid bezpechnim sposobom mayetsya na uvazi viyavlennya movoyu programuvannya pomilki utochnennya tipu pid chas vikonannya programi U logiciPonyattya vershini takozh zustrichayetsya v chislenni vislovlyuvan i vidpovidaye formuli yaka istinna v bud yakomu mozhlivomu tlumachenni Vona maye analogichne znachennya v chislenni predikativ V opisovij logici vershina vikoristovuyetsya dlya poznachennya naboru usih ponyat Ce intuyitivno shozhe na vikoristannya verhnogo tipu u movah programuvannya Napriklad u Web Ontology Language OWL yaka pidtrimuye rizni opisuvalni logiki vershina vidpovidaye klasu owl Thing de vsi klasi ye pidklasami owl Thing nizhnij tip abo porozhnya mnozhina vidpovidaye owl Nothing Div takozh en PrimitkiClass BasicObject Ruby 1 9 2 Procitovano 7 kvitnya 2014 System Object Ob yednannya tipu klasu Python An Overview of the Scala Programming Language PDF 2006 Procitovano 7 kvitnya 2014 Standard ECMA 367 Eiffel Analysis Design and Programming Language PDF 2006 Procitovano 10 bereznya 2016