Revisiting the O in SOLID

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://sightlless.medium.com/revisiting-the-s-in-solid-abfeb358633b

“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

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

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

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

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

And finally, our Volume Calculator would look like this

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

Originally published at https://dev.to on January 17, 2021.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Elyess Eleuch

Elyess Eleuch

I am a JS developer, mainly React and NodeJS. Currently working with Java, SQL and Hibernate.