Loose coupling is the direct opposite of tight coupling. This is a good object-oriented programming practice of separation of concerns by allowing components to have little or no information of the internal workings and implementation of other components. Communication is done through interfaces. This approach allows for an easy substitution of components without many changes to the entire code base. The sample code in the Tight coupling section can be refactored to allow loose coupling:
//The dependency injection would be done using Ninjectpublic ISmppManager smppManager { get; private set; }public void SendSMS(){ smppManager.SendMessage("0802312345","Hello", "John");}public class SmppManager{ private string sourceAddress; ...