= terms
:revnumber: 2.0
:revdate: 2020/07/27



== Object Oriented Programming

Object-oriented programming (OOP) is a programming paradigm that represents concepts as "`objects`" that have data fields (attributes that describe the object) and associated procedures known as methods.

link:http://en.wikipedia.org/wiki/Object-oriented_programming[http://en.wikipedia.org/wiki/Object-oriented_programming]


== Data Oriented Programming

pass:[[This just not exist]]

If you use Data-oriented_languages, you can call it Data Oriented Programming! You may talking about *Data Oriented Design (Architecture)* instead

link:http://stackoverflow.com/questions/4122696/what-is-data-oriented-programming[http://stackoverflow.com/questions/4122696/what-is-data-oriented-programming]

link:http://en.wikipedia.org/wiki/List_of_programming_languages_by_category#Data-oriented_languages[http://en.wikipedia.org/wiki/List_of_programming_languages_by_category#Data-oriented_languages]


== Component Oriented Programming

This is "`the rising force`" we are talking about!

It’s a "`rather new`" programming paradigm. Despite of its name and even the fact it’s was born from the marriage of "`Component base architecture`" and "`Data oriented architecture`", but something different.


== COP’s Entity System in OOP java

Entity System in turn is the Core and fundamental and most obvious implementation design of COP!!!

In fact the implementation detail of Entity system is various, some may resembling database core, some may have troubles with OOP incompatibility, some may appear to get all the good of Functional language…

but note that Entity System really stand on its own terminology on this single page:
We are talking about the ES within COP, but implemented by an pure OOP like Java.


== Data driven programming:

You may refer to this "`Data driven programming`" incorrectly in this ES topic, you may talking about: *Data driven design* instead

In computer programming, data-driven programming is a programming paradigm in which the program statements describe the data to be matched and the processing required rather than defining a sequence of steps to be taken

link:http://en.wikipedia.org/wiki/Data-driven_programming[http://en.wikipedia.org/wiki/Data-driven_programming]


== Data driven solution (architecture):

....
  Data driven, on the other hand, can mean a few different things. A common usage is one you may already be using. For example. abstracting something like:
  if( a == 0 ) doFoo()
  else if( a == 1 ) doBar()
  into:
  Command[] commands….
  commands[a].doIt()
  …is a data-driven design.
....

....
  Data driven solution (architecture) is a software solution (architecture) where everything is from data and to data, data who decide!
....

....
  http://www.enterpriseappstoday.com/business-intelligence/3-rules-for-data-driven-architecture.html
....

....
  It has the "`data force`", that’s why it call '`driven`', the force sometime a "`generative force`"!
....


== Data oriented (design) architecture:

....
  Data oriented design is an approach that extracts the operations on the data from the "`objects`" and flattens the things that they need to run in order to be cache friendly. According to the literature (I got my first exposure in Game Engine Gems 2, Chapter 15), in many cases it actually simplifies the code.
....

From atomix's overview:

Data oriented architecture is focus in Data arrangement and process(delay of data and the dataflow) and everything is Data, with a repository! It have more aspects than Data driven architecture and not talking about "`the force of generative data`".

In hardware level, data oriented appear in structure and operations of chip set, when input and output are carefully design to get batch/cache efficient.

In software level, programming language such as Java:
Data oriented architecture appear as we save everything in a big repository (database… or file repository) then retrieve it to do operations. Important note, the consideration that everything is Data is very important. We can load everything as data, code, configs, signal from network, service… Second the existence of the repository is also important, as it the premise of other concept about ports, dataflow, stream, event, process, monitoring etc…

Compare to service oriented, it care more about the delay of data and the dataflow, not the operation.
Compare to object oriented, it just only have the data concept, not object, instance or what ever…

Data oriented architecture usually involves every generic way to describe data, commonly via XML. They also usually use a data oriented architecture as the base of other.
As seen in hardware level, the signal in send in CPU as the repository, via ports, in a stream, trigger interrupt as Event,…
The same in a software level system, in Java world such as Oracle’s Business Process Management (BPM). They essentially use XML to describe everything and consider everything is Data, also have concept of Ports, Stream, Event, Process…

So normally Data oriented architecture go along with Data driven… but they are two different thing!


=== Why so much people in java world get this wrong at first?

But of course Oracle solution are much more complex than a single chipset, as it also involve EJB, SOAP… with also an candidate for "`Data driven architecture`"… That’s . But EJB and SOAP are essential pieces of BPM "`Data oriented architecture`"!!!
