These notes present the basic engineering principles, methods and practice of how a large system can be specified, desigined and implemented using object-oriented techniques. The overall purpose of the notes is to give a understanding of problems of large-scale software development and how this can be solved using object-oriented techniques. The main focus is about the use of object-orientation to analyse, specify, design and implement software systems. UML will be used as the modelling language for the specification of a system at different stages in its development.