In this chapter, you've learned some important concepts and terminologies related to modularity, including readability and accessibility. You've also learned how the default behavior of the module system can be tweaked for certain specialized needs--using implied dependencies and qualified exports. And more importantly, you've understood some scenarios where such needs might be required, like aggregator modules and certain encapsulation challenges, and how these tweaks might be useful in such cases. We then looked at a few places in the address book viewer application where these tweaks helped us optimize and simplify dependencies while improving encapsulation.
In the next chapter, you'll learn about a whole new way of handling depended abstractions using a powerful concept in Java modularity--using services.