SOLID Principles
Published on: 10 September 2025
Tags: #solid #principles #oop
Single Responsibility Principle
classDiagram
class Book {
+String title
+String author
+get_title() String
+get_author() String
}
class BookRepository {
+save(Book book) void
}
BookRepository ..> Book : uses
note for Book "Manages book properties."
note for BookRepository "Handles database interactions for the Book."
Open/Closed Principle
classDiagram
class ShapeDrawer {
+draw_shape(Shape shape) void
}
class Shape {
+draw() void
}
class Circle {
+draw() void
}
class Square {
+draw() void
}
Shape <|-- Circle
Shape <|-- Square
ShapeDrawer o-- Shape
note for Shape "New shapes can be added
by extending this class."
note for ShapeDrawer "This class is closed for
modification but open
for extension."
Liskov Substitution Principle
classDiagram
class Shape {
+get_area() int
}
class Rectangle {
-int width
-int height
+set_width(int width) void
+set_height(int height) void
+get_area() int
}
class Square {
-int side
+set_side(int side) void
+get_area() int
}
Shape <|.. Rectangle
Shape <|.. Square
note "Both Rectangle and Square
can be used where a Shape
is expected."
Interface Segregation Principle
classDiagram
class Workable {
+work() void
}
class Feedable {
+eat() void
}
class Human {
+work() void
+eat() void
}
class Robot {
+work() void
}
Workable <|.. Human
Feedable <|.. Human
Workable <|.. Robot
note "Classes now implement
only the interfaces relevant
to them."
Dependency Inversion Principle
classDiagram
class Notification {
-Notifier notifier
+send_notification() void
}
class Notifier {
+notify() void
}
class EmailNotifier {
+notify() void
}
class SMSNotifier {
+notify() void
}
Notifier <|.. EmailNotifier
Notifier <|.. SMSNotifier
Notification o-- Notifier
note for Notification "Depends on the Notifier
abstraction, not a concrete
class."