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 darse entre software , hardware , dispositivos periféricos , personas y combinaciones de estos. [ 1 ] Algunos dispositivos de hardware, como una pantalla táctil, pueden enviar y recibir datos a través de la interfaz, mientras que otros, como un ratón o un micrófono, solo proporcionan una interfaz para enviar datos a un sistema determinado. [ 2 ]
Interfaces de hardware

Existen interfaces de hardware en muchos componentes, como los distintos 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 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 seriales, donde los datos se envían bit a bit. [ 4 ]
Interfaces de software
Una interfaz de software puede referirse a una amplia gama de diferentes tipos de interfaces en distintos "niveles". Por ejemplo, un sistema operativo puede interactuar con componentes de hardware. Las aplicaciones o programas que se ejecutan en el sistema operativo pueden necesitar interactuar mediante flujos de datos , filtros y tuberías. [ 5 ] En los programas orientados a objetos , los objetos dentro de una aplicación pueden necesitar interactuar mediante métodos . [ 6 ]
En la práctica
A key principle of design is to prohibit access to all resources by default, allowing access only through well-defined entry points, i.e., interfaces.[7] Software interfaces provide access to computer resources (such as memory, CPU, storage, etc.) of the underlying computer system; direct access (i.e., not through well-designed interfaces) to such resources by software can have major ramifications—sometimes disastrous ones—for functionality and stability.
Interfaces between software components can provide constants, data types, types of procedures, exception specifications, and method signatures. Sometimes, public variables are also defined as part of an interface.[8]
The interface of a software module A is deliberately defined separately from the implementation of that module. The latter contains the actual code of the procedures and methods described in the interface, as well as other "private" variables, procedures, etc. Another software module B, for example the client to A, that interacts with A is forced to do so only through the published interface. One practical advantage of this arrangement is that replacing the implementation of A with another implementation of the same interface should not cause B to fail—how A internally meets the requirements of the interface is not relevant to B, which is only concerned with the specifications of the interface. (See also Liskov substitution principle.)
In object-oriented languages
In some object-oriented languages, especially those without full multiple inheritance, the term interface is used to define an abstract type that acts as an abstraction of a class. It contains no data, but defines behaviours as method signatures. A class having code and data for all the methods corresponding to that interface and declaring so is said to implement that interface.[9] Furthermore, even in single-inheritance-languages, one can implement multiple interfaces, and hence can be of different types at the same time.[10]
Una interfaz es, por lo tanto, una definición de tipo ; en cualquier lugar donde se pueda intercambiar un objeto (por ejemplo, en una llamada a una función o método ), el tipo del objeto a intercambiar se puede definir en términos de una de sus interfaces implementadas o clases base, en lugar de especificar la clase concreta . Este enfoque implica que se puede utilizar cualquier clase que implemente dicha interfaz. 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 simulada o ficticia durante las pruebas. Estas implementaciones ficticias 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 puede ser llamado directamente; debe ser implementado por código no abstracto para ejecutarse cuando se invoca. Una interfaz llamada " " podría definir dos métodos: y . Puede implementarse de diferentes maneras, por ejemplo, y —la primera es rápida, trabajando con una estructura de datos de tamaño fijo, y la segunda utiliza una estructura de datos que puede redimensionarse, pero a costa de una velocidad algo menor.Stackpush()pop()FastStackGenericStack
Aunque las interfaces pueden contener muchos métodos, también pueden contener solo uno o incluso ninguno. Por ejemplo, el lenguaje Java define la interfaz que tiene un único método; se utilizan diversas implementaciones para diferentes propósitos, incluyendo , , , , y . Las interfaces marcadoras como no contienen ningún método y sirven para proporcionar información en tiempo de ejecución para el procesamiento genérico mediante Reflection . [ 11 ]Readableread()BufferedReaderFileReaderInputStreamReaderPipedReaderStringReaderSerializable
Programación de la interfaz
El uso de interfaces permite un estilo de programación denominado programación orientada a la interfaz . La idea detrás de este enfoque es basar la lógica de programación en las interfaces de los objetos utilizados, en lugar de en los detalles de implementación internos. La programación orientada a la interfaz reduce la dependencia de las especificidades de la implementación y hace que el código sea más reutilizable. [ 12 ]
Llevando esta idea al extremo, la inversión de control permite que el contexto inyecte en el código las implementaciones específicas de la interfaz que se utilizarán para realizar el trabajo.
Interfaces de usuario
Una interfaz de usuario es un punto de interacción entre un ordenador y los seres humanos; incluye diversas modalidades de interacción (como gráficos, sonido, posición, movimiento, etc.) mediante las cuales se transfieren datos entre el usuario y el sistema informático.
Véase 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
- Acoplamiento (programación informática)
- Interfaz de disco duro
- Implementación (informática)
- Herencia de implementación
- Interoperabilidad
- Semántica de la herencia
- Programación modular
- Componentes de software
- Herencia virtual
Referencias
- ↑ Hookway, B. (2014). «Capítulo 1: El sujeto de la interfaz». Interface . MIT Press. págs. 1–58 . ISBN 9780262525503.
- ↑ IEEE 100 - El diccionario autorizado de términos de las normas IEEE . Nueva York, NY, EE. UU.: IEEE Press. 2000. págs. 574–575 . ISBN 9780738126012.
- 1 2 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 Véase también: Patterson, David A.; Hennessey, John L. (2005), «Capítulo 8.5, Interconexión de dispositivos de E/S con el procesador, la memoria y el sistema operativo», Organización y diseño de computadoras: la interfaz 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 9780070483118Consultado el 15 de junio de 2018 .
- ↑ Buyya, R. (2013). Mastering Cloud Computing . Tata McGraw-Hill Education. p. 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 (06/06/2005). "Java de vanguardia: Principios de diseño a partir de patrones de diseño: Programar para una interfaz, no para una implementación - Una conversación con Erich Gamma, Parte III" . artima developer . Archivado del original el 05/08/2011 . Recuperado el 03/08/2011 .
Una vez que dependes solo de las interfaces, te desacoplas de la implementación. Esto significa que la implementación puede variar, y esa es una relación de dependencia saludable. Por ejemplo, para fines de prueba, puedes reemplazar una implementación de base de datos pesada con una implementación simulada más ligera. Afortunadamente, con el soporte de refactorización actual, ya no tienes que crear una interfaz de antemano. Puedes destilar una interfaz a partir de una clase concreta una vez que tengas una comprensión completa del problema. La interfaz deseada está a solo una refactorización de 'extraer interfaz' de distancia. ...
- ↑ Patterson, DA; Hennessy, JL (7 de agosto de 2004). Organización y diseño de computadoras: la interfaz hardware/software (3.ª ed.). Elsevier. pág. 656. ISBN 9780080502571.
- ↑ "¿Qué es una interfaz?" . Los tutoriales de Java . Oracle. Archivado del original el 12 de abril de 2012. Consultado el 1 de mayo de 2012 .
- ↑ "Interfaces" . Los tutoriales de Java . Oracle. Archivado del original el 26 de mayo de 2012. Consultado el 1 de mayo de 2012 .
- ↑ "Técnicas de mejora del rendimiento en la serialización" . Java preciso. Archivado del original el 24/08/2011 . Consultado el 04/08/2011 .
Inicialmente hablaremos de la interfaz Serializable. Esta es una interfaz de marcador y no tiene ningún método.
- ↑ Gamma; Helm; Johnson; Vlissides (1995). Patrones de diseño: Elementos de software orientado a objetos reutilizable . Addison Wesley. págs. 17–18 . ISBN 9780201633610.
- Interfaces
- Programación orientada a objetos
- Estructuras de programación