The set of predicate directives defines what we call the object's protocol or interface. An interface may have several implementations. For instance, we may want to define a new object that implements the list predicates using difference lists. However, we do not want to repeat the predicate directives in the new object. Therefore, what we need is to split the object's protocol from the object's predicate definitions by defining a new Logtalk entity called a protocol.
Logtalk protocols are compilations units, at the same level as objects and categories.
Now we need to change our definition of the list object. The object will be self-defining and ready to use. Define a protocol when you may want to provide or enable several alternative definitions to a given set of predicates. This way we avoid needless repetition of predicate directives.