0% found this document useful (0 votes)
3 views4 pages

Provide Solid Principles With Examples

The document outlines the SOLID principles of object-oriented design, which include the Single Responsibility Principle, Open/Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, and Dependency Inversion Principle, each accompanied by Java code examples. These principles aim to enhance code maintainability, flexibility, and testability. A brief memory trick and an interview answer summarizing the principles are also provided.

Uploaded by

naresh kundrapu
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views4 pages

Provide Solid Principles With Examples

The document outlines the SOLID principles of object-oriented design, which include the Single Responsibility Principle, Open/Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, and Dependency Inversion Principle, each accompanied by Java code examples. These principles aim to enhance code maintainability, flexibility, and testability. A brief memory trick and an interview answer summarizing the principles are also provided.

Uploaded by

naresh kundrapu
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

provide solid principles with examples

SOLID principles are five object-oriented design rules that help make code easier to maintain,
extend, and test. Here’s a simple explanation with Java examples.

1. Single Responsibility Principle


A class should have only one reason to change.

class Invoice {
void calculateTotal() {
System .[Link]("Calculating total");
}
}

class InvoicePrinter {
void printInvoice() {
System .[Link]("Printing invoice");
}
}

Why it matters:

Invoice handles business logic.


InvoicePrinter handles printing.
If printing changes, the invoice calculation class does not need modification.

2. Open/Closed Principle
A class should be open for extension, but closed for modification.

interface Shape {
double area();
}

class Rectangle im plem ents Shape {


double length, width;
Rectangle(double length, double width) {
[Link] = length;
[Link] = width;
}
public double area() {
return length * width;
}
}

class Circle im plem ents Shape {


double radius;
Circle(double radius) {
[Link] = radius;
}
public double area() {
return [Link] * radius * radius;
}
}

Why it matters:

You can add new shapes without changing existing classes.


The system grows by adding new implementations.

3. Liskov Substitution Principle


A subclass should be usable wherever its parent class is expected.

class Bird {
void eat() {
System .[Link]("Bird is eating");
}
}

class Sparrow extends Bird {


void fly() {
System .[Link]("Sparrow is flying");
}
}

Why it matters:

Sparrow can replace Bird without breaking behavior.


If a subclass cannot behave like the parent, the design is wrong.

4. Interface Segregation Principle


A client should not be forced to depend on methods it does not use.

interface Printer {
void print();
}

interface Scanner {
void scan();
}

class MultiFunctionMachine im plem ents Printer, Scanner {


public void print() {
System .[Link]("Printing");
}

public void scan() {


System .[Link]("Scanning");
}
}

Why it matters:

Small, focused interfaces are easier to use and implement.


A class should only implement what it needs.

5. Dependency Inversion Principle


High-level modules should depend on abstractions, not concrete classes.

interface MessageService {
void sendMessage();
}

class Em ailService im plem ents MessageService {


public void sendMessage() {
System .[Link]("Sending em ail");
}
}

class Notification {
private final MessageService service;

Notification(MessageService service) {
[Link] = service;
}

void notifyUser() {
[Link]();
}
}

Why it matters:

Notification depends on the interface, not the concrete email class.


This makes the code easier to test and extend.

Simple memory trick


Single Responsibility: one job.
Open/Closed: extend, don’t modify.
Liskov Substitution: child should work like parent.
Interface Segregation: small interfaces.
Dependency Inversion: depend on abstractions.

Interview answer
A good short answer is:

SOLID is a set of five design principles that improve maintainability and flexibility:
Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, and
Dependency Inversion.

Would you like the same SOLID principles explained with real project examples?

1. [Link]
-binding-with-examples
2. [Link]
3. [Link]
4. [Link]
5. [Link]
6. [Link]
7. [Link]
8. [Link]
9. [Link]
y/
10. [Link]

You might also like