Share lang ko gamay sa interfaces. If we do research re interfaces like kana mga oop topics, books, etc, usa sa ato magrasp na application niya kay sa design jud. If implemented properly, one of the foundations cya sa good oop design. Malabyan nato ni cya during school.
However, in real world, there's more to it than just one of the good "rules" in ood. If nakafamiliar mo sa COM technology invented by Microsoft many years ago, so far, murag mao ni ang existing technology karon na ng "unleash" jud sa power sa interfaces, among others. COM is the foundation of many Microsoft technologies, including COM+, DCOM, OLE, ActiveX and .NET. Android pod, murag same idea sa COM but they call it Binder Interfaces.
Overview of COM application in simple terms:
Naa kintahay ko gihimo na new device nga mudetect ug gwapa ang nggamit or dli. Nya iconnect cya thru USB. Ngprovide nasad ko ug driver for the device. Usa ra ka function ang gamit sa device. Mudetect ra if gwapa ang nggamit. For me to easily sell my device to programmers, dapat magamit akong device sa common, if not tanang languages available karon. So normally, other than sa driver, magprovide pod ko ug library (usually written in C/C++) packaged as SDK. To achieve that, my library should be a COM-based library. Meaning naa koy gi-expose na "interface" for other languages to access my library. Why interface man? Why dili man header file lang? Kay interpreted languages (Visual Basic, VBScript, JavaScript, etc) cannot include header files. C/C++ lang ang malipay if header file lang ako iprovide. Thus, COM interface akong iprovide para malipay tanan. Using sa akong giprovide na C/C++ interface, other C/C++, .NET languages, VBScript, JavaScript, etc programmers can access or use my library directly in their code. Chada di ba? Instead of each programmer providing their own codes/functions to use the device.
Simple ra nuon na nga scenario but the idea is there. Windows itself is composed of thousands of libraries na nag expose ug COM based interfaces. Any programmer, regardless of what language you use, can use these libraries (and I mean very powerful libraries as far as functionalities are concerned) by using their provided interfaces.