This essay says that inheritance is harmful and if possible you should “ban inheritance completely”. You see these arguments a lot, as well as things like “prefer composition to inheritance”. A lot of these arguments argue that in practice inheritance has problems. But they don’t preclude inheritance working in another context, maybe with a better language syntax. And it doesn’t explain why inheritance became so popular in the first place. I want to explore what’s fundamentally challenging about inheritance and why we all use it anyway.

  • @RonSijm
    link
    13 months ago

    How do you “add” types together? Adding numbers makes sense, it has a real world equivalent. Two balls in a cup, add one ball and you have three balls in a cup. Add color to water and you have colored water. Simple. But types? The fuck?

    It makes sense when using some fluent patterns and things like monads. For example:

    User user = new User("Bob"); // User Class
    UserWithPassword user = new User("Bob").WithPassword("Dylan123"); // UserWithPassword Type
    

    A UserWithPassword type would then be a User object wrapper with some IWithPassword interface

    Then you could create extension methods on IWithPassword objects and decorate those objects with password behavior

    You can then have sort of polymorphic behavior by combining types together, and have different functionality available depending on which types you’ve added together