The traditional sequential execution model for objects is based on the traditional sequential execution model for functions. In this model it seems that the objects are not executed, but the methods of the objects are executed, and in a similar manner as functions. We could therefore use the same framework of computational models for the methods of objects as the one developed for functions. This framework then allows for the concurrent executions of methods.
We can extend the framework so that it allows for the concurrent execution of objects. For this we have to see that the scheduler for the methods has to make a context switch to the object a method belongs to. In this framework the context switch is done inline with the scheduling of a method, similar to the inline scheduling of functions in the sequential computational model for functions. Apparently, the context switch is the scheduling of the object. Separating the scheduling of objects from the scheduling of methods gives us a scheduler for objects where each object takes care of the scheduling of its methods.
With this, we abstracted from how objects are scheduled. The result is a computational model that allows for the concurrent execution of objects. In this model, each object decides how to schedule its methods. Of course, the scheduling of methods can be inline and thus limiting concurrency to objects only. From this model we can implement the abstract computational model that allows for the concurrent execution of functions or methods, but we can also implement a model that allows for the concurrent execution of objects in which each object decides how to schedule its methods.
What has been a call of a method for a particular object in the sequential execution model has now become a request to that object. How the object handles the request is not important, and so we can abstract from this.