En la programación orientada a objetos , un tipo de interfaz o protocolo [ a ] es un tipo de dato que actúa como una abstracción de una clase . Describe un conjunto de firmas de métodos , cuyas implementaciones pueden ser proporcionadas por múltiples clases que, de otro modo, no necesariamente están relacionadas entre sí. [ 1 ] Se dice que una clase que proporciona los métodos enumerados en una interfaz implementa la interfaz, [ 1 ] o adopta el protocolo. [ 2 ]
Las interfaces son útiles para la encapsulación y la reducción del acoplamiento . Por ejemplo, en Java , la java.lang.Comparable<T>interfaz especifica el método compareTo(). Por lo tanto, un método de ordenación solo necesita tomar objetos de tipos que implementen java.lang.Comparable<T>para ordenarlos, sin conocer la naturaleza interna de la clase (excepto que dos de estos objetos se pueden comparar a través de compareTo()).
Ejemplos
Algunos lenguajes de programación proporcionan soporte explícito para interfaces: Ada , C# , D , Dart , Delphi , Go , Java , Logtalk , Object Pascal , Objective-C , OCaml , PHP , Racket , Swift , Python 3.8. En lenguajes que admiten herencia múltiple , como C++ , las interfaces son clases abstractas .
En Java, una implementación de interfaces podría tener el siguiente aspecto:
clase Animal { ... } clase Theropod extiende Animal { ... }interfaz Flyable { void fly (); }interfaz Vocal { void vocalizar (); }public class Bird extends Theropod implements Flyable , Vocal { // ... public void fly () { ... } public void vocalize () { ... } }En lenguajes sin soporte explícito, las interfaces a menudo siguen presentes como convenciones; esto se conoce como tipado dinámico . Por ejemplo, en Python , cualquier clase puede implementar un __iter__método y ser utilizada como un iterable . [ 3 ] Las clases también pueden heredar explícitamente de un ABC , como por ejemplo collections.abc.Iterable.
Las clases de tipos en lenguajes como Haskell , o las firmas de módulos en ML y OCaml , se utilizan para muchas de las mismas cosas que las interfaces.
En Rust , las interfaces se llaman traits . [ 4 ] En Rust, una structno contiene métodos, pero puede agregar métodos a través de implbloques separados:
rasgo Mascota { fn hablar ( & sí mismo ); }struct Perro { // Las estructuras solo contienen sus campos nombre : String }impl Perro { // No es de un rasgo fn new ( nombre : String ) -> Self { Perro { nombre } } }impl Mascota para Perro { // Desde un rasgo fn speak ( & self ) { println! ( "{} dice '¡Guau!'" , self . name ); } }fn main () { let perro = Perro :: nuevo ( Cadena :: desde ( "Arlo" )); perro . hablar (); }En C++, existen varias formas de imitar las interfaces. Una de ellas es la interfaz al estilo Java, que se implementa mediante clases abstractas. La otra, similar a las interfaces de Go, consiste en usar conceptos . A diferencia de la herencia, con los conceptos cualquier tipo puede satisfacer un concepto (no solo las clases) siempre que cumpla con todos sus requisitos.
Véase también
Notas
- ↑ El uso de estos términos varía según el lenguaje de programación. Java y los lenguajes derivados de él tienden a usar " interfaz" , mientras que "protocolo" es generalmente más popular en otros contextos.
Referencias
- 1 2 "Interfaces: define el comportamiento para múltiples tipos" . learn.microsoft.com . Consultado el 16 de noviembre de 2022 .
- ↑ Miller, BJ (2015). Sams Teach Yourself Swift in 24 hours . Indianápolis, Indiana. pág. 263. ISBN 978-0-672-33724-6Cualquier
tipo puede adoptar un protocolo para brindarle funcionalidad adicional y así poder realizar un conjunto específico de tareas.
{{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace ) - ↑ "Glosario — Documentación de Python 3.11.0" . docs.python.org . Consultado el 16 de noviembre de 2022 .
- ↑ "Rasgos - La referencia de Rust" . Enero de 2024.
- Programación orientada a objetos
- Tipos de datos
- Comparación de lenguajes de programación
