En informática, una interfaz es un límite compartido a través del cual dos o más componentes separados de un sistema informático intercambian información. El intercambio puede ser entre software , hardware de computadora , dispositivos periféricos , humanos y combinaciones de estos. [1] Algunos dispositivos de hardware de computadora, como una pantalla táctil , pueden enviar y recibir datos a través de la interfaz, mientras que otros, como un mouse o un micrófono, solo pueden proporcionar una interfaz para enviar datos a un sistema determinado. [2]
Interfaces de hardware

Existen interfaces de hardware en muchos componentes, como los diversos buses , dispositivos de almacenamiento , otros dispositivos de E / S , etc. Una interfaz de hardware se describe mediante las señales mecánicas, eléctricas y lógicas en la interfaz y el protocolo para secuenciarlas (a veces llamado señalización). [3] Una interfaz estándar, como SCSI , desacopla el diseño y la introducción del hardware informático, como los dispositivos de E / S , del diseño y la introducción de otros componentes de un sistema informático, lo que permite a los usuarios y fabricantes una gran flexibilidad en la implementación. de los sistemas informáticos. [3] Las interfaces de hardware pueden ser paralelas con varias conexiones eléctricas que transportan partes de los datos simultáneamente o en serie donde los datos se envían un bit a la vez. [4]
Interfaces de software
Una interfaz de software puede referirse a una amplia gama de diferentes tipos de interfaz en diferentes "niveles": un sistema operativo puede interactuar con piezas de hardware. Es posible que las aplicaciones o programas que se ejecutan en el sistema operativo deban interactuar a través de flujos de datos , filtros y canalizaciones; [5] y en los programas orientados a objetos, los objetos dentro de una aplicación pueden necesitar interactuar a través de métodos . [6]
En la práctica
Un principio clave del diseño es prohibir el acceso a todos los recursos de forma predeterminada, permitiendo el acceso solo a través de puntos de entrada bien definidos, es decir, interfaces. [7] Las interfaces de software proporcionan acceso a recursos informáticos (como memoria, CPU, almacenamiento, etc.) del sistema informático subyacente; El acceso directo (es decir, no a través de interfaces bien diseñadas) a dichos recursos por software puede tener ramificaciones importantes, a veces desastrosas, para la funcionalidad y estabilidad. [ cita requerida ]
Las interfaces entre componentes de software pueden proporcionar constantes , tipos de datos , tipos de procedimientos , especificaciones de excepción y firmas de métodos . A veces, las variables públicas también se definen como parte de una interfaz. [8]
La interfaz de un módulo de software A se define deliberadamente por separado de la implementación de ese módulo. Este último contiene el código real de los procedimientos y métodos descritos en la interfaz, así como otras variables, procedimientos, etc. "privados". Otro módulo de software B , por ejemplo el cliente de A , que interactúa con A se ve obligado a hacerlo. solo a través de la interfaz publicada. Una ventaja práctica de esta disposición es que reemplazar la implementación de A con otra implementación de la misma interfaz no debería hacer que B falle; la forma en que A cumple internamente los requisitos de la interfaz no es relevante para B , que solo se ocupa de las especificaciones de La interfaz. (Véase también el principio de sustitución de Liskov .) [ Cita requerida ]
En lenguajes orientados a objetos
En algunos lenguajes orientados a objetos, especialmente aquellos sin herencia múltiple completa , el término interfaz se usa para definir un tipo abstracto que no contiene datos pero define comportamientos como firmas de métodos . Se dice que una clase que tiene código y datos para todos los métodos correspondientes a esa interfaz y lo declara implementa esa interfaz. [9] Además, incluso en lenguajes de herencia única, se pueden implementar múltiples interfaces y, por lo tanto, pueden ser de diferentes tipos al mismo tiempo. [10]
Por tanto, una interfaz es una definición de tipo ; En cualquier lugar en el que se pueda intercambiar un objeto (por ejemplo, en una llamada a una función o método ), el tipo de objeto que se intercambiará se puede definir en términos de una de sus interfaces implementadas o clases base en lugar de especificar la clase específica . Este enfoque significa que se puede utilizar cualquier clase que implemente esa interfaz. [ cita requerida ] Por ejemplo, se puede usar una implementación ficticia para permitir que el desarrollo avance antes de que la implementación final esté disponible. En otro caso, se puede sustituir una implementación falsa o simulada durante la prueba. Estas implementaciones de stub se reemplazan por código real más adelante en el proceso de desarrollo.
Por lo general, un método definido en una interfaz no contiene código y, por lo tanto, no se puede llamar a sí mismo; debe implementarse mediante código no abstracto para que se ejecute cuando se invoca. [ cita requerida ] Una interfaz llamada " Stack
" podría definir dos métodos: push()
y pop()
. Se puede implementar de diferentes formas, por ejemplo, FastStack
y GenericStack
, siendo la primera rápida, trabajando con una estructura de datos de tamaño fijo, y la segunda usando una estructura de datos que se puede cambiar de tamaño, pero a costa de una velocidad algo menor.
Aunque las interfaces pueden contener muchos métodos, pueden contener solo uno o incluso ninguno. Por ejemplo, el lenguaje Java define la interfaz Readable
que tiene el método único ; diversas implementaciones se utilizan para diferentes propósitos, incluyendo , , , , y . Las interfaces de marcador como no contienen ningún método y sirven para proporcionar información en tiempo de ejecución al procesamiento genérico mediante Reflection . [11]read()
BufferedReader
FileReader
InputStreamReader
PipedReader
StringReader
Serializable
Programación a la interfaz
El uso de interfaces permite un estilo de programación llamado programación para la interfaz . La idea detrás de este enfoque es basar la lógica de programación en las interfaces de los objetos utilizados, más que en los detalles de implementación interna. La programación de la interfaz reduce la dependencia de las especificaciones de implementación y hace que el código sea más reutilizable. [12]
Llevando esta idea al extremo, la inversión de control deja el contexto para inyectar el código con las implementaciones específicas de la interfaz que se utilizará para realizar el trabajo.
Interfaces de usuario
Una interfaz de usuario es un punto de interacción entre una computadora y los humanos; incluye cualquier número de modalidades de interacción (como gráficos, sonido, posición, movimiento, etc.) donde los datos se transfieren entre el usuario y el sistema informático.
Ver también
- Inversión de abstracción
- Interfaz binaria de la aplicación
- Interfaz de programación de aplicaciones
- Interfaz de interoperabilidad empresarial
- Bus de computadora
- Interfaz de la unidad de disco duro
- Implementación (informática)
- Herencia de implementación
- Interoperabilidad
- Semántica de herencia
- Programación modular
- Componentes de software
- Herencia virtual
Referencias
- ^ Hookway, B. (2014). "Capítulo 1: El tema de la interfaz". Interfaz . Prensa del MIT. págs. 1-58. ISBN 9780262525503.
- ^ IEEE 100: el diccionario autorizado de términos de estándares IEEE . Nueva York, NY, EE. UU .: IEEE Press. 2000. págs. 574–575. ISBN 9780738126012.
- ^ a b Blaauw, Gerritt A .; Brooks, Jr., Frederick P. (1997), "Capítulo 8.6, Interfaces de dispositivos", Arquitectura de computadoras: Conceptos y evolución , Addison-Wesley, págs. 489–493, ISBN 0-201-10557-8 Ver también: Patterson, David A .; Hennessey, John L. (2005), "Capítulo 8.5, Interfaz de dispositivos de E / S con el procesador, la memoria y el sistema operativo", Organización y diseño de computadoras: la interfaz de hardware / software, tercera edición , Morgan Kaufmann, págs. 588–596 , ISBN 1-55860-604-1
- ^ Govindarajalu, B. (2008). "3.15 Interfaces y controladores periféricos - OG". IBM PC y clones: hardware, resolución de problemas y mantenimiento . Tata McGraw-Hill Publishing Co. Ltd. págs. 142-144. ISBN 9780070483118. Consultado el 15 de junio de 2018 .
- ^ Buyya, R. (2013). Dominar la computación en la nube . Educación de Tata McGraw-Hill. pag. 2.13. ISBN 9781259029950.
- ^ Poo, D .; Kiong, D .; Ashok, S. (2008). "Capítulo 2: Objeto, Clase, Mensaje y Método". Programación Orientada a Objetos y Java . Springer-Verlag. págs. 7–15. ISBN 9781846289637.
- ^ Bill Venners (6 de junio de 2005). "Java de vanguardia: principios de diseño de patrones de diseño: programa a una interfaz, no una implementación - una conversación con Erich Gamma, parte III" . http://www.artima.com/index.jsp : desarrollador artima. Archivado desde el original el 5 de agosto de 2011 . Consultado el 3 de agosto de 2011 .
Una vez que dependa únicamente de las interfaces, quedará desacoplado de la implementación. Eso significa que la implementación puede variar y esa es una relación de dependencia saludable. Por ejemplo, con fines de prueba, puede reemplazar una implementación de base de datos pesada con una implementación simulada más liviana. Afortunadamente, con el soporte de refactorización actual, ya no es necesario crear una interfaz por adelantado. Puede extraer una interfaz de una clase concreta una vez que tenga la información completa sobre un problema. La interfaz deseada está a solo una 'interfaz de extracción' refactorizando de distancia. ...
- ^ Patterson, DA; Hennessy, JL Organización y diseño de computadoras: la interfaz hardware / software (3ª ed.). Elsevier. pag. 656. ISBN 9780080502571.
- ^ "Qué es una interfaz" . Los tutoriales de Java . Oráculo. Archivado desde el original el 12 de abril de 2012 . Consultado el 1 de mayo de 2012 .
- ^ "Interfaces" . Los tutoriales de Java . Oráculo. Archivado desde el original el 26 de mayo de 2012 . Consultado el 1 de mayo de 2012 .
- ^ "Técnicas de mejora del rendimiento en serialización" . http://www.precisejava.com/ : Java preciso. Archivado desde el original el 24 de agosto de 2011 . Consultado el 4 de agosto de 2011 .
Hablaremos inicialmente de la interfaz serializable. Esta es una interfaz de marcador y no tiene ningún método.
- ^ Gama; Timón; Johnson; Vlissides (1995). Patrones de diseño: elementos de software orientado a objetos reutilizable . Addison Wesley. págs. 17-18 .