Declaring classes as final enhances our code quality and abstraction dramatically, but is it always correct?| ocramius.github.io