Specifying requirements for properties
In Chapter 4, Inheritance, Abstraction, and Specialization, we worked with simple inheritance to specialize animals. Now, we will go back to this example and refactor it to use protocols that allow us to take advantage of multiple inheritance.
The decision to work with contract-based programming appears with a new requirement, which is the need to make domestic birds and other domestic animals different from domestic mammals that talk and have a favorite toy. We already had a talk
method and a favoriteToy
property defined in the DomesticMammal
class. However, now that we know how to work with protocols, we don't want to introduce duplicate code, and we want to be able to generalize what is required to be domestic, with a specific protocol for this.
We will define the following six protocols and take advantage of inheritance in protocols; that is, we will have protocols that inherit from other protocols, as follows:
AnimalProtocol
: This defines...