En el de informática, un subtipo es un Datatype que es relacionado generalmente con otro datatype (el supertype ) por una cierta noción de la sustitución, significando que los programas de computadora escritos para funcionar encendido los elementos del supertype pueden también funcionar encendido los elementos del subtipo. Más específicamente, la relación del supertype-subtipo se toma a menudo para ser la definida por el principio de la substitución de Liskov; sin embargo, cualquier lenguaje de programación dado puede definir su propia noción de subtyping, o ningúna.

Ejemplo

Un ejemplo práctico simple de subtipos se demuestra en el diagrama, la derecha. El " genérico del objeto; bird" (o, supertype) da lugar al " derivado de tres objetos (o, subtipos); duck", " cuckoo" y " ostrich". Cada uno de éstos varía el " básico; bird" el concepto de su propia manera, pero todavía hereda mucho el " bird" características. Un objeto de datos se puede declarar como de los cuatro tipos. La notación UML se utiliza en este diagrama, con las flechas abrir-dirigidas demostrando la dirección y el tipo de la relación entre el supertype y sus subtipos.

En la mayoría de las idiomas orientadas al objeto clase-basadas, las subclases dan lugar a subtipos: si el A es una subclase del B, después un caso del A de la clase se puede utilizar en cualquier contexto en donde un caso del tipo B se espera; así decimos que el A es un subtipo del B . Una consecuencia de esto es que cualquier variable o parámetro declarado como teniendo tipo B pudo, en el tiempo de pasada, llevar a cabo un valor del A de la clase; en esta situación muchos programadores orientados al objeto dirían que el B es el de tipo estático de la variable y el A es su tipo dinámico del . Las excepciones a esta regla incluyen la herencia privada en el C++ (que no crea subtipos), y ciertas operaciones en derivado mecanografían adentro el Eiffel, en donde las características heredadas de una clase baja se pueden quitar o modificar de una manera que viole la regla subtyping.

Como otro ejemplo, una lengua pudo permitir que los valores de número entero sean utilizados dondequiera que se esperen los valores flotantes, o puede ser que defina un tipo number que contenía los números enteros y los reals. En primer lugar, el tipo del número entero sería un subtipo del tipo flotante; en el segundo, esos dos tipos pudieron estar sin relación el uno al otro subtyping pero ambos serían subtipos de number.

Los programadores pueden aprovecharse de subtyping para escribir código en una manera más abstracta que ser posible sin ella. Considerar el ejemplo siguiente:

la función máxima (x como número, y como número) es si x < y después y de vuelta x de vuelta extremo

Si el número entero y verdadero es ambos subtipos de number, después los valores de cualquier tipo se pueden pasar a esta función. Debido a esto, subtyping a menudo se considera una forma del polimorfismo . El ejemplo antedicho se puede también comparar a la característica de la plantilla de C++.

En el tipo teoría, la relación del subtipo se escribe a menudo el <: , de modo que < del A ;: el B de significa que el A es un subtipo del B . Subtyping en el tipo teoría es caracterizado por el hecho de que cualquier expresión del tipo A se puede también dar el tipo B si < del A ;: B de ; se sabe la regla que mecanografía formal que codifica esto mientras que la regla del subsumption del .

Esquemas de Subtyping

El tipo teóricos hace una distinción entre el subtyping nominal, en el cual solamente los tipos declarados de cierta manera pueden ser subtipos de uno a, y el subtyping estructural, en el cual la estructura de dos tipos determina independientemente de si uno es un subtipo del otro. El subtyping orientado al objeto clase-basado descrito arriba es nominal; una regla subtyping estructural para una lengua orientada al objeto pudo decir que si los objetos del tipo A pueden manejar todos los mensajes que los objetos del tipo B puedan manejar (es decir, si definen todos los mismos métodos, después el A es un subtipo del B sin importar si cualquier hereda del otro. Las reglas subtyping estructurales sanas para los tipos con excepción de tipos de objeto son también bien sabido.

Puestas en práctica de lenguajes de programación con caída subtyping en dos clases generales: puestas en práctica inclusivas del, en las cuales la representación de cualquier valor del tipo A también representa el mismo valor en el tipo B si < del A ;: puestas en práctica coactivas del B, y del de , en las cuales un valor del tipo A puede ser el automáticamente convertido en uno de tipo B . El subtyping inducido subclassing en una lengua orientada al objeto es generalmente inclusivo; las relaciones subtyping que relacionan números enteros y los números de coma flotante, que se representan diferentemente, son generalmente coactivas.

En casi todo el tipo sistemas que defina una relación subtyping, es reflexivo (< del A del significado;: A de para cualquie tipo A ) y transitivo (significado que si < del A ;: < del B y del B de ;: < del A del C de entonces;: C de ). Esto le hace que un Preorder en tipos.

Ver también


Un tipo derivado es un tipo dado un nuevo tipo pero estructural igual que el tipo original. Él mayo o mayo no ser un subtipo dependiendo del tipo sistema.
Contravariance en la covariación y contravariance (de informática)
El problema de la Círculo-elipse para los peligros de variable-tipos subtyping sobre la misma base que valor-tipos
el Clase-basó programado por un ejemplo de un problema cuando uno confunde subtyping con el Subclassing .
  • Zenithic
  • Feuillant
    Random links:Base (álgebra linear) | Lexington, Nueva York | Puerto Ordaz | Lista de las instituciones japonesas (1930-1945)

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">