
Solid in Java: Liskov Substitution Principle - puradawid
https://puradawid.pro/java/solid-in-test-automation-liskov-substiitution-principle.html
======
foobar_
Around 2013 I wasted a whole year trying to understand OOP. C2Wiki anyone? OOP
multiplies delivery times by 50 with pointless data bureaucracy and people
wonder why 80% of programming projects are never delivered.

If you are forced to use OOP, just use one method for every class. This is the
function object pattern and you get Liskov Substitution and all the great
SOLID principles for free.

Dependency injection? How about using the service locator.

I think objects make sense as data containers, where data is centralized
within the app and you just have all the data access methods in one place but
for everyday design ... it's the wrong abstraction. A majority of daily code
deals with data transformations and workflows and functions are the best fit
for that.

~~~
kasperni
> A majority of daily code deals with data transformations

I think you confuse _your_ job with what everyone else does.

Do some people mostly work with data transformations? yes they do.

But do some people mostly work with system programming? yes they do.

But do some people mostly work with creating user interfaces? yes they do.

But do some people mostly work with network programming? yes they do.

~~~
foobar_
"Object Oriented design is the Roman Numerals of Computing" \- Rob Pike

------
splittingTimes
Well it would have been nice if he stated his interpretation of the Liskov
Substitution Principle. The way i understood it best was here [1].

A subclass should behave in a way that it never cause problems when it is used
instead of the base class.

In concrete terms:

* No new exceptions are allowed to be thrown, unless they are subtypes of the exception thrown by the base class

* Preconditions cannot be strengthend by the subtype

* Postconditions cannot be weakened by the subtype

For me it is really the focus of using inheritance only if you want
substitutability. Otherwise go with composition.

=== [1]
[https://youtu.be/8ZJ8BVlDIQ4?t=1762](https://youtu.be/8ZJ8BVlDIQ4?t=1762)

------
helmsb
I explained Liskov substitution like this:

Nicholas Cage is an actor, Tom Hanks is an actor however you can’t substitute
a Nic Cage performance for a Tom Hanks performance. Therefore Nic Cage is a
Liskov Substitution Violation.

