Protocols are widespread and available in many languages, such as Swift, Objective-C, and Clojure. In order to have a common definition, let's go back to the source, the Swift language guide (https://docs.swift.org/swift-book/LanguageGuide/Protocols.html) :
"A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality. The protocol can then be adopted by a class, structure, or enumeration to provide an actual implementation of those requirements. Any type that satisfies the requirements of a protocol is said to conform to that protocol."
This first part of the definition is telling us that, contrary to classes or structures, protocols do not provide implementation details, but only the shape. You can think of...