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

    In[74]:= Names["*`*Object"] // Length
    Out[74]= 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.