Yes it is. For application code at least, I’m pretty sure.
Not claiming any originality here, people smarter than me already noticed this fact ages ago.
Also, don’t misunderstand me, I’m not saying that OOP is bad. It probably is the best variant of procedural programming.
Maybe the term is OOP overused to describe anything that ends up in OO systems.
Things like VMs, garbage collection, type safety, mudules, generics or declarative queries (Linq) are a given, but they are not inherently object oriented.
I think these things (and others) are more relevant than the classic three principles.
Current advice is usually prefer composition over inheritance. I totally agree.
This is very, very important. Polymorphism cannot be ignored, but you don’t write lots of polymorphic methods in application code. You implement the occasional interface, but not every day.
Mostly you use them.
Because polymorphism is what you need to write reusable components, much less to use them.
Encapsulation is tricky. Again, if you ship reusable components, then method-level access modifiers make a lot of sense. But if you work on application code, such fine grained encapsulation can be overkill. You don’t want to struggle over the choice between internal and public for that fantastic method that will only ever be called once. Except in test code maybe. Hiding all implementation details in private members while retaining nice simple tests can be very difficult and not worth the troulbe. (InternalsVisibleTo being the least trouble, abstruse mock objects bigger trouble and Reflection-in-tests Armageddon).
Nice, simple unit tests are just more important than encapsulation for application code, so hello public!
So, my point is, if most programmers work on applications, and application code is not very OO, why do we always talk about inheritance at the job interview? 🙂
If you think about it, C# hasn’t been pure object oriented since the beginning (think delegates) and its evolution is a trajectory from OOP to… something else, something multiparadigm.