I've been reading about the object-capability model as seen in the E programming language. It reminds me of dependency injection, but used pervasively. Rather than calling static methods, you pass in object arguments and call methods in them. https://en.wikipedia.org/wiki/Object-capability_model