Modula-2 and Oberon
Programming with abstract data types