This work is an introduction to abstract data types and their use in software engineering. Abstract data types are used in almost all stages of software development to formally specify and design programmes and to implement software. Based on an Open University course, the textbook is suitable for first and second year undergraduates in computer science coming to the subject for the first time. The authors' aim is to lead the student through designing, constructing and implementing abstract data types using a number of simple but important concepts of software engineering such as "stack", "queue" and "binary search trees". The two specification methods studied are the axiomatic approach and the constructive approach. Illustrative examples using Modula-2 and Ada and three case studies are considered. The book has been designed as a self-study text; over 100 exercises with fully worked solutions as well as check point questions are provided so that the reader can assess her or his progress.