Background. Software development is a sorry story in some ways, with a very high failure rate, especially for large projects. The field of Software Engineering has attempted to to put the development of software on a sound foundation, but the field is changing fast enough that establishing commonly-agreed-on best practices is difficult.
OOD and OOP. However, there is general agreement on some issues, and one generally accepted best practice is use of object-oriented approaches, using Object-Oriented Design (OOD) and implementing the design with Object-Oriented Programming (OOP). The object-oriented approach (grouping related data and methods into a class) has build on and to a large extent replaced the earlier structured approaches.
Design Patterns. The object-oriented approach was largely developed in the 1990's, but development has continued. Over the last decade a higher-level concept, called design patterns, using combinations of classes to accomplish common tasks, has emerged to become widely accepted as embodying many best practices. No study of OOD and OOP is complete without knowledge of common design patterns.