En la programación orientada a objetos , un tipo de interfaz o protocolo [a] es un tipo de datos 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 están necesariamente relacionadas entre sí. [1] Se dice que una clase que proporciona los métodos enumerados en un protocolo adopta el protocolo [2] o implementa la interfaz. [1]
Si los objetos están completamente encapsulados , el protocolo es la única forma en que otros objetos pueden acceder a ellos. Por ejemplo, en Java , la Comparable
interfaz especifica un método compareTo()
que las clases implementadoras deben implementar. Esto significa que un método de ordenación, por ejemplo, puede ordenar una colección de cualquier objeto de tipos que implementen la interfaz Comparable, sin tener que saber nada sobre la naturaleza interna de la clase (excepto que dos de estos objetos se pueden comparar por medio de compareTo()
).
Algunos lenguajes de programación proporcionan soporte explícito para protocolos ( Ada , C# , D , Dart , Delphi , Go , Java , Logtalk , Object Pascal , Objective-C , OCaml , PHP , Racket , Seed7 , Swift , Python 3.8). En lenguajes que admiten herencia múltiple , como C++ , las interfaces se implementan como clases abstractas .
En lenguajes sin soporte explícito, los protocolos suelen seguir estando presentes como convenciones. Esto se conoce como tipado pato . Por ejemplo, en Python , cualquier clase puede implementar un __iter__
método y usarse como una colección . [3]
Las clases de tipos en lenguajes como Haskell , o las firmas de módulos en ML y OCaml , se utilizan para muchas de las cosas para las que se utilizan los protocolos. [ aclaración necesaria ]
En Rust , las interfaces se denominan rasgos . [4]
Cualquier tipo puedeadoptar
un
protocolo para brindarle funcionalidad adicional para realizar un conjunto particular de tareas.
{{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace )