CSC/ECE 517 Fall 2007/wiki3 4 sa
Take the Interface Segregation principle and catalog the information on it available on the Web. We didn't cover it in class, but you can look it up on the Web or in the ACM DL. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.
Introduction
All the basic design principles converge on the use of abstraction for incorporating flexibility using loose coupling behavior. The Interface Segregation Principle (ISP) provides guidelines for designing interfaces to classes that must provide different services to different clients. The Interface Segregation Principle focuses on the cohesiveness of interfaces with respect to the clients that use them.
Definition
ISP was originally presented in a paper by Robert C. Martin in his Engineering Notebook column for the C++ Report. The paper is still available at the Object Mentor website (ISP).
The essence of Integration Segregation Principle is that "Clients should not be forced to depend upon interfaces that they don’t use."
Some other definitions of ISP are:
- "Many client specific interfaces are better than one general purpose interface"
- "The dependency of one class to another one should depend on the smallest possible interface"
- "Make fine grained interfaces that are client specific."
Web Resources
ISP is very well explained in the original paper (ISP), which has two examples in C++ and an early version of UML. These examples use C++'s multiple inheritance due to the lack of real interfaces in the language. Each interface is defined using an abstract class with pure virtual methods. Even when these examples are good, the use of C++ and the old version of UML might make it harder for people used to languages with support for real interfaces like Java or C# to understand them.
The ISP page at Doodle Project has an example in modern UML [1].
A Java Boutique page is available with a very concise and clear example in UML [2].
The following page contains an interesting example because it relates to real-world objects, in this case a cell phone [3].
Conclusion
Interface Segregation Principle's idea is to see that if there are two non-cohesive functionalities, keep them separate, so that they can be used independent of other. This avoids design of fat interfaces, and provides a clear design to the user (client). Break the functionalities into atomic interfaces that can be then individually accessed by the user.
Note: Santosh Gurijala (skgurija) and Agustin Vega-Frias (jvegafr) are the authors of this page.