Sunday, March 12, 2006

What is the difference between OO and BPM?

The answer is … none!

I know that this is a heretical viewpoint, BPM (and in particular the use of a process engine or BPMS) being regarded as the next great step. I’m not disputing that, I just saying that at a fundamental level OO and BPM are just the same.

To justify my viewpoint lets take at look at what was regarded as OO when people were first thinking about it (Xerox PARC and all that). Objects were considered as things which had the following properties:

  1. Each object could receive messages and change their internal state accordingly.
  2. Each object could send messages to collaborating objects
  3. Many instances of an object could exist at the same time, each having their own state.Objects could inherit parts of their behavior from other objects.

It was a lovely idea, but over the years it just got more and more watered down due to limitations in how technology could support it, market forces and misunderstanding. Look at message transfer between objects. This became nothing more than a (synchronous) procedure call. Look at the idea of state. If more than one user is involved then our objects have to be “stateless” if we want to achieve anything like a decent response time. Inheritance became something to treat very carefully if we want to avoid building brittle, difficult to change, programs. Over time, objects degenerated more and more into simple data objects and the functionality happened someplace else, in modules which had names such as “session beans”.

What about BPM? The BPM paradigm talks about processes, and each process has the following properties:

  1. A process can receive messages and change their internal state accordingly. For example, a user can fill in a credit application and sent this (as a message) to the credit acceptance process. The process changes its state to reflect that the credit application has been received.
  2. A process can send messages to collaborating processes. Continuing with the following example, the process now sends a message to another process, which checks the credit worthiness of the applicant.
  3. Many process instances can exists at the same time, each having their own state, e.g. different credit applications.

Replace process with object and you get the point.

But, I hear you say, an important part of the OO paradigm is inheritance. Where is that in the BPM paradigm? Currently, the idea of process inheritance does seem to be getting much attention, but does that mean it that it is an idea without value?

That is something that I’d like to explore in a later entry.