Modules and objects
Modules are a way to organize programs. They are interchangeable and pluggable pieces of code that have well-defined interfaces and hidden implementations. In Java, modules are organized in packages. In Scala, modules are objects; just like everything else. This means that they can be parameterized, extended, and passed as parameters, and so on.
Scala modules can provide requirements in order to be used.
Using modules
We already established that modules and objects are also unified in Scala. This means that we can pass an entire module around our application. It would be useful, however, to show what a module actually looks like. Here is an example:
trait Tick { trait Ticker { def count(): Int def tick(): Unit } def ticker: Ticker }
Here, Tick
is just an interface to one of our modules. The following is its implementation:
trait TickUser extends Tick { class TickUserImpl extends Ticker { var curr = 0 override def count(): Int = curr ...