This textbook develops an understanding of the software development process and provides design practice using UML. Focusing on design techniques it describes the software process and lifecycle, and covers the main terms and concepts of object orientation and component based engineering. Case studies illustrate the issues involved in real life design, including real time systems, data oriented and component based design.