///////////////////////////////////////////////////////////////
 * 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.
///////////////////////////////////////////////////////////////

[[highlights,Highlights]]
= Highlights =

== Principles ==

Composite Oriented Programming builds on some principles that are not addressed by Object Oriented Programming at all.

* Behavior depends on Context
* Decoupling is a virtue
* Business Rules matter more.
* Classes are dead, long live interfaces.

=== Behavior Depends on Context ===

Many objects has life cycles that are more extensive than the simple model that Object Oriented Programming model wants
us to believe. A few simple examples;

* An egg becomes a chicken which in turn becomes food.
* I am a programmer at work, a father+husband at home, a victim in a traffic accident and hunter and prey in the jungle.

But there is more to it than that. The composition of the object may change over time. My home now has a garage and my car
has different kinds of problems, each with their own state related to it.

In the programming world, we are constantly faced with change of requirements. These changes are often not related to
any real world changes, but people coming to new insights of the problem domain. OOP makes those changes a big deal,
and often we have to tear up large chunks of the model and redo the work.

But wait, there is more.

Some objects traverse different scope boundaries to the extreme. For instance, a Person will have its attributes
changing slightly over time, new abilities will be learnt and so forth, that is mentioned above. The Person will
eventually die, but that doesn't mean that the Person object should be deleted from a system, since the "memory of"
that Person may live on for a long time. In a OOP system, we would need to transfer some of the state from a
LivingPerson class to a DeadPerson class. In Composite Oriented Programming, it is the same object with different
behavior.

We think that one of the the main flaws in OOP is that it is not object oriented at all, but in fact class oriented.
Class is the first class citizen that objects are derived from. Not objects being the first-class citizen to which
one or many classes are assigned.

=== Decoupling is Virtue ===

Decoupling is more important than developers generally think. If you could have every OOP class decoupled from all
other classes, it is easy to re-use that class. But when that class references another class and the chain never ends,
your chances of re-use diminish quickly.

Object Oriented Programming is suffering a lot from this, and many mechanisms have been introduced over time to counter
this problem. In reality, the best we can manage is subsystems of functionality, which client code can re-use. These subsystems tend to be infrastructure related, since domain models are less prone to be similar enough from one
project to the next. Since OOP in reality constrains the the re-use of individual domain classes, we need to re-do
the domain model from scratch every time.

=== Business Rules matter more ===

Smart developers often think that low-level, infrastructure and framework code is more important and cooler to work
with than the simple domain model. In reality, it is the Domain Model that reflects the actual needs and pays the
bills. Infrastructure is just a necessary evil to get things done.

If most developers could focus on the Business Rules and Domain Model, and not have to worry about any infrastructure
issues, such as persistence, transactions, security or the framework housing it all, then productivity would surge. Eric
Evans has written an excellent book about Domain Driven Design, where he goes through the real process that makes the
money for companies. However, it is very hard to follow that book, since one is constantly caught up in constraints
irrelevant to the domain model, introduced by the underlying framework, from the so called smart developers.

image:classes-are-dead.gif[]

Polygene™ is trying to address the flaws of OOP and introduce Composite Oriented Programming to the world, without
introducing new programming languages, or awkward constructs. Heck, we don't even use any XML.

Polygene™ is not a framework. It is a new way to write code. Other people might create frameworks using Polygene™, or create a
framework optimized for Polygene™, but here at Polygene™ we concentrate to make Polygene™ behave well in existing frameworks,
application servers, platforms and environments.

You are to embark on a new journey. Enjoy!

