Frans wrote a piece about using an I as a prefix when using interfaces. I agree to him that differentiating between classes and interfaces by a naming convention is a useful thing. But instead of using a prefixed I for the interface, one can also use a postfixed Impl for the implementing class. Because normally you program to an interface, the code that uses the interface becomes much more clean:

<br /> IAccount account = accountFactory.createAccount(accountNumber);<br /> customer.addAmount(amount);<br />

versus

<br /> Account account = accountFactory.createAccount(accountNumber);<br /> customer.addAmount(amount);<br />

Best of both worlds imho: code that isn’t littered with I’s, and a clear distinction between classes and interfaces.