Delegation is a way of making object composition as powerful as inheritance.
In delegation two objects are involved in handling a request a receiving object
delegates operations to its delegate. This is analogous to child class sending
requests to the parent class.
Genericity is technique for defining software components that have more than one
interpretation depending on the data type of parameters. Thus it allows the declaration
of data items without specifying their exact data type.