What software design principle do Blueprint Interfaces support by letting unrelated classes share a callable contract without class inheritance?