Coupling: It is defined as a relationship between software modules A and B, and how much one module depends or interacts with another one.
Couplings fall into three major categories.
Modules can be highly coupled (highly dependent), loosely coupled, and uncoupled from each other.
The best kind of coupling is loose coupling, which is achieved through interfaces.
Cohesion: It is defined as a relationship between two or more parts/elements of a module that serves the same purpose.
Generally, a module with high cohesion can perform a specific function efficiently without needing communication with any other modules.
High cohesion enhances the functionality of the module.