Object is an heavily overloaded term. So, let's try to put things into perspective. "Object" was first introduced as a CONCEPT, as in Object-Oriented Programming. In this model, you have "stuff", which we'll call objects, that implements a program structure and logic merging procedures AND data on the same "thing". Or object, so to speak. In this new paradigm, we call procedures as Object Methods, and data as Object Properties, linked together as it makes more sense (before this the paradigm said you have code structured in procedures that manipulates data, which existed independently). Then, based on this conceptual model, a lot of really smart people created computer languages. Each one of them used this new paradigm as it seemed fit to solve problems. So "objects" morphed into Classes, Instances, hierarchy, etc. But, let's face it: Object sounds a lot better than Instance or Class, so, sometimes, people used the abstract concept of object to refer to something that was actually implemented (like Bruce Eckel in the quote from before). So, the answer to "what is an object?" is: Anything that has Methods and Properties, merging those two really different things. Really, really simple. You're asking the wrong question: An Object is NOT a Class, nor an instance. Exactly like as a function is not an Algorithm. A function can implement an Algorithm, pulling the concept into the "real world", even if not in a tangible form. But in some languages a Class IS an object (e.g. if you have static methods and properties). In .NET, both classes and class instances are Objects. In Python, EVERYTHING is an object. Conclusion: it's more a matter of asking the right questions.