Buzz: An extensible programming language for heterogeneous swarm robotics
design patterns : elements of reusable object - oriented software .