An object orientated take on protocols.