Posts

Showing posts from February, 2016

How Big Is Your Object's Interface? The Answer Might Surprise You!

We have a Person object, eddie. Part of the responsibilities of a Person object is to operate a Car, accessible as eddie.getCar(). Cars are made of parts like Doors and Seats and an Engine. Starting a Car entails starting its Engine. So how would we start eddie's Engine?

eddie.getCar().getEngine().start();
This accomplishes the task, but we see a violation of the Law of Demeter in this code. We can see this quite plainly: look at all the dots! But what is this "law," and who passed it? I don't think Congress concerns itself with these matters (at least not yet). How bad can writing code like this really be?

To understand why we should follow Demeter, we have to see what happens when we don't. Our Person, eddie seems to have a very simple interface so far, a getCar() method. He just has that one method, but that method gives us back a Car with a getEngine() method. That method then gives us an Engine with a start() method. Each intermediate object has a simple in…