I’ll say this now.
Inheritance is the most misused capability of OOP which programmers think makes their code look smart, but most of the time just makes a giant fucking mess.
Hold on, I’m in the middle of drawing an inheritance graph so I know how Dog is related to AircraftCarrier.
public interface ICanTravelThroughTheAir { } public class Flea : ICanTravelThroughTheAir { } public class AircraftCarrier { private readonly List<ICanTravelThroughTheAir> _aircraft = new(); public void AddAircraft(ICanTravelThroughTheAir flyingThing) { _aircraft.Add(flyingThing); } } public class Dog : AircraftCarrier { public void Woof() { Console.WriteLine("Bitch I'm an aircraft carrier!"); } } public static class Program { public int Main(string[] args) { var dog = new Dog(); for (var i = 0; i < 10000; i++) { dog.AddAircraft(new Flea()); } dog.Woof(); } }Needs more
AbstractDefaultProxyBeanFactoryFactoriesAnd dependency injection!
Every class needs to use DI for calling other classes, even though we’ll have anyway just a single implementation for all of them, and we won’t be using this flexibility at all (not even for tests where it might be useful for mocking dependencies).
Why even use DI if you’re not planning on faking dependencies for unit testing purposes
Its the best/worst thing about OOP no matter what language.
We had a rule at work that if you are 3 levels or more down an inheritance tree, then you are too far. The cognitive load is just too much, plus everything stops making sense.
One level can be great (MVC all have great conventions, MCP as well). Two can be pushing it (Strategy pattern when you have physical devices and cant be connected all the time, Certain kinds of business logic that repeat hundreds of times, etc…) But even there you are kinda pushing it.
I need code that I can look at a month from now and know WTF is happening. And sometimes its better to have less DRY and more comprehension. Or maybe im just a forever mediocre dev and dont see the “light”. I dunno.
When I first started using Go I bemoaned the lack of true inheritance and classes. Now I love it.
PTSD flashbacks to the codebase I started on in 2008 which had… I don’t even remember. Like six or seven levels. Fucking nightmare. I did a printout of the analysis Doxygen gave me and it ended up as a 4x3 meters poster ;_;
Aggregation > composition > inheritance
In over ten years of professional programming, I have never used inheritance without regretting it.
When it’s the right tool, it’s incredibly useful. When it’s the wrong tool, and it often is, it racks up tech debt at an incredible rate.
It works great for technical constructs. E.g. A Button is a UI element. But for anything business logic related, yeah it’ll suck.
Even then there’s rarely a good reason to use inheritance instead of composition.
And not once have I regretted removing inheritance.
That’s wild. What did you use it for?
Some legacy Python code that already used inheritance. I had to extend it, and it was pretty infeasible to refactor the whole thing to not use inheritance. Not sure if I technically regretted that decision, but it was definitely painful, since Python inheritance makes it really hard to follow program control flow.
Non typed inheritance, what could go wrong eh. You can just ‘add’ a function to a class dynamically in python, that is so bad.
Done any C++ classes & inheritance?
It was actually typed. Python had type annotations at the time.
I only wrote C++ very early in my career so I don’t remember much, but I’m sure I at least tried some inheritance in toy games I would write. All of that code was trash though by my standards today.
Still does, but you don’t have to.
So you haven’t had much experience with oop?
I have used OOP design patterns many times, but that doesn’t mean I use inheritance a lot. I almost always reach for interfaces instead.
Well then I understand why inheritance isn’t your thing, I yet have to see an interface in need of inheritance.
Composition over inheritance every day, all day
I LOVE TRAITS. YOU’LL HAVE TO TAKE THEM FROM MY COLD DEAD HANDS
[Insert SpongeBob screaming meme]
TRAITS ARE SO USEFUL AND STRUCTS ARE EASILY REPRESENTED IN MEMORY AND WORKED WITH, COMBINED THEY WILL TAKE OVER THE LINUX KERNEL AND THE WORLD
In case anyone is wondering:

The artist is Princess Hinghoi.
Looks like some circular inheritance, that’s going to cause some issues down stream.
sometimes i wonder what dignity means to certain artists
My guess is that money overwrites dignity in some cases.
Implying that’s not their kink in the first place
Incest?
Sure seems like it.
I’m taking the blonde with the succubus tattoo
The venerable master Qc Na was walking with his student, Anton. Hoping to prompt the master into a discussion, Anton said “Master, I have heard that objects are a very good thing - is this true?” Qc Na looked pityingly at his student and replied, “Foolish pupil - objects are merely a poor man’s closures.”
Chastised, Anton took his leave from his master and returned to his cell, intent on studying closures. He carefully read the entire “Lambda: The Ultimate…” series of papers and its cousins, and implemented a small Scheme interpreter with a closure-based object system. He learned much, and looked forward to informing his master of his progress.
On his next walk with Qc Na, Anton attempted to impress his master by saying “Master, I have diligently studied the matter, and now understand that objects are truly a poor man’s closures.” Qc Na responded by hitting Anton with his stick, saying “When will you learn? Closures are a poor man’s object.” At that moment, Anton became enlightened.
Should’ve listed the source. Bad commenter.
Source: https://wiki.c2.com/?ClosuresAndObjectsAreEquivalent
(Sorry dude, my time was limited by how long I could spare poopin in-between meetings.)
Deref is for smart pointers and not for inheritance.
Let me introduce you to this horror story: Deref Polymorphism https://rust-unofficial.github.io/patterns/anti_patterns/deref.html
c, can i have a object oriented programming
c: no, we have object oriented programming at home.
object oriented programming at home: struct(??)












