Articulo de referencia

Patrón de interfaz de marcador

El patrón de interfaz de marcador es un patrón de diseño en informática , utilizado con lenguajes que proporcionan información de tipo en tiempo de ejecución sobre los objetos. ...

El patrón de interfaz de marcador es un patrón de diseño en informática , utilizado con lenguajes que proporcionan información de tipo en tiempo de ejecución sobre los objetos. Proporciona un medio para asociar metadatos a una clase cuando el lenguaje no ofrece soporte explícito para dichos metadatos.

Para usar este patrón, una clase implementa una interfaz marcadora [ 1 ] (también llamada interfaz de etiquetado ), que es una interfaz vacía [ 2 ] , y los métodos que interactúan con instancias de esa clase comprueban la existencia de la interfaz. Mientras que una interfaz típica especifica la funcionalidad (en forma de declaraciones de métodos) que una clase implementadora debe soportar, una interfaz marcadora no necesita hacerlo. La mera presencia de dicha interfaz indica un comportamiento específico por parte de la clase implementadora. Las interfaces híbridas, que actúan como marcadores y especifican métodos requeridos, son posibles, pero pueden resultar confusas si se usan incorrectamente.

Ejemplo

Un ejemplo de la aplicación de interfaces de marcadores del lenguaje de programación Java es la Serializableinterfaz:

paquete java.io ;interfaz pública Serializable { }

Una clase implementa esta interfaz para indicar que sus miembros de datos no transitorios se pueden escribir en un ObjectOutputStream. El ObjectOutputStreammétodo privado writeObject0(Object,boolean)contiene una serie de instanceofpruebas para determinar la posibilidad de escritura, una de las cuales busca la Serializableinterfaz. Si alguna de estas pruebas falla, el método lanza una excepción NotSerializableException.

Crítica

Un problema con las interfaces de marcador es que, dado que una interfaz define un contrato para las clases que la implementan, y ese contrato es heredado por todas las subclases, un marcador no puede ser "desimplementado". En el ejemplo dado, cualquier subclase que no esté destinada a la serialización (quizás dependa de un estado transitorio) debe lanzar explícitamente excepciones NotSerializableException (según la ObjectOutputStreamdocumentación).

Otra solución es que el lenguaje admita metadatos directamente:

  • Tanto .NET Framework como Java (a partir de Java 5 (1.5)) ofrecen soporte para este tipo de metadatos. En .NET se denominan "atributos personalizados" y en Java, " anotaciones " . A pesar de la diferencia de nombre, conceptualmente son lo mismo. Se pueden definir en clases, variables miembro, métodos y parámetros de métodos, y se puede acceder a ellos mediante reflexión . C++26 añade un soporte similar para anotaciones en C++ .
  • En Python , el término "interfaz marcador" es común en Zope y Plone . Las interfaces se declaran como metadatos y las subclases pueden usarlas implementsOnlypara indicar que no implementan todas las funcionalidades de sus superclases.

Véase también

Referencias

  1. Bloch, Joshua (2008). "Elemento 37: Usar interfaces de marcadores para definir tipos" . Effective Java (Segunda edición). Addison-Wesley. pág . 179. ISBN   978-0-321-35668-0.
  2. "Interfaz de marcador en Java" . GeeksforGeeks . 6 de marzo de 2017. Consultado el 1 de mayo de 2022 .

Lecturas adicionales

Java efectivo [ 1 ] por Joshua Bloch .

  1. Bloch, Joshua (2018). Java eficaz (Tercera ed.). Boston. ISBN  978-0-13-468599-1OCLC 1018432176 .​ {{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace )