Tipo abstracto

Tipo abstracto
Este artículo trata sobre tipos sin miembros directos; ver también Tipo de dato abstracto.

En ingeniería de software, un tipo abstracto es un tipo en un sistema de tipo nominativo que es declarado por el programador, y que tiene la propiedad de no contener miembros que no sean miembros de algún subtipo declarado. Según el lenguaje de programación orientada a objetos, los tipos abstractos se implementan bajo nombres como clases base abstractas, interfaces, traits (en inglés, rasgos), mixins, flavors (en inglés, sabores) o roles.

Contenido

Indicación de tipos abstractos

Las clases abstractas pueden ser creadas, indicadas o simuladas de diversas formas:

  • Usando la palabra clave abstract en la definición de la clase, como en Java.
  • Incluyendo, en la definición de la clase, uno o más métodos abstractos (llamados funciones virtuales puras en C++; métodos que la clase está declarada para aceptar como parte de su protocolo, pero para los que no se proporciona implementación.
  • Por herencia de un tipo abstracto, y no sobrescribiendo todas las características necesarias para completar la definición de la clase que falten.
  • En muchos lenguajes tipados dinámicamente como Smalltalk, cualquier clase que envíe un método particular a this, pero no implemente ese método, puede ser considerada abstracta. Sin embargo, en muchos lenguajes de este tipo, los posibles errores no son detectados hasta que se usa la clase, y el mensaje envía resultados en un error como doesNotUnderstand.

Uso de tipos abstractos

Los tipos abstractos son una característica importante en lenguajes orientados a objetos tipados estáticamente. No se dan en lenguajes sin subtipos. Muchos lenguajes tipados dinámicamente no tienen características equivalentes, aunque el uso de duck typing hace los tipos abstractos innecesarios; sin embargo, algunos lenguajes modernos tipados dinámicamente tienen traits.

Muchos autores argumentan que las clases deberían ser clases hoja (sin subtipos), o si no, deberían ser abstractas.

Los tipos abstractos son útiles en que pueden ser utilizados para definir y establecer un protocolo; un conjunto de operaciones que todos los objetos que implementen el protocolo deben soportar. El hecho de que muchos lenguajes no permitan la instanciación de tipos abstractos (y fuercen a los subtipos a implementar todas las funcionalidades necesarias) asegura todavía más la corrección del programa.

Tipos de tipos abstractos

Hay varios mecanismos para crear tipos abstractos, que varían según sus capacidades.

  • Clases base abstractas completas. Son las clases tanto explícitamente declaradas como abstractas como las que contienen métodos abstractos (no implementados). Excepto la capacidad de instanciación, tienen las mismas capacidades que una clase o tipo concreto. Los tipos abstractos completos estaban presentes en las primeras versiones de C++, y la clase base abstracta permanece como la única construcción del lenguaje para generar tipos abstractos en C++.
    • Nota: Debido a problemas téncicos con la herencia múltiple en C++ y otros lenguajes; muchos lenguajes orientados a objetos intentaron restringir la herencia a una sola clase base directa. Para soportar múltiple subtipado, varios lenguajes añadieron otras características que podían ser usadas para crear tipos abstractos, pero con menos potencia que clases desarrolladas del todo.
  • Common Lisp Object System (CLOS) incluye mixins, basados en el sistema Flavors desarrollado por David Moon para Lisp Machine Lisp. CLOS utiliza funciones genéricas, definidas aparte de las clases, en lugar de funciones miembro definidas en la clase.
  • Java incluye interfaces, un tipo abstracto que puede contener cabeceras de métodos y constantes (variables finales), pero no implementación de métodos o miembros de datos no-finales. Las clases de Java pueden "implementar" múltiples interfaces. Una clase abstracta en Java puede implementar interfaces y definir algunas cabeceras de método al tiempo que mantiene otros métodos abstractos con la palabra clave "abstract". Este tipo de plantilla abstracta puede heredar de una clase concreta.
  • Traits son un enfoque más reciente al problema, que se puede encontrar en Scala y Perl 6 (llamados roles), y propuesto como extensión a Smalltalk (donde fue desarrollada la implementación original). Los traits no están restringidos en lo que incluyen en su definición, y múltiples traits pueden ser pueden componer la definición de una clase. Sin embargo, las reglas de composición para traits son diferentes de las de la herencia estándar, para evitar las dificultades semánticas a menudo asociadas con la herencia múltiple.

Enlaces externos

  • Types and Programming Languages by Benjamin Pierce (MIT Press 2002) [1] (en inglés)
  • More Effective C++: 35 New Ways to Improve Your Programs and Designs by Scott Meyers (1995) ISBN 0-201-63371-X (en inglés)
  • Traits: Composable Units of Behavior by Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz and Andrew Black (en inglés)

Wikimedia foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Mira otros diccionarios:

  • Abstracto — puede referirse a: lo relativo a la abstracción (término polisémico) No debe confundirse con abstract. Contenido 1 Arte 2 Informática 3 Gramática …   Wikipedia Español

  • Tipo de dato abstracto — Un tipo de dato abstracto (TDA) o Tipo abstracto de datos (TAD) es un modelo matemático compuesto por una colección de operaciones definidas sobre un conjunto de datos para el modelo. Contenido 1 Introducción 2 Historia 3 Definición …   Wikipedia Español

  • Tipo de dato — Informático es un atributo de una parte de los datos que indica al ordenador (y/o al programador) algo sobre la clase de datos sobre los que se va a procesar. Esto incluye imponer restricciones en los datos, como qué valores pueden tomar y qué… …   Wikipedia Español

  • abstracto — {{#}}{{LM A00254}}{{〓}} {{SynA00258}} {{[}}abstracto{{]}}, {{[}}abstracta{{]}} ‹abs·trac·to, ta› {{《}}▍ adj.{{》}} {{<}}1{{>}} Que significa alguna cualidad, con exclusión del sujeto que la posee: • La belleza es un concepto abstracto.{{○}}… …   Diccionario de uso del español actual con sinónimos y antónimos

  • Tipo de dato algebraico — En matemáticas discretas es usual introducir definiciones de estructuras recursivas dando los casos de definición y un axioma de clausura indicando que ninguna otra cosa forma parte de lo definido. Por ejemplo, los árboles con información en los… …   Wikipedia Español

  • Tipo de dato abstracto — Un tipo de dato abstracto o TDA es un modelo matemático compuesto por una colección de operaciones definidas sobre un conjunto de datos para el modelo …   Enciclopedia Universal

  • Expresionismo abstracto — El Expresionismo abstracto es un movimiento pictórico contemporáneo dentro de la abstracción, en concreto, las tendencias informalistas y matéricas posteriores a la Segunda Guerra Mundial. Surgió en los años 1940 en Estados Unidos y se difundió,… …   Wikipedia Español

  • Arte abstracto — Reconstruccción del estilo neoplasticista de la pintura abstracta de Piet Mondrian (la obra original de Mondrian no puede utilizarse por estar sujeta a derechos) …   Wikipedia Español

  • Cine abstracto — El cine abstracto es un subgénero del cine experimental, consistente en una oposición al cine convencional al representar solo la noción o una relación a una representación completa. Lo anterior puede aplicarse en cualquier campo, en los guiones… …   Wikipedia Español

  • Expresionismo abstracto — Término por el que se conoce la trayectoria que siguió la pintura abstracta a partir de los años 1940 en Europa y en América. Se utilizan también los términos Action Painting (Pintura de Acción), acuñado por el crítico Harold Rosemberg en el… …   Enciclopedia Universal

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”