stringtranslate.com

Tipo abstracto

En los lenguajes de programación , un tipo abstracto (también conocido como tipo existencial ) [1] es un tipo en un sistema de tipos nominativos que no se puede instanciar directamente; por el contrario, un tipo concreto se puede instanciar directamente. La instanciación de un tipo abstracto solo puede ocurrir indirectamente, a través de un subtipo concreto .

Un tipo abstracto puede no proporcionar implementación o una implementación incompleta. En algunos lenguajes, los tipos abstractos sin implementación (en lugar de una implementación incompleta) se conocen como protocolos , interfaces , firmas o tipos de clase . En la programación orientada a objetos basada en clases , los tipos abstractos se implementan como clases abstractas (también conocidas como clases base abstractas ) y los tipos concretos como clases concretas . En la programación genérica , la noción análoga es un concepto , que especifica de manera similar la sintaxis y la semántica, pero no requiere una relación de subtipo: dos tipos no relacionados pueden satisfacer el mismo concepto.

A menudo, los tipos abstractos tendrán una o más implementaciones proporcionadas por separado, por ejemplo, en forma de subtipos concretos que se pueden instanciar. En la programación orientada a objetos, una clase abstracta puede incluir métodos abstractos o propiedades abstractas [2] que son compartidas por sus subclases. Otros nombres para las características del lenguaje que se usan (o pueden usarse) para implementar tipos abstractos incluyen rasgos , mixins , sabores , roles o clases de tipos . [ cita requerida ]

Los tipos abstractos también pueden incluir cualquier número de métodos y propiedades no abstractos, como cuando se implementa el Patrón de método de plantilla que utiliza una mezcla de métodos invariantes con implementaciones fijas y métodos de enlace que se pueden anular en subclases concretas para proporcionar una lógica personalizada.

Creación

Las clases abstractas se pueden crear, significar o simular de varias maneras:

Ejemplos

Java

De manera predeterminada, todos los métodos de todas las clases son concretos, a menos que se utilice la palabra clave abstract. Una clase abstracta puede incluir métodos abstractos, que no tienen implementación. De manera predeterminada, todos los métodos de todas las interfaces son abstractos, a menos que se utilice la palabra clave default. La palabra clave default se puede utilizar para especificar un método concreto en una interfaz.

//De forma predeterminada, todos los métodos en todas las clases son concretos, a menos que se use la palabra clave abstracta. public abstract class Demo { // Una clase abstracta puede incluir métodos abstractos, que no tienen implementación. public abstract int sum ( int x , int y );             // Una clase abstracta también puede incluir métodos concretos. public int product ( int x , int y ) { return x * y ; } }            //De manera predeterminada, todos los métodos en todas las interfaces son abstractos, a menos que se use la palabra clave predeterminada. interface  DemoInterface { int getLength (); //La palabra clave abstracta se puede usar aquí, aunque es completamente inútil //La palabra clave predeterminada se puede usar en este contexto para especificar un método concreto en una interfaz default int product ( int x , int y ) { return x * y ; } }                  

Uso

Los tipos abstractos son una característica importante en los lenguajes OOP de tipado estático . Muchos lenguajes de tipado dinámico no tienen una característica equivalente (aunque el uso de tipado dinámico hace innecesarios los tipos abstractos); sin embargo, se encuentran rasgos en algunos lenguajes de tipado dinámico modernos. [ cita requerida ]

Algunos autores argumentan que las clases deberían ser clases hoja (no tener subtipos) o, de lo contrario, ser abstractas. [4] [5]

Los tipos abstractos son útiles porque se pueden utilizar para definir y aplicar un protocolo ; un conjunto de operaciones que todos los objetos que implementan el protocolo deben soportar. [ cita requerida ]

Los tipos abstractos también son una parte esencial del patrón de método de plantilla .

Véase también

Referencias

  1. ^ Mitchell, John C.; Plotkin, Gordon D.; Los tipos abstractos tienen un tipo existencial, ACM Transactions on Programming Languages ​​and Systems, vol. 10, n.º 3, julio de 1988, págs. 470–502
  2. ^ ab "Métodos y clases abstractos (Tutoriales de Java > Aprendizaje del lenguaje Java > Interfaces y herencia)". Oracle.com . Consultado el 14 de agosto de 2019 .
  3. ^ "Funciones virtuales puras y clases abstractas en C++". GeeksforGeeks.org . 15 de julio de 2014.
  4. ^ Riel, Arthur (1996). Heurísticas de diseño orientado a objetos . Addison-Wesley Professional. pág. 89. ISBN 0-201-63385-X.
  5. ^ Meyers, Scott (1996). Un C++ más eficaz. Addison-Wesley Professional. pág. 258. ISBN 0-201-63371-XHacer abstractas las clases que no son hojas

Lectura adicional

Enlaces externos