Object-orientation, abstraction, and data structures using Scala. (2017)