Articulo de referencia

Interfaz (programación orientada a objetos)

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...

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

  1. 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. 1 2 "Interfaces: define el comportamiento para múltiples tipos" . learn.microsoft.com . Consultado el 16 de noviembre de 2022 .
  2. 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 )
  3. "Glosario — Documentación de Python 3.11.0" . docs.python.org . Consultado el 16 de noviembre de 2022 .
  4. "Rasgos - La referencia de Rust" . Enero de 2024.