The course provides the students with the engineering principles, methods and practice of how a large system can be specified, designed and implemented using object oriented techniques. Prerequisites It is required that the course participants have knowledge of and experience of programming. Experience of programming in an object-oriented language, such as Java or C++, will be very helpful. And it is {\bf desirable} that participants of this course should have some basic knowledge of Software Engineering topics such as software cycles, project planning, management, software testing. Aims \& Objectives The overall purpose of the course is to give an understanding of the problems of large-scale software development and how this can be solved using object oriented techniques. The main aim of the course is to teach the understanding and use of object oriented methods to analyse, specify, design and implement large computer systems. At the end of the course the students should be able to: - analyse customer requirements; - use UML for specification of a system of a moderate size; - produce a design based on an object oriented specification; - implement a design; and - be very clear about activities to carry out and the artifacts to produce in a software development, - have a sound grasp of the basic principles and techniques in object-oriented software development, These notes are mostly based on the lectures on a module called Software Engineering and System Development that I have been teaching at Leicester University since 1998. The module is core to 2nd year BSc in Computer Science students, final year BEng and MEng students on electronic and software engineering students, and optional to BSc Maths and Computing Science students, Maths students, and Combined Science students.