I've invented a new TLA!
IBP: Interface based programming.
Once you get the hang of .NET, you'll realise how much you really need to think of it as 'interface based programming' rather than OO programming.
The only really beneficial thing about OO is encapsulation and polymorphism.
Inheritence causes as many problems as it solves.
IBP is where it's at!
Implementation inheritance that is..
..it's still incredibly useful, there are just many problems better solved with 'interfaces'.
Understanding how to use interfaces properly is important.
If you have a class that implements an interface you should always defer the implementation of the 'class interface' to the 'interface'.
Throw in a little bit of 'program by contract', don't try and 'save programmers from themselves' and you're away!