DEV Community

loading...
Cover image for Revisiting the O in SOLID

Revisiting the O in SOLID

sightlessdog profile image Elyess Eleuch ・2 min read

good Code

This is a continuation of the SOLID. In the last post, I covered the S and now we will be continuing with the O. So if you didn't check the last post, feel free to click on the link: https://dev.to/sightlessdog/revisiting-the-s-in-solid-150e

Open/Closed Principle:

“An entity should be open for extension, but closed for modification”

Bertrand Meyer,
OO Software Construction

Open for Extension: A module will be said to be open if it is still available for extension.

Closed for modification: This assumes that the module has been given a well-defined, stable description (the interface in the sense of information hiding).

we can achieve that by using a pattern, where high-level modules don't know anything about low-level details. The code is not rigid because nothing would recompile if we add new things, and the code is not fragile because you cannot break the code or let’s say the architecture doesn't let you break things.

Let's use an example for this, everything would be easier to understand.
let's suppose we have a cone class that looks like this
Cone Class

And to make things more complicated, let's say we want to calculate it's volume, then the volume calculator class would look like this
Volume

Easy, right?

But wait for a second, there's another client who doesn't have a cone but has Cube and wants to calculate the volume.

An approach would be to do the logic in the calculator class
Added Cube

And as you can notice, this class (VolumeCalculator) isn't closed for modification. In order to extend it, we had to change it.

Now using the open/closed principle

We would at first define a high-level module like Shape
Shape

And then we would define our concrete shapes separately and by extending the abstract class.
NeWcONE

NewCube

And finally, our Volume Calculator would look like this
Alt Text

And that's how we opened our class for extension by closing it for modification.

Sources :

Meyer, B. (1997): Object-Oriented Software Construction, 2nd edition
http://www.cvc.uab.es/shared/teach/a21291/temes/object_oriented_design/materials_adicionals/principles_and_patterns.pdf
Robert C. Martin “Principles of OOD”
https://www.youtube.com/watch?v=zHiWqnTWsn4&t=2707s
https://www.youtube.com/watch?v=rtmFCcjEgEw
https://www.baeldung.com/solid-principles

Discussion (0)

pic
Editor guide