///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
///////////////////////////////////////////////////////////////

[[introduction-background,Background]]
= Background =
Zest™ is the first Composite Oriented Programming implementation leveraging the Java 5 platform, so that everything you
know from Java 5 still applies. You can mix Zest™ with your ordinary Java code as much as you want. All your existing
Java tools works just like before, and Zest™ does not introduce any new programming language, no special development
tools needed and no XML is required.

== Purpose ==
Zest™ addresses the programming problems from the top-down, starting with the Domain Model and Business Rules needs,
and let those requirements flow downwards in the software stack and dictate the requirements for underlying layers
such as persistence, messaging, querying and more. This means that the business value developer is left to
concentrate on the domain models and the actual application bringing the value, instead of creating massive amounts
of glue code to tie underlying technologies together.

== Problem Descriptions ==
Zest™ didn't appear out of the blue, when the founders of the project had nothing better to do. It is the result of
observation of problems in real applications, and the experience from previous attempts to address or correct these
problems, that has led to the Zest™ vision.

== Object Oriented Programming (OOP) ==
How can OOP be a problem? We and others have observed that there is a fundamental flaw in the OOP model. In fact, we
would like to even state that OOP as it is commonly practiced today is not object oriented at all. The object is not
the primary citizen, instead the class is the primary artifact. In most mainstream OOP languages, Objects are derived
from classes, not that classes are assigned to created objects. Therefore, we think it should have been called Class
Oriented Programming. We can also see this class focus in many of the technologies in Java today: in Spring you declare
class names in application contexts, JSP uses class names to declare beans and so forth.

This in turn leads to that there is no good OOP solution for the problem we describe below.

== Behavior depends on Context ==
Once you start thinking of "Behavior depends on Context", you have a hard time understanding how people for the last 20
years or so of Object Oriented Programming (OOP) has ignored this fact.

=== Who am I? ===
When I sitting in front of the computer, I am a software developer, but if I go out in the jungle, I am suddenly
hunter-gatherer and prey. A large set of me is the same, but my interaction with the surroundings, i.e. the context, is
very different. I need different interfaces, so to speak, in these two different contexts.

Now, the above example is perhaps a bit extreme, but we see it in everyday life of the developer. When an object is
stored in the database it is of a different class, than when it is transported to the client and possibly when it is
displayed in the GUI. We see the effect of this problem in many of the design patterns and so called "best practices"
in Java EE development. Facades, delegation, data transport objects and many more.

== Coupling ==
The OOP proponents once proclaimed that classes can be re-used, since the code is encapsulated with the class, so the
class is an independent unit which lends itself well to re-use. In reality, however, we have found that classes becomes
tightly coupled with many other classes in their neighborhood, leading to impossibilities of single class re-use. Many
tricks are introduced to minimize the "Coupling Hell", such as Inversion of Control and Dependency Injection. Although
those tools are good, the underlying problem remains.

Why do we end up with large coupled class network graphs?

Essentially, it boils down to "scope". Classes are too large, their scope is too large, and for each small functional
unit within the class, there will be additional coupling to other classes. And this often progresses to the full
boundary of the entire domain the class remains in.

== Application layer impedance mismatch ==
Almost all technologies used in modern software development, starts by looking at an infrastructural problem and try to
solve that the best way. This is often done in a vacuum and layers on top will be struggling to map or translate the
solution into the higher abstraction, and the higher up we get, the harder it becomes to ignore the assumptions,
problems and limitations of the underlying technologies. It is also common that the underlying technologies "bleeds"
through the layers all the way into the domain models. The "bleed" combined with the problem of using independently
developed technologies, puts a large burden on the application developer, whose job it is to bring business value. And
often, the most skilled developers end up doing the bottom layers, leaving the hardest job to the least suitable.
Another interesting consequence is that each layer needs to anticipate every single use-case - real, potential or
perceived - and deal with it in a specifiable and useful manner. This leads to overly complex solutions, compared to if
the system is built from the top layer down, where each layer beneath knows exactly what is expected from it, and only
needs to handle those use-cases.

== Abstracting away meaning. ==
To paraphrase a famous proverb about a hammer: "If all you have are objects, everything looks like a dependency."
We think that increasing abstraction often also increases complexity, and that the abstraction benefits are somewhat
linear whereas the complexity negatives are exponential. So, our conclusion is that by making no distinction between
different kinds of objects, many sound technologies run into incredibly difficult problems. The implementation of the
programming platform (e.g. Java) is of course easier to implement with a hefty amount of scope reduction into as few as
possible abstractions. But that is not the situation for the user. The abstraction is then required to be reversed when
the rubber hits the road, e.g. ORM mapping must be declared explicitly by the programmer, often using separate tools
and languages.

== Solution ==
We think the solution was expressed more than 2500 years ago, first by Indian scholars and slightly later by Leucippus
and Democritus. We are of course talking about atoms, and by using really small building blocks, we can express
arbitrarily complex structures.
By reducing the classes into what we in Composite Oriented Programming call Fragments, we limit the coupling network
graph substantially. Re-use of Fragments becomes a reality, and by combination of Fragments, we compose larger
structures, the Composites.

== Composition ==
Composite Oriented Programming also view the object, we call it the Composite instance, as the first class citizen. The
Composite instance can be cast to any context, meaning a different behavior can be applied to the Composite instance,
without affecting its underlying state. And back. This in turn means that we can for instance create a
ServerContextualInvoiceEntity, transport that across to a client, cast it to a GuiContextualInvoiceEntity do the
modifications to the underlying state, possibly using extra interfaces and methods for interacting with the GUI
environment, and then transport the modified object back to the server, cast it back to the
ServerContextualInvoiceEntity, and then persist the changes.

== Domain Driven Design focus ==
Composite Oriented Programming is heavily influenced by the book "Domain Driven Design" by Eric Evans. And we are
trying to use his analysis of the problem to provide the mechanisms needed to get the job done quicker and more
reliably. Mr Evans talks about Applications, Layers, Modules, Specifications, SideEffects and so forth, and all of
these should be present in a Composite Oriented Programming implementation, and to a large extent it is in Zest™.
