In this chapter and Chapter 6, Object-Oriented Programming before it, we learned how Swift can be used as both an object-oriented programming language and a protocol-oriented programming language. In these chapters, we discovered that there are two major differences between the two designs.
The first major difference is that with a protocol-oriented design, we should start with the protocol rather than a superclass. We can then use protocol extensions to add functionality to the types that conform to that protocol, or types that conform to protocols that inherit from that protocol. With object-oriented programming, we started with a superclass. When we designed our vehicle types in a protocol-oriented way, we converted the Vehicle superclass from the object-oriented design, to a Vehicle protocol, and then...