SCOOP (Simple Concurrent Object Oriented Programming) is a concurrency model designed for the Eiffel programming language, conceived by Eiffel's creator and designer, Bertrand Meyer.
SCOOP defines a way for an object oriented program to be written without the concept of threads, locks, or other typical multiprogramming methods. This allows the compiler or runtime environment to optimize the amount of concurrency as well as eliminate typical design flaws such as deadlock.
The model was first designed in the early 1990s and published in 1993 in the Communications of the ACM An updated version was described in chapter 30 of the book "Object-Oriented Software Construction". 
A prototype implementation was developed in 1995 by Eiffel Software. An article by Compton and Walker provides an overview of SCOOP and describes another early implementation. Nienaltowski, Arslan and Meyer have published a description of the model as of 2003. Work on SCOOP proceeded at the Chair of Software Engineering at ETH Zurich. SCOOP became available as a standard part of EiffelStudio early in 2011.
Technical overview.
SCOOP works by allowing references to certain objects to be declared as separate. In the code below, an entity codice_1 is declared as a separate type, by specifying the Eiffel language keyword codice_2 in the declaration.
 local_inventory: separate INVENTORY
A separate object may be handled by a SCOOP processor that is different from the processor handling the referencing object. A SCOOP processor is the abstract notion of an autonomous thread of control that handles the execution of operations on one or more objects. SCOOP processors are independent of underlying concurrency mechanisms like processor threads, multiple processor cores, and distributed computer systems.
In addition to the concept of separateness, SCOOP exploits the principles of "design by contract" as part of the SCOOP strategy for synchronizing access to shared separate resources. For example, a precondition for a consumer wishing to access an item in the inventory example above, might be that such an item does currently exist. This would be expressed with a contract on the feature of class codice_3 which returns the item.
 item: PRODUCT
 -- Current item
 require
 inventory_has_item: has_item
In traditional, sequential processing, a client intending to call codice_4 would be responsible for making certain that the precondition codice_5 holds before making the call. If the call to codice_6 were made in a state in which codice_7 did not hold, the caller would incur a precondition violation exception.
In the presence of SCOOP and given the separateness of codice_1, making the check on codice_7 before calling codice_6 would not be reliable. This is because the state of codice_1 could have been changed by requests from other SCOOP processors between the time that the check was made and the time that codice_6 could be called.
As a result, when SCOOP is enabled, the precondition codice_7 is transformed from a correctness condition, which will cause an exception in the case of a violation, to a wait condition. The wait condition will cause the execution of codice_6 to be delayed until such time as codice_7 holds. In the Eiffel Software implementation, if SCOOP is not enabled, the codice_2 keyword is ignored and sequential processing is assumed.
References.
 ;templatestyles src="Reflist/styles.css" / ;