Articulo de referencia

Programación basada en interfaces

La programación basada en interfaces , también conocida como arquitectura basada en interfaces , es un patrón arquitectónico para implementar la programación modular a nivel de ...

La programación basada en interfaces , también conocida como arquitectura basada en interfaces , es un patrón arquitectónico para implementar la programación modular a nivel de componentes en un lenguaje de programación orientado a objetos que no cuenta con un sistema de módulos. Un ejemplo de este tipo de lenguaje es Java antes de Java 9 , que carecía del Sistema de Módulos de la Plataforma Java ( JPSS), un sistema de módulos a nivel de componentes introducido con Java 9. Java hasta Java 8 solo disponía de un sistema de paquetes , pero los componentes de software Java suelen constar de múltiples paquetes Java ; y, en cualquier caso, la programación basada en interfaces puede ofrecer ventajas sobre el simple uso de paquetes Java, incluso si un componente consta de un único paquete Java. 

La programación basada en interfaces define la aplicación como una colección de componentes, en la que las llamadas a la interfaz de programación de aplicaciones (API) entre componentes solo pueden realizarse a través de interfaces abstractas, no de clases concretas. Las instancias de las clases generalmente se obtienen a través de otras interfaces utilizando técnicas como el patrón Factory .

Se afirma que esto aumenta la modularidad de la aplicación y, por lo tanto, su mantenibilidad . Sin embargo, conviene ser cauteloso : dividir una aplicación en componentes arbitrarios que se comunican mediante interfaces no garantiza por sí solo un bajo acoplamiento ni una alta cohesión , dos atributos que suelen considerarse clave para la mantenibilidad. 

Se puede utilizar una arquitectura basada en interfaces cuando terceros —o incluso equipos independientes dentro de la misma organización— desarrollan componentes o complementos adicionales para un sistema ya establecido . El código fuente del IDE de Eclipse es un ejemplo de programación basada en interfaces. Los proveedores de complementos de Eclipse solo tienen que desarrollar componentes que cumplan con la interfaz especificada por el proveedor de la aplicación principal, la Fundación Eclipse. De hecho, en Eclipse, incluso los componentes originales, como las Herramientas de Desarrollo de Java, son complementos . Esto es similar a cuando un fabricante de teléfonos móviles especifica la interfaz de un cargador (disposición de los pines, voltaje de corriente continua esperado , etc.) y tanto el fabricante como terceros fabrican sus propios cargadores que cumplen con esta especificación de interfaz estándar.  

Evolución del software en la programación basada en interfaces

El uso de interfaces para permitir la colaboración de equipos dispares plantea la cuestión de cómo se producen los cambios en las interfaces en la programación basada en interfaces. El problema es que si se modifica una interfaz, por ejemplo, añadiendo un nuevo método, el código antiguo escrito para implementarla dejará de compilarse y , en el caso de los complementos cargados o enlazados dinámicamente, no se cargarán ni enlazarán correctamente, o bien fallarán en tiempo de ejecución. Existen dos enfoques básicos para abordar este problema: 

  1. Se puede desarrollar una nueva interfaz con funcionalidad adicional, que podría heredar de la interfaz anterior.
  2. Se puede comunicar una política de control de versiones de software, como el versionado semántico 2.0, a los implementadores de la interfaz para permitir cambios incompatibles con versiones futuras, o incluso incompatibles con versiones anteriores, en futuras versiones "principales" de la plataforma.

Ambos enfoques se han utilizado en la plataforma Java.

Diseño por contrato

El editor de las interfaces generalmente se compromete a no modificarlas en nuevas versiones menores del software, y el implementador, al implementar la interfaz, da por sentado que ha implementado al menos las partes requeridas sin ninguna desviación. Por lo tanto, una interfaz puede considerarse un acuerdo contractual entre un proveedor y un consumidor. Si este contrato se documenta formalmente como una especificación de software, se trata de un ejemplo de diseño por contrato . Sin embargo, el diseño por contrato en sí mismo no exige el uso de interfaces para todos los componentes. 

Véase también

Referencias

  • Desarrollo basado en interfaces de C# , c-sharpcorner.com
  • Desarrollo basado en interfaces: el lenguaje unificado de modelado (UML) , devmentor.org
  • Diseño de una aplicación de gran tamaño con arquitectura basada en interfaces , rhyous.com, 18 de octubre de 2011
  • Comprensión de la programación basada en interfaces , Microsoft Developers Network , consultado el 16 de septiembre de 2016.