modular design
Building a program from separate, cohesive, loosely coupled parts (functions, classes, modules) with clear interfaces.
object-oriented design
Designing a program as classes whose objects hold data and collaborate through methods.
reusability
How easily code can be used again, unchanged, elsewhere.