stringtranslate.com

Tipo superior

En lógica matemática y ciencias de la computación , algunas teorías de tipos y sistemas de tipos incluyen un tipo superior que se denota comúnmente con top o el símbolo ⊤. El tipo superior a veces también se denomina tipo universal o supertipo universal , ya que todos los demás tipos en el sistema de tipos de interés son subtipos de este y, en la mayoría de los casos, contiene todos los objetos posibles del sistema de tipos. Está en contraste con el tipo inferior , o el subtipo universal , del que todos los demás tipos son supertipos y, a menudo, el tipo no contiene ningún miembro.

Soporte en lenguajes de programación

Varios lenguajes de programación tipados proporcionan soporte explícito para el tipo superior.

En los lenguajes tipados estáticamente , hay dos conceptos diferentes, a menudo confusos, cuando se habla del tipo superior.

  1. Una clase base universal u otro elemento en la parte superior de una jerarquía de clases en tiempo de ejecución (a menudo relevante en programación orientada a objetos ) o jerarquía de tipos ; a menudo es posible crear objetos con este tipo (en tiempo de ejecución), o se puede encontrar cuando uno examina la jerarquía de tipos mediante programación, en lenguajes que la admiten
  2. Un tipo estático ( en tiempo de compilación ) en el código a cuyas variables se les puede asignar cualquier valor (o un subconjunto del mismo, como cualquier valor de puntero de objeto), similar al tipado dinámico .

El primer concepto a menudo implica el segundo, es decir, si existe una clase base universal, entonces una variable que puede apuntar a un objeto de esta clase también puede apuntar a un objeto de cualquier clase. Sin embargo, varios lenguajes tienen tipos en el segundo sentido mencionado anteriormente (por ejemplo, void *en C++ , iden Objective-C , interface {}en Go ), tipos estáticos cuyas variables pueden aceptar cualquier valor de objeto, pero que no reflejan los tipos de tiempo de ejecución reales que un objeto puede tener en el sistema de tipos, por lo que no son tipos superiores en el primer sentido.

En los lenguajes de tipado dinámico, el segundo concepto no existe (de todas formas, se puede asignar cualquier valor a cualquier variable), por lo que solo se analiza el primero (la jerarquía de clases). Este artículo intenta ceñirse al primer concepto cuando se analizan los tipos principales, pero también se menciona el segundo concepto en los lenguajes en los que es importante.

Los siguientes lenguajes orientados a objetos no tienen una clase base universal:

Otros idiomas

Los lenguajes que no están orientados a objetos generalmente no tienen supertipos universales ni soporte para polimorfismo de subtipos .

Si bien Haskell carece deliberadamente de subtipos, tiene otras formas de polimorfismo, incluido el polimorfismo paramétrico . El parámetro de clase de tipo más genérico es un parámetro sin restricciones a(sin una restricción de clase de tipo ). En Rust , <T: ?Sized>es el parámetro más genérico ( <T>no lo es, ya que implica el Sizedrasgo por defecto).

El tipo top se utiliza como un tipo genérico , más aún en lenguajes sin polimorfismo paramétrico . Por ejemplo, antes de introducir los genéricos en Java 5 , las clases de colección en la biblioteca de Java (excluyendo las matrices de Java) contenían referencias de tipo Object. De esta manera, cualquier tipo no intrínseco podía insertarse en una colección. El tipo top también se utiliza a menudo para contener objetos de tipo desconocido.

El tipo superior también puede considerarse como el tipo implícito de los lenguajes con tipado no estático. Los lenguajes con tipado en tiempo de ejecución suelen ofrecer conversión descendente (o refinamiento de tipo ) para permitir descubrir un tipo más específico para un objeto en tiempo de ejecución. En C++, la conversión descendente void *no se puede realizar de forma segura , ya que las conversiones descendentes fallidas son detectadas por el tiempo de ejecución del lenguaje.

En lenguajes con un sistema de tipos estructurales , la estructura vacía sirve como tipo superior. Por ejemplo, los objetos en OCaml están tipados estructuralmente; el tipo de objeto vacío (el tipo de objetos sin métodos), < >, es el tipo superior de los tipos de objetos. Cualquier objeto OCaml puede ser convertido explícitamente a este tipo, aunque el resultado no sería de ninguna utilidad. Go también utiliza tipado estructural; y todos los tipos implementan la interfaz vacía: interface {}, que no tiene métodos, pero aún puede ser convertido a un tipo más específico.

En lógica

La noción de top también se encuentra en el cálculo proposicional , que corresponde a una fórmula que es verdadera en cada interpretación posible. Tiene un significado similar en el cálculo de predicados . En la lógica descriptiva , top se utiliza para referirse al conjunto de todos los conceptos. Esto es intuitivamente similar al uso del tipo top en los lenguajes de programación. Por ejemplo, en el lenguaje de ontología web (OWL), que admite varias lógicas descriptivas, top corresponde a la clase owl:Thing, donde todas las clases son subclases de owl:Thing. (el tipo bottom o conjunto vacío corresponde a owl:Nothing).

Véase también

Notas

  1. ^ "Clase: BasicObject (Ruby 1.9.2)" . Consultado el 7 de abril de 2014 .
  2. ^ Sistema.Objeto
  3. ^ Unificación de tipos y clases de Python
  4. ^ Matilla, Hugo (27 de febrero de 2019). "Conceptos básicos de Kotlin: tipos. Any, Unit y Nothing". Medium . Consultado el 16 de septiembre de 2019 .
  5. ^ "Una descripción general del lenguaje de programación Scala" (PDF) . 2006. Consultado el 7 de abril de 2014 .
  6. ^ "Tipos: el lenguaje de programación Swift (Swift 5.3)". docs.swift.org . Consultado el 2 de noviembre de 2020 .
  7. ^ "Tipos · El lenguaje Julia" . Consultado el 15 de mayo de 2021 .
  8. ^ "El tipo Any". 2022 . Consultado el 26 de octubre de 2022 .
  9. ^ "Estándar ECMA-367. Eiffel: Análisis, Diseño y Lenguaje de Programación" (PDF) . 2006. Consultado el 10 de marzo de 2016 .
  10. ^ "std.variant - Lenguaje de programación D". dlang.org . Consultado el 29 de octubre de 2022 .
  11. ^ "Los tipos principales 'any' y 'unknown' en TypeScript".
  12. ^ "El tipo desconocido en TypeScript". 15 de mayo de 2019.

Referencias

Enlaces externos