§2.7.(d) Implicit playedBy specialization

According to §2.1.(d) an implicit sub-role may implicitly specialize an existing playedBy relation. This requires the base class to be specified relative to some implicit (OuterTeam.this) or explicit (OuterTeam.base) team anchor. Specializing that team anchor automatically specializes the playedBy declaration, too. This rule never requires any action from a programmer but only explains the interpretation of a playedBy declaration in complex situations.

Two advanced examples demonstrating the above are:
  • If a role TOuter1.T.R of a nested team TOuter1.T is played by another role of the outer enclosing team TOuter1.B, subclassing the outer team TOuter1 to TOuter2 will produce a new role TOuter2.T.R which is automatically played by TOuter2.B, an implicit sub class of the original base class TOuter1.B.
Implicitly overriding playedBy
  • Consider the case where a nested T1 as a role of TOuter is stacked on a base team TB1. Also, T1 is a layered team over TB1 because its role R adapts role TB1.B.
    In this situation the playedBy relation of role TOuter.T1.R is given by a base-anchored type B<@T1.base>. If furthermore TOuter.T1 is subclassed to TOuter.T2 which covariantly refines the inherited playedBy declaration to TB2, then TOuter.T2.R will automatically refine the inherited playedBy relation to TB2.B to follow the new interpretation of the base anchor.
Implicitly overriding playedBy base