Высший тип

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Высший тип (top type) в теории типов, часто обозначаемый как просто вершина или «закрепленным» символом (⊤), — универсальный тип, то есть такой тип, который содержит в себе каждый возможный объект в нужной системе типов. Высший тип иногда именуется универсальным супертипом, то есть все остальные типы в любой отдельно взятой системе типов являются подтипами самого верхнего. Это является противоположностью нижайшего типа, или иначе именуемого универсальным подтипом, который представляет собой тип, не содержащий в себе никаких вложенных членов (то есть у него нет подтипов).

Поддержка в языках программирования[править | править исходный текст]

Некоторые типизированные языки программирования обеспечивают явную поддержку высшего типа.

Большинство объектно-ориентированных языков программирования включают в себя универсальный базовый класс:
Название Языки
Object Smalltalk, Java, JavaScript, Ruby и некоторые другие. В Java он часто обозначается с префиксом, указывающим на пакет, например, java.lang.Object. Также стоит отметить, что Object не является супертипом для примитивных типов в Java; однако, начиная с Java 1.5, упаковка (autoboxing) позволяет выполнять явное или неявное приведение примитива к Object, например, ((Object)42).toString().
Object Objective-C. В OpenStep и Cocoa, которые являются самыми популярными фреймворками на базе языка, NSObject — как правило это универсальный базовый класс. Можно создавать новые корневые классы просто не указывая родительские классы при определении, но это крайне не рекомендуется. Высшим типом для указателей на объект является id.
System.Object C#, Visual Basic .NET и прочие языки платформы .NET Framework
object Python, начиная с унификации типов/классов в версии 2.2.
GObject Glib
TObject Object Pascal. [1]
t Common Lisp и множество прочих диалектов Lisp.
Any Scala. [2]
GENERAL Eiffel.
UNIVERSAL Perl 5.
Variant Visual Basic вплоть до 6-й версии.

C++ выделяется среди объектно-ориентированных языков тем, что не имеет универсального супертипа. Тип «указатель на void» может принимать указатель на любой объект, даже несмотря на то, что void-тип сам по себе не является универсальным типом, а лишь единичным типом.

Необъектно-ориентированные языки обычно не имеют универсального супертипа (или полностью поддерживают полиморфизм подтипов). Common Lisp является исключение в том плане, что его встроенные типы образуют иерархию типов, даже когда его объектная система CLOS не используется.

В большинстве языков программирования высший тип — это абстрактный тип, который не содержит элементов, не являющихся элементами некоторого (объявленного) подтипа. В данном случае Java является исключением: выражение new Object() вполне корректно.

Высший тип используется как «обобщенный» (generic) тип, в первую очередь в языках без поддержки параметрического полиморфизма. Например, до добавления обобщенных типов в Java 5, коллекция классов в библиотеке Java (исключая массивы Java) поддерживали ссылки на тип Object; при этом способе любой несобственный тип может быть добавлен в коллекцию. Высший тип также часто используется для поддержки объектов неизвестного типа.

В языках со структурной системой типов высший тип — это пустая структура. Например, объекты в OCaml структурно типизированы; пустой тип объекта (тип объекта, не имеющего методов), «< >», — высший тип для объектных типов. Любой объект в OCaml может быть явным образом приведен к этому типу, хотя результат может быть довольно бесполезным.

Высший тип может также быть представлен как неявный тип в языках с нестатической типизацией. Языки с динамической типизацией часто поддерживают понижающее приведение (или «уточнение типа» (type refinement)) для предоставления программисту возможности указывать более специфический тип для объекта в ходе выполнения программы. Необходимо отметить, что понижающее приведение из типа void * в языке C++ не может быть выполнено в «безопасном» стиле, когда неудачное приведение выявляется средой языка.

Примечания[править | править исходный текст]

Ссылки[править | править исходный текст]