Traits and Mixin Compositions
Before digging into some actual design patterns, we have to make sure that many of the Scala language concepts are clear to the reader. Many of those concepts will later be used in implementing the actual design patterns, and being aware of the possibilities, limitations, and pitfalls are key factors that enable us to correctly and efficiently write code. Even though those concepts are not considered official design patterns, they could still be used to write good software. In some cases, due to the richness of Scala, some concepts could replace a design pattern by just using language features. After all, as we have already said before, design patterns are there because a programming language lacks features and is not rich enough to complete certain tasks.
The first topic that we will look into is about traits and mixin compositions. They provide the developer with a possibility to share already implemented functionality or to define interfaces for classes in an application. Many of the possibilities, which are provided by traits and mixin compositions for developers, are useful to implement some of the design patterns that we will focus on later in this book. We will go through the following main topics in this chapter:
- Traits
- Mixin compositions
- Multiple inheritance
- Linearization
- Testing traits
- Traits versus classes