There have been a bunch of blog entries , with slightly different points of view , discussing the decline of object oriented programming. I think most of them miss the mark communicating the arc of history when it comes to programming paradigms. At a fundamental level, as programming languages have evolved they have improved on two different dimensions: Abstraction - allowing the developer to develop components at higher and higher levels of abstractions. Encapsulation - allowing the developer to hide more and more details from the users of their components. Let me give you a specific example from my C++ days. At the time, I was using the Oracle Call Interface (OCI) - a C language API to connect to Oracle databases. Using Perl::DBI, we used code generation to automatically generate C++ classes based on the schema metadata. The class layout looked something like this: This object oriented design had a few design features that I consider object...