Interfaces - Explained clearly once and for all
Interfaces form a very important part of the Object oriented design paradigm. They are completely abstract or hollow since they do not provide any implementation as such yet they play a critical role in loosely coupling applications by allowing design pattern implementations, helping provide services through disparate systems, unit testing and providing application extensibility and much more. I will explain the concept of interfaces by providing real world inspired examples, examples from .NET framework and common implementations and from my personal coding experiences. This is important as many people I've come across know about interfaces but almost all are a bit confused and never fully in control. Additionally they fail to explain where to use interfaces and their importance. To begin with real world examples, let's take example of an ATM machine. A bank's ATM machine in the 90s was designed to serve its customers with 'any time money'