Code360 powered by Coding Ninjas X Naukri.com. Code360 powered by Coding Ninjas X Naukri.com
Table of contents
1.
Introduction
2.
Definition Of Interface Segregation Principle
3.
Example of Interface Segregation Principle Violation
4.
Fixing the Interface Segregation Principle Violation
5.
Tips for Applying Interface Segregation Principle
6.
Benefits of Using Interface Segregation Principle
7.
Frequently Asked Questions
7.1.
How does the Interface Segregation Principle (ISP) differ from the Single Responsibility Principle (SRP)?
7.2.
What are some common mistakes to avoid when implementing the Interface Segregation Principle (ISP)?
7.3.
Are there any potential drawbacks to using the Interface Segregation Principle (ISP)?
8.
Conclusion
Last Updated: Mar 27, 2024
Medium

Interface Segregation Principle in System Design

Author Suraj Pandey
0 upvote
Master Python: Predicting weather forecasts
Speaker
Ashwin Goyal
Product Manager @

Introduction

We all must have driven a toy car in our childhood so let's take this as an example and understand the Interface Segregation Principle which is the letter I in the SOLID principle. The "I" in SOLID stands for "Interface Segregation Principle", which sounds like a big and scary name, but let's understand it through the example of a toy car, it just means that a toy car should have only the buttons and switches that we need to operate it, and no extras that can confuse us.

Interface Segregation Principle

For example, if a toy car has a button that makes it spin really fast, but we don't need that button to make the toy car go forward or backward, it can get in our way and the car can't go forward, and it might be difficult to use. Therefore, a toy car should have only the buttons and switches we need, nothing more.

Similarly, when we develop computer programs, we should include only the necessary functions and features. Unnecessary components can make the program difficult to understand and manage over time. By following this principle, we can create more accessible and maintainable software programs.

Definition Of Interface Segregation Principle

The Interface Segregation Principle (ISP) states that a class should not have to implement methods it does not need, and clients should not be required to use methods they don't need or want.

In simple words, we should only include the parts of the program that the user needs, and we shouldn't add anything extra that might make the program hard to use.

For example, let's say we're making a program that helps us plan a trip. We might only need certain features, like a way to look up flights or find a hotel. We don't need features like ordering food or buying clothes because those things aren't related to planning a trip.

Get the tech career you deserve, faster!
Connect with our expert counsellors to understand how to hack your way to success
User rating 4.7/5
1:1 doubt support
95% placement record
Akash Pal
Senior Software Engineer
326% Hike After Job Bootcamp
Himanshu Gusain
Programmer Analyst
32 LPA After Job Bootcamp
After Job
Bootcamp

Example of Interface Segregation Principle Violation

Let's consider an example that violates the Interface Segregation Principle:

class Vehicle {
public:
    virtual void drive() = 0;
    virtual void park() = 0;
    virtual void fly() = 0;
    virtual void refuel() = 0;
};

In the above code, we have a class called "Vehicle" that has four methods: "drive", "park", "fly", and "refuel". The problem with this code is that not all vehicles can do all of these things. 

For example, a car cannot fly, and an airplane does not need to park. This violates the Interface Segregation Principle because the interface is too broad and includes methods that are not necessary for all vehicles.

Fixing the Interface Segregation Principle Violation

Let's fix the Interface Segregation Principle violation in the previous example.

A better approach would be to split the interface into smaller, more focused interfaces that are specific to each type of vehicle. 

For example:

class RoadVehicle {
public:
    virtual void drive() = 0;
    virtual void park() = 0;
    virtual void refuel() = 0;
};

class FlyingVehicle {
public:
    virtual void fly() = 0;
    virtual void refuel() = 0;
};


Now we have two interfaces, one for road vehicles and one for flying vehicles, each with only the methods that are relevant to that type of vehicle. This follows the Interface Segregation Principle because each interface is focused on a specific set of methods that are necessary for that type of vehicle.

Tips for Applying Interface Segregation Principle

Here are some tips for applying the Interface Segregation Principle in our software design:

  1. Know who will be using the interface: Before creating an interface, we have to think about who will be using it and what they need from it.
  2. Keep the interface focused: An interface should only contain the methods that are needed for its specific user. We should avoid making a large, confusing interface that is hard to use.
  3. Split up large interfaces: If an interface is getting too big, we have to break it down into smaller, more focused interfaces. This will make us easier to use and maintain.
  4. Use inheritance to reuse code: If two interfaces share similar functionality, we can create a base interface that both can inherit from. This can help us to avoid duplicating code.
  5. Don't include unnecessary methods: We should only include methods that are needed and relevant for the user. We should not add methods that aren't needed, as this will make the interface more complex and harder to use.


By following these tips, we can create interfaces that are specific to the needs of our users, easy to work with and contribute to the overall quality of our software design.

Benefits of Using Interface Segregation Principle

Here are the benefits of using the Interface Segregation Principle (ISP) in our software design:

  1. It Makes code more modular, reusable, and maintainable.
  2. Reduces code complexity and makes it easier to understand and use.
  3. Allows for easier addition or removal of features without impacting other parts of the system.
  4. Promotes code reuse, reducing the amount of duplicate code and improving maintainability.

Frequently Asked Questions

How does the Interface Segregation Principle (ISP) differ from the Single Responsibility Principle (SRP)?

The Single Responsibility Principle (SRP) is about making sure that each class in a program has only one job to do. On the other hand, the Interface Segregation Principle (ISP) is about making sure that the interface for a class is designed only for the methods that the class actually uses.

In simpler terms, the SRP is about the responsibilities of a class, while the ISP is about the methods that a class needs to do its job. While they may seem similar, they address different aspects of software design.

What are some common mistakes to avoid when implementing the Interface Segregation Principle (ISP)?

One common mistake when implementing the Interface Segregation Principle is to create interfaces that are too large and have too many methods. This can lead to classes being forced to implement methods they don't actually need or use.

Are there any potential drawbacks to using the Interface Segregation Principle (ISP)?

While there are no major drawbacks to using the Interface Segregation Principle, implementing it can require more upfront design and planning to create smaller, more focused interfaces.

Conclusion

In this blog, we first introduced the Interface Segregation Principle and defined it. We then discussed an example of Interface Segregation Principle violation and explored ways to fix such violations. Additionally, we provided some tips for applying the Interface Segregation Principle effectively and highlighted the benefits of using this principle in software design.

By following the Interface Segregation Principle, developers can create software systems that are easy to maintain, extend, and evolve. Moreover, it enables developers to create more focused and reusable interfaces, reducing the likelihood of unexpected consequences or errors during software development.

You can also consider our System Design Course to give your career an edge over others.

We value your opinions and welcome your comments in the section below. 

Previous article
Liskov Substitution Principle in System Design
Next article
Dependency Inversion Principle in System Design
Live masterclass