In V10, there are many symbols named like "YadaYadaObject"

    Names["*`*Object"] // Length
    (* Out: 136 *)

Are associations used under the hood for these, or is there another general mechanism by which *Mathematica* internally supports these new "objects". I've had a few ideas on how OOP should be implemented in MMA, but I never knew if there was a "preferred way" to do it.