Groupoids And Semigroups In Computer Science