I keep getting stuck trying to figure out how to grapple with the magnitude of this endeavor. It seems like the most logical way forward is to start by trying to define terms. So, What is an Object?
According to Dictionary.com an object is defined variously:
The dictionary.com entry traces the word origin to the Latin objectāre: “to throw or put before, oppose.” objectāre is, itself, constructed from “ob-” which is a prefix meaning “toward,” “to,” “on,” “over,” “against,” and jacere which can be conjugated as jacio, meaning “to throw away” or “to utter”; or as jaceo, meaning “be situated”.
An object in computer science, according to the Java website, “is a software bundle of related state and behavior. Software objects are often used to model the real-world objects that you find in everyday life. “
According to Wikipedia “an object is a location in memory having a value and referenced by an identifier. An object can be a variable, function, or data structure. In the object-oriented programming paradigm,”object,” refers to a particular instance of a class where the object can be a combination of variables, functions, and data structures.”
It goes on to say that “The object-oriented approach is fundamentally a modeling approach” where “an object is an abstract data type with the addition of polymorphism and inheritance” and “Rather than structure programs as code and data an object-oriented system integrates the two using the concept of an “object”. An object has state (data) and behavior (code).”
I’m reluctant to use the word “monad“, so for now I will say that for these purposes the word “object” refers to any discrete unit or entity that possesses properties and is capable of behaviors.
Then we get into the whole problem of “ontology”. I found a pretty good compare/contrast of the original meaning of ontology and its current meaning in computer science, written by Tom Gruber:
The term “ontology” comes from the field of philosophy that is concerned with the study of being or existence. In philosophy, one can talk about an ontology as a theory of the nature of existence (e.g., Aristotle’s ontology offers primitive categories, such as substance and quality, which were presumed to account for All That Is). In computer and information science, ontology is a technical term denoting an artifact that is designed for a purpose, which is to enable the modeling of knowledge about some domain, real or imagined.
From there we start to go down a rabbit hole of ever-increasing complexity. Which we can get to later.