Protocol-oriented programming