• BougieBirdie@lemmy.blahaj.zone
    link
    fedilink
    English
    arrow-up
    61
    ·
    19 hours ago

    Most of my college coursework was around OOP. That said, they actually did a pretty lousy job of explaining it in a practical sense, so since we were left to figure it out ourselves a lot of our assignments ended up looking like this.

    At the end of the program, our capstone project was to build a full stack app. They did a pretty good job simulating a real professional experience: we all worked together on requirements gathering and database design, then were expected to build our own app.

    To really drive home the real world experience, the professor would change the requirements partway through the project. Which is a total dick move, but actually a good lesson on its own.

    Anyway, this app was mostly about rendering a bunch of different views, and something subtly would change that ended up affecting all views. After the fact, the professor would say something to the effect of “If you used good objects, you’ll only have to make the change in one place.”

    This of course is only helpful if you really appreciated the power of OOP and planned it from the start. Most of us were flying by the seat of our pants, so it was usually a ton of work to get those changes in

    • Kache@lemm.ee
      link
      fedilink
      arrow-up
      5
      ·
      5 hours ago

      If you used good objects, you’ll only have to make the change in one place

      IMO that’s generally a retroactive statement because in practice have to be lucky for that to be true. An abstraction along one dimension – even a good one, will limit flexibility in some other dimension.

      Occasionally, everything comes into alignment and an opportunity appears to reliably-ish predict the correct abstraction the future will need.

      Most every other time, you’re better off avoiding the possibility of the really costly bad abstraction by resisting the urge to abstract preemptively.

    • Solemarc@lemmy.world
      link
      fedilink
      arrow-up
      3
      ·
      7 hours ago

      Same, I always remember this with interfaces and inheritance, shoehorned in BS where I’m only using 1 class anyway and talking to 1 other class what’s the point of this?

      After I graduated as a personal project i made a wiki for a game and I was reusing a lot of code, “huh a parent class would be nice here”.

      In my first Job, I don’t know who’s going to use this thing I’m building but these are the rules: proceeds to implement an interface.

      When I have to teach these concepts to juniors now, this is how I teach them: inheritance to avoid code duplication, interfaces to tell other people what they need to implement in order to use your stuff.

      I wonder why I wasn’t taught it that way. I remember looking at my projects that used this stuff thinking it was just messy rubbish. More importantly, I graduated not understanding this stuff…

      • pfm@scribe.disroot.org
        link
        fedilink
        arrow-up
        4
        ·
        5 hours ago

        I wouldn’t say that inheritance is for avoiding code duplication. It should be used to express “is a” relationship. An example seen in one of my projects: a mixin with error-handling code for a REST service client used for more than one service has log messages tightly coupled to a particular service. That’s exactly because someone thought it was ok to reuse.

        In my opinion, inheritance makes sense when you can follow Liskov’s principle. Otherwise you should be careful.

        • Solemarc@lemmy.world
          link
          fedilink
          arrow-up
          2
          ·
          4 hours ago

          You’re not wrong but I think when you’re teaching someone just having 1 parent and 1 child class makes for a bad example I generally prefer to use something with a lot of different children.

          My go-to is exporters. We have the exporter interface, the generic exporter, the accounting exporter and the payroll exporter, to explain it.

          At school, the only time I used inheritance was 1 parent (booking) and 1 child (luxury) this is a terrible example imo.

      • Kache@lemm.ee
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        4 hours ago

        inheritance to avoid code duplication

        What no, inheritance is not for code sharing

        Sound bite aside, inheritance is a higher level concept. That it “shares code” is one of several effects.

        The simple, plain, decoupled way to share code is the humble function call, i.e. static method in certain langs.