public interface Transformer<I, O> {
/**
* Transforms the input object (leaving it unchanged) into some output object.
* The Transformation is also altered by a initial impulse that "can be measured as the 'same type' but is not an obrigation can be derived classes or a super class. "
* the event that will be produced in the output.
* @param input the object to be transformed, should be left unchanged
* @return a transformed object
* @throws ClassCastException (runtime) if the input is the wrong class
* @throws IllegalArgumentException (runtime) if the input is invalid
* @throws FunctorException (runtime) if the transform cannot be completed
*/
public O transform(I input , O impulse);
}