Modern object-oriented programming languages like Java, C#, and Scala have a feature known as parametric polymorphy in type theory. In all three languages this feature is called generics. The HOPE approach interprets processes as a special form of functions reminiscent to functional programming and allows type parameters in their declaration.


A generic graph for iterating through arbitrary collections. The return type will match the type argument for the elements of the iterable.
Fig. 1: A generic graph for iterating through arbitrary collections. The return type will match the type argument for the elements of the iterable.

This enables generic service graphs like the Iterate<T>-graph (cf. Fig. 1), which has a type parameter for the elements of the collections it may iterate. In an abstraction activity, the type parameters can be instantiated, without touching the underlying process model. HOPE provides a very simplified version of generics for graphs, which enables to define a graph type parameter and its upper bound (which is Object by default). The type parameters can then be used in the execution context of a graph and its activities.

Subtype polymorphism allows to have virtual methods whose definition can be overriden in sub classes so that at runtime it is decided which implementation is executed due to the instance on which it is executed. In contrast, parametric polymorphism adds type parameters to class (and method) declarations, which may be set or constrained during inheritance or instantiation via type arguments. The latter already gives a great amount of modeling-time variability. The additional complexity in the useability for non-programmers – whom HOPE adresses – is coped via preconfiguration of activities, hiding complex information (and their configuration) from users with less technical expertise, and hence supporting separation of concerns. This comprises presetting type arguments.