Click here to Skip to main content
13,000,002 members (47,549 online)
Click here to Skip to main content
Add your own
alternative version


10 bookmarked
Posted 28 Jul 2007

Design Loosely Coupled Modules - Object Oriented Systems

, 28 Jul 2007
Rate this:
Please Sign up or sign in to vote.
This articles explains coupling, explains classification of coupling and gives a simple way to reduce each type of coupling.


This article explains coupling between classes. It also explains the consequences of high coupling. The article then classifies coupling and explains each type of coupling along with the ways to eliminate coupling.


Coupling is the factor of dependency of one class on another class. The factor of coupling varies between low and high. Systems having high coupling are unstable and require more effort to modify. In a system with high coupling factor, modification in one class forces a ripple of changes in other classes and thus increases the effort required for modification. High efforts require more cost. High coupling also decreases the reusability of a class because the dependant class must be included. Classes with high coupling are difficult to understand in isolation. Systems having low coupling are stable and when a change is made in one class, it will not require change in the implementation of other classes.

Coupling is classified as follows.

Content Coupling

Content coupling exists between two classes when one class relies on the internal working of another class, i.e., one class is using the variables of another class. When a class holding content is modified to contain another format of the content then other class using the content should be modified. The coupling factor for content coupling is high. This form of coupling is undesirable because any class can modify the internal data of another class. To reduce use private access control for the contents in the class and provide accessing methods such as getVal and setVal.

Common Coupling

Common coupling exists when classes in the system share a global data. Changing the format of the shared resource requires modifications in all the classes using the global data. To reduce common coupling, create a class to contain global data and add public methods in the class to obtain or modify the global data. One should use critical sections in the class.

External Coupling

External coupling is a dependency of the class on third party classes like MFC, QT, etc. or shares an externally imposed data format, communication protocol or device interface. External coupling can be reduced by using façade pattern.

Control Coupling

Control coupling is when one class controls the logic of another class, by passing it information on what to do, for example, by passing flag or command, thus controlling the sequence of execution. To reduce use polymorphic operations or use a lookup table that will map a command to a method.

Stamp Coupling

Stamp coupling is a form of coupling in which two classes modify or access data in the same object. To reduce add methods to access or modify all data within the object.

Data Coupling

Data coupling is the form of coupling in which one class passes simple data to another as an argument. Coupling is due to interpretation of data, i.e., meaning of data that is passed as argument to the member function of another class. If the meaning of the data that is passed as argument is changed, then the other class has to modify to accommodate the change. To reduce developers should not pass unnecessary arguments and should pass few arguments, each containing more abstract information.

Message Coupling

Message coupling is the lowest possible coupling. Classes are not dependent on each other instead they use a public interface to exchange parameter-less messages (or events).

Routine Call Coupling

Routine call coupling is a form of coupling in which one routine calls another. To reduce the total number of routines that a particular class calls must be reduced. If there is a sequence of two or more routines to compute something and this sequence is used in more than one place, then to reduce routine call coupling a single routine must be written that encapsulates the sequence.

Inclusion Coupling

Inclusion coupling is a form of coupling in which one component includes source code of another component. If the included component changes something on which includer depends or adds something that raises the conflict with something in the includer, then the includer must change. To reduce, do not include components that are not required.


  • Version 1: Initial article without examples


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Milind Shingade
Web Developer
India India
No Biography provided

You may also be interested in...

Comments and Discussions

GeneralGood basics Pin
Simon Dufour22-Sep-10 5:02
memberSimon Dufour22-Sep-10 5:02 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170624.1 | Last Updated 28 Jul 2007
Article Copyright 2007 by Milind Shingade
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid