# Componere

&reftitle.intro;

Componere (latin, English: compose) targets production environments and provides an API for composition of classes, monkey patching, and casting.

## Composition:

`Componere\Definition` is used to define (or redefine) a class at runtime; The class can then be registered, and in the case of redefinition it replaces the original class for as long as the `Componere\Definition` exists.

## Patching:

`Componere\Patch` is used to change the class of a specific instance of an object at runtime; Upon application the patch will remain applied for as long as the `Componere\Patch` exists, and can be reverted explicitly.

## Casting:

`Componere\` casting functions can cast among user defined compatible types; Where compatible means `Type` is sub or super to the type of `object`.

&reference.componere.setup; &reference.componere.componere.abstract.definition; &reference.componere.componere.definition; &reference.componere.componere.patch; &reference.componere.componere.method; &reference.componere.componere.value; &reference.componere.reference;